tip:将项目复现分为如下的步骤

笔者自己复现之后的效果(点击链接即可https://www.bilibili.com/video/BV1vkQzYuEVc/?spm_id_from=333.1387.homepage.video_card.click
一.单臂复现
1.部件的采购
所需零件以及价目表 链接:https://github.com/TheRobotStudio/SO-ARM100

2.环境的配置
1)根据官方提供的readme.md进行安装
git clone https://github.com/huggingface/lerobot.git
conda create -y -n lerobot python=3.10
pip install -e .
conda install -y -c conda-forge ffmpeg
pip uninstall -y opencv-python
conda install -y -c conda-forge "opencv>=4.10.0"
2)但是环境的安装会遇到如下问题
ImportError: /home/username/anaconda3/envs/lerobot/lib/python3.10/site-packages/cv2/python-3.10/../../../.././libtiff.so.6:
undefined symbol: jpeg12_write_raw_data, version LIBJPEG_8.0
3)解决方案
conda install -c conda-forge jpeg libtiff
但执行后可能会引发新的问题
ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found
(required by /home/username/anaconda3/envs/lerobot/lib/python3.10/site-packages/cv2.cpython-310-x86_64-linux-gnu.so)
尝试再次进行解决:
检查系统中的 libstdc++
版本
strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
检查 Conda 环境中的 libstdc++
版本
strings $CONDA_PREFIX/lib/libstdc++.so.6 | grep GLIBCXX
优先加载 Conda 环境中的 libstdc++
运行以下命令,将 Conda 环境的库路径添加到 LD_LIBRARY_PATH
变量,使其优先被系统加载(之后我是写到了bashrc文件里:
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
4)问题总结
在 Conda 环境中安装 OpenCV 时,由于 libtiff
依赖的 jpeg12_write_raw_data
符号找不到(LIBJPEG 版本问题),以及 cv2
由于 libstdc++.so.6
版本不兼容(缺少 GLIBCXX_3.4.29
)导致的 ImportError
问题。确保 Conda 环境中的 libstdc++
版本正确,并使 Conda 的库路径优先于系统库路径,以避免 GLIBCXX_3.4.29
版本缺失问题。
3.配置舵机控制板以及舵机
串口查询以及串口的权限赋予
python lerobot/scripts/find_motors_bus_port.py
sudo chmod 666 /dev/ttyACM*
舵机编号
python lerobot/scripts/configure_motor.py \
--port /dev/ttyACM... \
--brand feetech \
--model sts3215 \
--baudrate 1000000 \
--ID 1

此图为改配置文件
4.机械臂的安装与校准
1)安装


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

5.遥操作
1)不打开摄像头的遥操作
python lerobot/scripts/control_robot.py \
--robot.type=so100 \
--robot.cameras='{}' \
--control.type=teleoperate
2)打开摄像头的遥操作
python lerobot/scripts/control_robot.py \
--robot.type=so100 \
--control.type=teleoperate
这里打开摄像头的这一步我是遇到了些问题
官方提供的代码中只是用opencv对摄像头的index索引值进行调用
我在实验的过程中先是用了奥比中光相机来进行数据的录制

但是这个非常不好用,在终端单独打开是没有什么问题的,带到代码中运行时会出现不少奇奇怪怪的问题
因为如果我遥操作的时候无法记录下数据就没办法继续后续的任务
之后我就索性换了实验室的两个realsense相机D435i以及D455


在进行configs文件修改以及一系列代码的修改之后也最终能够正常在遥操作的时候摄像头实时捕捉场景动作
6.记录数据集

这边进行数据集录制时有点坑,因为这个数据集的制作需要你在huggingface上建仓库以及数据集的上传,才能正常录制,由于huggingface是在外网所以对本地的网络以及代理vpn的要求也比较高,所以也是要对代码进行修改进行离线录制才行

