ROS 2 Robots
RosFit supports any ROS 2 robot out of the box. Choose between a rosbridge WebSocket connection for quick prototyping or the MQTT bridge for production deployments that need to traverse NATs, VPNs, and unreliable networks.
Connection via rosbridge
The fastest way to connect a ROS 2 robot is through rosbridge. RosFit's cloud agent subscribes to the rosbridge WebSocket endpoint on your robot and automatically discovers published topics.
Install rosbridge on your robot:
sudo apt install ros-humble-rosbridge-suite
Launch the rosbridge server:
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
Then configure RosFit to connect to the robot by adding an entry to fleet.yaml:
fleet:
- device_id: turtlebot-01
connection: rosbridge
host: 192.168.1.42
port: 9090
discover_topics: true
topic_allowlist:
- /odom
- /scan
- /cmd_vel
- /battery_state
- /camera/image_raw/compressed
When discover_topics is enabled, RosFit queries the rosbridge /rosapi/topics service on startup and periodically thereafter. Any new topic that appears on the robot is automatically registered in the cloud. Use topic_allowlist or topic_denylist to control which topics are forwarded.
Connection via MQTT bridge
Use the MQTT bridge when your robots operate across multiple sites, sit behind NAT or corporate firewalls, or need store-and-forward reliability over intermittent connections.
Install the RosFit MQTT bridge node:
pip install rosfit-bridge
Create a bridge.yaml with explicit topic mapping:
device_id: turtlebot-01
mqtt:
host: cloud.rosfit.io
port: 8883
tls: true
token: mqtt_tok_xxxxx
bridges:
# Telemetry — robot → cloud
- ros_topic: /odom
mqtt_topic: rosfit/turtlebot-01/telemetry/odom
direction: ros_to_mqtt
qos: 1
- ros_topic: /scan
mqtt_topic: rosfit/turtlebot-01/telemetry/scan
direction: ros_to_mqtt
qos: 0
- ros_topic: /battery_state
mqtt_topic: rosfit/turtlebot-01/telemetry/battery
direction: ros_to_mqtt
qos: 1
# Commands — cloud → robot
- ros_topic: /cmd_vel
mqtt_topic: rosfit/turtlebot-01/command/cmd_vel
direction: mqtt_to_ros
qos: 1
- ros_topic: /navigate_to_pose
mqtt_topic: rosfit/turtlebot-01/command/navigate
direction: mqtt_to_ros
qos: 1
Start the bridge as a ROS 2 node:
rosfit bridge start --config bridge.yaml
The bridge reconnects automatically on network interruptions and queues messages locally until the connection is restored.
Supported platforms
RosFit has been tested with a wide range of ROS 2 robots. If your platform runs ROS 2, it will work — the tables below list robots with verified integration tests.
AMR / mobile robots
| Robot | Vendor | Connection | Tested topics |
|---|---|---|---|
| TurtleBot 3 (Burger / Waffle Pi) | ROBOTIS | rosbridge, MQTT | /odom, /scan, /cmd_vel, /imu |
| TurtleBot 4 (Lite / Standard) | Clearpath | rosbridge, MQTT | /odom, /scan, /cmd_vel, /oakd/rgb/preview/image_raw |
| ROSbot XL | Husarion | MQTT | /odom, /scan, /cmd_vel, /imu, /battery |
| Panther | Husarion | MQTT | /odom, /scan, /cmd_vel, /e_stop |
| Jackal UGV | Clearpath | rosbridge, MQTT | /odom, /cmd_vel, /imu, /navsat/fix |
| Husky UGV | Clearpath | rosbridge, MQTT | /odom, /cmd_vel, /imu |
| NVIDIA Carter | NVIDIA | MQTT | /odom, /scan, /cmd_vel, /rgb_left |
| Custom diff-drive | Any | rosbridge, MQTT | Any standard ROS 2 topics |
Robot arms
| Robot | Vendor | Connection | Tested topics |
|---|---|---|---|
| UR3 / UR5 / UR10 / UR16 | Universal Robots | MQTT | /joint_states, /scaled_joint_trajectory_controller/follow_joint_trajectory |
| OpenManipulator-X | ROBOTIS | rosbridge | /joint_states, /gripper_position |
| Franka Panda (FR3) | Franka Emika | MQTT | /joint_states, /franka/robot_state |
| Kinova Gen3 | Kinova | MQTT | /joint_states, /kortex_driver/base/play_cartesian_trajectory |
| xArm 5/6/7 | UFACTORY | MQTT | /joint_states, /xarm/set_position |
Legged robots
| Robot | Vendor | Connection | Tested topics |
|---|---|---|---|
| Go2 | Unitree | MQTT | /odom, /cmd_vel, /imu, /sport_mode |
| B2 | Unitree | MQTT | /odom, /cmd_vel, /imu |
| Spot | Boston Dynamics | MQTT (via Spot ROS 2 driver) | /odom, /cmd_vel, /status/battery, /camera/frontleft |
| ROSpider | Community | rosbridge | /joint_states, /cmd_vel |
Aerial robots
| Robot | Vendor | Connection | Tested topics |
|---|---|---|---|
| PX4 Autopilot | PX4 | MQTT (via px4_ros_com) | /fmu/out/vehicle_odometry, /fmu/in/offboard_control_mode |
| Crazyflie 2.x | Bitcraze | rosbridge | /odom, /cmd_vel, /battery |
| ArduPilot SITL / Copter | ArduPilot | MQTT (via ardupilot_ros) | /odom, /cmd_vel, /mavros/state |
Simulation
You can develop and test RosFit integrations without physical hardware by using a simulator. RosFit treats simulated robots identically to real ones — the same bridge.yaml configuration works in both cases.
| Simulator | Versions | Notes |
|---|---|---|
| Gazebo Fortress (Classic) | Ignition Fortress | Ships with TurtleBot 3/4 worlds. Use ros_gz_bridge for topic bridging. |
| Gazebo Harmonic | Harmonic (latest LTS) | Recommended for new projects. Native ROS 2 integration via ros_gz. |
| NVIDIA Isaac Sim | 2023.1+ | High-fidelity rendering, synthetic data generation. ROS 2 bridge built in. |
| Webots | R2023b+ | Lightweight, cross-platform. Official ROS 2 packages available. |
To connect a Gazebo simulation to RosFit, launch the simulation and the RosFit bridge side by side:
# Terminal 1 — launch Gazebo with a TurtleBot 3
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
# Terminal 2 — start the RosFit bridge
rosfit bridge start --config bridge.yaml
The simulated robot's telemetry will appear in your RosFit dashboard within seconds.