Skip to main content

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.

gamepad_rosbot

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

🤖🖥️NODEDESCRIPTION
controller_managerController 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_controllerThe 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_nodeUsed to fuse wheel odometry and IMU data. Parameters are defined in rosbot_bringup/config/ekf.yaml
robot_localization/ekf_node
/gz_bridgeTransmits Gazebo simulation data to the ROS layer
ros_gz_bridge/parameter_bridge
gz_ros_controlResponsible for integrating the ros2_control controller architecture with the Gazebo simulator.
gz_ros2_control/gz_ros2_control
imu_broadcasterThe broadcaster to publish readings of IMU sensors
imu_sensor_broadcaster/imu_sensor_broadcaster
imu_sensor_nodeThe node responsible for subscriptions to IMU data from the hardware
rosbot_hardware_interfaces/rosbot_imu_sensor
joint_state_broadcasterThe broadcaster reads all state interfaces and reports them on specific topics
joint_state_broadcaster/joint_state_broadcaster
robot_state_publisherUses 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_nodeThe node communicating with the hardware responsible for receiving and sending data related to engine control
rosbot_hardware_interfaces/rosbot_system
rosbot_gz_bridgeTransmits data about the robot between the Gazebo simulator and ROS.
ros_gz_bridge/parameter_bridge
rosbot_mcuMicrocontroller 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

🤖🖥️TOPICDESCRIPTION
cmd_velSends velocity commands for controlling robot motion (use_stamped_vel: true).
geometry_msgs/TwistStamped
diagnosticsContains diagnostic information about the robot's systems.
diagnostic_msgs/DiagnosticArray
dynamic_joint_statesPublishes information about the dynamic state of joints.
control_msgs/DynamicJointState
imu/dataBroadcasts IMU (Inertial Measurement Unit) data.
sensor_msgs/Imu
joint_statesPublishes information about the state of robot joints. On hardware the effort field carries wheel motor torque (measured on ROSbot XL rev 1.2, back-EMF estimate otherwise); in simulation effort is NaN.
sensor_msgs/JointState
joyPublishes joystick input data.
sensor_msgs/Joy
odometry/filteredPublishes filtered odometry data.
nav_msgs/Odometry
odometry/wheelsProvides odometry data from the base controller of the ROSbot XL.
nav_msgs/Odometry
robot_descriptionPublishes the robot's description.
std_msgs/String
scanPublishes raw laser scan data.
sensor_msgs/LaserScan
set_poseChanges the robot's odometry/filtered pose.
geometry_msgs/PoseWithCovarianceStamped
tfPublishes transformations between coordinate frames over time.
tf2_msgs/TFMessage
tf_staticPublishes 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.

Available Services

🤖🖥️SERVICEDESCRIPTION
led_strip/enableROSbot XL only. Enables (data: true) or disables (data: false) the LED strip animation. While disabled the led_strip_manager node neither computes nor publishes the led_strip image.
std_srvs/SetBool

Packages

One-line purpose per package; full detail (launch flows, internals) in ARCHITECTURE.md.

PackageDescription
rosbotMeta-package — pins sibling repos via *.repos, no code.
rosbot_bringupHardware entry point: per-model bringup + MCU backend (MAVLink default / micro-ROS). Local-only.
rosbot_controllerros2_control setup — spawns drive, IMU and joint-state controllers (plus the manipulator on XL).
rosbot_descriptionURDF/xacro for hardware and simulation, robot configurations, robot_state_publisher.
rosbot_gazeboGazebo simulation launch and robot spawning. Local-only.
rosbot_hardware_interfacesC++ ros2_control plugins (RosbotSystem, RosbotImuSensor) — the firmware ABI.
rosbot_joyJoystick teleop for driving (joy_node + teleop_twist_joy).
rosbot_localizationEKF fusing wheel odometry + IMU → odometry/filtered.
rosbot_moveitMoveIt manipulation for the OpenMANIPULATOR-X (XL only) — see MANIPULATOR.md.
rosbot_utilsUtilities: firmware flashing, robot configuration, udev rules, battery alert, LED strip.