10. リーダー・フォロワーのキャリブレーションとテレオペレーション
lerobot-calibrate で SO-ARM のリーダーとフォロワーをキャリブレーションし、関節マッピングとキャリブレーションファイルの保存場所を理解して、最初のマスター・スレーブテレオペレーションを実行します。
アーム作業領域 1 メートル以内の貴重品と無関係な人を片付けてください。本章の実行前に、アームが確実に固定され、電源とケーブルが正しく接続されていることを確認します。
10.1 アーム全体のキャリブレーションが重要な理由
10.1 アーム全体のキャリブレーションが重要な理由
第 6 章で ID とボーレートを書き込み、第 7 章でニュートラルを確認しました。アーム全体のキャリブレーションは最後のステップです:関節ごとに、サーボの生の位置読み取り値と物理角度のマッピングを学習し、リーダーとフォロワーが物理的に一致する姿勢で同じ値を報告するようにします。
このキャリブレーションには、より深い理由があります:ある SO-ARM で訓練したニューラルネットが、別の SO-ARM でも動くようになること。 すべてのキャリブレーション済み SO-ARM が「ゼロ度」と「可動範囲の中間」の定義で一致するため、あなたのフォロワーで録ったデータセットは、私のフォロワーでも有効です。
電源ルールの再掲:SO101 スタンダード版はすべて 5V 電源。SO101 Pro 版では、リーダーのキャリブレーション・運転は毎ステップ 5V 電源で、フォロワーは 12V 電源で行ってください。
10.2 フォロワーアームのキャリブレーション
10.2 フォロワーアームのキャリブレーション
6 つのサーボを 3 ピンケーブルと制御ボードで接続し、シリアル権限を付与して実行:
sudo chmod 666 /dev/ttyACM*
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_awesome_follower_arm # <- ロボットに一意な名前を付ける
手順(下の動画参照):
- 中間姿勢:全関節が可動範囲の中間に来る位置(ほぼ「まっすぐ上」)にアームを動かし、Enter を押します;
- 全可動範囲:指示に従い、各関節を順に全可動域で動かします。ツールが最小値/最大値をサンプリングします。
LeRobot リポジトリの更新により、リーダーアームのキャリブレーション中に 5 番サーボからの信号が端末に届かないことがありますが、正常でありそのまま続行できます。
10.3 リーダーアームのキャリブレーション
10.3 リーダーアームのキャリブレーション
同じ 2 ステップ(中間姿勢 → 関節ごとの全可動域)。teleoperator のキーを使います:
lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_awesome_leader_arm # <- リーダーに一意な名前を付ける
Could not connect on port '/dev/ttyACM0'. Make sure you are using the correct port. Try running lerobot-find-port と出たら、sudo chmod 666 /dev/ttyACM* で再度権限を付与してください。
キャリブレーションファイルの保存先(やり直し方)
キャリブレーションファイルは JSON で ~/.cache/huggingface/lerobot/calibration/robots/ と ~/.cache/huggingface/lerobot/calibration/teleoperators/ に保存されます。やり直すには:
- 方法 1 —— ファイルを削除してクリーンな状態から:
rm -rf ~/.cache/huggingface/lerobot/calibration/robots
rm -rf ~/.cache/huggingface/lerobot/calibration/teleoperators
- 方法 2 —— プロンプトに答える。 キャリブレーション済みのアームで再実行すると:
Press ENTER to use provided calibration file associated with the id my_awesome_leader_arm, or type 'c' and press ENTER to run calibration:
c + Enter で再キャリブレーション、Enter のみで既存データをそのまま使用します。
キャリブレーションが失敗する場合:Magnitude ... exceeds 2047
キャリブレーションやテレオペレーションで Magnitude 30841 exceeds 2047 (max for sign_bit_index=11) と出たら、サーボのゼロオフセットが異常です。まず電源を切りアームを再起動してもう一度。解消しなければ、先に中間位置キャリブレーションを行います — 第 7 章のツール、または Seeed_RoboController のスクリプト:
git clone https://github.com/Seeed-Projects/Seeed_RoboController.git
cd Seeed_RoboController
pip install -r requirements.txt
python -m src.tools.servo_disable # (任意)トルクを無効化し手で関節を動かしやすく
python -m src.tools.servo_middle_calibration # 現在位置を 2048 として書き込み
python -m src.tools.servo_center_test # 2048 へ動かして検証
その後 lerobot-calibrate に戻り、アーム全体のキャリブレーションをやり直します。
10.4 関節マッピング:方向・可動域・グリッパ
10.4 関節マッピング:方向・可動域・グリッパ
キャリブレーション後、手動で確認します:
- 方向:リーダー関節 1 を時計回りに回すと、フォロワー関節 1 も時計回りに動く必要があります。逆方向に動く関節があれば、キャリブレーション時の姿勢が鏡像だった可能性 — その関節をやり直してください;
- 可動域:リーダーの各関節を両端のリミットまで動かすと、フォロワーも対応するリミットに到達し、プリント部品に押し付けられないことを確認;
- グリッパ:リーダーのグリッパハンドルを完全に閉じると — フォロワーのグリッパも完全に閉じる。全開は全開に対応。
第 9 章のルール再掲:ここで選んだ --robot.id / --teleop.id はキャリブレーションファイルに紐づきます。以後のテレオペレーション・録画・評価ではまったく同じ id を使ってください。
10.5 マスター・スレーブテレオペレーションの開始
10.5 マスター・スレーブテレオペレーションの開始
いよいよ 2 本のアームが 1 つのシステムになる瞬間です。ポート権限を付与して開始:
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
teleoperate コマンドは自動で:
- 不足しているキャリブレーションを検出し、キャリブレーション手順を開始;
- ロボットとテレオペレータを接続し、テレオペレーションを開始します。
テレオペレーション安全ガイド
- 最初にトルクが有効になるときはフォロワーを手で支える — キャリブレーション姿勢へ素早く移動します;
- リーダーはゆっくり動かす。フォロワーは全力トルクで追従します;
- フォロワーのグリッパと挟み点に指を入れない;
- フォロワーが遅れる・震える・関節が応答しない場合:停止し、電源を切り、そのサーボのバスケーブルを確認(サーボの LED が消えていれば手前のケーブルが緩んでいます)。
10.6 制御周波数とレイテンシ
10.6 制御周波数とレイテンシ
レイテンシはどこから来る?なぜ避けられない?
すべての制御サイクルでリーダーを読み、フォロワーに目標を送り、(後で)カメラも読みます。特に USB カメラは自分のペースでフレームを出します。ループは高速 — 数十ミリ秒 — ですがゼロではないため、速いリーダー動作はフォロワー上でわずかに滑らかに見えます。正常です。
制御周波数とは?設定できる?
LeRobot は設定された fps でループを回します(SO-ARM ワークフローのデフォルトは 30。後のデータセットの --dataset.fps はこれに一致させる必要があります)。テレオペレーションがカクつく場合:
- USB ハブを避け、アームとカメラを PC に直結;
- 他のプロセスがシリアルポートを掴んでいないか確認;
lerobot-find-portでバスを共有する機器がないか確認。
10.7 ハンズオン演習
10.7 ハンズオン演習
- リーダーとフォロワーをキャリブレーションし、
~/.cache/huggingface/lerobot/calibration/の 2 つの JSON ファイルを確認; - 5 分間テレオペレーション:グリッパでマウスパッドの四隅に触れ、小さな物体を拾う;
- 意図的に失敗を体験:誤った
--robot.idで teleoperate を実行し、エラーを読む — 一度読めば忘れません; cプロンプトで再キャリブレーションを練習。
制御チェーンの検証が済んだら、次章で最初のポリシーが学ぶデータを設計します。