ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OpenArm 上电调试实操:接线、CAN 配置到零位校准一次跑通

OpenArm 上电调试实操:接线、CAN 配置到零位校准一次跑通

OpenArm 上电调试实操:接线、CAN 配置到零位校准一次跑通

【免费下载链接】openarmA fully open-source humanoid arm for physical AI research and deployment in contact-rich environments.项目地址: https://gitcode.com/GitHub_Trending/op/openarm

刚拿到 OpenArm 硬件、还没碰过 CAN 总线的你,跟着这篇走完能拿到一个可预期的结果:主机通过 SocketCAN 与每个关节电机稳定通信,波特率统一为 5 Mbps,所有关节都完成零位校准——机械臂从此知道自己在哪个角度,具备跑 demo 和采集数据的前提。

开始前确认这几样东西就位:

  • 四组关节线缆(J1-J2、J3-J4、J4-J7、J7-J8)和 8 个关节电机
  • 一台装好 Linux 的主机,CAN 适配器已插好
  • 急停开关就位,工作区清空

第一步:把线接对,把 can0 拉起来

这一步在解决什么问题:让主机和机械臂之间先有一条物理上通、协议上通的链路。

先看总览:四组线缆各连哪里

线缆连接对象走线注意点
J1-J2肩部 J1、J2 电机,一端进 HUB 板注意接口方向,别插反
J3-J4上臂 J3 与肘部 J4 电机蓝色标记接 J3、绿色标记接 J4;沿上臂后侧走线,避免运动干涉
J4-J7J4、J5、J6、J7 四个电机束内最复杂:先接 J5 短分支,肘部弯到极限位置再接 J4,最后调角度接 J6、J7
J7-J8末端执行器与腕部末端最后接,留够活动余量

J3-J4 和 J4-J7 这两束最容易插错口,对照分配图核对每一支分支对应哪个关节:

:::warning 全程断电插拔。带电插 CAN 接头可能损坏 HUB 板或电机驱动器,接线阶段务必先断电源。 :::

装好诊断工具

这条命令一次装齐 SocketCAN 需要的诊断工具(candump 等)、iproute2 和 OpenArm 自己的 CAN 工具包:

sudo apt install -y software-properties-common sudo add-apt-repository -y ppa:openarm/main sudo apt update sudo apt install -y can-utils iproute2 libopenarm-can-dev openarm-can-utils

找到你的 can0

列出所有网络接口,你的 CAN 适配器通常叫can0,也可能叫can1或slcan0,后面命令里的can0都要换成你实际看到的名字:

ip link show

把 can0 拉起来

这条命令一条搞定"down → 配参 → up",把接口配置成 CAN FD 模式:仲裁段 1 Mbps、数据段 5 Mbps(推荐配置)。如果你手头是 CAN 2.0 适配器,去掉-fd -b -d参数用默认 2.0 配置即可;想完全手动配的话,用ip link set can0 type can系列命令效果相同,这里不展开。

openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000

确认流量

让 candump 盯着总线看几秒。总线像只有一个喇叭的群聊:同一时刻只能有一个节点发言,帧在总线上排队广播。接线正确、波特率匹配时,你会看到成串的帧 ID 和时间戳不停滚动。

candump can0

验收走线

接线收工后看一眼前后两个方向:线缆应整齐排列、无拉扯,弯臂运动时不拽线。

这一步做对了,你应该看到:candump 输出持续滚动的报文;ip link show can0显示接口 UP 且带 CAN FD 参数;机械臂各段线缆松紧适中。

第二步:把语速统一成 5 Mbps,再验证通话 📡

这一步在解决什么问题:让主机和每个电机用同一个"语速"说话。CAN 的波特率就是双方事先约好的语速,主机跑 5 Mbps 而电机还停在出厂的 1 Mbps,两边就一个在喊、一个在猜,谁也听不懂谁。

