SO101 tidy-up: Diffusion Policy

ID:Y-ORIHARA ・ Physical AI 講座 2026 応用編1 最終課題

低価格ロボットアーム SO101 が、机の上の黒いスポンジを白い箱へ片付ける Diffusion Policy です。LeRobot 0.6.1 で学習しました。

結果

ACT と同じ 112 回分のお手本で学習し、同じ4つのランダム配置(マス ②④⑧、③④⑧、①⑤⑦、②⑤⑨)で各 5 回、計 20 回ずつ試しました。

指標 ACT Diffusion Policy(このモデル)
2つのスポンジの「間」をつかんだ回 15 / 20 0 / 20
箱に入ったスポンジ 29 / 60(48%) 51 / 60(85%)
3個とも片付けた回 3 / 20 15 / 20
  • お手本は毎回3個でしたが、4〜9個に増やしても、どの個数でも全部片付けた回がありました。5個以上は箱があふれるため、人が箱の中身を整理しています。
  • 残った失敗は、時間切れ(3 回)と、1つのスポンジのすぐ横で空をつかみ続ける位置合わせのずれ(2 回)でした。

入力と出力

項目 内容
observation.state 関節角度 6 個(SO101 フォロワー)
observation.images.top 上のカメラ(Logicool C920)、640×480、手前・左の斜め上から作業エリア全体を見る
observation.images.wrist 手首カメラ(Inno-Maker U20CAM-1080P)、640×480
action 関節角度の目標値 6 個

学習の設定

  • お手本:112 回分。人がリーダーアームで操作し、30fps で録画した。
  • 40,000 ステップ、バッチ 32。
  • 画像は 240×320 に縮小し、95% のランダム切り抜きを使った。
  • DDIM で 10 ステップ。64 コマを予測し、16 コマを実行する。
  • 計算機は NVIDIA GB10(DGX Spark)。推論 1 回は約 0.18 秒。

動かし方

lerobot-rollout --strategy.type=base \
  --policy.path=tenyyprn/so101-tidyup-diffusion \
  --robot.type=so101_follower --robot.port=<フォロワーのポート> --robot.id=<キャリブレーション名> \
  --robot.max_relative_target=10 \
  --robot.cameras="{ top: {type: opencv, index_or_path: <上のカメラ>, width: 640, height: 480, fps: 30, fourcc: MJPG}, wrist: {type: opencv, index_or_path: <手首カメラ>, width: 640, height: 480, fps: 30, fourcc: MJPG} }" \
  --task="Put all the black sponges in the white box" --duration=45

制約

  • 1 台の SO101、1 つの机、1 つの箱、決まったカメラ位置で集めたデータだけで学習しています。机・照明・カメラ位置・物が変わると、そのままでは動かない可能性が高いです。
  • 学習データは、手首カメラに部屋が映るため公開していません。
  • 実機で動かすときは、max_relative_target などで動きを制限し、すぐ止められる状態で試してください。

参考文献

  • C. Chi ほか. "Diffusion Policy: Visuomotor Policy Learning via Action Diffusion." arXiv:2303.04137, 2023.
  • J. Song, C. Meng, S. Ermon. "Denoising Diffusion Implicit Models." ICLR 2021.
  • LeRobot: https://github.com/huggingface/lerobot
Downloads last month
19
Safetensors
Model size
0.3B params
Tensor type
F32
·
Video Preview
loading

Paper for tenyyprn/so101-tidyup-diffusion