====================================================================
依頼86：ロボットに「進めているか」の見張りを入れ、揺れ続けをなくして180回で確かめる
2026-11-03 20:50〜21:50　作業場所 cs:75 → cs:76　build_id cs76_20261103_2122（画面なし・保留 0）
====================================================================

--------------------------------------------------------------------
0. 始める前の確かめ（どれも依頼どおり）
--------------------------------------------------------------------
  Unity エディタ・night_runner・rec_runner：動いていない（Unity Hub だけ）／KIOXIA：マウント済み／
  unity_ledger_v1.lock：無し／保留 0／作業場所 cs:75 - head
  台帳を archive/unity_ledger_v1_pre_base73_20261103/ に退避（2491 行・md5 d0517dccd299f9d1d3d26619763ad54e。依頼85 の終わりと同じ）

--------------------------------------------------------------------
1. 揺れの原因（調べたこと）
--------------------------------------------------------------------
  依頼84 と同じ動き（cs:73 の形）で ⑦2台 種9 を回し、1号機の位置と状態を1コマ（0.05 秒）ごとに書き出して見た
  （試しのビルドだけに足した記録。check-in していない。出力は /tmp/req86/trace_p5s9.csv）。
  ・11205 秒に卓42 へ向かう途中、待機場所に止まっていた2号機とすれ違いに入り、3 秒止まって「すれ違いをあきらめた」状態になった
  ・あきらめた台は「相手との空きが 0.6 m（passByBackOffM）になるまで1コマずつ下がる」。一方、前のセンサー（0.6 m）には
    相手が映らない（相手は横寄り）ので、下がり終えると「前が空いている」として進む。進むと空きが 0.6 m を割り、また下がる
  ・これが「3コマ進んで1コマ下がる」でくり返し、x 方向 1.4 cm の幅を行ったり来たりしていた（11215〜11450 秒で状態は
    進む 3538 コマ・下がる 1180 コマだけ。道の引き直しは 1 回きりで、引き直しが原因ではなかった）
  ・下がる1コマで速さが 0 に戻るが、次のコマでまた動くので「続けて止まっている秒」が貯まらず、30 秒の線（助け）にも
    60 秒（動けなくなった）にも届かなかった
  まとめ：揺れの元は「すれ違いをあきらめたあとの下がる動き」と「前が空いたので進む動き」のぶつかり合い。
  依頼85 で見た ②2台 種2 も同じ形（行ったり来たりの幅 1.4 cm）とみられる（1コマの記録では確かめていない）

