Skip to main content

LeRobotを使用したSO-ARM100およびSO-ARM101ロボットアームの入門

tip

このチュートリアルのメンテナンスは最新バージョンのlerobotに更新されています。以前のバージョンのチュートリアルを参照したい場合は、こちらをクリックしてください。

はじめに

SO-10xARMは、TheRobotStudioによって開始された完全にオープンソースのロボットアームプロジェクトです。フォロワーアームとリーダーロボットアームが含まれており、詳細な3Dプリントファイルと操作ガイドも提供されています。LeRobotは、PyTorchで実世界のロボティクス向けのモデル、データセット、ツールを提供することに取り組んでいます。その目的は、ロボティクスの参入障壁を下げ、誰もがデータセットと事前訓練されたモデルの共有に貢献し、恩恵を受けることができるようにすることです。LeRobotは、実世界での応用に検証された最先端の方法論を統合し、模倣学習を中心としています。事前訓練されたモデルのスイート、人間が収集したデモンストレーションを特徴とするデータセット、シミュレーション環境を提供し、ユーザーがロボットの組み立ての必要なしに開始できるようにしています。今後数週間で、現在利用可能な最もコスト効率的で有能なロボットでの実世界のロボティクスのサポートを拡張する予定です。

プロジェクト紹介

SO-ARM10xとreComputer Jetson AIインテリジェントロボットキットは、高精度ロボットアーム制御と強力なAIコンピューティングプラットフォームをシームレスに組み合わせ、包括的なロボット開発ソリューションを提供します。このキットは、Jetson OrinまたはAGX Orinプラットフォームをベースとし、SO-ARM10xロボットアームとLeRobot AIフレームワークを組み合わせて、教育、研究、産業自動化などの複数のシナリオに適用可能なインテリジェントロボットシステムをユーザーに提供します。 このwikiは、SO ARM10xの組み立てとデバッグのチュートリアルを提供し、Lerobotフレームワーク内でのデータ収集とトレーニングを実現します。

主な特徴

  1. オープンソースで低コストTheRobotStudioからのオープンソース、低コストのロボットアームソリューションです
  2. LeRobotとの統合LeRobotプラットフォームとの統合のために設計されています
  3. 豊富な学習リソース:組み立てとキャリブレーションガイド、テスト、データ収集、トレーニング、デプロイメントのチュートリアルなど、包括的なオープンソース学習リソースを提供し、ユーザーが迅速に開始してロボットアプリケーションを開発できるよう支援します。
  4. Nvidiaとの互換性:reComputer Mini J4012 Orin NX 16 GBでこのアームキットをデプロイします。
  5. マルチシーン応用:教育、科学研究、自動化生産、ロボティクスなどの分野に適用可能で、様々な複雑なタスクにおいて効率的で精密なロボット操作の実現をユーザーに支援します。

新機能:

  • 配線の最適化:SO-ARM100と比較して、SO-ARM101は改良された配線を特徴とし、以前にジョイント3で見られた切断問題を防ぎます。新しい配線設計により、ジョイントの可動範囲も制限されなくなりました。
  • リーダーアームの異なるギア比:リーダーアームは最適化されたギア比のモーターを使用し、性能を向上させ、外部ギアボックスの必要性を排除しています。
  • 新機能サポート:リーダーアームがフォロワーアームをリアルタイムで追従できるようになりました。これは、人間がロボットの動作に介入して修正できる今後の学習ポリシーにとって重要です。
caution

Seeed Studioは、ハードウェア自体の品質についてのみ責任を負います。チュートリアルは公式ドキュメントに厳密に従って更新されています。解決できないソフトウェアの問題や環境依存の問題に遭遇した場合は、このチュートリアルの最後にあるFAQセクションを確認することに加えて、LeRobotプラットフォームまたはLeRobot Discordチャンネルに問題を速やかに報告してください。

仕様

タイプSO-ARM100SO-ARM101
Arm KitArm Kit ProArm KitArm Kit Pro
リーダーアーム全ジョイント用の1:345ギア比を持つ12x ST-3215-C001(7.4V)モーター全ジョイント用の1:345ギア比を持つ12x ST-3215-C018/ST-3215-C047(12V)モーター

ジョイント2のみ用の1:345ギア比を持つ1x ST-3215-C001(7.4V)モーター
ジョイント1と3用の1:191ギア比を持つ2x ST-3215-C044(7.4V)モーター
ジョイント4、5、グリッパー(ジョイント6)用の1:147ギア比を持つ3x ST-3215-C046(7.4V)モーター

フォロワーアームSO-ARM100と同じ
電源5.5 mm × 2.1 mm DC 5 V 4 A5.5 mm × 2.1 mm DC 12 V 2 A5.5 mm × 2.1 mm DC 5 V 4 A

5.5 mm × 2.1 mm DC 12 V 2 A(フォロワーアーム)
5.5 mm × 2.1 mm DC 5 V 4 A(リーダーアーム)

角度センサー12ビット磁気エンコーダー
推奨動作温度0 °C から 40 °C
通信UART
制御方法PC
danger

Arm Kitバージョンを購入した場合、両方の電源は5Vです。Arm Kit Proバージョンを購入した場合は、リーダーロボットアームのキャリブレーションとすべてのステップに5V電源を使用し、フォロワーロボットアームのキャリブレーションとすべてのステップに12V電源を使用してください。

部品表(BOM)

部品数量含まれる
サーボモーター12
モーター制御ボード2
USB-Cケーブル 2本1
電源22
テーブルクランプ4
アームの3Dプリント部品1オプション

初期システム環境

Ubuntu x86の場合:

  • Ubuntu 22.04
  • CUDA 12+
  • Python 3.10
  • Torch 2.6+

Jetson Orinの場合:

  • Jetson JetPack 6.0および6.1、6.1はサポートされていません
  • Python 3.10
  • Torch 2.3+

