# 2026-11-06 20:10 依頼 97 ゲームパッドで直した成功 5 本を点検し, corr_v5 を作り, corr2 から続きの学習 corr3 を Log22 で回し始める

アームは使っていない。KIOXIA のマウント（/Volumes/KIOXIA, exfat）を確かめてから、新しい名前のフォルダだけ作った（runs/・datasets/・checkpoints/ の既存のものは読むだけ）。

## 前提として分かったこと
- 11-05 の c7992ca のあと、send_angles の rpc は 0.03〜0.14 秒で返る（11-01 は 1.5〜1.6 秒）。腕は rpc が返ったあとも指令へ向かって動いている
- ゲームパッドの区間は states.csv に rpc 行（cmd=send_angle / cmd=stop）だけが残る。目標は log.jsonl の type=pad の行にある

## A. 手首と関節の点検（pi05/diag_joint_hold.py）
- 直したこと
  - rpc 行 send_angle は pad の move と組にする（±0.2 秒でいちばん近い・まだ組にしていないもの。送り直しは resends の数まで同じ行）。1 刻みの指令は command。長押し（no_check）では押した関節を見ない（15° 先へ着く気がない）。stop は halt と一対一で組み、指令は止めた関節だけ measured_after_halt（gamepad_teleop の _apply_halt と同じ）。組にできない行は pad_unknown（今日の 5 本は 0）
  - rpc が 0.5 秒より短く返った区間では、指令へ向かう途中の動きを遅れに数えない。代わりに関節ごとに「いちばん指令へ近づいた所から離れた分」（away）を見る。指令が変わらない間は区間をまたいで引き継ぐ。止まったあとのずれは、動き出したあとの止まりだけで見る
  - 11-01 の 9 本は、前の結果（docs/diag_joint_hold_20261101.json）と全部同じ
- 結果（外れ = 4° 超。docs/diag_joint_hold_20261106.txt・.json）

| run | j4 止まり 中央/最大 | j4 離れた分の最大 | j1 止まり 中央/最大 | j2 止まり 中央/最大 | 外れ |
| --- | --- | --- | --- | --- | --- |
| 183926 | 0.8 / 2.2 | 1.2 | 0.9 / 2.1 | 0.9 / 2.2 | 0 |
| 184452 | 0.7 / 3.3 | 3.8 | 0.9 / 2.6 | 0.4 / 2.0 | 0 |
| 184650 | 0.8 / 3.0 | 2.7 | 1.1 / 2.6 | 1.0 / 1.9 | 0 |
| 184906 | 1.4 / 3.2 | 2.4 | 1.0 / 3.0 | 0.8 / 2.8 | 0 |
| 185554 | 1.5 / 6.8 | 5.8 | 0.9 / 2.1 | 0.7 / 1.7 | 5 区間（j4） |

- 案: 入れる = 183926・184452・184650・184906。入れない = 185554（補正 2 で j1 を長押しで −15° 動かした間に、j4 が指令 −64.5 のまま −63.5 → −57.7。止めたあとのずれ 6.8°。推論に戻ったあとも −59 のまま）
- 184650 は外れがないが、補正 2 の終わりに j2 が trim2 の範囲（上限 +31.4°）を最大 11.1° 超える 18 コマがある（決めてほしいこと）

## B. corr_v5
- build_correction_episodes.py は変えていない。合成の記録で確かめた（pi05/test_pad_build.py）: correct のコマ（長押しで動いている途中も）が入る・補正の中の爪の指令（gripper_cmd 行）の時刻で 0/1 が切り替わる・長押しを離して止まった所は同じ決まりで詰まる・抜けは speed20 と linear で同じ
- 角度の抜け（0.25 秒超）: 入れる 4 本で、動いた角度のうち抜けの中の割合 model 2.2〜2.9%（11-01 は 98%）。correct の抜けは、補正の始めの約 3.2 秒（ゲームパッドの窓を開く間。腕はほぼ止まっていて 0〜1.4°）と、長押しの途中の 0.3〜0.4 秒（184650 の j1 −10.6°・j2 +13.0°）。後者は速度 20 の速さでは抜けいっぱいかかるので、speed20 で埋めても linear と同じ。→ ゲームパッドの区間には作り直し（ウ）は要らない（入れても変わらない）。corr_v4 と同じ speed20 のまま作った
- 止まり: 入れる 4 本の止まりは 7.3〜11.1%（今までの 7 本は 17.5〜22.8%）。correct の止まりのコマは 5〜12（今までの 7 本は 11〜23）
- 1 コマの最大の動きが大きい: model で最大 4.8°（腕が送ったらすぐ動くため）、ゲームパッドの長押しで j1 最大 6.7°（trim2 は 3.3° まで）。詰めたつなぎ目ではなく、実際の 0.1 秒の動き
- `datasets/mecharm_redblock_box_corr_v5`（`--gap-fill speed20 --trim-hold`）: 11 本 / 1584 コマ。前の 7 本は corr_v4b と episode.npz がバイトで同じ。お手本と一緒に使える: OK

