ソフトウェアのセットアップ

LeRobot のインストール、SO-101 ロボットの構成、サーボのキャリブレーション、リーダーとフォロワーのテレオペのセットアップ、Python API、およびトラブルシューティング。 Python の新規インストールからアームの実行までのすべて。

セクションにジャンプします:

ステップ 1 — LeRobot のインストール

ルロボットのインストール

SO-101 に必要なソフトウェア パッケージは LeRobot のみです。 サーボ通信、キャリブレーション、テロップ、データ記録を処理します。

仮想環境を作成する

python -m venv ~/.venvs/so101
source ~/.venvs/so101/bin/activate   # Windows: .venvs\so101\Scripts\activate

LeRobot をインストールする

pip install lerobot

インストールの確認

python -c "import lerobot; print(lerobot.__version__)"

ソースからインストール (オプション - 最新機能の場合)

git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[so101]"
ステップ 2 — ロボットの構成

SO-101ロボット構成

LeRobot には、SO-101 ロボット構成が組み込まれています。 フォロワー アーム (2 アーム テレオペを使用している場合はリーダー アーム) の USB ポートを指定します。

USB ポートを探す

# Linux / macOS
ls /dev/ttyUSB*    # typical: /dev/ttyUSB0, /dev/ttyUSB1
ls /dev/tty.usbserial*   # macOS alternative

# Windows — check Device Manager → Ports → COMx

SO-101 構成 YAML

LeRobot は、コマンド ラインまたは YAML ファイルでインライン構成を使用します。 シングルアームセットアップの場合:

# ~/.lerobot/robots/so101_follower.yaml
robot_type: so101
port: /dev/ttyUSB0   # update to your port
cameras:
  wrist_cam:
    type: opencv
    index_or_path: 0
    fps: 30
    width: 640
    height: 480

2 アーム (リーダー - フォロワー) 構成

# ~/.lerobot/robots/so101_bimanual.yaml
robot_type: so101
port: /dev/ttyUSB1      # follower arm
leader_arms:
  main:
    type: so101
    port: /dev/ttyUSB0   # leader arm
cameras:
  top_cam:
    type: opencv
    index_or_path: 0
    fps: 30
    width: 640
    height: 480

テスト接続

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=none   # just connects and reads state

関節位置の測定値が印刷されるはずです。 ポートエラーが発生した場合は、次のことを確認してください トラブルシューティング.

ステップ 3 — サーボのキャリブレーション

サーボキャリブレーション

絶対エンコーダを使用する CAN バス アームとは異なり、Feetech STS3215 サーボはゼロ位置を定義するためにキャリブレーションが必要です。 LeRobot はこれを自動的に処理します。

キャリブレーションの実行

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=calibrate

スクリプトは、腕を特定の位置 (各ジョイントのホーム、最小、最大) に移動し、各位置で Enter キーを押すように要求します。 校正データを保存します ~/.cache/huggingface/lerobot/calibration/so101/.

校正位置

LeRobot は、各関節を 3 つのポーズに配置するように求めます。

  • ホームポジション: アームを完全に伸ばし、エンドエフェクターを前方に向けた状態
  • ゼロトルク位置: 重力下で自然に垂​​れ下がった腕
  • 90度基準: 各ジョイントの中間点

校正の確認

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=teleoperate   # move arm by hand to verify joint readout

アームを手動で動かします(コンプライアンスモード)。 関節の位置は自宅ではゼロ近くにあり、各関節を動かすにつれて滑らかに増減するはずです。

再キャリブレーションのヒント: ジョイントを分解したり、サーボを交換したり、ジョイントの位置がずれていることに気づいたときは、必ずキャリブレーションを再実行してください。 キャリブレーション ファイルはアームのシリアル番号ごとに保存され、自動的にリロードされます。

ステップ 4 — リーダーとフォロワーのテレオペ

リーダーとフォロワーの遠隔操作

SO-101 は、リーダーとフォロワーの遠隔操作用に設計されています。1 つのアーム (リーダー) が手の動きを捕捉し、2 番目のアーム (フォロワー) がそれをリアルタイムで反映します。 これにより、最高品質のトレーニング デモンストレーションが生成されます。

リーダーとフォロワーのテロップを開始する

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB1 \
  --robot.leader_arms.main.type=so101 \
  --robot.leader_arms.main.port=/dev/ttyUSB0 \
  --control.type=teleoperate

