# [Build and deploy multi-node Zenoh systems on Raspberry Pi](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/)
- [Build scalable communication systems with Eclipse Zenoh](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/1_intro-zenoh/)
- [Get started with Zenoh on Raspberry Pi and Arm Linux](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/2_zenoh-install/)
- [Containerize and deploy Zenoh across multiple Raspberry Pi devices](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/3_zenoh-multinode/)
- [Run a simple Zenoh pub/sub example](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/4_zenoh-ex1-pubsub/)
- [Run a Zenoh storage and query example](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/5_zenoh-ex2-storagequery/)
- [Run a Zenoh queryable node for on-demand edge computation](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/6_zenoh-ex3-queryable/)
- [Run a Zenoh queryable with parameterized Rust computation](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/7_zenoh-querycomp/)
- [Next Steps](https://learn.arm.com/learning-paths/cross-platform/zenoh-multinode-ros2/_next-steps/)

## About this Learning Path

| Skill level:   | Introductory        |
|----------------|---------------------|
| Reading time:  | 45 min              |
| Last updated:  | 04 Aug 2026         |

### Authors:
- Odin Shen, Arm [GitHub](https://github.com/odincodeshen) | [LinkedIn](https://linkedin.com/in/odin-shen-lmshen)
- William Liang [LinkedIn](https://linkedin.com/in/wyliang)
- ChenYing Kuo

### Arm IP:
- [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors)
- [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors)

### Tags:
- [Performance and Architecture](https://learn.arm.com/tag/performance-and-architecture)
- [Linux](https://learn.arm.com/tag/linux)
- [ROS 2](https://learn.arm.com/tag/ros-2)
- [C](https://learn.arm.com/tag/c)
- [Raspberry Pi](https://learn.arm.com/tag/raspberry-pi)
- [Zenoh](https://learn.arm.com/tag/zenoh)
- [Rust](https://learn.arm.com/tag/rust)

### Who is this for?
This Learning Path is for robotics developers, industrial automation engineers, and IoT system architects who are building distributed, scalable, and low-latency applications. Whether you're using the Robot Operating System (ROS), developing autonomous systems, or designing multi-node communication frameworks, you can use Eclipse Zenoh on Arm-based platforms, both in the cloud and on local devices like Raspberry Pi.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Understand Zenoh's architecture and how it integrates pub/sub, storage, querying, and computation models
- Build and run Zenoh examples on both Arm servers and Raspberry Pi
- Set up and deploy a multi-node Zenoh system

### Prerequisites
Before starting, you will need the following:
- At least two local Cortex-A devices running Linux, such as Raspberry Pi 4 or Pi 5. You can also use Arm servers or cloud instances
- Experience with ROS 2 applications

### Summary
You’ll build a multi-node Eclipse Zenoh system on Arm-based Linux devices such as Raspberry Pi. First, you’ll compile Zenoh from source. Then, you’ll distribute either the release binaries or a Docker image and run the nodes across multiple devices. You’ll test publish/subscribe messaging, in-memory storage and queries, and queryable nodes that compute results on demand. Finally, you’ll complete examples to see how to exchange messages across devices, retrieve stored values, and return calculated results through Zenoh queries.

### Frequently asked questions
<details>
<summary>How do I know my Zenoh build is ready to deploy to other devices?</summary>
After building, check for compiled binaries under `~/zenoh/target/release`. If the Zenoh examples run locally, you can copy the release binaries to your other Arm devices.
</details>
<details>
<summary>Which files do I need to copy when deploying binaries to additional Raspberry Pi boards?</summary>
Copy the compiled Zenoh binaries from `~/zenoh/target/release` to each target device. Keep the files together so you can run the same examples across all nodes.
</details>
<details>
<summary>What result should I expect when I run the pub/sub example on two devices?</summary>
The subscriber should receive updates for keys that match the `demo/example/**` expression. When the publisher sends messages under matching keys, the subscriber observes those updates in real time over the local network.
</details>
<details>
<summary>Should I run Zenoh directly on the host or use Docker for multi-node tests?</summary>
Both approaches are supported. Run the release binaries directly on each device, or use Docker to distribute Zenoh and provide a consistent multi-node test environment.
</details>
<details>
<summary>What should I check if a z_get query returns no data in the storage example?</summary>
Confirm that the Zenoh daemon is running and that `z_put` and `z_get` use the same key. If port `7447` is already in use, stop the previous Zenoh process or configure another listener port. This example uses in-memory storage, so only values published after the daemon starts are available for you to query.
</details>
