# R2R2R の考え方を π0.5 の学習に活かす計画（案）

作成: Claude（2026-11-07）　状態: 案。Codex の敵対的検証の前
元にした論文メモ: [paper_r2r2r_20261009.md](paper_r2r2r_20261009.md)

## 1. 何を解きたいか

mechArm 270 Pi で動かしている π0.5（Physical Intelligence のロボット用 AI）は、お手本で見たブロックの位置の近くではつかめるが、位置が変わるとアームがブロックのところへ行かない。お手本の位置のばらつきが足りないことが原因だと見ている（2026-10-17 の見立て）。

R2R2R の論文（UC バークレー・トヨタ研究所、2025）で効いていたのは、きれいな映像を大量に描くことではなく、物の置き場所がばらついたお手本を作ることだった。元の動きをそのまま再生しただけのデータでは、π0-FAST の成功率は 80% から 0% に落ちている。逆に、背景や机の模様を変えすぎると 73% から 35% に落ちている。

そこでこの計画では、論文のうち「置き場所を変えて動きを作り直す」部分だけを借りる。映像は Unity で描かず、実機で撮る。

## 2. 今の手元（2026-11-07 に Claude が確かめた値）

| 項目 | 値 | 確かめた場所 |
|---|---|---|
| 最新の学習データ | 30本・4,301コマ（教えた動きの再生 19本＋ゲームパッドの補正つき 11本、うち補正 430コマ） | KIOXIA `datasets/mecharm_redblock_box_teach_v1_trim2_corr_v5/README.md` |
| 教えた位置 | 5か所（位置ごとに 1〜5本） | `runs/experiments/record_teach_demo/20261019_LOG352/README.md` |
| カメラ・画像 | 上のカメラ1台、384×216、10コマ/秒 | 各エピソードの `meta.json` |
| 状態と行動 | 関節6つ＋爪の7つ。行動は 0.1 秒後の状態（絶対値） | 同上 |
| 指示の言葉 | put the red block in the white box の1種類 | 同上 |
| 最新のモデル | `checkpoints/pi05_mecharm_trim_corr_lora_v3`（2026-11-06、A40 で 1,500 ステップ・3.13 時間・約 292 円） | `lab/Log22/train/lab_train_20261106_195143.txt` |
| 前に series2 の仕組みで作ったお手本 | scripted_v1：35本のうち使えたのは 20本。爪の開くラベルが約 2 秒早いずれあり | `datasets/mecharm_redblock_box_scripted_v1/` |
| FK テーブル | `fk_tables/fk_scan_motion_based_v2.csv`（爪先の位置 xyz と関節6つ）。**Unity で作った表で、実機とはずれる**（LOG177）。実機では上カメラの視覚サーボと補正記憶でずれを詰めている | |

### 前の回答の訂正

チャットで「実測の FK テーブル」と書いたが、正しくは Unity で作った表。実機との差は、カメラで見て寄せる仕組み（視覚サーボ）と、位置ごとのずれを覚える補正記憶（correction_memory.json）で埋めている。

### 実機で分かっている落とし穴（LOG352）

- 肩（j1）が約 88° を超える命令は、アームが丸ごと捨てる
- アームが動いている途中に爪の命令を出すと、その後の送信が無視されて固まる（daemon の再起動でしか戻らない）
- ブロックを教えた位置から約 46mm ずらして置いた試行があった。置き場所の印がないと、人が置く位置がぶれる

## 3. やること

### 段階0　基準を測る（学習なし）

- マットに置き場所の印を付ける。アームが届く範囲の中に 3×3 の9か所。教えた5か所とは別に、その間と外側を含める
- 最新モデル（trim_corr_lora_v3）で、9か所×3回＝27回、補正なしで動かす
- つかめたか・箱に入ったかを人が判定し、位置ごとの成功数を残す
- 失敗がつかむ前か後か（ブロックへ行かない／落とす／箱にぶつかる）も分けて残す

### 段階1　置き場所を散らしたお手本を集める

3つの案を比べ、段階0の結果を見て決める。

| 案 | やり方 | 良い点 | 心配な点 |
|---|---|---|---|
| A　series2 の仕組みで自動 | `run_pick_place.py --record-demo`（カメラで見つけ、FK テーブルで姿勢を引き、視覚サーボで寄せ、補正記憶で直す）を9か所で回す | 新しいコードがほぼ要らない。人はブロックを置き直すだけ | 前回は 35本中 20本しか使えなかった。動きの速さ・止まり方が教えた動きと違い、混ぜると π0.5 が迷うかもしれない。爪のラベルのずれを直す必要がある |
| B　教えた動きを置き場所に合わせて作り直す（論文に一番近い） | 教えた5本の要所（ブロック真上・つかむ位置）を、新しい置き場所の分だけ平行にずらす。ずらした爪先位置から FK テーブルで関節角を引き、要所の再生（`record_teach_demo.py`）で撮る | 動きの癖が今の学習データとそろう | Unity の表なので、ずらした先で実機の爪がブロックに合う保証がない。補正記憶をどう挟むかを決める必要がある。新しいコードが要る |
| C　ゲームパッドで人が運ぶ | 9か所それぞれで、HOME からブロックの上まで人がゲームパッドで動かして撮る | 実機で確実にブロックに合う | 1本ごとに人の手間がかかる。動きの滑らかさは今の版が限界（LOG446） |

まずは各案 9か所×3本＝27本を目安にする。今の 30本と合わせて 57本。

### 段階2　学習する

- 最新モデルから続けて学習する（corr_v5 のときと同じ形。Runpod の A40、`lab_train.sh` で寝ている間に回す）
- 置き場所が広がると関節角の範囲も広がる。正規化の値（学習データの平均とばらつき）を今のまま使うか、作り直すかを決める

### 段階3　同じ条件で測り直す

- 段階0と同じ 9か所×3回を、補正なしで動かす
- さらに、格子の点と点の間（お手本にない位置）に 3か所足す
- 合格の目安：お手本にない位置での成功数が、段階0より明らかに増えること（具体の数は段階0の結果を見て決める）

### 段階4（並べて進めてよい）　動く前に FK で見る

- π0.5 が出した次の数十コマ分の関節角を FK に通し、爪先が白箱の縁より低いまま箱に近づく動きを見つける
- 止めるためではなく、巻き戻しとゲームパッドの補正をどこで入れるかを示すために使う。最初は記録だけにする
- 描画がいらないので軽い。ただし FK は Unity の表なので、実機との差の分だけ外れることがある

### やらないこと

- Unity で映像を描いて学習に入れること（論文そのままのやり方）。実機のお手本が少ないうちは実機の映像のほうが有利で、カメラ1台のまま今よりよく動くことが条件だから。実機のお手本で頭打ちになったら考え直す

## 4. 置き場所

| もの | 場所 |
|---|---|
| 新しいお手本 | KIOXIA `datasets/mecharm_redblock_box_grid_v1/`（案ごとに分けるなら `_a` `_b` `_c` を付ける） |
| 実機の推論・評価の記録 | KIOXIA `runs/pi05_policy/`、まとめは `lab/Log{NN}/`（番号はエイイチに確認） |
| 学習済みモデル | KIOXIA `checkpoints/` と Hugging Face の非公開リポジトリ |

## 5. まだ決めていないこと

- 段階1でどの案から始めるか（段階0の結果を見て決める）
- scripted_v1 から教えた動きに切り替えた理由。案A がその理由で同じ失敗をしないか
- 段階3の合格の数