目次

A. 3Dプリントガイド

B. LeRobotのインストール

C. モーターの設定

D. 組み立て

E. キャリブレーション

F. テレオペレーション

G. カメラの追加

H. データセットの記録

I. データセットの可視化

J. エピソードの再生

K. ポリシーのトレーニング

L. ポリシーの評価

3Dプリントガイド

caution

SO101の公式アップデートに伴い、SO100はサポートされなくなり、公式によるとソースファイルは削除されますが、ソースファイルは依然として私たちのMakerworldで見つけることができます。ただし、以前にSO100を購入したユーザーについては、チュートリアルとインストール方法は互換性を保っています。SO101のプリントは、SO100のモーターキットインストールと完全に互換性があります。

ステップ1:プリンターを選択する

提供されるSTLファイルは、多くのFDMプリンターでプリント可能です。以下はテスト済みで推奨される設定ですが、他の設定でも動作する可能性があります。

  • 材料:PLA+
  • ノズル径と精度:0.2mmレイヤー高さでの0.4mmノズル径、または0.4mmレイヤー高さでの0.6mmノズル。
  • 充填密度:15%

ステップ2:プリンターをセットアップする

  • プリンターが校正され、ベッドレベルがプリンター固有の指示に従って正しく設定されていることを確認してください。
  • プリントベッドを清掃し、ほこりや油脂がないことを確認してください。水やその他の液体でベッドを清掃した場合は、ベッドを乾燥させてください。
  • プリンターが推奨する場合は、標準的なグルースティックを使用し、ベッドのプリント領域全体に薄く均一な接着剤の層を塗布してください。塊や不均一な塗布は避けてください。
  • プリンター固有の指示に従ってプリンターフィラメントをロードしてください。
  • プリンター設定が上記で推奨されたものと一致することを確認してください(ほとんどのプリンターには複数の設定があるため、最も近いものを選択してください)。
  • すべての場所でサポートを設定しますが、水平面に対して45度を超える傾斜は無視してください。
  • 水平軸を持つネジ穴にはサポートがないようにしてください。

ステップ3:パーツを印刷する

リーダーまたはフォロワーのすべてのパーツは、簡単な3Dプリンティング用に既に単一ファイルに含まれており、サポートを最小限に抑えるためにz軸上向きに正しく配向されています。

  • 220mmx220mmのプリンターベッドサイズ(Enderなど)の場合、これらのファイルを印刷してください:

  • 205mm x 250mmのプリンターベッドサイズ(Prusa/Upなど)の場合:

LeRobotをインストールする

pytorchやtorchvisionなどの環境は、お使いのCUDAに基づいてインストールする必要があります。

  1. Minicondaをインストール: Jetson用:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
chmod +x Miniconda3-latest-Linux-aarch64.sh
./Miniconda3-latest-Linux-aarch64.sh
source ~/.bashrc

または、X86 Ubuntu 22.04用:

mkdir -p ~/miniconda3
cd miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh
source ~/miniconda3/bin/activate
conda init --all
  1. lerobot用の新しいconda環境を作成してアクティベート
conda create -y -n lerobot python=3.10 && conda activate lerobot
  1. Lerobotをクローン:
git clone https://github.com/Seeed-Projects/lerobot.git ~/lerobot
  1. minicondaを使用する場合、環境にffmpegをインストール:
conda install ffmpeg -c conda-forge
tip

これは通常、libsvtav1エンコーダーでコンパイルされたプラットフォーム用のffmpeg 7.Xをインストールします。libsvtav1がサポートされていない場合(ffmpeg -encodersでサポートされているエンコーダーを確認)、以下のことができます:

  • [すべてのプラットフォーム] 以下を使用してffmpeg 7.Xを明示的にインストール:
conda install ffmpeg=7.1.1 -c conda-forge
  • [Linuxのみ] ffmpegビルド依存関係をインストールし、libsvtav1でソースからffmpegをコンパイルし、which ffmpegでインストールに対応するffmpegバイナリを使用していることを確認してください。

このようなエラーが発生した場合も、このコマンドを使用できます。

  1. feetechモーター用の依存関係を含むLeRobotをインストール:
cd ~/lerobot && pip install -e ".[feetech]"

Jetson Jetpack 6.0+デバイス用(このステップを実行する前に、ステップ5からPytorch-gpuとTorchvisionをインストールしてください):

conda install -y -c conda-forge "opencv>=4.10.0.84"  # Install OpenCV and other dependencies through conda, this step is only for Jetson Jetpack 6.0+
conda remove opencv # Uninstall OpenCV
pip3 install opencv-python==4.10.0.84 # Then install opencv-python via pip3
conda install -y -c conda-forge ffmpeg
conda uninstall numpy
pip3 install numpy==1.26.0 # This should match torchvision
  1. PytorchとTorchvisionを確認

pipを介してlerobot環境をインストールすると、元のPytorchとTorchvisionがアンインストールされ、PytorchとTorchvisionのCPUバージョンがインストールされるため、Pythonで確認を行う必要があります。

import torch
print(torch.cuda.is_available())

印刷された結果がFalseの場合、公式ウェブサイトのチュートリアルに従ってPytorchとTorchvisionを再インストールする必要があります。

Jetsonデバイスを使用している場合は、このチュートリアルに従ってPytorchとTorchvisionをインストールしてください。

モーターを設定する

SO-ARM101のサーボ校正と初期化プロセスは、方法とコードの両方においてSO-ARM100と同じです。ただし、SO-ARM101 Leader Armの最初の3つの関節のギア比はSO-ARM100のものと異なるため、注意深く区別して校正することが重要です。

