Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 126 additions & 1 deletion .wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4323,4 +4323,129 @@ taskset
unicast
wrk's
yy
zenoh
zenoh
AFM
AOR
AWSEC
Agrawal
Arcee
Atheros
ChenYing
Colima
Corellium
Corestone
Croci
DBAREMETAL
Denormal
Docker's
Dpls
ETHOSU
FVP's
Gopalakrishnan
Gorman
HVM
Higham
Huai
ICML
IIR
IIoT
ImageStreams
Joana
Kuo
LANs
Liang
Libmath
MACC
MACCs
MachineSets
MobileNet
OpenShift's
PMLR
PipelineRun
PreserveOriginal
Queryable
Reimport
SPRA
STRINGIFY
Sram
TMS
Tekton
VPs
VSCode
WANs
WR
Waheed
Weidmann
Wikitest
XQuartz
Xiu
ZGVnN
Zenon
afm
aot
arXiv
arcee
armpl
ath
bitbake
bootloaders
cntr
cosf
cpp's
datadir
dddd
denormal
denormalized
edgeimpulse
ethosu
expf
geo
gupta
iMac
instrinsics
ish
keypair
learnable
libcurl
lldb
mL
mM
mR
mlr
nbc
nbr
nodeAffinity
nordic
oc
oe
openshift
pcs
podTemplate
podTemplate's
postinstallation
prepending
prog
queryable
redhat
reimport
shadergraph
sheel
spra
stefanalfbo
subnormals
taskrun
tg
thisunrolling
tokio
topologies
umax
varg
vexp
vgetq
vres
wifi
wlan
wlp
wlx
xquartz
zenohd
8 changes: 5 additions & 3 deletions content/learning-paths/automotive/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,17 @@ title: Automotive
weight: 4
subjects_filter:
- Containers and Virtualization: 3
- Performance and Architecture: 1
- Performance and Architecture: 2
operatingsystems_filter:
- Baremetal: 1
- Linux: 3
- Linux: 4
- RTOS: 1
tools_software_languages_filter:
- Automotive: 1
- C: 1
- Docker: 2
- Python: 2
- Raspberry Pi: 1
- ROS 2: 1
- ROS2: 1
- ROS2: 2
---
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ code-examples/learning-paths/cross-platform/multiplying-matrices-with-sme2/
└── sme2_check.c
```

Amongst other files, it includes:
Among other files, it includes:
- Code examples.
- A `Makefile` to build the code.
- `run-fvp.sh` to run the FVP model.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,8 +248,8 @@ The core of the multiplication is done in 2 parts:

Once again, intrinsics makes it easy to fully leverage SME2, provided you have a
solid understanding of its available instructions. The compiler is automatically
handling many low-level aspects (saving / restoring of the difeerent contexts),
as well as not using registers that are reserved on specific plaforms (like
handling many low-level aspects (saving / restoring of the diferent contexts),
as well as not using registers that are reserved on specific platforms (like
`x18`). Predicates handle corner cases elegantly, ensuring robust execution.
Most importantly, the code adapts to different SVL values across various
hardware implementations without requiring recompilation. This follows the key
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ prerequisites:
- Intermediate proficiency with the C programming language and the Armv9-A assembly language
- A computer running Linux, macOS, or Windows
- Installations of Git and Docker for project setup and emulation
- A platform that supports SME2 (see the list of [devices with SME2 support](/learning-paths/cross-platform/multiplying-matrices-with-sme2/1-get-started/#devices-with-sme2-support)) or an emulator to run code with SME2 instructions
- A platform that supports SME2 (see the list of [devices with SME2 support](/learning-paths/cross-platform/multiplying-matrices-with-sme2/1-get-started/#devices) or an emulator to run code with SME2 instructions
- Compiler support for SME2 instructions (for example, LLVM 17+ with SME2 backend support)

author: Arnaud de Grandmaison
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ In this session, you’ll use Raspberry Pi boards to simulate a scalable, distri

You’ll learn how to use Docker to deploy the environment on physical devices, and how to duplicate virtual instances using snapshot cloning on Arm Virtual Hardware.

This setup lets you simulate `real-world`, `cross-node communication`, making it ideal for validating Zenohs performance in robotics and industrial IoT use cases.
This setup lets you simulate `real-world`, `cross-node communication`, making it ideal for validating Zenoh's performance in robotics and industrial IoT use cases.

### Install Docker on Raspberry Pi

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ layout: learningpathall

## Example 1: Simple Pub/Sub

This first test demonstrates Zenoh’s real-time publish/subscribe model using two Raspberry Pi devices.
This first test demonstrates real-time publish/subscribe model using two Raspberry Pi devices.

The following command is to initiate a subscriber for a key expression `demo/example/**`, i.e. a set of topics starting with the path `demo/example`.

Expand Down Expand Up @@ -36,4 +36,4 @@ The result will look like:
In the left-side window, I have logged into the device Pi4 and run the z_sub program.
It receives values with the key `demo/example/zenoh-rs-pub` continuously published by z_pub running on Pi in the right-side window.

This basic example shows Zenohs zero-config discovery and low-latency pub/sub across physical nodes.
This basic example shows Zenoh's zero-config discovery and low-latency pub/sub across physical nodes.
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ layout: learningpathall

## Example 2: Storage and Query

The second example adds Zenohs data storage and querying capabilities—enabling nodes to retrieve historical values on demand.
The second example adds Zenoh's data storage and querying capabilities—enabling nodes to retrieve historical values on demand.

Building on the previous Pub/Sub example, you’ll now explore how Zenoh supports `persistent data storage` and `on-demand querying` -- a powerful feature for robotics and IIoT applications.

In a typical warehouse or factory scenario, autonomous robots may periodically publish sensor data (e.g., position, temperature, battery level), and a central system—or another robot—may later need to query the latest state of each unit.

Unlike Pub/Sub, which requires live, real-time message exchange, Zenohs storage and query model enables asynchronous access to data that was published earlier, even if the original publisher is no longer online.
Unlike Pub/Sub, which requires live, real-time message exchange, Zenoh's storage and query model enables asynchronous access to data that was published earlier, even if the original publisher is no longer online.

In this example, you’ll run the zenohd daemon with in-memory storage and use z_put to publish data and z_get to retrieve it.

Expand Down Expand Up @@ -70,5 +70,5 @@ The result will look like:
If you have more than two Raspberry Pi devices, you can run the z_get command on a third RPi to validate that storage queries work seamlessly across a multi-node setup.
{{% /notice %}}

This example shows how Zenohs Storage + Query model supports asynchronous data access and resilient state-sharing—critical capabilities in robotics and industrial IoT systems where network connectivity may be intermittent or system components loosely coupled.
This example shows how Zenoh's Storage + Query model supports asynchronous data access and resilient state-sharing—critical capabilities in robotics and industrial IoT systems where network connectivity may be intermittent or system components loosely coupled.

Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ layout: learningpathall

## Example 3: Computation on Query using Queryable

Next, you’ll explore Zenohs queryable capability, which lets a node dynamically respond to data queries by executing a custom computation or data generation function in this example.
Next, you’ll explore Zenoh's queryable capability, which lets a node dynamically respond to data queries by executing a custom computation or data generation function in this example.

Unlike zenohd which simply returns stored data, a queryable node can register to handle a specific key expression and generate responses at runtime. This is ideal for distributed computing at the edge, where lightweight devices—such as Raspberry Pi nodes—can respond to requests with calculated values (e.g., sensor fusion, AI inference results, or diagnostics).

### Use Case: On-Demand Battery Health Estimation

Imagine a robot fleet management system where the central planner queries each robot for its latest battery health score, which is not published continuously but calculated only when queried.

This saves bandwidth and enables edge compute optimization using Zenohs Queryable.
This saves bandwidth and enables edge compute optimization using Zenoh's Queryable.

### Step 1: Launch a Queryable Node

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ layout: learningpathall

Finally, you’ll combine pub/sub, storage, and queryable components to simulate a distributed computation flow—demonstrating how Zenoh enables intelligent, coordinated edge systems.

You’ll learn how to use Zenohs Queryable API in Rust to build a parameterized query system for estimating battery health at the edge.
You’ll learn how to use Zenoh's Queryable API in Rust to build a parameterized query system for estimating battery health at the edge.

This extends a previous example by supporting runtime query parameters like battery level and temperature.

Expand Down Expand Up @@ -93,7 +93,7 @@ async fn main() -> zenoh::Result<()> {
}
```

This edge node responds to real-time queries using Zenohs Queryable API. It listens for requests on the robot/battery/estimate key and returns a calculated battery health score based on provided input parameters.
This edge node responds to real-time queries using Zenoh's Queryable API. It listens for requests on the robot/battery/estimate key and returns a calculated battery health score based on provided input parameters.

The program starts by establishing a Zenoh session using open(Config::default()). It then registers a queryable resource on the robot/battery/estimate key. Whenever this key is queried, a callback function is invoked asynchronously using tokio::spawn.

Expand Down Expand Up @@ -160,7 +160,7 @@ The excepted output will be
>> Received ('robot/battery/estimate': 'Estimated battery health: 85%')
```

You’ve just built a responsive, parameterized edge compute service using Zenohs Queryable API in Rust — a lightweight but powerful pattern for real-time intelligence at the edge.
You’ve just built a responsive, parameterized edge compute service using Zenoh's Queryable API in Rust — a lightweight but powerful pattern for real-time intelligence at the edge.

This approach not only minimizes network overhead but also enables each device to process and respond to context-aware queries on demand.
It’s a strong foundation for building scalable, event-driven IoT systems that can adapt dynamically to operational needs.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ minutes_to_complete: 45
who_is_this_for: This learning path is designed for robotics developers, industrial automation engineers, and IoT system architects building distributed, scalable, and low-latency applications. Whether you are using Robot Operating System (ROS), developing autonomous systems, or designing multi-node communication frameworks, this guide will show you how to leverage the Eclipse Zenoh protocol on Arm-based platforms — both in the cloud (AVH or EC2) and on physical devices like Raspberry Pi.

learning_objectives:
- Understand Zenohs architecture and its integration of pub/sub, storage, querying, and computation models.
- Understand Zenoh's architecture and its integration of 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 using Arm-based hardware or virtual environments.

Expand Down
20 changes: 10 additions & 10 deletions content/learning-paths/embedded-and-microcontrollers/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@ maintopic: true
operatingsystems_filter:
- Android: 1
- Baremetal: 30
- Linux: 28
- macOS: 6
- Linux: 29
- macOS: 7
- RTOS: 9
- Windows: 4
subjects_filter:
- CI-CD: 5
- Containers and Virtualization: 6
- Embedded Linux: 4
- Libraries: 3
- ML: 14
- ML: 15
- Performance and Architecture: 21
- RTOS Fundamentals: 4
- Security: 2
Expand All @@ -32,10 +32,10 @@ tools_software_languages_filter:
- Arduino: 2
- Arm Compiler for Embedded: 7
- Arm Compiler for Linux: 1
- Arm Compute Library: 1
- Arm Compute Library: 2
- Arm Development Studio: 8
- Arm Fast Models: 4
- Arm Virtual Hardware: 10
- Arm Virtual Hardware: 11
- Assembly: 1
- AVH: 1
- C: 3
Expand All @@ -53,12 +53,12 @@ tools_software_languages_filter:
- DSTREAM: 2
- Edge AI: 1
- Edge Impulse: 1
- ExecuTorch: 2
- Fixed Virtual Platform: 9
- ExecuTorch: 3
- Fixed Virtual Platform: 10
- FPGA: 1
- Fusion 360: 1
- FVP: 1
- GCC: 8
- GCC: 9
- GenAI: 2
- GitHub: 3
- GitLab: 1
Expand All @@ -79,8 +79,8 @@ tools_software_languages_filter:
- NumPy: 1
- Paddle: 1
- Porcupine: 1
- Python: 6
- PyTorch: 2
- Python: 7
- PyTorch: 3
- QEMU: 1
- Raspberry Pi: 6
- Remote.It: 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ For a learning path focused on creating and deploying your own TinyML models, pl

## Benefits and applications

New products, like Arm's [Ethos-U85](https://www.arm.com/products/silicon-ip-cpu/ethos/ethos-u85) NPU are available on FVPs earlier than on physical devices. FVPs also have a graphical user iterface (GUI), which is useful for for ML performance visualization due to:
New products, like Arm's [Ethos-U85](https://www.arm.com/products/silicon-ip-cpu/ethos/ethos-u85) NPU are available on FVPs earlier than on physical devices. FVPs also have a graphical user interface (GUI), which is useful for for ML performance visualization due to:
- visual confirmation that your ML model is running on the desired device,
- clearly indicated instruction counts,
- confirmation of total execution time and
Expand Down
8 changes: 5 additions & 3 deletions content/learning-paths/iot/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ subjects_filter:
- Containers and Virtualization: 2
- Embedded Linux: 2
- ML: 2
- Performance and Architecture: 2
- Performance and Architecture: 3
operatingsystems_filter:
- Baremetal: 4
- Linux: 8
- Linux: 9
- macOS: 2
- RTOS: 2
- Windows: 2
Expand All @@ -28,14 +28,16 @@ tools_software_languages_filter:
- Azure: 1
- Balena Cloud: 1
- Balena OS: 1
- C: 1
- Coding: 3
- Docker: 2
- Fixed Virtual Platform: 1
- GitHub: 3
- Matter: 1
- MCP: 1
- Python: 2
- Raspberry Pi: 3
- Raspberry Pi: 4
- Remote.It: 1
- ROS2: 1
- VS Code: 1
---
2 changes: 1 addition & 1 deletion content/learning-paths/laptops-and-desktops/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ tools_software_languages_filter:
- Kubernetes: 1
- Linux: 1
- LLM: 1
- LLVM: 1
- LLVM: 2
- llvm-mca: 1
- MSBuild: 1
- MTE: 1
Expand Down
Loading