--------------------------------------------------------------------
2. 直したこと（cs:76）
--------------------------------------------------------------------
 a. 進めているかの見張り（Robot/ServingRobotController.cs・Robot/RobotSpec.cs）
   ・値は RobotSpec に名前を付けて置いた：progressWatchSec = 10 秒・progressWatchM = 0.5 m（Nav2 SimpleProgressChecker の既定値。
     Unity だけの値で、params には入れていない）
   ・見張るのは、卓へ／受け渡し口へ／待機場所へ走ろうとしているあいだ（往復の ToTable・ToPass）だけ。見張りを始めた所から
     0.5 m 離れたら、その所から始め直す（Nav2 と同じ）
   ・見張らないとき：入口の順番待ち・1本道の順番待ち（待つ点へ向かう途中も）・細い通路の入口の譲り合い・
     よける場所でよけている・譲って下がっている。受け渡し口で料理を待つ・受け渡し口の列・卓で客が取るのを待つ・
     待機場所は、往復の外（Idle／Done）か卓での受け渡し（Dwell）なので、はじめから見ない
   ・「進めていない」になったら、そのコマで速さ 0 にしてその場でぴたりと止まる。止まっているあいだは、すれ違いの走り方
     （下がる動きを含む）をしない。そのあとは今までの決まりどおり：
       - 前が空けば進む … 前のセンサーに何もなく、道が引けていて、道の先 0.5 m を進むとほかの台に前のセンサーの長さ
         （0.6 m）より近づいてしまうことがない、が resumeAfterClearSec（1 秒）続いたら進み出す
         （近づく向きへ進み出さないのは、上の揺れの元を断つため）
       - 3 秒空かなければ回り込む道を探す（前がふさがっているときと同じ UpdateDetour を使う）
       - 30 秒で助けを呼ぶ・60 秒で動けなくなった（止まりの数え方は cs:73 のまま。速さ 0 なのでそのまま止まりに数える）
   ・止まりの記録（stops.csv）の cause_detail の頭に「進めていない（10秒で0.5m）：」を付ける。原因は、近づいてしまう台がいれば
     「もう1台のロボット」、前のセンサーに映っていればそれ、無ければまわりで探したもの
 b. 依頼85 の 0.3 m の測り方をやめた
   ・止まりの数え方・立ち往生の数え方・助けの取り消しを cs:73 の形に戻した（ServingRobotController.cs・ServiceOps.cs の
     依頼85 の部分を cs:73 の中身に戻してから a・c を足した）
   ・依頼85 の c（summary.json の open_after_all_left・all_left_s）は測り方に関わらないので残した（分け方だけ d で直した）
 c. 助けで動かす先が見つからないとき（ServingRobotController.cs・ServiceOps.cs）
   ・往復の途中の台で、動かす先が 3 回続けて見つからなければ（3 回目で）、助けのスタッフが付き添い、来た道を
     受け渡し口か待機場所の近い方まで、歩く速さ（1.0 m/秒。スタッフの歩く速さと同じ）で押して連れて戻す。瞬間移動はしない
   ・来た道：その往復で通った所を 0.25 m ごとに覚えておき、逆にたどる。先に受け渡し口か待機場所に着いた方で止める
   ・着いたらその往復を終える（まだ届けていない料理は受け渡し口の先頭へ戻る。理由は「連れて戻した」）。そこから次の仕事を受けてよい
   ・rescues.csv の outcome に「連れて戻した」、summary.json の stuck_rescue に escorts・escort_m
   ・動かす先が見つかったら数え直す。往復の始めでも数え直す。止まっている台（往復の外）は今までどおり
 d. 詰まりの分け方（Experiment/ExperimentRunner.cs）
   ・全員が帰った回で、最後の組が帰った時刻より「あとに始まった」ロボットの詰まり・助けだけを記録だけにする（open_after_all_left）。
     客がいるあいだに始まって回の終わりまで残ったものは、解けずに残った詰まりに数える
 e. 記録だけ（動きは変えない）
   ・summary.json に progress_watch（halts：見張りで止まった回数・released：前が空いて自分で進み出した回数・halts_list：
     [時刻, 号機, x, z, 原因, 区間]）と jitter（揺れ続け。1コマごとの位置で、半径 5 cm の中を動き続け、動いた道のりが 0.1 m 以上、
     それが 60 秒以上続いた回数・最長秒・並び。2 秒より長くじっとしたら数え直す）を足した
   ・揺れ続けの数え方は、試しの1回目では「着く前に少し動いてから長く止まっていた所」まで数えてしまっていたので、
     「2 秒より長くじっとしたら数え直す」を足してから check-in した（待機場所の台を1コマごとに見て、動いていないことを確かめた）
 変えていないもの：ロボットの速さ・物理の設定・譲る順番・人とロボットの数字・rescue_s 15 秒・30 秒・60 秒という時間・
                    センサーの 0.6 m・同じ種で同じ結果にする作り・動かす先が見つかるときの決め方・瞬間移動をなくした作り・
                    依頼84 で入れた直し・店の形・台帳の列と今までの行・試算の値

--------------------------------------------------------------------
3. 変えたファイル・版
--------------------------------------------------------------------
  cs:76　Robot/ServingRobotController.cs・Robot/RobotSpec.cs・Service/ServiceOps.cs・Experiment/ExperimentRunner.cs・Experiment/TripLogger.cs
  実行ファイル：Builds/headless　build_id cs76_20261103_2122・unity_cs ServiceSim/cs:76・pending_changes 空・error CS 0
  （check-in の前に /tmp/req86/try1・try2・try4 に試しのビルドを作り、書き先を /tmp に向けて ⑦2台 種9・④2台 種6・
    ④2台 種0・③2台 種2 を回して確かめた。台帳には書いていない）

