当前位置: 首页 > news >正文

基于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

相关文章:

  • DM数据迁移工具
  • 2025.3.24-2025.3.30学习周报
  • C# System.Net.IPEndPoint 使用详解
  • 实战打靶集锦-34-midnight
  • MTK Camera 照片切视频Systrace拆解分析
  • leetcode138.随机链表的复制
  • 通配符(Wildcard)
  • 很简单 的 将字幕生成视频的 方法
  • Ansible playbook-ansible剧本
  • Linux中的系统管理和优化
  • 人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开!
  • AISEO (GEO )中的知识图谱
  • List中多个数据相同,保留最新日期数据
  • 设计模式 三、结构型设计模式
  • 【夜话系列】DelayQueue延迟队列(下):实战应用与面试精讲
  • 51. “闲转易”交易平台小程序(基于springbootvue)
  • 两个有序序列的合并-手摇算法
  • 【深度学习新浪潮】Grok过去两周的进展一览(2025.04.01)
  • [学成在线]09-课程预览
  • 论文阅读笔记:Denoising Diffusion Implicit Models (2)
  • 创新创业50人论坛开幕在即,双创青年为何选择来上海筑梦?
  • 特朗普称美军舰商船应免费通行苏伊士运河,外交部:反对任何霸凌言行
  • 吴清:全力支持中央汇金公司发挥好类“平准基金”作用
  • 潘功胜:央行将创设科技创新债券风险分担工具
  • 人们为何热衷谈论八卦?
  • 商务部新闻发言人就中美经贸高层会谈答记者问