OpenArm 完整搭建指南:从达妙电机 ID 配置到 SocketCAN 通信与 Demo 运行
【免费下载链接】openarmA fully open-source humanoid arm for physical AI research and deployment in contact-rich environments.项目地址: https://gitcode.com/GitHub_Trending/op/openarm
OpenArm 是一款完全开源的人形机械臂,面向接触丰富的物理 AI 研究场景。本指南基于仓库中的 Setup Guide(version-1.0) 及其六个步骤文档,系统讲解从硬件接线、电机 ID 烧录、SocketCAN 接口配置,到零位标定、通信验证与 Demo 运行的完整上机流程。读完本文,你将能够独立完成一台 OpenArm 的全部基础配置,并具备使用官方 CAN 工具链进行日常调试与二次开发的能力。
Step 0:前置条件与需求清单
动手之前,先确认手上备齐了以下两类资源——电机与通信设备。
硬件需求
- OpenArm 机械臂本体(搭载达妙 Damiao 系列电机)
- 24V 电源,电流容量需满足所有电机的需求
- 线缆(电机包装内自带的线缆通常足够)
通信设备需求
| 用途 | 设备 | 系统环境 |
|---|---|---|
| 电机 ID 配置(烧录) | 达妙 USB CAN Debugger | Windows 电脑 |
| 电机控制与后续配置 | SocketCAN 兼容接口设备(如 CANable 等) | Ubuntu 22.04/24.04 或其他支持 SocketCAN 的 Linux |
其中 Ubuntu 环境的安装可参考 Ubuntu 安装快速指南,推荐使用Ubuntu 22.04 LTS,纯开发测试场景也可考虑 Docker 方案。
提示:完整的分步文档位于 website/docs/setup/openarm-setup/,下文各 Step 均对应其中一篇。
Step 1:电机 ID 配置(达妙调试工具)
OpenArm 的全部代码都依赖固定的 CAN ID 分配方案,在运行任何程序之前,必须先确保每个电机的发送 ID(Sender CAN ID)与接收 ID(Master ID)与下表完全一致:
| 关节 | Sender CAN ID | Receiver (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 |
注意:ID 配置也可以通过对已知 ID(通常为 0x01)的电机直接发送 CAN 帧实现,但官方教程不包含该方法,推荐使用达妙调试工具完成。
安装达妙调试工具
在 Windows 上下载并安装达妙调试工具。若 Windows Defender 拦截安装:
- 打开 Windows 安全中心
- 进入"病毒和威胁防护"
- 点击"保护历史记录"
- 找到被拦截的条目(应提及 Damiao Debugging Tools)
- 点击"操作 → 允许"
- 重新运行安装程序
启动后界面左下角的绿/红切换按钮可将界面切换为英文。该工具主要有三大用途:配置 ID、快速校准以测试电机是否运转、在发送命令前检查固件版本与控制模式。
打开串口
需要特别注意的是:达妙调试工具通过串口(UART)而非 CAN 与电机通信,串口波特率为921600 bps。若下拉列表中没有自动检测到正确串口,通常选择列表中的最后一项即可。连接后首次启动即可看到电机信息。
配置电机 ID
- 点击ReadParam从电机读取当前参数
- 参照上表选择正确的 Sender 与 Master ID
- 将值填入对应字段
- 点击WriteParam将设置写入电机
测试电机
简单校准:点击 Calibrate,电机应开始转动。校准结果可以不保存,但识别出的参数有参考价值。
高级测试(Test 标签页):
- CAN ID:连接电机后点击 Read 读取 CAN ID;多台电机菊花链连接时,可将 CAN ID 设为链上最后一台电机以控制整条链
- Control Commands:点击 Enter 启动电机(电机每次重启后都需要重新执行,GH1.25 三针接口上方的 LED 应亮绿灯)
- Control Parameter:设置控制参数。最简单的测试是将 Tor(扭矩)设为 1;其他控制项参考达妙官方文档
- CAN Data:点击 Update 从 Control Parameter 拉取数值(每次输入新值后需重新执行)
- CAN Data:点击 Send 将数值发送给电机,电机开始旋转
- 停止:将 Control Parameter 中的值归零后 Update;直接点击 Stop 会硬停止电机,仅在紧急情况下使用
故障排查:
- 电机启动但不旋转:检查供电电流是否充足,参考下文推荐电流表
- 使用 CANable 设备:检查是否已启用 120Ω 终端电阻
硬件接线
- 使用电机包装内线缆时,可能需要焊接另一个公头连接器(CAN 线)
- 24V 供电可用 XT30U-M 或拆分 M/F 线缆焊接后连接 PSU
- J8009P 电机可直接插线,无需电源适配板
- CANable 设备需启用 120R 终端电阻
推荐电流表(24V 下校准与测试)
| 电机 | 最小电流 | 推荐电流 |
|---|---|---|
| DM-J4310 | ~0.25 A | ~0.3 A |
| DM-J4340 | ~0.25 A | ~0.3 A |
| DM-J8009P | ~0.7 A | ~0.75 A |
电流是累加的:菊花链连接多台电机时,供电电流需为所有电机电流之和。
Step 2:SocketCAN 接口配置
接下来在 Linux 上配置 SocketCAN,使系统能够与电机进行 CAN 总线通信。实验所用通信设备的清单见 电气 BOM。
安装依赖
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查找 CAN 接口
ip link show从输出中确认你的 CAN 适配器对应接口名(如can0、can1、slcan0等)。以下命令中的can0需替换为实际接口名。
配置接口(两种方式)
方式一:使用 OpenArm CAN 库提供的命令(推荐,见 CAN CLI 参考):
# CAN 2.0 模式 openarm-can-configure-socketcan can0 # CAN FD 5Mbps(推荐) openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000新版工具链也可直接使用openarm-can-cli:
# CAN FD 5Mbps(默认:标称 1Mbps / 数据 5Mbps) openarm-can-cli -i can0 can_configure # 经典 CAN(1Mbps,无 FD) openarm-can-cli -i can0 can_configure --no-fd方式二:手动配置:
CAN 2.0 模式(1Mbps):
sudo ip link set can0 down sudo ip link set can0 type can bitrate 1000000 sudo ip link set can0 upCAN FD 模式(5Mbps):
sudo ip link set can0 down sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on sudo ip link set can0 up验证配置
# 确认接口已启动 ip link show can0 # 监控 CAN 流量(可选) candump can0 # 发送测试帧 cansend can0 ...排障要点
- 检查物理连接与对应 CAN 适配器的驱动是否安装
- 用
dmesg查看设备日志 - 基于串口的设备可能需要
slcand等包装器才能在ip link show中可见 - 核对接口支持的波特率范围
- 必要时加载内核模块:
sudo modprobe slcan sudo modprobe can sudo modprobe can_rawStep 3:电机通信测试
在运行完整 Demo 之前,先做一次快速通信自检,确认 CAN 接口能与电机正常通信。前提是已完成 Step 1(电机 ID)与 Step 2(CAN 接口)。
打开两个终端:
终端 1——监控 CAN 流量:
candump can0终端 2——向 1 号电机发送使能命令:
cansend can0 001#FFFFFFFFFFFFFFFC命令解析:
001= 1 号电机的 CAN ID(0x01)FFFFFFFFFFFFFFFC= 电机使能命令
预期结果
如果一切正常,1 号电机 LED 应变为绿色(表示 CAN 通信激活)。若电机波特率已与接口一致,监控终端会收到响应帧:
can0 011 [8] XX XX XX XX XX XX XX XX响应解析:
011= 1 号电机的响应 ID(0x11)- 数据字节包含电机状态信息
若未收到响应帧,说明电机波特率与接口不一致,Step 4 会引导你修改电机波特率。配置了多台电机时,请逐台测试。测试完成后关闭电机:
# 关闭 1 号电机 cansend can0 001#FFFFFFFFFFFFFFFD排障
LED 无变化:
- 确认电机已供电(连接 24V 电源)
- 检查物理连接(线缆松动等——这点非常重要!)
- 检查 CAN 接线(CANH/CANL 是否接对)
- 确认电机 ID 已正确设置为 0x01
响应 ID 错误:
- 复查电机配置,接收 ID 应为 0x11
- 确认总线上没有其他设备占用冲突 ID
Step 4:电机配置(波特率、零位标定与通信验证)
此步包含三项关键任务:设置电机波特率、零位标定、验证电机通信。
Step 4.1:设置电机波特率
警告:电机参数写操作有10000 次寿命限制,不应在脚本中频繁执行。此外,波特率设置过程中务必先将 CAN 接口保持在 2.0 模式(无论目标波特率是多少),本步骤完成后再将接口配置回目标波特率。
v1.0 工具链命令:
# 临时设置(不写入 flash) openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0 # 永久保存(写入 flash) openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0 --flash新版 CLI(当前版本文档,见 change_baud 参考):
# 临时设置 openarm-can-cli -i can0 change_baud -b 5000000 -c 1 # 永久保存 openarm-can-cli -i can0 change_baud -b 5000000 -c 1 --save完成波特率配置后,需将 CAN 接口重新配置为与电机新波特率一致,才能正常通信。
支持的波特率:
| 编码 | 波特率 | 说明 |
|---|---|---|
| 0 | 125000 | 125 kbps |
| 1 | 200000 | 200 kbps |
| 2 | 250000 | 250 kbps |
| 3 | 500000 | 500 kbps |
| 4 | 1000000 | 1 Mbps |
| 5 | 2000000 | 2 Mbps |
| 6 | 2500000 | 2.5 Mbps |
| 7 | 3200000 | 3.2 Mbps |
| 8 | 4000000 | 4 Mbps |
| 9 | 5000000 | 5 Mbps |
| 10 | 8000000 | 8 Mbps |
| 11 | 10000000 | 10 Mbps |
注意:
--save/--flash写入 flash 有约 10,000 次硬性寿命限制,切勿在循环中反复执行;保存后需断电重启电机新波特率才会生效。
Step 4.2:零位标定
开始前请先安全确认:
- 将机械臂各关节物理摆放到接近下图所示的零位姿态;夹爪默认以闭合位置为零位
- 若搭建的是主从(Leader-Follower)配置,请分别在主手与从手独立状态下单独执行零位标定
- 安全第一:标定开始时机器人会自动运动!穿戴安全装备、清空工作区、随时准备急停
零位标定每次只处理一条手臂。默认针对 can0 的右臂:
# v1.0 openarm-can-zero-position-calibration # v2.0 需显式指定版本(当前版本文档) openarm-can-zero-position-calibration --robot-version v1指定具体手臂:
# Leader 侧左臂 openarm-can-zero-position-calibration --canport can1 --arm_side left_arm # Follower 侧右臂 openarm-can-zero-position-calibration --canport can2 --arm_side right_arm # Follower 侧左臂 openarm-can-zero-position-calibration --canport can3 --arm_side left_armStep 4.3:验证电机通信
运行电机检查工具,将1和17替换为实际电机的发送与接收 CAN ID(注意:17 是 0x11 的十进制表示):
# CAN 2.0 模式 openarm-can-motor-check 1 17 can0 # CAN FD 模式 openarm-can-motor-check 1 17 can0 -fd新版 CLI 可用monitor子命令查看实时遥测(见 monitor 参考):
# 监控全部手臂电机 openarm-can-cli -i can0 monitor # 监控指定电机 openarm-can-cli -i can0 monitor --id 1,2,3输出应显示电机的接收 ID、波特率与状态信息(新版monitor实时显示位置、速度、扭矩、温度)。
验证步骤:
- 检查波特率:确认显示值与之前配置的一致
- 测试永久设置:若使用了
--flash/--save,断电重启电机后再次检查,确认设置已持久化 - 排障:若波特率不匹配,将 CAN 接口切回 2.0 模式并重新执行波特率修改脚本
通用排障:
- 检查 CAN 接口是否为 UP 状态
- 确认电机已物理连接、供电,且 ID 设置正确
- 确认 CAN 连接稳定(非常重要!)
- 使用
candump监控流量 - 检查 CAN 接口波特率与电机当前波特率是否一致
- 核对收发 CAN ID 是否成对正确,常见配对:1→17、2→18、3→19 等
务必在 Demo 运行前确保电机通信正常(
openarm-can-motor-check/monitor可用)。
Step 5:Demo 运行
运行前的安全检查(必读)
- 零位:确保所有电机已设置安全的零位
- 急停:急停按钮必须始终放在随手可及处
- 清空工作区:移走机械臂运动范围内的一切障碍物、工具与人员
- 断电预案:明确如何快速切断电源
不遵守上述安全要求可能导致严重人身伤害或设备损坏。
直接运行
默认 Demo 使用 CAN0 上的电机 0x01、0x02、0x07(DM4310),并采用 CAN FD。若配置匹配,直接运行:
openarm-can-demoDemo 程序执行流程
- 初始化:建立 CAN 接口与电机通信
- 电机查询:读取并显示电机 ID,验证配置
- 电机控制:使能所有电机,执行位置控制测试与扭矩控制测试
- 夹爪控制:开合夹爪(若已配置)
- 状态监控:循环 10 次显示电机位置
- 收尾:安全关闭所有电机
预期输出
=== OpenArm CAN Example === This example demonstrates the OpenArm API functionality Initializing OpenArm CAN... Initializing gripper... === Enabling Motors === === Querying Motor Recv IDs === Arm Motor: 1 ID: 17 Arm Motor: 2 ID: 18 Gripper Motor: 8 ID: 24 === Controlling Motors === Closing gripper... Arm Motor: 1 position: 0.123 Arm Motor: 2 position: 0.456 Gripper Motor: 8 position: 0.789 ...自定义 Demo 配置
系统要求:Linux + SocketCAN、CMake 3.22+、C++17 编译器。
下载 CAN 库源码:
wget https://github.com/enactic/openarm_can/releases/download/{{OPENARM_CAN_VERSION}}/openarm-can-{{OPENARM_CAN_VERSION}}.tar.gz tar xf openarm-can-{{OPENARM_CAN_VERSION}}.tar.gz cd openarm-can-{{OPENARM_CAN_VERSION}}编辑examples/demo.cpp,将电机配置改为你的实际布局:
// 初始化手臂电机 std::vector<openarm::damiao_motor::MotorType> motor_types = { openarm::damiao_motor::MotorType::DM4310, openarm::damiao_motor::MotorType::DM4310 }; std::vector<uint32_t> send_can_ids = {0x01, 0x02}; // 电机发送 ID std::vector<uint32_t> recv_can_ids = {0x11, 0x12}; // 电机接收 ID7 电机手臂示例(对应完整 OpenArm 布局):
std::vector<openarm::damiao_motor::MotorType> motor_types = { openarm::damiao_motor::MotorType::DM8009, openarm::damiao_motor::MotorType::DM8009, openarm::damiao_motor::MotorType::DM4340, openarm::damiao_motor::MotorType::DM4340, openarm::damiao_motor::MotorType::DM4310, openarm::damiao_motor::MotorType::DM4310, openarm::damiao_motor::MotorType::DM4310 }; std::vector<uint32_t> send_can_ids = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; std::vector<uint32_t> recv_can_ids = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17};夹爪配置:有夹爪则更新夹爪配置,否则删除所有使用夹爪的代码。
// 初始化夹爪 openarm.init_gripper_motor(openarm::damiao_motor::MotorType::DM4310, 0x08, 0x18);编译与运行:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build --target openarm-can-demo build/openarm-can-demo排障:
- 用
candump监控 CAN 通信 - 检查电机供电(24V)
- 检查线缆连接(尤其是菊花链场景)
Step 6:电机固件更新(可选)
仅在电机出现异常或被要求时才需要更新固件。前提:Windows 电脑 + 达妙调试工具、电机通过串口(UART,921600 bps)连接、确认硬件版本为V3。
下载固件
从达妙电机固件仓库下载对应型号的V3 硬件固件文件,切勿刷写其他硬件版本的固件。OpenArm 已测试使用的固件如下:
| 电机 | 固件文件 |
|---|---|
| DM-J3507 | APP_DM3507(V3)_V5717_04.bin |
| DM-J4310 | APP_DM4310(V3)_V5017_04.bin |
| DM-J4340 | APP_DM4340(V3)_V5117_04.bin |
| DM-J8009 | APP_DM8009(V3)_V6417_04.bin |
检查当前版本
连接电机并打开达妙调试工具,点击ReadVesion读取当前固件与 Bootloader 版本。
刷写固件
- 点击OpenFile选择对应电机型号的
.bin固件文件 - 核对Version number字段显示的版本号
- 点击Upgrade开始刷写
- 等待Progress进度条到达 100%
- 刷写完成后对电机断电重启
危险:刷写过程中切勿断开电机或关闭工具,否则可能永久损坏电机!
全流程故障排查速查表
| 现象 | 排查项 |
|---|---|
discover找不到电机 | 按通用检查清单逐项排查;尝试openarm-can-cli -i can0 discover --full-scan全波特率扫描 |
show_param/monitor无响应 | 检查线缆、供电、波特率是否匹配、ID 是否正确;运行discover确认波特率后重新can_configure |
dmesg出现 BUS OFF | 检查接线与终端电阻;尝试调整采样点如can_configure -d 8000000 --dsp 0.6 --dsjw 1;8Mbps 以上高速率时缩短线缆 |
change_baud不生效 | 运行前确保接口波特率与电机当前波特率一致;--save后必须断电重启;用candump can0观察响应帧 |
通用检查清单(任何问题先过一遍):
- 电机已上电
- CAN 线缆已连接且完好
- CAN 接口波特率与电机内部波特率一致
- 总线两端均连接 120Ω 终端电阻
- 总线上所有电机 ID 唯一
- CAN 驱动已加载
下一步
Demo 运行成功即代表基础搭建完成。之后可以基于 OpenArm CAN API 参考 开发自定义应用,或直接进行 ROS2 集成 与 主从遥操作。相关分步文档完整保存在 website/docs/setup/openarm-setup/ 目录下,v1.0 历史版本见 website/versioned_docs/version-1.0/software/setup/。
【免费下载链接】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),仅供参考