# サービスロボット導入シミュレーション Log#34 | 配膳ロボットの下げ膳、効くかは店の通路しだい

- 記録: LOG444（サービスロボット導入シミュレーション）
- 公開: 2026/11/5
- 記事のページ: https://pixelstomotors.com/record/serving-robot-bussing-depends-on-aisles
- サイト: Pixels to Motors（ADAPT DESIGN / 島津 栄一） https://pixelstomotors.com/
- 要約: Unity で再現したファミレス6店で配膳ロボット2台に下げ膳も任せると、通路にゆとりのある②⑤⑥では入店待ちが縮み、効率重視の③④⑦では延びた。6店すべてに、同じお客さんの来かたで並べたパネル付きの比較動画を付けた。

> AI が読むための記事の全文です（コード・実行ログを含む）。引用するときは上の「記事のページ」の住所を使ってください。

---

Unity で再現したファミレス6店で、配膳ロボット2台に下げ膳（食べ終えた皿を洗い場へ運ぶ仕事）も任せると、**通路にゆとりのある3店（②⑤⑥）では入店待ちと卓が空くまでの時間が縮み、通路を詰めた効率重視の3店（③④⑦）では延びた。** スタッフ1人が歩く距離は6店とも減っています。どれも同じお客さんの来かたで1回ずつ動かしたシミュレーションの結果で、実物の店で測った数字ではありません。

この回で、次のことができるようになりました。

- サイトの試算のページ（/series8）で、図面のあるファミレス6店のどれを選んでも、配膳だけの店と下げ膳にも使う店を左右に並べた動画が見られる。前は③の1店だけでした
- 動画の横のパネルに、スタッフとロボットがいま何をしているかが出るので、どこで手が止まり、どこで皿が溜まるかを、数字の表を読まずに目で追える
- 配膳ロボットの LP（スタッフを1人減らせるか）の動画も、今のシミュレーションの版で撮り直した。4つの視点で店を見る動画にもパネルが付き、PC では幅いっぱいで字が読める
- 大型店⑧⑨でも同じ比べ方ができるように、Unity が読む条件の表に⑧⑨の下げ膳を足し、夜の間に回す依頼を出した

困っていたのは、比較動画が③の1本しかなかったことです。前の回（LOG440）で、120回を回した数字では、下げ膳も任せるとスタッフの歩く距離はどの店でも減るのに、細い通路の店では卓が空くのが遅れることが分かっていました。ただ、それがどの店でどう見えるのかは、③の動画1本では確かめられません。店によって向きが逆になるなら、店の人に見せる動画も店ごとに要ります。

| やったこと | なぜ | 結果 |
|---|---|---|
| 残り5店で、配膳だけと配膳＋下げ膳を同じお客さんの来かたで撮った（依頼92・93） | 比較動画が③にしかなかったため | 10本とも最後まで回った。②は1回目が撮影の時間の上限に当たり、上限を延ばして撮り直した |
| 6店分の比較動画を作り、/series8 に載せた | 店ごとに向きが違うかを目で確かめるため | 通路にゆとりのある②⑤⑥は良くなり、効率重視の③④⑦は悪くなった |
| LP の Unity の動画を、今の版で撮り直した（依頼93） | パネルのない古い版の動画が残っていたため | 4視点はパネル付き・幅いっぱいに。丸テーブルの直す前と直した後は、今の版では直す前でも止まらなかったので前の録画を残した |
| 大型店⑧⑨の下げ膳の条件を足し、⑧⑨を回す依頼を出した（依頼94） | 図面のある8店すべてで比べられるようにするため | 夜の間に、配膳だけ60回・下げ膳40回と、比較動画の素材を撮る |

配膳ロボットを自分の店に入れたらどうなるかは、このシリーズの試算をもとにした別のページで試せます。

