Skip to content

Commit bf0c96a

Browse files
authored
Merge branch 'docusaurus-version' into docusaurus-version
2 parents 90c0daf + a6ec8aa commit bf0c96a

File tree

76 files changed

+8771
-2515
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+8771
-2515
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"write-translations": "docusaurus write-translations",
2727
"write-heading-ids": "docusaurus write-heading-ids",
2828
"typecheck": "tsc",
29-
"generatewiki": "node scripts/generateWiki.js",
29+
"generatewiki": "yarn generate-jetson-config && node scripts/generateWiki.js",
3030
"generate-lang-map": "node scripts/generate-language-map.js",
3131
"generate-jetson-config": "node scripts/generate-jetson-config.js",
3232
"normalize-frontmatter": "node scripts/normalize-frontmatter.js"
Lines changed: 346 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,346 @@
1+
---
2+
description: This wiki shows how to control SO-Arm on Jetson Thor with OpenClaw and LeRobot.
3+
title: Control SO-Arm by OpenClaw on Jetson Thor
4+
image: https://files.seeedstudio.com/wiki/reComputer-Jetson/openclaw/soarm_claw.webp
5+
slug: /ai_robotics_control_soarm_by_openclaw_on_jetson_thor
6+
sku: 100060965 | 100046482
7+
last_update:
8+
date: 03/09/2026
9+
author: youjiang
10+
---
11+
12+
# Control SO-Arm by OpenClaw on Jetson Thor
13+
14+
## Introduction
15+
16+
This wiki explains how to combine OpenClaw and LeRobot on Jetson Thor to control a SO-Arm with a local AI agent.
17+
18+
**NVIDIA Jetson AGX Thor** is a high-performance edge AI platform designed for robotics and physical AI workloads, providing strong on-device compute for perception, planning, and control.
19+
20+
**SO-Arm** is an open-source low-cost robotic arm platform (SO-ARM100/SO-ARM101) that is widely used for embodied AI experiments, teleoperation, and manipulation task development.
21+
22+
**OpenClaw** is an AI agent framework that can orchestrate local tools and models. In this project, OpenClaw is used as the high-level control interface, while LeRobot provides the low-level motor communication and calibration utilities for SO-Arm.
23+
24+
<div align="center">
25+
<img width={900}
26+
src="https://files.seeedstudio.com/wiki/reComputer-Jetson/openclaw/soarm_claw.png" />
27+
</div>
28+
29+
:::note
30+
In this guide, OpenClaw handles agent planning and task orchestration, while SO-Arm motion execution is handled by LeRobot.
31+
:::
32+
33+
## Table of Contents
34+
35+
1. [Hardware Preparation](#hardware-preparation)
36+
2. [System Setup on Jetson Thor](#system-setup-on-jetson-thor)
37+
3. [Install Ollama and Run a Local LLM](#install-ollama-and-run-a-local-llm)
38+
4. [Install OpenClaw on Jetson Thor](#install-openclaw-on-jetson-thor)
39+
5. [Connect and Calibrate SO-Arm](#connect-and-calibrate-so-arm)
40+
6. [Run Control Demo](#run-control-demo)
41+
7. [References](#references)
42+
43+
## Hardware Preparation
44+
45+
### Device List
46+
47+
- 1x NVIDIA® Jetson AGX Thor™ Developer Kit
48+
- 1x SO-ARM101 Low-Cost AI Arm
49+
50+
<div class="table-center">
51+
<table style={{ textAlign: 'center' }}>
52+
<tr>
53+
<th> NVIDIA® Jetson AGX Thor™ Developer Kit </th>
54+
<th> SO-ARM101 Low-Cost AI Arm </th>
55+
</tr>
56+
<tr>
57+
<td>
58+
<div style={{textAlign:'center'}}>
59+
<img src="https://media-cdn.seeedstudio.com/media/catalog/product/cache/bb49d3ec4ee05b6f018e93f896b8a25d/i/m/image-kit-3.png" style={{width:400, height:'auto'}}/>
60+
</div>
61+
</td>
62+
<td>
63+
<div style={{textAlign:'center'}}>
64+
<img src="https://media-cdn.seeedstudio.com/media/catalog/product/cache/bb49d3ec4ee05b6f018e93f896b8a25d/1/-/1-100046482-so-arm-101-assembled-kit-pro.jpg" style={{width:400, height:'auto'}}/>
65+
</div>
66+
</td>
67+
</tr>
68+
<tr>
69+
<td>
70+
<div class="get_one_now_container" style={{textAlign: 'center'}}>
71+
<a class="get_one_now_item" href="https://www.seeedstudio.com/NVIDIA-Jetson-AGX-Thor-Developer-Kit-p-9965.html">
72+
<strong><span><font color={'FFFFFF'} size={"4"}> Get One Now 🖱️</font></span></strong>
73+
</a>
74+
</div>
75+
</td>
76+
<td>
77+
<div class="get_one_now_container" style={{textAlign: 'center'}}>
78+
<a class="get_one_now_item" href="https://www.seeedstudio.com/SO-ARM-101-Assembled-Kit-Pro-p-6691.html">
79+
<strong><span><font color={'FFFFFF'} size={"4"}> Get One Now 🖱️</font></span></strong>
80+
</a>
81+
</div>
82+
</td>
83+
</tr>
84+
</table>
85+
</div>
86+
87+
### Wiring and Connection
88+
89+
- Connect the SO-Arm controller board to Thor through USB.
90+
- Connect the matching DC power adapter to the SO-Arm controller board.
91+
- Power on Thor, then power on the arm controller board.
92+
93+
### Power-On Checklist
94+
95+
- Thor boots normally and network is available.
96+
- SO-Arm controller board LEDs are on.
97+
- Serial device appears after USB connection.
98+
99+
```bash
100+
ls /dev/ttyACM*
101+
```
102+
103+
If a serial node is detected in terminal output, the hardware connection is correct.
104+
105+
<div align="center">
106+
<img width={900}
107+
src="https://files.seeedstudio.com/wiki/reComputer-Jetson/openclaw/check_serial.png" />
108+
</div>
109+
110+
## System Setup on Jetson Thor
111+
112+
### Update System Packages
113+
114+
```bash
115+
sudo apt update
116+
sudo apt install -y nvidia-jetpack git curl ffmpeg python3-pip
117+
python3 -m pip install -U pip
118+
```
119+
120+
### Install Core Dependencies
121+
122+
Install Miniconda (recommended):
123+
124+
```bash
125+
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
126+
chmod +x Miniconda3-latest-Linux-aarch64.sh
127+
./Miniconda3-latest-Linux-aarch64.sh
128+
source ~/.bashrc
129+
```
130+
131+
<div align="center">
132+
<img width={900}
133+
src="https://files.seeedstudio.com/wiki/reComputer-Jetson/openclaw/conda.png" />
134+
</div>
135+
136+
Create LeRobot environment:
137+
138+
```bash
139+
conda create -y -n lerobot python=3.12
140+
conda activate lerobot
141+
git clone https://github.com/huggingface/lerobot.git ~/lerobot
142+
cd ~/lerobot
143+
pip install -e .
144+
pip uninstall torch torchvision
145+
pip install torch torchvision --index-url https://pypi.jetson-ai-lab.io
146+
```
147+
148+
Install Pinocchio in the LeRobot environment:
149+
150+
```bash
151+
conda install pinocchio -c conda-forge
152+
```
153+
154+
### Verify CUDA and Peripheral Devices
155+
156+
```bash
157+
python -c "import torch; print(torch.cuda.is_available())"
158+
lerobot-find-port
159+
```
160+
161+
Expected result:
162+
163+
- `torch.cuda.is_available()` prints `True`
164+
- arm serial ports are detected (for example `/dev/ttyACM0`)
165+
166+
## Install Ollama and Run a Local LLM
167+
168+
Install Ollama:
169+
170+
```bash
171+
curl -fsSL https://ollama.com/install.sh | sh
172+
```
173+
174+
Pull a model:
175+
176+
```bash
177+
ollama pull qwen3-vl:9b
178+
```
179+
180+
:::info
181+
This guide uses `qwen3-vl:9b` as an example. You can replace it with another Ollama model based on your performance and memory constraints.
182+
:::
183+
184+
## Install OpenClaw on Jetson Thor
185+
186+
### Install OpenClaw
187+
188+
```bash
189+
curl -fsSL https://openclaw.ai/install.sh | bash
190+
```
191+
192+
### Configure Runtime Parameters
193+
194+
Edit `~/.openclaw/openclaw.json` and set Ollama as the default model provider:
195+
196+
```json
197+
{
198+
"agents": {
199+
"defaults": {
200+
"models": {
201+
"ollama": {}
202+
},
203+
"model": {
204+
"primary": "ollama/qwen3-vl:9b"
205+
}
206+
}
207+
},
208+
"models": {
209+
"providers": {
210+
"ollama": {
211+
"baseUrl": "http://127.0.0.1:11434/v1",
212+
"apiKey": "ollama-local",
213+
"api": "openai-completions",
214+
"models": [
215+
{
216+
"id": "qwen3-vl:9b",
217+
"name": "Qwen3 VL 9B",
218+
"reasoning": false,
219+
"input": [
220+
"text"
221+
],
222+
"cost": {
223+
"input": 0,
224+
"output": 0,
225+
"cacheRead": 0,
226+
"cacheWrite": 0
227+
},
228+
"contextWindow": 128000,
229+
"maxTokens": 8192
230+
}
231+
]
232+
}
233+
}
234+
}
235+
}
236+
```
237+
238+
:::note
239+
Optional: you can also directly use the script provided by Ollama to quickly set up the OpenClaw configuration file.
240+
241+
`ollama launch openclaw --model qwen3.5`
242+
:::
243+
244+
### More Configure
245+
246+
Install the SO-Arm control skill:
247+
248+
- Download [soarm-control Skill](https://clawhub.ai/yuyoujiang/soarm-control)
249+
- Extract it to `~/.openclaw/workspace/skills`
250+
251+
Prepare robot description file:
252+
253+
- Download [SO-ARM101 URDF](https://github.com/TheRobotStudio/SO-ARM100/blob/main/Simulation/SO101/so101_new_calib.urdf)
254+
- Move it to `~/.openclaw/workspace/skills/soarm-control/references`
255+
256+
Restart OpenClaw gateway:
257+
258+
```bash
259+
openclaw gateway restart
260+
```
261+
262+
Open WebUI:
263+
264+
```text
265+
http://127.0.0.1:18789/
266+
```
267+
268+
## Connect and Calibrate SO-Arm
269+
270+
### Serial Port Permission and Detection
271+
272+
```bash
273+
conda activate lerobot
274+
lerobot-find-port
275+
sudo chmod 666 /dev/ttyACM*
276+
```
277+
278+
### Initial Calibration
279+
280+
Calibrate follower arm:
281+
282+
```bash
283+
lerobot-calibrate \
284+
--robot.type=so101_follower \
285+
--robot.port=/dev/ttyACM0 \
286+
--robot.id=openclaw_soarm
287+
```
288+
289+
Calibration files are saved under:
290+
291+
`~/.cache/huggingface/lerobot/calibration/`
292+
293+
:::note
294+
For a full calibration walkthrough, refer to:
295+
[SO-Arm in LeRobot - Calibrate](https://wiki.seeedstudio.com/lerobot_so100m_new/#calibrate)
296+
:::
297+
298+
## Run Control Demo
299+
300+
### Launch OpenClaw Service
301+
302+
Ensure OpenClaw and LeRobot environments are ready:
303+
304+
```bash
305+
openclaw gateway restart
306+
conda activate lerobot
307+
```
308+
309+
### Execute Basic Motion Task
310+
311+
In OpenClaw WebUI, enter robot control instructions. OpenClaw will parse your prompt and call the installed `soarm-control` skill to drive the arm to the target position.
312+
313+
The video demonstrates three commands:
314+
315+
1. Move the robotic arm’s end effector upward by 20 cm.
316+
2. Then move forward by 20 cm, keeping the height unchanged.
317+
3. Return to the initial position.
318+
319+
OpenClaw’s responses to these three commands all match the expected behavior.
320+
321+
<div class="video-container">
322+
<iframe width="800" height="450" src="https://www.youtube.com/embed/5fPBpAno2wc" title="Using OpenClaw to Control the SOARM 101 Robot Arm | Robotics Demo" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
323+
</div>
324+
325+
## References
326+
327+
- https://docs.openclaw.ai/
328+
- https://wiki.seeedstudio.com/local_openclaw_on_recomputer_jetson/
329+
- https://unstabledemos.com/tutorials/openclaw-orin-nano/
330+
- https://wiki.seeedstudio.com/lerobot_so100m_new/
331+
- https://github.com/huggingface/lerobot
332+
- https://github.com/TheRobotStudio/SO-ARM100
333+
334+
## Tech Support & Product Discussion
335+
336+
Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
337+
338+
<div class="button_tech_support_container">
339+
<a href="https://forum.seeedstudio.com/" class="button_forum"></a>
340+
<a href="https://www.seeedstudio.com/contacts" class="button_email"></a>
341+
</div>
342+
343+
<div class="button_tech_support_container">
344+
<a href="https://discord.gg/eWkprNDMU7" class="button_discord"></a>
345+
<a href="https://github.com/Seeed-Studio/wiki-documents/discussions/69" class="button_discussion"></a>
346+
</div>

0 commit comments

Comments
 (0)