官方指令
python lerobot/scripts/control_robot.py \
--robot.type=so100 \
--control.type=record \
--control.fps=30 \
--control.single_task="Grasp a lego block and put it in the bin." \
--control.repo_id=${HF_USER}/so100_test \
--control.tags='["so100","tutorial"]' \
--control.warmup_time_s=5 \
--control.episode_time_s=30 \
--control.reset_time_s=30 \
--control.num_episodes=2 \
--control.push_to_hub=true
修改后
python lerobot/scripts/control_robot.py \
--robot.type=so100 \
--control.type=record \
--control.fps=30 \
--control.root=/home/kk/lerobot/outputs/38 \
--control.num_episodes=30 \
--control.warmup_time_s=5 \
--control.episode_time_s=30 \
--control.reset_time_s=10 \
--control.repo_id=namespace/my_dataset \
--control.single_task=False
但到这里还没有结束每一组数据录制完之后视频的保存就遇到了问题

报错:[vost#0:0 @ 0x3448bb00] Unknown encoder 'libx264' [vost#0:0 @ 0x3448bb00] Error selecting an encoder Error opening output file /home/kk/.cache/huggingface/lerobot/Jwjyt/eval_act_so100_test/videos/chunk-000/observation.images.D435i/episode_000000.mp4. Error opening output files: Encoder not found Traceback (most recent call last):
解决方法
# 安装libx264,但仍然遇到问题,配置环境使得ffmpeg正确链接到libx264编解码器
export PATH=/usr/bin:$PATH
之后就可以正常连续的录制自定义组数的数据了
7.训练
由于前文提到的数据集的制作需要在huggingface上建仓库以及数据集的上传,所以训练的时候也需要你本地终端链接到你的huggingface仓库,由于网络的限制,所以需要去修改代码进行本地的训练
我搜寻了很多的不同的方法,也可能是怪我的代码能力差,但是这个问题还是没有解决,这个项目的更新很频繁,我现在在用的lerobot的库已经是V2.1的版本所以估计也修复了些断网离线训练的问题,之后这个事情也很困扰
后来我就想到了去用ailab的算力

之后我特地去把我的数据进行上传了


快速的对一些环境配置的问题进行搭建修正之后,我又遇到了一个很奇怪的问题,我发现从云仓库download下来的数据集不知道为什么不能进行训练,我就很疑惑,因为录制的数据集应该都是对的,于是我又和其他的同样上传到huggingface仓库的数据集进行比对,但是发现还是一模一样的格式,然后我思考了很久,我突然想到了我当时录制文件的路径以及我上传的文件



解决完这个问题之后也成功训练
8.策略评估
按道理来说训练完之后执行已经训练完的模型不需要花时间了,直接执行命令行就应该能实现了,但是还没结束
官方
python lerobot/scripts/control_robot.py \
--robot.type=so100 \
--control.type=record \
--control.fps=30 \
--control.single_task="Grasp a lego block and put it in the bin." \
--control.repo_id=${HF_USER}/eval_act_so100_test \
--control.tags='["tutorial"]' \
--control.warmup_time_s=5 \
--control.episode_time_s=30 \
--control.reset_time_s=30 \
--control.num_episodes=10 \
--control.push_to_hub=true \
--control.policy.path=outputs/train/act_so100_test/checkpoints/last/pretrained_model
先是push_to_hub=false之后还是没办法执行

后来也是想了很多不知道为什么不能用
慢慢调整命令行之后开始出现模型文件中config.json的报错
需要删除这两行

修改后的命令行
python lerobot/scripts/control_robot.py
--robot.type=so100
--control.type=record
--control.fps=30
--control.single_task="Grasp an orange."
--control.repo_id=Jwjyt/eval_act_so100_test
--control.tags='["tutorial"]'
--control.warmup_time_s=5
--control.episode_time_s=60
--control.reset_time_s=30
--control.num_episodes=30
--control.push_to_hub=false
--control.policy.path=/home/kk/outputs/train/test/checkpoint/last/pretrained_model
--control.device=cuda
之后也是成功了
这边有笔者自己运行成功后的视频:https://www.bilibili.com/video/BV1vkQzYuEVc/?spm_id_from=333.1387.homepage.video_card.click