| run | コマ | 補正のコマ | 止まり | 1 コマの最大 j0〜j5（°） |
| --- | --- | --- | --- | --- |
| pi05_20261031_175527 | 118 | 28 | 17.8% | 3.31 3.75 3.00 1.31 3.00 0.77 |
| pi05_20261031_180435 | 152 | 49 | 17.8% | 3.00 3.00 3.29 1.88 3.22 1.88 |
| pi05_20261031_181946 | 126 | 38 | 17.5% | 3.00 4.40 2.96 0.70 3.22 0.73 |
| pi05_20261031_184016 | 133 | 44 | 19.5% | 3.00 3.00 3.00 0.78 3.00 0.56 |
| pi05_20261101_190347 | 115 | 31 | 18.3% | 3.27 3.33 3.00 0.93 3.28 0.78 |
| pi05_20261101_190854 | 145 | 58 | 22.8% | 3.07 3.22 3.00 0.82 3.00 0.79 |
| pi05_20261101_192101 | 104 | 35 | 22.1% | 3.00 3.00 3.00 0.73 3.05 1.15 |
| pi05_20261106_183926 | 188 | 34 | 8.0% | 3.81 5.94 3.07 1.15 4.89 0.61 |
| pi05_20261106_184452 | 190 | 55 | 11.1% | 4.13 4.72 3.39 1.18 4.41 0.70 |
| pi05_20261106_184650 | 178 | 38 | 7.3% | 4.44 6.68 4.76 1.03 4.08 0.73 |
| pi05_20261106_184906 | 135 | 20 | 10.4% | 3.82 4.41 4.01 1.29 3.73 0.88 |
| 合計 | 1584 | 430 | 14.9% | |

- 合わせたもの `mecharm_redblock_box_teach_v1_trim2_corr_v5`: 30 本 / 4301 コマ・止まり 11.6%・tar 117 MB（._ 0 件・episode.npz 30）sha256 c5d43fa9…
- check_dataset: FAIL なし。corr_v5 単独 WARN 2（190854 22.8%・192101 22.1% の止まり／j0 +15° に 11/11）、合わせたもの WARN 1（同じ 2 本の止まり）
- corr_v1〜v4・v4b は残している

## C. 続きの学習 corr3（コミット 284dfd7）
- 続きの元 corr2 の 1499 の正規化（assets/local/..._trim2_corr_v4b/norm_stats.json）は sha256 80346837…で trim2（3999）と同じ
- add_trim_corr_config.py `--variant v5`（設定 pi05_mecharm_trim_corr_v5_lora・repo_id local/mecharm_redblock_box_teach_v1_trim2_corr_v5・学習率は v3 と同じ）、pod_prep_trim_corr.sh `v5`、lab_lib.sh の corr3（3c で PixelstoMotors/pi05-mecharm-trim-corr-lora-v2 → /workspace/ckpt/corr_v2_1499・init …/corr_v2_1499/params・exp trim_corr_v5・上げる先 PixelstoMotors/pi05-mecharm-trim-corr-lora-v3・KIOXIA checkpoints/pi05_mecharm_trim_corr_lora_v3/1499）、lab_start.sh `--model corr3`
- 推論の Pod（Log22 の b6j7nc4m74h7ru）は 18:58 に lab_stop.sh で消えていた（API で確かめた記録あり）。推論の記録は lab/Log22/pod/lab_pod.json、学習の記録は lab/Log22/train/lab_pod.json で別
- 19:51:43 に `./lab_train.sh --log Log22 --model corr3` を新しいセッションで裏に回した（pid 7138）
  - Pod id uirn5j6iy4xbyx・NVIDIA A40・1 時間 0.59 ドル。Pod の中で 30 本 / 4301 コマ・正規化 sha256 80346837…を確かめた
  - 19:56:56 学習開始。20:02 step 0、20:07 step 44/1500（進んでいる）
  - 上限 11-07 00:51（lab_train.sh が消す）
  - 出力: /Volumes/KIOXIA/r2r2r-data/lab/Log22/train/lab_train_20261106_195143.txt（nohup 側の写し nohup_lab_train_20261106_195143.txt）。まとめは同じ所の result_*.txt
  - 終わる見込み: 22:45〜23:15 ごろ（Log17 の A40 で約 3 時間）

## テスト
- pi05/test_diag_joint_hold.py 24・test_pad_build.py 3（新）・test_merge_and_config 27・test_gap_fill 7・test_hf_upload_ckpt 10・test_pad_correction 4・test_recorder_rpc 4・test_rewind_correct 69（top.mp4 の 1 件も Mac では OK）・test_trim_hold 5・test_provenance 42（skip 1）・tools/test_gamepad_teleop 90・tools/test_servo_check_pi 15 すべて OK
- test_lab_train.sh OK 214 / NG 0・test_lab_start.sh OK 153 / NG 0（test_lab_start と同時に流したときは時間の上限を見る 1 件が NG。1 本ずつ流すと OK）

## レビュー
- codex R1（必須 2: pad の送信を次の送信と組にしうる・区間をまたぐ垂れを見落とす）→ R2（必須 1: 実測のない区間で引き継ぎを切らない）→ R3（必須なし・推奨 2 のテストを足した）。docs/review_*_20261106_corr_v5_gamepad*
- 据え置いた推奨: 184650 の範囲超え（推論の安全範囲 trim2 +10° で末端約 1° が切られる）・1 コマの動きが大きいことの評価・偽物のチェックポイントの assets が v3 のまま（テストだけ）
