OpenArm 完整搭建指南:从达妙电机 ID 配置到 SocketCAN 通信与 Demo 运行
2026/9/18 5:55:31 网站建设 项目流程

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 DebuggerWindows 电脑
电机控制与后续配置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 IDReceiver (Master) ID
J10x010x11
J20x020x12
J30x030x13
J40x040x14
J50x050x15
J60x060x16
J70x070x17
J8(夹爪)0x080x18

注意:ID 配置也可以通过对已知 ID(通常为 0x01)的电机直接发送 CAN 帧实现,但官方教程不包含该方法,推荐使用达妙调试工具完成。

安装达妙调试工具

在 Windows 上下载并安装达妙调试工具。若 Windows Defender 拦截安装:

  1. 打开 Windows 安全中心
  2. 进入"病毒和威胁防护"
  3. 点击"保护历史记录"
  4. 找到被拦截的条目(应提及 Damiao Debugging Tools)
  5. 点击"操作 → 允许"
  6. 重新运行安装程序

启动后界面左下角的绿/红切换按钮可将界面切换为英文。该工具主要有三大用途:配置 ID快速校准以测试电机是否运转在发送命令前检查固件版本与控制模式

打开串口

需要特别注意的是:达妙调试工具通过串口(UART)而非 CAN 与电机通信,串口波特率为921600 bps。若下拉列表中没有自动检测到正确串口,通常选择列表中的最后一项即可。连接后首次启动即可看到电机信息。

配置电机 ID

  1. 点击ReadParam从电机读取当前参数
  2. 参照上表选择正确的 Sender 与 Master ID
  3. 将值填入对应字段
  4. 点击WriteParam将设置写入电机

测试电机

简单校准:点击 Calibrate,电机应开始转动。校准结果可以不保存,但识别出的参数有参考价值。

高级测试(Test 标签页)

  1. CAN ID:连接电机后点击 Read 读取 CAN ID;多台电机菊花链连接时,可将 CAN ID 设为链上最后一台电机以控制整条链
  2. Control Commands:点击 Enter 启动电机(电机每次重启后都需要重新执行,GH1.25 三针接口上方的 LED 应亮绿灯)
  3. Control Parameter:设置控制参数。最简单的测试是将 Tor(扭矩)设为 1;其他控制项参考达妙官方文档
  4. CAN Data:点击 Update 从 Control Parameter 拉取数值(每次输入新值后需重新执行)
  5. CAN Data:点击 Send 将数值发送给电机,电机开始旋转
  6. 停止:将 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 适配器对应接口名(如can0can1slcan0等)。以下命令中的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 up

CAN 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_raw

Step 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 接口重新配置为与电机新波特率一致,才能正常通信。

支持的波特率

编码波特率说明
0125000125 kbps
1200000200 kbps
2250000250 kbps
3500000500 kbps
410000001 Mbps
520000002 Mbps
625000002.5 Mbps
732000003.2 Mbps
840000004 Mbps
950000005 Mbps
1080000008 Mbps
111000000010 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_arm

Step 4.3:验证电机通信

运行电机检查工具,将117替换为实际电机的发送与接收 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实时显示位置、速度、扭矩、温度)。

验证步骤

  1. 检查波特率:确认显示值与之前配置的一致
  2. 测试永久设置:若使用了--flash/--save,断电重启电机后再次检查,确认设置已持久化
  3. 排障:若波特率不匹配,将 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-demo

Demo 程序执行流程

  1. 初始化:建立 CAN 接口与电机通信
  2. 电机查询:读取并显示电机 ID,验证配置
  3. 电机控制:使能所有电机,执行位置控制测试与扭矩控制测试
  4. 夹爪控制:开合夹爪(若已配置)
  5. 状态监控:循环 10 次显示电机位置
  6. 收尾:安全关闭所有电机

预期输出

=== 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}; // 电机接收 ID

7 电机手臂示例(对应完整 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-J3507APP_DM3507(V3)_V5717_04.bin
DM-J4310APP_DM4310(V3)_V5017_04.bin
DM-J4340APP_DM4340(V3)_V5117_04.bin
DM-J8009APP_DM8009(V3)_V6417_04.bin

检查当前版本

连接电机并打开达妙调试工具,点击ReadVesion读取当前固件与 Bootloader 版本。

刷写固件

  1. 点击OpenFile选择对应电机型号的.bin固件文件
  2. 核对Version number字段显示的版本号
  3. 点击Upgrade开始刷写
  4. 等待Progress进度条到达 100%
  5. 刷写完成后对电机断电重启

危险:刷写过程中切勿断开电机或关闭工具,否则可能永久损坏电机!

全流程故障排查速查表

现象排查项
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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询