OpenArm
OpenArm 是一个开源的 7 自由度人形手臂,专为物理 AI 研究和部署而设计。
要获取您的 OpenArm(组装好的或 DIY),并加入全球社区,请在 openarm.dev 浏览全球经过验证和认证的制造商。
有何独特之处?
-
人体尺度设计:OpenArm 采用类人比例设计,适合身高约 160-165 厘米的人。这在实用触及范围和可管理惯性之间提供了最佳平衡,以实现安全、响应迅速的操作。
-
安全优先架构:采用 QDD 可反向驱动电机和高柔顺性构建,OpenArm 优先考虑安全的人机交互,同时保持实际有效载荷能力(6.0kg 峰值 / 4.1kg 额定),用于真实世界任务。
-
耐用性设计:关键结构组件使用铝和不锈钢结构,确保重复数据收集和持续研究使用的稳健性能。
-
完全可访问和可构建:从 CNC 零件和 3D 打印外壳到电气布线,每个组件都设计为可由个人研究人员和实验室购买和构建,并提供完整的制造数据。
-
实用且经济实惠:完整的双臂系统价格为 6,500 美元,OpenArm 以传统人形机器人成本的一小部分提供研究级能力。
平台要求
Warning
仅限 Linux:OpenArm 目前仅适用于 Linux。CAN 总线 USB 适配器没有 macOS 驱动程序,并且尚未在 Windows 上测试。
安全指南
在操作 OpenArm 之前,请阅读官方安全指南。要点:
- 安全安装:用螺钉或夹具将手臂固定在平坦、稳定的表面上
- 安全距离:在操作期间将身体部位和物体保持在运动范围之外
- 防护装备:始终佩戴安全护目镜;根据需要使用额外的个人防护装备
- 有效载荷限制:不要超过指定的有效载荷限制(每臂 6.0kg 峰值 / 4.1kg 额定)
- 紧急停止:了解紧急停止装置的位置和操作
- 定期检查:检查松动的螺钉、损坏的机械限位、异常噪音和布线损坏
硬件设置
按照官方 OpenArm 硬件文档进行:
- 物料清单和采购
- 3D 打印说明
- 机械组装
- 电气布线
硬件仓库位于 github.com/enactic/openarm。
CAN 总线设置
OpenArm 使用 CAN 总线与 Damiao 电机通信。将 CAN 总线 USB 适配器插入 Linux PC 后,按照 Damiao 电机和 CAN 总线指南配置接口。
快速设置:
# 设置 CAN 接口
lerobot-setup-can --mode=setup --interfaces=can0,can1
# 测试电机通信
lerobot-setup-can --mode=test --interfaces=can0,can1
安装 LeRobot 🤗
遵循我们的安装指南,然后安装 Damiao 电机支持:
pip install -e ".[damiao]"
使用
从动臂(机器人)
lerobot-calibrate \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_follower
from lerobot.robots.openarm_follower import OpenArmFollower, OpenArmFollowerConfig
config = OpenArmFollowerConfig(
port="can0",
side="right", # 或 "left" 用于左臂
id="my_openarm_follower",
)
follower = OpenArmFollower(config)
follower.connect()
# 读取当前状态
obs = follower.get_observation()
print(obs)
# 发送动作(位置以度为单位)
action = {
"joint_1.pos": 0.0,
"joint_2.pos": 0.0,
"joint_3.pos": 0.0,
"joint_4.pos": 45.0,
"joint_5.pos": 0.0,
"joint_6.pos": 0.0,
"joint_7.pos": 0.0,
"gripper.pos": 0.0,
}
follower.send_action(action)
follower.disconnect()
主动臂(遥操作器)
主动臂用于遥操作 - 手动移动它来控制从动臂。
lerobot-calibrate \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leader
from lerobot.teleoperators.openarm_leader import OpenArmLeader, OpenArmLeaderConfig
config = OpenArmLeaderConfig(
port="can1",
id="my_openarm_leader",
manual_control=True, # 禁用扭矩以进行手动移动
)
leader = OpenArmLeader(config)
leader.connect()
# 读取当前位置(作为发送到从动臂的动作)
action = leader.get_action()
print(action)
leader.disconnect()
遥操作
使用主从控制遥操作 OpenArm:
lerobot-teleoperate \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_follower \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_leader
双臂遥操作
使用两个主动臂和两个从动臂遥操作双臂 OpenArm 设置:
lerobot-teleoperate \
--robot.type=bi_openarm_follower \
--robot.left_arm_config.port=can0 \
--robot.left_arm_config.side=left \
--robot.right_arm_config.port=can1 \
--robot.right_arm_config.side=right \
--robot.id=my_bimanual_follower \
--teleop.type=bi_openarm_leader \
--teleop.left_arm_config.port=can2 \
--teleop.right_arm_config.port=can3 \
--teleop.id=my_bimanual_leader
记录数据
在遥操作期间记录数据集:
lerobot-record \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_follower \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_leader \
--repo-id=my_hf_username/my_openarm_dataset \
--fps=30 \
--num-episodes=10
配置选项
从动臂配置
| 参数 | 默认值 | 描述 |
|---|---|---|
port |
- | CAN 接口(例如,can0) |
side |
None |
手臂侧:"left"、"right" 或自定义限制的 None |
use_can_fd |
True |
启用 CAN FD 以获得更高的数据速率 |
can_bitrate |
1000000 |
标称比特率(1 Mbps) |
can_data_bitrate |
5000000 |
CAN FD 数据比特率(5 Mbps) |
max_relative_target |
None |
相对目标位置的安全限制 |
position_kp |
每关节 | 位置控制比例增益 |
position_kd |
每关节 | 位置控制微分增益 |
主动臂配置
| 参数 | 默认值 | 描述 |
|---|---|---|
port |
- | CAN 接口(例如,can1) |
manual_control |
True |
禁用扭矩以进行手动移动 |
use_can_fd |
True |
启用 CAN FD 以获得更高的数据速率 |
can_bitrate |
1000000 |
标称比特率(1 Mbps) |
can_data_bitrate |
5000000 |
CAN FD 数据比特率(5 Mbps) |
电机配置
OpenArm 使用 Damiao 电机,默认配置如下:
| 关节 | 电机类型 | 发送 ID | 接收 ID |
|---|---|---|---|
| joint_1(肩部平移) | DM8009 | 0x01 | 0x11 |
| joint_2(肩部抬升) | DM8009 | 0x02 | 0x12 |
| joint_3(肩部旋转) | DM4340 | 0x03 | 0x13 |
| joint_4(肘部弯曲) | DM4340 | 0x04 | 0x14 |
| joint_5(腕部滚动) | DM4310 | 0x05 | 0x15 |
| joint_6(腕部俯仰) | DM4310 | 0x06 | 0x16 |
| joint_7(腕部旋转) | DM4310 | 0x07 | 0x17 |
| gripper(夹爪) | DM4310 | 0x08 | 0x18 |
故障排除
电机无响应
- 检查电源连接
- 验证 CAN 布线(CAN-H、CAN-L、GND)
- 运行诊断:
lerobot-setup-can --mode=test --interfaces=can0 - 有关更多详细信息,请参阅 Damiao 故障排除指南
找不到 CAN 接口
确保已配置 CAN 接口:
ip link show can0