データが方策の仕様になる

LeRobotは複数のロボットを統一的に扱う Python 系の OSS で、データセット、遠隔操作、方策、訓練、可視化をつなぐことを目指す。README が説明する LeRobotDataset は、視覚に同期した MP4/画像と、状態・行動を持つ Parquet を組み合わせる。形式を揃える価値は、モデルを替えるためだけではない。「どのカメラの、どの時刻の、どの関節状態に対して、何を命令したか」を後から追えることにある。

  1. 1タスク仕様・安全条件
  2. 2遠隔操作と同期記録
  3. 3エピソード検査
  1. 1検査済みデータ
  2. 2train/validation/test 分割
  3. 3模倣学習
  1. 1方策
  2. 2シミュレーション評価
  3. 3低速・監視付き実機評価
  1. 1失敗エピソード
  2. 2原因タグ
  3. 3次の収集設計
順序と役割を、ひとつずつ分けて考える

収集前に決めること

タスクを「物体を置く」だけで終わらせず、開始状態、対象物、成功判定、許されない接触、最大速度、停止操作、撮影位置を定義する。観測にはカメラ映像だけでなく、関節位置・速度、グリッパ、タスク指示、タイムスタンプを含める。カメラと action の時刻ずれは、見た目が良いのに学習が壊れる典型原因だ。収集画面で操作者が見ている映像と保存映像が同じとは限らない。

成功デモだけを並べると、少し外した時の回復を学べない。安全に許される範囲で、異なる開始位置、照明、物体姿勢、遅い修正を含め、失敗・中断・異常を明示的にタグ付けする。危険な衝突や人への接近を意図的に集めない。データを消す前に、なぜ除外したかを記録する。ラベルを後から直せることと、元の生データが保存されることは別問題である。

模倣学習の期待値

模倣学習は、観測と指示から専門家行動を再現する方策を学ぶ。教師の軌跡から外れると、学習時に見なかった状態へ入り、誤差が累積する exposure bias が起きる。action chunk は一度に数ステップの行動を出して滑らかさや計算効率を得られるが、環境が変化した時に古い chunk を続けるリスクもある。再観測の頻度、途中停止、速度制限が実機では重要になる。

LeRobot が統一 Robot インターフェースを提供しても、各機体の校正、トルク、可動域、通信遅延が消えるわけではない。README の対応機体一覧は統合の入口であって、任意構成の安全適合を意味しない。SmolVLA の公表された訓練例は学習の再現可能な起点として読む。公式発表のコマンドを実行する前に、データ ID、バージョン、必要 GPU、ライセンス、評価方法を固定する。

評価と Sim2Real

まずテスト split を収集時から隔離する。同一撮影セッションの連続フレームを train/test に割ると、実質的な記憶を一般化と誤認する。評価は成功率だけでなく、開始姿勢別、物体別、照明別、失敗形別、停止回数、試行時間、介入回数を出す。各試行を動画と telemetry で復元できるようにする。

シミュレーションは安価に可動域、衝突、タスク論理を試せる。ただし摩擦、剛性、遅延、カメラのノイズ、物体の見え方が現実と違う。domain randomization は差を広げて学ばせる方法だが、重要な差を網羅する証明ではない。Sim2Real は一回の移植ではなく、シミュレーション→無通電確認→低速・空間隔離→監視付き一試行→ログ評価という段階的な仮説検証である。

演習:データカードを書く

実機を動かさず、架空の「色ブロック仕分け」についてデータカードを作る。センサー、行動単位、周波数、同期法、開始状態、成功、除外、プライバシー、ライセンス、既知の欠損を一枚に書く。10 本の架空エピソードに、train/validation/test と原因タグを割り当てる。次に「カメラが 150ms 遅れる」「箱が反射する」「グリッパが一度滑る」を投入したら、どの計測が異常を検出できるか考える。ここで実機を安全に動かしたとは主張しない。設計レビュー可能な記録を作る演習である。

収集テーブルの具体例

