ROSbot 3 - ROS 2 API
Detailed information about content of rosbot package for ROS2.
Control
Gamepad
After running the ROSbot XL Manipulation Package, you should be able to control the manipulator. The easiest way to move the manipulator is to connect a gamepad and steer the robot. The graphic below shows how to steer the manipulator using a gamepad.

Drive controls (cmd_vel) are defined in rosbot_joy/config/config.yaml. The manipulator gamepad mappings (XL only) are hardcoded in rosbot_moveit/src/joy2servo.cpp.
ROS API
Namespace policy
Everything below is published under /<namespace>/ when the namespace
launch arg (or ROBOT_NAMESPACE env) is set. Intentional globals:
/tf,/tf_static— bridged via tf_namespace_bridge./parameter_events,/rosout— ROS 2 infra./clock— sim only.
Hard-coded, no runtime opt-out. HW uses push_ros_namespace, sim uses URDF
<remapping> for the controller_manager surface — see
Namespacing and multirobot.
Enforced by
test_namespace_isolation.py.
Available Nodes
| 🤖 | 🖥️ | NODE | DESCRIPTION |
|---|---|---|---|
| ✅ | ✅ | controller_manager | Controller Manager performs two main functions. First, it manages controllers and their required interfaces, handling tasks like loading, activating, deactivating, and unloading. Second, it interacts with hardware components, ensuring access to their interfaces. controller_manager/controller_manager |
| ✅ | ✅ | drive_controller | The controller managing a mobile robot with a differential or omni drive (mecanum wheels). Converts speed commands for the robot body to wheel commands for the base. It also calculates odometry based on hardware feedback and shares it.DiffDriveController or MecanumDriveController diff_drive_controller/diff_drive_controller |
| ✅ | ✅ | ekf_node | Used to fuse wheel odometry and IMU data. Parameters are defined in rosbot_bringup/config/ekf.yaml robot_localization/ekf_node |
| ❌ | ✅ | /gz_bridge | Transmits Gazebo simulation data to the ROS layer ros_gz_bridge/parameter_bridge |
| ❌ | ✅ | gz_ros_control | Responsible for integrating the ros2_control controller architecture with the Gazebo simulator. gz_ros2_control/gz_ros2_control |
| ✅ | ✅ | imu_broadcaster | The broadcaster to publish readings of IMU sensors imu_sensor_broadcaster/imu_sensor_broadcaster |
| ✅ | ❌ | imu_sensor_node | The node responsible for subscriptions to IMU data from the hardware rosbot_hardware_interfaces/rosbot_imu_sensor |
| ✅ | ✅ | joint_state_broadcaster | The broadcaster reads all state interfaces and reports them on specific topics joint_state_broadcaster/joint_state_broadcaster |
| ✅ | ✅ | robot_state_publisher | Uses the URDF specified by the parameter robot*description and the joint positions from the topic joint*states to calculate the forward kinematics of the robot and publish the results using tf robot_state_publisher/robot_state_publisher |
| ✅ | ❌ | rosbot_system_node | The node communicating with the hardware responsible for receiving and sending data related to engine control rosbot_hardware_interfaces/rosbot_system |
| ❌ | ✅ | rosbot_gz_bridge | Transmits data about the robot between the Gazebo simulator and ROS. ros_gz_bridge/parameter_bridge |
| ✅ | ❌ | rosbot_mcu | Microcontroller unit (MCU) communication node. Default: rosbot_mavlink_bridge (MAVLink). With backend:=microros it is replaced by the micro_ros_agent node, which speaks XRCE-DDS to the MCU instead. [rosbot_mavlink_bridge/rosbot_mavlink_bridge] |
Available Topics
| 🤖 | 🖥️ | TOPIC | DESCRIPTION |
|---|---|---|---|
| ✅ | ✅ | cmd_vel | Sends velocity commands for controlling robot motion. geometry_msgs/Twist |
| ✅ | ✅ | diagnostics | Contains diagnostic information about the robot's systems. diagnostic_msgs/DiagnosticArray |
| ✅ | ✅ | dynamic_joint_states | Publishes information about the dynamic state of joints. control_msgs/DynamicJointState |
| ✅ | ✅ | imu/data | Broadcasts IMU (Inertial Measurement Unit) data. sensor_msgs/Imu |
| ✅ | ✅ | joint_states | Publishes information about the state of robot joints. sensor_msgs/JointState |
| ✅ | ✅ | joy | Publishes joystick input data. sensor_msgs/Joy |
| ✅ | ✅ | odometry/filtered | Publishes filtered odometry data. nav_msgs/Odometry |
| ✅ | ✅ | odometry/wheels | Provides odometry data from the base controller of the ROSbot XL. nav_msgs/Odometry |
| ✅ | ✅ | robot_description | Publishes the robot's description. std_msgs/String |
| ✅ | ✅ | scan | Publishes raw laser scan data. sensor_msgs/LaserScan |
| ✅ | ✅ | set_pose | Changes the robot's odometry/filtered pose. geometry_msgs/PoseWithCovarianceStamped |
| ✅ | ✅ | tf | Publishes transformations between coordinate frames over time. tf2_msgs/TFMessage |
| ✅ | ✅ | tf_static | Publishes static transformations between coordinate frames. tf2_msgs/TFMessage |
There are also additional topics related with the ROSbot firmware. For more information about them, please refer to the ROSbot Firmware documentation.
Package Description
rosbot
Metapackage that contains dependencies to other repositories.
rosbot_bringup
The main package responsible for running the physical robot.
Available Launch Files:
rosbot.yaml- activates all logic related to the ROSbot's movement and processing of sensory data.rosbot_xl.yaml- activates all logic related to the ROSbot XL's movement and processing of sensory data.mavlink.launch.py- starts therosbot_mavlink_bridgenode. Selected whenbackend:=mavlink(default). Requires a runtime-switch firmware build on the MCU (the boot handshake'sBACKEND:line picks the MAVLink path) and therosbot_mavlink_bridgepackage on the ROS overlay.microros.launch.py- alternative backend that establishes connection with the hardware using the microROS XRCE-DDS agent. Selected whenbackend:=microros.
rosbot_controller
ROS2 hardware controller for ROSbot. It manages inputs and outputs data from ROS2 control, forwarding it via ROS topics to be read by microROS. The controller.yaml file loads the robot model defined in rosbot_description along with ROS2 control dependencies from rosbot_hardware_interfaces.
Available Launch Files:
controller.yaml- starts controllers related to ros2_control responsible for driving, communication with imu and joint_states publications
rosbot_description
URDF model used for both simulation and as a source of transforms on physical robot. It was written to be compatible with ROS Industrial and preconfigured for ROS2 control.
Available Launch Files:
rosbot.yaml- Load URDF and starts ros2_control hardware interfacesrosbot_xl.yaml- Load URDF and starts ros2_control hardware interfacesrviz.yaml- Launches the RViz configuration for specified robot model.
Main Description Files:
rosbot.urdf.xacro- Final configuration of ROSbot.rosbot_xl.urdf.xacro- Final configuration of ROSbot XL.
rosbot_gazebo
Launch files for Gazebo working with ROS2 control.
Available Launch Files:
simulations.yaml- Runs simulations with a defined robot and all sensors on it.spawn_robot.yaml- Allow to spawn new robot in already running simulation.
rosbot_localization
A package related to the logic responsible for performing sensor fusion.
Available Launch Files:
ekf.yaml- Runs ekf filter which fuse wheel odometry with imu data.
rosbot_utils
A package containing auxiliary nodes and utilities for the ROSbot Series.
Available Launch Files:
battery_alert.yaml- launch the node that plays an audible alert when the battery level drops below a threshold.