Skip to main content

SO-ARM与AmazingHand完整训练指南

本文档说明如何将 SO-ARM101从臂与AmazingHand 灵巧手结合,并通过 LeRobot 进行遥操作。

1. 硬件连接

1.soarm与amazinghand连接的打印件链接如下:

lerobot/soarm_amazinghand_link_step_stl/step at soarm_amazinghand · xiehuangbao888/lerobot

2.拆下原来的soarm抓夹

3.将soarm与amazinghand的连接打印件装上机械臂

4.将amazinghand装上

5.连线如下:

设备串口说明
SO-101 从臂(已拆除 6 号抓夹舵机)/dev/ttyACM0只保留 1~5 号关节舵机
SO-101 主臂(保留 6 号抓夹舵机)/dev/ttyACM1抓夹开合作为输入信号
AmazingHand 灵巧手/dev/ttyACM28 个舵机,ID 为 1~8

如果你的串口号不同,请在后续命令中替换为实际串口号。


该机器人会:

  • 通过 /dev/ttyACM0 控制从臂的 5 个关节(1~5 号舵机)。
  • 通过 /dev/ttyACM2 控制 AmazingHand 灵巧手。
  • 将主臂的 gripper.pos比例映射为灵巧手的张合角度(0 = 完全张开,100 = 完全闭合)。

校准文件会自动保存到:

~/.cache/huggingface/lerobot/calibration/robots/so101_amazing_hand/<robot.id>.json
~/.cache/huggingface/lerobot/calibration/teleoperators/so101_leader/<teleop.id>.json

2. 环境与连接

git clone https://github.com/xiehuangbao888/lerobot.git

切换原有的lerobot虚拟环境

首先,赋予权限

sudo chmod 666 /dev/ttyACM*

步骤 1:校准主臂

cd ~/lerobot
conda activate lerobot
python -m lerobot.scripts.lerobot_calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader

按提示:

  1. 将主臂各关节放到中位,按回车。
  2. 依次活动各关节到最大/最小范围,按回车结束。

步骤 2:校准从臂

python -m lerobot.scripts.lerobot_calibrate \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2

按提示:

  1. 将从臂 5 个关节放到中位,按回车。
  2. 依次活动 5 个关节到最大/最小范围,按回车结束。

注意:从臂只有 5 个关节,6 号抓夹舵机已拆除。

步骤 3:运行遥操作

python -m lerobot.scripts.lerobot_teleoperate \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader \
--display_data=true

可自行设置抓取动作,相应文件在此目录下,可修改灵巧手的打开与闭合动作:

src/lerobot/robots/so_amazing_hand/config_so_amazing_hand.py

3. 结合灵巧手采集数据集

python -m lerobot.scripts.lerobot_record \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--robot.cameras='{
wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30},
top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}
}' \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader \
--display_data=true \
--dataset.repo_id=seeed/amazing_soarm \
--dataset.num_episodes=20 \
--dataset.single_task="Pick up the cube with the dexterous hand"

参数说明:

参数说明
--robot.cameras相机配置,支持opencvrealsense 等。index_or_path 填摄像头索引或视频流路径。
--dataset.repo_id数据集在 Hugging Face 上的 ID,格式为{username}/{dataset_name}
--dataset.num_episodes录制的 episode 数量。
--dataset.single_task任务描述,会写入数据集元信息。
--robot.hand_use_proportional_control已默认为true,命令中无需再写。如需二值张合可显式设为 false

4. 训练策略

lerobot-train \
--dataset.repo_id=seeed/amazing_soarm \
--policy.type=act \
--output_dir=outputs/train/amazing_soarm \
--job_name=amazing_soarm \
--policy.device=cuda \
--wandb.enable=false \
--policy.push_to_hub=false \
--steps=60000 \

5. 评估与部署

用训练好的策略进行真实机器人评估

python -m lerobot.scripts.lerobot_record \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--robot.cameras='{
wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30},
top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}
}' \
--policy.path=outputs/train/amazing_soarm/checkpoints/last/pretrained_model \
--dataset.repo_id=seeed_val/amazinghand_pick_cube_eval \
--dataset.num_episodes=10 \
--dataset.single_task="Pick up the cube with the dexterous hand" \
--display_data=true
Loading Comments...