モーターを設定するには、リーダーアーム用に1つのバスサーボアダプターと6つのモーターを指定し、同様にフォロワーアーム用にもう1つのバスサーボアダプターと6つのモーターを指定します。それらにラベルを付け、各モーターがフォロワー用(F)かリーダー用(L)か、そして1から6までのIDを書いておくと便利です。フォロワーアームの関節1から6を表すためにF1–F6を使用し、リーダーアームの関節1から6を表すためにL1–L6を使用します。対応するサーボモデル、関節の割り当て、ギア比の詳細は以下の通りです:

サーボモデルギア比対応する関節
ST-3215-C044(7.4V)1:191L1
ST-3215-C001(7.4V)1:345L2
ST-3215-C044(7.4V)1:191L3
ST-3215-C046(7.4V)1:147L4–L6
ST-3215-C001(7.4V) / C018(12V) / C047(12V)1:345F1–F6
danger

モーターバスに5Vまたは12Vの電源を接続してください。STS3215 7.4Vモーター用には5V、STS3215 12Vモーター用には12Vです。リーダーアームは常に7.4Vモーターを使用するため、12Vと7.4Vモーターの両方がある場合は、正しい電源を接続するよう注意してください。そうしないとモーターを焼損する可能性があります!次に、USBを介してモーターバスをコンピューターに接続します。USBは電力を供給しないため、電源とUSBの両方を接続する必要があることに注意してください。

以下はコード校正手順です。上記の画像の参照配線サーボで校正してください

アームに関連するUSBポートを見つける 各アームの正しいポートを見つけるために、ユーティリティスクリプトを2回実行します:

lerobot-find-port

出力例:

Finding all available ports for the MotorBus.
['/dev/ttyACM0', '/dev/ttyACM1']
Remove the usb cable from your MotorsBus and press Enter when done.

[...Disconnect corresponding leader or follower arm and press Enter...]

The port of this MotorsBus is /dev/ttyACM1
Reconnect the USB cable.
tip

USBを取り外すことを忘れないでください。そうしないとインターフェースが検出されません。

フォロワーアームのポートを識別する際の出力例(例:Macでは/dev/tty.usbmodem575E0031751、Linuxでは/dev/ttyACM0の可能性):

リーダーアームのポートを識別する際の出力例(例:/dev/tty.usbmodem575E0032081、またはLinuxでは/dev/ttyACM1の可能性):

以下を実行してUSBポートへのアクセス権を付与する必要がある場合があります:

sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1

モーターを設定する

danger

リーダーモーター(ST-3215-C046、C044、001)の校正には5V電源を使用してください。

リーダーアーム関節6校正リーダーアーム関節5校正リーダーアーム関節4校正リーダーアーム関節3校正リーダーアーム関節2校正リーダーアーム関節1校正
fig1fig2fig3fig4fig5fig6
danger

Arm Kitバージョン(ST-3215-C001)を購入した場合は、5V電源を使用してください。Arm Kit Proバージョンを購入した場合は、サーボ(ST-3215-C047/ST-3215-C018)の校正に12V電源を使用してください。

フォロワーアーム関節6校正フォロワーアーム関節5校正フォロワーアーム関節4校正フォロワーアーム関節3校正フォロワーアーム関節2校正フォロワーアーム関節1校正
fig1fig2fig3fig4fig5fig6
tip

繰り返しになりますが、サーボジョイントIDとギア比がSO-ARM101のものと厳密に対応していることを確認してください。

コンピュータからのUSBケーブルと電源をフォロワーアームのコントローラーボードに接続します。その後、以下のコマンドを実行してください。

lerobot-setup-motors \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 # <- paste here the port found at previous step

以下の指示が表示されるはずです。

Connect the controller board to the 'gripper' motor only and press enter.

指示に従って、グリッパーのモーターを接続してください。ボードに接続されているモーターがそれだけであることを確認し、モーター自体がまだ他のモーターにデイジーチェーン接続されていないことを確認してください。[Enter]を押すと、スクリプトが自動的にそのモーターのIDとボーレートを設定します。

その後、以下のメッセージが表示されるはずです:

'gripper' motor id set to 6

続いて次の指示が表示されます:

Connect the controller board to the 'wrist_roll' motor only and press enter.

コントローラーボードから3ピンケーブルを取り外すことができますが、もう一方の端のグリッパーモーターには接続したままにしておくことができます。すでに正しい位置にあるからです。次に、別の3ピンケーブルを手首回転モーターに接続し、コントローラーボードに接続してください。前のモーターと同様に、ボードに接続されているモーターがそれだけであることを確認し、モーター自体が他のモーターに接続されていないことを確認してください。

caution

指示に従って、各モーターに対してこの操作を繰り返してください。

tip

Enterを押す前に、各ステップでケーブル接続を確認してください。例えば、ボードを操作している間に電源ケーブルが外れる可能性があります。

完了すると、スクリプトは単純に終了し、この時点でモーターは使用準備が整います。これで、各モーターから次のモーターへ3ピンケーブルを接続し、最初のモーター(id=1の「ショルダーパン」)からコントローラーボードへケーブルを接続できます。コントローラーボードはアームのベースに取り付けることができます。

リーダーアームについても同じ手順を実行してください。

lerobot-setup-motors \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM0 # <- paste here the port found at previous step

組み立て

tip
  • SO-ARM101のデュアルアーム組み立てプロセスは、SO-ARM100と同じです。唯一の違いは、SO-ARM101にケーブルクリップが追加されていることと、リーダーアームのジョイントサーボのギア比が異なることです。そのため、SO100とSO101の両方とも、以下の内容を参照して取り付けることができます
  • 組み立て前に、モーターモデルと減速比を再度確認してください。SO100を購入した場合は、このステップを無視できます。SO101を購入した場合は、以下の表を確認してF1からF6、L1からL6を区別してください。
