フィジカルAI研究室を作る Log#22 | mechArm 270 の AI の直しが、ゲームパッドで1回13秒に
この記事の素材(コード・ログ・データ 40ファイル・まとめてダウンロードあり)arrow_downwardAIで読む ChatGPT・Claude などで、この記事に質問できます expand_more
小型ロボットアーム mechArm 270 を Physical Intelligence の π0.5 で動かし、失敗しかけた所を人がゲームパッドで直すと、1回の直しにかかった時間は中央の値で約13秒でした。キーを1回ずつ打って直していた前の回(10月31日と11月1日)は41〜51秒だったので、およそ4分の1です。実物のアームで9回動かして19回直し、直した所は9回とも同じ2か所でした。
この回でやったことで、次の3つが変わりました。
- 良くなること:AI が失敗しかけたときの直しが、キーボードの1°ずつから、ゲームパッドの長押しになった。つかんだあとの持ち上げ(肩を約25°)も、十字キーを押し続けるだけで済む。19回の直しで、押したのに受け付けられなかった操作は0回だった
- もたらされること:人が直した成功の記録を、次の学習データにそのまま回せるようになった。この回の成功4本を足したデータで、新しいモデル(corr3)を一晩で学習させた。前の回(LOG446)で直したアームの中の受け口のおかげで、AI の1回分の動き(推論1回分)を実行する時間も 6.6秒から1.7秒に縮んだ
- 時間・費用:推論に借りた GPU は23分21秒で約36円、学習は約3.1時間で約292円。9回の直しを全部合わせて280秒(4分40秒)で、前の回のキーボードの直しは14回で657秒だった
π0.5(パイレイテンゴ)は、米国の Physical Intelligence 社が公開しているロボット用の AI のモデルです。上から見たカメラの画像と6つの関節の角度を受け取り、次の1秒ぶんの関節の角度を返します。人が手で教えた19回のお手本と、人が直した成功の記録で学習させ、赤いブロックをつかんで白い箱に入れる作業をさせています。AI が失敗しかけたら、その場で人が関節を直し、直した動きも学習に回す。これを繰り返して、人の直しが要らなくなるところまで持っていくのが、このシリーズのいまの狙いです。
9回とも、直したのはつかむ前の根元の向き(約2°)と、つかんだあとの持ち上げ(肩を約25°)の2か所で、失敗した4回は、どれもつかんだあとにブロックが落ちていました。 落ちた回の録画では、持ち上げたあとのブロックが爪の中で斜めに回っています。つかみが浅いのか、爪の締めが緩いのかは、この記録だけでは分かっていません。
やったことの全体は次のとおりです。
| 段階 | やったこと | 結果 |
|---|---|---|
推論の補正をゲームパッドにつなぐ(11/5) | AI の推論のあとの確認で p を押すと、ゲームパッドの操作画面が開き、□ で推論に戻るようにした | アームなしの試しとテスト(新しく4件)で流れを確かめた |
実機で9回動かす(11/6 18:39〜18:58) | 借りた GPU(Runpod の A40)の上のモデル corr2 で、mechArm 270 を動かした | 成功5回・失敗4回。19回の直しはすべてゲームパッド。受付なし0回 |
| 直しと動きの時間を数える | 9回の記録から、直しの中身と時間、推論1回分の実行時間を数えた | 直しは中央13.2秒(キーの回は41〜51秒)。推論1回分は1.72秒(前は6.6秒) |
次の学習データを作る(依頼97) | 成功5本の手首を点検し、外れのない4本を前の7本に足して corr_v5 を作った | 11本・1,584コマ。185554 は手首が指令なしに約6°動いた所があり外した |
corr3 を学習する(19:51〜23:04) | corr2 から1,500ステップ続けて学習した | loss は 0.0129 から 0.0030 へ。Hugging Face と KIOXIA に置いて Pod を消した |
次は、corr3 で実機を動かし、つかんだあとに AI が自分で持ち上げるようになったか、根元の向きの直しがどこまで減るかを確かめます。
GPU を買うか借りるかの判断は、Runpod で実際に借りて学習させた費用をもとに、別のページにまとめています。
導入比較ガイドロボットAIの学習用GPU、買うか借りるか実際に借りて学習させた費用と、損益分岐の計算機で決められますarrow_forwardこの回の作業は、Claude(手順と分析を一緒に組み立てた AI)と進めました。アームとゲームパッドの操作と、目で見た判断はこちらで行い、記録の集計と推論のプログラムの直しは Claude が行っています。次の学習データづくりと学習の準備は Claude Code(プログラムを書く AI)に依頼箱を通して頼んでいます。ここから下は、使ったコマンド・出力・依頼文・集計のコードを全量で載せた作業ログです。ログの中の Pod の IP アドレスとポート番号は <POD_IP> と <SSH_PORT> に置き換えて記録されています。鍵(Runpod と Hugging Face のアクセストークン)は、どこにも載せていません。費用の円は 1ドル=158円 で計算しています。結果の数字は記録から数えた値で、見込みのものは見込みと書いています。
作業ログ ― ゲームパッドの補正を π0.5 の推論につなぎ、9回直して、直した記録で corr3 を学習するまで
この回で使う言葉
| 言葉 | 意味 |
|---|---|
| 推論1回分(チャンク) | AI に1回問い合わせて返ってくる、次の1秒ぶん(10ステップ)の関節の角度。プログラムはこれを1つ受け取るたびに止まり、実行するかを聞く。記録の「推論3」は、0から数えて4つ目 |
| p(ゲームパッドで補正) | この回で足した操作。推論のあとの確認で p を押すと、ゲームパッドの操作画面が開く。直し終えて □ を押すと、直した姿勢から AI に戻る |
| c(キーで補正) | 前の回まで使っていた直し方。キーで関節を選び、1回押すごとに決まった角度だけ動かす |
| 1刻み・長押し | ゲームパッドの十字キーの2つの押し方。短く押して離すと1°だけ動く。0.4秒より長く押し続けると、15°先の目標へ送り、離したところで止める(LOG446 で決めた形) |
| j0〜j5 | mechArm 270 の6つの関節。j0 は根元の回転、j1 は肩、j2 はひじ、j3〜j5 は手首 |
| daemon(デーモン) | アームの中の小さな計算機(Raspberry Pi)で動き続け、Mac からの指令を受けて関節を動かすプログラム。推論もゲームパッドも、ここを通ってアームを動かす |
| corr2・corr3 | 人が直した成功の記録を足して学び直したモデルの呼び名。corr2 は前の回(LOG422 のあと)に作ったもので、この回の実機で使った。corr3 は、この回の記録を足して corr2 から続けて学習したもの |
| corr_v5 | corr3 の学習に足したデータ。人が直した成功の記録11本 |
| 学習データの範囲 | お手本19回で関節が通った角度の幅に、10°の余裕を足したもの。推論で送る目標は、この範囲の外へ出さない |
11/5 19:30 推論の補正をゲームパッドでできるようにした(run_policy_client.py に p を足した)
この記事のコード・ログ・データは、1ファイルずつ下に置いています。全文はリンク先にあります。
ファイルの一覧(40本)
01_sec02.txt ― commit cd2fb46 の差分(run_policy_client.py・gamepad_teleop.py・テスト)・23,635字
02_sec03.txt ― Pod の準備の端末の記録 lab_start_20261106_183505.txt(1〜454行目)・13,389字
03_sec04.txt ― 1回目 18:39 の端末の記録(成功・lab_start_20261106_183505.txt 455〜805行目) / 1回目(pi05_20261106_183926)・32,711字
04_sec04.txt ― 2回目 18:43 の端末の記録(失敗・806〜1013行目) / 2回目(pi05_20261106_184312)・21,619字
05_sec04.txt ― 3回目 18:44 の端末の記録(成功・1014〜1265行目) / 3回目(pi05_20261106_184452)・25,338字
06_sec04.txt ― 4回目 18:46 の端末の記録(成功・1266〜1541行目) / 4回目(pi05_20261106_184650)・26,962字
07_sec04.txt ― 5回目 18:49 の端末の記録(成功・1542〜1790行目) / 5回目(pi05_20261106_184906)・24,948字
08_sec04.txt ― 6回目 18:50 の端末の記録(失敗・1791〜1967行目) / 6回目(pi05_20261106_185050)・19,055字
09_sec04.txt ― 7回目 18:52 の端末の記録(失敗・1968〜2157行目) / 7回目(pi05_20261106_185225)・19,675字
10_sec04.txt ― 8回目 18:54 の端末の記録(失敗・2158〜2353行目) / 8回目(pi05_20261106_185415)・20,439字
11_sec04.txt ― 9回目 18:55 の端末の記録(成功・2354行目〜最後) / 9回目(pi05_20261106_185554)と、かかった時間のまとめ・27,418字
12_log450_table.py.txt ― log450_table.py(9回の直しと、推論1回分の実行時間をならべる)・4,736字
13_Pod_lab_Log22_serve.log_lab_Log22_serve.log.txt ― Pod のサーバーの記録 lab/Log22/serve.log / lab/Log22/serve.log・4,060字
14_sec10.md ― 依頼文 20261106_97_ゲームパッドで直した成功5本でcorr_v5を作り続きの学習を回す.md / 依頼97の依頼文・3,153字
15_sec10.md ― Claude Code の報告 20261106_97_..._20261106_1859.md / 依頼97の結果(Claude Code の報告)・5,862字
16_joint_hold_20261106.txt_docs_diag_joint_hold_20261106.txt ― 手首の点検の出力 docs/diag_joint_hold_20261106.txt / docs/diag_joint_hold_20261106.txt・12,485字
17_sec10.md ― 依頼97の作業の記録 logs/20261106_2010.md / logs/20261106_2010.md・5,623字
18_codex_3_docs_review_request_20261106_corr_v5_gamepad.md ― codex のレビュー(3回) / 1回目の依頼文 docs/review_request_20261106_corr_v5_gamepad.md・4,311字
19_codex_3_docs_review_result_20261106_corr_v5_gamepad_codex.md ― codex のレビュー(3回) / 1回目の結果 docs/review_result_20261106_corr_v5_gamepad_codex.md・3,209字
20_codex_3_docs_review_result_20261106_corr_v5_gamepad_codex_r2.md ― codex のレビュー(3回) / 2回目の結果 docs/review_result_20261106_corr_v5_gamepad_codex_r2.md・107,480字
21_codex_3_docs_review_result_20261106_corr_v5_gamepad_codex_r3.md ― codex のレビュー(3回) / 3回目の結果 docs/review_result_20261106_corr_v5_gamepad_codex_r3.md・168,036字
22_sec11.txt ― lab_train の端末の記録 lab_train_20261106_195143.txt / lab/Log22/train/lab_train_20261106_195143.txt・33,673字
23_train_provenance.json_lab_Log22_train_train_provenance.json ― 学習の由来 train_provenance.json / lab/Log22/train/train_provenance.json・3,709字
24_Pod_prep_trim_corr.log_lab_Log22_train_prep_trim_corr.log.txt ― Pod の準備の記録 prep_trim_corr.log / lab/Log22/train/prep_trim_corr.log・12,259字
25_train_trim_corr_v5.log_lab_Log22_train_train_trim_corr_v5.log.txt ― 学習の記録 train_trim_corr_v5.log / lab/Log22/train/train_trim_corr_v5.log・132,921字
26_GPU_gpu_train.csv_30_lab_Log22_train_gpu_train.csv ― GPU の記録 gpu_train.csv(30秒おき) / lab/Log22/train/gpu_train.csv・28,981字
27_Pod_pod_checkpoints.tsv_lab_Log22_train_pod_checkpoints.tsv.txt ― Pod の中のチェックポイントの一覧 pod_checkpoints.tsv / lab/Log22/train/pod_checkpoints.tsv・8,123字
28_client.py_commit_cd2fb46_pi05_run_policy_client.py.txt ― pi05/run_policy_client.py(commit cd2fb46) / pi05/run_policy_client.py・84,372字
29_teleop.py_commit_cd2fb46_tools_gamepad_teleop.py.txt ― tools/gamepad_teleop.py(commit cd2fb46) / tools/gamepad_teleop.py・78,081字
30_tion.py_4_commit_cd2fb46_pi05_test_pad_correction.py.txt ― pi05/test_pad_correction.py(テスト4件・commit cd2fb46) / pi05/test_pad_correction.py・8,150字
31_eop.py_90_commit_cd2fb46_tools_test_gamepad_teleop.py.txt ― tools/test_gamepad_teleop.py(テスト90件・commit cd2fb46) / tools/test_gamepad_teleop.py・71,273字
32_t_hold.py_commit_284dfd7_pi05_diag_joint_hold.py.txt ― pi05/diag_joint_hold.py(手首の点検・commit 284dfd7) / pi05/diag_joint_hold.py・24,892字
33_old.py_24_commit_284dfd7_pi05_test_diag_joint_hold.py.txt ― pi05/test_diag_joint_hold.py(テスト24件・commit 284dfd7) / pi05/test_diag_joint_hold.py・21,552字
34_uild.py_3_commit_284dfd7_pi05_test_pad_build.py.txt ― pi05/test_pad_build.py(テスト3件・commit 284dfd7) / pi05/test_pad_build.py・6,916字
35_config.py_commit_284dfd7_pi05_openpi_addon_add_trim_corr_config.py.txt ― pi05/openpi_addon/add_trim_corr_config.py(commit 284dfd7) / pi05/openpi_addon/add_trim_corr_config.py・7,547字
36_m_corr.sh_commit_284dfd7_pi05_openpi_addon_pod_prep_trim_corr.sh.txt ― pi05/openpi_addon/pod_prep_trim_corr.sh(commit 284dfd7) / pi05/openpi_addon/pod_prep_trim_corr.sh・5,222字
37_ab_lib.sh_commit_284dfd7_lab_lib.sh.txt ― lab_lib.sh(commit 284dfd7) / lab_lib.sh・30,579字
38_start.sh_commit_284dfd7_lab_start.sh.txt ― lab_start.sh(commit 284dfd7) / lab_start.sh・22,624字
39_train.sh_commit_284dfd7_lab_train.sh.txt ― lab_train.sh(commit 284dfd7) / lab_train.sh・46,247字
40_commit_284dfd7_lab__.sh.txt ― commit 284dfd7 の学習まわりの差分(lab_*.sh・設定・テスト) / commit 284dfd7 の差分(lab_lib.sh・lab_start.sh・lab_train.sh・lab_train_fakes.sh・テスト・設定)・32,869字
前の回(LOG446)で、ゲームパッドで mechArm 270 を手で動かす道具(tools/gamepad_teleop.py)を作りました。ただ、それは推論とは別に起動する道具で、AI の推論の途中で使う直し(pi05/run_policy_client.py の c)は、キーボードで1°ずつ打つ形のままでした。そこで、推論のあとの確認にゲームパッドの直しを足しました。
最初は、p を押したときに gamepad_teleop を別のプログラムとして起動し、直し終えたら閉じる形を考えました。gamepad_teleop をほとんど変えずに済むからです。ところが、アームの中の daemon のコードを読むと、つながりを1本ずつしか受けない作りでした(listen(1) で受け、1本のつながりが切れるまで次を受けない)。推論のプログラムがつながったままだと、別のプログラムのゲームパッドは待たされて動きません。推論の側を切ると、今度は記録係(上カメラと関節の角度を1秒10コマで残す部分)が角度を読めなくなり、直している間の動きが学習データに残りません。
そのため、gamepad_teleop の操作の部分を、推論と同じプログラムの中で動かす形にしました。daemon へのつながりと、送る順番をそろえる鍵は、推論・記録係・ゲームパッドで共有します。
- ねらい:AI が失敗しかけた所を、LOG446 で固めたゲームパッドの操作で直し、その動きをそのまま学習データに残す
- 変わったこと:推論のあとの確認に p を足した。p で gamepad_teleop と同じ画面が開き、操作・送り方・守り(関節の動かせる範囲)は LOG446 と同じ。□ で、直した姿勢から推論に戻る。直している間の記録は補正(correct)として残り、爪の指令は送った瞬間に記録に入る。押した操作は log.jsonl に1つずつ残る
- 見込める効果:キーボードで1°ずつ打っていた直しが短くなる見込み(測った結果は、このあとの直しの時間の節)
守りは gamepad_teleop と同じにしました(関節の物理的な可動域、手首 j4 の −90〜+60°、肩 j1 は 90.87° まで)。学習データの範囲より広いので、範囲の外で □ を押したときは、次の推論で端へ切られるか止まることを画面に出します。直した補正は、推論に戻ったあと b で巻き戻せます(送った目標を逆にたどる。爪を動かした補正は、キーの補正と同じく巻き戻さない)。
テストは、新しく pi05/test_pad_correction.py の4件と、tools/test_gamepad_teleop.py の1件(動いている間の □ を断る)を足しました。本物の pygame(ゲームパッドを読むライブラリ)の画面を画面なしで動かし、偽のコントローラーの押しを流して確かめています。前からあるテストも通りました(pi05/test_rewind_correct.py の録画ファイルを見る1件だけは、Claude の作業環境の Linux では変更の前から落ち、Mac では通ることを依頼97で確かめています)。この回のコードは、記事の終わりに全文を載せています。
commit cd2fb46 の差分(run_policy_client.py・gamepad_teleop.py・テスト)
commit cd2fb4602ad724108e7c3b4f9b118b862801012e
Author: Eiichi Shimazu <studio@adaptdesign.jp>
Date: Thu Nov 5 10:42:07 2026 +0000
run_policy_client: 推論のあとの確認に p (ゲームパッドで補正) を足す. gamepad_teleop を同じプロセスで動かし □ で推論に戻る (LOG450)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LevEXVQCng1HbyW9QDciA611/6 18:35 corr2 で Pod を立てた(lab_start.sh)
実機の前に、上カメラ(スマホ)・Pi の電源・ゲームパッドの Bluetooth をつないでから、Mac で次の1行を打ちました。
cd ~/r2r2r-scripts && ./lab_start.sh --gpu A40 --log Log22 --model corr2
Pod を作ってからサーバーが待ち受けるまでは214秒でした(Pod を作る2秒・立ち上がり28秒・スクリプトを送る56秒・鍵10秒・モデルを取る32秒・openpi 14秒・uv sync 21秒・設定2秒・サーバーの起動44秒・トンネル2秒・デーモンの確かめ3秒)。最初の推論だけ 52,970ms かかりました。サーバーが最初の1回だけ、計算の組み立て(コンパイル)をするためです。2回目からは中央の値で691ms でした。
Pod の準備の端末の記録 lab_start_20261106_183505.txt(1〜454行目)
[LAB ] 2026-11-06 18:35:05 GPU=NVIDIA A40 episode=run_0001_20261019_194818 log=/Volumes/KIOXIA/r2r2r-data/lab/Log22
[MODEL ] --model corr2: corr の 1499 から trim2_corr_v4b で続きを学習した 1499 (依頼 57 / 58)
PixelstoMotors/pi05-mecharm-trim-corr-lora-v2 → /workspace/ckpt/corr_v2_1499 設定 pi05_mecharm_trim_corr_v4_lora assets local/mecharm_redblock_box_teach_v1_trim2_corr_v4b
=== 1. Pod を作る
[POD ] 作った: id b6j7nc4m74h7ru GPU=NVIDIA A40 1時間 0.59 ドル (記録 /Volumes/KIOXIA/r2r2r-data/lab/Log22/pod/lab_pod.json)
(2 秒)
実機の1〜9回目(18:39〜18:58):成功5回・失敗4回、直しは19回ともゲームパッド
9回の結果と直しの中身は次のとおりです。直しの欄の角度は、直しを始めたときと終えたときの実測の差(1°未満の関節は省いた)です。
| 回 | 記録 | 結果 | 1つ目の直し(つかむ前) | 2つ目の直し(つかんだあと) |
|---|---|---|---|---|
| 1 | pi05_20261106_183926 | 成功 | 推論3のあと 17.9秒・j0 +2.1° | 推論8のあと 33.4秒・j1 −32.5°、j4 +17.2° |
| 2 | pi05_20261106_184312 | 失敗 | 推論3のあと 13.2秒・j0 +2.0° | 推論8のあと 12.7秒・j1 −26.7° |
| 3 | pi05_20261106_184452 | 成功 | 推論3のあと 20.1秒・j0 +3.3° | 推論6のあと 11.1秒・j1 −25.2° |
| 4 | pi05_20261106_184650 | 成功 | 推論3のあと 9.8秒・j0 +1.2° | 推論7のあと 26.6秒・j1 −43.8°、j2 +17.9° |
| 5 | pi05_20261106_184906 | 成功 | 推論3のあと 9.4秒・j0 +2.1° | 推論7のあと 13.4秒・j1 −24.8° |
| 6 | pi05_20261106_185050 | 失敗 | 推論3のあと 13.3秒・j0 +3.2° | 推論7のあと 15.9秒・j1 −29.2° |
| 7 | pi05_20261106_185225 | 失敗 | 推論3のあと 8.9秒・j0 +2.0° | 推論7と8のあとの2回 12.1秒・10.4秒・j1 −12.8° |
| 8 | pi05_20261106_185415 | 失敗 | 推論3のあと 9.8秒・j0 +2.1° | 推論8のあと 18.0秒・j1 −12.0° |
| 9 | pi05_20261106_185554 | 成功 | 推論3のあと 9.9秒・j0 +3.0° | 推論6のあと 15.0秒・j1 −24.1°、j4 +6.2° |
どの回も流れは同じでした。AI がブロックの上まで下りてきたところ(推論3のあと)で、爪の真ん中にブロックが来るよう、十字キーの左右で根元 j0 を1°ずつ2〜3回回しました。AI が爪を閉じたあと(推論4か5)、持ち上げが足りないまま箱の方へ向かう動きになったところで、十字キーの上を長押しして肩 j1 を戻し(j1 は小さいほどアームが上がる)、ブロックを持ち上げました。そのあとは、成功した5回とも AI が箱の上まで運び、爪を開いて、HOME の方へ戻るところまで自分で続けています。
失敗の4回は、つかんだあとにブロックが落ちて、そこで h(HOME に戻して終える)を押しました。落ちたときの様子は、このあとの節にまとめています。6回目の結果の入力は、記録の画面に y n と残っていますが、y を消して n を打ち直したもので、記録(pi05_20261106_185050.json)は失敗です。
ゲームパッドの画面を開くたびに、ターミナルに objc[...]: Class ... is implemented in both ...cv2/.dylibs/libSDL2... and ...pygame/.dylibs/libSDL2... という警告が十数行出ます。カメラの読み込み(cv2)と pygame が、同じ部品を別々に持っているためです。LOG436 から出ているもので、動きには影響していません。
1回目 18:39 の端末の記録(成功・lab_start_20261106_183505.txt 455〜805行目)
1回目(pi05_20261106_183926)
(44 秒)
=== 5. Mac の 8000 番へのトンネル
[TUNNEL] localhost:8000 → Pod の 8000 番 (pid 53112. このスクリプトが終わると閉じる)
(2 秒)
=== 6. デーモンの状態
--- process2回目 18:43 の端末の記録(失敗・806〜1013行目)
2回目(pi05_20261106_184312)
[SEND] pi05_chunk015_via09: send_angles (single) [ +3.65, +4.49, +2.24, -0.73, -4.62, -30.75] speed=20 wait=0.0s (pre max|Δ|=2.54°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.54° (tol 3.0°)
[VIA ] step 9 Δ= -1.4 -2.5 -2.1 -0.3 +1.5 -0.1 着いた
[STATE ] 目標を渡す 目標と実測の最大差 2.15°(関節 j2)
[016] 推論 1461ms 10ステップ先 Δ= -2.6 -2.6 -2.2 -0.3 +1.6 -0.1
[VIA ] 中継点 4 点: step 2, 5, 8, 9
Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] speed=20 wait=0.0s (pre max|Δ|=5.97°, post-send timeout 8.0s)3回目 18:44 の端末の記録(成功・1014〜1265行目)
3回目(pi05_20261106_184452)
[SEND] pi05_chunk009_via09: send_angles (single) [ +37.50, +42.13, +10.75, +2.31, -62.79, -29.97] speed=20 wait=0.0s (pre max|Δ|=2.60°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.64° (tol 3.0°)
[VIA ] step 9 Δ= +0.2 +1.1 -2.6 +0.8 -1.5 -0.5 着いた
[STATE ] 目標を渡す 目標と実測の最大差 1.55°(関節 j2)
[010] 推論 1702ms 10ステップ先 Δ= +4.6 +15.6 -7.5 +2.1 -8.5 -1.1
[VIA ] 中継点 4 点: step 2, 5, 8, 9
Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] speed=20 wait=0.0s (pre max|Δ|=62.22°, post-send timeout 11.3s)4回目 18:46 の端末の記録(成功・1266〜1541行目)
4回目(pi05_20261106_184650)
[SEND] pi05_chunk011_via09: send_angles (single) [ +25.08, +26.35, +4.86, +0.71, -29.83, -31.27] speed=20 wait=0.0s (pre max|Δ|=4.67°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.74° (tol 3.0°)
[VIA ] step 9 Δ= -2.2 -4.7 -1.0 -1.4 +4.4 +0.5 着いた
[STATE ] 目標を渡す 目標と実測の最大差 1.77°(関節 j1)
[012] 推論 550ms 10ステップ先 Δ=-22.0 -23.5 -1.7 -1.3 +28.3 +0.8
[VIA ] 中継点 4 点: step 2, 5, 8, 9
Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] speed=20 wait=0.0s (pre max|Δ|=30.67°, post-send timeout 8.0s)5回目 18:49 の端末の記録(成功・1542〜1790行目)
5回目(pi05_20261106_184906)
[SEND] pi05_chunk013_via09: send_angles (single) [ +21.96, +22.55, +5.07, +1.27, -29.76, -31.15] speed=20 wait=0.0s (pre max|Δ|=4.25°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=1.79° (tol 3.0°)
[VIA ] step 9 Δ= -2.7 -4.3 -1.1 -1.1 +4.1 +0.6 着いた
[STATE ] 目標を渡す 目標と実測の最大差 1.79°(関節 j1)
[014] 推論 829ms 10ステップ先 Δ=-14.3 -16.0 -2.7 -2.3 +20.2 +0.7
[VIA ] 中継点 4 点: step 2, 5, 8, 9
Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] speed=20 wait=0.0s (pre max|Δ|=30.58°, post-send timeout 8.0s)6回目 18:50 の端末の記録(失敗・1791〜1967行目)
6回目(pi05_20261106_185050)
[SEND] pi05_chunk011_via09: send_angles (single) [ +39.44, +45.86, +5.74, +2.64, -56.44, -30.97] speed=20 wait=0.0s (pre max|Δ|=3.58°, post-send timeout 8.0s)
[SEND] arrival OK: max|Δ|=2.09° (tol 3.0°)
[VIA ] step 9 Δ= -0.4 -3.3 -1.4 +0.3 +3.7 -0.4 着いた
[STATE ] 目標を渡す 目標と実測の最大差 2.09°(関節 j4)
[012] 推論 549ms 10ステップ先 Δ=-18.1 -23.5 -2.3 -2.5 +26.8 -0.2
[VIA ] 中継点 4 点: step 2, 5, 8, 9
Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] speed=20 wait=0.0s (pre max|Δ|=57.74°, post-send timeout 10.7s)7回目 18:52 の端末の記録(失敗・1968〜2157行目)
7回目(pi05_20261106_185225)
[接続] PS4 Controller GUID=03008fe54c050000cc09000000016800 軸=6 ボタン=16
[長押し] j1 を +55.45° → +29.35° まで(目標を 3 回送信。止めます)
[PAD ] 補正 2 を終えました (16.0 秒, 送った目標 3 回). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[008] 推論 825ms 10ステップ先 Δ=+11.6 +10.3 -2.7 +2.8 -4.1 -1.9
[VIA ] 中継点 4 点: step 2, 5, 8, 9
Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] speed=20 wait=0.0s (pre max|Δ|=63.89°, post-send timeout 11.6s)8回目 18:54 の端末の記録(失敗・2158〜2353行目)
8回目(pi05_20261106_185415)
[接続] PS4 Controller GUID=03008fe54c050000cc09000000016800 軸=6 ボタン=16
[長押し] j1 を +55.28° → +46.58° まで(目標を 1 回送信。止めます)
[PAD ] 補正 3 を終えました (10.4 秒, 送った目標 2 回). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[009] 推論 787ms 10ステップ先 Δ=+19.5 +2.7 -19.6 +3.7 +6.5 -3.5
[VIA ] 中継点 4 点: step 2, 5, 8, 9
Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] speed=20 wait=0.0s (pre max|Δ|=61.52°, post-send timeout 11.2s)9回目 18:55 の端末の記録(成功・2354行目〜最後)
9回目(pi05_20261106_185554)と、かかった時間のまとめ
[長押し] j1 を +54.05° → +50.71° まで(目標を 1 回送信。止めます)
[長押し] j1 を +46.31° → +46.31° まで(目標を 1 回送信。止めます)
[PAD ] 補正 2 を終えました (18.0 秒, 送った目標 3 回). この姿勢から推論に戻ります
[STATE ] 実測を渡す (直前に送った目標がない)
[009] 推論 1464ms 10ステップ先 Δ=+21.1 +1.0 -13.2 +3.0 +4.8 -2.6
[VIA ] 中継点 4 点: step 2, 5, 8, 9
Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > h
[SEND] pi05_home: send_angles (single) [ +0.00, +0.00, +0.00, +0.00, +0.00, -30.00] speed=20 wait=0.0s (pre max|Δ|=60.90°, post-send timeout 11.1s)9回の直しをならべると、直したのは毎回同じ2か所だった
9回の記録(KIOXIA の runs/pi05_policy/pi05_20261106_*/log.jsonl)から、直しの中身を数えました。
| 直し | 回数 | 動いた関節 | かかった時間 |
|---|---|---|---|
| つかむ前(推論3のあと) | 9回 | j0 9回(中央 +2.1°・+1.2〜+3.3°) | 中央 9.9秒・8.9〜20.1秒 |
つかんだあと(推論6〜8のあと) | 10回 | j1 9回(中央 −25.2°・−43.8〜−12.0°)、j4 5回、j2 3回 | 中央 14.2秒・10.4〜33.4秒 |
この2か所は、キーで直していた前の回(LOG422)と同じです。モデルを corr から corr2 に学び直しても、根元の向きが約2°足りないことと、つかんだあとの持ち上げが足りないことは変わっていません。corr2 の学習データ(corr_v4b)には、この2か所を直した記録が7本入っていました。
つかんだあとの直しのうち3回は、j1 と一緒に手首 j4 も +3〜17° 動いています。十字キーで動かしたのは j1 だけなので、j4 は指令なしに動いたことになります。1回目の +17.2° がいちばん大きく、この回は成功しています。手首の点検(依頼97)では、この動きも見ています。
log450_table.py の出力
## 11/6 の9回 (pi05_20261106_*)
| 回 | 記録 | 結果 | 実行した推論 | 爪を閉じた推論 | 爪を開いた推論 | ゲームパッドの補正 (推論 何番のあと: 秒・送った回数・実測の変化) |
|---|---|---|---|---|---|---|
| 1 | pi05_20261106_183926 (18:39) | 成功 | 14 | [5] | [12] | 推論3: 17.9秒・2回・j0 +2.1° / 推論8: 33.4秒・7回・j1 -32.5°, j4 +17.2° |
| 2 | pi05_20261106_184312 (18:43) | 失敗 | 8 | [5] | [] | 推論3: 13.2秒・2回・j0 +2.0° / 推論8: 12.7秒・3回・j1 -26.7°, j2 +1.1°, j4 +3.6° |
| 3 | pi05_20261106_184452 (18:44) | 成功 | 10 | [4] | [9] | 推論3: 20.1秒・11回・j0 +3.3° / 推論6: 11.1秒・3回・j1 -25.2°, j2 +1.2°, j4 +3.8° |
| 4 | pi05_20261106_184650 (18:46) | 成功 | 12 | [5] | [11] | 推論3: 9.8秒・1回・j0 +1.2° / 推論7: 26.6秒・6回・j1 -43.8°, j2 +17.9° |
| 5 | pi05_20261106_184906 (18:49) | 成功 | 10 | [4] | [10] | 推論3: 9.4秒・2回・j0 +2.1°, j4 -1.4° / 推論7: 13.4秒・4回・j1 -24.8° |
| 6 | pi05_20261106_185050 (18:50) | 失敗 | 6 | [5] | [] | 推論3: 13.3秒・3回・j0 +3.2° / 推論7: 15.9秒・3回・j1 -29.2° |
| 7 | pi05_20261106_185225 (18:52) | 失敗 | 6 | [5] | [] | 推論3: 8.9秒・2回・j0 +2.0° / 推論7: 12.1秒・4回・変化 1° 未満 / 推論8: 10.4秒・2回・j1 -12.8°, j4 +2.7° |
| 8 | pi05_20261106_185415 (18:54) | 失敗 | 7 | [5] | [] | 推論3: 9.8秒・2回・j0 +2.1°, j4 -1.6° / 推論8: 18.0秒・3回・j1 -12.0° |
| 9 | pi05_20261106_185554 (18:55) | 成功 | 10 | [4] | [10] | 推論3: 9.9秒・3回・j0 +3.0° / 推論6: 15.0秒・6回・j1 -24.1°, j4 +6.2° |
## ゲームパッドの補正 (19回)
- つかむ前: 9回 かかった時間 中央 9.9秒・最短 8.9秒・最長 20.1秒・合計 112.1秒 送った回数の中央 2 受付なし 合計 0
- つかんだあと: 10回 かかった時間 中央 14.2秒・最短 10.4秒・最長 33.4秒・合計 168.5秒 送った回数の中央 3.5 受付なし 合計 0
- 合わせて: 19回 かかった時間 中央 13.16秒・最短 8.9秒・最長 33.4秒・合計 280.7秒 送った回数の中央 3 受付なし 合計 0
- つかむ前 に動いた関節: j0 9回 (中央 +2.1°・+1.2〜+3.3°), j4 2回 (中央 -1.5°・-1.6〜-1.4°)
- つかんだあと に動いた関節: j1 9回 (中央 -25.2°・-43.8〜-12.0°), j2 3回 (中央 +1.2°・+1.1〜+17.9°), j4 5回 (中央 +3.8°・+2.7〜+17.2°)
- 学習データの範囲の外で終えた補正: pi05_20261106_184650 推論7のあと j[2]
## 推論1回分を実行するのにかかった時間 (t_exec_end - t_exec_start)
| 日 | 記録の数 | 実行した推論 | 中央 | 最短 | 最長 | 中継点4点の推論の中央 |
|---|---|---|---|---|---|---|
| 10/31 | 10 | 65 | 6.65秒 | 5.58秒 | 11.07秒 | 6.64秒 (52回) |
| 11/01 | 12 | 68 | 6.63秒 | 2.39秒 | 30.21秒 | 6.62秒 (53回) |
| 11/06 | 9 | 83 | 1.72秒 | 0.55秒 | 9.74秒 | 1.71秒 (69回) |
## 1回の補正にかかった時間 (correction の accept 行の t_end - t_start)
| 日 | 直し方 | 補正の数 | 中央 | 最短 | 最長 | 合計 |
|---|---|---|---|---|---|---|
| 10/31 | キー (c) | 21 | 41.3秒 | 15.4秒 | 109.2秒 | 924.3秒 |
| 11/01 | キー (c) | 14 | 51.23秒 | 12.0秒 | 86.9秒 | 657.1秒 |
| 11/06 | ゲームパッド (p) | 19 | 13.16秒 | 8.9秒 | 33.4秒 | 280.6秒 |
log450_table.py(9回の直しと、推論1回分の実行時間をならべる)
#!/usr/bin/env python3
"""log450_table.py — 11/6 (Log22) の実機推論9回を, ゲームパッドの補正と推論の実行時間でならべる (LOG450).
使い方: python3 log450_table.py /Volumes/KIOXIA/r2r2r-data/runs/pi05_policy
- 11/6 の9回: 回ごとの結果・つかんだ推論・離した推論・ゲームパッドの補正 (始めと終わりの実測の差)
- 推論1回分を実行するのにかかった時間 (t_exec_end - t_exec_start) を 10/31・11/1・11/6 でならべる
元の記録は読むだけ (書かない).
"""1回の直しは、キーの41〜51秒から、ゲームパッドで約13秒になった
| 日 | 直し方 | 直しの数 | 1回の直し(中央) | 最短〜最長 | 合計 |
|---|---|---|---|---|---|
| 10/31(LOG417) | キー(c) | 21回 | 41.3秒 | 15.4〜109.2秒 | 924.3秒 |
| 11/1(LOG422) | キー(c) | 14回 | 51.2秒 | 12.0〜86.9秒 | 657.1秒 |
| 11/6(この回) | ゲームパッド(p) | 19回 | 13.2秒 | 8.9〜33.4秒 | 280.6秒 |
数えたのは、直しを始めてから推論に戻るまでの時間です(log.jsonl の補正の行の t_end − t_start)。日によってモデルが違い(10/31 は最初のモデル、11/1 は corr、11/6 は corr2)、直した中身もまったく同じではないので、同じ条件で比べた数字ではありません。ただ、直した所は3日とも、つかむ前の根元とつかんだあとの持ち上げの2か所でした。
縮んだ分の多くは、つかんだあとの持ち上げです。キーの補正では、1回押すごとに6つの関節の指令を送り、着いたかを確かめてから次の押しを受け付けていたので、肩を20〜30°上げるのに十数回押して待つことになりました。ゲームパッドでは、十字キーを押し続ければ1回の送信で15°先まで動き、離したところで止まります。
- ねらい:AI の失敗を人が直す手間を減らし、直した記録を集めやすくする
- 変わったこと:1回の直しは中央 41〜51秒 → 13.2秒、9回分の直しの合計は280.6秒
- 見込める効果:同じ時間で集められる、人が直した成功の記録が増える。学習データを増やす作業の重さが、直す時間ではなく、ブロックを置き直して位置を合わせる時間(1回12〜25秒)と推論の時間(1回79〜199秒)の側に移った
推論1回分の実行は、6.6秒から1.7秒になった(LOG446 の daemon の直しが効いた)
推論1回分(中継点4点まで)を実行するのにかかった時間を、日ごとにならべました(log.jsonl の t_exec_end − t_exec_start)。
| 日 | 実行した推論 | 中央 | 最短〜最長 | 中継点4点の推論の中央 |
|---|---|---|---|---|
| 10/31 | 65回 | 6.65秒 | 5.58〜11.07秒 | 6.64秒(52回) |
| 11/1 | 68回 | 6.63秒 | 2.39〜30.21秒 | 6.62秒(53回) |
| 11/6 | 83回 | 1.72秒 | 0.55〜9.74秒 | 1.71秒(69回) |
前の回(LOG446)で、アームの中の daemon が関節の角度を読み直すときの待ちを0.2秒から0.02秒にし、送ったあとの記録用の読み取りを1回だけにしました。それまでは、指令を1つ送るたびに daemon の返事が約1.6秒(角度が読めないと最長2.6秒)遅れていて、中継点4点の推論1回分は約6.6秒かかっていました。推論でアームを動かす速さ(speed 20)は変えていないので、縮んだのは送るたびの待ちの分です。
- ねらい:ゲームパッドの受付なしを減らす(LOG446 で直した理由)
- 変わったこと:推論1回分の実行は中央 6.63秒 → 1.72秒。11/1 の実機で長く感じていた、動きの合間の待ちが短くなった
- 見込める効果:1回の推論で動かす時間が短くなる。ただし、この回は推論のたびに Enter を押して確かめているので、1回分の推論(79〜199秒)の多くは人の確かめの時間で、そこはまだ縮んでいない
もう1つ効いたのが、学習データの抜けです。daemon の返事が遅かったころは、送ってから返事が来るまで記録係が角度を読めず、動いている間の角度の約98%が記録から抜けていました(依頼57)。この回の記録では、動いた角度のうち抜けの中にあるのは2.2〜2.9%でした(依頼97の報告)。抜けた所を後から埋める処理(依頼46)に頼らずに済む記録になっています。
落ちた4回は、どれもつかんだあと、肩で持ち上げてからだった
失敗の4回は、どれもブロックをつかんだあとに落としています。
| 回 | 記録に残っている、終えるまでの流れ |
|---|---|
| 2回目(18:43) | 推論8のあとに肩を長押しで持ち上げ、推論に戻って推論9を1回実行したあと、h で終えた |
| 6回目(18:50) | 推論7のあとに肩の長押しで j1 を 55.45° から 29.35° まで持ち上げ、推論8は実行せずに h で終えた |
| 7回目(18:52) | 推論7のあとと推論8のあとの2回に分けて持ち上げ、そのあと h で終えた |
| 8回目(18:54) | 推論8のあとに肩の長押しで持ち上げ、推論9は実行せずに h で終えた |
録画を見ると、成功した回はつかんだあともブロックがまっすぐ爪に挟まっていました。落ちた6回目は、持ち上げたあと、ブロックが爪の中で斜めに回っています。

