LeRobot 具身智能機械臂 SO-ARM100 從搭建到訓練全流程

今天給大家分享一下 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;如何讓你的品牌聲音被目標客戶聽到是多么重要。下面就讓我來分享一些實…