Skip to content

Commit eb69a7a

Browse files
committed
Final touches
1 parent a0653d1 commit eb69a7a

5 files changed

Lines changed: 32 additions & 30 deletions

File tree

content/learning-paths/embedded-and-microcontrollers/device-connect-strands/_index.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ learning_objectives:
1717
- Discover and invoke the robot using the Device Connect agent tools and the robot_mesh Strands tool.
1818

1919
prerequisites:
20-
- An Arm Linux or macOS machine with Python 3.12 installed.
20+
- An development machine with Python 3.12 installed.
2121
- Git installed.
2222
- Basic familiarity with Python virtual environments and command-line tools.
23-
- (Optional) A Raspberry Pi for testing a full infrastructure setup
23+
- (Optional) A Raspberry Pi for testing a full device-to-device (D2D) setup.
2424

2525
author:
2626
- Annie Tallund
@@ -47,6 +47,14 @@ further_reading:
4747
title: Strands Agents SDK documentation
4848
link: https://strandsagents.com/
4949
type: website
50+
- resource:
51+
title: Strands robots repository
52+
link: https://github.com/strands-labs/robots/tree/dev
53+
type: website
54+
- resource:
55+
title: Device Connect integration guide
56+
link: https://github.com/atsyplikhin/robots/blob/feat/device-connect-integration-draft/strands_robots/device_connect/GUIDE.md
57+
type: website
5058

5159
### FIXED, DO NOT MODIFY
5260
# ================================================================================

content/learning-paths/embedded-and-microcontrollers/device-connect-strands/background.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ Device Connect is Arm's answer to that question. It is a platform layer that han
1414

1515
This Learning Path puts both tools through their paces. It starts with a single machine, for example a laptop, where a simulated robot and an agent discover each other automatically, then extends to a two-machine setup where a Raspberry Pi joins the same device mesh over the network.
1616

17-
TODO: compatible devices? Mac and what else?
18-
1917
## The two layers
2018

2119
**Device layer**
@@ -26,8 +24,6 @@ A device is any process that registers itself on the mesh and exposes callable f
2624

2725
Two interfaces sit at this layer. The `device-connect-agent-tools` package exposes `discover_devices()` and `invoke_device()` as plain Python functions you can call directly from a script or REPL, with no LLM involved. The `robot_mesh` tool from `robots` wraps the same capabilities as a Strands agent tool, which means an LLM can also call them during a reasoning loop. Both share the same underlying Device Connect transport, so anything you can do with one you can do with the other.
2826

29-
TODO: replace robots
30-
3127
The diagram below shows how these layers communicate at runtime:
3228

3329
```
@@ -41,7 +37,7 @@ The diagram below shows how these layers communicate at runtime:
4137
┌──────────────▼───────────────────────┐
4238
│ Device layer │
4339
│ Simulated SO-100 arm |
44-
| — so100_sim-abc123 │
40+
| — so100-abc123
4541
│ heartbeat · execute · getStatus │
4642
└──────────────────────────────────────┘
4743
```
@@ -74,4 +70,4 @@ By working through the remaining sections you will:
7470

7571
The next section covers the environment setup.
7672

77-
TODO: add links to the Strands Robots docs, mesh.md, pypi?,
73+
TODO: replace robots and feat/device-connect-integration-draft. Update furhter reading links. Clarify device support.

content/learning-paths/embedded-and-microcontrollers/device-connect-strands/run-example.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ When the `Robot('so100')` object is created, the SDK downloads the MuJoCo physic
5555
You should see INFO-level log output similar to:
5656

5757
```output
58-
device_connect_sdk.device.so100-a3f1b2 - INFO - Using ZENOH messaging backend
59-
device_connect_sdk.device.so100-a3f1b2 - INFO - Connected to ZENOH broker: []
60-
device_connect_sdk.device.so100-a3f1b2 - INFO - Driver connected: strands_sim
61-
device_connect_sdk.device.so100-a3f1b2 - INFO - Subscribed to commands on device-connect.default.so100-abc123.cmd
58+
device_connect_sdk.device.so100-abc123 - INFO - Using ZENOH messaging backend
59+
device_connect_sdk.device.so100-abc123 - INFO - Connected to ZENOH broker: []
60+
device_connect_sdk.device.so100-abc123 - INFO - Driver connected: strands_sim
61+
device_connect_sdk.device.so100-abc123 - INFO - Subscribed to commands on device-connect.default.so100-abc123.cmd
6262
🤖 so100-abc123 is online. Ctrl+C to stop.
6363
```
6464

@@ -83,22 +83,22 @@ The output is similar to:
8383

8484
```output
8585
Discovered 1 device(s):
86-
[robot] so100-lab-1 — idle
86+
[robot] so100-abc123 — idle
8787
Functions: execute, getFeatures, getStatus, reset, step, stop
8888
```
8989

90-
The peer ID (for example `so100_sim-abc123`) is assigned at startup and changes each run. Note the actual ID shown in your terminal - you will need it in the next step.
90+
The peer ID (for example `so100-abc123`) is assigned at startup and changes each run. Note the actual ID shown in your terminal - you will need it in the next step.
9191

