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?
After completing this Learning Path, you'll be able to perform the following tasks:
- 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'll need the following prerequisites:
- 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.
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.
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.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./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.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.