考えられる原因は2つで、どちらかはまだ分かっていません。
- 長押しは速さ20(1秒に約40°)で動き出し、離したときは daemon の stop で止まる(行きすぎは約3°)。この加速と止まりの揺れで、浅くつかんだブロックが回った
- 爪を閉じる強さ(GRIP_VALUE 20)がもともと足りず、持ち上げるたびにブロックが滑っていた
成功した5回も同じ長押しで持ち上げているので、長押しだけが原因とは言えません。次に試すときは、持ち上げる前に r(爪の締め直し。開かずに閉じる指令をもう一度送る)を1回押す回と押さない回を比べると、どちらが効いているかの手がかりになります。
学習には成功した回だけを使うので、落ちた4回は学習データに入っていません。
18:58 推論の Pod を消した(23分21秒・約36円)
9回目のあとに、もう1回やるかの問いで終え、Mac で ./lab_stop.sh --log Log22 を打って Pod を消しました。
lab_stop_20261106_185821.txt
lab_stop の端末の記録
[STOP ] Log22 の Pod: id b6j7nc4m74h7ru GPU=NVIDIA A40 作った時刻 2026-11-06 18:35:07
[LOG ] serve.log を持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log22/serve.log (45 行)
[STOP ] Terminate を送った (18:58:28)
[STOP ] Pod (id b6j7nc4m74h7ru) が消えたことを API で確かめた
[COST ] 借りていた時間 23 分 21 秒 (0.39 時間) × 1時間 0.59 ドル = 約 0.23 ドル (約 36 円. 1ドル=158円)
[TUNNEL] 8000 番のトンネルは残っていません
推論の Pod の記録 lab/Log22/pod/lab_pod.json
lab/Log22/pod/lab_pod.json
{
"id": "b6j7nc4m74h7ru",
"gpu": "NVIDIA A40",
"log": "Log22",
"costPerHr": 0.59,
"created_epoch": 1793957707,
"created_at": "2026-11-06 18:35:07",
"model": "corr2",
"model_repo": "PixelstoMotors/pi05-mecharm-trim-corr-lora-v2",
"terminated_epoch": 1793959108,
"terminated_at": "2026-11-06 18:58:28",
"rented_sec": 1401
}
Pod のサーバーの記録 lab/Log22/serve.log
lab/Log22/serve.log
INFO:root:Loading model...
INFO:2026-11-06 09:38:16,568:jax._src.xla_bridge:925: Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
INFO:jax._src.xla_bridge:Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
INFO:2026-11-06 09:38:16,572:jax._src.xla_bridge:925: Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
INFO:jax._src.xla_bridge:Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
INFO:absl:orbax-checkpoint version: 0.11.13
INFO:absl:Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7a48d3860990>
INFO:absl:Restoring checkpoint from /workspace/ckpt/corr_v2_1499/params.依頼97:成功5本を点検し、次の学習データ corr_v5 を作って corr3 を学習する
成功した5回の記録で次のモデルを学習させるため、Claude Code への依頼を依頼箱(依頼のファイルを置くと、Mac の Claude Code が順に受け取って作業するしくみ)に置きました。頼んだのは3つです。
- 成功5本の手首と関節を点検し、手首が指令なしに垂れた所のある回は学習に入れない(前の回、手首のサーボが弱った回を学習に入れないために作った点検
pi05/diag_joint_hold.pyを使う) - 前の7本(corr_v4b)に、点検を通った回を足して corr_v5 を作る。ゲームパッドの直しは送り方が違う(1刻みは1関節だけ送り、長押しは15°先へ送って離したら止める)ので、学習データの作り方(
pi05/build_correction_episodes.py)が正しく扱えるかを先に確かめる - corr2 から1,500ステップ続けて学習する設定(モデル名 corr3)を足し、Log22 として今夜の学習を始める
依頼文 20261106_97_ゲームパッドで直した成功5本でcorr_v5を作り続きの学習を回す.md
依頼97の依頼文
---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 120
---
# 依頼:ゲームパッドで直した今日の成功5本を点検し、補正データ corr_v5 を作り、corr2 から続きの学習を Log22 で回し始める(2026-11-06)
依頼57・58b(corr_v4 と corr2)の続き。今日(11/6)、モデル corr2(PixelstoMotors/pi05-mecharm-trim-corr-lora-v2 の 1499)で実機推論を9回回した。
補正は、新しく足した p(ゲームパッドで補正。コミット cd2fb46。run_policy_client.py が gamepad_teleop.py を同じプロセスで動かす)だけを使った。キーの補正 c と巻き戻し b は使っていない。依頼97で分かったことと決めたこと
依頼97は18:59に始まり、20:08に終わりました(69分)。報告のうち、この回の結果にかかわるものは次のとおりです。
- 手首の点検の作り直し:daemon を直したあとは、送る命令が0.03〜0.14秒で返るので、アームは返事のあとも目標へ向かって動いています。前の点検をそのまま使うと、ふつうの動きを外れとして大量に数えていました。そこで、ゲームパッドの送信を log.jsonl の行と組にして指令を作り、送ってすぐ返った区間では、目標へ近づいた所から離れた分を見る形に直しました。11/1 の9本の結果は、前とまったく同じ値になっています
- 入れた回:183926・184452・184650・184906 の4本。185554(9回目)は、肩を長押しで持ち上げている間に、手首 j4 が指令 −64.5° のまま −63.5° から −57.7° まで動いた(止まったあとのずれ 6.8°)ので外した
- 学習データの作り方:直す必要はなかった。直している間(状態 correct)のコマは長押しで動いている途中も含めて入り、止まった所は前と同じ決まりで詰まることを、合成した記録のテスト(
pi05/test_pad_build.py)で確かめた - corr_v5:11本・1,584コマ(直しのコマ430・止まり14.9%)。前の7本は corr_v4b とバイト単位で同じ。お手本19本と合わせて30本・4,301コマ。Pod に送る tar は117MB
- 1コマ(0.1秒)の最大の動きが、前のデータ(3.3°まで)より大きくなった。推論で最大4.8°、ゲームパッドの長押しで j1 最大6.7°。daemon を直したあとの記録はこの形になる
報告の「決めてほしいこと」には、次のように答えました。
| 決めてほしいこと | 答え |
|---|---|
184650(4回目)を入れたままでよいか。直しの終わりに j2 が学習データの範囲(上限 +31.4°)を最大11.1°超えたコマが18あり、推論ではその端の約1°が切られる | 入れたまま。切られるのは約1°で、外すとデータを作り直して学習をやり直すことになる |
1コマの動きが前より大きいデータ(推論で最大4.8°、長押しで6.7°)を入れ続けてよいか | 入れる。daemon を直したあとの実機は推論でもこの速さで動くので、学習と推論の動きがそろう |
学習のテストの偽物のモデルの名前が前の版のまま。直すか | 次のアームの依頼のついでに直す(本番の流れには関係しない) |
Claude Code の報告 20261106_97_…_20261106_1859.md
依頼97の結果(Claude Code の報告)
# 結果:20261106_97_ゲームパッドで直した成功5本でcorr_v5を作り続きの学習を回す
- 状態:完了
- 始めた時刻:2026-11-06 18:59
- 終わった時刻:2026-11-06 20:08(69分)
- 作業フォルダ:/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき:作業フォルダで `claude --resume 2a5a4788-f085-45c0-9e7d-8aa031e8de2c`
- 止められた操作:1件(いちばん下に一覧)手首の点検の出力 docs/diag_joint_hold_20261106.txt
docs/diag_joint_hold_20261106.txt
## pi05_20261106_183926 outcome=success corrections=2
粗い最大 j0= 8.0 j1= 9.1 j2= 5.5 j3= 2.0 j4= 9.6 j5= 1.8
動き途中 j0= 0.0 j1= 0.0 j2= 0.0 j3= 0.0 j4= 0.0 j5= 0.0
止まり最大 j0= 0.7 j1= 2.1 j2= 2.1 j3= 1.1 j4= 2.2 j5= 0.7
止まり90% j0= 0.5 j1= 1.9 j2= 1.6 j3= 0.6 j4= 1.8 j5= 0.6
止まり中央 j0= 0.1 j1= 0.9 j2= 0.9 j3= 0.3 j4= 0.8 j5= 0.3
止まり符号 j0= +0.0 j1= +0.9 j2= +0.9 j3= +0.1 j4= +0.2 j5= -0.1
じわじわ j0= 0.2 j1= 0.2 j2= 0.2 j3= 0.3 j4= 0.9 j5= 0.3依頼97の作業の記録 logs/20261106_2010.md
logs/20261106_2010.md
# 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 の行にある
codex のレビュー(3回)
Claude Code が書いたコードは、別の AI(codex)に読んでもらっています。1回目は直すべき点2つ(ゲームパッドの送信を次の送信と組にしてしまうことがある、区間をまたいでゆっくり垂れるのを見落とす)、2回目は1つ(角度の読みがない区間で引き継ぎを切っていない)、3回目で直すべき点がなくなりました。直したあとも、入れる4本と外す1本は変わっていません。
1回目の依頼文 docs/review_request_20261106_corr_v5_gamepad.md
# コードレビュー依頼:ゲームパッドで直した成功の点検・corr_v5・続きの学習 corr3(2026-11-06 依頼 97)
依頼 57・58(corr_v4 / corr2)の続き。11-06 にモデル corr2(PixelstoMotors/pi05-mecharm-trim-corr-lora-v2 の 1499)で実機推論を 9 回回し、補正はゲームパッドの p(コミット cd2fb46。run_policy_client.py が tools/gamepad_teleop.py を同じプロセスで動かす)だけを使った。成功 5 本(183926・184452・184650・184906・185554)を点検し、外れのない回を corr_v5 に足して、corr2 の 1499 から続きの学習(Log22・--model corr3)を回す。
## 前提として分かったこと
- 11-05 の c7992ca(daemon の読み直しを 0.02 秒に)のあと、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 の行(move の command・t_send・resends・no_check、halt の t_halt・halt_joint・measured_after_halt)にある
- 角度の抜け(0.25 秒超)は、今日の回ではほとんどない(入れる 4 本で、動いた角度のうち抜けの中の割合 model 2.2〜2.9%・correct 0.2〜32%。11-01 は 98%)。correct の抜けは、補正を始めたときの約 3.2 秒(ゲームパッドの窓を開く間。腕は止まっている)と、長押しの途中の 0.3〜0.4 秒(184650 の j1 −10.6°・j2 +13.0°)1回目の結果 docs/review_result_20261106_corr_v5_gamepad_codex.md
# codex レビュー結果:ゲームパッドの点検・corr_v5・corr3(2026-11-06 依頼 97)
依頼文: docs/review_request_20261106_corr_v5_gamepad.md(codex exec -s read-only)
**corr3 の学習・推論の向け先は整合しています。ただし、診断コードには必須修正が 2 点あります。** 今回の「4 本を採用・185554 を除外」という結果は再現しましたが、「手首の垂れを見落とさない」とはまだ断定できません。
| 項目 | 判定 | 確認結果・修正案 |
|---|---|---|2回目の依頼文 docs/review_request_20261106_corr_v5_gamepad_r2.md
# コードレビュー依頼 R2:diag_joint_hold の pad の組み方と away の引き継ぎ(2026-11-06 依頼 97)
R1(docs/review_result_20261106_corr_v5_gamepad_codex.md)の必須 2 件と推奨 1 件を pi05/diag_joint_hold.py に反映した。
1. 必須(pad 送信の対応付け): `_pad_send_for(sends, used, ts)` を、まだ組にしていない送信のうち |t_send − ts| ≤ 0.2 秒でいちばん近いものを初めての送信とし、なければ ts より前に組にした送信のうちいちばん新しいものの送り直し(resends の数まで)とする形にした。どちらもなければ pad_unknown
2. 必須(区間をまたぐ垂れ): すぐ返った区間がつづき、その関節の指令が変わらない間は、関節ごとに最小の |実測−指令| を区間をまたいで引き継ぐ(指令が変わる・すぐ返らない区間・長押しの関節では引き継がない)
3. 推奨(stop の対応): halt もいちばん近い・まだ組にしていないものと一対一で組む
テスト: pi05/test_diag_joint_hold.py に 2 件(次の送信を拾わない・0→3° と 3→6° の垂れを 6° と見る/指令が変われば引き継がない)。21 件 OK。
11-01 の 9 本は前の結果と全部同じ。11-06 の 5 本: 入れる 4 本は外れ 0(j4 の離れた分の最大 3.8°(184452))、185554 は外れ 5 区間(j4)。docs/diag_joint_hold_20261106.txt・.json を作り直した。
差分は `git diff -- pi05/diag_joint_hold.py pi05/test_diag_joint_hold.py` で見られます。
ほかの推奨(184650 の範囲・1 コマの動き・偽物の assets)は報告に書いて据え置きます。
ファイル変更・実機操作・Pod の操作・Hugging Face の操作はしないでください。読み取りだけでお願いします。日本語で、表(項目 / 判定 / 確認結果・修正案)と、必須 / 推奨 / 据え置きの分類で返してください。
2回目の結果 docs/review_result_20261106_corr_v5_gamepad_codex_r2.md
# codex レビュー結果 R2:pad の組み方と away の引き継ぎ(2026-11-06 依頼 97)
依頼文: docs/review_request_20261106_corr_v5_gamepad_r2.md(codex exec -s read-only)
差分、R1の指摘、テストと再生成レポートを読み取りだけで確認します。pad の対応付けと関節ごとの引き継ぎ条件を中心にレビューします。
exec
/bin/zsh -lc 'git diff -- pi05/diag_joint_hold.py pi05/test_diag_joint_hold.py' in /Users/shimazueiichi/r2r2r-scripts
succeeded in 127ms:3回目の依頼文 docs/review_request_20261106_corr_v5_gamepad_r3.md
# コードレビュー依頼 R3:away の引き継ぎを実測のない区間でも切る(2026-11-06 依頼 97)
R2(docs/review_result_20261106_corr_v5_gamepad_codex_r2.md)の必須 1 件と推奨を pi05/diag_joint_hold.py に反映した。
1. 必須: analyze_segments で、引き継ぎを切るかを実測の有無に関係なく区間ごとに決めるようにした(すぐ返らない区間・指令の分からない区間 = 全関節を切る/指令が変わった関節・長押しの関節 = その関節を切る)。away の計算は切った関節(NaN)を区間の頭から数える
2. 推奨: テストを足した(実測のない区間を挟む 4 通り(指令が変わる・すぐ返らない・組にできない・j4 の長押し)では引き継がず、爪だけを挟むときは引き継ぐ/stop は一対一で組む)。pi05/test_diag_joint_hold.py 23 件 OK
11-01 の 9 本は前の結果と全部同じ。11-06 の 5 本も R2 のときと全部同じ値(入れる 4 本は外れ 0、185554 は外れ 5 区間)。
差分は `git diff -- pi05/diag_joint_hold.py pi05/test_diag_joint_hold.py` で見られます。
ファイル変更・実機操作・Pod の操作・Hugging Face の操作はしないでください。読み取りだけでお願いします。日本語で、表(項目 / 判定 / 確認結果・修正案)と、必須 / 推奨 / 据え置きの分類で返してください。
3回目の結果 docs/review_result_20261106_corr_v5_gamepad_codex_r3.md
# codex レビュー結果 R3:away の引き継ぎ(2026-11-06 依頼 97)
依頼文: docs/review_request_20261106_corr_v5_gamepad_r3.md(codex exec -s read-only)
差分とR2の指摘、関連する解析処理・テストを読み取りで確認します。ファイル変更や実機・外部サービスの操作は行いません。
exec
/bin/zsh -lc 'git diff -- pi05/diag_joint_hold.py pi05/test_diag_joint_hold.py' in /Users/shimazueiichi/r2r2r-scripts
succeeded in 117ms:19:51〜23:04 corr2 から corr3 を1,500ステップ学習した(約3.1時間・約292円)
依頼97の中で、Claude Code が ./lab_train.sh --log Log22 --model corr3 を、依頼が終わっても止まらない形(nohup)で始めました。Pod を作ってから学習が始まるまで約5分、学習は 20:02 の step 0 から 22:58 の step 1500 まで約2時間56分でした。終わったあと、Hugging Face(AI のモデルとデータを置いて配るサービス。非公開の置き場所 PixelstoMotors/pi05-mecharm-trim-corr-lora-v3)と KIOXIA の checkpoints/pi05_mecharm_trim_corr_lora_v3/1499 にモデルを置き、Pod を消すところまで lab_train.sh が自動で行っています。
| step | 0 | 100 | 300 | 500 | 750 | 1000 | 1250 | 1450 |
|---|---|---|---|---|---|---|---|---|
loss(corr3・この回) | 0.0129 | 0.0048 | 0.0044 | 0.0041 | 0.0036 | 0.0034 | 0.0027 | 0.0030 |
loss(corr2・11/1 の夜) | 0.0024 | 0.0038 | 0.0041 | 0.0037 | 0.0033 | 0.0029 | 0.0024 | 0.0026 |
loss は、AI が出した動きと、学習データの動きのずれの大きさです。corr2 の学習は始めが0.0024でしたが、corr3 は0.0129から始まりました。どちらも、ひとつ前のモデルの続きから学習しています。corr3 の始めが高いのは、corr2 がまだ見たことのない動き(ゲームパッドの長押しで肩を一気に持ち上げる動きと、daemon を直したあとの速い動き)が新しいデータに入っていたためと見ています(見込み。データごとの loss は測っていない)。50ステップで0.0066まで下がり、終わりは corr2 と同じくらいの0.0030でした。
GPU は NVIDIA A40(1時間0.59ドル)で、使った GPU のメモリは最大41,283MiB(46,068MiB のうち)、学習中の使用率は中央100%でした。Pod を借りていた時間は188分2秒で、約1.85ドル(約292円)です。
lab_train の端末の記録 lab_train_20261106_195143.txt
lab/Log22/train/lab_train_20261106_195143.txt
[LOG ] ターミナルの出力を残します → /Volumes/KIOXIA/r2r2r-data/lab/Log22/train/lab_train_20261106_195143.txt
[LAB ] 2026-11-06 19:51:43 学習 GPU=NVIDIA A40 (借りられなければ NVIDIA RTX A6000 NVIDIA L40S)
--model corr3 (PixelstoMotors/pi05-mecharm-trim-corr-lora-v2 → PixelstoMotors/pi05-mecharm-trim-corr-lora-v3) データ mecharm_redblock_box_teach_v1_trim2_corr_v5
pi05_mecharm_trim_corr_v5_lora --exp-name=trim_corr_v5 steps=1500 init=/workspace/ckpt/corr_v2_1499/params 上限 5 時間 記録 /Volumes/KIOXIA/r2r2r-data/lab/Log22/train
=== 0. 送るものと Mac の道具を確かめる (19:51:43)
[DATA ] tar 116993536 バイト (/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_teach_v1_trim2_corr_v5/mecharm_redblock_box_teach_v1_trim2_corr_v5_raw_episodes.tar)
[PROV ] 始める時点のコード (284dfd7) と入力 3 つの指紋を測った学習のまとめ result_20261106_195143.txt
lab/Log22/train/result_20261106_195143.txt
lab_train.sh Log22 2026-11-06 23:04:05
結果: 成功: 学習が終わりました (step 1499, loss 0.0030). Hugging Face と KIOXIA に置き, Pod を消しました. 188 分 2 秒 (3.13 時間) × 1時間 0.59 ドル = 約 1.85 ドル (約 292 円. 1ドル=158円)
学習: pi05_mecharm_trim_corr_v5_lora --exp-name=trim_corr_v5 最後のチェックポイント 1499 最後の loss 0.0030 (Step 1450)
Hugging Face (PixelstoMotors/pi05-mecharm-trim-corr-lora-v3): ok PixelstoMotors/pi05-mecharm-trim-corr-lora-v3 に 35 ファイル 6,335,848,626 バイトを上げ, 名前・バイト数が全部合うのを確かめた
KIOXIA: /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v3/1499 に置いた (35 ファイル 6335848626 バイト. Pod 側と名前・バイト数が全部合った)
ログを持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log22/train
Pod (id uirn5j6iy4xbyx) は消した (API で確かめた)
借りていた時間 188 分 2 秒 (3.13 時間) × 1時間 0.59 ドル = 約 1.85 ドル (約 292 円. 1ドル=158円)
由来: /Volumes/KIOXIA/r2r2r-data/lab/Log22/train/train_provenance.json ・ /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_trim_corr_lora_v3/1499/train_provenance.json ・ Hugging Face (PixelstoMotors/pi05-mecharm-trim-corr-lora-v3) にも置いた
ターミナルの記録: /Volumes/KIOXIA/r2r2r-data/lab/Log22/train/lab_train_20261106_195143.txt
学習の由来 train_provenance.json
lab/Log22/train/train_provenance.json
{
"schema_version": "provenance/1",
"created_at": "2026-11-06T23:04:03+09:00",
"producer": {
"script": "lab_train.sh",
"argv": [
"--log",
"Log22",学習の Pod の記録 lab/Log22/train/lab_pod.json
lab/Log22/train/lab_pod.json
{
"id": "uirn5j6iy4xbyx",
"kind": "train",
"model": "corr3",
"gpu": "NVIDIA A40",
"log": "Log22",
"costPerHr": 0.59,
"created_epoch": 1793962306,
"created_at": "2026-11-06 19:51:46",
"config": "pi05_mecharm_trim_corr_v5_lora",
"exp": "trim_corr_v5",
"steps": 1500,
"limit_sec": 18000,
"limit_at": "2026-11-07 00:51:46",
"init": "/workspace/ckpt/corr_v2_1499/params",
"limit_hours": "5",
"prov_start": {
"code": {
"repo": "r2r2r-scripts",
"commit": "284dfd731e64353c996486432811aebb5ee47ea0",
"dirty": false,
"dirty_files": [],
"untracked_backups": [
"pi05/build_demo_episodes.py.bak_pre_LOG352_20261019"
],
"diff_sha256": null,
"measured_at": "2026-11-06T19:51:43+09:00",
"paths": [
"lab_train.sh",
"lab_lib.sh",
"provenance.py",
"pi05"
]
},
"inputs": [
{
"kind": "dataset",
"id": "mecharm_redblock_box_teach_v1_trim2_corr_v5",
"path": "datasets/mecharm_redblock_box_teach_v1_trim2_corr_v5",
"fingerprint": "files-v2:e1e00dab2768e92af00099da4799de5dda1a3f2c171e029cd2558149d7d66171",
"measured_at": "2026-11-06T19:51:44+09:00"
},
{
"kind": "checkpoint",
"id": "pi05_mecharm_trim_corr_lora_v2/1499",
"path": "checkpoints/pi05_mecharm_trim_corr_lora_v2/1499",
"fingerprint": "files-v2:2836021aa462c3099e5ca9f1b940ea70a11ac72a22572637d2df401e75c7a48a",
"hf_repo": "PixelstoMotors/pi05-mecharm-trim-corr-lora-v2",
"pod_path": "/workspace/ckpt/corr_v2_1499/params",
"measured_at": "2026-11-06T19:51:44+09:00"
},
{
"kind": "config",
"id": "add_trim_config.py",
"path": "lab/Log11/pod/add_trim_config.py",
"fingerprint": "files-v2:3d7a5ce690b205880da44fa4b20de1b5905b7fb96a91580413ecb5cd660db44c",
"sha256": "94059deb462623946344a5285f7ebd69c8041b5d820ed28fd4d383f7922f38a9",
"measured_at": "2026-11-06T19:51:44+09:00"
}
]
},
"watchdog_epoch": 1793983906,
"watchdog": "WATCHDOG run=1 pod=1 key=1 ctl=1",
"openpi": [
{
"name": "openpi",
"commit": "215abfb217dbac7d5f1273282331b9b1866c0479",
"dirty": true,
"dirty_files": [
"src/openpi/training/config.py",
"src/openpi/policies/mecharm_policy.py"
],
"expected_commit": "215abfb"
}
],
"train_started_epoch": 1793962622,
"train_started_at": "2026-11-06 19:57:02",
"terminated_epoch": 1793973588,
"terminated_at": "2026-11-06 22:59:48",
"rented_sec": 11282,
"gone_confirmed": true
}
Pod の準備の記録 prep_trim_corr.log
lab/Log22/train/prep_trim_corr.log
== 1. tar を広げる → /workspace/data/mecharm_redblock_box_teach_v1_trim2_corr_v5
エピソード 30 本 (Mac で作ったときは 30 本)
== 2. 学習設定 pi05_mecharm_trim_corr_v5_lora を足す (steps=1500 init=/workspace/ckpt/corr_v2_1499/params)
installed: pi05_mecharm_trim_corr_v5_lora (repo_id=local/mecharm_redblock_box_teach_v1_trim2_corr_v5, 1500 steps, init=/workspace/ckpt/corr_v2_1499/params)
== 3. LeRobot 形式に変換 (local/mecharm_redblock_box_teach_v1_trim2_corr_v5)
Map: 0%| | 0/118 [00:00<?, ? examples/s]
Map: 84%|████████▍ | 99/118 [00:00<00:00, 972.36 examples/s]学習の記録 train_trim_corr_v5.log
lab/Log22/train/train_trim_corr_v5.log
10:57:13.096 [I] Running on: a4e3c12d84ee (1084:train.py:196)
INFO:2026-11-06 10:57:13,626:jax._src.xla_bridge:925: Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
10:57:13.626 [I] Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig' (1084:xla_bridge.py:925)
INFO:2026-11-06 10:57:13,631:jax._src.xla_bridge:925: Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
10:57:13.631 [I] Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory (1084:xla_bridge.py:925)
10:57:14.790 [I] Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7664e0596590> (1084:base_pytree_checkpoint_handler.py:334)
10:57:14.790 [I] Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7664e0596590> (1084:base_pytree_checkpoint_handler.py:334)
10:57:14.790 [I] [thread=MainThread] Failed to get flag value for EXPERIMENTAL_ORBAX_USE_DISTRIBUTED_PROCESS_ID. (1084:multihost.py:390)train_run.log
lab/Log22/train/train_run.log
2026-11-06 10:56:59 始める
2026-11-06 13:58:44 終わった (終了コード 0)
GPU の記録 gpu_train.csv(30秒おき)
lab/Log22/train/gpu_train.csv
timestamp, name, memory.used [MiB], memory.total [MiB], utilization.gpu [%], temperature.gpu, power.draw [W]
2026/11/06 10:56:59.449, NVIDIA A40, 0 MiB, 46068 MiB, 0 %, 31, 33.73 W
2026/11/06 10:57:29.461, NVIDIA A40, 41219 MiB, 46068 MiB, 0 %, 37, 106.18 W
2026/11/06 10:57:59.477, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 41, 108.82 W
2026/11/06 10:58:29.481, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 43, 109.94 W
2026/11/06 10:58:59.482, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 43, 111.37 W
2026/11/06 10:59:29.483, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 44, 111.41 W
2026/11/06 10:59:59.577, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 44, 111.90 WPod の中のチェックポイントの一覧 pod_checkpoints.tsv
lab/Log22/train/pod_checkpoints.tsv
1000/_CHECKPOINT_METADATA 426
1000/assets/local/mecharm_redblock_box_teach_v1_trim2_corr_v5/norm_stats.json 1766
1000/params/_METADATA 33052
1000/params/_sharding 17773
1000/params/array_metadatas/process_0 12891
1000/params/d/11de514fa94fa7397f3b16c7989757b5 2802
1000/params/manifest.ocdbt 118
1000/params/ocdbt.process_0/d/01c7838031cb784824f6e85768f3da4c 12441499 のファイルの一覧 pod_files_1499.tsv
lab/Log22/train/pod_files_1499.tsv
_CHECKPOINT_METADATA 426
assets/local/mecharm_redblock_box_teach_v1_trim2_corr_v5/norm_stats.json 1766
params/_METADATA 33052
params/_sharding 17773
params/array_metadatas/process_0 12891
params/d/831fe535caed5e14003fcb24ae2c0422 2886
params/manifest.ocdbt 118
params/ocdbt.process_0/d/03d71e23eb6a0f81f37c3d1993d873ff 132946719
params/ocdbt.process_0/d/06501058240b6008aed08923945d19d6 213
params/ocdbt.process_0/d/0888c6af2d44a265d45a61a50b3de08d 34929360
params/ocdbt.process_0/d/0c8965a868ae40a71d809be7a2a07110 133017111
params/ocdbt.process_0/d/17b0474fd6bc13b217a900691d5e250c 497186263
params/ocdbt.process_0/d/1815fc45e07c3120daffd6b0292ff777 133038730
params/ocdbt.process_0/d/277d6a30b294bca0e70e811f259ab053 986
params/ocdbt.process_0/d/31e72422e1c67b1e6066bddd5e7533dc 945879576
params/ocdbt.process_0/d/4faf0b06c1012ded706167896bfaa99e 118289937
params/ocdbt.process_0/d/5fa9031ca6c59f2bbcb2f10a907fdce9 828933514
params/ocdbt.process_0/d/65a3cffb411b4734e40ae6933f4dc0b7 152865608
params/ocdbt.process_0/d/6a79a8a2badf96919478b9f5d8729bc2 88705568
params/ocdbt.process_0/d/7ba3c9855401b14365cd1e9f1c127c61 5726
params/ocdbt.process_0/d/81313d7db9bb4fdccdb0597cdaf51d2e 1376
params/ocdbt.process_0/d/81449d843eecef14f989c9992fb07626 133036170
params/ocdbt.process_0/d/8f4987bb71594ac0c5689796db0d4a34 37530685
params/ocdbt.process_0/d/9549eacb13c66d3268a4fa490854c68c 1299
params/ocdbt.process_0/d/ab55d383d0ff6b1805a16ec2d49237e1 58980475
params/ocdbt.process_0/d/bef5ec5f81d109d2b386d88a4d6c236a 118418186
params/ocdbt.process_0/d/c1580b99063234454b934fd23f22d4a3 89686717
params/ocdbt.process_0/d/c47a3185c56c48f3c9201d323e0dbd7d 90308146
params/ocdbt.process_0/d/d1a7833d271d97a091cb93c8a42d736b 1176
params/ocdbt.process_0/d/d2ab47ee7da0dc138dca8ddb5673c6d6 118186862
params/ocdbt.process_0/d/ddc1b7cbfbb22891c65eabf1fd149afb 235537045
params/ocdbt.process_0/d/dfbadc827cd746aaeae49fb6a9f769db 497034770
params/ocdbt.process_0/d/e89dd5c67e202966a7a39de573411c08 945630570
params/ocdbt.process_0/d/ed44d2de10199b34393ba2ce0888a8cb 945626284
params/ocdbt.process_0/manifest.ocdbt 642
費用:推論と学習で約328円
| 使ったもの | 時間 | 費用 |
|---|---|---|
推論の Pod(A40・1時間0.59ドル) | 23分21秒 | 約0.23ドル(約36円) |
学習の Pod(A40・1時間0.59ドル) | 188分2秒 | 約1.85ドル(約292円) |
| 合わせて | 211分23秒 | 約2.08ドル(約328円) |
次に実機で確かめること:corr3 は自分でブロックを持ち上げるか
corr3 の学習データには、つかんだあと肩で持ち上げる直しが入った成功の記録が、前の7本と合わせて11本あります。次の実機では、同じ手順で corr3 を動かし、次の3つを見ます。
- つかんだあと、直さなくても AI が自分で持ち上げるか(今は9回とも肩を約25°直していた)
- つかむ前の根元の向きの直し(約2°)が減るか
- 持ち上げで落ちる回が出るか。出るなら、持ち上げる前に r(爪の締め直し)を押す回と押さない回を比べる
起動は次の1行です。
cd ~/r2r2r-scripts && ./lab_start.sh --gpu A40 --log Log22 --model corr3
この回のコード(全文)
pi05/run_policy_client.py(commit cd2fb46)
pi05/run_policy_client.py
#!/usr/bin/env python3
"""run_policy_client.py — π0.5 (Runpod の serve_policy) の出力で mechArm 270 を動かす Mac 側クライアント.
流れ (1 チャンクごと):
上カメラ画像 + 実測 6 軸 + グリッパー状態 → π0.5 → 行動チャンク (10 x 7, 0.1 秒刻みの絶対角)
→ 先頭 N ステップ先 (既定 5 = 0.5 秒先) の姿勢へ単発 send_angles (学習データと同じ速度 20)
→ --via-stride N を付けると, 途中の姿勢 (N-1, 2N-1, ... ステップ) も中継点として
順に送る (チャンクの中の順番を残すため. 既定 0 = 1 点だけ送る従来どおり)tools/gamepad_teleop.py(commit cd2fb46)
tools/gamepad_teleop.py
#!/usr/bin/env python3
"""gamepad_teleop.py — ゲームパッドで mechArm 270 を手で動かす (依頼 68. 2026-11-02)
PICK で爪の位置がずれたときに, エイイチがゲームパッドで左右・上げ下げ・爪の開閉を直す.
押した分だけそのまま動く. 自動で動く要素は入れない (自動の握り直し・失敗時の自動 HOME などはない).
押した操作と, 送った角度・届いた角度をすべて log.jsonl に残す (あとで「人が直した記録」として使う).
操作 (エイイチが決めた. 変えない):pi05/test_pad_correction.py(テスト4件・commit cd2fb46)
pi05/test_pad_correction.py
#!/usr/bin/env python3
"""test_pad_correction.py — run_policy_client.py の p (ゲームパッドで補正. 2026-11-05 LOG450) の確かめ.
本物の pygame のループ (SDL_VIDEODRIVER=dummy) に偽のコントローラーの押しを流し, 補正の結果の記録・
爪の記録・巻き戻し用の目標・ドライランの仮の姿勢・実機の送り口 (daemon を偽物にする) を見る.
SDL_VIDEODRIVER=dummy SDL_AUDIODRIVER=dummy python3 pi05/test_pad_correction.py
"""
import functoolstools/test_gamepad_teleop.py(テスト90件・commit cd2fb46)
tools/test_gamepad_teleop.py
#!/usr/bin/env python3
"""test_gamepad_teleop.py — gamepad_teleop.py の確かめ (アームなし・コントローラーなし. 依頼 68).
python3 tools/test_gamepad_teleop.py -v
中身:
- ボタン番号と操作の対応 (依頼 68 の表) / 十字キー上下の向き / △ で j1 → j5 → j1
- 守り: j1 は 90.87 を超えない / 物理可動域まで (基準の姿勢からの枠はない. 2026-11-03) / J4_SAFEpi05/diag_joint_hold.py(手首の点検・commit 284dfd7)
pi05/diag_joint_hold.py
#!/usr/bin/env python3
"""diag_joint_hold.py — 実機推論の記録から, 関節ごとの「動いている途中の遅れ」と「止まったあとのずれ (垂れ)」を出す (2026-11-01 依頼 57).
読むだけ (runs/ には書かない). アームは使わない.
入力: runs/pi05_policy/{run_stem}/recording/states.csv と log.jsonl
states.csv (依頼 46 のあとの記録) には send_angles 行 (送った時刻・目標・rpc_sec) と, 爪の rpc 行がある.
依頼 46 より前の記録 (send_angles 行がない) は log.jsonl だけで見る (下の「log で見る」).pi05/test_diag_joint_hold.py(テスト24件・commit 284dfd7)
pi05/test_diag_joint_hold.py
#!/usr/bin/env python3
"""test_diag_joint_hold.py — diag_joint_hold.py (依頼 57) の確かめ.
- 動いている途中の遅れと, 止まったあとのずれを分ける (rpc が返ったあとの実測だけを使う)
- 指令が変わらないのに動いた区間を「外れ」として数える. HOME は数えない
- 爪の rpc で区間を切る
- log.jsonl だけでも補正の 1 刻みとチャンクの区切りのずれを出す
- KIOXIA があれば, 今日の記録で依頼文の粗い値 (j4 の最大) と同じになるか・入れる 3 本に外れがないかpi05/test_pad_build.py(テスト3件・commit 284dfd7)
pi05/test_pad_build.py
#!/usr/bin/env python3
"""test_pad_build.py — ゲームパッドの補正 (run_policy_client の p. cd2fb46) の記録から
build_correction_episodes.py が学習データを作れるかの確かめ (2026-11-06 依頼 97).
python3 pi05/test_pad_build.py -v
合成の記録だけ (KIOXIA にもアームにも触らない). 確かめること:
- 補正の間 (状態 correct) のコマが学習に入る. 長押しで動いている途中のコマも入るpi05/openpi_addon/add_trim_corr_config.py(commit 284dfd7)
pi05/openpi_addon/add_trim_corr_config.py
#!/usr/bin/env python3
"""openpi config.py に trim2 + 補正データ用の学習設定 pi05_mecharm_trim_corr_lora を足す (2026-10-31 依頼 45).
依頼 46: データを corr_v2 (角度の抜けを速度 20 の動きで埋め直したもの) と合わせた
mecharm_redblock_box_teach_v1_trim2_corr_v2 に替えた. corr_v1 の設定が入っている config.py には足さずに止まる
(同じ名前の設定が 2 つになるため. openpi の config.py を git checkout してから入れ直す).
依頼 48: データを corr_v3 (着いたあとの止まりを詰めたもの) と合わせた ..._trim2_corr_v3 に替え,
学習率の予定を続きからの学習用に弱めた (warmup 100 / peak 2.5e-5 / decay_steps 1_500. 下げきる先 decay_lr 5e-6 はpi05/openpi_addon/pod_prep_trim_corr.sh(commit 284dfd7)
pi05/openpi_addon/pod_prep_trim_corr.sh
#!/usr/bin/env bash
# pod_prep_trim_corr.sh — Pod で trim2 + corr_v3 の学習の準備をする (2026-10-31 依頼 46 / 48). 学習は回さない.
#
# 前提: lab_start.sh で Pod を準備してある (openpi・install_addon.py・add_trim_config.py・/workspace/ckpt/3999)
# Mac から次の 2 つを送ってある:
# /workspace/data/mecharm_redblock_box_teach_v1_trim2_corr_v3_raw_episodes.tar
# /workspace/r2r2r/pi05/ (この依頼の版. add_trim_corr_config.py と convert_to_lerobot.py を使う)
#lab_lib.sh(commit 284dfd7)
lab_lib.sh
# lab_lib.sh — lab_start.sh / lab_stop.sh / lab_train.sh が読む共通の関数 (単体では動かさない)
#
# 鍵の扱い:
# - Runpod の API キーは curl のヘッダーを <(printf ...) で渡す (printf は bash の組み込みなので
# ps にもシェルの履歴にも出ない)
# - Hugging Face の鍵は ssh の標準入力で Pod の ~/.cache/huggingface/token に書く
# - Pod の IP とポートは画面・ログに出さない. Pod に入る ssh の出力は lab_mask で <POD_IP>・<SSH_PORT> に置き換える
lab_start.sh(commit 284dfd7)
lab_start.sh
#!/bin/bash
# lab_start.sh — Runpod の Pod の準備から mechArm 270 の実機推論までを1行で行う (依頼 37 / 手順は LOG407「起動の手順」)
#
# ./lab_start.sh --gpu A40 --episode run_0001_20261019_194818 --log Log17
# ./lab_start.sh --log Log17 --dry-run アームなしで試す (デーモン・HOME・爪・位置合わせを飛ばし,
# run_policy_client.py を --execute なし・--dry-keys で呼ぶ)
#
# --gpu GPU の種類 (既定 A40). 「A40」は「NVIDIA A40」として API に渡す. 名前に空白を含む種類はlab_train.sh(commit 284dfd7)
lab_train.sh
#!/bin/bash
# lab_train.sh — π0.5 の続きからの学習を Runpod で回し, 終わったらモデルと記録を持ち帰って Pod を消す (依頼 49)
#
# ./lab_train.sh --log Log17 学習 → Hugging Face → KIOXIA → Pod を消す → Mac に通知
# ./lab_train.sh --log Log17 --dry-run Pod を借りずに流れだけ確かめる (API・SSH・hf・通知を差し替え,
# 書くのは一時フォルダだけ. 差し替えは lab_train_fakes.sh)
# ./lab_train.sh --log Log17 --stop この Log の学習の Pod のログを持ち帰って消す (Mac が途中で止まったときなど)
#commit 284dfd7 の学習まわりの差分(lab_*.sh・設定・テスト)
commit 284dfd7 の差分(lab_lib.sh・lab_start.sh・lab_train.sh・lab_train_fakes.sh・テスト・設定)
commit 284dfd731e64353c996486432811aebb5ee47ea0
Author: Eiichi Shimazu <studio@adaptdesign.jp>
Date: Fri Nov 6 19:51:31 2026 +0900
11-06 のゲームパッドで直した成功 5 本を diag_joint_hold.py で点検できるようにし (rpc 行 send_angle / stop を log.jsonl の pad の行と組にして指令を作る・長押しの関節は見ない・送ったらすぐ返る daemon の区間は向かう途中を遅れに数えず指令から離れた分 away を見る. 11-01 の結果は変わらない), 外れのない 183926・184452・184650・184906 を corr_v4b の 7 本に足した corr_v5 で, corr2 の 1499 から続きを学習する lab_train.sh / lab_start.sh の --model corr3 を足す (設定 pi05_mecharm_trim_corr_v5_lora・上げる先 pi05-mecharm-trim-corr-lora-v3). build_correction_episodes がゲームパッドの区間を扱えることを test_pad_build.py で確かめる (依頼 97. codex 3 回)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
この回の commit
r2r2r-scripts の commit(11/5〜11/6)
6dac235 11-06 20:08 依頼 97 の作業の記録
284dfd7 11-06 19:51 11-06 のゲームパッドで直した成功 5 本を diag_joint_hold.py で点検できるようにし (rpc 行 send_angle / stop を log.jsonl の pad の行と組にして指令を作る・長押しの関節は見ない・送ったらすぐ返る daemon の区間は向かう途中を遅れに数えず指令から離れた分 away を見る. 11-01 の結果は変わらない), 外れのない 183926・184452・184650・184906 を corr_v4b の 7 本に足した corr_v5 で, corr2 の 1499 から続きを学習する lab_train.sh / lab_start.sh の --model corr3 を足す (設定 pi05_mecharm_trim_corr_v5_lora・上げる先 pi05-mecharm-trim-corr-lora-v3). build_correction_episodes がゲームパッドの区間を扱えることを test_pad_build.py で確かめる (依頼 97. codex 3 回)
cd2fb46 11-05 19:42 run_policy_client: 推論のあとの確認に p (ゲームパッドで補正) を足す. gamepad_teleop を同じプロセスで動かし □ で推論に戻る (LOG450)