--------------------------------------------------------------------
4. 確かめ
--------------------------------------------------------------------
 (1) 同じ種で同じ結果か（cs:76・det86a と det86b）
   ⑦ fam_p5・種9・2台、④ fam_p2・種6・2台 とも：contacts・dishes・give_ups・groups・nowarp_jams・passes・people_jams・
   requeues・rescues・robot_track・stops・timeline・yields は 1 行も違わない。trips.csv は最後の列 plan_ms_max だけ、
   summary.json・conditions.json は written_at だけ、run_info.json は run_label・written_at・wall_seconds・speedup・
   plan_ms だけ違う（前と同じ扱い）
   4 回とも全員が帰った・瞬間移動 0・1コマの跳び 0・揺れ続け 0・解けずに残った詰まり 0
     ⑦2台 種9：入店待ち 6.56 分（依頼84 7.55）・料理の待ち 1.64 分・助け 24 回・見張りで止まった 49 回（うち進み出した 25）
     ④2台 種6：入店待ち 20.87 分（依頼84 19.44・依頼85 32.50）・料理の待ち 1.43 分・助け 57 回・見張り 102 回（進み出した 47）・
               詰まり残り 0（依頼85 で 4473 秒残っていた所は、今回は起きなかった。連れて戻したは 0 回）

 (2) 180回（label base73・同時4本・6店 × 0・1・2台 × 種0〜9、並びは依頼84 と同じ）→ 44 回で止めた
   44 回目のあと（21:41）、見張りが止める線に当たった：
     ⑦2台（fam_p5）の入店待ちの中央値が、同じ種（0・1・2）で 依頼84 1.53 分 → 今回 3.99 分（2.61 倍）
       種0  1.38 → 1.57 分（依頼85 1.61）
       種1  1.53 → 3.99 分（依頼85 2.09）　← これで中央値が2倍を超えた
       種2 10.83 → 11.86 分（依頼85 10.28）
   依頼どおりここで止めた（夜の実行係に止める合図を送り、走っていた 3 回は中断。その 3 回は台帳に入っていない）。
   台帳の completed は 44 回。瞬間移動の線には当たっていない
   ⑦2台 種1 の中身（今回）：詰まり 17 回・1317 秒（依頼84 16 回・344 秒）。いちばん長いのは入口の近く (1,2) の
   「スタッフ・案内」341 秒、次が (2,9) の「客・会計」209 秒・(2,7) の「スタッフ・呼び出し」184 秒。
   依頼84 は客のドリンクバーの詰まりだけだった。見張りで止まった 43 回のうち多いのは (9,4) の「人が立ち止まっていた」7 回など。
   助けは 22 回（依頼84 10 回）。入店待ちが延びたのは入口・案内の通り道での詰まりが増えたためとみられるが、
   見張りで止まった台との関わりはまだ確かめていない

   依頼84・85 と並べる（同じ 44 回＝同じ店・台数・種だけで比べた。記録：night/20261103_base73_cs76/）
     項目                                          依頼84（cs:73）     依頼85（cs:75）     今回（cs:76）
     瞬間移動                                           0                   0                  0
     1コマの跳び                                        0                   0                  0
     揺れ続け（1 cm 幅の行ったり来たりが 60 秒以上）    記録なし（※）      記録なし（※）      0 回
     見張りで止まった（うち自分で進み出した）           ―                   ―                  999 回（529）
     解けずに残った詰まり（件）                         1                   0                  0
     全員が帰ったあとに始まった詰まり（件）             0                   0                  0
     全員が帰ったあとに呼び、終わる前に回が終わった助け 1                   1                  1（⑤2台 種0）
     全員が帰らなかった回                               0                   0                  0
     助け（回／往復／1往復あたり）                  499／2748／0.182    591／2752／0.215   609／2696／0.226
       うち取り消し                                     62                  105                81
       その場で引き直した                               19                  27                 20
     連れて戻した                                       ―                   ―                  0
     立ち往生（動けなくなった）                         208                 218                295
       うち行ったり来たりで数えたもの                   0                   157                0
     立ち往生が1回でもあった往復（割合）            130（0.047）        143（0.052）       192（0.071）　試算の stuck_rate 0.01
     30 秒以上の止まり                                  456                 480                582
     詰まり（回・秒・1回の最長）                 518・31,489・1,218  454・22,771・885   539・30,828・1,085
     （※）依頼84・85 には1コマごとの揺れの記録が無い。参考に、依頼84 の 180 回では ⑦2台 種9 が回の終わりまで 31,402 秒
         行ったり来たりしていた。依頼85 の 180 回では「行ったり来たりで数えた立ち往生」が 822 回あった
     180 回全体（依頼84・85）の値は依頼85 の報告（20261103_base72.txt）のとおり。依頼84 の解けずに残った詰まりは、
     今回の分け方では 2 件（⑦2台 種9・⑤2台 種0 の客がいるあいだに始まったもの）、依頼85 は 1 件（④2台 種6）になる

   見張りで止まった場所の上位（今回 44 回。店・台数・1 m のマス・回数）
     ⑤2台(16,9) 47・④2台(13,4) 30・③2台(6,4) 25・③2台(3,4) 21・④2台(2,3) 19・⑤2台(15,9) 18・⑥2台(17,5) 18・③2台(7,4) 15・⑦2台(6,4) 15
     原因：人が立ち止まっていた 481・もう1台のロボット 346・お客さんとすれ違った 63・スタッフとすれ違った 56・分からない 49・椅子など 4
     区間：卓へ 629・待機場所へ 370
     （⑤2台(16,9)・(15,9) は待機場所 (14.8, 8.8) のすぐ手前。依頼85 で「待機場所が台1台分しかない」と書いた所と同じ）

   店・台数ごと（同じ種どうし。入店待ち・料理の待ちは分の中央値、比は今回／依頼84。助けは1往復あたり、立ち往生はその種の和）
     店・台数   種      入店 84→今回（比）       料理 84→今回（比）     助け 84→今回      立ち往生 84→今回   見張り
     ③1台      0-2     1.77→1.85（1.04）       2.32→2.38（1.02）     0.142→0.202        9→11              66
     ③2台      0-2     1.63→1.74（1.07）       1.49→1.71（1.15）     0.179→0.244       22→33             158
     ⑦1台      0-2     1.49→1.65（1.10）       2.24→2.48（1.10）     0.110→0.153        6→14              48
     ⑦2台      0-2     1.53→3.99（2.61）★     1.46→1.59（1.09）     0.122→0.234       15→39             137
     ④1台      0-2    13.83→11.88（0.86）      2.08→1.77（0.85）     0.217→0.246       32→37              87
     ④2台      0-1    19.94→13.52（0.68）      2.08→2.14（1.03）     0.640→0.680       90→92             167
     ⑤1台      0-1     4.16→4.67（1.12）       2.66→2.83（1.06）     0.185→0.268        4→15              37
     ⑤2台      0-1     6.06→3.70（0.61）       2.04→1.63（0.80）     0.222→0.219        5→15             132
     ⑥1台      0-1     3.21→3.14（0.98）       2.02→1.95（0.96）     0.084→0.054        3→1               16
     ⑥2台      0-1     2.84→3.35（1.18）       0.96→0.98（1.03）     0.042→0.079        3→9               71
     ②1台      0-1     5.04→5.11（1.01）       1.41→1.44（1.02）     0.183→0.192       14→15              26
     ②2台      0-1     4.38→4.27（0.98）       0.58→0.75（1.29）     0.119→0.146        5→14              54
     （0台はどの店も依頼84 と同じ値（比 1.00）。2倍を超えたのは ⑦2台の入店待ちだけ）

   向きの12本（今回そろった種だけの中央値。0台・1台・2台で種の数が 2〜3 しかないので参考）
     店  入店待ち Unity 0→1→2台      向き  試算 0→1→2台       向き  合う？
     ③   3.69 → 1.85 → 1.74     －－   4.09 → 1.68 → 1.13   －－   合う
     ⑦   4.37 → 1.65 → 3.99     －＋   3.08 → 1.58 → 1.60   －＋   合う（2台が止める線の所）
     ④  14.00 → 11.88 → 13.52   －＋  10.91 → 4.81 → 5.57   －＋   合う
     ⑤   4.80 → 4.67 → 3.70     －－   7.51 → 3.16 → 2.37   －－   合う
     ⑥   5.53 → 3.14 → 3.35     －＋   7.91 → 3.68 → 2.11   －－   逆（1→2台）
     ②   4.87 → 5.11 → 4.27     ＋－   2.61 → 1.79 → 1.30   －－   逆（0→1台）
     店  料理の待ち Unity 0→1→2台    向き  試算 0→1→2台       向き  合う？
     ③   0.95 → 2.38 → 1.71     ＋－   0.63 → 1.97 → 0.96   ＋－   合う
     ⑦   1.01 → 2.48 → 1.59     ＋－   0.63 → 2.01 → 1.01   ＋－   合う
     ④   1.32 → 1.77 → 2.14     ＋＋   0.99 → 1.29 → 0.47   ＋－   逆（1→2台。依頼85 と同じ逆）
     ⑤   1.08 → 2.83 → 1.63     ＋－   0.77 → 2.28 → 1.27   ＋－   合う
     ⑥   1.06 → 1.95 → 0.98     ＋－   0.84 → 2.01 → 0.82   ＋－   合う
     ②   0.82 → 1.44 → 0.75     ＋－   0.61 → 0.91 → 0.40   ＋－   合う
     12 本中 9 本が合う（依頼84・85 は 10 種そろって 10 本）。種がそろっていないので、ここで合う・合わないは決められない

   詰まりの場所の上位（今回 44 回）：④(2,4) 5 回 1,733 秒・⑦(5,5) 14 回 1,503 秒・④(7,3) 16 回 1,271 秒・③(6,4) 10 回 1,005 秒・
     ②(14,2) 2 回 985 秒・③(4,5) 33 回 837 秒
     だれ・仕事：客ドリンクバー 409 回 15,384 秒・スタッフ片付け 16 回 5,940 秒・ロボット1往復の打ち切り 7 回 2,837 秒・
                 客退店 45 回 1,826 秒・スタッフ案内 10 回 1,805 秒・スタッフ呼び出し 7 回 1,040 秒

 (3) 残った詰まりの中身と場所（今回 44 回）
   ・解けずに残った詰まり：0 件。全員が帰らなかった回：0。揺れ続け：0 回。連れて戻した：0 回（この 44 回では動かす先が
     3 回続けて見つからない所が無かった。付き添いの作りが実際に働いた回はまだ無い）
   ・全員が帰ったあとに呼び、終わる前に回が終わった助け：⑤2台 種0 の 1 件（11166 秒に呼んだ・(14.46, 8.54)・相手はスタッフ。
     最後の組が帰ったのは 10599 秒。依頼84・85 の同じ回と同じ所＝待機場所の手前）