シングルアーム キーボード テロップ (セカンド アームなし)

腕が 1 つしかない場合は、キーボード制御モードを使用します。

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=teleoperate \
  --control.teleop_keys=true

コンプライアンス/重力補正モード

リーダー アームを低トルク モードにして、手で自由に動かせるようにします。

python -c "
from lerobot.common.robot_devices.robots.so101 import SO101Robot
robot = SO101Robot(port='/dev/ttyUSB0')
robot.connect()
robot.set_compliance_mode(True)   # arm moves freely under hand guidance
"
ステップ 5 — Python API

Python API クイックスタート

CLI スクリプトを使用せずに、LeRobot ロボット API を介して SO-101 を直接制御できます。

基本的な関節制御

from lerobot.common.robot_devices.robots.so101 import SO101Robot
import torch

robot = SO101Robot(port="/dev/ttyUSB0")
robot.connect()

# Read current joint positions (6 DOF)
obs = robot.capture_observation()
print("Joint positions:", obs["observation.state"])

# Send joint position command (in degrees, normalized to [-1, 1] range)
action = torch.zeros(6)   # all joints to zero position
robot.send_action(action)

robot.disconnect()

重力補正(バックドライブ可能モード)

from lerobot.common.robot_devices.robots.so101 import SO101Robot

robot = SO101Robot(port="/dev/ttyUSB0")
robot.connect()

# Enable backdrive — arm can be moved freely by hand
robot.set_compliance_mode(True)

import time
for _ in range(100):
    obs = robot.capture_observation()
    print(obs["observation.state"])   # prints live joint positions as you move arm
    time.sleep(0.02)

robot.disconnect()

サーボステータスの読み取り

from lerobot.common.robot_devices.motors.feetech import FeetechMotorsBus

bus = FeetechMotorsBus(port="/dev/ttyUSB0",
                       motors={"joint1": (1, "sts3215"),
                               "joint2": (2, "sts3215"),
                               "joint3": (3, "sts3215"),
                               "joint4": (4, "sts3215"),
                               "joint5": (5, "sts3215"),
                               "gripper": (6, "sts3215")})
bus.connect()
positions = bus.read("Present_Position", ["joint1", "joint2", "joint3"])
print("Positions:", positions)
bus.disconnect()
トラブルシューティング

よくある問題トップ 3

エラー1 シリアルポートが見つかりません: FileNotFoundError: /dev/ttyUSB0

USBサーボコントローラーが認識されません。 通常、ドライバーが欠落しているか、ケーブルが接続されていません。

修理:

# Check if the device is listed
ls /dev/ttyUSB*   # Linux
ls /dev/tty.usbserial*   # macOS

# Linux: add yourself to the dialout group (requires logout)
sudo usermod -aG dialout $USER

# Windows: install CP2102 or CH340 USB driver,
# then check Device Manager for COM port number
エラー2 接続後にサーボが応答しない

サーボは物理的に接続されていますが、LeRobot はその位置を読み取ることができません。 通常は、電源の問題かボーレートが間違っています。

修理:

# 1. Verify 5V power supply is connected and LED on servo board is on
# 2. Check all servo daisy-chain cables are fully seated
# 3. Try scanning for servos directly:
python -c "
from lerobot.common.robot_devices.motors.feetech import FeetechMotorsBus
bus = FeetechMotorsBus('/dev/ttyUSB0', motors={})
bus.connect()
ids = bus.find_motor_ids()
print('Found motor IDs:', ids)
bus.disconnect()
"
エラー3 次回の実行時にキャリブレーションデータが見つからない

LeRobot はアームのシリアル番号ごとにキャリブレーションを保存します。 キャリブレーション ファイルが見つからない場合は、警告が表示され、生のエンコーダー値が使用されます。

修理:

# Check calibration file location
ls ~/.cache/huggingface/lerobot/calibration/so101/

# Re-run calibration if the file is missing
python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=calibrate

# Pass explicit calibration path if needed
python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --robot.calibration_dir=/path/to/calibration \
  --control.type=teleoperate

まだ行き詰まっていますか? で質問してください SO-101 フォーラム またはチェックしてください LeRobot GitHub の問題.

ソフトウェアは動作していますか? データの収集を開始します。

アームが動いたら、次のステップは最初の LeRobot データセットを記録することです。