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 robot container 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

AI-assisted

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.

Close
?
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

AI-assisted

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.

Close
?
Which Zenoh roles do I use for the server, control container, and Raspberry Pi?
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.
How do I get the control container ID before configuring its Zenoh client session?
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.
Do I need to log out and back in after installing Docker on the Raspberry Pi?
Yes. After adding your user to the docker group, log out and log back in so the new group membership takes effect.
What result should I expect when I list topics on the Raspberry Pi, and what does it confirm?
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.
How do I isolate multiple robots that share a Zenoh router?
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.
Next