--------------------------------------------------------------------
5. 台帳
--------------------------------------------------------------------
  2491 行 → 2539 行（追記 48 行だけ。どれも 59 列。先頭 2491 行の md5 は d0517dcc… で始める前と同じ）
  終わったあとの md5 05f61ef7bd6d032ee909834a0df16213。鍵ファイルは残っていない
  追記：det86a 2・det86b 2・base73 44（どれも completed）
  集計の手順と出力：/tmp/req86/（agg86.py・agg86.txt＝44 回、agg86_same44.txt＝依頼84・85 を同じ 44 回に絞ったもの、
  watch86.py・watch_log.txt・run180.sh、揺れを調べた1コマの記録 trace_p5s9.csv）

--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. 止める線（⑦2台 の入店待ちの中央値が依頼84 の 2.61 倍）に 44 回目で当たったので止めた。種 0〜2 の 3 つでの中央値で、
     種1 だけが 1.53 → 3.99 分に延びた（種0・種2 は 1.1 倍ほど）。このまま見張りの作りを見直すか、それとも残りの 136 回を
     回して 10 種で見てから決めるか
  2. 立ち往生が増えた（同じ 44 回で 依頼84 208 → 今回 295 回、立ち往生が1回でもあった往復の割合 0.047 → 0.071。試算の
     stuck_rate は 0.01）。見張りで止まった台は、前が空くまで速さ 0 のまま待つので、60 秒に届きやすくなったとみられる。
     この数え方のまま試算と比べてよいか
  3. 見張りで止まったあと「前が空いた」とみる決まりに、「道の先 0.5 m を進むとほかの台に 0.6 m より近づくなら進み出さない」
     を入れた（揺れの元を断つため。依頼に書かれていない所なので、私が決めた）。このままでよいか
  4. よける場所でよけているあいだ・譲って下がっているあいだも見張らないことにした（依頼の「わざと待っている間」の並びには
     入っていないが、見張りで止めるとよけ終わりの決まりが働かなくなるため）。このままでよいか
  5. 連れて戻した台は、そこでその往復を終え、まだ届けていない料理を受け渡し口の先頭へ戻すことにした（依頼に書かれていない所）。
     このままでよいか。なお 44 回では連れて戻す所が出ておらず、まだ働きを確かめられていない

判定：止めた（決めてほしいことあり）