[配膳ロボットの導入前シミュレーション](https://pixelstomotors.com/serving-robot-one-less-staff)


## 作業ログ ― 依頼92：残り5店で、配膳だけと配膳＋下げ膳を同じ種で撮った

この回の作業は、すべて Unity で再現した店の中のシミュレーションです。Unity はゲームや3Dの映像を作る道具で、ここではファミレスの店内を3Dで建て、スタッフ・お客さん・配膳ロボットを動かして、何分待ったか、どこで止まったかを数えています。実際の店の作業はサイトの試算（SimPy という Python の道具で書いた計算）が正で、Unity はその店の形と条件を読んで動きます。

### 種：同じお客さんの来かたを2回作るための番号

| 言葉 | この記事での意味 |
|---|---|
| 種 | 乱数の出発点の番号。同じ種なら、同じ時刻に同じ人数のお客さんが来て、同じ料理を頼む |
| serve（配膳だけ） | ロボットは料理を卓へ運ぶだけ。食べ終えた皿はスタッフが洗い場へ運ぶ |
| bus（配膳＋下げ膳） | ロボットは料理を運ぶほか、片付けのスタッフと一緒に卓へ行き、皿を載せて洗い場へ運ぶ |
| パネル | 録画の右に付けた表示。スタッフ一人ひとりの今の仕事（案内・料理・会計・片付けなど）、ロボットの状態、入口で待つ組の数が出る |

配膳だけと配膳＋下げ膳を比べるときは、同じ種で2回動かします。お客さんの来かたがそろうので、違いはロボットの使い方だけになります。種は、サイトの各店の動画に使ったものと同じにしました（⑦は7、④⑤⑥は1、②は8）。

依頼文は、作業を自動で Claude Code に渡す「依頼箱」に入れました。全文です。

### 依頼92 の依頼文

```
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 600
---
# 依頼92：残り5店（②④⑤⑥⑦）で、配膳だけと配膳＋下げ膳を同じ種で撮り、パネル付きの動画にする

エイイチと決めたこと（2026-11-05）：サイトの比較動画（配膳だけと配膳＋下げ膳を左右に並べたもの）が③の1本しかない。先に残り5店の比較動画をそろえる。そのあと LP の Unity の動画5本をパネル付きに撮り直し（依頼93）、その次に大型店⑧⑨を足す（依頼94）。
Unity の作りは cs:78 のまま。動き・決まりには触れない。今回は撮って動画にするだけ。2本を並べた比較動画は Claude が作る。
**エイイチは見ていないことがある。人に聞かないと進めない所に当たったら、その店は止めて報告に書き、ほかの店は続ける。時刻で止めず、並べた店が全部終わるまで続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所が cs:78、Builds/headless と録画用 Builds/rec20_bus91 が cs:78。保留 0
2. Unity エディタ・night_runner／rec_runner が動いていない。KIOXIA がマウントされ、unity_ledger_v1.lock がない。台帳を archive/unity_ledger_v1_pre_rec92_20261105/ に退避（行数と md5 を報告に）
3. python3・numpy・Pillow・ffmpeg（依頼87 と同じ。miniforge の ros_env の ffmpeg を PATH に足してよい）

## 撮る回
依頼91 で③を撮ったのと同じ撮り方（依頼90 の報告 6 章の録画の手順。カメラ・置き方は依頼87 と同じ：wide_l30・wide_r30・3840×2160・0.5秒ごと・30コマ/秒・回の最初から全員が帰るまで・カメラの行列と frames.csv・timeline.csv も書き出す）。
種は依頼87 でサイトの動画に使ったのと同じ。serve と bus は同じ種で撮る（お客さんの来かたをそろえるため）。

| 順 | 店 | 種 | serve の条件 | bus の条件 |
|---|---|---|---|---|
| 1 | ⑦ fam_p5 | 7 | 5 | 123 |
| 2 | ④ fam_p2 | 1 | 8 | 125 |
| 3 | ⑤ fam_p3 | 1 | 11 | 127 |
| 4 | ⑥ fam_p4 | 1 | 14 | 129 |
| 5 | ② fam_p0 | 8 | 17 | 131 |

- どれもロボット2台・混み具合は普通・真ん中の人数・1往復3卓・レジ1つ・今の標準（すれ違い入・待機場所へ戻る入・案B 切・助け入）・道の線なし
- 1回の実時間の上限：80 分。同時に2本。止まっても回し直さない（止まった回は報告に書き、その店の動画は作らない）
- 置き場所：`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_compare_20261105/{店}/{serve|bus}/`（③の rec_compare_20261104 と同じ形。前の分は消さない・上書きしない）
- 台帳は追記だけ

## 動画にする（撮れた回ごと）
- make_panel_video.py（status_videos/tools。依頼91 で「下げ膳」をロボットの欄に出すようにした版）で、wide_l30 の録画から通しのパネル付き動画を作る。依頼91 の whole と同じ作り方（開店から全員が帰るまで、60〜90秒に収まる速さ）。出力 `{店}/{serve|bus}/panel/whole_wide_l30_panel.mp4`
- 同じ店の serve と bus は同じ速さ（--speed）にそろえる（Claude が左右に並べて同期させるため）。そろえた速さを報告に書く
- 題は「⑦ ロボット2台・配膳だけ」「⑦ ロボット2台・配膳＋下げ膳」の形（店の番号・台数・使い方）。依頼91 では題がパネルで切れたので、切れないことを1コマ見て確かめる。それでも切れるなら題の字を小さくせず、題を短くして報告に書く（パネルの形・色・大きさは変えない）
- 出来た動画は 1920x1080・30fps であること（スクリプトが確かめる）
- 動画ごとに、真ん中あたりの1コマを `whole_wide_l30_panel_mid.png` として同じ所に置く

## 止める線
瞬間移動が1回でも出たとき、または serve の回が base73（cs:76）の同じ店・同じ種の回と記録が違ったとき（依頼91 の確かめと同じ比べ方。録画している回は 860 秒ごろから分かれることがあるので、録画しない同じ回を1本回して比べる）。そのときはその店を止めて報告し、ほかの店は続ける。
全員が帰らない回・詰まりが残る回が出ても止めずに動画にし、報告に書く。

## 報告
claude_code_reports/20261105_rec92.txt に：
- 店ごと・serve と bus ごと：最後まで回ったか・全員帰ったか・実時間・瞬間移動の回数・上限で戻った回数（bus）・入店待ち・料理の待ち・卓が使えるまで（turn）・スタッフ1人の歩いた距離・ロボットが下げ膳を運んだ割合・できた動画の名前と長さと速さ
- serve の確かめ（base73 との比べ）の結果
- 題が切れたかどうか、短くしたならその題
- 台帳の行数の変化と md5
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼92 の報告（claude_code_reports/20261105_rec92.txt）

```
====================================================================
依頼92：残り5店（⑦④⑤⑥②）の配膳だけ（serve）と配膳＋下げ膳（bus）を同じ種で撮り、パネル付きの動画にする
2026-11-05 08:05〜14:40　作業場所 cs:78（Unity の作りは変えていない）
====================================================================

結論
  ・⑦④⑤⑥ の4店は serve・bus とも最後まで回り、全員帰った。瞬間移動 0。パネル付きの動画 8 本を作った（どれも 1920x1080・30fps・題は切れていない）
  ・② は serve・bus とも 1回の実時間の上限 80 分に当たって止まった（店の時刻 serve 8658 秒・bus 9152 秒。瞬間移動 0）。
    依頼どおり回し直さず、② の動画は作っていない（決めてほしいこと 1）
  ・serve の確かめ（録画しない同じ回と base73 の比べ）は5店とも一致。止める線には当たっていない

--------------------------------------------------------------------
0. 始める前の確かめ（どれも依頼どおり）
--------------------------------------------------------------------
  作業場所 cs:78 - head・保留 0（cm status に変更なし）
  Builds/headless・Builds/rec20_bus91：どちらも build_id cs78_20261104_1011・unity_cs ServiceSim/cs:78・pending_changes 空
  Unity エディタ・night_runner・rec_runner：動いていない（Unity Hub だけ）／KIOXIA マウント済み／unity_ledger_v1.lock 無し
  台帳を archive/unity_ledger_v1_pre_rec92_20261105/ に退避（2929 行・md5 a0589b65d2aae361301c9033afe92994）
  python3（miniforge）・numpy 2.4.4・Pillow 12.2.0・ffmpeg 7.1.1（ros_env）

--------------------------------------------------------------------
1. serve の確かめ（録画しない同じ回 det92 と base73・cs:76 の同じ回）
--------------------------------------------------------------------
  Builds/headless で5回（night/20261105_det92）。実時間 0.9〜2.1 分。比べ方は依頼91 と同じ（night/20261105_rec92/cmp92.py・cmp92_out.txt）
    ⑦ fam_p5 種7・④ fam_p2 種1・⑤ fam_p3 種1・⑥ fam_p4 種1・② fam_p0 種8：5店とも一致
    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 は build_id・night・parallel・parallel_actual・
    run_label・speedup・unity_cs・wall_seconds・written_at・plan_ms_max_per_trip だけ違う → 一致
  録画を始めたのはこの確かめのあと

--------------------------------------------------------------------
2. 撮った回
--------------------------------------------------------------------
  回し方：night/20261105_rec92/rec_runner.py（依頼91 の写し。説明を足しただけ）で --oblique --hide-paths --max-wall-min 80 --parallel 2 --no-retry
    --limit-min 120 --build Builds/rec20_bus91。カメラは依頼87 と同じ wide_l30・wide_r30（3840×2160・0.5 秒ごと・30 コマ/秒・回の最初から終わりまで・
    カメラの行列・frames.csv）。並び：night/20261105_rec92/queue.json（⑦④⑤⑥② の順に serve・bus。どれも2台・1往復3卓・レジ1つ・
    すれ違い入・待機場所へ戻る入・案B切・助け入・道の線なし。条件は params の unity_conditions の 5/123・8/125・11/127・14/129・17/131 と同じ中身）
  置き場所：rec_compare_20261105/{店}/{serve|bus}/（録画 mp4・frames.csv・camera.json、timeline.csv・summary.json、bus は bus_summary.json・bus_runs.csv も）

  （入店待ち・料理の待ち・turn は分、歩いた距離＝スタッフ1人・km。上限で戻った＝下げ膳の台が卓で 120 秒待って戻った回数）
  店	使い方	最後まで	全員帰った	実時間	瞬間移動	上限で戻った	入店待ち	料理の待ち	turn	歩いた距離	下げ膳を運んだ割合	動画（長さ・速さ）
  ⑦ fam_p5 種7	serve	○	○ 11737秒	72.1分	0	-	3.69	1.61	3.78	2.62	-	75.5秒・10.5倍
  ⑦ fam_p5 種7	bus	○	○ 12020秒	74.3分	0	1	4.64	2.17	4.97	2.42	0.388（31/80）	77.2秒・10.5倍
  ④ fam_p2 種1	serve	○	○ 12458秒	66.9分	0	-	17.48	1.36	27.03	2.40	-	70.0秒・12倍
  ④ fam_p2 種1	bus	○	○ 14128秒	77.8分	0	1	25.84	2.32	33.06	2.19	0.623（33/53）	79.3秒・12倍
  ⑤ fam_p3 種1	serve	○	○ 11684秒	72.1分	0	-	5.69	1.79	9.37	2.91	-	75.3秒・10.5倍
  ⑤ fam_p3 種1	bus	○	○ 11577秒	70.6分	0	0	4.85	2.03	8.00	2.64	0.298（28/94）	74.4秒・10.5倍
  ⑥ fam_p4 種1	serve	○	○ 10428秒	51.4分	0	-	3.17	1.06	11.59	2.29	-	74.5秒・9.5倍
  ⑥ fam_p4 種1	bus	○	○ 10391秒	50.5分	0	0	2.83	1.23	10.04	1.99	0.432（32/74）	73.9秒・9.5倍
  ② fam_p0 種8	serve	×（80分で止まった・店の時刻 8658秒）	×	80.2分	0	-	（1.46）	（0.61）	（2.72）	（1.39）	-	作っていない
  ② fam_p0 種8	bus	×（80分で止まった・店の時刻 9152秒）	×	80.1分	0	0	（1.40）	（1.20）	（2.42）	（1.06）	（0.719）	作っていない
  （② の括弧の数字は止まった所までの途中の値）
  ・1コマの跳び 0・解けずに残った詰まり 0（10 回とも）。全員帰らなかったのは ② の2回だけ（上限で止まったため）
  ・録画した serve の4回は、全員が帰った時刻が依頼87（cs:76）で撮った同じ店・同じ種の録画と同じ（⑦11737・④12458・⑤11684・⑥10428 秒）。
    録画なしの回（det92）とは違う（依頼87・91 で書いたのと同じ）。パネルの数字は同じ録画の回の timeline.csv なので映像と合っている
  ・④ bus は 77.8 分で、上限の 80 分の手前で終わった
  ・judge.md：回の失敗 2（② の2回・stopped／全員が帰っていない）・基準なし 8

  ② が止まったわけ（見たこと）：依頼87 では同じ ② の録画が 42.8 分で終わった。今日は録画の全体が依頼87 より約1.4倍遅く（⑦ 49.8→72.1 分・
    ④ 55.2→66.9 分）、② の2回の間は、ほかに Chrome の処理が CPU を 193% 使っていた（13:36 に見た。負荷 37〜43）。Chrome は依頼の外なので止めていない

--------------------------------------------------------------------
3. パネル付きの動画
--------------------------------------------------------------------
  作り方：night/20261105_rec92/post92.py（依頼91 の post91.py の写し。置き場所に店のフォルダを挟み、速さを外から渡すようにしただけ）で
    make_panel_video.py（status_videos/tools・md5 45a541e860222bb0426ea30c5bd976d8。依頼91 の版のまま・変えていない）を呼んだ。
    wide_l30 の録画を開店から全員が帰るまで。出来た動画が 1920x1080・30fps かをスクリプトが確かめた（8本とも合格）
  速さ：night/20261105_rec92/pick_speed.py で、同じ店の serve と bus の2本とも 60〜90 秒に入る 0.5 刻みの速さのうち、75 秒からの離れの大きい方が
    いちばん小さいもの（③ の録画に当てると依頼91 と同じ 10.5 倍になることを確かめた）
    ⑦ 10.5 倍・④ 12 倍・⑤ 10.5 倍・⑥ 9.5 倍（同じ店の serve と bus は同じ速さ）
  出力：rec_compare_20261105/{fam_p5|fam_p2|fam_p3|fam_p4}/{serve|bus}/panel/whole_wide_l30_panel.mp4・whole_wide_l30_panel_mid.png・panel_log.txt
  題：「⑦ ロボット2台・配膳だけ」「⑦ ロボット2台・配膳＋下げ膳」の形（④⑤⑥ も同じ形）。題は短くしていない
    題が切れたか：切れていない。8本の真ん中のコマで目で見た（night/20261105_rec92/titles_check.png）。
    字の幅を測ると、長い方の題の右端が 398 px（パネルの幅 560 px）
  bus の動画では「下げ膳」の表示が出ることも見た（④ bus の真ん中のコマ）
  作業の途中で：最初のまとめのスクリプト（make_rest.sh）が実行の時間切れになりそうだったので、⑤ serve の途中で親のスクリプトだけ止め、
    ⑤ serve は最後まで走らせた（panel_log.txt と mid.png が出来たことで確かめた）。残り3本は make_rest2.sh で作った。やり直した動画はない

--------------------------------------------------------------------
4. 台帳
--------------------------------------------------------------------
  2929 行 → 2944 行（追記 15 行だけ：確かめ det92 5・録画 rec92 10。completed 13・stopped 2（② の2回）・unity_cs ServiceSim/cs:78）
  先頭 2929 行の md5 は a0589b65d2aae361301c9033afe92994（退避と同じ）。終わったあとの md5 53aa41f760e040b96ec904838d3e2fb3。鍵ファイルは残っていない

--------------------------------------------------------------------
5. 記録の置き場所
--------------------------------------------------------------------
  night/20261105_det92/（確かめの回）・night/20261105_rec92/（queue.json・q_det92.json・rec_runner.py・post92.py・pick_speed.py・make_rest.sh・
    make_rest2.sh・agg92.py・agg92_out.txt・cmp92.py・cmp92_out.txt・runner_log・runs.csv・judge.md・panel_*_log.txt・titles_check.png）
  前の分（rec_compare_20261104 など）は消していない・上書きしていない

--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. ② fam_p0 種8 の serve・bus が実時間 80 分の上限で止まり、② の比較動画が作れていない。
     撮り直すか（そのときは、ほかの重い処理を止めた状態で回すか・上限を延ばすか）を決めてほしい。
     同じ ② は依頼87 では 42.8 分で撮れているので、店や作りの問題ではなく、今日のマシンの重さによるものとみている
  2. ④ bus は 77.8 分で上限の手前だった。依頼93・94（大型店）でも同じ上限・同じ同時2本にするか

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

②の2本は、撮影1本の上限にした80分に当たって途中で止まりました。前の日には同じ②が43分で撮れています。報告では、この日はマシン全体が1.4倍ほど遅く、②を撮っていた間はほかの処理が CPU を多く使っていた、と見立てています。店や作りの問題ではないので、上限を120分に延ばして撮り直すことにしました。

- ねらい：撮影の上限を、店の重さではなくマシンの混み具合で止まらない長さにする
- 変わったこと：1本の上限を80分から120分に延ばした（同時に撮る本数は2本のまま）
- 見込める効果：依頼93 の②の2本は76分ずつで、上限に当たらずに撮れた。これからの大型店の撮影も同じ上限で回す


## 作業ログ ― 6店の比較動画：配膳だけと配膳＋下げ膳を左右に並べた

撮ったパネル付きの動画2本を、同じ店の時刻で左右に並べ、下に4つの数字を付けました。作り方は、前の回で③の比較動画を作ったスクリプトを、店ごとに回せるようにしたものです。数字の色は、良くなった方を緑、悪くなった方を赤にしています。

### make_compare92.py（店ごとに比較動画を作る）

```python
"""配膳だけと配膳＋下げ膳のパネル付き通し動画を左右に並べ、下に数字の帯を付ける（依頼92の4店・2026-11-05・Claude。③の make_compare.py を店ごとに回せるようにした版）
使い方: python3 make_compare92.py <rec_compare_20261105 の場所> <出力先> <店> <題> <種>"""
import json, subprocess, sys
from PIL import Image, ImageDraw, ImageFont
R,OUT,ST,LABEL,SEED=sys.argv[1:6]
W,H=1920,1080; BG="#faf9f5"; INK="#1d1d1b"; Q="#6b6a64"; GOOD="#1d9e75"; BAD="#d85a30"; LINE="#d9d6cc"
F=lambda s,b=False: ImageFont.truetype("/usr/share/fonts/opentype/noto/NotoSansCJK-%s.ttc"%("Bold" if b else "Regular"),s,index=0)
S={m:json.load(open(f"{R}/{ST}/{m}/summary.json"))["site_metrics"] for m in ("serve","bus")}
im=Image.new("RGB",(W,H),BG); d=ImageDraw.Draw(im)
d.text((40,22),f"{LABEL}・ロボット2台　配膳だけ と 配膳＋下げ膳",font=F(40,True),fill=INK)
d.text((W-40,34),f"同じお客さんの来かた（種{SEED}）・同じ速さ",font=F(24),fill=Q,anchor="ra")
VW,VH,Y0=936,527,150
for i,lab in enumerate(("配膳だけ","配膳＋下げ膳")):
    d.text((16+i*(VW+16),104),lab,font=F(32,True),fill=INK)
rows=[("スタッフ1人が歩いた距離","walk_km_per_staff","km",2,True),("お客さんが帰ってから卓が使えるまで","turn_mean","分",1,True),
      ("入店待ち（来てから席に着くまで）","entry_wait_mean","分",1,True),("ロボットが止まってスタッフが助けた回数","rescues","回",0,True)]
y=Y0+VH+30; d.line((40,y-12,W-40,y-12),fill=LINE,width=2)
for name,k,u,dp,low in rows:
    a,b=S["serve"][k],S["bus"][k]; fa=("%%.%df"%dp)%a; fb=("%%.%df"%dp)%b
    same=fa==fb; good=(b<a)==low
    col=Q if same else (GOOD if good else BAD)
    d.text((40,y+6),name,font=F(30),fill=INK)
    d.text((1040,y),fa+" "+u,font=F(40,True),fill=Q,anchor="ra")
    d.text((1100,y+4),"→",font=F(34),fill=Q)
    d.text((1420,y),fb+" "+u,font=F(40,True),fill=col,anchor="ra")
    d.text((1460,y+8),"変わらない" if same else ("減った" if b<a else "増えた"),font=F(28,True),fill=col)
    y+=78
d.text((40,H-44),"Unity の中で1回動かした結果です。実際のロボットや人が同じ動きをするとは限りません。",font=F(22),fill=Q)
bg=f"{OUT}/bg_{ST}.png"; im.save(bg)
dur=lambda f: float(subprocess.run(["ffprobe","-v","error","-show_entries","format=duration","-of","csv=p=0",f],capture_output=True,text=True).stdout)
sv,bv=f"{R}/{ST}/serve/panel/whole_wide_l30_panel.mp4",f"{R}/{ST}/bus/panel/whole_wide_l30_panel.mp4"
T=max(dur(sv),dur(bv))+2
vf=("[1:v]scale=%d:%d,tpad=stop_mode=clone:stop_duration=30[a];[2:v]scale=%d:%d,tpad=stop_mode=clone:stop_duration=30[b];"
    "[0:v][a]overlay=16:%d[t];[t][b]overlay=%d:%d,format=yuv420p"%(VW,VH,VW,VH,Y0,16+VW+16,Y0))
mp4=f"{OUT}/series8_compare_serve_bus_{ST.replace('fam_','')}_v1.mp4"
subprocess.run(["ffmpeg","-y","-v","error","-loop","1","-i",bg,"-i",sv,"-i",bv,"-filter_complex",vf,"-t","%.2f"%T,"-r","30",
  "-c:v","libx264","-preset","veryfast","-crf","22","-movflags","+faststart",mp4],check=True)
subprocess.run(["ffmpeg","-y","-v","error","-ss","40","-i",mp4,"-frames:v","1",mp4.replace(".mp4","_mid.png")],check=True)
subprocess.run(["ffmpeg","-y","-v","error","-i",mp4,"-frames:v","1","-q:v","4",mp4.replace(".mp4",".jpg")],check=True)
print(ST,"%.1f"%T,{k:(S['serve'][k],S['bus'][k]) for k in ('walk_km_per_staff','turn_mean','entry_wait_mean','rescues')})
```

### make_compare92.py の出力（④⑤⑥⑦。②は依頼93 のあと）

```
fam_p2 81.3 {'walk_km_per_staff': (2.3968, 2.1948), 'turn_mean': (27.0317, 33.0558), 'entry_wait_mean': (17.4812, 25.841), 'rescues': (33, 87)}
fam_p4 76.5 {'walk_km_per_staff': (2.2855, 1.9912), 'turn_mean': (11.5906, 10.0405), 'entry_wait_mean': (3.1716, 2.8284), 'rescues': (7, 12)}
fam_p3 77.3 {'walk_km_per_staff': (2.906, 2.6422), 'turn_mean': (9.3662, 8.0019), 'entry_wait_mean': (5.6866, 4.8492), 'rescues': (30, 26)}
fam_p5 79.2 {'walk_km_per_staff': (2.6156, 2.4193), 'turn_mean': (3.7772, 4.97), 'entry_wait_mean': (3.6852, 4.6425), 'rescues': (22, 37)}
fam_p0 78.1 {'walk_km_per_staff': (1.5954, 1.1302), 'turn_mean': (2.5992, 2.4742), 'entry_wait_mean': (1.4566, 1.3974), 'rescues': (16, 20)}
```

![④効率重視・小さめの店の比較動画の1コマ。左が配膳だけ、右が配膳＋下げ膳。下の数字は、歩く距離が減り、卓が使えるまでと入店待ちが延び、助けた回数が33回から87回に増えたことを示す](https://pixelstomotors.com/media/LOG444_01_compare_p2.png)

④はスタッフ2人の小さな店です。下げ膳のロボットは卓に着いてから、片付けのスタッフが来るのを待ちます。スタッフが2人しかいないと、その迎えに行く手間が案内と片付けの手を取り、入口で待つ組が増えました。右のパネルでは、入口で待つ組が配膳だけの店より多く、片付けを待つ卓も18卓と多いままです。

![⑤ゆったり・入口が正面の店の比較動画の1コマ。4つの数字がすべて減っている](https://pixelstomotors.com/media/LOG444_02_compare_p3.png)

⑤は通路にゆとりのある店で、4つの数字がすべて減りました。下げ膳のロボットが卓で待っていても、ほかの人やロボットは別の通路を回って行けます。

![②定番の郊外型の比較動画の1コマ。歩く距離が1.60kmから1.13kmに減り、卓が使えるまでと入店待ちもわずかに減った](https://pixelstomotors.com/media/LOG444_03_compare_p0.png)

②は、昔働いていたファミレスを記憶から起こした店です。19卓と小さく、お客さんも少ないので、もともと待ちは短い店です。下げ膳を任せると、スタッフの歩く距離が3割ほど減りました。

6店を並べると、次のようになります。Unity の数字はどれも1回ずつの録画の値です。右の2列は、サイトの試算（同じ条件で40回の平均）で、配膳だけから配膳＋下げ膳にしたときの向きです。

| 店 | 歩く距離（km） | 卓が使えるまで（分） | 入店待ち（分） | 助けた回数 | 試算の入店待ち | 試算の卓が使えるまで |
|---|---|---|---|---|---|---|
| ② 定番の郊外型 | 1.60 → 1.13 | 2.6 → 2.5 | 1.46 → 1.40 | 16 → 20 | 1.30 → 2.12（延びる） | 2.80 → 2.66（縮む） |
| ③ 効率重視・入口が角 | 2.65 → 2.38 | 3.4 → 4.7 | 3.06 → 3.44 | 20 → 41 | 1.13 → 2.22（延びる） | 2.14 → 2.00（縮む） |
| ④ 効率重視・小さめの店 | 2.40 → 2.19 | 27.0 → 33.1 | 17.48 → 25.84 | 33 → 87 | 5.57 → 3.86（縮む） | 9.88 → 8.57（縮む） |
| ⑤ ゆったり・入口が正面 | 2.91 → 2.64 | 9.4 → 8.0 | 5.69 → 4.85 | 30 → 26 | 2.37 → 2.78（延びる） | 2.41 → 2.25（縮む） |
| ⑥ ゆったり・入口が横 | 2.29 → 1.99 | 11.6 → 10.0 | 3.17 → 2.83 | 7 → 12 | 2.11 → 1.77（縮む） | 5.27 → 4.74（縮む） |
| ⑦ ③の通路を95cmに | 2.62 → 2.42 | 3.8 → 5.0 | 3.69 → 4.64 | 22 → 37 | 1.60 → 1.70（延びる） | 2.19 → 2.04（縮む） |

[図解: LOG444_serve_bus_six.html](https://pixelstomotors.com/embeds/LOG444_serve_bus_six.html)

歩く距離は、Unity でも試算でも6店すべてで減ります。ここは向きがそろっています。

卓が使えるまでの時間は、試算では6店すべてで縮むのに、Unity では③④⑦で延びました。試算には、下げ膳のロボットが卓でスタッフを待つあいだに通路をふさぐ、という動きが入っていません。前の回（LOG440）の120回でも同じずれが出ていて、この1回ずつの動画でも同じ向きに出ました。

入店待ちは、試算と Unity で向きが合う店と合わない店が入り混じっています。④は試算では縮むのに Unity では大きく延びました。1回ずつの録画なので、ここから店ごとの答えを言い切ることはできません。動画は、何が起きているかを目で見るためのもので、数字の正は試算と、Unity の120回の集計です。

/series8 の店の動画の設定に、比較動画を足しました。差分です。

### series8 の差分（④⑤⑥⑦。commit 0db70df）

```diff
commit 0db70dfb140750dde6b40fb4d278f6e4105e12d2
Author: Claude <noreply@anthropic.com>
Date:   Thu Nov 5 14:48:31 2026 +0900

    series8: ④⑤⑥⑦に配膳だけと配膳＋下げ膳の比較動画を足す（依頼92）
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01LevEXRjJt67bSDYZYEUWTQ

diff --git a/public/sim/serving-robot.html b/public/sim/serving-robot.html
index eeb72a1..18689bf 100644
--- a/public/sim/serving-robot.html
+++ b/public/sim/serving-robot.html
@@ -501,16 +501,20 @@ function bigPlanSvg(p) {
       }).join("")
     + `</svg>`;
 }
-// Unity で動かした様子（2026-11-03、11-04 にパネル付きの v2 へ。固めた版 cs:76 で撮り直し）。図面のある店ごとに、引き→問題の場所→寄りの動画を1本。
+// Unity で動かした様子（2026-11-03、11-04 にパネル付きの v2 へ。固めた版 cs:76 で撮り直し。11-05 に④⑤⑥⑦の配膳だけと配膳＋下げ膳の比較動画を足した・依頼92・cs:78）。図面のある店ごとに、引き→問題の場所→寄りの動画を1本。
 // 条件は Unity の録画の回のもの（試算で選んでいる人数・台数とは別）。動画と表紙の画像は R2（/media/）
 const UNITY = {
   fam_p0: { video: "/media/series8_unity_fam_p0_v3.mp4", poster: "/media/series8_unity_fam_p0_v3.jpg", staff: 2, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約55秒）" },
   fam_p1: { compare: { video: "/media/series8_compare_serve_bus_p1_v1.mp4", poster: "/media/series8_compare_serve_bus_p1_v1.jpg", note: "同じお客さんの来かたで、ロボットを配膳だけに使った店（左）と下げ膳にも使った店（右）を同時に流します（約75秒）。この1回では、スタッフの歩く距離は減りましたが、卓が使えるまでの時間と入店待ちは延び、ロボットを助けに行く回数は増えました。下げ膳の台が卓でスタッフを待つあいだ、細い通路をふさぐことがあるためです" },
     video: "/media/series8_unity_fam_p1_v3.mp4", poster: "/media/series8_unity_fam_p1_v3.jpg", staff: 4, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約70秒）" },
-  fam_p2: { video: "/media/series8_unity_fam_p2_v3.mp4", poster: "/media/series8_unity_fam_p2_v3.jpg", staff: 2, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約70秒）" },
-  fam_p3: { video: "/media/series8_unity_fam_p3_v3.mp4", poster: "/media/series8_unity_fam_p3_v3.jpg", staff: 4, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約60秒）" },
-  fam_p4: { video: "/media/series8_unity_fam_p4_v3.mp4", poster: "/media/series8_unity_fam_p4_v3.jpg", staff: 3, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約60秒）" },
-  fam_p5: { video: "/media/series8_unity_fam_p5_v3.mp4", poster: "/media/series8_unity_fam_p5_v3.jpg", staff: 4, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約70秒）" }
+  fam_p2: { compare: { video: "/media/series8_compare_serve_bus_p2_v1.mp4", poster: "/media/series8_compare_serve_bus_p2_v1.jpg", note: "同じお客さんの来かたで、ロボットを配膳だけに使った店（左）と下げ膳にも使った店（右）を同時に流します（約80秒）。この1回では、スタッフの歩く距離は減りましたが、卓が使えるまでの時間と入店待ちは大きく延び、ロボットを助けに行く回数は33回から87回に増えました。スタッフ2人の小さめの店では、下げ膳の台を卓で迎えに行く手間が、案内や片付けの手を取ってしまうためです" },
+    video: "/media/series8_unity_fam_p2_v3.mp4", poster: "/media/series8_unity_fam_p2_v3.jpg", staff: 2, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約70秒）" },
+  fam_p3: { compare: { video: "/media/series8_compare_serve_bus_p3_v1.mp4", poster: "/media/series8_compare_serve_bus_p3_v1.jpg", note: "同じお客さんの来かたで、ロボットを配膳だけに使った店（左）と下げ膳にも使った店（右）を同時に流します（約75秒）。この1回では、スタッフの歩く距離、卓が使えるまでの時間、入店待ち、ロボットを助けに行く回数のどれもが減りました。通路がゆったりした店では、下げ膳の台が卓で待っていても、ほかの人やロボットの道をふさぎにくいためです" },
+    video: "/media/series8_unity_fam_p3_v3.mp4", poster: "/media/series8_unity_fam_p3_v3.jpg", staff: 4, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約60秒）" },
+  fam_p4: { compare: { video: "/media/series8_compare_serve_bus_p4_v1.mp4", poster: "/media/series8_compare_serve_bus_p4_v1.jpg", note: "同じお客さんの来かたで、ロボットを配膳だけに使った店（左）と下げ膳にも使った店（右）を同時に流します（約75秒）。この1回では、スタッフの歩く距離、卓が使えるまでの時間、入店待ちが減りました。ロボットを助けに行く回数は7回から12回に少し増えています" },
+    video: "/media/series8_unity_fam_p4_v3.mp4", poster: "/media/series8_unity_fam_p4_v3.jpg", staff: 3, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約60秒）" },
+  fam_p5: { compare: { video: "/media/series8_compare_serve_bus_p5_v1.mp4", poster: "/media/series8_compare_serve_bus_p5_v1.jpg", note: "同じお客さんの来かたで、ロボットを配膳だけに使った店（左）と下げ膳にも使った店（右）を同時に流します（約80秒）。③の通路を95cmに広げた店でも、この1回では、スタッフの歩く距離は減りましたが、卓が使えるまでの時間と入店待ちは延び、ロボットを助けに行く回数も増えました" },
+    video: "/media/series8_unity_fam_p5_v3.mp4", poster: "/media/series8_unity_fam_p5_v3.jpg", staff: 4, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約70秒）" }
 };
 let planView = "plan";
 function unityPane(k) {
```

### series8 の差分（②。commit e629556 のうち serving-robot.html）

```diff
commit e629556e8df31d92d112befe7ae746a60b24ba09
Author: Claude <noreply@anthropic.com>
Date:   Thu Nov 5 19:01:41 2026 +0900

    series8 に②の比較動画、LP の4視点をパネル付きに・最初の画面の2枚を今の版に差し替え（依頼93）
    
    丸テーブルの直す前・直した後は10月29日の版の録画のまま残し、その旨を書き添えた
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01LevEXRjJt67bSDYZYEUWTQ

diff --git a/public/sim/serving-robot.html b/public/sim/serving-robot.html
index 18689bf..ca02d96 100644
--- a/public/sim/serving-robot.html
+++ b/public/sim/serving-robot.html
@@ -501,10 +501,11 @@ function bigPlanSvg(p) {
       }).join("")
     + `</svg>`;
 }
-// Unity で動かした様子（2026-11-03、11-04 にパネル付きの v2 へ。固めた版 cs:76 で撮り直し。11-05 に④⑤⑥⑦の配膳だけと配膳＋下げ膳の比較動画を足した・依頼92・cs:78）。図面のある店ごとに、引き→問題の場所→寄りの動画を1本。
+// Unity で動かした様子（2026-11-03、11-04 にパネル付きの v2 へ。固めた版 cs:76 で撮り直し。11-05 に②④⑤⑥⑦の配膳だけと配膳＋下げ膳の比較動画を足した・依頼92・93・cs:78）。図面のある店ごとに、引き→問題の場所→寄りの動画を1本。
 // 条件は Unity の録画の回のもの（試算で選んでいる人数・台数とは別）。動画と表紙の画像は R2（/media/）
 const UNITY = {
-  fam_p0: { video: "/media/series8_unity_fam_p0_v3.mp4", poster: "/media/series8_unity_fam_p0_v3.jpg", staff: 2, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約55秒）" },
+  fam_p0: { compare: { video: "/media/series8_compare_serve_bus_p0_v1.mp4", poster: "/media/series8_compare_serve_bus_p0_v1.jpg", note: "同じお客さんの来かたで、ロボットを配膳だけに使った店（左）と下げ膳にも使った店（右）を同時に流します（約80秒）。この1回では、スタッフの歩く距離が3割ほど減り、卓が使えるまでの時間と入店待ちもわずかに減りました。ロボットを助けに行く回数は16回から20回に増えています" },
+    video: "/media/series8_unity_fam_p0_v3.mp4", poster: "/media/series8_unity_fam_p0_v3.jpg", staff: 2, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約55秒）" },
   fam_p1: { compare: { video: "/media/series8_compare_serve_bus_p1_v1.mp4", poster: "/media/series8_compare_serve_bus_p1_v1.jpg", note: "同じお客さんの来かたで、ロボットを配膳だけに使った店（左）と下げ膳にも使った店（右）を同時に流します（約75秒）。この1回では、スタッフの歩く距離は減りましたが、卓が使えるまでの時間と入店待ちは延び、ロボットを助けに行く回数は増えました。下げ膳の台が卓でスタッフを待つあいだ、細い通路をふさぐことがあるためです" },
     video: "/media/series8_unity_fam_p1_v3.mp4", poster: "/media/series8_unity_fam_p1_v3.jpg", staff: 4, note: "引きで店全体を見たあと、ロボットが長く止まった場所に3か所寄ります。右のパネルに、スタッフとロボットがいま何をしているかが出ます（約70秒）" },
   fam_p2: { compare: { video: "/media/series8_compare_serve_bus_p2_v1.mp4", poster: "/media/series8_compare_serve_bus_p2_v1.jpg", note: "同じお客さんの来かたで、ロボットを配膳だけに使った店（左）と下げ膳にも使った店（右）を同時に流します（約80秒）。この1回では、スタッフの歩く距離は減りましたが、卓が使えるまでの時間と入店待ちは大きく延び、ロボットを助けに行く回数は33回から87回に増えました。スタッフ2人の小さめの店では、下げ膳の台を卓で迎えに行く手間が、案内や片付けの手を取ってしまうためです" },
```


## 作業ログ ― 依頼93：②の撮り直しと、LP の動画の素材を今の版で撮った

LP（配膳ロボットでスタッフを1人減らせるか）には、Unity の動画が5本ありました。最初の画面の4分割のうち2枚（3Dで建てる・走らせる）、4つの視点で店を見る動画、丸テーブルの直す前と直した後の2本です。どれもパネルのない、10月の版の録画でした。サイトに出す Unity の動画はパネル付きにそろえる、と決めていたので、撮り直すことにしました。

ただ、LP の動画はかなり小さく出ています。PC で幅533px、スマホでは177pxの枠もあります。横1920の動画を縮めると、パネルの字は6px前後になって読めません。そこで、出し方を分けました。

| LP のどこ | 前 | 後 |
|---|---|---|
| 最初の画面の2枚（3Dで建てる・走らせる） | 10月の版のループ | 今の版のループ（パネルなし）。押すと4視点のパネル付き動画へ移る |
| 4つの視点で店を見る動画 | 幅480px・パネルなし | パネル付き・PC では幅いっぱい（1040px） |
| 丸テーブルの直す前・直した後 | 10月29日の版の録画 | そのまま残し、10月29日の版の録画だと書き添えた（下の節） |

### 依頼93 の依頼文

```
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 600
---
# 依頼93：② の配膳だけ・配膳＋下げ膳を撮り直し、LP（配膳ロボットでスタッフを1人減らせるか）の Unity の動画5本の素材を撮る

エイイチと決めたこと（2026-11-05）：
- 依頼92 で 80 分の上限に当たった ② の2本を撮り直す。撮影1本の上限はこれから 120 分（同時2本のまま）
- LP の Unity の動画5本を今の版（cs:78）で撮り直す。下の3本（4視点・丸テーブルの直す前／直した後）はパネル付きにする。最初の画面の2枚（3Dで建てる・走らせる）は小さな枠なのでパネルなしのループにする
Unity の作りは cs:78 のまま。動き・決まりには触れない（録画のカメラや出力を足すのはよい。足したら cs を上げ、同じ種の2回で記録が1行も違わないことを確かめてから撮る）。LP への差し替え・並べ方は Claude がやる。
**エイイチは見ていないことがある。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。時刻で止めず、全部終わるまで続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所が cs:78、Builds/headless と Builds/rec20_bus91 が cs:78。保留 0
2. Unity エディタ・night_runner／rec_runner が動いていない。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳を archive/unity_ledger_v1_pre_rec93_20261105/ に退避（行数と md5 を報告に）
3. 録画の前に、Chrome など重い処理が動いていれば報告に書く（止めはしない）

## A. ② の撮り直し（依頼92 と同じ撮り方）
- ② fam_p0・種8・serve（条件17）と bus（条件131）。依頼92 と同じ rec_runner の設定で、--max-wall-min だけ 120 にする
- 置き場所：rec_compare_20261105/fam_p0/{serve|bus}/（依頼92 の止まった回のファイルがあれば、消さずに別名のフォルダへ寄せてから撮る）
- パネル付きの通しの動画も依頼92 と同じ作り方で（post92.py・pick_speed.py。題「② ロボット2台・配膳だけ」「② ロボット2台・配膳＋下げ膳」、同じ速さ）

## B. LP の素材（置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_lp_20261105/）
### B1. ③ fam_p1・2台・種7・serve（条件2）を1回、カメラを足して撮る
- カメラ：今の wide_l30 に加えて、真上（top）・正面（front）・横（side）。今の LP の4視点の動画（LOG371 で作ったもの。真上・正面・横・斜め）と同じ向きにする。録画の道具にこの3つが無ければ、カメラだけを足す（向きと高さは報告に）
- 解像度・コマの間隔・frames.csv・timeline.csv は依頼87 と同じ。回の最初から全員が帰るまで
- これから作るもの（出力 rec_lp_20261105/p1_s7/）
  1. **4視点のパネル付き動画**：4つのカメラを 2×2 に並べた映像（左上 真上・右上 斜め wide_l30・左下 正面・右下 横。各映像の左上に小さく「真上」などの名前）を作り、それを make_panel_video.py に録画として渡して通しのパネル付き動画にする（60〜90 秒・1920x1080・30fps。題「③ ロボット2台・4つの視点」。make_panel_video.py の形は変えない。2×2 の映像を渡せない作りなら、渡せるように入口だけ直し、差分を報告に）→ `four_views_panel.mp4`
  2. **走らせるループ（パネルなし）**：真上の録画から、スタッフとロボットがいちばん多く動いている所（timeline.csv で客席にいる組と動いている人・台が多い時間）を 12 秒前後のループに切り出す。横:縦 ＝ 3:2、幅 1200px、音なし → `top_busy_loop.mp4`（切り出した店の時刻を報告に）
  3. **3Dで建てるループ（パネルなし）**：wide_l30 から店全体が映る 12 秒前後のループ。横:縦 ＝ 8:7、幅 1000px → `oblique_loop.mp4`
  それぞれ1コマ目の png も同じ名前で置く

### B2. ② の丸テーブル T05・T06 の直す前・直した後（LOG404 の依頼26・28 と同じ題材）
- ② fam_p0・2台・種0・serve（条件17 の種0）。直す前の店は、依頼26 と同じやり方（cs:39 と同じ店の形のデータ・版 dffc100b269c を写して建て、撮ったあと元に戻す。戻したことを確かめる）。直した後は今の店の形
- カメラ：依頼28 の寄り（75°・丸テーブルのまわり・映像A）と同じ置き方。依頼87 と同じく frames.csv・timeline.csv も出す
- 今の版でも直す前に丸テーブルの間で止まるかを、stops.csv で確かめて報告に書く（止まらなくても撮って終える。どちらになったかが大事）
- 作るもの（出力 rec_lp_20261105/p0_round/{before|after}/）：丸テーブルのまわりの止まりがいちばん長い時間を中心に、直す前と直した後で同じ店の時刻の範囲（150〜300 秒）を選び、make_panel_video.py の --from／--to でパネル付き動画にする（2本とも同じ範囲・同じ速さ。題「② 丸テーブルの間・直す前」「② 丸テーブルの間・T06 を右へ1.0m」）→ `round_{before|after}_panel.mp4`。選んだ範囲と理由を報告に

## 回し方
- 撮るのは A の2回・B1 の1回・B2 の2回、合わせて5回。同時2本、1回の上限 120 分。止まっても回し直さない
- 台帳は追記だけ。直す前の店で回した回は、台帳の layout_generation でわかるようにする

## 止める線
瞬間移動が1回でも出たとき、またはカメラ・出力を足したあとの同じ種の2回が違ったとき。その項目を止めて報告し、ほかは続ける。

## 報告
claude_code_reports/20261105_rec93.txt に：
- 回ごと：最後まで回ったか・全員帰ったか・実時間・瞬間移動・できた動画の名前と長さと速さ
- A の ② の数字（依頼92 の表と同じ列）
- B1 のカメラの向き、切り出した時刻。B2 の直す前の店の形を戻したことの確かめ、丸テーブルで止まったか、選んだ範囲
- 足したカメラ・出力と cs、同じ種の2回の一致
- 台帳の行数の変化と md5
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼93 の報告（claude_code_reports/20261105_rec93.txt）

```
====================================================================
依頼93：② の配膳だけ・配膳＋下げ膳を撮り直し、LP の Unity の動画5本の素材を撮る
2026-11-05 15:32〜18:40　作業場所 cs:78（Unity の作りは変えていない。check-in なし）
====================================================================

結論
  ・撮る5回（A 2回・B1 1回・B2 2回）は、どれも最後まで回り、全員帰った。瞬間移動 0・1コマの跳び 0。止める線には当たっていない
  ・A：② の2本は 75.9 分・75.8 分で終わった（上限 120 分）。パネル付きの動画2本（9 倍）を作った
  ・B1：カメラは実行ファイルの引数（-ssRecCam）だけで足せたので、Unity は変えていない（cs は上げていない）。
    4つのカメラで撮った回の記録は、同じ cs:78・同じ種で依頼91 に2つのカメラで撮った回と1行も違わなかった
  ・B2：今の版では、直す前の店でも丸テーブルのまわりで長く止まらなかった（いちばん長い止まり 3.6 秒・30 秒以上 0 回）。
    依頼どおり、そのまま撮って動画2本を作った
  ・直す前の店は、依頼26 のやり方そのままでは今の版で回らない（試算の版の突き合わせ）。店の形のデータだけを写して回した（決めてほしいこと 1）


--------------------------------------------------------------------
0. 始める前の確かめ（15:32 ごろ。どれも依頼どおり）
--------------------------------------------------------------------
  作業場所 cs:78 - head・保留 0（cm status --machinereadable は STATUS 行だけ）
  Builds/headless・Builds/rec20_bus91：どちらも build_id cs78_20261104_1011・unity_cs ServiceSim/cs:78・pending_changes 空
  Unity エディタ・night_runner・rec_runner：動いていない（Unity Hub と、依頼箱の inbox_runner.py だけ）
  KIOXIA マウント済み／unity_ledger_v1.lock なし
  台帳を archive/unity_ledger_v1_pre_rec93_20261105/ に退避（service_sim/unity/archive の下。依頼92 の退避と同じ所）
    2944 行・md5 53aa41f760e040b96ec904838d3e2fb3（退避の前と後で同じ）
    ※ 最初にまちがえて /Volumes/KIOXIA/r2r2r-data/archive/ に写したので、正しい所に写し直したあと、自分が作ったその写しだけを消した
  重い処理（録画の前に見た。止めていない）
    15:33：duetexpertd 68%・WindowServer 42%・corespotlightd 41%（自分が探し物に使った mdfind のためとみている）・Chrome の描画 9%
    15:37（A を始める直前）：xprotectd 22%・Chrome Helper 17%・Creative Cloud 11%・負荷 4.0〜4.4
    依頼92 で見た Chrome 193% のような重い処理はなかった


--------------------------------------------------------------------
1. 回ごと
--------------------------------------------------------------------
  （入店待ち・料理の待ち・turn は分、歩いた距離＝スタッフ1人・km）
  回	最後まで	全員帰った	実時間	瞬間移動	動画（長さ・速さ）
  A ② fam_p0 種8 serve	○	○ 10137秒	75.9分	0	whole_wide_l30_panel.mp4 76.1秒・9倍
  A ② fam_p0 種8 bus	○	○ 10056秒	75.8分	0	whole_wide_l30_panel.mp4 75.6秒・9倍
  B1 ③ fam_p1 種7 serve（4つのカメラ）	○	○ 11880秒	91.7分	0	four_views_panel.mp4 76.2秒・10.5倍／top_busy_loop.mp4 12.0秒／oblique_loop.mp4 12.0秒
  B2 ② fam_p0 種0 serve 直す前	○	○ 9628秒	6.7分	0	round_before_panel.mp4 20.0秒・1倍（録画のまま。店の 15 倍）
  B2 ② fam_p0 種0 serve 直した後	○	○ 9628秒	7.4分	0	round_after_panel.mp4 20.0秒・1倍（同じ）
  ・5回とも 1コマの跳び 0・解けずに残った詰まり 0
  ・同時2本・1回の上限 120 分（-ssMaxWallMin 120）。night_runner の外側の上限は 150 分にした
    （rec_runner は外側の上限が --max-wall-min 以下だと始めない作り。依頼92 は 120／80 だった）
  ・並び：A の2回（15:37〜16:53）→ 空いた所に B1（16:54〜18:25）・B2 直す前（16:55〜17:02）・B2 直した後（17:02〜17:09）
  ・止まった回はなく、回し直した回もない
  ・A の runner_log.txt の頭に、始める前に打った「から回し」（--dry-run）の行が残っている（回は起こしていない）


--------------------------------------------------------------------
2. A：② の撮り直し（依頼92 と同じ撮り方）
--------------------------------------------------------------------
  回し方：night/20261105_rec93a/rec_runner.py（依頼92 の rec_runner.py の写し。中身は変えていない）で
    --oblique --hide-paths --max-wall-min 120 --parallel 2 --no-retry --limit-min 150 --build Builds/rec20_bus91
    並び：night/20261105_rec93a/queue.json（依頼92 の queue.json から ② の2回だけを残し、label を rec93a にしたもの）
  依頼92 の止まった回のファイル：rec_compare_20261105/fam_p0/ はまだ無かったので、寄せるものはなかった
    （依頼92 の回のフォルダ 20261105_rec92_…fam_p0… は名前が違うので触っていない）
  置き場所：rec_compare_20261105/fam_p0/{serve|bus}/（録画 mp4・frames.csv・camera.json・timeline.csv・summary.json、bus は bus_summary.json・bus_runs.csv も）

  店	使い方	最後まで	全員帰った	実時間	瞬間移動	上限で戻った	入店待ち	料理の待ち	turn	歩いた距離	下げ膳を運んだ割合	動画（長さ・速さ）
  ② fam_p0 種8	serve	○	○ 10137秒	75.9分	0	-	1.46	0.62	2.60	1.60	-	76.1秒・9倍
  ② fam_p0 種8	bus	○	○ 10056秒	75.8分	0	0	1.40	1.19	2.47	1.13	0.750（27/36）	75.6秒・9倍
  ・数字は night/20261105_rec93b/agg93.py（依頼92 の agg92.py と同じ読み方）
  ・judge.md：回の失敗 0・基準なし 2

  パネル付きの動画：night/20261105_rec92/post92.py と pick_speed.py をそのまま使った（変えていない）
    速さ：pick_speed.py で 9 倍（録画 serve 685.2 秒・bus 680.3 秒）。2本とも同じ速さ
    make_panel_video.py は md5 45a541e860222bb0426ea30c5bd976d8（依頼92 と同じ。変えていない）
    出力：rec_compare_20261105/fam_p0/{serve|bus}/panel/whole_wide_l30_panel.mp4・whole_wide_l30_panel_mid.png・panel_log.txt
    1920x1080・30fps（スクリプトが確かめた）。題「② ロボット2台・配膳だけ」「② ロボット2台・配膳＋下げ膳」。bus の真ん中のコマで題が切れていないこと・「下げ膳」の表示が出ることを目で見た


--------------------------------------------------------------------
3. B1：③ fam_p1・2台・種7・serve（条件2）を4つのカメラで
--------------------------------------------------------------------
  足したカメラと cs
    実行ファイル（cs:78）の録画の引数 -ssRecCam（名前,方位,見下ろす角度,注視点x,注視点y,距離,画角,w,h）は、どの向きのカメラでも置けるので、
    Unity には何も足していない。cs は 78 のまま。回し方だけ night/20261105_rec93b/rec_runner93.py（依頼92 の rec_runner.py の写し）に
    --lp4（4つのカメラ）と --close（B2 の寄り）の2つの引数を足した
  LOG371 の4視点の向き（four-views.mp4 は Unity エディタの4分割の画面。画面の向きの印から読んだ）
    真上：画面の上が店の手前（入口の側）・画面の右が店の左　／　正面：奥（キッチンの側）から入口の方を水平に見る　／
    横：右の壁の側から左を水平に見る　／　斜め：右奥の角の側から見下ろす
  撮ったカメラ（どれも 3840×2160・画角 40°・注視点は店の中央 (12, 8)。0.5 秒ごと・回の最初から全員が帰るまで・frames.csv・camera.json）
    wide_l30：方位 +30°・見下ろす角度 60°・距離 39.4 m（依頼87 と同じ）
    top     ：方位 180°・見下ろす角度 90°・距離 26.3 m。カメラは (12, 8) の真上・高さ 26.3 m。LOG371 の真上と同じ向き
    front   ：方位 180°・見下ろす角度 45°・距離 27.4 m。カメラは (12, 27.37)・高さ 19.37 m（店の奥の外）。LOG371 の正面と同じ方位
    side    ：方位 −90°・見下ろす角度 45°・距離 33.4 m。カメラは (35.62, 8)・高さ 23.62 m（店の右の外）。LOG371 の横と同じ方位
    距離は night/20261105_rec93b/camdist93.py（依頼87 の camdist.py と同じ決め方：床の角と四方の壁の上が画面の 97% に入るいちばん近い所。
      同じ計算で wide_l30 が 39.4 m になることを確かめた）。撮ったあと camera.json の行列で、どのカメラにも店全体が入っていることを確かめた
    正面・横を水平（0°）にしなかったわけ：録画の道具の斜めのカメラは注視点が床の高さなので、0° だと床の高さから撮ることになり、卓に遮られる。
      LOG371 の正面・横は正投影の水平の画面で、今の録画の道具では同じものは撮れない（決めてほしいこと 2）。正面ではキッチンの箱の手前（入口側）が一部隠れる

  同じ種の2回の一致（カメラを足したことの確かめ）
    この回（20261105_rec93lp_…）と、同じ cs:78・同じ条件・同じ種で依頼91 に wide_l30・wide_r30 の2つで撮った回（20261104_rec91_…）を比べた
    contacts・dishes・give_ups・groups・nowarp_jams・passes・people_jams・requeues・rescues・robot_track・stops・timeline・yields・frames.csv は1字も違わない。
    trips.csv は plan_ms_max だけ、summary.json は written_at だけ違う（依頼92 の比べ方と同じく一致とみる）
    Unity を変えていないので、cs を上げたうえでの2回の確かめは要らないと判断した

  作ったもの（rec_lp_20261105/p1_s7/。作り方 night/20261105_rec93b/lp93_b1.py・記録 b1_log.txt）
    1. four_views_panel.mp4（＋ four_views_panel.png）：1920x1080・30fps・2286 コマ・76.2 秒・10.5 倍。題「③ ロボット2台・4つの視点」
       4本を 960×540 に縮めて 2×2 に並べた four_views_2x2.mp4（1920×1080・各映像の左上に「真上」「斜め」「正面」「横」）と、
       four_views_2x2_frames.csv（4本の frames.csv が同じことを確かめて写した）を make_panel_video.py に渡した。
       make_panel_video.py は変えていない。2×2 は 16:9 で、ふつうに渡すと左右が切れるので、もとからある --fit（切らずに縮めて上下に余白）を使った
       速さは依頼91・92 と同じ決め方（0.5 刻みで 60〜90 秒に入るうち 75 秒にいちばん近いもの）
    2. top_busy_loop.mp4（＋ png）：1200×800（3:2）・12.0 秒・360 コマ・音なし
       切り出した店の時刻：6360〜6540 秒（開店から 1時間46分〜1時間49分）。録画のコマ 12720〜13079
       選び方：timeline.csv の行ごとに「席にいる組＋手すきでないスタッフ＋動いているロボット」を数え、続く4行（180 秒）の平均がいちばん大きい所
       （46.5。4行は 47・46・46・47）。真上の録画を横 3240 に切って（店は 373〜3467 px に入る）縮めた
    3. oblique_loop.mp4（＋ png）：1000×876・12.0 秒・音なし。wide_l30 の同じ時刻（6360〜6540 秒）
       8:7 にすると縦が 875 で奇数になり、ふつうの mp4（yuv420p）にできないので 876 にした（比 1.1416。8:7 は 1.1429）（決めてほしいこと 3）
       店の四隅と壁の上は 751〜3122 px に入るので、横 2466 に切っても店全体が入る
    再生の速さ：ループの2本は録画のまま（1コマ＝店の 0.5 秒・店の 15 倍）。最初と最後はつながっていない（切り出しただけ）
  目で見たこと：4視点の真ん中のコマで4つとも店全体が映り、名前の札が読め、題が切れていない。真上は入口が上に来る（LOG371 と同じ）


--------------------------------------------------------------------
4. B2：② の丸テーブル T05・T06 の直す前・直した後（fam_p0_s2_r2_a19・種0・serve）
--------------------------------------------------------------------
  直す前の店の建て方
    ・依頼26 は site_copy_dffc100b269c の14ファイル（試算の値 serving-robot-params.json・summary.json・6店の店の形と地図）を写した。
      今は試算の値が v2.9 で、実行ファイルは v2.9 でないと回さない（SimParams.asset の expectModel）。dffc100b269c の試算の値は v2.8 なので、
      14ファイルを写すと回らない
    ・そこで、店の形のデータだけを写した：Store/Layouts/p0_memory.json・p0_memory_map.json・summary.json を site_copy_dffc100b269c から写し（cmp で同じと確かめた）、
      試算の値は今の v2.9 のまま、版の札 meta.layout_generation の1行だけを 9b8dae7ebf8c → dffc100b269c にした
      （店の形の版と突き合わせて違えば回さない作りなので）（決めてほしいこと 1）
    ・この状態で RecordBuild.Build により Builds/rec21_before93 を作った（build_id cs78_20261105_1543・pending_changes「保留あり 4 件」）
    ・作ってすぐ cm undo で4件を戻した（データは実行ファイルに入っているので、撮る前に戻してよいと判断した）。
      戻したあと、4ファイルとも作る前の控え（night/20261105_rec93b/before_build/now_cs78/）と cmp で同じ・保留 0 を確かめた。撮り終えたあとも保留 0
    ・night_runner は保留つきの実行ファイルを受け付けないので、直す前の回は依頼26 と同じく実行ファイルを直接起こした（night/20261105_rec93b/run93b.sh）。
      引数は rec_runner が作るものと同じ（-ssLabel rec93before）
    ・台帳の layout_generation：直す前の回は dffc100b269c、直した後は 9b8dae7ebf8c（どちらも unity_cs は ServiceSim/cs:78）
  直す前の店と今の店の違い（dffc100b269c と 9b8dae7ebf8c の ② の JSON を比べた）
    T06 の位置（x 5.85〜6.95 → 6.85〜7.95）のほか、T01・T04・T05 の止まる位置、道順（routes）、場所の点（places）が違う。
    直す前の店には StaffPost が無いので、今の決まり（持ち場 入）で回しても持ち場は 0 か所になる（ログ「持ち場: 入（StaffPost 0 か所）」）
  カメラ：依頼28 の映像A と同じ置き方（真上・正投影・x 3.0〜10.0・y 10.5〜15.0・1680×1080・光の角度 75°）。
    コマの間隔は 0.5 秒（make_panel_video.py が1コマ＝店の 0.5 秒の作りのため。依頼28 は 0.2 秒）。回の最初から終わりまで。道の線は描かない（依頼87 と同じ）
    出力：{回}/recordings/…_A_close.mp4・…_A_close_frames.csv、{回}/timeline.csv

  丸テーブルの間で止まったか（stops.csv。x 3.6〜8.0・y 11.0〜14.2 で始まった止まり）
    直す前：44 回・合わせて 44.9 秒・30 秒以上 0 回・60 秒以上 0 回。いちばん長いのはロボット1 往復31 の t=4227.25 秒から 3.6 秒（スタッフとすれ違った）
    直した後：21 回・合わせて 35.2 秒・30 秒以上 0 回・60 秒以上 0 回。いちばん長いのはロボット1 往復65 の t=7139.75 秒から 5.35 秒
    → 今の版では、直す前の店でも丸テーブルの間で止まらなかった（依頼26 のような 60 秒の動けなくなりは出ない）。数秒の止まりは直す前の方が多い
  選んだ範囲：店の時刻 4080〜4380 秒（68分〜73分・300 秒）。2本とも同じ範囲・同じ速さ（1 倍）
    理由：直す前のいちばん長い止まり（4227.25 秒から 3.6 秒）の真ん中を中心に、依頼の上限の 300 秒をとった。
    この間、直す前はロボット1 が丸テーブルの間でスタッフとすれ違うたびに 8 回止まる（4184〜4235 秒・4372 秒）。
    直した後は同じ頃に 4 回（4213〜4226 秒）
  作ったもの（rec_lp_20261105/p0_round/{before|after}/。作り方 night/20261105_rec93b/lp93_b2.py・記録 p0_round/b2_log.txt）
    round_before_panel.mp4（＋ png）：1920x1080・30fps・600 コマ・20.0 秒・題「② 丸テーブルの間・直す前」
    round_after_panel.mp4（＋ png）：同じ・題「② 丸テーブルの間・T06 を右へ1.0m」
    make_panel_video.py の --from 4080 --to 4380 --speed 1 --fit（映像A は横 1680 で、ふつうに渡すと左右が切れるので切らずに縮めた）
    目で見たこと：10 秒目のコマで、直した後は T06 が右へずれていること、題が切れていないこと


--------------------------------------------------------------------
5. 台帳
--------------------------------------------------------------------
  2944 行 → 2949 行（追記 5 行だけ。どれも completed・ServiceSim/cs:78）
    20261105_rec93a_…fam_p0_r2_s8…（9b8dae7ebf8c）・…_bus（9b8dae7ebf8c）・20261105_rec93before_…fam_p0_r2_s0…（dffc100b269c）・
    20261105_rec93after_…（9b8dae7ebf8c）・20261105_rec93lp_…fam_p1_r2_s7…（9b8dae7ebf8c）
  先頭 2944 行の md5 は 53aa41f760e040b96ec904838d3e2fb3（退避と同じ）。終わったあとの md5 068dae4ef80e1e5730a145f238298061。鍵ファイルは残っていない
  ※ 直す前の行の unity_cs は cs:78 だが、中身は cs:78 に保留として ② の店の形を入れた実行ファイル。見分けは layout_generation（dffc100b269c）でつく（依頼26 と同じ）


--------------------------------------------------------------------
6. 記録の置き場所
--------------------------------------------------------------------
  night/20261105_rec93a/（A の queue.json・rec_runner.py・runner_log・runs.csv・judge・panel_fam_p0_*_log.txt）
  night/20261105_rec93b/（rec_runner93.py・camdist93.py・q_b1.json・q_b2after.json・run93b.sh・run93b_log.txt・agg93.py・lp93_b1.py・lp93_b2.py・
    before_build/（直す前の実行ファイルの build.log と、戻したことを確かめた控え）・logs/（直す前の回のログ））
  night/20261105_rec93lp/・night/20261105_rec93after/（B1・B2 直した後の実行係の記録）
  Builds/rec21_before93（直す前の実行ファイル。Builds/ は VCS の外）
  前の分（rec_compare_20261105 のほかの店・依頼92 の ② の回など）は消していない・上書きしていない


--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. B2 の直す前の店の作り方と、LP での使い方。
     ・依頼26 と同じに14ファイル（試算の値 v2.8 ごと）を写すと今の版では回らないので、② の店の形・地図・summary.json だけを写し、
       試算の値は v2.9 のまま版の札（layout_generation）だけを合わせた。このやり方でよいか
     ・直す前の店（dffc100b269c）は T06 のほかに、止まる位置・道順・スタッフの持ち場（0 か所）も今の店と違う。
       題「T06 を右へ1.0m」だけの違いとは言い切れない
     ・今の版では直す前でも丸テーブルの間で長く止まらない（最長 3.6 秒）。LP の「直す前は止まる・直した後は止まらない」という見せ方には、
       今回の2本はそのままは合わない。2本を使うか、前の録画（依頼28・cs:43）を残すか
  2. B1 の正面・横の見下ろす角度を 45° にした（LOG371 は水平の正投影）。録画の道具では水平の正投影は撮れない。
     このままでよいか、録画の道具に水平の正投影のカメラを足す（Unity を変えるので cs を上げ、2回の確かめが要る）か
  3. oblique_loop.mp4 を 1000×876 にした（8:7 の 1000×875 は縦が奇数で、ふつうの mp4 にできない）。このままでよいか

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

![4視点のパネル付き動画の最初のコマ。左に真上・斜め・正面・横の4つの映像を2×2に並べ、右にスタッフとロボットの状態のパネルを付けた](https://pixelstomotors.com/media/LOG444_04_four_views_panel.png)

4つのカメラは、Unity の作りを変えずに、録画の実行ファイルに渡す引数だけで足せました。同じ種で前に2つのカメラで撮った回と、記録は1字も違いませんでした。カメラを増やしても、店の中で起きることは変わらないということです。正面と横は、前の LP の動画では真横からの絵でしたが、今の録画の道具では床の高さから撮ることになるので、45°の見下ろしにしました。

### 丸テーブルの間で、今の版のロボットは止まらなかった

丸テーブルの直す前と直した後は、②の店で、右の丸テーブルを1.0m右へずらす前と後を比べた動画です。10月29日の版では、直す前の店でロボット2台が丸テーブルの間で60秒以上動けなくなり、直した後は抜けていました（LOG404）。

今の版で同じ回を撮り直すと、直す前の店でも、丸テーブルの間でいちばん長く止まったのは3.6秒でした。30秒以上の止まりは0回です。そのあいだに、ロボットが自分で進めているかを見張る仕組み、すれ違い方、立ち往生のときの助け方などを直してきたので、前の詰まりが解けるようになったとみています。

LP の「直す前は止まる、直した後は抜ける」という見せ方は、今の版では作れません。3つの案を出しました。前の録画を残して版を書き添える、今の版の2本に差し替えて「止まらなくなった」と書き換える、今も止まりが残っている所で新しく作る、の3つです。

> （おすすめ）前の録画を残す

前の録画を残し、「10月29日の版の録画で、パネルは付いていない。その後のロボットの動きの直しで、今の版では直す前の店でも長くは止まらなくなった」と書き添えました。撮り直した2本は KIOXIA に残してあります。

- ねらい：LP の動画を、今のシミュレーションの版で撮ったものにそろえ、パネルの字が読める大きさで出す
- 変わったこと：4視点はパネル付き・幅480pxから1040pxに。最初の画面の2枚は今の版のループに。丸テーブルの2本は前の版の録画だと明記した
- 見込める効果：LP を見た人が、スタッフとロボットが何をしているかを動画の中で追える。これは見込み。LP の見られ方の変化は、サイトの計測（/api/ev）で確かめる

![LP の最初の画面。右上の「同じ店舗を3Dで建てる」と左下の「スタッフとロボットを走らせる」を、今の版のループに差し替えた](https://pixelstomotors.com/media/LOG444_05_lp_hero.png)

![LP の「どこで止まるか」の節。4視点のパネル付き動画を幅いっぱいで出し、右のパネルの字が読める](https://pixelstomotors.com/media/LOG444_06_lp_views.png)

### LP の差分（commit e629556 のうち serving-robot-one-less-staff.astro）

```diff
commit e629556e8df31d92d112befe7ae746a60b24ba09
Author: Claude <noreply@anthropic.com>
Date:   Thu Nov 5 19:01:41 2026 +0900

    series8 に②の比較動画、LP の4視点をパネル付きに・最初の画面の2枚を今の版に差し替え（依頼93）
    
    丸テーブルの直す前・直した後は10月29日の版の録画のまま残し、その旨を書き添えた
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01LevEXRjJt67bSDYZYEUWTQ

diff --git a/src/pages/serving-robot-one-less-staff.astro b/src/pages/serving-robot-one-less-staff.astro
index 0e02d53..f53e231 100644
--- a/src/pages/serving-robot-one-less-staff.astro
+++ b/src/pages/serving-robot-one-less-staff.astro
@@ -66,8 +66,8 @@ const MENU = [
   <div class="fv-stage" aria-hidden="true">
     <div class="sc sc-split4 on" data-dur="6000">
       <figure class="ft t-plan"><img src="/site/srl/plan-p1.svg" alt="" width="320" height="230"><figcaption>店舗の平面図</figcaption></figure>
-      <figure class="ft t-3d"><video src="/site/srl/fv-oblique.mp4" poster="/site/srl/fv-oblique.webp" muted loop playsinline preload="auto"></video><figcaption>同じ店舗を3Dで建てる</figcaption></figure>
-      <figure class="ft t-run"><video src="/site/srl/top-busy.mp4" poster="/site/srl/top-busy.webp" muted loop playsinline preload="auto"></video><figcaption><span><span class="ft-long">スタッフとロボットを</span>走らせる</span><span class="ft-keys"><i class="k-robot"></i>ロボット<i class="k-staff"></i>スタッフ<i class="k-guest"></i>客</span></figcaption></figure>
+      <figure class="ft t-3d"><a class="ft-go" href="#views" tabindex="-1"><video src="/media/lp_srl_fv_oblique_v2.mp4" poster="/media/lp_srl_fv_oblique_v2.webp" muted loop playsinline preload="auto"></video></a><figcaption>同じ店舗を3Dで建てる</figcaption></figure>
+      <figure class="ft t-run"><a class="ft-go" href="#views" tabindex="-1"><video src="/media/lp_srl_top_busy_v2.mp4" poster="/media/lp_srl_top_busy_v2.webp" muted loop playsinline preload="auto"></video></a><figcaption><span><span class="ft-long">スタッフとロボットを</span>走らせる</span><span class="ft-keys"><i class="k-robot"></i>ロボット<i class="k-staff"></i>スタッフ<i class="k-guest"></i>客</span></figcaption></figure>
       <figure class="ft t-res">
         <figcaption>試算の結果</figcaption>
         <dl>
@@ -146,7 +146,7 @@ const MENU = [
           <div class="staffrows" id="staffRows" aria-live="polite"></div>
         </figure>
       </div>
-      <div class="kn rev">
+      <div class="kn rev kn-wide">
         <div class="kn-text">
           <h3>どこで止まるか</h3>
           <p>試算の店舗を3D（Unity）で建て、スタッフ・客・ロボットを動かして、止まった回数と場所を数えます。直し方を決めたら、同じ店舗でもう一度走らせて確かめます。</p>
@@ -156,9 +156,10 @@ const MENU = [
             <div><span>丸テーブルの間で、ロボットが動けなくなる</span><b>8<i>→</i><em>0</em><small>回</small></b></div>
           </div>
         </div>
-        <figure class="clip clip-4">
-          <video class="loop" src="/site/srl/four-views.mp4" poster="/site/srl/four-views.webp" muted loop playsinline preload="none" aria-label="3Dの店舗を、真上・正面・横・斜めの4つの視点で同時に映した動画。キッチンのモニターに、ロボットとスタッフがいま何をしているかが出ている"></video>
-          <figcaption>同じ店舗を、真上・正面・横・斜めの4つの視点で同時に見る。左上の枠（キッチンのモニター）に、ロボットとスタッフがいま何をしているか、止まった回数が出ます。</figcaption>
+        <!-- 4視点のパネル付き（2026-11-05・依頼93・cs:78。③・ロボット2台・種7。開店から全員が帰るまで。元は KIOXIA の service_sim/unity/rec_lp_20261105/p1_s7/） -->
+        <figure class="clip clip-4" id="views">
+          <video class="loop" src="/media/lp_srl_four_views_panel_v1.mp4" poster="/media/lp_srl_four_views_panel_v1.jpg" muted loop playsinline controls preload="none" aria-label="3Dの店舗を、真上・斜め・正面・横の4つの視点で同時に映した動画。右のパネルに、スタッフとロボットがいま何をしているかが出ている"></video>
+          <figcaption>同じ店舗を、真上・斜め・正面・横の4つの視点で同時に見ます。右のパネルに、スタッフとロボットがいま何をしているか、入口で待つ組の数が出ます（効率重視の店舗・スタッフ4人・ロボット2台・開店から閉店までを約75秒で）。</figcaption>
         </figure>
         <!-- 直す前・直した後（LOG402 の②・丸テーブル T06 を右へ1.0m）。同じ客・同じ時刻で走らせた Unity の録画を左右に並べ、同時に流す（2026-10-29）
              元の録画は KIOXIA の service_sim/unity/20261029_lpdemo2*_cs43_fam_p0_r2_s0_passon_sbret/recordings/（録画のときだけ光を75°に上げて影を短くした）。経過15:30〜18:00を12倍速に切り出した -->
@@ -173,7 +174,7 @@ const MENU = [
               <p class="ba-k"><b class="ba-tag after">直した後</b>右の丸テーブルを1.0m右へ／間 2.1m</p>
             </div>
           </div>
-          <figcaption>昔のファミレスの間取りをもとにした19卓の店舗。同じ客・同じ注文・同じ時刻で2回走らせ、違うのは右の丸テーブルの位置だけです（ロボット2台・真上から・12倍速）。右下は、走らせ始めてからの経過時間です。</figcaption>
+          <figcaption>昔のファミレスの間取りをもとにした19卓の店舗。同じ客・同じ注文・同じ時刻で2回走らせ、違うのは右の丸テーブルの位置だけです（ロボット2台・真上から・12倍速）。右下は、走らせ始めてからの経過時間です。10月29日の版の録画で、パネルは付いていません。その後のロボットの動きの直しで、今の版では直す前の店でも長くは止まらなくなっています。</figcaption>
         </figure>
       </div>
       <div class="kn">
@@ -573,8 +574,12 @@ const MENU = [
 .srl .ba-tag.after{background:var(--ink);color:#fff}
 @media (max-width:640px){.srl .ba-pair{grid-template-columns:1fr}}
 .srl .clip{display:grid;gap:10px}
-.srl .clip-4{max-width:480px;justify-self:center;width:100%}
-.srl .clip-4 video{aspect-ratio:694/720!important}
+.srl .clip-4{width:100%}
+.srl .clip-4 video{aspect-ratio:1920/1080!important}
+.srl .kn.kn-wide{grid-template-columns:1fr;gap:32px}
+.srl .kn.kn-wide .kn-text{order:0;max-width:46rem}
+.srl .kn.kn-wide .ba{order:3}
+.srl .ft-go{position:absolute;inset:0;display:block;cursor:pointer}
 .srl .clip video{display:block;width:100%;height:auto;aspect-ratio:976/652;background:#3a3a3a;box-shadow:0 24px 48px -28px rgba(36,36,36,.45)}
 .srl .cost-fig{background:var(--sheet);padding:32px;display:grid;gap:14px;box-shadow:0 1px 0 var(--rule)}
 .srl .cf-k{margin:0;font-size:.86rem;font-weight:700;color:var(--muted)}
```


## 作業ログ ― 依頼94：大型店⑧⑨にも下げ膳の条件を足し、夜に回す

図面のある店は、ファミレス6店のほかに大型店が2つ（⑧ 受け渡し口が奥の真ん中、⑨ 厨房が右・入口が角）あります。⑧⑨は11月2日に一度 Unity に建てましたが、そのあと瞬間移動をなくして版を固めた（LOG435・LOG440）ので、今の版ではまだ回していません。サイトにも⑧⑨の Unity の動画はありません。

⑧⑨にも比較動画を作るには、Unity が読む条件の表（p2m-site の public/sim/serving-robot-params.json）に、⑧⑨の下げ膳の条件が要ります。試算の数字やページの表示は変えず、表に4行（⑧⑨ × ロボット1台・2台）を足すだけにする案で了承をもらいました。値は、試算の大型店の結果（iCloud の simulation/v2_9_large/）から写しています。写す前に、同じファイルの配膳だけの値が今の表と同じであることを確かめました（⑧2台の入店待ち 7.2357分・料理の待ち 1.8623分、⑨2台 7.471分・2.1582分）。

### 大型店の結果から下げ膳の4条件を取り出したコマンド

```bash
cd "$HOME/mnt/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/simulation/v2_9_large"; python3 - <<'E'
import json
src={"large_p6":"results_large_mac.json","large_p7":"results_large_p7_v2.json"}
out=[]
for st,f in src.items():
    rows=json.load(open(f))["rows"]
    def find(**c): 
        m=[r for r in rows if all(r.get(k)==v for k,v in c.items())]; assert len(m)==1,(c,len(m)); return m[0]
    chk=find(store=st,staff=6,robots=2,arrivals_per_h=70,mode="serve",trays=3,fragile_by="any",registers=1)
    print(st,"serve2 check",chk["entry_wait_mean"],chk["dish_wait_mean"])
    for rb in (1,2):
        r=find(store=st,staff=6,robots=rb,arrivals_per_h=70,mode="bus",trays=3,fragile_by="any",registers=1)
        c={k:r[k] for k in ("store","staff","robots","arrivals_per_h","mode","trays","fragile_by","registers")}
        out.append({"condition":c,"site_result":{k:v for k,v in r.items() if k not in c}})
json.dump(out,open("/tmp/large_bus_conds.json","w"),ensure_ascii=False)
print(json.dumps(out,ensure_ascii=False)[:300])
E
```

```
large_p6 serve2 check 7.2357 1.8623
large_p7 serve2 check 7.471 2.1582
```

### 条件の表と書き出しのコードの差分（commit 34af4fb）

```diff
commit 34af4fb027de440f265e7e58c688f2d9c327afb5
Author: Claude <noreply@anthropic.com>
Date:   Thu Nov 5 19:08:51 2026 +0900

    Unity の条件に大型店⑧⑨の下げ膳（ロボット1・2台）を足す（132〜135番）
    
    試算の数字とページの表示は変えない。値は v2_9_large の結果から写した
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01LevEXRjJt67bSDYZYEUWTQ

diff --git a/public/sim/serving-robot-params.json b/public/sim/serving-robot-params.json
index 76f7021..aea6e67 100644
--- a/public/sim/serving-robot-params.json
+++ b/public/sim/serving-robot-params.json
@@ -5898,6 +5898,146 @@
     "full_wait_mean": 1.0218,
     "pay_wait_mean": 0.7422
    }
+  },
+  {
+   "condition": {
+    "store": "large_p6",
+    "staff": 6,
+    "robots": 1,
+    "arrivals_per_h": 70,
+    "mode": "bus",
+    "trays": 3,
+    "fragile_by": "any",
+    "registers": 1
+   },
+   "site_result": {
+    "dish_wait_mean": 2.3583,
+    "dish_wait_p90": 3.1278,
+    "cold_share": 0.1354,
+    "seat_wait_mean": 5.9933,
+    "turn_mean": 2.4367,
+    "walk_km_per_staff": 3.2798,
+    "staff_util": 0.5859,
+    "robot_util": 0.8522,
+    "robot_share": 0.5034,
+    "robot_bus_share": 0.1875,
+    "collects": 0,
+    "rescues": 0.925,
+    "pauses": 28.15,
+    "fragile_robot": 37.075,
+    "groups": 135.475,
+    "entry_wait_mean": 6.3412,
+    "blocked_wait_mean": 0.8058,
+    "guide_wait_mean": 0.0881,
+    "staff_wait_mean": 0.894,
+    "full_wait_mean": 5.1875,
+    "pay_wait_mean": 33.9524
+   }
+  },
+  {
+   "condition": {
+    "store": "large_p6",
+    "staff": 6,
+    "robots": 2,
+    "arrivals_per_h": 70,
+    "mode": "bus",
+    "trays": 3,
+    "fragile_by": "any",
+    "registers": 1
+   },
+   "site_result": {
+    "dish_wait_mean": 1.9063,
+    "dish_wait_p90": 2.9681,
+    "cold_share": 0.0981,
+    "seat_wait_mean": 7.0338,
+    "turn_mean": 2.2047,
+    "walk_km_per_staff": 2.577,
+    "staff_util": 0.5314,
+    "robot_util": 0.8234,
+    "robot_share": 0.8641,
+    "robot_bus_share": 0.4182,
+    "collects": 0,
+    "rescues": 2.175,
+    "pauses": 60.85,
+    "fragile_robot": 59.925,
+    "groups": 139.85,
+    "entry_wait_mean": 7.338,
+    "blocked_wait_mean": 0.8115,
+    "guide_wait_mean": 0.0433,
+    "staff_wait_mean": 0.8547,
+    "full_wait_mean": 6.2223,
+    "pay_wait_mean": 34.9873
+   }
+  },
+  {
+   "condition": {
+    "store": "large_p7",
+    "staff": 6,
+    "robots": 1,
+    "arrivals_per_h": 70,
+    "mode": "bus",
+    "trays": 3,
+    "fragile_by": "any",
+    "registers": 1
+   },
+   "site_result": {
+    "dish_wait_mean": 2.5748,
+    "dish_wait_p90": 3.5045,
+    "cold_share": 0.2306,
+    "seat_wait_mean": 9.2214,
+    "turn_mean": 3.189,
+    "walk_km_per_staff": 4.2703,
+    "staff_util": 0.6461,
+    "robot_util": 0.875,
+    "robot_share": 0.4464,
+    "robot_bus_share": 0.18,
+    "collects": 0,
+    "rescues": 0.9,
+    "pauses": 26.325,
+    "fragile_robot": 35.9,
+    "groups": 141.35,
+    "entry_wait_mean": 9.7417,
+    "blocked_wait_mean": 1.5309,
+    "guide_wait_mean": 0.2061,
+    "staff_wait_mean": 1.737,
+    "full_wait_mean": 7.6904,
+    "pay_wait_mean": 34.2627
+   }
+  },
+  {
+   "condition": {
+    "store": "large_p7",
+    "staff": 6,
+    "robots": 2,
+    "arrivals_per_h": 70,
+    "mode": "bus",
+    "trays": 3,
+    "fragile_by": "any",
+    "registers": 1
+   },
+   "site_result": {
+    "dish_wait_mean": 2.1818,
+    "dish_wait_p90": 3.2876,
+    "cold_share": 0.1662,
+    "seat_wait_mean": 7.1608,
+    "turn_mean": 2.4264,
+    "walk_km_per_staff": 3.1786,
+    "staff_util": 0.5715,
+    "robot_util": 0.8438,
+    "robot_share": 0.7898,
+    "robot_bus_share": 0.4015,
+    "collects": 0,
+    "rescues": 2.05,
+    "pauses": 54.15,
+    "fragile_robot": 56.425,
+    "groups": 138.525,
+    "entry_wait_mean": 7.5453,
+    "blocked_wait_mean": 0.9491,
+    "guide_wait_mean": 0.0759,
+    "staff_wait_mean": 1.0249,
+    "full_wait_mean": 6.2118,
+    "pay_wait_mean": 34.3623
+   }
   }
  ]
 }
\ No newline at end of file
diff --git a/tools/serving_sim/export_params.py b/tools/serving_sim/export_params.py
index 832b453..befc073 100644
--- a/tools/serving_sim/export_params.py
+++ b/tools/serving_sim/export_params.py
@@ -6,7 +6,7 @@ Unity はこの JSON を読み、値を手で写さない（LOG359 のずれ9「
 使い方: python3 export_params.py results.json <出力先>   （出力先は p2m-site の public/sim/serving-robot-params.json。unity_rules は出力先の今の値を引き継ぐ）
 - common：店に共通の値。role が "unity_measures" の値は Unity で測ってサイトに戻すための仮の値なので、Unity は読まない
 - stores：Unity で回す店（fam_p1・fam_p5・fam_p2・fam_p3・fam_p4・fam_p0、2026-11-02 から大型店の large_p6・large_p7）の値。registers はレジの数（v2.8）
-- unity_conditions：Unity で回す条件（0〜17番は店ごとに混み具合が普通の3つ。18〜53番は2026-10-29に足した空いている・混んでいるの各3つ。54〜89番は2026-10-30に足したスタッフが少ない・多いの各3つ（混み具合は普通）。計90条件。90〜119番は2026-11-02に足した大型店⑧⑨。120〜131番は2026-11-04に足した下げ膳にも使う条件）と、同じ条件の試算の結果（40回の平均）。Unity の店はレジの内側に店員が1人だけなので、レジは1つ
+- unity_conditions：Unity で回す条件（0〜17番は店ごとに混み具合が普通の3つ。18〜53番は2026-10-29に足した空いている・混んでいるの各3つ。54〜89番は2026-10-30に足したスタッフが少ない・多いの各3つ（混み具合は普通）。計90条件。90〜119番は2026-11-02に足した大型店⑧⑨。120〜131番は2026-11-04に足した下げ膳にも使う条件。132〜135番は2026-11-05に足した大型店⑧⑨の下げ膳）と、同じ条件の試算の結果（40回の平均）。Unity の店はレジの内側に店員が1人だけなので、レジは1つ
 """
 import json
 import sys
@@ -102,6 +102,18 @@ for k in UNITY_STORES:
         r = rows[h.key(c)]
         conds.append({"condition": c, "site_result": {m: r[m] for m in r if m not in c}})
 
+# 2026-11-05 エイイチと決めた：大型店⑧⑨にも配膳だけと配膳＋下げ膳の比較動画を作るため、⑧⑨の下げ膳も Unity で回す。
+# 前の132条件（0〜131番）は並びも中身も変えず、後ろに足す。店ごとに 普通・真ん中の人数で ロボット1・2台（4条件・132〜135番）。
+# 大型店の結果は results.json ではなく iCloud の simulation/v2_9_large/（⑧ results_large_mac.json・⑨ results_large_p7_v2.json）にあるので、
+# rows に入っていなければ、その2つを results.json と同じ形で読み足してから回す
+for k in UNITY_STORES_LARGE:
+    s = h.STORES[k]
+    for robots in (1, 2):
+        c = {"store": k, "staff": s["staff"][1], "robots": robots, "arrivals_per_h": s["arrivals"][1], "mode": "bus",
+             "trays": 3, "fragile_by": "any", "registers": UNITY_REGISTERS}
+        r = rows[h.key(c)]
+        conds.append({"condition": c, "site_result": {m: r[m] for m in r if m not in c}})
+
 D = {
     "meta": {
         "schema_version": "serving-robot-params/0.4",
```

### 依頼94 の依頼文

```
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 720
---
# 依頼94：大型店⑧⑨を今の版（cs:78）で回して合格の線を見て、配膳だけ・配膳＋下げ膳の動画の素材を撮る

エイイチと決めたこと（2026-11-05）：配膳ロボットのベースで残っている大型店⑧⑨を足す。ほかの6店と同じく、ベースとして合格かを線で見て、サイト用のパネル付き動画と比較動画の素材をそろえる。
サイトの条件の表（p2m-site の public/sim/serving-robot-params.json）に、⑧⑨の下げ膳の条件 132〜135番を足した（2026-11-05。前の 0〜131番は中身も並びも変えていない）。
⑧⑨は 11/2 に cs:62 で建てたきりで、瞬間移動をなくした版（cs:76〜78）ではまだ回していない。
Unity の動き・決まりは変えない（cs:78 のまま）。大型店でだけ起きる問題が出ても、直さずに記録して報告に書く。
**エイイチは寝ている。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。時刻で止めず、全部終わるまで続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所が cs:78、Builds/headless と Builds/rec20_bus91 が cs:78。保留 0
2. Unity エディタ・night_runner／rec_runner が動いていない。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳を archive/unity_ledger_v1_pre_large94_20261105/ に退避（行数と md5 を報告に）
3. サイトの params を Unity に写し直す（依頼72 と同じやり方。Assets/ServiceSim/Experiment/serving-robot-params.json）。0〜131番が今までと1字も違わず、132〜135番だけ増えたことを確かめる。⑧⑨の店の形（Assets/ServiceSim/Store/Layouts/large/）がサイトの public/sim/layouts/large/ と同じ版か確かめる。写したら check-in し、cs と実行ファイルを作り直す（保留 0）。作り直した版で ⑦ fam_p5・2台・種7 の serve が base73 と記録が1行も違わないことを確かめる

## A. 回す（画面なし・同時4本）
- serve：条件 90・91・92（⑧ 0/1/2台）と 105・106・107（⑨ 0/1/2台）× 種0〜9 ＝ 60 回（label large94）
- bus：条件 132・133（⑧ 1/2台）と 134・135（⑨ 1/2台）× 種0〜9 ＝ 40 回（label large94bus）
- 確かめ：⑧2台 serve 種0・⑨2台 serve 種0・⑧2台 bus 種0 を、それぞれもう1回回して記録が1行も違わないこと
- 表にすること（ほかの6店の base73・bus75 と同じ列）：瞬間移動・1コマの跳び、揺れ続け、解けずに残った詰まり（件・回。全員が帰ったあとの分は別に）、全員が帰らなかった回、助けの回数、上限で戻った回数（bus）、入店待ち・料理の待ち・turn・スタッフ1人の歩いた距離・ロボットが運んだ割合の中央値、試算と向きが合うか（0→1→2台、serve→bus）
- 詰まりの多い場所の上位5つ（店・場所・理由）

## B. 撮る（A の止める線に当たらなければ、A の結果に関わらず撮る）
- 撮る回：⑧・⑨ それぞれロボット2台の serve と bus を同じ種で（計4回）。種は、serve 2台の10回のうち全員が帰った回で、入店待ちが中央値にいちばん近い種（選んだ種と理由を報告に）
- 撮り方は依頼92 と同じ（rec_runner・wide_l30 と wide_r30・3840×2160・0.5 秒ごと・frames.csv・timeline.csv）。1回の上限 120 分・同時2本・止まっても回し直さない
- 大型店で店全体が画面に入らないときは、依頼87 の距離の決め方のまま、入るところまで引く（決め方を変えたら報告に）
- 置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_large_20261105/{large_p6|large_p7}/{serve|bus}/
- 動画にする
  1. serve の2本：依頼87 と同じに、問題に寄る動画（focus_clips.py → focus_v1/）と、パネル付きの通しの動画・寄りの動画（make_panel_video.py → panel_v1/）を作る。題「⑧ ロボット2台」「⑨ ロボット2台」
  2. serve と bus の通しのパネル付き動画（依頼92 と同じ。同じ店は同じ速さ。題「⑧ ロボット2台・配膳だけ」「⑧ ロボット2台・配膳＋下げ膳」）→ {serve|bus}/panel/
  題がパネルで切れないことを1コマ見て確かめる

## 止める線
瞬間移動が1回でも出たとき、または確かめの同じ種の2回が違ったとき、または ⑦ の serve が base73 と違ったとき。止めたら報告に書き、ほかの項目は続ける（ただし確かめが通らなかった店は撮らない）。

## 報告
claude_code_reports/20261105_large94.txt に：始める前の確かめ（params・店の形・cs と build_id）、A の表と上位5つ、ほかの6店と比べて大型店で目立つこと、B で撮った回（種・実時間・全員帰ったか・瞬間移動）と動画の名前・長さ・速さ、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

依頼94 は19:09に始まりました。⑧⑨を配膳だけ60回・配膳＋下げ膳40回回し、ベースとして合格かを見てから、⑧⑨それぞれのロボット2台で、配膳だけと配膳＋下げ膳を撮ります。大型店は1回が重いので、夜の間かかる見込みです。結果と⑧⑨の動画は、/series8 に載せたあと次の記録で書きます。


## 作業ログ ― 残したこと

| 残したこと | 中身 | いまの扱い |
|---|---|---|
| 卓が使えるまでの向き | 試算では6店とも縮むが、Unity では③④⑦で延びる | 記録だけ。試算に、下げ膳の台が卓で通路をふさぐ動きは入れていない |
| 丸テーブルの撮り直した2本 | 今の版では直す前でも止まらない | LP には使わず、KIOXIA の rec_lp_20261105/p0_round/ に残した |
| 4視点の正面・横の角度 | 前の LP は真横からの絵、今は45°の見下ろし | このまま。真横から撮るには録画の道具にカメラを足す必要がある |
| 1年の記録の LP の走らせる動画 | 前の版のファイルを指したまま | 今回は変えていない |
