2
0

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 v.0.4.x で学習データ採取

2
Posted at

はじめに

lerobot v.0.4.x で学習データ採取する方法です。tatsuya1970 さんの以下の記事を参考にさせていただきました。感謝申し上げます。

準備関係

前の記事の内容(環境設定、テレオペレーションまで完了)が出来ていることが前提です。

huggingface にログイン

以下は古いと言われました。

huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential

今は、こちらだそうです。環境変数$HF_TOKENにトークンをあらかじめ登録しておきます。

hf auth login --token $HF_TOKEN --add-to-git-credential

これで、トークンを聞かれてから入力する方法もあります。

hf auth login

カメラの設定

学習データ採取に先立ち、カメラ位置を確認します。~/lerobot/outputs/captured_images に画像が保存されるので、カメラ位置を調整して何回か撮影してください。

lerobot-find-cameras opencv

注意点は、フォロワーからリーダーを離し、フォロワーだけが映るように(リーダーが映らないように)することです。ケーブルの関係もありますが、なるべく離して撮影しましょう。

学習データ採取のスクリプト

まずは、全体のスクリプトです。

lerobot-record \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \
  --robot.id=my_follower_arm \
  --robot.cameras="{ front: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
  --teleop.type=so101_leader \
  --teleop.port=/dev/ttyACM1 \
  --teleop.id=my_leader_arm \
  --display_data=true  \
  --dataset.repo_id=#####/record-test \
  --dataset.root=./record-project \
  --dataset.single_task="Move the box" \
  --dataset.num_episodes=10 \
  --dataset.episode_time_s=10 \
  --dataset.reset_time_s=10  \
  --resume=true

以下、個別のオプションを説明します。
--robot.cameras で、カメラを指定します。"lerobot-find-cameras opencv"の出力表示に合わせて、数値を調整してください。

--dataset.repo_id で、huggingface に保存される場所を指定します。#####にはユーザー名を入れます。

--dataset.root で、ローカルの保存先を指定します。この指定だと、~/lerobot/record-project に保存されます。すでにローカルに同じ名前のものが存在していると、実行時エラーになります。その場合は、消去するか、名前を変えるか、すれば大丈夫です。

  --dataset.repo_id=#####/record-test
  --dataset.root=./record-project

num_episodes=10 は10回で一区切りです(resumeで再開するので、少なめにしています。)
episode_time_s=10 はアームを動かし、撮影する時間が10秒です。
reset_time_s=10 は配置をもとに戻す時間が10秒です。

  --dataset.num_episodes=10 \
  --dataset.episode_time_s=10 \
  --dataset.reset_time_s=10  \

最後の --resume=true は再開用です。初回は --resume=false にするか、削除します。

では、データ採取開始です。私は初回(10エピソード採取)の後、3回再開(つまり30エピソード分採取)して、合計40のエピソードを採取しました。

通常通り実行できたら、まず接続状況が以下のように表示されます。

...
INFO 2026-01-23 18:03:21 a_opencv.py:180 OpenCVCamera(2) connected.
INFO 2026-01-23 18:03:21 follower.py:107 my_follower_arm SOFollower connected.
INFO 2026-01-23 18:03:21 so_leader.py:81 my_leader_arm SOLeader connected.

以下は、初回でなく --resume=true で再開した時の実行時の表示ですので、エピソード30になっています。
レコーディングとリセットの表示のタイミングに合わせて、レコーディング中にアームを動かし、リセット中に配置を戻します(英語のスペルを発声しますが、表示優先で)。

INFO 2026-01-23 18:03:21 ls/utils.py:227 Recording episode 30
INFO 2026-01-23 18:03:31 ls/utils.py:227 Reset the environment

その後、以下の処理があります。

