
1. 从零把 SO-100 机械臂交给 AI这套链路到底在做什么如果你手上有一台 SO-100 六自由度机械臂又想让 Claude Code 或 openclaw 这类 AI Agent 直接接管它那么你真正要打通的其实是一条“自然语言 → Skill 规则 → Python 控制脚本 → 串口舵机”的链路。SO-100 是 HuggingFace LeRobot 生态里非常经典的低成本桌面机械臂六个关节全部使用 STS3215 总线舵机通过一根 USB 转串口线就能控制skills 则是给 AI 看的“说明书”用 Markdown 描述关节范围、安全规则、视觉定位方式和异常处理openclaw 和 claude code 是运行 Skill 的 Agent 平台负责理解你的意图并调用底层脚本。这套组合适合谁适合完全没有机器人开发经验、但会照着文档敲命令的小白适合已经买了 SO-100 但只会跑官方 demo、想让 AI 帮忙规划动作的爱好者也适合想把“AI 控制物理世界”这件事跑通一次、验证具身智能最小闭环的开发者。整条链路里最容易卡住的不是机械臂本身而是 AI Agent 的模型通道配置——也就是让 claude code 或 openclaw 能稳定调用大模型。这篇会把 TaoToken 统一 Key 写进 settings.json 和 config.toml 的骨架配置完整给出再配一份可复制的 skills 调用机械臂动作片段最后做一次端到端验证让你从空环境跑出 AI 控制机械臂的第一条指令。我试过把模型通道和机械臂控制分开调试先确认 AI 能正常对话再确认串口能单独驱动电机最后才把两者接起来这样排障会快很多。下面按这个顺序展开。2. 前置准备TaoToken 统一 Key 与 API 通道在让 AI 接管机械臂之前先解决“AI 的大脑从哪来”。claude code 和 openclaw 都需要一个模型 API 通道TaoToken 提供统一的 Key 和 API 入口把模型对话、coding plan、控制台、API Keys 管理都收在一个后台里省得你在多个平台之间来回切换。你需要先拿到两样东西一个是 API Key一个是 API 基础地址。基础地址固定为https://taotoken.net/api注意这个地址不带任何查询参数直接作为 base_url 使用。API Key 在控制台的 API Keys 页面创建创建后只显示一次复制下来存好。注意API Key 等同于账号凭证不要写进会提交到 Git 的公开仓库。建议放在项目根目录的.env或本地配置文件里并在.gitignore中排除。TaoToken 的入口和几个常用页面如下按需访问即可官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 基础地址https://taotoken.net/api模型对话体验https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewriteCoding Plan 订阅https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你打算长期用 claude code 做机械臂的日常编码和 Agent 任务Coding Plan 会比按量计费更省心如果只是先验证模型能不能通用模型对话页面点几下就能确认 Key 是否有效。拿到 Key 之后先别急着配机械臂用一条 curl 确认通道可用curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复 OK}] }返回里出现正常的choices字段说明 Key 和通道都没问题。这一步过了再往下配 Agent 的配置文件。3. 可复制配置settings.json 与 config.toml 写入 TaoTokenclaude code 和 openclaw 读取配置的位置不同一个用 JSON一个用 TOML。下面给出两份骨架配置把 TaoToken 的 Key 和 API 通道写进去你按自己的实际路径替换即可。3.1 claude code 的 settings.jsonclaude code 的用户级配置一般放在~/.claude/settings.json项目级放在项目根目录的.claude/settings.json。推荐用项目级方便跟机械臂项目一起管理。核心是把模型请求指向 TaoToken 的 API 地址并注入 Key。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的TaoTokenKey, ANTHROPIC_MODEL: claude-sonnet-4-20250514 }, permissions: { allow: [ Bash(python:*), Read, Write, Edit ] } }这里ANTHROPIC_BASE_URL指向 TaoToken 的 API 地址ANTHROPIC_AUTH_TOKEN填你的 Key。permissions.allow里放开Bash(python:*)是因为 Skill 最终要调用 Python 脚本去驱动机械臂AI 需要执行命令的权限。如果你不想让它自动执行可以先不放开等验证阶段再手动确认。3.2 openclaw 的 config.tomlopenclaw 的配置通常放在~/.openclaw/config.toml模型通道和 Skill 目录都在这里声明。下面这份骨架把 TaoToken 作为模型提供方同时指定 skills 的搜索路径。[model] provider anthropic base_url https://taotoken.net/api api_key sk-你的TaoTokenKey model claude-sonnet-4-20250514 [skills] paths [./skills, ~/.openclaw/skills] auto_load true [agent] max_turns 20 working_dir ./claw_arm[model]段负责模型通道[skills]段告诉 openclaw 去哪里找 Skill 文件[agent]段限定工作目录和最大轮次避免 AI 在机械臂任务里无限循环。openclaw 的 Skill 遵循 AgentSkills 规范本质是一个带SKILL.md的文件夹metadata.openclaw.requires里可以声明需要的 bins、env、config用户侧的启用和禁用也在配置里控制。3.3 环境变量兜底如果你不想把 Key 写死在配置文件里可以用环境变量两个工具都支持读取export TAOTOKEN_API_KEYsk-你的TaoTokenKey export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKEN$TAOTOKEN_API_KEY写进~/.bashrc或~/.zshrc后source一下。这样配置文件里只留地址Key 走环境变量安全性和可移植性都更好。4. 让 AI 认识机械臂skills 目录与可复制动作片段配置好模型通道后下一步是让 AI 知道“机械臂有哪些关节、怎么控制、安全边界在哪”。这就是 Skill 的作用。Skill 是一份 Markdown 文件AI 读完它就能理解物理世界的约束自主决定调用哪个脚本、传什么参数。4.1 目录结构在机械臂项目根目录下建一个skills/nature_arm/结构如下skills/nature_arm/ ├── SKILL.md ├── references/ │ └── so100_calibration.md └── scripts/ ├── simple_joint.py └── simple_pnp.pySKILL.md是核心规则文档references/放标定数据scripts/放 AI 可以调用的控制脚本。4.2 SKILL.md 骨架--- name: nature_arm description: 控制 SO-100 机械臂完成抓取、移动、放置任务。 metadata: {env: python, mode: control} --- # 规则 - 第一守则绝对确保用户安全 - 第二守则绝对保障机械臂自身安全 - 运动要求低速平滑消除抖动 - 代码生成非必要不新写代码优先复用 scripts 下的脚本 # 触发条件 任何涉及“机械臂”“抓取”“放置”的相关词。 # 关节描述 ID 1~6 的描述参考 references/so100_calibration.md 关节 1-5 为运动轴通道 6 控制末端夹爪开合。 # 关节控制 基于描述参考 scripts/simple_joint.py 进行控制。 # 空间理解 基于 PnP 进行位姿理解参考 scripts/simple_pnp.py 输出位姿为相机坐标系单位毫米。 # 异常处理 - 通信丢失立即停止发送指令保持当前力矩。 - 用户急停收到“停止”“急停”指令跳过所有逻辑直接发送 Stop 信号。 - 报错处理捕获异常日志分析原因后建议用户重试或回退不盲目重试。 # 格外建议 - 抓取任务时抵达目标位置后先停顿 1 秒再闭合夹爪。path语法让 AI 在执行时读取引用文件不用把所有代码塞进 SKILL.md。description写得好AI 才能准确判断何时激活这个 Skill。4.3 可复制的关节控制片段scripts/simple_joint.py给 AI 提供安全的关节控制接口核心是范围限制和扭矩管理class Joint: def __init__(self, port, pkt, joint_id): self.port port self.pkt pkt self.joint_id joint_id def enable(self): self.pkt.write1ByteTxRx(self.port, self.joint_id, 40, 1) def disable(self): self.pkt.write1ByteTxRx(self.port, self.joint_id, 40, 0) def move(self, position): position max(0, min(4095, position)) self.pkt.write2ByteTxRx(self.port, self.joint_id, 42, position) def position(self): pos, _, _ self.pkt.read2ByteTxRx(self.port, self.joint_id, 56) return posmove()里的max(0, min(4095, position))是防止 AI 发出超出机械极限的指令这是安全底线。位置范围 0-4095 对应舵机 0-360 度。4.4 一次抓取动作的调用链当你说“抓起桌上的绿色物体”AI 会按 SKILL.md 的指引依次调用GreenDetector检测绿色物体 →PoseEstimator用 PnP 算出相机坐标下的 3D 位姿 →Arm.camera_to_base()转换到基座坐标 →ArmKinematics.inverse_simple()做逆运动学求解 →MotorController.move_angles()发送六个关节角度 → 停顿 1 秒 →Arm.grasp(True)闭合夹爪。整条链路 AI 自主完成你只需要一句话。5. 端到端验证从空环境跑通第一条指令配置和 Skill 都就位后做一次完整验证。先确认 Python 环境和串口python -c import cv2, numpy, serial; print(Python OK) ls /dev/ttyUSB* # LinuxWindows 看设备管理器然后启动 claude code进入机械臂项目目录cd claw_arm claude在对话里输入第一条指令/nature_arm 让机械臂回到初始位置AI 会加载 SKILL.md读取references/so100_calibration.md里的零点位置调用simple_joint.py的Joint.move()把六个关节移到 home 位姿。如果机械臂平滑地回到初始位置说明模型通道、Skill 加载、串口通信、关节控制整条链路全部打通。接着验证视觉抓取/nature_arm 抓取桌面上的绿色物体预期结果是摄像头打开、检测到绿色物体、机械臂移动到目标上方、停顿、闭合夹爪。第一次跑建议把机械臂周围清空手放在电源开关旁边随时能断电。注意首次验证时把运动速度调低SKILL.md 里已经写了“低速平滑”但底层脚本的插值步数也可以临时调大确认路径安全后再恢复。6. 本篇常见错排查AI 找不到 Skill确认目录是.claude/skills/nature_arm/SKILL.md或者启动时用--add-dir ./skills指定路径。openclaw 则检查config.toml里[skills].paths是否包含你的 skills 目录。模型请求 401 或超时先单独用 curl 测 TaoToken 通道确认 Key 有效、base_url 是https://taotoken.net/api。如果 curl 通但 Agent 不通检查 settings.json 里ANTHROPIC_AUTH_TOKEN有没有写错或者环境变量有没有覆盖配置文件。电机连不上串口号要跟设备管理器里的一致波特率必须是 1000000驱动装 CH340 或 CP2102关掉其它占用串口的工具。SO-100 用的是 STS3215 总线舵机串口被占用时电机不会响应。AI 控制动作不准重新标定相机更新references/so100_calibration.md里的校准数据检查simple_pnp.py中的手眼标定矩阵。换摄像头角度后必须重新标定否则相机坐标转基座坐标会偏。AI 触发了错误动作在 SKILL.md 的规则里加更具体的约束比如“移动前必须先读取当前位置确认安全”。规则写得越具体AI 执行越稳。openclaw 里 Skill 不自动加载检查metadata.openclaw.requires声明的 bins、env、config 是否满足用户侧在~/.openclaw/openclaw.json的 skills 下确认启用状态。7. 继续往下走把通道和 Skill 用顺跑通第一条指令后你可以把模型通道固定下来长期用 claude code 或 openclaw 做机械臂的日常任务。如果只是偶尔验证模型用模型对话页面就够了如果打算长期编码、写新 Skill、跑 Agent 任务Coding Plan 更合适接入和排障过程中遇到配置问题直接查接入文档最快。验证模型对话https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite长期编码与 Agenthttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite管理 API Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite这套 Skill 驱动的模式不止能用在 SO-100 上3D 打印机、CNC 机床、无人机的控制逻辑都能套用同一个思路把物理世界的知识写成 Skill让 AI 读说明书自主决策。你写的不只是代码而是 AI 理解物理世界的桥梁。