Distribute a ROS 2 robotic system across Arm devices with Zenoh
Introduction
Understand the distributed ROS 2 topology
Connect the ROS 2 control container with Zenoh
Connect the Raspberry Pi
Verify cross-device ROS 2 communication
Isolate multiple ROS 2 robots that share a Zenoh router
Next Steps
Distribute a ROS 2 robotic system across Arm devices with Zenoh
Who is this for?
This Learning Path is for robotics developers who want to distribute an existing ROS 2 system across Arm-based cloud and edge devices.
What will you learn?
Upon completion of this Learning Path, you will be able to:
- Understand how Zenoh router and client modes support ROS 2 communication across containers and physical devices
- Configure a remote control container to connect to a ROS 2 simulation through rmw_zenoh
- Connect a Raspberry Pi to the Zenoh router running on an Arm server
- Verify ROS 2 sensor data and messages flowing in both directions between the server and Raspberry Pi
Prerequisites
Before starting, you will need the following:
- Complete the
Build a ROS 2 and Zenoh simulation environment on an Arm server
Learning Path, with the
robotcontainer running the Zenoh router and ROX simulation - A Raspberry Pi 4 or Raspberry Pi 5 (16 GB SD card or larger), aarch64, on the same network as the server
- Familiarity with ROS 2 topics, Docker, and basic Linux command-line operations
Summary
This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
You’ll extend a single-server ROS 2 system across an Arm server, a
control container, and a Raspberry Pi. First, you’ll learn about Zenoh router and client roles, then configure the control container and verify remote RViz communication. Next, you’ll connect a 64-bit Raspberry Pi, start its edge container, and verify graph discovery, sensor data, and bidirectional messages. Finally, you’ll compare ROS namespaces, ROS_DOMAIN_ID, and Zenoh namespaces for separating multiple robots.Frequently asked questions
These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
Use the Zenoh router in the
robot container on the Arm server. Use a Zenoh client session in the control container and another on the Raspberry Pi. Both sessions connect to the router.Run
docker ps on the Arm server and find ros_zenoh-control-1. Copy its CONTAINER ID and run docker exec -it <container_id> /bin/bash before editing the session configuration.Yes. After adding your user to the docker group, log out and log back in so the new group membership takes effect.
Expect a full list of topics, roughly 80 entries, including
/camera/image_raw, /cmd_vel, /map, and /scan. This confirms that you have ROS 2 graph discovery through the Zenoh client, but it doesn’t by itself prove that message data is arriving.Use ROS namespaces when you want one station to supervise several robots while keeping their topics distinguishable. Use separate
ROS_DOMAIN_ID values when independent groups must not see one another. Use a Zenoh namespace when you want isolation without changing ROS-side names.