Map: 100%|████████████████████████████████████████████████████████████| 300/300 [00:00<00:00, 3366.49 examples/s]
Svt[info]: -------------------------------------------
Svt[info]: SVT [version]:	SVT-AV1 Encoder Lib v3.0.0
Svt[info]: SVT [build]  :	GCC 14.2.1 20250110 (Red Hat 14.2.1-7)	 64 bit
Svt[info]: LIB Build date: Jul  3 2025 03:14:07
Svt[info]: -------------------------------------------
Svt[warn]: Preset M12 is mapped to M10.
Svt[info]: Level of Parallelism: 5
Svt[info]: Number of PPCS 76
Svt[info]: [asm level on system : up to avx2]
Svt[info]: [asm level selected : up to avx2]
Svt[info]: -------------------------------------------
Svt[info]: SVT [config]: main profile	tier (auto)	level (auto)
Svt[info]: SVT [config]: width / height / fps numerator / fps denominator 		: 640 / 480 / 30 / 1
Svt[info]: SVT [config]: bit-depth / color format 					: 8 / YUV420
Svt[info]: SVT [config]: preset / tune / pred struct 					: 10 / PSNR / random access
Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type 			: 2 / 16 / key frame
Svt[info]: SVT [config]: BRC mode / rate factor 					: CRF / 30 
Svt[info]: SVT [config]: AQ mode / variance boost 					: 2 / 0
Svt[info]: SVT [config]: sharpness / luminance-based QP bias 			: 0 / 0
Svt[info]: Svt[info]: -------------------------------------------

ここまで来たら、次のエピソードに続きます。エピソード数10なので、エピソード39で終了です。

データ採取の最後に以下が表示されます。
以下は、FFmpeg が MP4 を正しく書き出すために ヘッダー情報(moov atom)を先頭に移動 しているところです。

...
[mp4 @ 0x28a9d900] Starting second pass: moving the moov atom to the beginning of the file

以下は、
録画は正常に停止しており、カメラ、フォロワー、リーダーも正常に切断されていること、を示しています。

INFO 2026-01-23 18:07:15 ls/utils.py:227 Stop recording
INFO 2026-01-23 18:07:18 a_opencv.py:541 OpenCVCamera(2) disconnected.
INFO 2026-01-23 18:07:18 follower.py:236 my_follower_arm SOFollower disconnected.
INFO 2026-01-23 18:07:18 o_leader.py:162 my_leader_arm SOLeader disconnected.

以下は、データセットの各ファイル(.mp4 や .parquet)が正しく処理・アップロードされていることを示しています。
サイズや進捗が 100% になっているので、破損や未書き込みの問題は起こっていません。

Processing Files (13 / 13)    : 100%|███████████████████████████████████████████████|  122MB /  122MB, 38.8kB/s  
New Data Upload               : 100%|███████████████████████████████████████████████| 29.8MB / 29.8MB, 38.8kB/s  
  ...hunk-000/file-002.parquet: 100%|███████████████████████████████████████████████|  177kB /  177kB            
  ...hunk-000/file-001.parquet: 100%|███████████████████████████████████████████████| 53.1kB / 53.1kB            
  ...hunk-000/file-002.parquet: 100%|███████████████████████████████████████████████| 53.2kB / 53.2kB            
  ...hunk-000/file-000.parquet: 100%|███████████████████████████████████████████████| 53.2kB / 53.2kB            
  ...nt/chunk-000/file-000.mp4: 100%|███████████████████████████████████████████████| 30.4MB / 30.4MB            
  ...nt/chunk-000/file-001.mp4: 100%|███████████████████████████████████████████████| 30.2MB / 30.2MB            
  ...nt/chunk-000/file-002.mp4: 100%|███████████████████████████████████████████████| 30.9MB / 30.9MB            
  ...hunk-000/file-003.parquet: 100%|███████████████████████████████████████████████|  179kB /  179kB            
  ...hunk-000/file-003.parquet: 100%|███████████████████████████████████████████████| 53.1kB / 53.1kB            
  ...nt/chunk-000/file-003.mp4: 100%|███████████████████████████████████████████████| 29.6MB / 29.6MB            
INFO 2026-01-23 18:10:47 ls/utils.py:227 Exiting

終わりに

無事終わってホッとしました。ローカルフォルダーに保存された動画で学習時の動作を振り返ることができます。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?