今天给大家分享一下 LeRobot 具身智能机械臂 SO-ARM100 的完整使用流程,包括设备组装、环境配置、远程控制、数据录制到模型训练的全过程。适合刚入门具身智能的小伙伴参考学习。

一、前期准备与资源获取

在开始之前,我们需要准备好相关的资源和工具:

  • 官方资源

    • LeRobot 开源项目学习社区:http://wiki.wowrobo.com/zh/koch-001
    • GitHub 仓库:https://github.com/huggingface/lerobot
    • 入门视频教程:LeRobot具身智能机械臂实操入门课程-02:相机选型、接线与代码调试_哔哩哔哩_bilibili
  • 必要设备

    • 主机械臂(扶手)12V/5A
    • 从机械臂(抓手)12V/10A
    • 双端 Type-C 线
    • 电脑拓展坞或两个 Type-C 转 USB 转接头
    • 摄像头(2K USB Camera 和 1080P USB Camera)

二、设备组装与接线

1. 硬件连接要点

  • 主机械臂和从机械臂通过双端 Type-C 连接电脑拓展坞,或使用两个 Type-C 转 USB 转接头连接电脑
  • 特别注意:相机需要直接连接电脑,不能接拓展坞!
  • 确保电源适配正确:主机械臂 12V/5A,从机械臂 12V/10A

2. 组装检查

组装完成后,建议参考官方视频教程中的标准示意图进行检查,确保每个部件安装到位,接线正确。

三、环境配置

1. 项目下载

首先克隆 LeRobot 项目到本地:

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

或者直接下载 ZIP 压缩包:https://github.com/huggingface/lerobot

2. 创建并激活虚拟环境

使用 conda 创建专门的虚拟环境:

conda create -n lerobot python=3.10
conda activate lerobot

3. 安装依赖

进入项目目录并安装所需依赖:

cd lerobot
pip install -e ".[feetech]" -i https://pypi.tuna.tsinghua.edu.cn/simple

对于 Linux 系统,还需要安装 ffmpeg:

conda install -y -c conda-forge ffmpeg
pip uninstall -y opencv-python
conda install -y -c conda-forge "opencv>=4.10.0"

四、机械臂端口检测与配置

1. 查找端口号

运行以下脚本检测机械臂对应的端口号:

python lerobot/scripts/find_motors_bus_port.py

操作步骤:

  1. 运行脚本,记录当前可用端口
  2. 拔下机械臂 USB 线,按回车
  3. 对比前后端口变化,确定机械臂对应的端口号

2. 修改配置文件

找到配置文件:lerobot/common/robot_devices/robots/configs.py

修改So100RobotConfig类中的端口设置,将检测到的端口号填入:

