LeRobot 文件

真實世界機器人入門

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

真實世界機器人入門

本教程將解釋如何訓練神經網路以自主控制真實機器人。

你將學到:

  1. 如何記錄和視覺化您的資料集。
  2. 如何使用您的資料訓練策略並準備進行評估。
  3. 如何評估您的策略並可視化結果。

透過遵循這些步驟,您將能夠以高成功率複製任務,例如拿起樂高積木並將其放入箱中,如下面的影片所示。

影片:拿起樂高積木任務

本教程不限於特定的機器人:我們將引導您完成可適用於任何受支援平臺的命令和 API 片段。

在資料收集過程中,您將使用“遠端操作”裝置,例如主臂或鍵盤來遠端操作機器人並記錄其運動軌跡。

一旦您收集到足夠的軌跡,您將訓練一個神經網路來模仿這些軌跡,並部署訓練好的模型,以便您的機器人能夠自主執行任務。

如果您在任何時候遇到任何問題,請加入我們的Discord 社群尋求支援。

設定和校準

如果您尚未設定和校準您的機器人和遠端操作裝置,請按照機器人特定教程進行操作。

遠端操作

在此示例中,我們將演示如何遠端操作 SO101 機器人。對於每個命令,我們還提供了相應的 API 示例。

請注意,與機器人關聯的 id 用於儲存校準檔案。在使用相同設定時,在遠端操作、記錄和評估時使用相同的 id 非常重要。

命令
API 示例
python -m lerobot.teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem58760431541 \
    --robot.id=my_awesome_follower_arm \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \
    --teleop.id=my_awesome_leader_arm

遠端操作命令將自動

  1. 識別任何缺失的校準並啟動校準程式。
  2. 連線機器人和遠端操作裝置並開始遠端操作。

相機

要將相機新增到您的設定中,請遵循此指南

透過相機進行遠端操作

使用 rerun,您可以再次遠端操作,同時視覺化相機饋送和關節位置。在此示例中,我們使用 Koch 機械臂。

命令
API 示例
python -m lerobot.teleoperate \
    --robot.type=koch_follower \
    --robot.port=/dev/tty.usbmodem58760431541 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}}" \
    --teleop.type=koch_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true

記錄資料集

一旦您熟悉了遠端操作,您就可以記錄您的第一個資料集。

我們使用 Hugging Face Hub 功能來上傳您的資料集。如果您以前沒有使用過 Hub,請確保您可以透過 CLI 使用寫訪問令牌登入,該令牌可以從Hugging Face 設定生成。

透過執行此命令將您的令牌新增到 CLI

huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential

然後將您的 Hugging Face 儲存庫名稱儲存在一個變數中

HF_USER=$(huggingface-cli whoami | head -n 1)
echo $HF_USER

現在您可以記錄一個數據集了。要記錄 2 個 эпизо드 並將您的資料集上傳到 Hub,請執行此針對 SO101 定製的命令。

python -m lerobot.record \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem585A0076841 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true \
    --dataset.repo_id=${HF_USER}/record-test \
    --dataset.num_episodes=2 \
    --dataset.single_task="Grab the black cube"

資料集上傳

