参考材料:

https://github.com/huggingface/lerobot

从零开始,手把手教你搭建Lerobot机械臂-CSDN博客

9-lerobot aloha 采集数据并且训练_哔哩哔哩_bilibili

https://developer.d-robotics.cc/forumDetail/289424806557116771

https://wiki.seeedstudio.com/lerobot_so100m_new/

lerobot代码库更新太快了,以下针对2025年4月25日之前的代码总结

配置和安装上面材料都有详细介绍,这里根据自己的经验记录一下数据采集的细节

查看机械臂端口号:

python lerobot/scripts/find_motors_bus_port.py

运行以上命令,拔掉usb接口就可以看到端口号如:The port of this MotorsBus is '/dev/ttyACM0'

端口号就是 /dev/ttyACM0

参考以上参考链接在lerobot/common/robot_devices/robots/configs.py中配置机械臂端口号和相机编号

注意:多个机械臂需要同时插上才能读取出来不同的端口号

授权:

sudo chmod 666 /dev/ttyACM0

机械臂组装之前需要标注每个关节的电机:
python lerobot/scripts/configure_motor.py \
  --port /dev/ttyACM0 \
  --brand feetech \
  --model sts3215 \
  --baudrate 1000000 \
  --ID 1

校准机械臂

我的经验先校准主臂再校准从臂比较荣誉成功,多次操作之后发现机械臂控制走位不准需要重新校准

主臂
python lerobot/scripts/control_robot.py \
  --robot.type=so100 \
  --robot.cameras='{}' \
  --control.type=calibrate \
  --control.arms='["main_leader"]'
 从臂
 python lerobot/scripts/control_robot.py \
  --robot.type=so100 \
  --robot.cameras='{}' \
  --control.type=calibrate \
  --control.arms='["main_follower"]'

校准机械臂的位姿请见开篇参考材料

注意:

1.如果相机通过USB连接电脑供电,多个相机接在一个hub上可能采集数据容易中断,因为供电不足,需要分开连电脑不同的USB;

2.多机械臂连在hub上,会经常自己变动端口号,我是分开插在电脑上的,可以用hub的Type-C接口一端接USB,Type-C一端电脑解决USB不够用的问题,相机USB不沟通也可以借助HUB的Type-C;

下面说采集数据的细节

采集数据:

python lerobot/scripts/control_robot.py \
  --robot.type=so100 \
  --control.type=record \
  --control.fps=30 \
  --control.single_task="pnp" \
  --control.repo_id=mytest/so100_test1 \
  --control.tags='["so100","tutorial"]' \
  --control.warmup_time_s=5 \
  --control.episode_time_s=20 \
  --control.reset_time_s=20 \
  --control.num_episodes=2 \
  --control.push_to_hub=false

回车之后,出现一下输出,环境初始化好之后,点击向右键就开始记录数据,这时候开始操作机械臂采数据。

INFO 2025-04-25 14:08:28 rol_utils.py:82 dt:33.41 (29.9hz) dtRlead: 1.57 (636.7hz) dtWfoll: 0.20 (4881.2hz) dtRfoll: 1.84 (542.5hz) dtRlaptop:27.96 (35.8hz) dtRphone:31.89 (31.4hz)
INFO 2025-04-25 14:08:28 rol_utils.py:82 dt:33.41 (29.9hz) dtRlead: 1.71 (585.5hz) dtWfoll: 0.26 (3805.6hz) dtRfoll: 1.76 (569.8hz) dtRlaptop:32.00 (31.3hz) dtRphone:35.99 (27.8hz)


采集完一轮数据,再点击向右键,结束采集会出现一行以下输出,很快就会过去不一定看得到

INFO 2025-04-25 14:08:12 rol_utils.py:82 dt:33.41 (29.9hz) dtRlead: 1.66 (601.6hz) dtWfoll: 0.22 (4460.5hz) dtRfoll: 1.64 (611.5hz) dtRlaptop:32.18 (31.1hz) dtRphone:35.59 (28.1hz)
Right arrow key pressed. Exiting loop...
^[[CINFO 2025-04-25 14:08:12 rol_utils.py:82 dt:33.41 (29.9hz) dtRlead: 1.65 (607.0hz) dtWfoll: 0.26 (3865.1hz) dtRfoll: 2.04 (490.2hz) dtRlaptop:36.67 (27.3hz) dtRphone:32.76 (30.5hz)
INFO 2025-04-25 14:08:12 ls/utils.py:200 Reset the environment
INFO 2025-04-25 14:08:12 rol_utils.py:82 dt:33.44 (29.9hz) dtRlead: 1.68 (595.7hz) dtWfoll: 0.25 (3948.8hz) dtRfoll: 1.73 (576.8hz) dtRlaptop:31.21 (32.0hz) dtRphone:32.76 (30.5hz)

这时需要重新初始化环境,初始化环境结束之后,再点击向右箭头运行一段时间后会出现进度条

Map: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 279/279 [00:00<00:00, 4634.31 examples/s]
Creating parquet from Arrow format: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 2302.03ba/s]

进度条结束后开始新一轮的采集,先不要动,等输出再次出现以下内容时可以新的一轮数据采集

INFO 2025-04-25 14:08:20 ls/utils.py:200 Recording episode 39
INFO 2025-04-25 14:08:20 rol_utils.py:82 dt:33.40 (29.9hz) dtRlead: 1.58 (631.6hz) dtWfoll: 0.24 (4229.5hz) dtRfoll: 1.62 (615.6hz) dtRlaptop:31.99 (31.3hz) dtRphone:35.64 (28.1hz)
INFO 2025-04-25 14:08:20 rol_utils.py:82 dt:33.41 (29.9hz) dtRlead: 1.55 (646.5hz) dtWfoll: 0.22 (4480.8hz) dtRfoll: 1.70 (588.7hz) dtRlaptop:35.76 (28.0hz) dtRphone:32.09 (31.2hz)
INFO 2025-04-25 14:08:20 rol_utils.py:82 dt:33.40 (29.9hz) dtRlead: 1.54 (647.6hz) dtWfoll: 0.27 (3645.9hz) dtRfoll: 1.63 (613.3hz) dtRlaptop:31.91 (31.3hz) dtRphone:32.11 (31.1hz)
 

总结以下:

第一轮开始采集时需要点击向右键开始记录;

第一轮结束点击向右键结束记录,这时候需要初始化环境,初始化环境完成之后再点击向右键,会开始第二轮的采集;

第二轮采集开始之后只有采集完成和初始化完成需要点击向右键;

最后一轮采集完成之后点击向右键直接会出现进度条,进度条完成之后提示 Stop recording,CRTL+C退出采集

在之前采集的数据之后继续采集:

python lerobot/scripts/control_robot.py \
  --control.repo_id=mytest/so100_test1 \
  --control.resume=true \
  --control.type=record \
  --control.single_task="pnp" \
  --robot.type=so100 \
  --control.fps=30 \
  --control.num_episodes=5

--control.num_episodes=1  继续采集的论次
开始采集 初始化环境之后向右键开始
结束一轮之后 向右键  环境复位后向右建,看到进度条完成  开始重新采集的输出之后开始新的一轮


注:

向左键重新采集当前轮次数据

小机械臂容易发热,我的经验每次采5轮,然后回看以下数据有没有问题,顺便让机械臂散散热休息一下

回看数据:

数据可视化
python lerobot/scripts/visualize_dataset.py     --repo-id mytest/so100_test1  --episode-index 0

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