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 上电,你大概率会撞上这个场面:电机纹丝不动,终端里也抓不到任何数据,第一反应往往是"硬件是不是坏了"。别急着怀疑,十有八九只是 OpenArm 电机配置和 OpenArm CAN 总线通信这两件事还没跑通。这篇文章我站在真机旁边,按"电脑端准备 → 物理接线 → 链路配置 → 电机参数 → 校准验收"的顺序带你一次打通,顺序和常见的"先接线后装软件"的写法故意反了过来——先让电脑侧就绪,再接线时心里才有底。

准备工作:装好 CAN 工具并认出你的 CAN 接口

在碰任何线缆之前,先把电脑侧的活干完。OpenArm 的电机通信走 CAN 总线(Controller Area Network,一种汽车电子里常用的多设备串联通信协议),在 Linux 上依赖 SocketCAN,也就是 Linux 内核自带的 CAN 通信栈,你只需装几个用户态工具即可。

安装 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

执行完应看到 apt 正常结束、无报错;can-utils和iproute2分别提供抓帧和接口管理命令,后两个openarm-*包是本项目的专属配置工具。

然后列出系统所有网络接口,确认你的 CAN 适配器被识别:

ip link show

输出里应出现名为can0(或can1)的条目。后面所有命令都基于这个名字,先记下来。

物理接线:四组线缆怎么接、怎么走线

OpenArm 的关节电机由四组线缆分别接入主控制器:J1-J2(肩部)、J3-J4(上臂段)、J4-J7(前臂到腕部)、J7-J8(末端执行器)。先看整体拓扑,蓝色标注 J3-J4 段,粉色标注 J4-J7 段:

J3-J4 与 J4-J7:两条上臂线束

J3-J4 线缆一端接 HUB 板,另一端分叉去接两个电机。接口分配如下:

接的时候记住三件事:

  • 蓝色标记的 J3 接口接上臂电机,绿色标记的 J4 接口接肘部电机
  • 线缆沿上臂后侧走线,避开运动轨迹
  • 插到位后轻拉一下,确认没有虚接

J4-J7 是最复杂的一条线束,一个分支要管 J4、J5、J6、J7 四个电机,接口分配如图所示:

按这个顺序接最省力:

  1. 先接 J5 电机(较短的那个分支)到前臂
  2. 把肘部弯到极限位置,接 J4 电机
  3. 再调整手臂角度,依次接 J6 和 J7 电机

J1-J2 肩部与 J7-J8 末端

肩部 J1、J2 电机的接口方向有讲究,插错会顶到外壳,对照下图确认方向后再插:

末端执行器走 J7-J8 线缆从腕部引出,按线束标签对号入座即可,插完后确认插头卡扣都锁死。

接线完成的目视检查

全部接完后绕着臂看一圈,前后两个视角的参考效果如下:线缆应整齐排列、走向自然,没有任何被拉伸或悬吊的段落:

链路配置:CAN 2.0 与 CAN FD 两种模式怎么设

线接好了,现在把链路层跑起来。先说清两种模式:CAN 2.0 是基础帧格式;CAN FD(Flexible Data-rate)在 CAN 2.0 基础上支持更高的数据率和更大的单帧容量,日常运行推荐用它。

方法一:用 OpenArm 配置工具(推荐)

CAN 2.0 模式:

openarm-can-configure-socketcan can0

CAN FD 模式(推荐,数据段 5 Mbps、仲裁段 1 Mbps):

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

两条命令都应在无报错的情况下静默结束,这是工具类命令的"成功"样子。

方法二:手动配置

不想用工具时,用ip link手动完成。CAN 2.0:

sudo ip link set can0 down sudo ip link set can0 type can bitrate 1000000 sudo ip link set can0 up

CAN FD:

ip link set can0 down sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on sudo ip link set can0 up

先 down 再改参数最后 up,是这个流程的固定三步。

验证接口状态

ip link show can0

输出中应能看到state UP以及can <bitrate>(FD 模式还带fd)字样,说明配置已生效。

再抓一把总线上实际流动的数据:

candump can0

电机上电后,candump会持续滚动打印帧;一直空白则说明总线没有数据,回到接线一节检查。

电机参数:波特率的临时设置与永久烧录

链路通了,接下来让每个电机说同一种"语速"。这一步有两条硬规矩,务必先看:

:::warning

  • 设置电机波特率时必须先用 CAN 2.0 模式,写完后再切回 CAN FD 运行。
  • 电机参数存储的写入次数有限(约 10000 次),每次--flash都在消耗寿命,确认数值正确再烧录,不要反复试。 :::

先做临时设置(以 5 Mbps、CAN ID 1 的电机为例):

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

执行后当前会话内该电机即以新波特率应答;断电后会还原,所以只是"试一下"。

确认无误后再永久烧录进电机:

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

多出的--flash就是"写进电机内部存储"的意思。

波特率档位全部列出(--baudrate取值对应关系):

档位波特率说明
0125000125 kbps,低速备用
410000001 Mbps
950000005 Mbps(推荐)

校准验收:零位校准与电机通信验证

先摆好零位,再执行校准

零位决定了机械臂所有后续动作的坐标基准。校准前先把机械臂手动摆到下图所示的近似零位姿势:

:::warning 零位校准过程中机械臂会自动运动!执行前清空工作区域内的所有人和物体,确保紧急停止按钮在手可及之处。 :::

默认对 can0 上的右臂执行校准:

openarm-can-zero-position-calibration

左右臂分开挂在不同 CAN 口、用--arm_side指明,两条命令分别对应:

# 左侧领导者臂(leader) openarm-can-zero-position-calibration --canport can1 --arm_side left_arm # 右侧跟随者臂(follower) openarm-can-zero-position-calibration --canport can2 --arm_side right_arm

校准成功的标志是各关节依次归位到零位并保持;中途报错通常回到"摆好零位"这一步重来。

用 motor-check 逐个验证电机

最后逐台确认电机在总线上应答(示例:CAN ID 1 发送、ID 17 接收):

CAN 2.0 模式:

openarm-can-motor-check 1 17 can0

CAN FD 模式:

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

输出中应能看到该电机的应答信息,据此核对三件事:

  1. 显示的波特率与你刚烧录的配置一致
  2. 断电重启后重新检查,确认设置没有被还原
  3. 把每个电机的 ID 都过一遍,全部能应答才算验收通过

排障速查:五类常见问题对照

现象可能原因处理
系统里找不到 CAN 接口can_raw 内核模块未加载sudo modprobe can_raw
通信时通时断线缆接触不良、终端电阻缺失逐个重插接头;确认总线上装有 120Ω 终端电阻
电机应答混乱 / 无应答电机侧波特率与主机不匹配切回 CAN 2.0 模式重新设置电机波特率
零位校准失败机械臂未处于近似零位、电机未供电手动摆回零位姿势,检查供电再执行
运动轨迹异常零位基准偏移、电机 ID 对不上重新执行零位校准,核对电机 ID 映射

更细的步骤和截图,对照仓库内的官方文档走一遍即可:CAN 总线设置文档、通信测试文档、电机配置文档。

到这里,从一根线缆到一条应答帧都验证过了。电机配置与 CAN 总线通信就绪之后,下一步就可以进入 MoveIt2 规划与遥操作阶段,那是另一篇文章的事了。

【免费下载链接】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

延伸阅读

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