サーボモデルギア比対応ジョイント
ST-3215-C044(7.4V)1:191L1
ST-3215-C001(7.4V)1:345L2
ST-3215-C044(7.4V)1:191L3
ST-3215-C046(7.4V)1:147L4–L6
ST-3215-C001(7.4V) / C018(12V) / C047(12V)1:345F1–F6
danger

SO101 Arm Kit Standard Editionを購入した場合、すべての電源は5Vです。SO101 Arm Kit Pro Editionを購入した場合、リーダーアームは各ステップで5V電源を使用してキャリブレーションと操作を行い、フォロワーアームは各ステップで12V電源を使用してキャリブレーションと操作を行う必要があります。

リーダーアームの組み立て

ステップ 1ステップ 2ステップ 3ステップ 4ステップ 5ステップ 6
fig1fig2fig3fig4fig5fig6
ステップ 7ステップ 8ステップ 9ステップ 10ステップ 11ステップ 12
fig1fig2fig3fig4fig5fig6
ステップ 13ステップ 14ステップ 15ステップ 16ステップ 17ステップ 18
fig1fig2fig3fig4fig5fig6
ステップ 19ステップ 20
fig1fig2

フォロワーアームの組み立て

tip
  • フォロワーアームの組み立て手順は、リーダーアームと基本的に同じです。唯一の違いは、ステップ12以降のエンドエフェクター(グリッパーとハンドル)の取り付け方法です。
ステップ 1ステップ 2ステップ 3ステップ 4ステップ 5ステップ 6
fig1fig2fig3fig4fig5fig6
ステップ 7ステップ 8ステップ 9ステップ 10ステップ 11ステップ 12
fig1fig2fig3fig4fig5fig6
ステップ 13ステップ 14ステップ 15ステップ 16ステップ 17
fig1fig2fig3fig4fig5

キャリブレーション

tip

SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。

danger

SO101 Arm Kit Standard Editionを購入した場合、すべての電源は5Vです。SO101 Arm Kit Pro Editionを購入した場合、リーダーアームは各ステップで5V電源を使用してキャリブレーションと操作を行い、フォロワーアームは各ステップで12V電源を使用してキャリブレーションと操作を行う必要があります。

次に、SO-10xロボットに電源とデータケーブルを接続してキャリブレーションを行い、リーダーアームとフォロワーアームが同じ物理的位置にあるときに同じ位置値を持つようにする必要があります。このキャリブレーションは、1つのSO-10xロボットで訓練されたニューラルネットワークが別のロボットでも動作するようにするために不可欠です。ロボットアームを再キャリブレーションする必要がある場合は、~/.cache/huggingface/lerobot/calibration/robotsまたは~/.cache/huggingface/lerobot/calibration/teleoperatorsの下のファイルを削除してから、ロボットアームを再キャリブレーションしてください。そうしないと、エラープロンプトが表示されます。ロボットアームのキャリブレーション情報は、このディレクトリ下のJSONファイルに保存されます。

フォロワーアームの手動キャリブレーション

6つのロボットサーボのインターフェースを3ピンケーブルで接続し、シャーシサーボをサーボドライブプレートに接続してから、以下のコマンドまたはAPIの例を実行してロボットアームをキャリブレーションしてください:

最初にインターフェース権限を付与

sudo chmod 666 /dev/ttyACM*

次にフォロワーアームをキャリブレーション

lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \# <- The port of your robot
--robot.id=my_awesome_follower_arm # <- Give the robot a unique name

以下の動画はキャリブレーションの実行方法を示しています。まず、すべての関節が可動範囲の中央にある位置にロボットを移動させる必要があります。その後、Enterキーを押してから、各関節を可動範囲全体で動かす必要があります。

リーダーアームの手動キャリブレーション

リーダーアームをキャリブレーションするために同じ手順を実行し、以下のコマンドまたはAPIの例を実行してください:

lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \# <- The port of your robot
--teleop.id=my_awesome_leader_arm # <- Give the robot a unique name

テレオペレーション

シンプルなテレオペレーション これでロボットをテレオペレーションする準備が整いました!この簡単なスクリプトを実行してください(カメラには接続せず、表示もしません):

ロボットに関連付けられたIDは、キャリブレーションファイルを保存するために使用されることに注意してください。同じセットアップを使用してテレオペレーション、記録、評価を行う際は、同じIDを使用することが重要です。

sudo chmod 666 /dev/ttyACM*
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm

テレオペレーションコマンドは自動的に以下を実行します:

  1. 不足しているキャリブレーションを特定し、キャリブレーション手順を開始します。
  2. ロボットとテレオペレーションデバイスを接続し、テレオペレーションを開始します。

カメラの追加

Orbbec Gemini2 Depth Cameraを使用する場合
  • 🚀 ステップ1:Orbbec SDK依存環境のインストール
  1. pyorbbecリポジトリをクローンします

    cd ~/
    git clone https://github.com/orbbec/pyorbbecsdk.git
  2. 対応する**.whlファイル**をダウンロードしてSDKをインストールします
    pyorbbecsdk Releasesにアクセスし、
    Pythonバージョンに基づいて選択してインストールしてください。例:

    pip install pyorbbecsdk-x.x.x-cp310-cp310-linux_x86_64.whl
  3. pyorbbecディレクトリで依存関係をインストールします

    cd ~/pyorbbecsdk
    pip install -r requirements.txt

    numpyバージョンを1.26.0に強制ダウングレードします

    pip install numpy==1.26.0

赤いエラーメッセージは無視できます。

  1. Orbbec SDKを~/lerobot/src/camerasディレクトリにクローンします
cd ~/lerobot/src/cameras
git clone https://github.com/ZhuYaoHui1998/orbbec.git
  1. utils.pyとinit.pyを修正します
  • ~/lerobot/src/lerobot/camerasディレクトリでutils.pyを見つけ、40行目に以下のコードを追加してください:
elif cfg.type == "orbbec":
from .orbbec.camera_orbbec import OrbbecCamera

