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

RobotVendorConnectionTested topics
TurtleBot 3 (Burger / Waffle Pi)ROBOTISrosbridge, MQTT/odom, /scan, /cmd_vel, /imu
TurtleBot 4 (Lite / Standard)Clearpathrosbridge, MQTT/odom, /scan, /cmd_vel, /oakd/rgb/preview/image_raw
ROSbot XLHusarionMQTT/odom, /scan, /cmd_vel, /imu, /battery
PantherHusarionMQTT/odom, /scan, /cmd_vel, /e_stop
Jackal UGVClearpathrosbridge, MQTT/odom, /cmd_vel, /imu, /navsat/fix
Husky UGVClearpathrosbridge, MQTT/odom, /cmd_vel, /imu
NVIDIA CarterNVIDIAMQTT/odom, /scan, /cmd_vel, /rgb_left
Custom diff-driveAnyrosbridge, MQTTAny standard ROS 2 topics

Robot arms

RobotVendorConnectionTested topics
UR3 / UR5 / UR10 / UR16Universal RobotsMQTT/joint_states, /scaled_joint_trajectory_controller/follow_joint_trajectory
OpenManipulator-XROBOTISrosbridge/joint_states, /gripper_position
Franka Panda (FR3)Franka EmikaMQTT/joint_states, /franka/robot_state
Kinova Gen3KinovaMQTT/joint_states, /kortex_driver/base/play_cartesian_trajectory
xArm 5/6/7UFACTORYMQTT/joint_states, /xarm/set_position

Legged robots

RobotVendorConnectionTested topics
Go2UnitreeMQTT/odom, /cmd_vel, /imu, /sport_mode
B2UnitreeMQTT/odom, /cmd_vel, /imu
SpotBoston DynamicsMQTT (via Spot ROS 2 driver)/odom, /cmd_vel, /status/battery, /camera/frontleft
ROSpiderCommunityrosbridge/joint_states, /cmd_vel

Aerial robots

RobotVendorConnectionTested topics
PX4 AutopilotPX4MQTT (via px4_ros_com)/fmu/out/vehicle_odometry, /fmu/in/offboard_control_mode
Crazyflie 2.xBitcrazerosbridge/odom, /cmd_vel, /battery
ArduPilot SITL / CopterArduPilotMQTT (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.

SimulatorVersionsNotes
Gazebo Fortress (Classic)Ignition FortressShips with TurtleBot 3/4 worlds. Use ros_gz_bridge for topic bridging.
Gazebo HarmonicHarmonic (latest LTS)Recommended for new projects. Native ROS 2 integration via ros_gz.
NVIDIA Isaac Sim2023.1+High-fidelity rendering, synthetic data generation. ROS 2 bridge built in.
WebotsR2023b+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.