11. リーダーとフォロワーのキャリブレーションと遠隔操作
Seeed Physical AI 初級コース第11章 — 環境構築、フォロワーアームとリーダーアームのキャリブレーション、 関節マッピング、遠隔操作の安全性、マスタースレーブ遠隔操作の開始、制御周波数とレイテンシ、 そしてハンズオン演習を行います。
11.1 アームの開封、配線、取り付け
11.1 アームの開封、配線、取り付け
- reBot DM
- reBot RS
11.2 環境構築
11.2 環境構築
ステージ2ですでに仮想環境を作成していることを前提として、次に行うのはリポジトリをクローンし、作成済みのconda環境に環境をインストールすることだけです。仮想マシンやWSLは使用しないでください。Ubuntu 22.04 を直接インストールするのが最適です。
以降のすべての手順は、仮想環境および lerobot 環境内で実行する必要があることを忘れないでください。
ステップ 1: Seeed LeRobot リポジトリをクローンする
mkdir ~/rebot_lerobot
cd ~/rebot_lerobot
git clone https://github.com/Seeed-Projects/lerobot.git
ステップ 2: 仮想環境に入って、LeRobot と reBot プラグインをインストールする
conda create -y -n rebot_arm python=3.12
pip install -e ./lerobot
pip install lerobot-teleoperator-rebot-arm-102
pip install lerobot-robot-seeed-b601
pip install motorbridge
ステップ 3: ffmpeg(動画コーデックの依存関係)をインストールする
conda install ffmpeg -c conda-forge
バージョンに関する注意:
- デフォルトでは、ffmpeg 7.X がインストールされます(libsvtav1 エンコーダーをサポート)。
- バージョン互換性の問題が発生した場合は、ffmpeg 7.1.1 を指定できます:
conda install ffmpeg=7.1.1 -c conda-forge
ffmpeg -encoders | grep svtav1によって、libsvtav1 エンコーダーがサポートされているか確認できます。
ステップ 4: NVIDIA Jetson デバイス向けの特別な設定(通常のPCではこのステップをスキップ)
Jetson JetPack 6.0 以降のデバイス向け(このステップの前に、Jetson 対応の PyTorch-gpu と Torchvision をインストールしておいてください):
# Install OpenCV and other dependencies via conda (Jetson JetPack 6.0+ only)
conda install -y -c conda-forge "opencv>=4.10.0.84"
# Uninstall OpenCV
conda remove opencv
# Install specific OpenCV version via pip3
pip3 install opencv-python==4.10.0.84
conda install -y -c conda-forge ffmpeg
conda uninstall numpy
# This version must be compatible with Torchvision
pip3 install numpy==1.26.0
ステップ 5: PyTorch GPU が利用可能か確認する
python3
import torch
print(torch.cuda.is_available()) # Should output True
終了するには exit() と入力します。
もし False と出力された場合は、CPU 版をインストールしているため、PyTorch を再インストールする必要があります。
11.3 フォロワーアームのキャリブレーション
11.3 フォロワーアームのキャリブレーション
- 次に、キャリブレーションを行う前に、reBot B601-RS ロボットが電源およびデータケーブルに接続されていることを確認してください。
- リーダーとフォロワーのキャリブレーションファイルは、それぞれ
~/.cache/huggingface/lerobot/calibration/robotsと~/.cache/huggingface/lerobot/calibration/teleoperatorsに保存されます。再キャリブレーションするには、対応するファイルを削除するか、単にキャリブレーションコマンドを実行してください。ターミナルには、C を押して再キャリブレーション、Enter を押して既存のキャリブレーションファイルを使用するように表示されます。 - フォロワーに接続できない場合は、ステージ2を参照し、motorbridge インターフェースを使用してアームが正常に動作しているかテストしてください。
- 指示に従って、上図に示すゼロ位置までフォロワーアームを動かしてください。同じPC上では、アームは組み立て後に一度だけキャリブレーションすれば十分です。以下にキャリブレーションコマンドを示します。画像のゼロ位置(グリッパーは完全に閉じた状態)を参照してください。

DM フォロワーのキャリブレーション:
sudo chmod 666 /dev/ttyACM*
cd lerobot
lerobot-calibrate \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=follower1 \
--robot.can_adapter=damiao
RS フォロワーのキャリブレーション:
システムにまだ PCAN ドライバがインストールされていない場合は、こちらのページを参照してください:PCAN driver installed
sudo ip link set can0 down 2>/dev/null
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
cd lerobot
lerobot-calibrate \
--robot.type=seeed_b601_rs_follower \
--robot.port=can0 \
--robot.id=follower1 \
--robot.can_adapter=socketcan
(オプション)Jetson(Jetpack 6.x)を使用している場合は、次のコマンドを実行して Jetson の CAN ポート番号を確認します:
for i in /sys/class/net/can*; do
[ "$(basename "$(readlink -f "$i/device/driver" 2>/dev/null)")" = "pcan" ] && basename "$i"
done
出力例:
can2 # Could also be can0, can1, or other CAN number
以降のすべてのフォロワー用コマンドで使用するポート番号は、ここでの出力と一致させる必要があります。
Jetson に PCAN driver installed がない場合、通信は常に異常になります。
11.4 リーダーアームのキャリブレーション
11.4 リーダーアームのキャリブレーション
reBot 102 リーダーのキャリブレーションに関する注意事項:
- キャリブレーションを開始すると、reBot Arm 102 上の各サーボの現在位置はゼロにリセットされます。
joint_ranges(関節リミット)は、キャリブレーションデータではなく、設定ファイルconfig_rebot_arm_102_leader.pyから取得されます。- ある関節が常にリミット付近で引っかかっているように見える場合は、まず
joint_rangesの設定を確認してください。 - 関節の回転方向は設定ファイルで定義されています。方向が一致しない場合は、再キャリブレーションではなく設定ファイルを修正してください。
- reBot 102 リーダーは USB–UART モジュールを使用しており、通常は
/dev/ttyUSB*にマッピングされます。 - 実際のポート番号を確認するには、
ls /dev/ttyUSB*を使用します。
初回接続時に、シリアルポート /dev/ttyACM0 が見つからないというエラーが出る場合があります。これは brltty がポートを占有しているためです。次の手順に従ってください:
sudo dmesg | grep ttyUSB # See 'disconnected' on the last line
sudo apt remove brltty # Remove brltty