cameras[key] = OrbbecCamera(cfg)
  • ~/lerobot/src/lerobot/camerasディレクトリで__init__.pyを見つけ、18行目に以下のコードを追加してください:
from .orbbec.configuration_orbbec import OrbbecCameraConfig
  • 🚀 ステップ2:関数呼び出しと例

以下のすべての例では、so101_followerを実際に使用しているロボットアームのモデル(例:so100 / so101)に置き換えてください。

focus_areaハイパーパラメータを追加しました。遠すぎる深度データはロボットアームにとって意味がない(到達や把握ができない物体)ため、focus_area未満または超過の深度データは黒で表示されます。デフォルトのfocus_areaは(20, 600)です。
現在サポートされている解像度は幅:640、高さ:880のみです。

lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm \
--display_data=true

データ収集、トレーニング、評価などの後続タスクについては、通常のRGBコマンドと同じプロセスです。通常のRGBコマンドの関連部分を以下に置き換えるだけです:

  --robot.cameras="{ up: {type: orbbec, width: 640, height: 880, fps: 30, focus_area:[60,300]}}" \

その後、追加の単眼RGBカメラを追加することもできます。

tip

SO100とSO101のコードは互換性があります。SO100のユーザーは、SO101のパラメータとコードを直接利用して操作できます。

カメラをインスタンス化するには、カメラ識別子が必要です。この識別子は、コンピュータを再起動したり、カメラを再接続したりすると変更される可能性があり、この動作は主にオペレーティングシステムに依存します。

システムに接続されているカメラのカメラインデックスを見つけるには、以下のスクリプトを実行してください:

lerobot-find-cameras opencv # or realsense for Intel Realsense cameras

ターミナルに以下の情報が出力されます。

--- Detected Cameras ---
Camera #0:
Name: OpenCV Camera @ 0
Type: OpenCV
Id: 0
Backend api: AVFOUNDATION
Default stream profile:
Format: 16.0
Width: 1920
Height: 1080
Fps: 15.0
--------------------
(more cameras ...)

各カメラで撮影された写真はoutputs/captured_imagesディレクトリで確認できます。

warning

macOSでIntel RealSenseカメラを使用する際、このエラーが発生する可能性があります:Error finding RealSense cameras: failed to set power state。これはsudo権限で同じコマンドを実行することで解決できます。macOSでRealSenseカメラを使用することは不安定であることに注意してください。

その後、以下のコードを実行することで、テレオペレーション中にコンピュータでカメラを表示できるようになります。これは最初のデータセットを記録する前にセットアップを準備するのに役立ちます。

lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm \
--display_data=true

より多くのカメラがある場合は、--robot.camerasを変更してカメラを追加できます。index_or_pathの形式に注意してください。これはpython -m lerobot.find_cameras opencvで出力されるカメラIDの最後の桁によって決まります。

tip

fourcc: "MJPG"形式の画像は圧縮されています。より高い解像度を試すことができ、YUYV形式も試すことができます。ただし、後者は画像解像度とFPSを低下させ、ロボットアームの動作にラグを生じさせます。現在、MJPG形式では、1920*1080の解像度で3台のカメラをサポートしながら30FPSを維持できます。とはいえ、同じUSB HUBを介して2台のカメラをコンピュータに接続することは推奨されません。

例えば、サイドカメラを追加したい場合:

lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm \
--display_data=true
tip

fourcc: "MJPG"形式の画像は圧縮されています。より高い解像度を試すことができ、YUYV形式も試すことができます。ただし、後者は画像解像度とFPSを低下させ、ロボットアームの動作にラグを生じさせます。現在、MJPG形式では、1920*1080の解像度で3台のカメラをサポートしながら30FPSを維持できます。とはいえ、同じUSB HUBを介して2台のカメラをコンピュータに接続することは推奨されません。

tip

このようなバグが見つかった場合。

rerunバージョンをダウングレードして問題を解決できます。

pip3 install rerun-sdk==0.23

データセットの記録

  • データセットをローカルに保存したい場合は、直接実行できます:
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm \
--display_data=true \
--dataset.repo_id=seeedstudio123/test \
--dataset.num_episodes=5 \
--dataset.single_task="Grab the black cube" \
--dataset.push_to_hub=false \
--dataset.episode_time_s=30 \
--dataset.reset_time_s=30

その中で、repo_id は慣例的に変更でき、push_to_hub=false です。最終的に、データセットはホームフォルダの ~/.cache/huggingface/lerobot ディレクトリに保存され、前述の seeedstudio123/test フォルダが作成されます。

  • データセットをアップロードするために Hugging Face hub 機能を使用したい場合で、以前に行ったことがない場合は、Hugging Face settings から生成できる書き込みアクセストークンを使用してログインしていることを確認してください:
huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential

これらのコマンドを実行するために、Hugging Face リポジトリ名を変数に保存します:

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

5つのエピソードを記録し、データセットをハブにアップロードします:

lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm \
--display_data=true \
--dataset.repo_id=${HF_USER}/record-test \
--dataset.num_episodes=5 \
--dataset.single_task="Grab the black cube" \
--dataset.push_to_hub=true \
--dataset.episode_time_s=30 \
--dataset.reset_time_s=30

次のような多くの行が表示されます:

INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5hz) dtWfoll: 0.25 (3963.7hz) dtRfoll: 6.22 (160.7hz) dtRlaptop: 32.57 (30.7hz) dtRphone: 33.84 (29.5hz)

記録機能

record 機能は、ロボット動作中のデータキャプチャと管理のためのツール群を提供します。

1. データストレージ

  • データは LeRobotDataset 形式を使用して保存され、記録中にディスクに保存されます。
  • デフォルトでは、データセットは記録後に Hugging Face ページにプッシュされます。
  • アップロードを無効にするには、--dataset.push_to_hub=False を使用します

