05 · リーダーアームのデジタルツイン(実体アームがシミュレーションアームを駆動)
手で実体のリーダーアームを動かすと、MuJoCo ウィンドウ内のシミュレーションのフォロワーアームがリアルタイムでミラーリングして追従します——デジタルツインデモ、 シミュレーションデータ収集の正しい起動方法です。
前提
リーダーアームがキャリブレーション済みであること(03 参照)。サンプルポートは COM124(本機の現役リーダーアームの実測値。 抜き差しのたびに番号が変わる可能性があるため、03 章で確認したものに置き換えてください)。
コマンド
export UV_CACHE_DIR='C:\Users\admin\AppData\Local\Temp\uv-cache'
uv run --frozen --with mujoco python examples/so101_mujoco/teleoperate.py \
--robot.type=so101_mujoco \
--teleop.type=so101_leader_trim --teleop.port=COM124 --teleop.id=juxi_leader \
--teleop.use_degrees=false--robot.type=so101_mujoco:制御対象はシミュレーションアームで、ウィンドウが自動で開きます;--teleop.*:操作デバイスは実体のリーダーアーム(純粋な読み取りのみ、トルクは一切かけず、リーダーアームへのリスクはゼロ);--teleop.use_degrees=false:必ず追加。リーダーアームが出力する単位(ストローク比率制)をシミュレーションアームと一致させます。
--robot.type を so101_follower --robot.port=COM172 --robot.id=juxi_so101 --robot.max_relative_target=5 に変えれば 「実体リーダーアーム → 実機フォロワーアーム」という通常のキットの遊び方になります。同じリーダーアームのキャリブレーションがそのまま使えます。
ゼロ点がずれている場合:自動センタリング微調整(so101_leader_trim)
現象:リーダーアームを「目視の中位」に合わせても、シミュレーションアームは数度ずれます。
原理:lerobot の正規化ゼロ点 = キャリブレーション時のスイープ記録範囲の中点 (min+max)/2;一方、キャリブレーションで Enter したときの 「中位姿勢」は生値 2048 として記録されます。ある関節の機械的ストローク自体が非対称だと、2 つの「中点」は常に一定量ずれます (実測 1 号サーボ:記録範囲 776–3457、中点 2116、2048 との差 68 カウント ≈ 5.6°)。 この偏差は再キャリブレーションでは消せません(ストロークの非対称は機械構造で決まるため)、ソフトウェアで補償する必要があります。
解決策:so101_leader_trim プラグインがキャリブレーションファイルから公式に従って各関節の補償を自動計算し、リアルタイムで差し引きます。 再キャリブレーション後も自動的に追従し、手動でのパラメータ調整は不要です:
补偿ᵢ = (2048 − minᵢ) / (maxᵢ − minᵢ) × 200 − 100本機で実測した有効値(起動ログに出力されます):
| 関節 | 補償(単位) |
|---|---|
| shoulder_pan | −5.11 |
| shoulder_lift | −0.92 |
| elbow_flex | +2.54 |
| wrist_flex | +0.69 |
残りの関節は偏差 <0.05 で補償不要;グリッパ(0 から 100)と角度制モードは微調整の対象外です。
開発者向け注記:このプラグインの
nameは"so_leader"のまま維持する必要があります——nameはキャリブレーションファイルの検索ディレクトリキーであり、 カスタムの型名にするとキャリブレーションファイルが見つからず、誤って再キャリブレーションフローが発動します。

