Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
6ace7c4
Add Learning Path: boot Zephyr from a signed FIT image with U-Boot on…
RoyAc6 Sep 15, 2026
bbd69e0
Learning Path: build Zephyr with Workbench for Zephyr, split the refu…
RoyAc6 Sep 15, 2026
6cc0e86
Learning Path: lighter prose, screenshots without the user name
RoyAc6 Sep 15, 2026
496dba4
Learning Path: full test-program outputs, key lines called out
RoyAc6 Sep 15, 2026
c0d9ff2
Learning Path: generic spine with the AM62L EVM as a marked example
RoyAc6 Sep 15, 2026
fe40889
Learning Path: board outputs taken from the AM62L EVM console recording
RoyAc6 Sep 15, 2026
cd7cf6a
Learning Path: boot-chain diagrams with brackets that point at their …
RoyAc6 Sep 16, 2026
43fae02
Learning Path: link Workbench for Zephyr's site and Marketplace page
RoyAc6 Sep 16, 2026
56a7fc8
Learning Path: trim repeated and low-value prose
RoyAc6 Sep 16, 2026
657adbd
Add Llama ONNX GenAI validated path
BelachewRachel Sep 17, 2026
b3e4909
Add a QEMU option beside the AM62L EVM
RoyAc6 Sep 17, 2026
b6a6294
Lead with QEMU, keep the EVM as the run on real silicon
RoyAc6 Sep 22, 2026
783b937
add OMM on Mali introduction.
Sep 23, 2026
9ae6cb9
update tags
Sep 23, 2026
889b3d2
Add Odin Shen as co-author
RoyAc6 Sep 23, 2026
bac479c
Merge remote-tracking branch 'upstream/main' into ai-portal-mobile-te…
BelachewRachel Sep 23, 2026
9f399f9
Provide instructions for AAR building directly in this LP
BelachewRachel Sep 23, 2026
8ef34a6
squash commit, initial LP for basic rpi5 profile without camera or qu…
Sep 24, 2026
182ded2
Merge remote-tracking branch 'upstream/main' into ai-portal-mobile-te…
BelachewRachel Sep 24, 2026
0deee90
Pin ONNX GenAI AAR build dependencies
BelachewRachel Sep 24, 2026
8f39870
Merge remote-tracking branch 'upstream/main' into ai-portal-mobile-te…
BelachewRachel Sep 24, 2026
62c68e3
Use a pre-compiled AAR
BelachewRachel Sep 24, 2026
8a4ff9e
incorporate Odin's changes
kieranhejmadi01 Sep 25, 2026
d74f213
Squash commit - Move ros2-device-connect learning path to cross-platform
kieranhejmadi01 Sep 28, 2026
2269230
initial add of another batch of 20
anupras-mohapatra-arm Oct 1, 2026
d664a0e
first portion of edits to generated content
anupras-mohapatra-arm Oct 1, 2026
7aa8a8b
second phase of first pass
anupras-mohapatra-arm Oct 2, 2026
36924a7
replacing faqs
anupras-mohapatra-arm Oct 2, 2026
c2d82c1
edits
anupras-mohapatra-arm Oct 2, 2026
d29a8b6
nginx on aks
anupras-mohapatra-arm Oct 2, 2026
f9c5801
nginx on aks
anupras-mohapatra-arm Oct 2, 2026
52ac66a
edits
anupras-mohapatra-arm Oct 2, 2026
8e2dcb2
5% reduction in font size and small increase in card height on instal…
jasonrandrews Oct 4, 2026
99d7f75
automatic update of stats files
Oct 5, 2026
01ec496
Merge pull request #3849 from jasonrandrews/review
jasonrandrews Oct 5, 2026
c35df8f
Update _index.md to draft mode
jasonrandrews Oct 5, 2026
2160c0d
Merge branch 'main' into zephyr-signed-fit-uboot-cortex-a
jasonrandrews Oct 5, 2026
6b164c9
Merge pull request #3790 from RoyAc6/zephyr-signed-fit-uboot-cortex-a
jasonrandrews Oct 5, 2026
ed39dbe
nit
anupras-mohapatra-arm Oct 5, 2026
9bb62e5
nit
anupras-mohapatra-arm Oct 5, 2026
10234ef
bypassing failing test
anupras-mohapatra-arm Oct 5, 2026
89d90ec
assisted fixes
anupras-mohapatra-arm Oct 5, 2026
dbd81ee
Mark ROS 2 Device Connect guide as draft
pareenaverma Oct 5, 2026
85d4847
Merge pull request #3820 from kieranhejmadi01/device_connect_ros2
pareenaverma Oct 5, 2026
ca090e0
manual edits
anupras-mohapatra-arm Oct 5, 2026
b97cbc4
nit
anupras-mohapatra-arm Oct 5, 2026
30365d2
nit
anupras-mohapatra-arm Oct 5, 2026
07b01e9
nit
anupras-mohapatra-arm Oct 5, 2026
56508a8
nit
anupras-mohapatra-arm Oct 5, 2026
83fb062
Swin2SR tech review
pareenaverma Oct 5, 2026
68e5475
Merge pull request #3852 from pareenaverma/content_review
pareenaverma Oct 5, 2026
e05c7e8
url update
anupras-mohapatra-arm Oct 5, 2026
21a5681
nit
anupras-mohapatra-arm Oct 5, 2026
3a456cb
Tech review of ROS2 with Device Connect
annietllnd Oct 5, 2026
83e86e4
first pass on swin2sr
anupras-mohapatra-arm Oct 5, 2026
8d2617c
Update _index.md
pareenaverma Oct 5, 2026
d1a6032
Merge pull request #3789 from GenialPP/omm-mali-intro
pareenaverma Oct 5, 2026
fd5b474
adding summary and FAQs
anupras-mohapatra-arm Oct 5, 2026
4edca46
assisted edits
anupras-mohapatra-arm Oct 5, 2026
a73450a
nit
anupras-mohapatra-arm Oct 5, 2026
5953735
nits
anupras-mohapatra-arm Oct 5, 2026
b08e5d5
nits
anupras-mohapatra-arm Oct 5, 2026
ebcadce
nit
anupras-mohapatra-arm Oct 5, 2026
1f452cc
Technical reivew of OMM introductions
annietllnd Oct 5, 2026
095b2c6
Fix images in OMM intro
annietllnd Oct 5, 2026
da94761
first tech review of Boot a signed Zephr with U-Boot
jasonrandrews Oct 5, 2026
75ea08d
Fix LP issues
annietllnd Oct 5, 2026
7f986f9
second tech review of Boot a signed Zephry image with U-Boot
jasonrandrews Oct 6, 2026
6845d6d
Merge pull request #3857 from jasonrandrews/review
jasonrandrews Oct 6, 2026
3cc3a94
Merge pull request #3856 from annietllnd/fix
jasonrandrews Oct 6, 2026
8b26ded
Merge pull request #3855 from annietllnd/review
jasonrandrews Oct 6, 2026
56082a9
Merge pull request #3850 from anupras-mohapatra-arm/summaries-and-faqs
jasonrandrews Oct 6, 2026
bbd6944
Merge pull request #3853 from annietllnd/main
jasonrandrews Oct 6, 2026
bded527
Merge pull request #3854 from anupras-mohapatra-arm/mobile-graphics-a…
jasonrandrews Oct 6, 2026
3fbaf10
Merge pull request #3851 from anupras-mohapatra-arm/fixes
jasonrandrews Oct 6, 2026
c48ef3b
Merge pull request #3768 from BelachewRachel/ai-portal-mobile-text-to…
pareenaverma Oct 6, 2026
f1630eb
Review nested virtualization Learning Path
jasonrandrews Oct 6, 2026
f0b436b
first pass for zephyr uboot
anupras-mohapatra-arm Oct 6, 2026
fd94d4b
Merge pull request #3858 from jasonrandrews/review
jasonrandrews Oct 6, 2026
063e068
adding summary and FAQs
anupras-mohapatra-arm Oct 6, 2026
bea0ea7
assisted edits
anupras-mohapatra-arm Oct 6, 2026
9f10125
nit
anupras-mohapatra-arm Oct 6, 2026
bbeb0c2
another pass
anupras-mohapatra-arm Oct 6, 2026
6371c83
Merge pull request #3860 from anupras-mohapatra-arm/embedded-and-micr…
jasonrandrews Oct 6, 2026
45db993
spelling and link checks
jasonrandrews Oct 6, 2026
3fb6797
Merge pull request #3861 from jasonrandrews/review
jasonrandrews Oct 7, 2026
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
59 changes: 58 additions & 1 deletion .wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7405,4 +7405,61 @@ requantized
requantizing
signedness
virsh
virt
virt
Autoboot
BOOTMODE
DTB
Decompile
EVM
FITs
HSM
Jamil
Keywriter
LBA
MBR
MCUboot
MoltenVK
SPL
ScaledObjects
Scaler's
Securable
TI's
TIFS
Terraform's
UBOOT
adab
adbc
afaf
arago
autoboot
bafb
bceffbb
bcfc
beeb
befc
bootloader's
caidas
cded
ceefb
cffee
decompiling
eFuses
eadeefc
edcf
efbc
evm
fbcacd
fcea
fcfa
fdaaaca
fdbc
lastmod
lxx
shaderFloat
subimages
swin
tiboot
tisdk
tispl
uboot
codename
3 changes: 2 additions & 1 deletion assets/contributors.csv
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,5 @@ Tirui Wu, Arm,,,,
William Watson, Arm,,,,
John O'Hara,Arm,JohnOhara-Arm,johnaohara,JohnnyDoItAll,
Usamah Zaheer,Arm,usamahz,,,
Elad Gross,Arm,eladgr,,,
Roy Jamil,Ac6,RoyAc6,royjamil,,https://www.ac6.fr/en/
Elad Gross,Arm,eladgr,,,
19 changes: 12 additions & 7 deletions assets/css/content.css
Original file line number Diff line number Diff line change
Expand Up @@ -186,30 +186,35 @@ div.answer label {
.normal-tabpane {
box-sizing: border-box;
margin-left: 16px;
margin-right: 16px;
margin-top: 8px;
margin-bottom: 8px;

padding-left: 16px;
padding-right: 16px;
padding-bottom: 16px;

background-color: var(--arm-color-surface);
--ads-horizontal-tabs-navigation-background-color: var(--arm-color-surface);
}
.normal-horizontal-tabs {
--ads-horizontal-tabs-tab-color: white;
--ads-horizontal-tabs-tab-color-active: var(--arm-orange);
--ads-horizontal-tabs-underline-color: var(--arm-orange);

--ads-horizontal-tabs-tab-color-hover: var(--lp-hover-text);
--ads-horizontal-tabs-navigation-background-color: var(--arm-color-surface);
--ads-horizontal-tabs-tab-content-background-color: var(--arm-color-footing);
}

.normal-horizontal-tabs .normal-tab {
padding-bottom: 16px;
}

.normal-horizontal-tabs table, .normal-horizontal-tabs p {
padding-top: 16px;
padding-left: 16px;
padding-right: 16px;
}
.normal-horizontal-tabs div.code-toolbar {
margin-left: 16px;
margin-right: 16px;
margin-top: 16px;
margin-bottom: 16px;
}
.normal-horizontal-tabs table{
padding-bottom: 8px;
}
Expand Down
4 changes: 2 additions & 2 deletions assets/css/list-pages.css
Original file line number Diff line number Diff line change
Expand Up @@ -363,13 +363,13 @@ html[theme="dark"] .learning-path-title {
.install-guide-title {
margin-top: 0px;
margin-bottom: 0px;
font-size: 1.25rem!important;
font-size: 1.1875rem!important;
line-height: 1.3;
}


ads-card.tool-card {
height: 112px;
height: 128px;
--ads-card-border-radius: 8px;
--ads-card-border-width: 1px;
}
Expand Down
10 changes: 5 additions & 5 deletions content/learning-paths/automotive/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ subjects_filter:
- Performance and Architecture: 10
operatingsystems_filter:
- Baremetal: 1
- Linux: 14
- Linux: 15
- macOS: 1
- other: 1
- RTOS: 2
Expand All @@ -33,7 +33,7 @@ tools_software_languages_filter:
- CMake: 1
- CPP: 1
- DDS: 1
- Docker: 6
- Docker: 7
- FreeRTOS: 1
- FVP: 2
- Gazebo: 1
Expand All @@ -43,17 +43,17 @@ tools_software_languages_filter:
- Multipass: 1
- Navigation2: 1
- Perf: 1
- Python: 2
- Python: 3
- Raspberry Pi: 2
- rmw_zenoh: 2
- ROS 2: 6
- ROS 2: 7
- Rust: 1
- RViz: 1
- SME2: 1
- Tinkerblox: 1
- topdown-tool: 1
- Yocto: 3
- Zenoh: 3
- Zenoh: 4
# auto-generated padding to avoid Hugo YAML alias limit
# auto-generated padding to avoid Hugo YAML alias limit
# auto-generated padding to avoid Hugo YAML alias limit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ The L1 table defines permissions for each 16KB granule.

Use the Arm Debugger MMU/MPU pane to observe these attributes:

![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0xA0000000, displaying Realm access permissions for 16KB granules#center](_images/l1gpt_0xA.png)
![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0xA0000000, displaying Realm access permissions for 16KB granules#center](_images/l1gpt_0xa.png)

![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0x80000000, displaying the protection attributes for this address range#center](_images/l1gpt_0x8.png)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
---
title: Get started with ROS 2 and Device Connect on Arm

draft: true
cascade:
draft: true

description: Learn how to expose a ROS 2 system running in Docker on an Arm-based Linux device as a discoverable Device Connect device, and inspect its ROS 2 graph through remote procedure calls.

minutes_to_complete: 30

who_is_this_for: This is an introductory topic for robotics and edge developers who want to make a ROS 2 system discoverable and callable by other devices and AI agents using Device Connect, without changing the ROS 2 application itself.

learning_objectives:
- Explain how a Device Connect adapter bridges a containerized ROS 2 system to a Device Connect network
- Set up ROS 2 in Docker and the Device Connect Python packages on an Arm-based Linux machine
- Run the adapter in device-to-device (D2D) mode and call read-only ROS 2 inspection RPCs from a Python client
- Describe how deployment profiles map the same adapter onto real hardware such as a Raspberry Pi 5 with a camera

prerequisites:
- An Arm-based Linux machine, such as a Raspberry Pi 5, an Arm cloud instance, or an Arm-based laptop, running Ubuntu 22.04 or later
- Basic familiarity with Python, the Linux command line, and ROS 2 concepts such as nodes and topics

author:
- Kieran Hejmadi
- Odin Shen

# New Learning Paths are opted in for the next manual generated summary/FAQ run.
# The generator resets this to false after a successful write.
generate_summary_faq: true

# Optional one-shot controls: set either field to true to regenerate just that
# generated section the next time the summary/FAQ tool runs. The tool resets
# them to false after a successful write.
rerun_summary: false
rerun_faqs: false

### Tags
skilllevels: Introductory
subjects: Libraries
armips:
- Cortex-A
- Neoverse
tools_software_languages:
- ROS 2
- Docker
- Python
- Zenoh
operatingsystems:
- Linux

### Cross-platform metadata only
shared_path: true
shared_between:
- automotive
- embedded-and-microcontrollers

further_reading:
- resource:
title: ros2-device-connect example repository
link: https://github.com/odincodeshen/ros2-device-connect
type: website
- resource:
title: Device Connect repository
link: https://github.com/arm/device-connect
type: website
- resource:
title: ROS 2 documentation
link: https://docs.ros.org/en/humble/
type: documentation
- resource:
title: Device-to-Device communication with Device Connect
link: /learning-paths/embedded-and-microcontrollers/device-connect-d2d/
type: website
- resource:
title: Build a ROS 2 and Zenoh simulation environment on an Arm server
link: /learning-paths/cross-platform/ros2-zenoh-arm/
type: website

### FIXED, DO NOT MODIFY
# ================================================================================
weight: 1 # _index.md always has weight of 1 to order correctly
layout: "learningpathall" # All files under learning paths have this same wrapper
learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content.
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
# ================================================================================
# FIXED, DO NOT MODIFY THIS FILE
# ================================================================================
weight: 21 # The weight controls the order of the pages. _index.md always has weight 1.
title: "Next Steps" # Always the same, html page title.
layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing.
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
---
title: Understand ROS 2, Device Connect, and the example adapter
description: Learn what ROS 2 and Device Connect each provide, and how the ros2-device-connect adapter exposes a ROS 2 container as a Device Connect device.
weight: 2

### FIXED, DO NOT MODIFY
layout: learningpathall
---

## Why connect ROS 2 to Device Connect?

A robot or smart camera built on ROS 2 already has a rich internal graph of nodes, topics, and services. That graph is designed for components *inside* the robot to talk to each other. It isn't designed for other devices on your network, or for AI agents, to discover the robot and ask it structured questions such as "which topics are you publishing?" or "capture a photo".

Device Connect fills that gap. In this Learning Path, you'll run a small adapter next to an unchanged ROS 2 system on an Arm-based Linux machine. The adapter registers the ROS 2 system as a Device Connect device and exposes a safe set of remote procedure calls (RPCs) that a peer or agent can discover and invoke.

For robotics, this pattern matters because a robot is not a single API. It is a live graph of sensors, controllers, diagnostics, services, and safety-critical actions. ROS 2 remains the robot's internal software graph. Device Connect adds an external capability layer, where the device owner chooses which ROS 2 operations become discoverable, typed, and remotely callable functions.

## ROS 2 in brief

ROS 2 (Robot Operating System 2) is an open source middleware and toolset for building robotics applications. Applications are split into *nodes* that exchange data over *topics* (publish/subscribe), *services* (request/response), and *actions* (long-running goals). ROS 2 publishes official `arm64` packages and container images, so it runs natively on Arm platforms from a Raspberry Pi to a Neoverse cloud server.

This Learning Path uses ROS 2 inside a Docker container and doesn't go deeper into ROS 2 itself. For more background, see:

- [ROS 2 install guide](/install-guides/ros2/) to install ROS 2 natively on Arm Linux and run the talker and listener demo
- [Build a ROS 2 and Zenoh simulation environment on an Arm server](/learning-paths/cross-platform/ros2-zenoh-arm/) for a full containerized ROS 2 robotics workload on Arm, including the `rmw_zenoh` middleware

## Device Connect in brief

[Device Connect](https://github.com/arm/device-connect) is an open-source framework that standardizes how edge devices advertise themselves and exchange structured messages, so that peer devices and AI agents can discover and control them through the same driver model. The pieces you'll use are:

- `DeviceDriver`: a Python base class you subclass to describe a device
- `@rpc` and `@emit`: decorators that expose a method as a callable function or declare an event the device publishes
- `DeviceRuntime`: the runtime that brings a driver online on the messaging network
- `device-connect-agent-tools`: a client library to discover devices and invoke their RPCs from a script or an AI agent

Device Connect supports two deployment styles. In *device-to-device (D2D)* mode, devices find each other directly on the local network using [Zenoh](https://zenoh.io/), with no server. In *server* (or *fabric*) mode, devices connect through a shared broker so they can be reached across networks. This Learning Path uses D2D mode.

To learn the SDK primitives in more depth, see these Learning Paths:

- [Device-to-Device communication with Device Connect](/learning-paths/embedded-and-microcontrollers/device-connect-d2d/) for the developer model and a sensor-to-monitor example
- [Deploy multi-network device meshes using Device Connect server and NATS](/learning-paths/embedded-and-microcontrollers/device-connect-server/) for server mode

## The ros2-device-connect example

The [ros2-device-connect](https://github.com/odincodeshen/ros2-device-connect) repository contains the adapter you'll run. It doesn't modify or link against ROS 2. Instead, it reaches the ROS 2 graph by running ROS 2 command-line tools inside the ROS 2 container with `docker exec`:

```output
Python client ──Zenoh (D2D)──▶ Device Connect adapter ──docker exec──▶ ROS 2 container
(agent tools) (DeviceDriver on host) (ros2 topic list, ...)
```

The repository is organized in three layers:

| Layer | Files | Role |
|---|---|---|
| Shared core | `ros2_common.py` | The `docker exec` bridge plus `Ros2InspectionMixin`, which provides six read-only inspection RPCs for nodes, topics, services, packages, interfaces, and topic info |
| Hardware drivers | `puppypi_device.py`, `camera_device.py` | `DeviceDriver` subclasses that combine the shared core with hardware-specific RPCs, such as capturing a camera frame |
| Profiles and launchers | `profiles/*.env`, `start_d2d.sh`, `start_fabric.sh` | Per-deployment settings that select the driver, the ROS 2 container, and the ROS 2 setup scripts |

The adapter is deliberately narrow. It exposes read-only inspection plus a small, reviewed set of hardware-specific RPCs. It never offers arbitrary topic publishing or service passthrough, so a remote caller can't drive the ROS 2 system in ways the driver author didn't intend.

This means the same adapter pattern can cover different robotics surfaces. A camera profile can expose perception data, a robot profile can expose diagnostics and bounded motion commands, and both can be called through the same Device Connect discovery and RPC model.

## What you've learned and what's next

You've learned that ROS 2 organizes a robot's internal software as a graph of nodes and topics, and that Device Connect makes a device discoverable and callable by peers and agents. The ros2-device-connect adapter joins the two by wrapping ROS 2 command-line tools in Device Connect RPCs.

Next, you'll install Docker, ROS 2, and the Device Connect packages on your Arm-based Linux machine.
Loading
Loading