2. チェックポイントと再開

  • チェックポイントは記録中に自動的に作成されます。
  • 中断後に再開するには、--resume=true を付けて同じコマンドを再実行します

⚠️ 重要な注意:再開時は、--dataset.num_episodes を記録する追加エピソード数に設定してください(データセット内の目標総エピソード数ではありません)。

  • 最初から記録を開始するには、データセットディレクトリを手動で削除してください。

3. 記録パラメータ

コマンドライン引数を使用してデータ記録のフローを設定します:

パラメータ説明デフォルト
--dataset.episode_time_sデータエピソードあたりの持続時間(秒)60
--dataset.reset_time_s各エピソード後の環境リセット時間(秒)60
--dataset.num_episodes記録する総エピソード数50

4. 記録中のキーボード制御

キーボードショートカットを使用してデータ記録フローを制御します:

キーアクション
→ (右矢印)現在のエピソード/リセットを早期停止し、次に移動。
← (左矢印)現在のエピソードをキャンセルし、再記録。
ESCセッションを即座に停止し、動画をエンコードし、データセットをアップロード。
tip

キーボードが動作しない場合は、pynput の別のバージョンをインストールする必要があるかもしれません。

pip install pynput==1.6.8

データ収集のヒント

  • タスクの提案:異なる場所でオブジェクトを掴み、ビンに配置する。
  • スケール:≥50エピソードを記録(場所あたり10エピソード)。
  • 一貫性:
    • カメラを固定に保つ。
    • 同一の掴み動作を維持する。
    • 操作されるオブジェクトがカメラフィードで見えることを確認する。
  • 進行:
    • バリエーション(新しい場所、技術、カメラ調整)を追加する前に、信頼性のある掴みから始める。
    • 失敗を防ぐために急激な複雑さの増加を避ける。

💡 経験則:カメラ画像だけを見て自分でタスクを実行できるようにする必要があります。

この重要なトピックについてより深く掘り下げたい場合は、良いデータセットとは何かについて書いたブログ投稿をチェックできます。

トラブルシューティング

Linux固有の問題: 記録中に右矢印/左矢印/ESCキーが応答しない場合:

  • $DISPLAY 環境変数が設定されていることを確認してください(pynput limitations を参照)。

データセットの可視化

tip

SO100 と SO101 のコードは互換性があります。SO100 のユーザーは SO101 のパラメータとコードを直接利用して操作できます。

--control.push_to_hub=true でデータセットをハブにアップロードした場合、以下で与えられるリポジトリIDをコピー&ペーストしてデータセットをオンラインで可視化できます:

echo ${HF_USER}/so101_test  

--dataset.push_to_hub=false でアップロードしなかった場合も、以下でローカルで可視化できます:

lerobot-dataset-viz \
--repo-id ${HF_USER}/so101_test \

--dataset.push_to_hub=false でアップロードした場合も、以下でローカルで可視化できます:

lerobot-dataset-viz \
--repo-id seeed_123/so101_test \

ここで、seeed_123 はデータ収集時に定義されたカスタム repo_id 名です。

エピソードの再生

tip

SO100 と SO101 のコードは互換性があります。SO100 のユーザーは SO101 のパラメータとコードを直接利用して操作できます。

便利な機能として replay 機能があり、記録したエピソードや外部のデータセットからのエピソードを再生できます。この機能は、ロボットの動作の再現性をテストし、同じモデルのロボット間での転移可能性を評価するのに役立ちます。

以下のコマンドまたは API の例を使用して、ロボットで最初のエピソードを再生できます:

lerobot-replay \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm \
--dataset.repo_id=${HF_USER}/record-test \
--dataset.episode=0

ロボットは記録した動作と似た動きを再現するはずです。

ポリシーの訓練

tip

SO100 と SO101 のコードは互換性があります。SO100 のユーザーは SO101 のパラメータとコードを直接利用して操作できます。

ロボットを制御するポリシーを訓練するには、lerobot-train スクリプトを使用します。いくつかの引数が必要です。以下はコマンドの例です:

lerobot-train \
--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=false \
--steps=300000

ローカルデータセットで訓練したい場合は、repo_id がデータ収集時に使用したものと一致することを確認し、--policy.push_to_hub=False を追加してください。

lerobot-train \
--dataset.repo_id=seeedstudio123/test \
--policy.type=act \
--output_dir=outputs/train/act_so101_test \
--job_name=act_so101_test \
--policy.device=cuda \
--wandb.enable=false \
--policy.push_to_hub=false\
--steps=300000

説明しましょう:

  • データセット指定:パラメータ --dataset.repo_id=${HF_USER}/so101_test を通じてデータセットを提供します。
  • 訓練ステップ--steps=300000 を使用して訓練ステップ数を変更します。アルゴリズムはデフォルトで800000ステップですが、タスクの難易度と訓練中の損失を観察することで調整できます。
  • ポリシータイプpolicy.type=act でポリシーを提供します。同様に、[act, diffusion, pi0, pi0fast, pi0fast, sac, smolvla] などのポリシー間で切り替えることができ、これは configuration_act.py から設定を読み込みます。重要なことに、このポリシーは、この情報がすでにデータセットに保存されているため、ロボット(例:laptopphone)のモーター状態、モーターアクション、カメラ数に自動的に適応します。
  • デバイス選択:Nvidia GPU で訓練しているため policy.device=cuda を提供しますが、Apple Silicon で訓練する場合は policy.device=mps を使用できます。
  • 可視化ツールWeights and Biases を使用して訓練チャートを可視化するために wandb.enable=true を提供します。これはオプションですが、使用する場合は wandb login を実行してログインしていることを確認してください。

以下のエラーが発生した場合:

以下のコマンドを実行して解決してみてください:

pip install datasets==2.19