Parquet/CSV の論理 schema を先に書く。episode_id は分割に使う不変 ID、frame_index は同一 episode 内の順序、timestamp_ns は単調増加時刻、image_path は視覚、state.q は関節角、state.gripper は開閉、action.delta_xyz は手先増分、action.gripper は次の開閉命令、とする。各列に unit と coordinate_frame を併記し、action.delta_xyz=[0.01,0,0] が base frame の +x へ 1cm なのか、tool frame の前方へ 1cm なのかを曖昧にしない。画像の再エンコードやフレーム間引きをした時は、timestamp と action の対応を再検証する。

品質検査は、欠損率、連続 timestamp、状態値の範囲、画像解像度、episode 長、action の飽和率を出す。q が関節限界外、action が毎回同じ、全フレームが黒、task が空の episode は訓練前に隔離し、理由を残す。成功 episode だけが極端に短いなら、停止のタイミングをモデルが学んでいないかもしれない。失敗を消すか含めるかはタスクと安全条件によるが、何をしたかを記録しないデータ整形は再現不能である。

train/eval 漏洩の実務チェック

split manifest を最初に保存し、再実行で同じ episode が移動しないよう seed と version を固定する。train_episode_ids ∩ test_episode_ids = ∅、同一 raw video の hash が複数 split に無い、同一収集セッションが必要なら group ごとに片側だけ、を自動検査する。normalization の平均・分散も train だけから計算し、test の統計を前処理へ混ぜない。ハイパーパラメータ選択に test を使った時点で、新しい未見データを評価用に確保する。

評価後には、失敗 episode を成功/失敗だけで閉じない。perception, calibration, grasp, trajectory, latency, safety_stop, unknown のような原因タグを、動画と telemetry を見て人が付ける。モデルが悪いのか、データが不足したのか、成功判定が曖昧なのかを次の収集へ戻せる。失敗の再現手順、policy と dataset の version、環境条件を一行に残せば、偶然の一回を改善と誤認しにくい。

dataset revisionにはreplay境界が必要

dataset revisionはファイルの追加だけではない。episode ID、sensor schema、action単位、calibration version、decoder versionを含むmanifestを固定する。その後、学習前に同じheld-out episodeをloaderへreplayする。dropped frame、timestampの逆行、欠けたaction、学習範囲外のnormalization値を数える。これによりloss curveをpolicy改善と誤認する前にdata pathの破損を見つけられる。

LeRobot repositoryはrolling releaseである。この記事に関係する2026-09のmerged releaseは確認できなかった。現行documentationは実行前にinterfaceを検査する入口であり、過去のcommandが再現可能だという証拠ではない。

現行toolingはdataset validityではない

2026年9月22日に発表されたNVIDIA Isaac ROS 5.0はROS packageとdeployment workflowのplatform announcementである。LeRobot datasetやSim2Real結果をvalidateするものではない。この分離を運用へ入れる。manifestにROS/driver/container versionをpinし、同じstackでsensor sampleをreplayし、feature name、unit、timestampが変わればrunをfailさせる。tooling updateは新しいtraining claimではなくcompatibility testの契機である。

2024年のデータ形式を比較の基準にする

Hugging Faceの2024年8月27日の分析は、保存形式とdecodeを訓練の判断へ含める。本演習では元episodeを保持し、変換したcopyのcodec、pixel format、timestamp対応、decoder版を記録する。同じランダムframe IDを両方から読み、読み込み時間を測る前に観測とactionの対応を比べる。fileが小さくても、画像が別actionと組になれば改善ではない。これは未実行の実験計画であり、提供元benchmarkの再現結果ではない。

MENTAL MODEL / 座標

同じ点でも、座標は変わる。

ローカル座標の点 (1, 0) を、原点を共有する世界座標へ反時計回りに回転します。

x = cos θ
y = sin θ

これは2次元の回転だけの例。実機では並進、3次元、単位、時刻、軸の定義まで揃える必要があります。

xy(0.87, 0.50)

出典

01
LeRobot repository ↗github.com · unknown
02
LeRobot documentation ↗huggingface.co · unknown
03
SmolVLA announcement ↗huggingface.co · 2025-06-03
04
NVIDIA Isaac ROS 5.0 announcement ↗blogs.nvidia.com · 2026-09-22
05
Scaling robotics datasets with video encoding ↗huggingface.co · 2024-08-27

自分のノート