Skip to main content

ROS 2 Integration

The ADOS Drone Agent includes an opt-in ROS 2 Jazzy environment that runs inside a Docker container alongside the main agent. When you enable it, a bridge node reads your flight controller data and publishes it as standard ROS 2 topics. You can write your own nodes, run perception algorithms, plan trajectories, and visualize everything in Foxglove Studio from your browser. If you don’t need ROS, nothing changes. The Docker container only starts when you explicitly initialize it.

Who is this for?

  • Researchers who want to prototype algorithms (VIO, SLAM, path planning) on a real drone without building the ground-up infrastructure
  • Commercial integrators building custom perception or inspection pipelines on top of the ADOS platform
  • Developers who want access to the ROS 2 package ecosystem (Nav2, Foxglove, behavior trees, point clouds)
  • Students learning robotics who want a real drone instead of just simulation

How it works

The agent’s MAVLink service owns the flight controller serial connection. It writes decoded frames to a Unix socket at /run/ados/mavlink.sock. The Docker container bind-mounts this socket, and the MAVLink Bridge Node reads it and publishes 11 standard ROS 2 topics. Foxglove Studio connects over WebSocket to visualize everything.

Quick start

1
Initialize the environment
2
From the GCS ROS tab or the CLI:
3
ados ros init --profile minimal --middleware zenoh
4
This pulls the Docker image (about 800 MB), starts the container, and launches the bridge and Foxglove.
5
Connect Foxglove
6
Open Foxglove Studio in your browser and connect to:
7
ws://your-drone-ip:8766
8
You should see IMU data, GPS coordinates, battery state, and FC status streaming in real time.
9
Write your first node
10
ados ros create-node my_planner --template planner
ados ros build
ados ros launch my_planner planner_node
11
This scaffolds a Python node that subscribes to /odom and publishes velocity commands to /cmd_vel. Edit the code in ~/ados_ws/src/my_planner/ and it auto-rebuilds on save.

What you get

ComponentDescription
MAVLink Bridge NodeReads the agent’s IPC socket, publishes 11 mavros-compatible topics
Camera NodeUSB UVC camera capture, publishes /camera/image_raw and /camera/camera_info
Foxglove BridgeWebSocket server on port 8766 for real-time visualization
Developer Workspace~/ados_ws/ with colcon build, auto-rebuild on save, package templates
MCAP RecordingRecord topics to MCAP files for offline analysis and replay
ados ros CLI10 commands for status, init, create-node, build, topic echo, recording, and more
REST API14 endpoints at /api/ros/* for programmatic access

Profiles

Different use cases need different amounts of compute. Profiles control which services start inside the container.
ProfileRAMWhat it includes
Minimal~340 MBBridge + Foxglove only. Good for telemetry visualization and basic node development.
VIO~900 MBMinimal + camera node + VINS-Fusion. For GPS-denied flight using visual-inertial odometry.
Mapping~900 MBMinimal + camera node + octomap. For 3D occupancy mapping.
CustomVariesYou choose which packages to launch.

Supported boards

Not every board has enough RAM or CPU for ROS 2. The agent checks the board profile at init time.
BoardRAMROS SupportMax Profile
Rock 5C Lite16 GBYesVIO
RK3588S2 boards4+ GBYesVIO
RK3576 boards4+ GBYesVIO
Raspberry Pi 58 GBYesVIO
Raspberry Pi 4B4 GBYesMinimal
Jetson Orin Nano4-8 GBYesMinimal
Boards with less than 4 GB-No-

Next steps

Published Topics

All 11 MAVLink-to-ROS topics with message types and rates

Workspace Guide

Creating nodes, building packages, and using templates

Network Access

Three ways to access your drone’s ROS environment

Foxglove Studio

Visualizing topics, recording data, and custom layouts