在本地,您的資料集儲存在此資料夾中:~/.cache/huggingface/lerobot/{repo-id}。資料記錄結束後,您的資料集將上傳到您的 Hugging Face 頁面(例如https://huggingface.co/datasets/cadene/so101_test),您可以透過執行以下命令獲取該頁面

echo https://huggingface.co/datasets/${HF_USER}/so101_test

您的資料集將自動標記為 LeRobot,以便社群輕鬆找到它,您還可以新增自定義標籤(例如,在此示例中為 tutorial)。

您可以透過搜尋 LeRobot 標籤在 Hub 上查詢其他 LeRobot 資料集。

記錄函式

record 函式提供了一套用於在機器人操作期間捕獲和管理資料的工具

1. 資料儲存
  • 資料使用 LeRobotDataset 格式儲存,並在記錄期間儲存在磁碟上。
  • 預設情況下,資料集在記錄後推送到您的 Hugging Face 頁面。
    • 要停用上傳,請使用 --dataset.push_to_hub=False
2. 檢查點和恢復
  • 檢查點在錄製期間自動建立。
  • 如果發生問題,您可以透過重新執行帶有 --control.resume=true 的相同命令來恢復。
  • 要從頭開始錄製,請手動刪除資料集目錄。
3. 錄製引數

使用命令列引數設定資料錄製流程

  • --dataset.episode_time_s=60 每個資料錄製 эпизод 的持續時間(預設:60 秒)。
  • --dataset.reset_time_s=60 每個 эпизод 後重置環境的持續時間(預設:60 秒)。
  • --dataset.num_episodes=50 要錄製的 эпизод 總數(預設:50)。
4. 錄製期間的鍵盤控制

使用鍵盤快捷鍵控制資料錄製流程

  • 右箭頭 ():提前停止當前 эпизод 或重置時間並進入下一個。
  • 左箭頭 ():取消當前 эпизод 並重新錄製。
  • Escape (ESC):立即停止會話,編碼影片,並上傳資料集。

資料收集技巧

一旦您熟悉了資料錄製,您就可以建立更大的資料集進行訓練。一個很好的入門任務是在不同位置抓取物體並將其放入箱子。我們建議至少錄製 50 個 episode,每個位置 10 個 episode。在整個錄製過程中保持相機固定並保持一致的抓取行為。還要確保您正在操作的物體在相機中可見。一個好的經驗法則是,您應該只通過檢視相機影像就能自己完成任務。

在以下部分中,您將訓練您的神經網路。在實現可靠的抓取效能後,您可以在資料收集期間開始引入更多變化,例如額外的抓取位置、不同的抓取技術和改變相機位置。

避免過快地新增太多變化,因為它可能會阻礙您的結果。

如果您想深入瞭解這個重要主題,您可以檢視我們撰寫的關於什麼是一個好的資料集的部落格文章

故障排除:

  • 在 Linux 上,如果左右箭頭鍵和 Esc 鍵在資料記錄期間沒有任何效果,請確保您已設定 $DISPLAY 環境變數。請參閱 pynput 限制

視覺化資料集

如果您使用 --control.push_to_hub=true 將資料集上傳到 Hub,您可以透過複製貼上您的 repo ID(透過以下命令獲得)線上視覺化您的資料集

echo ${HF_USER}/so101_test

回放 эпизод

一個有用的功能是 replay 函式,它允許您回放您錄製的任何 эпизод 或任何資料集中的 эпизод。此功能可幫助您測試機器人動作的可重複性並評估相同型號機器人之間的可轉移性。

您可以透過以下命令在機器人上回放第一個 эпизод

python -m lerobot.replay \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem58760431541 \
    --robot.id=my_awesome_follower_arm \
    --dataset.repo_id=${HF_USER}/record-test \
    --dataset.episode=0 # choose the episode you want to replay

您的機器人應該複製與您記錄的動作相似的動作。例如,請檢視此影片,其中我們使用 replay 在來自Trossen Robotics 的 Aloha 機器人上。

訓練策略

要訓練控制您的機器人的策略,請使用 python lerobot/scripts/train.py 指令碼。需要一些引數。這是一個示例命令

python lerobot/scripts/train.py \
  --dataset.repo_id=${HF_USER}/so101_test \
  --policy.type=act \
  --output_dir=outputs/train/act_so101_test \
  --job_name=act_so101_test \
  --policy.device=cuda \
  --wandb.enable=true

讓我們來解釋一下這個命令:

  1. 我們將資料集作為引數提供,使用 --dataset.repo_id=${HF_USER}/so101_test
  2. 我們提供的策略是 policy.type=act。這會從 configuration_act.py 載入配置。重要的是,此策略將自動適應機器人電機狀態、電機動作和相機的數量(例如 laptopphone),這些已儲存在您的資料集中。
  3. 我們提供了 policy.device=cuda,因為我們是在 Nvidia GPU 上訓練,但你也可以使用 policy.device=mps 在 Apple 晶片上進行訓練。
  4. 我們提供了 wandb.enable=true 來使用 Weights and Biases 視覺化訓練圖。這是可選的,但如果您使用它,請確保透過執行 wandb login 登入。

訓練應該需要幾個小時。您將在 outputs/train/act_so101_test/checkpoints 中找到檢查點。

要從檢查點恢復訓練,下面是一個從 act_so101_test 策略的 last 檢查點恢復的示例命令

python lerobot/scripts/train.py \
  --config_path=outputs/train/act_so101_test/checkpoints/last/pretrained_model/train_config.json \
  --resume=true

上傳策略檢查點

訓練完成後,使用以下命令上傳最新的檢查點:

huggingface-cli upload ${HF_USER}/act_so101_test \
  outputs/train/act_so101_test/checkpoints/last/pretrained_model

你也可以使用以下命令上傳中間檢查點:

CKPT=010000
huggingface-cli upload ${HF_USER}/act_so101_test${CKPT} \
  outputs/train/act_so101_test/checkpoints/${CKPT}/pretrained_model

評估您的策略

您可以使用 lerobot/record.py 中的 record 指令碼,但以策略檢查點作為輸入。例如,執行此命令以記錄 10 個評估 эпизод

python -m lerobot.record  \
  --robot.type=so100_follower \
  --robot.port=/dev/ttyACM1 \
  --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}, side: {type: intelrealsense, serial_number_or_name: 233522074606, width: 640, height: 480, fps: 30}}" \
  --robot.id=my_awesome_follower_arm \
  --display_data=false \
  --dataset.repo_id=$HF_USER/eval_so100 \
  --dataset.single_task="Put lego brick into the transparent box" \
  --policy.path=${HF_USER}/my_policy

如您所見,它與之前用於記錄訓練資料集的命令幾乎相同。有兩處更改

  1. 有一個額外的 --control.policy.path 引數,它指示您的策略檢查點的路徑(例如 outputs/train/eval_act_so101_test/checkpoints/last/pretrained_model)。如果您將模型檢查點上傳到 Hub,您也可以使用模型儲存庫(例如 ${HF_USER}/act_so101_test)。
  2. 資料集的名稱以 eval 開頭,以反映您正在執行推理(例如 ${HF_USER}/eval_act_so101_test)。
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.