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 总线通信调试:从 8 个关节的机械臂接线、CAN 接口调通,到波特率对齐、零点校准,最后确认每台电机都稳定响应。CAN 总线说白了就是多台设备共用一条双绞线的串行通信协议——机械臂上每台电机都挂在同一条总线上,靠各自的 ID 互相区分。
先把环境和工具准备好
软件端需要一台支持 SocketCAN 的 Linux 机器(Ubuntu 22.04/24.04 都没问题),硬件端备好 24V 电源和接好线的机械臂。电机 ID 如果还没烧录,先按电机 ID 设置文档完成,后面所有命令都建立在 ID 正确的基础上。
安装 CAN 工具链:
sudo add-apt-repository -y ppa:openarm/main && sudo apt update sudo apt install -y can-utils iproute2 libopenarm-can-dev openarm-can-utils装完先确认系统认不认你的 CAN 适配器:
ip link show | grep can能列出can0、can1之类的接口,说明硬件被识别了。接口列表里翻不到 can0?多半是驱动没加载,跑一下sudo modprobe can_raw,再看dmesg里的设备日志;串口型适配器有时还得靠slcand这类包装工具才会露面。
把 8 个关节接上总线 🔌
接线顺序随意,但有一条硬规矩:所有线缆沿手臂后侧走线,别从前面横穿,运动时才不会互相干涉。连接器很娇气,插拔时捏住接头本体,别拽线。
整体拓扑先看这张图,蓝色标注 J3–J4 段,粉色标注 J4–J7 段:
肩部与上臂:J1 到 J4
- J1 线缆从"腋窝"穿到手臂后侧,J2 接好后把线向下弯折固定。
- J3–J4 这一根一头进 HUB 板,另一头分叉:J3 接口接上臂电机,J4 接口接肘部电机。
- J4 的接口离钣金很近,注意别夹到线;J1/J2 线缆上的白色小插头要对齐到位,没插正会松。
前臂到腕部:J4 到 J7
这是最折腾的一段,一根线束要接 J4、J5、J6、J7 四个电机,建议按这个顺序来:
- 从手臂背面先接 J5(分支最短);
- 把肘部弯到机械极限位,再插 J4;
- 调整手臂角度,找最顺手的角度接 J6 和 J7。
末端 J7–J8,以及走线检查
J7–J8 这根线一头插 J7 电机底部的小接口,另一头接夹爪电机(J8),直接对插即可。
全部接完绕着看一圈,线缆应整齐贴在后侧、没有明显拉扯,对照这张前视图检查:
前后视角的完整参考图在机械臂接线详解里,可以对着逐段核对。
一条命令打通 CAN 通信 📡
接口配好速率才算真正调通。推荐直接用 OpenArm 的配置命令,默认就是 CAN FD、仲裁段 1Mbps、数据段 5Mbps:
openarm-can-cli -i can0 can_configure四路 CAN(左右臂加夹爪)想一次配完,用这条:
openarm-can-configure-socketcan-4-arms习惯手动操作的可以直接用ip link逐条设置,完整写法见CAN 接口配置文档。
配完马上验证两步:
ip link show can0状态是UP就对了。再开一个终端抓流量:
candump can0空总线上可能看不到什么,先别慌。做个冒烟测试:给 1 号电机发一条使能帧——
cansend can0 001#FFFFFFFFFFFFFFFC电机指示灯变绿,说明收发链路是通的;candump 里同时冒出011开头的响应帧更好,那是 J1 用自己的接收 ID 0x11 在回话。测试完发一条禁用帧(帧尾改成FD)把电机关掉。
LED 纹丝不动?先查 24V 供电,再查 CANH/CANL 有没有接反、接口插紧没有。另外记住:每条总线的两端都需要 120Ω 终端电阻。
各关节的 ID 对应关系记一下,后面排障全靠它:
| 关节 | 发送 CAN ID | 接收(Master)ID |
|---|---|---|
| J1 | 0x01 | 0x11 |
| J2 | 0x02 | 0x12 |
| J3 | 0x03 | 0x13 |
| J4 | 0x04 | 0x14 |
| J5 | 0x05 | 0x15 |
| J6 | 0x06 | 0x16 |
| J7 | 0x07 | 0x17 |
| J8(夹爪) | 0x08 | 0x18 |
对齐波特率,让电机开口说话 ⚙️
接口通了,不代表两边说的是同一种"方言"。电机出厂波特率未必和你接口当前的一致,对不上时总线上一片安静,什么响应都没有。
动手前记住三条硬规矩:
注意
- 改波特率请在CAN 2.0 模式下进行:先把接口切到 CAN 2.0,并匹配电机当前的波特率,全部改完再切回 CAN FD;
--save会写电机 Flash,写入寿命约10000 次,别在脚本里循环执行;- 写入后必须断电重启电机,新波特率才会生效。
流程分四步。第一步,扫描确认每台电机的当前速率:
openarm-can-cli -i can0 discover快速扫描覆盖 1M/5M/8M/10M 四档,扫不到再加--full-scan全量扫。第二步,把接口切到 CAN 2.0 并匹配电机当前速率:
openarm-can-cli -i can0 can_configure --no-fd第三步,逐个关节改波特率。以 1 号电机改到 5Mbps 为例,-c从 1 换到 8 依次执行:
openarm-can-cli -i can0 change_baud -b 5000000 -c 1 --save第四步,给整机断电重启,把接口切回 CAN FD,再跑一次 discover 确认全部显示 5M:
openarm-can-cli -i can0 can_configure改完不生效?九成是忘了断电重启,或者接口速率没对上电机当前的速率——拿 discover 的输出核对一次就清楚了。
零点校准,让机械臂动起来 🧭
电机通了、速率齐了,最后一步是让软件知道"哪是零位"。先手动把机械臂摆到零位姿态:各关节转到参考角度,夹爪保持闭合(夹爪默认以闭合状态为零点)。
安全:校准开始后机械臂会自动运动。清空作业区,急停按钮放在随手可及的位置。
Leader-Follower 双臂场景,主臂和从臂要分别在独立状态下各校准一次,不能一次跑完两条臂。默认校准(can0,右臂):
openarm-can-zero-position-calibration指定某一侧执行:
openarm-can-zero-position-calibration --canport can1 --arm-side left_armv1.0 的臂记得追加--robot-version v1。
校准完立刻验证:
openarm-can-cli -i can0 monitor实时面板上应能看到每台电机的位置、速度、力矩和温度。再断电重启一次、重跑 monitor,确认零位设置保留了下来。到这里,电机配置与 CAN 总线通信就算全部落地,下一步可以跑 Demo 验证整机,或继续接入 ROS2 控制栈。
参考文档
- CAN 接口配置
- 通信冒烟测试
- 电机 ID 设置
- 电机配置与零位校准
- openarm-can-cli 命令参考
- 机械臂接线详解
【免费下载链接】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),仅供参考