依頼181 報告:実機推論で、箱に置き終えたら自動で終わる(Log35) ■ やったこと 1. run_policy_client.py に --auto-finish を足した(付けなければ今までと同じ。log の頭にも何も足さない) - 終わる条件(すべて):a. 爪を閉じてから開いた(推論・補正のどちらでも。補正の中の g の閉→開も数える。つかんだ区間を巻き戻して開いたら数え直す)/爪が今開いている/b. 推論の前の実測角と HOME の差が各関節 8° 以内(--finish-home-tol)/c. b の状態で、答えの先頭 10 ステップと実測角の差が各関節 3° 以内(--finish-still-deg)のチャンクが 2 回続いた(--finish-chunks) - 終わったら、そのチャンクは送らずに h と同じ送り方で HOME へ戻し、結果の入力(y/n/Enter)へ進む。[FINISH] の 1 行、log.jsonl に type=finish(event=auto_finish・何チャンク目・条件の値・HOME からの差・Δ)、そのチャンクの行に auto_finish、{run_stem}.json の end_reason=auto_finish(result=completed)。各チャンクの行に finish_check(判定の値) - 放したあとにまた閉じる答え(2 回目のつかみ)が出たら、そのチャンクは送らずに入力欄を出す([FINISH] の 1 行・type=finish / event=regrasp)。入力欄で Enter を押せば今までどおり送る(人の判断)。--auto のときは入力欄を出せないので送らずに終える(終了コード 1・end_reason=regrasp・アームは動かさない) - スペースで止める予約があるとき・入力欄で s/b/c/p を選んだあと(Enter で実行するまで)は、終わる条件を満たしても入力欄を優先する(勝手に HOME へ動かさない) 2. lab_start.sh:既定で --auto-finish を渡す。--no-auto-finish で今までどおり。起動時に [FINISH] の行。--help の表示を 2〜64 行に広げた 3. chunk_timing.py:「終わり方」の行(自動で終わった/人が止めた (h・q・Ctrl-C)/上限/2 回目のつかみで止めた/エラー)と比べる表の列、チャンクのメモに「自動で終えた」「2回目のつかみ」 4. テスト:pi05/test_auto_finish.py 17 件(Log35 の 7 本の再生・判定の単体・偽のアームでの通し・HEAD と同じか)。python3 pi05/test_auto_finish.py --table で下の表が出る 既存:test_rewind_correct 81・test_no_step_confirm 17・test_skip_first_confirm 6・test_flow_send 16・test_chunk_timing 7・test_pad_correction 24・tools/test_gamepad_teleop 93 すべて OK、test_lab_start.sh OK 222 / NG 0 5. codex:3 回。1 回目 必須 2・軽微 1(R1 答えの全ステップを見ていた→先頭 10 ステップだけ/R2 補正の中の閉→開を数えていなかった→爪の指令を 1 つずつ知らせる。あわせて「爪が開いている」を条件に足した/R3 付けないときも頭に auto_finish:null→付けたときだけ)。2 回目 必須 1(チャンクごとに確かめる形で --finish-chunks 1 だと s/c のあとでも自動で HOME へ→確かめの形によらず止める)。3 回目 指摘なし 6. コミット 68f514a(5 ファイルを個別に add) ■ 既定の値と根拠(Log35 の 7 本。放したあとのチャンク。値は各関節の最大) 既定は依頼のまま(8°・3°・2 回)で、直す必要はなかった。 - HOME に戻って止まっているチャンク:HOME からの差 4.1〜5.5°(どれも j1)、Δ 1.1〜2.7° - HOME へ戻る途中:HOME からの差 6.0〜67.8°、Δ 3.1° 以上(182327 のチャンク 15 は差 6.0°・Δ 3.1° で止まっていない扱い) - 置く前・運ぶ途中(放したチャンクまで):「放した」が成り立たないので終わらない(運ぶ途中の HOME からの差は 50° 以上) 182327(放したのはチャンク 10) chunk HOMEからの差 Δ10ステップ 続いた 11 65.0 (j1) 15.5 (j1) 0 12 52.0 (j1) 24.8 (j1) 0 13 29.1 (j1) 15.9 (j1) 0 14 15.9 (j1) 11.7 (j1) 0 15 6.0 (j1) 3.1 (j0) 0 16 5.1 (j1) 1.7 (j1) 1 17 5.0 (j1) 1.7 (j1) 2 ← 終わる …(判定しなければ 35 まで同じ形。36〜46 で j0 が −21° へ流れ、HOME からの差 6.4→21.5°) 51 66.4 (j4) 1.9 (j1) ← 2 回目のつかみ(何もない所で閉じた) 180457(放したのは 11):12 64.0/13.5、13 52.6/22.6、14 31.7/24.7、15 8.5/4.3、16 5.5/2.2 (1)、17 4.8/1.5 (2) ← 終わる 181300(放したのは 14):15 64.0/16.1、16 50.5/26.1、17 25.7/15.2、18 12.2/8.5、19 5.4/2.0 (1)、20 4.9/1.6 (2) ← 終わる 182039(放したのは 9):10 63.7/17.5、11 48.5/28.2、12 23.3/11.1、13 14.2/11.0、14 4.6/1.9 (1)、15 4.4/2.0 (2) ← 終わる 182211(放したのは 8):9 67.8/14.4、10 55.5/27.1、11 30.1/27.3、12 4.3/2.1 (1)(ここで人が止めた) 180704(放したのは 10):11〜15 で HOME からの差 63.7→18.9°(戻る途中で人が止めた) 181057(放したのは 14):15〜20 で HOME からの差 27.6° 以上(HOME に戻らないうちに人が止めた) ■ 7 本で何チャンク目で終わる判定になるか 試行 放した 終わる判定 実際に止めたチャンク 180457 11 17 24(人) 180704 10 なし 15(人。HOME に戻る前) 181057 14 なし 20(人。HOME に戻る前) 181300 14 20 24(人) 182039 9 15 15(人) 182211 8 なし 12(人。HOME 近くで 1 回目のところ。次も同じなら 13 で終わる) 182327 10 17 59(上限 60。2 回目のつかみ 51 より前に終わる) HOME に戻ってから 2 チャンク目で終わる。放したチャンクからは 5〜7 チャンクあとで、そのうち 3〜5 チャンクは HOME へ戻る動き。 ■ 画面の例(偽のアームで流したもの) [FINISH] --auto-finish: つかんで放したあと, HOME からの差が各関節 8° 以内で 答えの Δ (10 ステップ先まで) が各関節 3° 以内のチャンクが 2 回続いたら, 送らずに HOME へ戻して終えます. 2 回目のつかみは送らずに止めます [FINISH] 置き終えたので終えます (放したあと HOME 近くで止まったチャンクが 2 回続いた). 推論 6 は送らずに HOME へ戻します HOME からの差 最大 0.0° (j0) Δ (10 ステップ先まで) 最大 0.3° (j0) 結果: y=成功 / n=失敗 / Enter=記録しない > 2 回目のつかみ: [FINISH] 放したあとにまた閉じる答え (2 回目のつかみ). 推論 5 は送らずに止めます HOME からの差 最大 0.0° (j0) Δ (10 ステップ先まで) 最大 0.3° (j0) Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 > 止めているとき: [FINISH] 終わる条件を満たしたが, 止めているので入力欄を出します HOME からの差 … chunk_timing.py: 終わり方: 自動で終わった (置き終えた) 推論 6 で HOME へ (HOME からの差 最大 0.0°・Δ 最大 0.3°・2 回続いた) 終わり方: 人が止めた (h で HOME) (2 回目のつかみで止めた 1 回) ■ 決めてほしいこと 1. 1 回目のつかみが空振りで、AI が開いてつかみ直そうとしたときも「2 回目のつかみ」として止めて入力欄を出す(つかめたかは判定できないため、閉じて開いたあとの閉じる答えはすべて止める)。このままでよいか。補正の R(開いて閉じ直す)のあとの閉じる答えも同じく止まる。 2. --auto のときの 2 回目のつかみは「送らずに終了コード 1 で終える(HOME へは動かさない)」にした。HOME へ戻して終える方がよければ直す。 3. 実機での確かめ(lab_start.sh の既定で --auto-finish が入る)。実機は動かしていない。 ■ 気づいたこと(範囲の外なので変えていない) 既存のテスト用の偽のアーム(test_rewind_correct.run_client)は、--execute のときの記録スレッドの電流の読み取り(daemon_read_servo)を差し替えていないため、Pi の daemon(192.168.2.1:5555)につながって読み取りだけしている。アームは動かさないが、テストが実機の daemon に触れる。