9292
### Execute an instruction
9393

94-
Send a task to one of the discovered robots. Replace `so100_sim-abc123` with the peer ID shown in your `peers` output:
94+
Send a task to one of the discovered robots. Replace `so100-abc123` with the peer ID shown in your `peers` output:
9595

9696
```python
9797
python <<'PY'
9898
from strands_robots.tools.robot_mesh import robot_mesh
9999
print(robot_mesh(
100100
action='tell',
101-
target='so100_sim-abc123',
101+
target='so100-abc123',
102102
instruction='pick up the cube',
103103
policy_provider='mock',
104104
))
@@ -108,7 +108,7 @@ PY
108108
You will see the following output:
109109

110110
```output
111-
-> so100-lab-1: pick up the cube
111+
-> so100-abc123: pick up the cube
112112
{"status": "success", "content": [...]}
113113
```
114114

@@ -117,7 +117,7 @@ The robot also logs event updates as it processes the task. If you switch back t
117117

118118
```output
119119
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120-
*** EVENT so100_sim-abc123::stateUpdate [111aaabb]
120+
*** EVENT so100-abc123::stateUpdate [111aaabb]
121121
payload: sim_time=4.34, step_count=2070, running_policies={'so100': {'steps': 814, 'instruction': 'pick up the cube'}}
122122
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123123
```
@@ -180,7 +180,7 @@ The output is similar to:
180180

181181
```output
182182
Found 1 robot(s):
183-
so100-lab-1 — idle
183+
so100-abc123 — idle
184184
Execute result: {'success': True, 'result': {'status': 'success', 'content': [...]}}
185185
Status: {'success': True, 'result': {...}} # full sim state dict
186186
```

content/learning-paths/embedded-and-microcontrollers/device-connect-strands/run-infra-example.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,13 @@ Because `ZENOH_CONNECT` points at your host, the SDK routes traffic through the
112112

113113
```output
114114
INFO:strands_robots.mesh:Zenoh session started
115-
INFO:strands_robots.mesh:Peer ID: so100_sim-abc123
116-
device_connect_sdk.device.so100_sim-abc123 - INFO - Using ZENOH messaging backend
117-
device_connect_sdk.device.so100_sim-abc123 - INFO - Connected to ZENOH broker: ['tcp/192.168.1.42:7447']
118-
device_connect_sdk.device.so100_sim-abc123 - INFO - Device registered: registration_id=ecfff6a7-...
115+
INFO:strands_robots.mesh:Peer ID: so100-abc123
116+
device_connect_sdk.device.so100-abc123 - INFO - Using ZENOH messaging backend
117+
device_connect_sdk.device.so100-abc123 - INFO - Connected to ZENOH broker: ['tcp/192.168.1.42:7447']
118+
device_connect_sdk.device.so100-abc123 - INFO - Device registered: registration_id=ecfff6a7-...
119119
```
120120

121-
Note the peer ID (for example `so100_sim-abc123`). You will need it in the `tell` command below. Leave this process running on the Pi.
121+
Note the peer ID (for example `so100-abc123`). You will need it in the `tell` command below. Leave this process running on the Pi.
122122

123123
## Discover and invoke using the robot_mesh Strands tool
124124

@@ -135,18 +135,18 @@ The output is similar to:
135135

136136
```output
137137
Discovered 1 device(s):
138-
[robot] so100_sim-abc123 — idle
138+
[robot] so100-abc123 — idle
139139
Functions: execute, getFeatures, getState, getStatus, stop
140140
```
141141

142-
Send an instruction to the robot. Replace `so100_sim-abc123` with the peer ID shown in your output:
142+
Send an instruction to the robot. Replace `so100-abc123` with the peer ID shown in your output:
143143

144144
```python
145145
python <<'PY'
146146
from strands_robots.tools.robot_mesh import robot_mesh
147147
print(robot_mesh(
148148
action='tell',
149-
target='so100_sim-abc123',
149+
target='so100-abc123',
150150
instruction='pick up the cube',
151151
policy_provider='mock',
152152
))
@@ -156,7 +156,7 @@ PY
156156
The output is similar to:
157157

158158
```output
159-
-> so100_sim-abc123: pick up the cube
159+
-> so100-abc123: pick up the cube
160160
{"status": "accepted"}
161161
```
162162

content/learning-paths/embedded-and-microcontrollers/device-connect-strands/setup.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ git clone https://github.com/atsyplikhin/robots.git
3131

3232
The Device Connect integration code for `robots` lives on the `feat/device-connect-integration-draft` branch. This branch adds the `RobotDeviceDriver` adapter and the updated `robot_mesh` tool that routes calls through the Device Connect SDK rather than the raw Zenoh mesh.
3333

34-
TODO: remove feature branch? replace robots and feat/device-connect-integration-draft
35-
3634
```bash
3735
cd ~/strands-device-connect/robots
3836
git checkout feat/device-connect-integration-draft

0 commit comments

Comments
 (0)