@RobotConfig.register_subclass("so100")
@dataclass
class So100RobotConfig(ManipulatorRobotConfig):calibration_dir: str = ".cache/calibration/so100"max_relative_target: int | None = Noneleader_arms: dict[str, MotorsBusConfig] = field(default_factory=lambda: {"main": FeetechMotorsBusConfig(port="COM5",  # 主机械臂端口motors={"shoulder_pan": [1, "sts3215"],"shoulder_lift": [2, "sts3215"],"elbow_flex": [3, "sts3215"],"wrist_flex": [4, "sts3215"],"wrist_roll": [5, "sts3215"],"gripper": [6, "sts3215"],},),})follower_arms: dict[str, MotorsBusConfig] = field(default_factory=lambda: {"main": FeetechMotorsBusConfig(port="COM4",  # 从机械臂端口motors={# 电机配置与主机械臂相同"shoulder_pan": [1, "sts3215"],"shoulder_lift": [2, "sts3215"],"elbow_flex": [3, "sts3215"],"wrist_flex": [4, "sts3215"],"wrist_roll": [5, "sts3215"],"gripper": [6, "sts3215"],},),})

五、相机配置

1. 相机连接测试

确保相机直接连接电脑,然后通过系统的相机应用检查相机是否工作正常。

2. 确定相机索引

运行以下脚本测试相机并生成图像:

python lerobot/common/robot_devices/cameras/opencv.py --images-dir outputs/images_from_opencv_cameras

查看生成的图像,确定每个相机对应的索引。

3. 配置相机参数

修改configs.py文件中的相机配置,设置正确的相机索引:

cameras: dict[str, CameraConfig] = field(default_factory=lambda: {"laptop": OpenCVCameraConfig(camera_index=0,  # 侧面桌面相机fps=30,width=640,height=480,),"phone": OpenCVCameraConfig(camera_index=2,  # 顶部相机fps=30,width=640,height=480,),}
)

六、远程操作测试

完成上述配置后,可以进行第一次远程操作测试:

python lerobot/scripts/control_robot.py --robot.type=so100 --control.type=teleoperate

如果一切正常,此时应该可以通过主机械臂控制从机械臂,实现主从一致操作,同时会显示相机画面。

七、数据集录制

1. 准备工作

  • 确保相机角度和画面符合要求
  • 准备好要抓取的目标物体(如红色方块)和放置容器
  • 建议至少录制 50 组数据,涵盖 5 个不同位置,每个位置重复 10 次

2. 录制命令

使用以下命令开始录制数据集:

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=D:/so100_test --control.warmup_time_s=5 --control.episode_time_s=30 --control.reset_time_s=30 --control.num_episodes=2 --control.push_to_hub=false

参数说明:

  • warmup_time_s:初始化时间
  • episode_time_s:每次收集数据的时间
  • reset_time_s:每次数据收集之间的准备时间
  • num_episodes:预期收集的数据集数量
  • push_to_hub:是否将数据上传到 HuggingFace Hub
  • repo_id:数据集存储路径

3. 解决录制问题

问题 1:control.tags 参数问题

修改lerobot/scripts/control_robot.py文件,在control_robot函数中添加以下代码:

@parser.wrap()
def control_robot(cfg: ControlPipelineConfig):init_logging()logging.info(pformat(asdict(cfg)))# 新增两行if isinstance(cfg.control, RecordControlConfig):cfg.control.tags = ["so100", "tutorial"]robot = make_robot_from_config(cfg.robot)# ...
问题 2:Unknown encoder 'libsvtav1'

修改lerobot/common/datasets/video_utils.py文件,将编码器改为 libx264:

vcodec: str = "libx264"

或者按照官方建议,在 Linux 上重新安装 ffmpeg:

conda install -c conda-forge ffmpeg

八、Hugging Face 配置

1. 登录 Hugging Face

首先需要在 Hugging Face 上注册账号,然后在终端中登录:

huggingface-cli login --token 你的令牌 --add-to-git-credential

将你的令牌替换上述命令中的 "你的令牌",令牌可以在 Hugging Face 个人设置中获取。

2. 设置用户名

$env:HF_USER = "你的用户名"

九、数据集可视化

可以通过 Hugging Face 的在线工具可视化数据集:

  1. 访问:Visualize Dataset
  2. 输入你的数据集路径(如:acssdsd/so100_test
  3. 即可查看数据集中的样本、 episodes 和语言指令

十、机器人重播

可以让机器人自动复现录制的动作:

python lerobot/scripts/control_robot.py --robot.type=so100 --control.type=replay --control.fps=30 --control.repo_id=你的用户名/so100_test --control.episode=0

十一、模型训练

1. 安装 CUDA 和 PyTorch

确保安装了支持 CUDA 的 PyTorch 版本,LeRobot 需要 torch>=2.2.1。

根据你的 CUDA 版本从PyTorch 官网或下载页面选择合适的版本安装。

例如,对于 CUDA 12.1 和 Python 3.10:

pip install torch-2.2.1+cu121-cp310-cp310-win_amd64.whl

2. 开始训练

python lerobot/scripts/train.py --dataset.repo_id=你的用户名/so100_test --policy.type=act --output_dir=outputs/train/act_so100_test --job_name=act_so100_test --device=cuda --wandb.enable=true

如果不需要使用 Weights and Biases 进行可视化,可以先禁用:

wandb disabled

训练过程可能需要几个小时,具体取决于数据集大小和硬件性能。训练完成后,检查点将保存在outputs/train/act_so100_test/checkpoints目录下。

总结

本文详细介绍了 LeRobot 具身智能机械臂 SO-ARM100 从硬件组装、环境配置到模型训练的完整流程。通过这些步骤,你可以搭建起一个完整的具身智能系统,实现自定义抓取任务。

实际操作中,可能会遇到各种问题,建议参考官方文档和社区资源进行排查。希望这篇指南能帮助你顺利入门具身智能机器人开发!

如果有任何问题或建议,欢迎在评论区留言讨论。

参考资料:

  • LeRobot 官方文档
  • WowRobo Wiki
  • Seeed Studio 文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92026.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92026.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/92026.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LINUX720 SWAP扩容;新增逻辑卷;逻辑卷扩容;数据库迁移;gdisk

SWAP空间扩展 方法一 增加硬盘或分区扩展 swap -s mkswap /dev/sdd6 blkid /dev/sdd6 swapon /dev/sdd6 swapon -s vim /etc/fstab /dev/sdd6 swap swap defaults 0 0 开机自动扩容 swap -s [rootweb ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sd…

Python 进程间通信:TCP安全加密数据传输

最近在写安全方面的程序,有需求,就做了这些TCP加密数据传输类。 utils.safeUtils的内容详见: SafeObj:Python 高安全性加密数据容器类-CSDN博客SafeKey:Python 高安全性加密密码容器类-CSDN博客 如有任何问题或漏洞欢迎…

Windows批量修改文件属性方法

标题使用icacls命令(推荐批量操作)打开管理员权限的命令提示符(CMD)执行以下命令:cmd icacls "文件夹路径" /grant 用户名:(OI)(CI)F /T /C 参数说明:(OI):对象继承 - 适用于文件夹(C…

Entity Component System架构

ECS架构 1 简介 在当今快速发展的软件开发领域,游戏开发、实时模拟等场景对系统的性能、灵活性和可扩展性提出了极高的要求。传统的面向对象架构在面对复杂且动态变化的实体时,往往会出现代码耦合度高、扩展性差等问题。​ ECS(Entity - Com…

.vscode 扩展配置

一、vue快捷键配置 在项目.vscode下新建vue3.0.code-snippets 每当输入vue3.0后自动生成代码片段 {"Vue3.0快速生成模板": {"scope": "vue","prefix": "Vue3.0","body": ["<template>"," &…

一个基于阿里云的C端Java服务的整体项目架构

1.背景介绍 总结一下工作使用到的基于通常的公有云的项目整体架构&#xff0c;如何基于公有云建设安全可靠的服务&#xff0c;以阿里云为例的整体架构&#xff1b;1. 全局流量治理层&#xff08;用户请求入口&#xff09;1.1 域名与 DNS 解析域名注册与备案&#xff1a;通过阿里…

《剥开洋葱看中间件:Node.js请求处理效率与错误控制的深层逻辑》

在Node.js的运行时环境中&#xff0c;中间件如同一系列精密咬合的齿轮&#xff0c;驱动着请求从进入到响应的完整旅程&#xff0c;而洋葱模型则是这组齿轮的传动系统。它以一种看似矛盾的方式融合了顺序与逆序、分离与协作——让每个处理环节既能独立工作&#xff0c;又能感知全…

GaussDB union 的用法

1 union 的作用union 运算符用于组合两个或更多 select 语句的结果集。2 union 使用前提union 中的每个 select 语句必须具有相同的列数这些列也必须具有相似的数据类型每个 select 语句中的列也必须以相同的顺序排列3 union 语法select column_name(s) from table1 union sele…

构建足球实时比分APP:REST API与WebSocket接入方案详解

在开发足球实时比分应用时&#xff0c;数据接入方式的选择直接影响用户体验和系统性能。本文将客观分析REST API和WebSocket两种主流接入方案的技术特点、适用场景和实现策略&#xff0c;帮助开发者做出合理选择。一、REST API&#xff1a;灵活的数据获取方案核心优势标准化接口…

Linux文件系统三要素:块划分、分区管理与inode结构解析

理解文件系统 我们知道文件可以分为磁盘文件和内存文件&#xff0c;内存文件前面我们已经谈过了&#xff0c;下面我们来谈谈磁盘文件。 目录 一、引入"块"概念 解析 stat demo.c 命令输出 基本信息 设备信息 索引节点信息 权限信息 时间戳 二、引入"分区…

基于paddleDetect的半监督目标检测实战

基于paddleDetect的半监督目标检测实战前言相关介绍前提条件实验环境安装环境项目地址使用paddleDetect的半监督方法训练自己的数据集准备数据分割数据集配置参数文件PaddleDetection-2.7.0/configs/semi_det/denseteacher/denseteacher_ppyoloe_plus_crn_l_coco_semi010.ymlPa…

计算机网络:(十)虚拟专用网 VPN 和网络地址转换 NAT

计算机网络&#xff1a;&#xff08;十&#xff09;虚拟专用网 VPN 和网络地址转换 NAT前言一、虚拟专用网 VPN1. 基础概念与作用2. 工作原理3. 常见类型4. 协议对比二、NAT&#xff1a;网络地址转换1. 基础概念与作用2. 工作原理与类型3. 优缺点与问题4. 进阶类型三、VPN 与 N…

数位 dp

数位dp 特点 问题大多是指“在 [l,r][l,r][l,r] 的区间内&#xff0c;满足……的数字的个数、种类&#xff0c;等等。” 但是显然&#xff0c;出题人想要卡你&#xff0c;rrr 肯定是非常大的&#xff0c;暴力枚举一定超时。 于是就有了数位 dp。 基本思路 数位 dp 说白了…

Selector的用法

Selector的用法 Selector是基于lxml构建的支持XPath选择器、CSS选择器&#xff0c;以及正则表达式&#xff0c;功能全面&#xff0c;解析速度和准确度非常高 from scrapy import Selectorbody <html><head><title>HelloWorld</title></head>&…

Netty封装Websocket并实现动态路由

引言 关于Netty和Websocket的介绍我就不多讲了,网上一搜一大片。现如今AI的趋势发展很热门,长连接对话也是会经常接触到的,使用Websocket实现长连接,那么很多人为了快速开发快速集成就会使用spring-boot-starter-websocket依赖快速实现,但是注意该实现是基于tomcat的,有…

行为型设计模式:解释器模式

解释器模式 解释器模式介绍 解释器模式使用频率不算高&#xff0c;通常用来描述如何构建一个简单“语言”的语法解释器。它只在一些非常特定的领域被用到&#xff0c;比如编译器、规则引擎、正则表达式、SQL 解析等。不过&#xff0c;了解它的实现原理同样很重要&#xff0c;能…

SaTokenException: 未能获取对应StpLogic 问题解决

&#x1f4dd; Sa-Token 异常处&#xff1a;未能获取对应StpLogic&#xff0c;typeuser&#x1f9e8; 异常信息 cn.dev33.satoken.exception.SaTokenException: 未能获取对应StpLogic&#xff0c;typeuser抛出位置&#xff1a; throw new SaTokenException("未能获取对应S…

Web前端性能优化原理与方法

一、概述 1.1 性能对业务的影响 大部分网站的作用是&#xff1a;产品信息载体、用户交互工具或商品流通渠道。这就要求网站与更多用户建立联系&#xff0c;同时还要保持良好的用户黏性&#xff0c;所以网站就不能只关注自我表达&#xff0c;而不顾及用户是否喜欢。看看网站性…

第十八节:第六部分:java高级:注解、自定义注解、元注解

认识注解自定义注解注解的原理元注解常用的两个元注解代码&#xff1a; MyTest1&#xff08;注解类&#xff09; package com.itheima.day10_annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Retent…

北京科技企业在软文推广发稿平台发布文章,如何精准触达客户?

大家好&#xff01;我是你们的老朋友&#xff0c;今天咱们聊聊北京科技企业如何通过软文推广发稿平台精准触达目标客户这个话题。作为企业营销的老司机&#xff0c;我深知在这个信息爆炸的时代&#xff0c;如何让你的品牌声音被目标客户听到是多么重要。下面就让我来分享一些实…