为什么先切 CAN 2.0:改波特率本质上是往电机里写时钟参数,这个写操作要求用 CAN 2.0 的普通帧完成握手,所以先把接口切到 2.0 模式。

openarm-can-configure-socketcan can0

临时写入:这条命令把 1 号电机的波特率临时改成 5 Mbps,立刻生效、断电丢失:

openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0

确认总线通信正常后,加--save永久写入。注意电机参数约有 10000 次写入寿命,这是闪存特性,日常调试只跑临时命令,别把写操作塞进循环脚本。

openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0 --save

切回 CAN FD:语速统一完,通信链路回到高速模式:

openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000

验证:这条命令从 CAN ID 1 发请求、等 17 回包,一次确认"1 号电机听得到、回得来":

openarm-can-motor-check 1 17 can0 -fd

对每个电机 ID 各跑一遍(回包地址一般是发报地址加 16:1→17、2→18、3→19)。输出里显示的波特率应为 5000000,和接口配置一致。

这一步做对了,你应该看到:所有电机 ID 检查通过,输出波特率与配置一致。

第三步:给机械臂定个"家"——零位校准

这一步在解决什么问题:告诉机械臂"这是家"。现在电机能聊了,但每个关节不知道自己当前角度。零位校准把摆好的姿态定义为所有关节的 0 点,之后的位姿、轨迹规划全靠这个原点。它是全文最要紧的一步。

先把机械臂手动摆到零位参考姿态:各关节对齐下图位置,夹爪默认以闭合位置为零。

:::warning 校准开始后机械臂会自动运动。清空工作区、人站在急停按钮旁盯着,随时准备拍下急停。 :::

默认对 can0 上的右臂执行:

openarm-can-zero-position-calibration

双臂或 leader-follower 配置下,两支臂独立摆放、分别校准:

openarm-can-zero-position-calibration --canport can1 --arm-side left_arm openarm-can-zero-position-calibration --canport can2 --arm-side right_arm

闭环动作:断电重启。关掉电源等电机完全停转,再上电,重新跑一次 motor-check。波特率仍显示 5 Mbps、通信正常,说明参数真正落进了电机闪存,而不是只活在这一次供电里。至此从接线到归零的闭环完成。

这一步做对了,你应该看到:校准流程完整跑完,重启后各关节读数稳定、不再漂移,机械臂摆回零位姿态时读数接近 0。

收尾:出事了怎么办

现象可能原因处理动作
ip link show看不到 can0驱动或内核模块没加载跑sudo modprobe can_raw;串口型适配器需先起slcand封装
candump 无流量线缆松动、电机未上电、120Ω 终端电阻缺失逐段检查接头,确认总线两端各有一只 120Ω 终端电阻——它让信号不反射,少了它高速帧会乱码
改波特率后不匹配写操作不在 CAN 2.0 模式下执行接口切回 2.0,重跑 change-baudrate,再切回 FD
某电机无响应电机 ID 设置错、分支接错口对照线缆分配图核对该 ID 的收发地址(1→17 这类规律),用 candump 观察是谁在说话
校准失败、动作异常起始姿态离零位太远手动摆回参考姿态后重新校准

30 秒回顾

  1. 四组线缆接对,走线整齐
  2. can0 拉起为 CAN FD(1M/5M),candump 有滚动流量
  3. 切 2.0 把波特率改成 5 Mbps 并--save,再切回 FD
  4. motor-check 全 ID 通过
  5. 摆零位、跑校准
  6. 断电重启,再验证一次

接下来往哪走

想深入细节,仓库里的 CAN 总线设置文档 和 电机配置文档 覆盖了完整参数。跑通之后,顺路径继续 运行 demo,或直接进 ROS 2 控制 和 Isaac Lab / MuJoCo 仿真,让这台机械臂真正动起来。

【免费下载链接】openarmA fully open-source humanoid arm for physical AI research and deployment in contact-rich environments.项目地址: https://gitcode.com/GitHub_Trending/op/openarm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进