cubs2_simulation ================ Simulation runtime nodes for the Cubs2 SportCub aircraft. This package contains the ROS2-specific simulation nodes that integrate dynamics and control. For detailed API documentation, see :doc:`../api/simulation`. Nodes ----- sim.py ^^^^^^ Main aircraft simulation node. **Published Topics:** * ``/sportcub/pose`` (geometry_msgs/PoseStamped) - Aircraft position and orientation * ``/sportcub/velocity`` (geometry_msgs/TwistStamped) - Body-frame velocities * ``/sportcub/imu`` (sensor_msgs/Imu) - IMU measurements * ``/clock`` (rosgraph_msgs/Clock) - Simulation time **Subscribed Topics:** * ``/control`` (cubs2_msgs/AircraftControl) - Control inputs * ``/reset`` (std_msgs/Empty) - Reset simulation * ``/pause`` (std_msgs/Empty) - Pause/unpause simulation * ``/set_speed`` (std_msgs/Float64) - Set simulation speed multiplier * ``/set_dt`` (std_msgs/Float64) - Set integration time step **Parameters:** * ``rate`` (float, default: 1.0) - Real-time speed multiplier * ``dt`` (float, default: 0.01) - Integration time step (seconds) pose_to_tf.py ^^^^^^^^^^^^^ Publishes TF transforms from pose messages. **Subscribed Topics:** * ``/sportcub/pose`` (geometry_msgs/PoseStamped) **Published:** * TF transform from ``map`` to ``vehicle`` frame gamepad_control.py ^^^^^^^^^^^^^^^^^^ Gamepad/joystick control interface. **Subscribed Topics:** * ``/joy`` (sensor_msgs/Joy) **Published Topics:** * ``/control`` (cubs2_msgs/AircraftControl) **Features:** * Configurable button/axis mappings * Dead-zone handling * Exponential stick response Usage ----- Launch Simulation ^^^^^^^^^^^^^^^^^ .. code-block:: bash ros2 run cubs2_simulation sim With Launch File ^^^^^^^^^^^^^^^^ .. code-block:: bash ros2 launch cubs2_bringup sim.xml Gamepad Control ^^^^^^^^^^^^^^^ .. code-block:: bash ros2 launch cubs2_bringup gamepad_control.xml Configuration ------------- Simulation Parameters ^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash # 2x speed simulation ros2 param set /sim rate 2.0 # Finer time step for accuracy ros2 param set /sim dt 0.001 # Reset to initial conditions ros2 topic pub /reset std_msgs/Empty Gamepad Mapping ^^^^^^^^^^^^^^^ Edit gamepad configuration in ``cubs2_bringup/launch/gamepad_control.xml``: .. code-block:: xml Testing ------- .. code-block:: bash colcon test --packages-select cubs2_simulation colcon test-result --verbose Dependencies ------------ **ROS2 Packages:** * rclpy * std_msgs * geometry_msgs * sensor_msgs * visualization_msgs * tf2_ros **Cubs2 Packages:** * cubs2_msgs - Control message definitions * cubs2_dynamics - Aircraft dynamics models * cubs2_control - Control algorithms **Python Libraries:** * numpy Architecture ------------ Simulation nodes use a composition-based architecture: 1. **Dynamics Layer** (``cubs2_dynamics``) - Pure dynamics, no ROS 2. **Control Layer** (``cubs2_control``) - Reusable controllers 3. **Runtime Layer** (this package) - ROS2 integration This separation allows dynamics and control to be tested independently and reused on hardware.