指示に従って、上図に示すゼロ位置までリーダーアームを動かしてください:
sudo chmod 666 /dev/ttyUSB0
lerobot-calibrate \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
そのまま静止させ、キャリブレーションが完了するまで Enter を押し続けてください。
11.5 関節マッピング:方向、可動範囲、グリッパー
11.5 関節マッピング:方向、可動範囲、グリッパー

11.6 遠隔操作の安全ガイドライン
11.6 遠隔操作の安全ガイドライン

11.7 マスタースレーブ遠隔操作の開始
11.7 マスタースレーブ遠隔操作の開始
遠隔操作中に、電源ケーブルが緩んだり、電源接続が不安定になったり、信号ケーブルが外れたりした場合は、まずコードを停止し、アームを初期のゼロ位置に戻してから、電源を再接続してプログラムを再起動してください — データ破損によってアームが制御不能になり危険な状態になるのを防ぐためです。
DM テレオペレーション — まずシリアルポートへの権限を付与します:
# leader
sudo chmod 666 /dev/ttyUSB*
# follower
sudo chmod 666 /dev/ttyACM*
テレオペレーションを実行します:
lerobot-teleoperate \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=follower1 \
--robot.can_adapter=damiao \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
RS テレオペレーション — まずシリアルポートへの権限を付与します:
# leader
sudo chmod 666 /dev/ttyUSB*
# follower
sudo ip link set can0 down 2>/dev/null
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
テレオペレーションを実行します:
lerobot-teleoperate \
--robot.type=seeed_b601_rs_follower \
--robot.port=can0 \
--robot.id=follower1 \
--robot.can_adapter=socketcan \
--teleop.type=rebot_arm_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=rebot_arm_102_leader
11.8 制御周波数とレイテンシ
11.8 制御周波数とレイテンシ
遠隔操作が「応答性が良い」と感じられるかどうかは、2 つの要素に依存します:フォワーディング回路が 1 秒間に何ループ実行されるか(周波数)、そして手の動きからアームまでにどれだけ遅延があるか(レイテンシ)です。
レイテンシはどこから来るのか?なぜ避けられないのか?

制御周波数とは何か?設定は可能か?
テレオペレーションループのデフォルトは 60 Hz です — 「リーダーを読み取る → マッピング → CAN を送信 → 応答を読み戻す」というループを 1 秒間に 60 回完了し、各ループには 16.7 ms の時間枠があります。この周波数は、テレオペレーション設定の fps パラメータで調整できますが、次の 2 点に注意してください:
- 上限はソフトウェアではなくハードウェア回路の時間で決まります。 上記のチェーン自体が 1 ループあたり 10 ミリ秒以上かかるため、このハードウェアでの実用的な上限はおよそ 60〜100 Hz です。これ以上高く設定しても意味はありません。実際の周波数は上がらず、周期タイムアウトの警告が表示されるだけです。
- 60 Hz で既に必要十分です。 人間の意識的な最速の動きは 5〜10 Hz 程度に過ぎません。60 Hz は、あらゆる細かな動きに対して 10 枚のスナップショットを撮るようなものであり、サンプリング密度は手の帯域幅を完全にカバーしています。
11.9 実践演習
11.9 実践演習:把持・搬送・配置
遠隔操作は安定していますが、「動かせる」ことと「作業できる」ことは別であり、意図的な練習が必要です。第 13 章のデータ品質は、現在のあなたの熟練度に依存します。次の 3 段階で練習しましょう:
- 練習 1:空荷での物体搬送(感覚に慣れる)。 作業空間に軽量のブロックをいくつか置きます。練習内容:ターゲット上方へ移動 → 降下 → グリッパーを閉じる → 持ち上げる。目標:衝突や途中落下なしで 10 回連続成功し、各試行がためらいなくスムーズに流れること。
- 練習 2:搬送と配置(タスクチェーン全体)。 「把持 → 搬送 → 指定された容器への配置」という一連のワークフローを完了します。目標:開始姿勢と終了姿勢が毎回ほぼ同一となる 10 回連続の反復。
- 合格基準: 無理を感じることなく、一定のリズムで 20 回連続してフルタスクを完了できること — そうなれば次の章に進む準備が整っています。