基于Huggingface的lerobot项目在so-arm100机械臂上的复现笔记

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

相关推荐
傍晚冰川3 小时前
【STM32】最后一刷-江科大Flash闪存-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习·实时音视频
吴梓穆3 小时前
UE5学习笔记 FPS游戏制作33 游戏保存
笔记·学习·ue5
IT19954 小时前
uniapp笔记-自定义分类组件
前端·笔记·uni-app
·醉挽清风·6 小时前
学习笔记—数据结构—二叉树(链式)
c语言·数据结构·c++·笔记·学习·算法
阿陈陈陈6 小时前
【Node.js入门笔记12---npm包】
笔记·npm·node.js
初九之潜龙勿用8 小时前
技术与情感交织的一生 (四)
笔记·印象笔记
寻丶幽风10 小时前
论文阅读笔记——ReconDreamer
论文阅读·笔记·自动驾驶·3dgs·世界模型·闭环仿真
lwewan17 小时前
26考研——栈、队列和数组_数组和特殊矩阵(3)
数据结构·笔记·考研·算法
wei38724523218 小时前
java笔记02
java·开发语言·笔记
要天天开心啊18 小时前
MyBatis第二天笔记
笔记·tomcat·mybatis