訓練には数時間かかります。outputs/train/act_so100_test/checkpoints にチェックポイントが見つかります。

チェックポイントからトレーニングを再開するには、以下は act_so101_test ポリシーの last チェックポイントから再開するコマンドの例です:

lerobot-train \
--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

その他のアルゴリズム

SmolVLA

SmolVLA は、ロボティクス向けの Hugging Face の軽量基盤モデルです。LeRobot データセットでの簡単なファインチューニング用に設計されており、開発を加速するのに役立ちます!

環境のセットアップ

以下を実行して SmolVLA の依存関係をインストールします:

pip install -e ".[smolvla]"

データで SmolVLA をファインチューニング

事前トレーニング済みの 450M モデルである smolvla_base を使用し、データでファインチューニングします。20k ステップでモデルをトレーニングすると、単一の A100 GPU で約 4 時間かかります。パフォーマンスとユースケースに基づいてステップ数を調整する必要があります。

GPU デバイスがない場合は、Google Colab のノートブックを使用してトレーニングできます。

--dataset.repo_id を使用してトレーニングスクリプトにデータセットを渡します。インストールをテストしたい場合は、SmolVLA Paper 用に収集したデータセットの 1 つを使用する以下のコマンドを実行してください。

lerobot-train \
--policy.path=lerobot/smolvla_base \
--dataset.repo_id=${HF_USER}/mydataset \
--batch_size=64 \
--steps=20000 \
--output_dir=outputs/train/my_smolvla \
--job_name=my_smolvla_training \
--policy.device=cuda \
--wandb.enable=true
tip

小さなバッチサイズから始めて、GPU が許可し、読み込み時間が短いままである限り、段階的に増やすことができます。

ファインチューニングは芸術です。ファインチューニングのオプションの完全な概要については、以下を実行してください:

lerobot-train --help

ファインチューニングされたモデルの評価とリアルタイム実行

エピソードを記録する場合と同様に、HuggingFace Hub にログインすることをお勧めします。対応する手順に従うことができます:データセットの記録。ログインしたら、以下を実行してセットアップで推論を実行できます:

lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \ # <- Use your port
--robot.id=my_blue_follower_arm \ # <- Use your robot id
--robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \ # <- Use your cameras
--dataset.single_task="Grasp a lego block and put it in the bin." \ # <- Use the same task description you used in your dataset recording
--dataset.repo_id=${HF_USER}/eval_DATASET_NAME_test \ # <- This will be the dataset name on HF Hub
--dataset.episode_time_s=50 \
--dataset.num_episodes=10 \
# <- Teleop optional if you want to teleoperate in between episodes \
# --teleop.type=so100_leader \
# --teleop.port=/dev/ttyACM0 \
# --teleop.id=my_red_leader_arm \
--policy.path=HF_USER/FINETUNE_MODEL_NAME # <- Use your fine-tuned model

評価セットアップに応じて、評価スイート用に記録する期間とエピソード数を設定できます。

LIBERO

LIBERO は、生涯ロボット学習を研究するために設計されたベンチマークです。ロボットは工場で一度だけ事前トレーニングされるのではなく、時間をかけて人間のユーザーと一緒に学習し適応し続ける必要があるという考えです。この継続的な適応は意思決定における生涯学習(LLDM)と呼ばれ、真にパーソナライズされたヘルパーとなるロボットの構築に向けた重要なステップです。

LIBERO での評価

LeRobot では、LIBERO をフレームワークに移植し、主に軽量 Vision-Language-Action モデルである SmolVLA評価に使用しました。

LIBERO は現在、マルチ評価対応シミュレーションの一部であり、フラグ 1 つで単一のタスクスイートまたは複数のスイートを同時にポリシーをベンチマークできることを意味します。

LIBERO をインストールするには、LeRobot の公式手順に従った後、pip install -e ".[libero]" を実行するだけです。

単一スイート評価

1 つの LIBERO スイートでポリシーを評価:

lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero \
--env.task=libero_object \
--eval.batch_size=2 \
--eval.n_episodes=3
  • --env.task はスイート(libero_objectlibero_spatial など)を選択します。
  • --eval.batch_size は並列実行する環境数を制御します。
  • --eval.n_episodes は実行する総エピソード数を設定します。

マルチスイート評価

複数のスイートで同時にポリシーをベンチマーク:

lerobot-eval \
--policy.path="your-policy-id" \
--env.type=libero \
--env.task=libero_object,libero_spatial \
--eval.batch_size=1 \
--eval.n_episodes=2
  • マルチスイート評価には --env.task にカンマ区切りのリストを渡します。

トレーニングコマンドの例

lerobot-train \
--policy.type=smolvla \
--policy.repo_id=${HF_USER}/libero-test \
--dataset.repo_id=HuggingFaceVLA/libero \
--env.type=libero \
--env.task=libero_10 \
--output_dir=./outputs/ \
--steps=100000 \
--batch_size=4 \
--eval.batch_size=1 \
--eval.n_episodes=1 \
--eval_freq=1000 \

レンダリングに関する注意

LeRobot はシミュレーションに MuJoCo を使用します。トレーニングまたは評価の前にレンダリングバックエンドを設定する必要があります:

  • export MUJOCO_GL=egl → ヘッドレスサーバー用(例:HPC、クラウド)

ポリシーの評価

tip

SO100 と SO101 のコードは互換性があります。SO100 のユーザーは、SO101 のパラメータとコードを直接利用して操作できます。

lerobot/record.pyrecord 関数を使用できますが、ポリシーチェックポイントを入力として使用します。例えば、10 個の評価エピソードを記録するには、このコマンドを実行します:

lerobot-record \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: intelrealsense, serial_number_or_name: 233522074606, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
--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

例えば:

lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
--robot.id=my_awesome_follower_arm \
--display_data=false \
--dataset.repo_id=seeed/eval_test123 \
--dataset.single_task="Put lego brick into the transparent box" \
--policy.path=outputs/train/act_so101_test/checkpoints/last/pretrained_model
  1. --policy.path パラメータは、ポリシートレーニング結果の重みファイルへのパス(例:outputs/train/act_so101_test/checkpoints/last/pretrained_model)を示します。モデルトレーニング結果の重みファイルを Hub にアップロードした場合は、モデルリポジトリ(例:${HF_USER}/act_so100_test)も使用できます。

  2. データセット名 dataset.repo_ideval_ で始まります。この操作により、評価中にビデオとデータが個別に記録され、eval_ で始まるフォルダ(例:seeed/eval_test123)に保存されます。

  3. 評価フェーズで File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx' が発生した場合は、まず eval_ で始まるフォルダを削除してから、プログラムを再実行してください。

  4. mean is infinity. You should either initialize with stats as an argument or use a pretrained model が発生した場合は、--robot.cameras パラメータの front や side などのキーワードが、データセット収集時に使用されたものと厳密に一致している必要があることに注意してください。

FAQ

  • このドキュメント/チュートリアルに従っている場合は、推奨される GitHub リポジトリ https://github.com/Seeed-Projects/lerobot.git を git clone してください。このドキュメントで推奨されるリポジトリは検証済みの安定版です。公式の Lerobot リポジトリは最新版に継続的に更新されており、異なるデータセットバージョン、異なるコマンドなどの予期しない問題を引き起こす可能性があります。

  • サーボ ID の校正時に以下のエラーが発生した場合:

    `Motor ‘gripper’ was not found, Make sure it is connected`

    通信ケーブルがサーボに適切に接続されているか、電源が正しい電圧を供給しているかを注意深く確認してください。

  • 以下が発生した場合:

    Could not connect on port "/dev/ttyACM0"

    ls /dev/ttyACM* を実行して ACM0 が存在する場合、シリアルポートの権限を付与し忘れています。ターミナルで sudo chmod 666 /dev/ttyACM* を入力して修正してください。

  • 以下のエラーが発生した場合:

    No valid stream found in input file. Is -1 of the desired media type?

    conda install ffmpeg=7.1.1 -c conda-forge を使用して ffmpeg 7.1.1 をインストールしてください。

  • 以下のエラーが発生した場合:

    ConnectionError: Failed to sync read 'Present_Position' on ids=[1,2,3,4,5,6] after 1 tries. [TxRxResult] There is no status packet!

    対応するポートのロボットアームが電源オンになっているか、バスサーボのデータケーブルが緩んでいたり切断されていないかを確認する必要があります。サーボのライトが点灯していない場合、前のサーボのケーブルが緩んでいることを意味します。

  • ロボットアームのキャリブレーション時に以下のエラーが発生した場合:

    Magnitude 30841 exceeds 2047 (max for sign_bit_index=11)

    ロボットアームの電源を切って再起動し、再度キャリブレーションを試してください。この方法は、キャリブレーション中にMAX角度が数万の値に達した場合にも使用できます。これで解決しない場合は、中央値キャリブレーションやID書き込みを含む、対応するサーボの再キャリブレーションが必要です。

  • 評価フェーズで以下のエラーが発生した場合:

    File exists: 'home/xxxx/.cache/huggingface/lerobot/xxxxx/seeed/eval_xxxx'

    まず eval_ で始まるフォルダを削除してから、プログラムを再実行してください。

  • 評価フェーズで以下のエラーが発生した場合:

    `mean` is infinity. You should either initialize with `stats` as an argument or use a pretrained model

    --robot.cameras パラメータの "front" や "side" などのキーワードは、データセット収集時に使用したものと厳密に一致している必要があることに注意してください。

  • ロボットアームの部品を修理または交換した場合は、~/.cache/huggingface/lerobot/calibration/robots または ~/.cache/huggingface/lerobot/calibration/teleoperators 下のファイルを完全に削除し、ロボットアームを再キャリブレーションしてください。そうしないと、これらのディレクトリのJSONファイルにキャリブレーション情報が保存されているため、エラーメッセージが表示される可能性があります。

  • 50セットのデータでACTをトレーニングするには、RTX 3060(8GB)搭載のラップトップで約6時間、RTX 4090またはA100 GPUを搭載したコンピュータで約2-3時間かかります。

  • データ収集中は、カメラの位置、角度、周囲の照明を安定させてください。カメラに映る不安定な背景や歩行者の量を減らしてください。デプロイメント環境の変化が激しすぎると、ロボットアームが適切に把握できなくなる可能性があります。

  • データ収集コマンドでは、num-episodes パラメータが十分なデータを収集するように設定されていることを確認してください。途中で手動で一時停止しないでください。データの平均と分散はデータ収集完了後にのみ計算され、これらはトレーニングに必要です。

  • プログラムがUSBカメラから画像データを読み取れないと表示される場合は、USBカメラがハブ経由で接続されていないことを確認してください。USBカメラは高速な画像転送速度を確保するため、デバイスに直接接続する必要があります。

  • AttributeError: module 'rerun' has no attribute 'scalar'. Did you mean: 'scalars'? のようなバグが見つかった場合は、rerunのバージョンをダウングレードして問題を解決できます。

pip3 install rerun-sdk==0.23
tip

ソフトウェアの問題や環境依存の問題で解決できない場合は、このチュートリアルの最後のFAQセクションを確認することに加えて、LeRobotプラットフォームまたはLeRobot Discordチャンネルに速やかに問題を報告してください。

引用

中文文档

TheRobotStudio Project: SO-ARM10x

Huggingface Project: Lerobot

Dnsty: Jetson Containers

Jetson AI Lab

Diffusion Policy

ACT or ALOHA

TDMPC

VQ-BeT

技術サポート & 製品ディスカッション

弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。

Loading Comments...