# 結果：20261031_46_補正データの角度を指令の道すじから作り直し動いている間も角度を記録する

- 状態：完了
- 始めた時刻：2026-10-31 19:23
- 終わった時刻：2026-10-31 19:46（24分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 7df3ccdb-8b0e-4706-a5cf-e2d569708f0e`

## Claude Code の報告

A は終わり、5本の角度を作り直しました。B は記録の側で直せる分だけ直しました。動いている間の角度の抜けは、Pi のデーモンを変えないと消えません。どう直すかを決めてほしいことに書いています。

**やったこと**

A. 角度の作り直し（corr_v2）
- 記録の抜けは、送信1回分の時間（約1.6秒）とそろっていました。デーモンは関節の指令を送ったあと、角度を読み直してから返事をします。動いている間はこの読み直しが失敗してやり直すので、返事まで時間がかかります。腕はこの間に動き終わっています。
- 埋め方: 抜けの頭で動き出し、前後の実測角を結ぶまっすぐな道すじを30°/秒で進んで、着いたら止まる形にしました。実測角があるところは実測角のままです。
- 30°/秒にした理由: trim2 の元の記録（19本）では、速度20で動いている途中も0.32秒おきに角度が読めていました。そこで測った先頭の関節の速さは、中央値で29.8°/秒です。
- 送った目標は、抜けとの対応と、着いた位置とのずれを確かめるだけに使いました。線形で埋める元の設定にすると、corr_v1 と同じ1469コマ・補正50コマになることも確かめました。

B. 記録の抜け
- 原因: 上の読み直しの間は、デーモンへの1本のつながりがふさがります。デーモンは1件ずつしか処理しないので、記録スレッドも角度を読めません。
- 直し方: 送る指令・到着の判定・待ち時間は変えていません。apply_limits と check_send_safe もそのまま通ります。足したのは次の2つです。
  - 本体が読んだ角度（到着の確かめなど）も記録に残す。
  - 送信ごとに、送った時刻・目標・速度・返事までの長さを残す。
- 偽のデーモンでのテスト（中継点3つ）で、動いている間の記録の間隔の最大は次のとおりです。

| デーモンの読み直し | 動いている間の最大の間隔 | 動いている間に残った角度 |
| --- | --- | --- |
| 1.6秒（今の形）・直す前 | 1.68秒 | 0 |
| 1.6秒（今の形）・直した後 | 1.65秒 | 0 |
| 読み直しなし（参考） | 0.10秒 | 10 |

- codex のレビュー: 必須1件・推奨6件でした。必須（Pod で tar を前のフォルダに上書きして広げてしまう）と、推奨のうち4件を直しました。

**結果**

作り直したデータ: /Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_corr_v2

| run | コマ | 補正のコマ | 補正の行 | 1コマで動く最大 j0〜j5（°） |
| --- | --- | --- | --- | --- |
| 175527 | 192 | 39 | 13 | 3.31 / 3.75 / 3.00 / 1.31 / 3.00 / 0.77 |
| 180435 | 247 | 70 | 18 | 3.00 / 3.00 / 3.00 / 1.88 / 3.00 / 1.88 |
| 181946 | 210 | 54 | 16 | 3.00 / 4.40 / 2.96 / 0.70 / 3.00 / 0.73 |
| 182545 | 301 | 160 | 47 | 3.00 / 3.00 / 2.77 / 1.84 / 4.10 / 1.32 |
| 184016 | 209 | 61 | 17 | 3.00 / 3.00 / 3.00 / 0.78 / 3.00 / 0.56 |
| 合計 | 1159 | 384 | 111 | |

- 1コマで動く最大は、corr_v1 の14〜28°から3.0〜4.4°に下がり、trim2 の3.3°に近くなりました。3°を超えた4か所は、除いた区間のつなぎ目です。
- 補正のコマは50から384に増えました。
- 合わせたデータ: mecharm_redblock_box_teach_v1_trim2_corr_v2 は24本・3876コマです。Pod へ送る tar（109 MB）もあります。corr_v1 は残してあります。
- データの点検は FAIL なし、WARN が1つです。止まっているコマが全体の21.6%で、目安の20%を超えました（補正の5本はそれぞれ約50%、続けて止まるのは最長0.3秒）。中継点ごとに「速く動いて約1.6秒止まる」を繰り返す、実機の動きどおりの形です。

テスト: すべて通りました。
- test_rewind_correct 69件
- test_merge_and_config 9件
- test_gap_fill 7件（新）
- test_recorder_rpc 4件（新）
- test_lab_start.sh OK 68・NG 0

コミット: 1b47477

**学習を回すための Pod での手順**
1. Mac から tar と pi05/ を送る（scp）。
   - tar → /workspace/data/
   - pi05/ → /workspace/r2r2r/
2. 準備のスクリプトを流す。tar を広げ、学習設定を足し、変換し、正規化の値を計算し直します。
   `bash /workspace/r2r2r/pi05/openpi_addon/pod_prep_trim_corr.sh 1500 /workspace/ckpt/3999/params`
3. 学習を始める（スクリプトは流さずにコマンドを出すだけです）。
   `cd /workspace/openpi && XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_mecharm_trim_corr_lora --exp-name=trim_corr_v2 --overwrite`

**次の実機の最初に確かめる手順**
- 1チャンクを流したあと、記録の states.csv で次の2つを見ます。
  - 本体が読んだ角度の行と、送信の行が残っているか。
  - 送信の行に残る返事までの長さが約1.6秒で、角度の抜けとそろっているか。

**変えたファイル**
- pi05/build_correction_episodes.py
- pi05/policy_recorder.py
- pi05/run_policy_client.py（1行）
- pi05/openpi_addon/add_trim_corr_config.py（データを corr_v2 に向けた）
- 新しいファイル: pi05/openpi_addon/pod_prep_trim_corr.sh、pi05/test_gap_fill.py、pi05/test_recorder_rpc.py
- pi05/test_merge_and_config.py
- docs/ にレビューの依頼文と結果、logs/20261031_1945.md

**決めてほしいこと**
1. 動いている間の角度の抜けを、どう直すか。今のデーモンのままでは消えません。案は次のとおりです。
   - 案1: デーモンの送信の命令に、読み直しをしない指定を足す（何も指定しなければ今のまま）。あわせて、記録が角度を読むときは1回だけ試す形にする。
   - この場合、Pi のデーモンを入れ替える必要があります。また、送信の返事がすぐ返るので、到着を確かめ始める時刻や中継点の間隔が変わります。
   - 動いている途中で角度が読めるかどうかは、実機で測らないと分かりません。
2. 止まっているコマが約50%ある corr_v2 を、このまま学習に使うか。止まりをもっと詰めた版も作れます。
3. 学習率の予定。3999 から続けると予定が最初からやり直しになり、1,500 ステップで終わると学習率はまだ高いまま（最大の約8割）です。案は次のとおりです。
   - 立ち上がりを100ステップにする。
   - 下げきるまでを1,500ステップにする。
   - 最大の学習率を2.5e-5に下げる。
4. 正規化の値。合わせたデータで計算し直すと、3999 の学習のときと値が変わります。続きから学習するのはそれで良いか。代わりに trim2 の値をそのまま使うこともできます。
