4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LeRobot SO-101のコマンドが刷新されたのでメモ(環境構築〜SmolVLAまで)

Last updated at Posted at 2025-07-06

はじめに

こんにちは.LeRobotの6軸アームが流行して結構な時間が経ちましたね.僕の周りでもかなりの人がアームをお迎えしている様子を見かけます.2025年7月上旬現在,リポジトリが公開された直後とは各種コマンドやパラメータの構成が大きく刷新されました.

まとめ/紹介記事の多くはこの公開直後に書かれたもので,最新の各種操作を解説している日本語記事が(あまり)見当たらなかったので,本項では環境構築〜SmolVLAの転移学習までのコマンドを備忘録として残します.

環境構築

lerobotのインストール

最新情報および詳細は公式READMEを参照ください.以下,コマンドの抜粋と転記です.

リポジトリのクローンと依存関係のインストール

git clone https://github.com/huggingface/lerobot.git
cd lerobot
conda create -y -n lerobot python=3.10
conda activate lerobot
conda install ffmpeg=7.1.1 -c conda-forge
pip install -e .

僕の手元(M3 MacBook ProおよびUbuntu 24.04 with RTX4060)ではffmpegをバージョン指定のコマンドでインストールする必要がありました.

SO-101関連パッケージのインストール

前節の続きとして以下を実行します.

pip install -e ".[feetech]"  

SmolVLAのインストール

前節の続きとして以下を実行します.

pip install -e ".[smolvla]"

SO-101のキャリブレーション

以下のコマンドでキャリブレーションを行えます.ただし,--robot.port はお手元の環境の値に読み替えてください.また--robot.idは適当な値に変更可能なはずです.

フォロワーアーム

python -m lerobot.calibrate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5A460824801 \
    --robot.id=my_so101_follower

詳細なキャリブレーション手順およびパラメータ等は以下を参照してください.
https://huggingface.co/docs/lerobot/so101#calibration-video

リーダーアーム

python -m lerobot.calibrate \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5A460814251 \
    --teleop.id=my_so101_leader

詳細はフォロワーと同じページを参照してください.

動作確認(遠隔操縦)

キャリブレーションが完了したら,以下のコマンドを実行して遠隔操縦(teleoperation, テレオペ)を試してみます.portなどは適宜読み替えてください.

python -m lerobot.teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5A460824801 \
    --robot.id=my_so101_follower \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5A460814251 \
    --teleop.id=my_so101_leader

以下のようなログが出て,フォロワーアームがリーダーアームの動きに追従すればOKです.

(lerobot) yutaro.kimura@N01361158 lerobot % python -m lerobot.teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5A460824801 \
    --robot.id=my_so101_follower \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5A460814251 \
    --teleop.id=my_so101_leader

---------------------------
NAME              |    NORM
shoulder_pan.pos  |   -2.23
shoulder_lift.pos |  -98.93
elbow_flex.pos    |   98.47
wrist_flex.pos    |   75.96
wrist_roll.pos    |   54.49
gripper.pos       |    4.34

time: 16.67ms (60 Hz)

データセットの記録

各種モデルを転移学習する際に利用する自前データセットの記録方法です.portやidは適宜読み替えてください.{HF_USER}の箇所は,HuggingFace CLIをインストール済み & 各種環境変数を設定済みの想定で書かれています.まだの方は適宜インストールしてください.

python -m lerobot.record \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5A460824801 \
    --robot.id=my_so101_follower \
    --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 1280, height: 720, fps: 30}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5A460814251 \
    --teleop.id=my_so101_leader \
    --display_data=true \
    --dataset.repo_id=${HF_USER}/so101_pp_blue_box \
    --dataset.num_episodes=2 \
    --dataset.single_task="Pick and place the blue box" \
    --dataset.episode_time_s=30 \
    --dataset.reset_time_s=5 \
    --dataset.push_to_hub=true 

詳細は以下を参照してください.

公式サンプル: https://huggingface.co/docs/lerobot/getting_started_real_world_robot#record-a-dataset

また,同じデータセットへ継ぎ足し記録したいときは --resume=true を用います.新規作成データセットでresumeを入れているとエラーになるので,継ぎ足しのときだけ使います.

python -m lerobot.record \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5A460824801 \
    --robot.id=my_so101_follower \
    --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 1280, height: 720, fps: 30}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5A460814251 \
    --teleop.id=my_so101_leader \
    --display_data=true \
    --dataset.repo_id=${HF_USER}/so101_pp_blue_box \
    --dataset.num_episodes=2 \
    --dataset.single_task="Pick and place the blue box" \
    --dataset.episode_time_s=30 \
    --dataset.reset_time_s=5 \
    --dataset.push_to_hub=true  \
    --resume=true

SmolVLAの転移学習

上の${HF_USER}/so101_pp_blue_boxにアップロードしたデータセットを使ってSmolVLAを転移学習する場合は以下のようにします.各パラメータの調整に関しては公式情報や別記事を参照ください.

python src/lerobot/scripts/train.py \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=${HF_USER}/so101_pp_blue_box \
  --policy.repo_id=${HF_USER}/so101_pp_blue_box_policy \
  --batch_size=64 \
  --steps=200000

実機デプロイ

上で学習した ${HF_USER}/so101_pp_blue_box_policyのポリシーを利用する場合は次のようにします(まだ手元で学習済み重みが期待通りに動いてくれていないので,このコマンドが間違っている可能性もあります...).

python -m lerobot.record \
  --robot.type=so101_follower \
  --robot.port=/dev/tty.usbmodem5A460824801 \
  --robot.id=my_so101_follower \
  --robot.cameras="{ writ: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
  --dataset.single_task="Pick and place the blue box" \
  --dataset.repo_id=${HF_USER}/eval_so101_pp_blue_box_test \
  --policy.path=${HF_USER}/so101_pp_blue_box_policy \
  --dataset.num_episodes=10

おわりに

いかがでしたか?どなたかの参考になれば嬉しいです.

それでは.

主な参考サイト

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?