メインコンテンツまでスキップ

SO-ARM と AmazingHand のための完全トレーニングガイド

このドキュメントでは、SO-ARM101 フォロワーアームと AmazingHand 多指ハンドを組み合わせ、LeRobot を用いてテレオペレーションを行う方法を説明します。

1. ハードウェア接続

  1. SOARM から AmazingHand へのアダプタ用 STL ファイルは、以下から入手できます:

lerobot/soarm_amazinghand_link_step_stl/step at soarm_amazinghand · xiehuangbao888/lerobot

  1. 元の SOARM グリッパを取り外します。
  1. SOARM から AmazingHand へのアダプタをアームに取り付けます。
  1. AmazingHand 多指ハンドを取り付けます。
  1. デバイスを次のように配線します:
デバイスシリアルポート説明
SO-101 フォロワーアーム(グリッパサーボ #6 を取り外し)/dev/ttyACM0関節サーボ 1~5 のみを使用
SO-101 リーダーアーム(グリッパサーボ #6 を使用)/dev/ttyACM1グリッパの開閉を入力信号として使用
AmazingHand 多指ハンド/dev/ttyACM2ID 1~8 の 8 個のサーボ

シリアルポート名が異なる場合は、以下のコマンド中のポート名を実際のものに置き換えてください。


ロボットは次のように動作します:

  • /dev/ttyACM0 を介してフォロワーアームの 5 つの関節(サーボ 1~5)を制御します。
  • /dev/ttyACM2 を介して AmazingHand 多指ハンドを制御します。
  • リーダーアームの gripper.pos を、多指ハンドの開閉角度に 比例的に マッピングします(0 = 全開、100 = 全閉)。

キャリブレーションファイルは自動的に次の場所に保存されます:

~/.cache/huggingface/lerobot/calibration/robots/so101_amazing_hand/<robot.id>.json
~/.cache/huggingface/lerobot/calibration/teleoperators/so101_leader/<teleop.id>.json

2. 環境と接続

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

既存の lerobot 仮想環境に切り替えます。

まず、デバイスの権限を付与します:

sudo chmod 666 /dev/ttyACM*

ステップ 1: リーダーアームのキャリブレーション

cd ~/lerobot
conda activate lerobot
python -m lerobot.scripts.lerobot_calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader

プロンプトに従って操作します:

  1. リーダーアームのすべての関節を中間位置に置き、Enter キーを押します。
  2. 各関節を順番に最大および最小範囲まで動かし、最後に Enter キーを押して終了します。

ステップ 2: フォロワーアームのキャリブレーション

python -m lerobot.scripts.lerobot_calibrate \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2

プロンプトに従って操作します:

  1. フォロワーアームの 5 つの関節を中間位置に置き、Enter キーを押します。
  2. 5 つの関節を順番に最大および最小範囲まで動かし、最後に Enter キーを押して終了します。

注: フォロワーアームには 5 つの関節しかなく、グリッパサーボ #6 は取り外されています。

ステップ 3: テレオペレーションの実行

python -m lerobot.scripts.lerobot_teleoperate \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader \
--display_data=true

把持動作はカスタマイズ可能です。関連するファイルは次の場所にあります:

src/lerobot/robots/so_amazing_hand/config_so_amazing_hand.py

3. 多指ハンドでデータセットを収集する

python -m lerobot.scripts.lerobot_record \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--robot.cameras='{
wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30},
top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}
}' \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=amazing_hand_leader \
--display_data=true \
--dataset.repo_id=seeed/amazing_soarm \
--dataset.num_episodes=20 \
--dataset.single_task="Pick up the cube with the dexterous hand"

パラメータの説明:

パラメータ説明
--robot.camerasカメラ設定。opencvrealsense などをサポートします。index_or_path はカメラのインデックスまたはビデオストリームのパスです。
--dataset.repo_idHugging Face 上のデータセット ID。形式は {username}/{dataset_name} です。
--dataset.num_episodes記録するエピソード数。
--dataset.single_taskデータセットのメタデータに書き込まれるタスクの説明。
--robot.hand_use_proportional_control既定値は true で、明示的に設定する必要はありません。false にすると開閉の 2 値動作になります。

4. ポリシーの学習

lerobot-train \
--dataset.repo_id=seeed/amazing_soarm \
--policy.type=act \
--output_dir=outputs/train/amazing_soarm \
--job_name=amazing_soarm \
--policy.device=cuda \
--wandb.enable=false \
--policy.push_to_hub=false \
--steps=60000 \

5. 評価とデプロイ

学習済みポリシーを実機ロボットで評価する

python -m lerobot.scripts.lerobot_record \
--robot.type=so101_amazing_hand \
--robot.port=/dev/ttyACM0 \
--robot.id=amazing_hand_follower \
--robot.hand_port=/dev/ttyACM2 \
--robot.cameras='{
wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30},
top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}
}' \
--policy.path=outputs/train/amazing_soarm/checkpoints/last/pretrained_model \
--dataset.repo_id=seeed_val/amazinghand_pick_cube_eval \
--dataset.num_episodes=10 \
--dataset.single_task="Pick up the cube with the dexterous hand" \
--display_data=true
Loading Comments...