サービスロボット導入シミュレーション Log#9 | Unity の配膳ロボットが詰まる所を1つずつほどいた

サービスロボット導入シミュレーション Log#9 | Unity の配膳ロボットが詰まる所を1つずつほどいた

配膳ロボットを2台入れたファミレスを、Unity(建物や人を3Dで置いて動かせるソフト)の中で初めて最後まで回してみました。客は120分のあいだに90〜100組ほど来ます。スタッフは4人です。ところが開店から36分たった時点で、店は止まっていました。入口には客が34組並んだまま、誰も席に案内されていません。厨房の角を見ると、動けなくなったロボット1台を、スタッフ3人が囲んで立っていました。

ロボットが原因で店が止まったのではありません。止まったロボットを助けに行ったスタッフが、ロボットのそばまで近づけなかったのです。スタッフには「ロボットから0.75m離れる」という決まりがあり、助けに行く仕事には「0.35mまで近づいたら着いた」という決まりがありました。2つの決まりが食い違っていたので、助けに行く仕事はいつまでも終わらず、案内に来られる人がいなくなっていました。

配膳ロボットのシミュレーションを作るとき、走る速さや止まる回数に目が行きがちです。実際に回してみると、詰まるのはロボットの性能より、人とロボットの決まりが食い違う所でした。それを1つ直すと、次の詰まりが別の場所に出てきます。この回は、その詰まりを順にほどいていった記録です。

この Unity の店は、サイトに置いている配膳ロボットの試算ページ( https://pixelstomotors.com/series8 )が仮に置いている4つの値を測るために作っています。ロボットが人の間をどれくらいの速さで走れるか、何回止まるか、止まったら何秒動けないか、人に助けてもらわないと動けなくなるのは何回に1回か、の4つです。店の形と条件は、試算と同じにしています(卓42・席160・スタッフ4人・ロボット2台・1時間に42組・ロボットは料理を運ぶだけ・1往復で3卓まで)。

回直したこと起きたこと時間切れの往復
1回目―
36分で店が止まった。助けに行ったスタッフ3人がロボットを囲んだまま
(途中で止めた)
2回目
助けに行くスタッフは、その台だけはよけない
97組のうち94組が帰った。ロボット2台が通路の入口で動けなくなる
47のうち45
3回目
止まった理由を調べる記録を足した。座っている客・ベンチ・人の形を見えるようにした
全員帰った。通路の入口の詰まりは出ず、ロボットどうしの待ち合いが1位に
41のうち27
4回目
ロボットどうしが決まった順で譲る
動けなくなる回数は減ったが、受け渡し口の前で「下がっては進む」をくり返した
45のうち24
5回目
戻る台の線を、受け渡し口の前から1m下に分けた
受け渡し口の前の鉢合わせが209回から5回に
51のうち16

上の動画は5回目(cs:124)を回しているところです。白い丸がロボット、青がスタッフ、黄色が客で、席の上の丸は座っている客です。ロボットは受け渡し口(右上の厨房の下の端)から客席へ料理を運び、ときどき通路の入口で止まっています。

時間切れの往復は、5回目で47のうち45から51のうち16まで減りました。ただ、詰まりはなくなったのではなく、場所を変えて残っています。 5回目にいちばん詰まったのは、左の通路の入口で2台が鉢合わせる所と、レジに並ぶ客が通路をふさぐ所でした。直す前に決めておいた区切りに当たったので、この店の直しはいったんここで止め、次の段階(条件を変えて何度も回し、結果を台帳にまとめる)へ進みながら、この2つを直すことにしました。

途中で、座っている客が画面に出ていないことにも気づきました。客の形は、ベンチの中に隠れていたのではなく、そもそも作られていませんでした。あとでこの映像を、人とロボットを見分ける学習に使う予定があるので、ベンチを座面と背もたれの形にし、人の形も胴と頭にそろえています。どちらも見た目だけで、測る数字には触れていません。

下の図で、ボタンを押すと、受け渡し口の前で2台が鉢合わせる様子と、戻る線を分けたあとの動きが見られます。

作業ログ ― この記事で扱う範囲と、回した条件

対象は、Unity で建てた③の店(効率重視型・入口が左下の角・列の間の通路1.2m)です。店の形は、サイトの試算が使う図面( https://pixelstomotors.com/sim/layouts/unity/p1_efficient_corner.json )から建てています。条件は、どの回も同じです。

項目値
条件の名前
fam_p1_s4_r2_a42(③・スタッフ4人・ロボット2台・1時間に42組)
回し方
空の店から120分だけ客が来て、全員が帰るまで回す(上限720分)
ロボットの仕事
上げ膳(料理を卓へ運ぶ)だけ。1往復で3卓まで。下げ膳はスタッフ
乱数の種0
1コマの時間
0.05秒(FixedStep)。1回は実時間で約14〜17分

Unity のコードは Claude Code(Unity のコードを書く AI)が書き、ここでは Claude が記録を読んで原因を調べ、依頼文を作りました。Unity のメニューを押して回すのは手で行いました。Unity の版は、Unity Version Control の Check-in の番号(cs:117〜cs:124)で書きます。

回した記録は5回分です。1回目は途中で止めたとき何も書き出さない作りだったので、記録がありません。2回目からは、止めても書き出すようにしました。

回Check-in
出力のフォルダ(KIOXIA の r2r2r-data/service_sim/unity/ の下)
1回目cs:116なし(途中で止めた)
2回目cs:117
20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped
3回目cs:122
20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913
4回目cs:123
20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006
5回目cs:124
20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135

1回目:36分で、客34組が入口に並んだまま止まった

1回目は、回し始めて実時間2分(シミュレーションの時間で35.9分)の時点で、こうなっていました。

[22:56:52] [ServiceSim] サイトの試算から入れた値(この回だけ。.asset は回し終わりに戻す)
 条件 arrivals_per_h = 42 組/時
[22:56:52] [ServiceSim] 回し始め 1/1:fam_p1_s4_r2_a42 種0(サイトの条件。空の店から来客 120 分 + 全員が帰るまで(上限 600 分)・スタッフ 4 人・ロボット 2 台)
[22:57:52] [ServiceSim] とちゅう 1/1:19.2 / 来客 120 分・上限 720 分、組 13(待ち 0・帰った 0)、走り 0 回・記録 0 行、椅子 3 回、あきらめ 22 回、立ち往生 1 回、実時間 1.0 分
[22:58:52] [ServiceSim] とちゅう 1/1:35.9 / 来客 120 分・上限 720 分、組 34(待ち 0・帰った 0)、走り 2 回・記録 2 行、椅子 14 回、あきらめ 82 回、立ち往生 3 回、実時間 2.0 分
1回目の35.9分の時点の Unity の画面。店の左下の入口に黄色の客が列になって並び、Console には「組 34(待ち 0・帰った 0)」「あきらめ 82 回」と出ている

来た34組のうち、帰った組は0、席に着いた組もほとんどいません。「あきらめ」は、スタッフや客が行き先に60秒たっても着けずにあきらめた回数です。1分で60回ずつ増えていました。

最初は、入口から店の中へ入る道が、Unity の中でつながっていないのだと考えました。ところが店の中を拡大すると、別のものが写っていました。

厨房の角を斜めから拡大した画面。白いロボット1台のまわりを、青いスタッフ3人が囲んで立っている
入口のあたりを斜めから拡大した画面。黄色の客が入口の並ぶ場所に2列に並んでいる

客は入口の並ぶ場所に、きれいに並んでいました。入れないのではなく、案内されるのを待っている列です。スタッフは4人のうち3人が、パントリー(厨房の手前の、料理を受け渡す所)の角で、止まったロボットを囲んでいました。

ロボットが動けなくなると、スタッフが歩いて行って動かす決まりにしてあります(立ち往生の呼び出し)。前の版では、動けなくなったロボットは15秒で受け渡し口へ瞬間移動していました。試算ではスタッフが歩いて行って15秒+歩く時間を使うので、それにそろえて、瞬間移動をやめたところでした。

この回は止め、Claude Code に原因だけを調べてもらいました(依頼文は後ろの「Claude Code への依頼文」の1)。

原因:助けに行くスタッフは、ロボットに0.75mより近づけなかった(cs:117 で直した)

報告(後ろの 20261022_2230_deadlock_pantry.txt)の結論は、次のとおりでした。

決まり値出どころ
人はロボットから離れる(毎コマ押しのける)
中心どうしで0.75m(人の半径0.2+ロボットの半径0.25+空ける幅0.3)
PersonRobotYield.KeepClear
助けに行く仕事は、ロボットの位置まで歩いたら終わる
0.35m 以内に来たら着いた(止まる距離0.3+0.05)
StaffAgent の到着の判定

0.75m より近づけないのに、0.35m まで来ないと着いたことにならないので、助けに行く仕事は、最初からぜったいに終わらない作りでした。 しかもこの仕事は案内より先に取る決まりなので、手が空いたスタッフは必ずこれを取ります。終わらない仕事に1〜2人が取られ続け、残りの人もパントリーの角で押し合って、60秒ごとにあきらめていました。82回のあきらめは、ほぼ全部がスタッフでした(4人×60秒ごと×約20分で約80回)。

スタッフが待つ点も、同じ角に集まっていました。手の空いたスタッフが待つ点は、パントリーの左の壁ぞいに0.6m おきに6つ並んでいます。受け渡し口の前の点(15.3, 5.95)とロボットの待機場所(16.9, 6.05)・(17.7, 6.05)も、同じ角です。そこにロボットが止まると、待つ点・ロボットの通り道・助けに行く人が、0.75m の押しのけの輪の中で重なります。

直し方は、報告に5つ案がありました。直すのは、矛盾そのものを消すものと、逃がし弁の穴をふさぐものと、記録の取り方だけにしました。

入れた中身理由
○
助けに行く人は、その台だけはよけない。行き先はロボットの手前0.8m、ロボットが動いたら引き直す
矛盾を消す
○
あきらめた回数を、人ごとではなく仕事ごとに数える
3回あきらめたら移して済ませる「最後の保険」が、仕事が人から人へ回ると働かなかった
○
途中で止めても、そこまでの記録を書き出す(フォルダ名に _stopped)
次に詰まったとき、止めても原因を追えるようにする
×
スタッフが待つ場所を、パントリーの角から動かす
人とロボットが重なる場所が変わり、測りたい値が変わる
×取られっぱなしを防ぐ区切り
1つ目の直しで仕事が終わるようになれば要らない

途中で止めた回だったので、試算の条件が Unity の設定ファイル(.asset)に入ったまま残っていないかも確かめてもらいました。Play を抜けるときに元へ戻す処理が働いていて、残っていませんでした。

2回目(cs:117):店は回ったが、ロボット2台が通路の入口で動けなくなった

2回目は、立ち往生の呼び出しは110回のうち99回終わりました。入口で固まることもなくなり、97組のうち94組が帰りました。ただ、3組が帰らないので、全員が帰るまで回す決まりのまま、シミュレーションの時間で300分まで進んだところで止めました。

ロボットの往復は、47回のうち45回が時間切れ(1往復600秒の打ち切り)で終わっていました。止まった1,222回のうち、約920回が x9・z4 あたり、左から3本目の通路 A03 の入口に集まっていました。理由は「通路の幅が足りない」(693回)と「もう1台のロボット」(327回)です。

止まった理由回数止まっていた時間(秒)うち動けなくなった
通路の幅が足りない6936,9180
もう1台のロボット3276,34955
人が立ち止まっていた702,72436
スタッフとすれ違った4999210
お客さんとすれ違った275758
分からない511171
椅子・荷物・ベビーカー320
通路の順番待ち21,1320

A03 は幅1.2m なので、幅は足りているはずです。報告(後ろの 20261023_0730_a03_deadlock.txt)では、「通路の幅が足りない」は幅の話ではなく、「次の点までの道が引けなかった」ときに付く名前でした。道が引けないとロボットは1mm も動けず、逃げる処理も歩くための道が要るので働きません。そのまま10秒ごとの引き直しを、600秒の打ち切りまで繰り返していました。

もう1つ分かったのは、帰らなかった3組の理由です。3組の卓(T16・T19・T20)へは、料理を運ぶロボットが毎回時間切れになり、同じ皿が24回ずつ戻されていました。最初の料理が全部届かないと食事に進めないので、3組は席に座ったまま固まります。1号機は往復11以降、22回続けてまったく同じ「19;20;16」の3卓へ走り、毎回時間切れになっていました。45/47の時間切れの多くは、これでした。

報告には直し方が4つありました(道が引けないときに手前の点へ戻す/入口で待つ時間に上限を付ける/座ったまま止まった組にも卓を空ける逃がし弁を効かせる/何度も戻った皿はスタッフに回す)。後ろの2つは逃がし弁を増やすだけで、回し切れるようにはなっても、逃がし弁がほぼ0という終わりの条件は満たせません。前の2つはロボットの動き方を変えるので、測りたい値に効きます。根っこの「27cm 先の点へ、なぜ道が引けないのか」が分からないまま入れると、本当の原因を隠すおそれがあるので、先に記録の列を足して、もう1回回すことにしました(cs:122)。

座っている客が画面に出ていなかった:形の部品そのものが作られていなかった(cs:118・cs:119)

2回目を回している画面を見ていて、もう1つ気づいたことがありました。

シミュレーションでお客さんが座っているのがわかるように変更したいのですが、前に依頼したけど変更されていない。

10/21 に「座っている間は、その席に背の低い客の形を出す。当たり判定は付けない」と決めて頼んでいましたが、そのあとサイトとのずれの点検に話が移り、作られないまま止まっていました。

cs:118 のあと Build Store を押した画面。店の形は建っているが、席には客の形が1つもない

cs:118 で Claude Code が調べると、座る・立つときに形を出し入れする仕掛けは 10/21 に入っていて、足りなかったのは形の部品(SeatedGuestBody.prefab)そのものでした。部品がないと、出す処理は何もせずに戻ります。cs:118 で部品を作る処理を入れましたが、1回目の Build Store は、Unity が新しいコードを読み込む前に押していたので、まだ出ませんでした。cs:119 で、部品を用意するメニューを独り立ちさせ、部品がないまま呼ばれたら警告を出すようにしました。2日間気づけなかったのは、ここが黙って戻っていたためです。

形が出ると、今度は客が机の上に乗っているように見えました。

斜めから見た客席。茶色の箱の上から、黄色の客の頭が並んで出ている

なんか机の上にいるように見えるけど?あってるこれ?

乗っているのは机ではなく、ベンチでした。茶色の箱がベンチで、オレンジの低い所が机です。ベンチは背もたれの高さ1.1m まで中身の詰まった箱で作っていたので、座った客(高さ1.4m)の頭だけが箱の上に出て、乗っているように見えていました。

ベンチを座面と背もたれにし、人の形を胴と頭にそろえた:あとで映像を学習に使うため(cs:120・cs:121)

ベンチは少し変えたいね。何が影響するの?

ベンチの箱は、見た目のほかに3つの役目を持っています。通れる床(NavMesh)を作る材料、ロボットの前のセンサーが見る当たり判定、店の形が図面どおりかの確かめ、です。最初は「当たり判定の箱はそのまま、見た目だけ取り替える」案を出しました。そこに、次の指摘がありました。

のちのち学習させるし、学習しやすくする必要もあるよ

学習に使うなら、見た目と当たり判定を同じ形にすべきだと考え、一度は案を直しました。距離のセンサーが見えない1.1m の箱に当たると、カメラの絵と食い違うためです。ただ、学習の進め方は別のところで決めてありました。Unity の映像を、天井の角(防犯カメラと同じ位置)のカメラで撮り、ロボットの位置と止まり、人の位置、通路のふさがりを見分けるモデルを学習させる、という形です。使うのはカメラの絵で、距離のセンサーではありません。そこで、最初の案に戻しました。

学習(カメラの絵)に効くか決め
ベンチの見た目
効く。本物のベンチに見えないと、実店舗の映像とずれる
座面(0.45m)+背もたれ(机と反対側に厚さ0.08m・1.1m)。色と素材は1か所にまとめ、あとで差し替えられるようにする
ベンチの当たり判定効かない。カメラには写らない
今の箱のまま。通れる床もロボットの道も変わらない
座っている客
効く。座っている人も「人の位置」の正解に入る
座面から立つ胴と頭。頭の先1.35m。当たり判定なし
種類の印
効く。正解の印を自動で書き出すのに要る
Tag を付ける(SimRobot・SimStaff・SimGuest・SimSeatedGuest・SimBench・SimTable・SimChair)

印に Layer ではなく Tag を選んだのは Claude Code です。Layer は物理の問い合わせに効くことがありますが、Tag は何にも効きません。

真上から見た③の店(cs:121 のあと Build Store で書き出した画像)。ベンチの外側のふちに背もたれが並び、座面に黄色の客の頭が丸く並んでいる

形が変わると、座っている客のほうが人らしく見えました。

突然人の形が変わったね こっちの方が人として分かりやすいから、スタッフも同じ形がいいんじゃない?

立っている人(スタッフ・歩く客・待合の客)も、同じ胴+頭にそろえました(cs:121)。人の形が座っている客だけ違うと、学習のときに「座っている客だけが人」に見えてしまうためです。取り替えたのは子の見た目だけで、親の当たり判定(半径0.2m・高さ1.7m)と歩く仕組み(NavMeshAgent)はそのままです。

胴(半径0.2m)頭(球・半径0.11m)頭の先
立っている人0〜1.590m中心1.590m1.700m
座っている客0.450〜1.240m中心1.240m1.350m
cs:121 のあと Build Store を押した画面。斜めから見た客席のベンチに、胴と頭の形の客が座り、右下に青いスタッフが立っている。Console に「立っている人の見た目を胴+頭にそろえました」と出ている

見た目を変えるたびに、Build Store が書き出す店の報告(store_report)と、卓までの道の長さの表を、変える前の分を取っておいて($HOME/base・$HOME/base2)、1行ずつ比べました。cs:120 のあとも cs:121 のあとも、違ったのは作った日時の1行だけでした。

$ D="$HOME/mnt/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/screens"; cd $HOME/base; for f in *; do echo "== $f"; diff "$f" "$D/$f" | head -20; done
== 20261023_family_v0_StoreLayout_p1_efficient_corner_store_report.txt
2c2
< 作った日時: 2026-10-23 07:46:38
---
> 作った日時: 2026-10-23 08:23:31
== 20261023_family_v0_table_path_lengths_family.csv
== 20261023_family_v0_table_path_lengths_grid.csv
$ D="$HOME/mnt/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/screens"; cd $HOME/base2; for f in *; do echo "== $f"; diff "$f" "$D/$f"; done
== 20261023_family_v0_StoreLayout_p1_efficient_corner_store_report.txt
2c2
< 作った日時: 2026-10-23 08:23:31
---
> 作った日時: 2026-10-23 09:01:21
== 20261023_family_v0_table_path_lengths_family.csv
== 20261023_family_v0_table_path_lengths_grid.csv

3回目(cs:122):道が引けない止まりは0回。ロボットどうしの待ち合いが1位になった

cs:122 で、止まったときの記録(stops.csv)に5列を足しました。寄せたあとの出発点(solve_from)と行き先(solve_to)、道を引いた結果(solve_status)、引けた角の数(solve_corners)、ロボットの位置から一番近い通れる床までの距離(off_mesh_m)です。動きは1行も変えていません。

3回目は、全員が帰り、221.5分で回り切りました。ところが、2回目に693回あった「道が引けない」止まりは、1回も起きませんでした。道を引いた105回はすべて PathComplete(最後まで引けた)で、ロボットの位置は通れる床から0.025m しか離れていませんでした。同じ店・同じ条件・同じ乱数の種でも、Unity は毎回少しずつ違う動きになるので、2回目のずれ方が3回目には出なかったようです。原因は分かっていませんが、記録の列は残してあるので、また起きたら分かります。

止まった理由回数止まっていた時間(秒)うち動けなくなった
もう1台のロボット1055,37580
人が立ち止まっていた652,41230
スタッフとすれ違った641,37815
お客さんとすれ違った314706
分からない372193
椅子・荷物・ベビーカー630
通路の順番待ち41,2070

41往復のうち27往復が時間切れで、いちばん多いのはロボットどうしの待ち合いでした。受け渡し口の前(x15・z6)と、通路の入口(z4あたり)に集まっています。通路の入口での順番待ちも、1回で最長576秒ありました。

人がロボットをよける決まり:店員は必ず空け、客は少しだけ止まる(決めただけで、まだ入れていない)

3回目を回している途中の画面を見て、指摘がありました。

ロボットは人が優先的に避けて欲しいね(ロボットは配膳しているところで詰まっていることが多い)

今の作りでも、人はロボットから0.75m 離れるようによけ、細い通路では下がって待ちます(ただし20秒で諦めて進む)。人がどれだけよけるかは、Unity で測りたい値そのものです。強くすれば止まる回数は減りますが、それが実際の店に近いのかどうかで、結果の意味が変わります。そこで、ファミレスで働いていたときの感覚を聞きました。

「店員は必ず道を空ける」店員は必ず避けると思うな(普段から動きに慣れているから) 「客は気づかずに立ち止まることがある」(多少は止まることあるけど、ロボットが配膳、下げ膳してたら他の道にいくか、強引に避けて通るかをするかな) ずっと立ち止まっていることはないね(ロボットの状況にもよるけど)

これを、切り替えて選べる「店員優先の版」としてまとめました。

今のよけ方(既定)店員優先の版
店員
0.75m 離れる。細い通路では下がって待つが、20秒で諦めて進む
必ず道を空ける。通路の入口か脇まで下がり、ロボットが通るまで待つ
客店員と同じ
長くて5秒(仮の値)止まり、別の道があれば回り道、なければロボットの横を詰めて通る(すき間は10cm まで・仮の値)
配膳・下げ膳中のロボット
卓の前で止まっている間も同じようによける
止まっているロボットは「よけて通る物」になる

止まる回数が減ったときに、どの直しが効いたのか分からなくならないよう、これはロボットどうしの直しのあとに入れることにしました。この記事の時点では、まだ入れていません。

4回目(cs:123):ロボットどうしを譲らせたら、止まる回数が4倍になった

実際の配膳ロボットは、同じ店の台どうしで連絡を取り合い、片方が道を譲ります。Unity のロボットにはこの仕組みがなかったので、入れました(cs:123)。

  • 2台がふさぎ合ったら、番号の小さい台が先。大きい台は来た道(道順の1つ前の点)へ下がって待ち、すき間が0.6m 空いたら進む
  • 通路の入口で待つ台は、入口の点そのものに立たず、外へ0.9m・横へ0.6m ずれた点で待つ
  • 入口での順番待ちは20秒まで
  • 料理が待っていても、仕事がない台は待機場所へ下げる

4回目を回している途中で、動画を見ての質問がありました。

ずっとロボットがロボットにぶつかりに行っているのはなんで?

3回目(cs:122)4回目(cs:123)
「もう1台のロボット」で止まった回数
105429
うち動けなくなった8050
止まっていた時間5,375秒4,505秒
時間切れの往復41のうち2745のうち24
ロボットが運んだ料理の割合32%27%

動けなくなる回数は減りましたが、止まる回数は4倍になりました。止めた相手の356回は1号機で、2号機がいつも譲っています。止まる場所の1位と2位は、受け渡し口の前(x15・z5〜6)でした。

受け渡し口の左の角を真上から拡大した画面。白いロボット2台が、青いスタッフ4人と固まっている

ロボットは出番がない時は空いてる右のスペースに避けた方がいいんじゃない?

待機場所は、サイトの店の形ですでに受け渡し口の右に3台分決めてあります(x 16.5〜18.9m)。客席は受け渡し口の左にあるので、戻ってきた台が待機場所へ行くには、受け渡し口の前を通ります。待機場所を左(客席の側)へ移す案も出しましたが、こう返ってきました。

この図面なら、受け渡し口の右かな。左はお客さんやスタッフの行き来が多いし、待機は邪魔かな

待機場所は右のまま、店の形は変えずに、通り方だけを直すことにしました。直す前に、見立てが合っているかを1006の記録で数えてもらいました(後ろの 20261023_1030_pass_front_check.txt)。2号機が受け渡し口の前で「もう1台のロボット」で止まった182回のうち、そのとき1号機は、配り終えて戻る途中が132回(73%)、待機が32回(18%)、出ていく途中が18回(10%)でした。止まる回数が増えた主な理由は、新しい譲り合い(働いたのは22回だけ)ではなく、仕事がない台を必ず待機場所へ下げるようにしたことで、受け渡し口と待機場所の行き来が増えたことでした。

ここで、どこまで直すかの区切りを決めました。

これでうまくいかないなら次に進もう。その中で修正ポイントも同時に考えるようにする

5回目(cs:124):戻る台の線を受け渡し口の1m下に分けたら、鉢合わせは209回から5回に

報告には、受け渡し口の前を1台ずつの「予約」にする案(A)と、戻る台の線を分ける案(B)がありました。Unity では料理を載せる時間が0秒なので、どの台も受け渡し口で立ち止まりません。そのため「使っている間」を決める予約は、今の原因に合っていません。戻ってきた台を、行き来の多い客席側で待たせることにもなります。実際の配膳ロボットも、店の地図に通ってよい線や一方通行を引いて走らせるので、B だけを入れました。

戻る台は、サイトの道順の最後の点(受け渡し口の前の点)を通らず、受け渡し口の前の点の1.0m 下(15.3, 4.95)から、自分の待機場所の x まで右へ抜け、待機場所で往復を終えます。出ていく台の線とは中心どうしで1.0m 以上離し、ドリンクバーに並ぶ点からも0.6m 以上離しています。ロボットは直径0.5m なので、それより近いとセンサーが反応して、また止まるためです。

2回目3回目4回目5回目
Check-incs:117cs:122cs:123cs:124
回り切った時間(分)299.7(止めた)221.5232.5210.0
帰った組94 / 9791 / 91104 / 10492 / 92
往復47414551
時間切れの往復45272416
止まった回数1,222312774421
うち動けなくなった11013412784
「もう1台のロボット」327回・6,349秒105回・5,375秒429回・4,505秒177回・2,594秒
人が原因(立ち止まり・すれ違い)
146回・4,291秒160回・4,260秒294回・6,731秒181回・4,708秒
道が引けない945001
受け渡し口の前のロボットどうし
13342095
逃がし弁(あきらめた・移した・卓を空けた)
248・117・53209・105・63169・99・71153・85・65
ロボットが運んだ料理の割合13.5%32.0%26.9%32.3%
入店待ち(分)24.2713.5718.457.70
料理が届くまで(分)6.315.885.604.47
実時間(分)16.613.915.913.5

同じ条件のサイトの試算は、入店待ち1.02分、料理が届くまで0.46分、ロボットが運んだ料理の割合73%です。Unity とはまだ大きく違いますが、合わせることは目指していません。違いは、次の段階で理由を分けて調べます。

時間切れにならなかった35往復は、1往復の真ん中の値が45.9秒で、止まっていたのは4.5秒、走る速さは0.58m/秒でした。止まっていた時間のほとんどは、時間切れの16往復が、1往復で約10分ずつ動けずにいた分です。その間ロボットは使えないので、料理の7割をスタッフが運んでいます。

もっと人より、ロボットフル活用しているようにしないとかな。ロボットが止まっている時間が多すぎるように見える。

③をここで止めた理由と、次に進みながら直す2つの点

時間切れは大半(6割)から3割に減りましたが、逃がし弁はまだ多く、段階A(どの店・どの条件でも最後まで回り切り、逃がし弁がほぼ0)の終わりの条件には届いていません。決めておいた区切りのとおり、③の直しはここで止め、段階B(条件を変えて回し、結果を台帳にまとめる)へ進みながら、次の2つを直します。

5回目にいちばん多く動けなくなったのは、A01(いちばん左の通路)の入口でのロボットどうし(73回)でした。2番目は、レジの前(x4〜6・z4)の「人が立ち止まっていた」(32回)です。

左の通路の入口を真上から拡大した画面。白いロボット2台が同じ通路の入口に来て、まわりを黄色の客が囲んでいる

同じテーブル近くにロボットが集まらないような工夫が必要かもね。すぐ詰まっちゃう

今の作りでは、ロボットが料理を受け持つとき、ほかの台がどこへ向かっているかを見ていません。通路の中に台がいれば入らない決まりはありますが、入口に着いてから効くので、詰まりは防げません。料理を受け持つ段階で、ほかの台が向かっている・中にいる通路の卓は後に回すようにします。サイトの試算には通路という考え方がないので、これは Unity だけの決まりとして入れ、サイトとの違いの一覧に書きます。

レジについては、店の形を見ると、レジに並ぶ点(z 3.8m・4.3m)が、客席の下の通路のまん中にありました。客席の下の端は z 4.8m で、ロボットが左の通路へ行くときは、ここを通ります。

レジテーブルもっと壁際に下げたほうが良さそう?

レジの向きにもよるから、必ずこう!って感じじゃないけど、通路を狭くするようなレジの置き方はやめた方がいいよ。

店の形の決まりとして、「レジの向きは店ごとに違ってよい。ただし、レジの台・店員の立つ所・会計で並ぶ所で、通路を狭くしない」を足します。店の形はサイトが正なので、サイトの店の形の作り方(6店すべて)を先に直してから、Unity に入れます。

設計書(unity_design_v0.md)の0.5章には、この区切りと、2つの直す点を書き足しました(全文は後ろの「設計書の0.5章」)。

データとコードの置き場所

もの場所
Unity の出力(4回分)
KIOXIA r2r2r-data/service_sim/unity/20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_{0655_stopped,0913,1006,1135}/
Unity の設計書・Claude Code の報告
iCloud サービスロボット導入シミュレーション/unity/(unity_design_v0.md・claude_code_reports/)
Build Store の確かめの出力
iCloud サービスロボット導入シミュレーション/unity/screens/
Unity のコード
/Users/shimazueiichi/Robotics_UX/Robotics_UX_New/Assets/ServiceSim/(Unity Version Control cs:117〜cs:124)
店の形のデータ
GitHub PixelstoMotors/p2m-site の public/sim/layouts/unity/p1_efficient_corner.json(版 9628954a582f。この回では変えていない)

回した記録のうち、人どうしの詰まりの記録(people_jams.csv、1回あたり156〜279KB)は、この記事では使っていないので載せていません。KIOXIA の同じフォルダにあります。それ以外の出力は、後ろにすべて載せます。

Claude Code への依頼文

Claude Code に送った文を、送った順にすべて載せます。

1. 35.9分で止まった原因を調べる(直さない)

③ スタッフ4人・ロボット2台を回したところ、35.9分の時点で、パントリーの角でロボット1台をスタッフ3人が囲んだまま動けなくなり、客34組が入口に並んだまま案内されませんでした(待ち0・帰った0・あきらめ82回・立ち往生3回)。途中で止めたので、出力はありません。
直さずに、まず原因を調べて報告してください。
1. 立ち往生で呼ばれたスタッフが、ロボットのそばで互いにふさぎ合っていないか(1台に何人呼んでいるか、着く場所が重なっていないか)
2. あきらめたのは誰か(客・スタッフ)と、その行き先
3. 案内の仕事が、立ち往生の呼び出しに押されて後回しになり続けていないか
4. 途中で止めても give_ups.csv と summary.json が書き出されるようにできるか(できるかどうかの報告だけ)
5. 途中で止めたので、.asset がサイトの値のまま残っていないか確かめ、残っていたら元に戻す

2. 助けに行く仕事の矛盾を直す(cs:117)

20261022_2230_deadlock_pantry.txt の6節のうち、次の3つだけを入れてください。
1. Rescue の仕事を持っているスタッフは、その台について KeepClear・下がる・待つ・回り道をしない(ほかの台はこれまでどおりよける)。行き先はロボットの手前0.8mの点にし、ロボットが動いたら行き先を更新する。着いた判定はその点で行う
2. あきらめた回数を、人ごとではなく仕事ごとに数える(3回で移す逃がし弁が、仕事が人から人へ回っても働くように)
3. 途中で Play を止めても、そこまでの記録(summary.json・trips.csv・give_ups.csv など)を書き出す。stopped_early を立て、フォルダ名に _stopped を付け、try/catch で包む
スタッフが待つ点の場所と、取られっぱなしを防ぐ区切りは変えないでください。
直したら Check-in して、もう一度「③ スタッフ4人・ロボット2台」を押すよう私に言ってください。

3. 座っている客を画面に出す(cs:118)

10/21 に頼んだまま入っていなかった件です。客が座っていることが、画面で分かるようにしてください。
1. 客が席に着いたら、その席に「座っている客」の形を出し、立ち上がったら消す(ドリンクバー・トイレ・会計で立つときも消し、戻って座ったらまた出す)
2. 色は立っている客と同じ黄色。真上から見て、ベンチの箱(高さ1.1m)や仕切りに隠れずに見えること。形の高さは見えることを優先して決めてよい
3. 見た目だけにする。当たり判定(Collider)・NavMesh・ロボットのセンサー・人がよける処理には一切入れない(止まる回数が変わるため)
4. LABEL_RULES.md の「形と色で表す状態」の節に、この決まりを書いてから作る
報告してほしいこと:
- 変えたファイルと、当たり判定・NavMesh・センサーに触れていないことの確認
- 真上からの Scene ビューで、座っている客が見えている画面を1枚
直したら Check-in してください。

4. 座った形が出なかった件と、A03 の詰まりを調べる(cs:119)

cs:118 のあと ServiceSim/Build Store を押しました(07:28)。screens/20261023_family_v0_top_w120_people.png には、座った客の形が1体も写っていません(ロボット2台とスタッフ2人だけ)。Console にも「席に出した形 N 体」の行が出ていません。
1. Build Store が、座った形を出す処理まで進んでいるか。途中で止まっていないか、ログが出ない道を通っていないか
2. seatedBodyPrefab がまだ空のままになっていないか(EnsureSeatedBodyPrefab が呼ばれているか)
3. Build Store の「8割の卓に座った客を置く」で、そもそも客の組を置いているか(画像に客が1人もいない)
原因を直して Check-in し、もう一度 Build Store を押すよう私に言ってください。当たり判定・NavMesh・センサーに触れない決まりはそのままです。
③ スタッフ4人・ロボット2台を回しました(cs:117。出力は KIOXIA の 20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped)。助けに行く仕事は直りましたが、ロボットが通路A03の入口(x9・z4あたり)で動けなくなります。47往復のうち45往復が600秒の時間切れで、止まった1,222回のうち約920回がこの場所の「通路の幅が足りない」と「もう1台のロボット」でした。
直さずに、まず原因を調べて報告してください。
1. A03は幅1.2mなのに、なぜ「通路の幅が足りない」(path_blocked・partial_path)になるのか。1台が中にいるとき、もう1台が入口で待つ決まりになっていないか
2. 中の台が出ようとしたとき、入口で待っている台がふさいで、互いに待ち合っていないか
3. サイトから渡した道順(routes)のうち、A03を通る卓はどれか
4. 最後まで帰らなかった3組(state が Seated のまま)が、なぜ帰れないのか

5. ベンチと座っている客の見た目・種類の印(cs:120)

ベンチと座っている客の見た目を変えてください。あとで Unity の映像(天井の角のカメラ)から人とロボットを見分ける学習に使うので、本物に近い見た目にします。測る数字は変えません。
1. Bench の当たり判定の箱(大きさ・位置・高さ1.1m)はそのまま残し、見た目(Renderer)だけ消す
2. 見た目だけの座面(高さ0.45m)と背もたれ(机と反対側に薄く、高さ1.1m)を出す。当たり判定なし。今の BenchSeat は、これと重ならないように整理する。色と素材は、あとで差し替えられるよう1か所(マテリアル)にまとめる
3. 座っている客の形は、座面に座っているように見える形と高さにする(頭が背もたれより少し上に出る)。当たり判定なしのまま
4. 種類の印(Layer か Tag)を付ける:ロボット・スタッフ・立っている客・座っている客・ベンチ・机・椅子。今は付けるだけで、使うのはあと
5. NavMesh・ロボットのセンサー・人がよける処理・店の形の確かめには触れない。直したあと Build Store の store_report で、通れる床と卓までの道が直す前と同じことを確かめる
6. LABEL_RULES.md の「形と色で表す状態」に、ベンチと座っている客の見た目の決まりを書いてから作る
直したら Check-in して、Build Store を押すよう私に言ってください。

6. 立っている人の形をそろえる(cs:121)

座っている客の「胴+頭」の形が人として分かりやすいので、立っている人の見た目も同じ形にそろえてください。
1. 対象:スタッフ・歩く客・待合の客(立っている人すべて)。座っている客と同じ作りの胴+頭にし、背の高さは今のまま(客1.7m など)
2. 色は今のまま(スタッフ青・客黄色など)。マテリアルも今のものを使う
3. 取り替えるのは見た目(Renderer)だけ。当たり判定(大きさ・半径・高さ)、NavMeshAgent の半径と高さ、PersonBody、人がロボットをよける処理には触れない
4. Tag は今のまま(SimStaff・SimGuest)
5. LABEL_RULES.md の「形と色で表す状態」に、立っている人の形の決まりを書いてから作る
直したら Check-in して、Build Store を押すよう私に言ってください。store_report と卓までの道の表が、08:23 の分と同じになることを確かめます。

7. 道が引けない原因を調べる列を足す(cs:122)

20261023_0730_a03_deadlock.txt を読みました。6節の a〜d はまだ入れないでください。
まず、動きを変えずに、stops.csv に〈寄せたあとの出発点・行き先・CalculatePath の結果(status と角の数)〉の3列を足してください。あわせて、そのときロボットの位置が焼いた面の上にあるか(NavMesh.SamplePosition で一番近い面までの距離)も1列足してください。
直したら Check-in して、「③ スタッフ4人・ロボット2台」を押すよう私に言ってください。3組が帰らないので、10分ほどで私が止めます。

8. ロボットどうしの譲り合い(cs:123)

cs:122 で ③ を回しました(出力 20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913)。全員帰りましたが、41往復のうち27往復が時間切れです。道が引けない(path_blocked)は0回でした。止まりの一番は「もう1台のロボット」105回(うち動けなくなった80回・5,375秒)で、受け渡し口の前(x15・z6)と通路の入口(z4あたり)に集まっています。通路の入口の順番待ちも、1回で最長576秒ありました。
実際の配膳ロボットは台どうしで連絡を取り合い、片方が道を譲るので、ロボットどうしの待ち合いを直します。直すのはこれだけです(6節の a・c・d と、人のよけ方は入れない)。
1. 2台がふさぎ合ったら、決まった順(番号の小さい台が先など)で片方が譲る。譲る台は、相手の道からどいて待ち、相手が通ったら進む
2. 通路の入口で待つ台は、入口の点そのものに立たず、中の台が出てくる道をふさがない場所で待つ
3. 入口での順番待ちに上限を付ける(人の20秒と同じ考え方。値は Unity だけの仮の値として1か所に置く)
4. 受け渡し口の前で、出発する台と戻ってきた台がふさぎ合わないようにする
直したら Check-in して、③ を押すよう私に言ってください。「もう1台のロボット」の回数と、時間切れの往復の数を前と比べます。

9. 受け渡し口の前の通り方(最後の1回・cs:124 の前の確かめ)

cs:123 で ③ を回しました(出力 20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006)。「もう1台のロボット」の止まりが105回から429回に増え、時間切れは45往復のうち24です。止まる場所の1位は受け渡し口の前(x14〜15・z5〜6、約210回)でした。待機場所は受け渡し口の右なので、料理を載せている台の前を、戻る台が通れずに「譲って下がる→また進む」をくり返しています。
待機場所の位置(サイトの店の形)は変えません。直すのは受け渡し口の前の通り方だけです(下の通路 z4 のすれ違いは今回は直さない)。
1. 受け渡し口の前は、1台ずつ使う場所にする。使っている台がいる間、ほかの台は自分の待機場所で待ち、空いたら出る
2. 待機場所へ戻る台は、受け渡し口の前の点を通らず、その少し下を通って右へ抜ける線を通る。線が通れる床に乗っていることを確かめる
3. 1・2の線と場所は、Unity だけの決まりとして RobotSpec の1か所にまとめる
4. 直す前に、1006 の記録で「受け渡し口の前で2号機が止まったとき、1号機は何をしていたか(載せている・待っている・戻っている)」を数えて、見立てが合っているかを報告に書く。合っていなければ直さずに止めて報告する
直したら Check-in して、③ を押すよう私に言ってください。

10. 戻る台の線だけを入れる(cs:124)

B だけでお願いします(予約の A は入れない)。
戻る台の線は、出ていく台の線(受け渡し口の前の点を通る線)から、中心どうしで1.0m以上離してください。ドリンクバーに並ぶ点(18.8, 4.8 と 18.8, 5.3)とも重ならないようにしてください。
線が通れる床に乗らないときは、報告のとおり使わずに今までどおりにして、報告に書いてください。
直したら Check-in して、③ を押すよう私に言ってください。

Claude Code の報告

この記事のコード・ログ・データは、1ファイルずつ下に置いています。全文はリンク先にあります。

ファイルの一覧(52本)

01_20261022_2230_deadlock_pantry.txt ― 20261022_2230_deadlock_pantry.txt(35.9分で止まった原因)・5,336字

02_20261023_0730_a03_deadlock.txt ― 20261023_0730_a03_deadlock.txt(A03 の入口の詰まり)・6,093字

03_20261023_1030_pass_front_check.txt ― 20261023_1030_pass_front_check.txt(受け渡し口の前の見立ての確かめ)・3,122字

04_s0_0655_stopped_summary.json ― 2回目(cs:117・途中で止めた):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped / summary.json・5,660字

05_s0_0655_stopped_trips.csv ― 2回目(cs:117・途中で止めた):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped / trips.csv・12,359字

06_s0_0655_stopped_stops.csv ― 2回目(cs:117・途中で止めた):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped / stops.csv・163,869字

07_s0_0655_stopped_give_ups.csv ― 2回目(cs:117・途中で止めた):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped / give_ups.csv・32,743字

08_s0_0655_stopped_groups.csv ― 2回目(cs:117・途中で止めた):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped / groups.csv・10,110字

09_s0_0655_stopped_dishes.csv ― 2回目(cs:117・途中で止めた):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped / dishes.csv・6,397字

10_s0_0655_stopped_contacts.csv ― 2回目(cs:117・途中で止めた):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped / contacts.csv・10,532字

11_s0_0913_summary.json ― 3回目(cs:122):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913 / summary.json・5,444字

12_s0_0913_trips.csv ― 3回目(cs:122):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913 / trips.csv・7,769字

13_s0_0913_stops.csv ― 3回目(cs:122):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913 / stops.csv・52,722字

14_s0_0913_give_ups.csv ― 3回目(cs:122):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913 / give_ups.csv・29,446字

15_s0_0913_groups.csv ― 3回目(cs:122):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913 / groups.csv・9,509字

16_s0_0913_contacts.csv ― 3回目(cs:122):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913 / contacts.csv・11,595字

17_s0_1006_summary.json ― 4回目(cs:123):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006 / summary.json・5,444字

18_s0_1006_trips.csv ― 4回目(cs:123):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006 / trips.csv・10,522字

19_s0_1006_stops.csv ― 4回目(cs:123):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006 / stops.csv・131,723字

20_s0_1006_give_ups.csv ― 4回目(cs:123):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006 / give_ups.csv・26,478字

21_s0_1006_groups.csv ― 4回目(cs:123):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006 / groups.csv・10,875字

22_s0_1006_contacts.csv ― 4回目(cs:123):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006 / contacts.csv・15,273字

23_s0_1135_summary.json ― 5回目(cs:124):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135 / summary.json・5,604字

24_s0_1135_trips.csv ― 5回目(cs:124):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135 / trips.csv・9,470字

25_s0_1135_stops.csv ― 5回目(cs:124):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135 / stops.csv・70,102字

26_s0_1135_give_ups.csv ― 5回目(cs:124):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135 / give_ups.csv・23,771字

27_s0_1135_groups.csv ― 5回目(cs:124):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135 / groups.csv・9,608字

28_s0_1135_contacts.csv ― 5回目(cs:124):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135 / contacts.csv・9,288字

29_s0_1135_conditions.json ― 5回目(cs:124):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135 / conditions.json・9,111字

30_Build_Store.txt ― Build Store の店の報告(cs:121 のあと・2026-10-23 09:01)・5,473字

31_Assets_ServiceSim_People_PersonRobotYield.cs.txt ― Assets/ServiceSim/People/PersonRobotYield.cs・20,039字

32_Assets_ServiceSim_People_StaffAgent.cs.txt ― Assets/ServiceSim/People/StaffAgent.cs・17,321字

33_Assets_ServiceSim_People_SeatedGuest.cs.txt ― Assets/ServiceSim/People/SeatedGuest.cs・9,096字

34_Assets_ServiceSim_People_PeopleSpec.cs.txt ― Assets/ServiceSim/People/PeopleSpec.cs・8,306字

35_Assets_ServiceSim_People_SeatedGuestBody.prefab.txt ― Assets/ServiceSim/People/SeatedGuestBody.prefab・5,790字

36_Assets_ServiceSim_People_Guest.prefab.txt ― Assets/ServiceSim/People/Guest.prefab・7,985字

37_Assets_ServiceSim_People_WaitingGuest.prefab.txt ― Assets/ServiceSim/People/WaitingGuest.prefab・7,934字

38_Assets_ServiceSim_People_Staff.prefab.txt ― Assets/ServiceSim/People/Staff.prefab・8,042字

39_Assets_ServiceSim_Robot_ServingRobotController.cs.txt ― Assets/ServiceSim/Robot/ServingRobotController.cs・61,350字

40_Assets_ServiceSim_Robot_RobotSpec.cs.txt ― Assets/ServiceSim/Robot/RobotSpec.cs・5,259字

41_Assets_ServiceSim_Robot_ServingRobot.prefab.txt ― Assets/ServiceSim/Robot/ServingRobot.prefab・8,120字

42_Assets_ServiceSim_Service_ServiceOps.cs.txt ― Assets/ServiceSim/Service/ServiceOps.cs・46,217字

43_Assets_ServiceSim_Experiment_ExperimentRunner.cs.txt ― Assets/ServiceSim/Experiment/ExperimentRunner.cs・43,406字

44_Assets_ServiceSim_Experiment_TripLogger.cs.txt ― Assets/ServiceSim/Experiment/TripLogger.cs・57,312字

45_Assets_ServiceSim_Store_JsonStoreLayout.cs.txt ― Assets/ServiceSim/Store/JsonStoreLayout.cs・30,331字

46_Assets_ServiceSim_Store_StoreBuilder.cs.txt ― Assets/ServiceSim/Store/StoreBuilder.cs・21,126字

47_Assets_ServiceSim_Store_StorePlan.cs.txt ― Assets/ServiceSim/Store/StorePlan.cs・11,490字

48_Assets_ServiceSim_Store_Prefabs_Chair.prefab.txt ― Assets/ServiceSim/Store/Prefabs/Chair.prefab・3,978字

49_Assets_ServiceSim_Editor_ServiceSimSetup.cs.txt ― Assets/ServiceSim/Editor/ServiceSimSetup.cs・52,875字

50_Assets_ServiceSim_Editor_ServiceSimMenu.cs.txt ― Assets/ServiceSim/Editor/ServiceSimMenu.cs・60,983字

51_Assets_ServiceSim_Editor_ServiceSimSeatedBody.cs.txt ― Assets/ServiceSim/Editor/ServiceSimSeatedBody.cs・3,101字

52_Assets_ServiceSim_LABEL_RULES.md ― Assets/ServiceSim/LABEL_RULES.md・3,277字

ファイルに書かれた報告と、チャットで返ってきた報告を、届いた順にすべて載せます。

20261022_2230_deadlock_pantry.txt(35.9分で止まった原因)

01_20261022_2230_deadlock_pantry.txt5,336字・158行・text
③ スタッフ4人・ロボット2台 が 35.9 分で止まった件。直さずに原因だけ調べました。
コードを読んで分かったことと、数字で確かめられたことを分けて書きます。

════════════════════════════════════════════════════════
結論(いちばんの原因)
════════════════════════════════════════════════════════

**スタッフは、ロボットに 0.75 m より近づけません。
別のタブで開く保存

cs:117 の報告(チャット)

ご指定の3つだけ入れて cs:117 で Check-in しました。

  1. 助けに行くスタッフは、その台だけはよけない
  PersonRobotYield に ignoreRobot を足し、その台については「横に空ける(KeepClear
  )・下がる・入口で待つ・回り道する」をしません(ロボットを探す3か所すべてに同じ
  除外を入れました)。ほかの台はこれまでどおりよけます。
  行き先はロボットの中心から自分がいる側へ 0.8 m の点にし、相手が 0.25 m
  より動いたら引き直します。着いた判定は経路の残りではなくその点との距離 0.35 m
  以内で見ます(引き直した直後の remainingDistance は当てにならないため)。

  これで着ける範囲は中心距離 0.45〜1.15 m。よけ合いで最低 0.45 m は空くので、0.8
  m の点にそのまま立てます(直す前は押しのけ 0.75 m に対して判定 0.35 m
  で、原理的に届きませんでした)。
  行き先を引き直してもあきらめの時計は止めないので、どうしても立てないときは逃が
  し弁が働きます。

  2. あきらめた回数を仕事ごとに数える
  StaffJob.tries に移し、StaffAgent
  側の人ごとの辞書を外しました。これで仕事が人から人へ回っても 3
  回で「移して済ませる」が働きます。1 と組み合わせると、万一 0.8 m
  の点に立てなくても、移されたあと判定が通って仕事が終わります。

  3. 途中で止めても書き出す
  書き出しを WriteOutputs(dir, stoppedEarly) に切り出し、OnApplicationQuit と
  OnDisable の両方から呼びます(二重に書かない印つき)。フォルダ名は末尾
  _stopped、run_info.json の stopped_early が true(everyone_left は false
  のまま)、まるごと try/catch です。Play
  を抜ける最中なので、中でオブジェクトを探したり消したりはしていません。

  変えていないもの:スタッフが待つ点の場所、取られっぱなしを防ぐ区切り、立ち往生
  の判定(60 秒)、1往復の打ち切り(600 秒)。

  もう一度 ServiceSim/Site Run/③ スタッフ4人・ロボット2台 を押してください。
  途中で止めても _stopped フォルダに summary.json・trips.csv・give_ups.csv
  が出るようになったので、また詰まったらそれを送っていただければ、誰が何回あきら
  めてどこへ向かっていたかまで追えます。見ていただきたいのは Console
  の「とちゅう」の 立ち往生の回数とあきらめの回数が増え続けないか、それと帰った数
  が増えていくかです。

cs:118 の報告(チャット)

cs:118 で入れました。

  入っていなかった理由
  出す・消す仕掛け(SeatedGuest.ShowSeated と GroupManager.UpdateSeatedBodies)は
  10/21 に入っていました。足りなかったのは形の prefab
  そのものです。People/SeatedGuestBody.prefab
  が一度も作られておらず、PeopleSpawner.seatedBodyPrefab が null のまま。null
  だと ShowSeated が何もせずに戻るので、席にはずっと何も出ていませんでした。

  1. LABEL_RULES.md を先に直しました(「形と色で表す状態」の節)。出す・消す条件
  、黄色(Mat_Guest)、高さ 1.4 m
  とその理由、見た目だけという決まりを書いてから作りました。

  2. 高さ 1.2 m → 1.4 m(PeopleSpec.cs と .asset)。1.2 m
  のままだと仕切りと同じ高さで真上から見分けられませんでした。ベンチの箱 1.1
  m・仕切り 1.2 m より高く、立っている客 1.7 m より低くしてあります。

  3. 形を用意する出口を作りました。ServiceSimSetup.EnsureSeatedBodyPrefab(PeopleS
  pec) を公開し、Build Store
  が、参照が空なら自分で用意して入れるようにしました。高さを変えたら作り直します
  (前は「あれば何もしない」で、高さを変えても古いままになる作りでした)。

  変えたファイル:LABEL_RULES.md / People/PeopleSpec.cs / People/PeopleSpec.asset
  / Editor/ServiceSimSetup.cs / Editor/ServiceSimMenu.cs
  (PeopleSpec.asset には 1 日前からの未 Check-in の変更も一緒に入っています)

  当たり判定・NavMesh・センサーに触れていないことの確認(コードから読み取れる事実
  )
  - prefab の中身は当たり判定を消したカプセル1つだけ。AddComponent
  は1つもありません(Collider・PersonBody・NavMeshAgent を持たない)
  - NavMesh は NavMeshCollectGeometry.PhysicsColliders
  で焼くので、当たり判定が無いものは入りません。しかも焼くのは bakeRoot=Store
  の下だけで、人は People の下に置くので二重に外れます
  - ロボットの前のセンサーは
  Physics.OverlapBoxNonAlloc(当たり判定を見る)なので入りません
  - ロボットの
  UpdateClearance・人がロボットをよける処理・人どうしの詰まり・歩く人の数は
  PersonBody.All を見ますが、この形は PersonBody を持たないので入りません

  → 止まる回数は変わりません。

  真上からの画面について:Editor
  が開いたままなので私からは撮れません。ServiceSim/Build Store を押してください。
  終わると screens/ に {日付}_{run_name}_top_w120_people.png
  が出ます(真上・1920×1080、8割の卓に座った形)。Console に「席に出した形 N
  体・高さ 1.4 m・見た目だけ」と出るので、N が 0 でないことも見ていただけます。そ
  の画像を送っていただければ、隠れずに見えているかを報告に残します。

  なお、Build Store のあとにシーンを保存していただくと、回すとき(Site
  Run)にも席に形が出ます。

cs:119 と A03 の調べの報告(チャット)

2件まとめて報告します。

  A. 座っている客が出ない件 → cs:119 で直しました

  原因:07:28 の Build Store は最後まで走って画像も出ているのに、prefab
  が作られず、私が入れた Console 行も出ていません。つまり押した時点の Unity 
  が、cs:118 を取り込む前のアセンブリで動いていた(読み込み直しの前に押した)とい
  うことです。

  ご質問の3点への答え:
  1. Build Store は最後まで進んでいます(画像・store_report・CSV が 07:28
  に出ています)。止まってはいません。進んだのが古いコードだった、という形です。
  2. seatedBodyPrefab は空のままです。SeatedGuestBody.prefab
  はいまもディスク上に存在しません(People/ には
  Guest・SeatedGuest・Staff・WaitingGuest の4つだけ)。つまり
  EnsureSeatedBodyPrefab は一度も走っていません。
  3. Build Store は客の「組」は置きません(これは元からの設計です)。置くのはスタ
  ッフと、卓ごとの見えない仕掛けだけ。絵に出る客は座った形だけなので、形が出ない
  と客は1人も写りません。歩く客は回したときにだけ出ます。

  直した内容:
  - 新規 Editor/ServiceSimSeatedBody.cs
  に処理をまとめ、ServiceSim/座っている客の形を用意する
  という単独メニューを追加(押せば結果を必ず Console に出します)
  - Build Store は毎回この処理を通るようにしました(前は「参照が空のときだけ」)
  という単独メニューを追加(押せば結果を必ず Console に出します)
  - Build Store は毎回この処理を通るようにしました(前は「参照が空のときだけ」)
  - SeatedGuest.ShowSeated が、形が無いまま呼ばれたら警告を出すようにしました。2
  日間気づけなかったのは、ここが黙って戻っていたためです

  当たり判定・NavMesh・センサーの決まりは変えていません。

  押してください:まず Unity に切り替えてコンパイルが終わるのを待ってから、Servic
  eSim/座っている客の形を用意する → 次に ServiceSim/Build
  Store。1つめで「座っている客の形を用意しました(高さ 1.4
  m…)」が出れば成功です。

  B. A03 の詰まりの原因調査(直していません)

  報告は claude_code_reports/20261023_0730_a03_deadlock.txt です。

  結論:通路の幅は足りています。足りないのは「止まったまま抜け出す道」です。

  1. 「通路の幅が足りない」は幅の話ではありません —
  「次の点までの道が引けなかった」に付く名前です。そのときの左右の空きは 37〜275
  cm(中央 118 cm)。07:28 の store_report でも A03 の焼いた面は 0.62 m
  幅、道順の点 189 個すべてが面に乗り、届かない卓 0/42 です。椅子も違います(③
  は椅子 8 脚だけで、0.3 m 引いても 42 本の道順のどれにも届きません)。
  問題は道が引けないとロボットは 1 mm も動けないこと(wantMove が hasPath
  を要求)。そして逃げ道の「通路の入口まで歩いて出る」は歩くために道が必要なので
  、いちばん必要な場面で働きません。入口まで 0.48 m なのに歩き出せず、10
  秒ごとの引き直しを 600 秒の打ち切りまで繰り返します(往復39 では 2 cm
  のあいだを行き来しながら 51 回)。
  入口で待つ決まりはあります(MustWaitForAisle。中に台がいれば入らない/同じ通路
  なら番号の小さい方が先)。そして待ち時間に上限がありません(人には 20
  秒の上限があるのに)。
  2. ふさぎ合っています。記録に2回、A01 の入口で 576 秒と 556
  秒の待ちがあり、どちらも 600 秒の打ち切りで終わっています。外の台が入口の点その
  ものに立つので、中の台が出ようとしてもセンサーで止まり、互いに待ち合います。
  3. A03 を通るのは T18〜T26 の9卓(A01 は T01〜T08 の8卓、A02 は T09〜T17
  の9卓、残り16卓はどの通路も通りません)。
  4. 帰れなかった3組は
  T16・T19・T20。戻した皿100枚のうちこの3卓が24枚ずつ(計72枚)、理由は全部「打ち
  切り」。最初の料理が全部届かないと食事に移れないので、3組は Seated
  のまま固まります。しかも卓を強引に空ける逃がし弁は会計中・片付け中にしか効かな
  いので、永久に卓が空きません。その結果、往復11以降 robot1 は
  **22回続けてまったく同じ「19;20;16」**を走り、毎回時間切れ → これが 45/47
  の時間切れの正体です。

  残った1点は「27 cm 先の点になぜ道が引けないのか」です。stops.csv
  に〈寄せたあとの出発点・行き先・CalculatePath
  の結果〉の3列を足せば1回回すだけで決まります。直し方の案は報告の6節に4つ書きま
  した(道が引けないときに手前の点へ戻す/入口待ちに上限/Seated
  にも逃がし弁/戻りすぎた皿は人に回す)。どれを入れるかご指示ください。

20261023_0730_a03_deadlock.txt(A03 の入口の詰まり)

02_20261023_0730_a03_deadlock.txt6,093字・179行・text
③ スタッフ4人・ロボット2台(cs:117)が A03 の入口で動けなくなった件。
直さずに原因だけ調べました。読んだのは
  20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped(trips/stops/dishes/groups/summary)
  店の形の JSON(p1_efficient_corner.json)
  07:28 の store_report(同じ③の店を、焼きたての NavMesh で調べたもの)

════════════════════════════════════════════════════════
結論
別のタブで開く保存

cs:120 の報告(チャット)

cs:120 で入れました。LABEL_RULES.md
  の「形と色で表す状態」に決まりを書いてから作っています。

  1. ベンチの当たりの箱はそのまま、見た目だけ消す
  BoxStyle.BenchBody(当たりだけ・見た目なし)を足し、JsonStoreLayout
  のベンチをこれに替えました。rect も高さ 1.1 m も名前も今までと同じです。prefab
  は BenchBody.prefab(BoxCollider だけ。MeshRenderer と MeshFilter
  を外してあります)。仕切りは今までどおり見せます。

  2. 座面と背もたれ(見た目だけ・当たりなし)
  ベンチの箱の中に、重ならないように2つ置きます。背もたれは机と反対側のふちに厚さ
  0.08 m・高さ 1.1 m、座面はその残りで高さ 0.45 m(JSON の meta.heights.bench_se
  at)。机と反対側は、ベンチの中心と卓の天板の中心の位置関係で決めています。
  ③ の ベンチ 76 本すべてで〈重なり 0/背もたれが机側 0/箱からのはみ出し 0〉を
  JSON の数字で検算しました。色と素材は Mat_BenchSeat / Mat_BenchBack
  の1か所です。前の「薄い板を敷く」作りはやめました。

  3. 座っている客 — 座面 0.45 m から立ち上がる胴+頭(球)にしました。頭の先 1.35
  mで、背もたれ 1.1 m より 0.25 m 上、仕切り 1.2 m
  よりも高いので真上からも隠れません。立っている客 1.7 m
  より低いので座っていると分かります。当たり判定なしのままです。

  4. 種類の印 — Tag を付けました:SimRobot / SimStaff / SimGuest / SimSeatedGuest
  / SimBench / SimTable / SimChair。Layer ではなく Tag にしたのは、Layer
  は物理の問い合わせに効くことがあるのに対し Tag は何にも効かないからです。

  5. 触っていないことの確認 — 新しい見た目はどれも Collider を持ちません。NavMesh
  は PhysicsColliders から焼き、前のセンサーは
  Physics.OverlapBox、真上の重なりの確かめは Physics.Raycast
  なので、どれにも入りません。Not Walkable
  の印(NavMeshBuildMarkup)も集めるのはコライダーだけなので効きません。

  1点だけお知らせ:Tag は ProjectSettings/TagManager.asset
  に足されます。「Assets/ServiceSim
  の外は触らない」という決まりの唯一の例外になるので、LABEL_RULES.md
  にもそう書きました。

  ServiceSim/Build Store を押してください(Unity
  に切り替えてコンパイルが終わるのを待ってから)。Setup を押していなくても、Build
  Store が建てる前に部品を用意して入れるようにしてあります。

  出てきた store_report.txt の次の4つが、07:28 の分と同じになることを見ていただけ
  ますか。ここが同じなら、測る数字は変わっていません。

  - ロボットの経路…: 面に乗っていない点 0 個(経路 42 本・点 189 個)
  - 細い通路の、焼いた NavMesh の歩ける幅:A01 0.68 / A02 0.62 / A03 0.62 m
  - 通れない場所 すべてに NavMesh は入っていない
  - ふさがないとき: 届かない卓 0 / 42(ロボット用・人用とも)

  あわせて真上の画像(…_top_w120_people.png)で、座った客が座面に腰かけて見えるか
  、背もたれが机と反対側に立っているかも見てください。

cs:121 の報告(チャット)

cs:121 で入れました。LABEL_RULES.md の「形と色で表す状態」に〈立っている人(ス
  タッフ・歩く客・待合の客)〉の決まりを書いてから作っています。

  1. 対象と形 — 見た目を作る処理を1つにまとめ(BuildPersonLook)、立っている人も
  座っている客も同じ道具で胴+頭を作るようにしました。

  ┌──────────────┬──────────────────┬───────────────────────┬─────────┐
  │              │ 胴(半径 0.2 m) │ 頭(球・半径 0.11 m) │ 頭の先  │
  ├──────────────┼──────────────────┼───────────────────────┼─────────┤
  │ 立っている人 │ 0 〜 1.590 m     │ 中心 1.590 m          │ 1.700 m │
  ├──────────────┼──────────────────┼───────────────────────┼─────────┤
  │ 座っている客 │ 0.450 〜 1.240 m │ 中心 1.240 m          │ 1.350 m │
  └──────────────┴──────────────────┴───────────────────────┴─────────┘

  背の高さは今までのまま(personHeight 1.7 m)です。

  2. 色 — スタッフ青(Mat_Staff)/歩く客 黄(Mat_Guest)/待合の客
  紫(Mat_WaitingGuest)。今のマテリアルをそのまま使い、色の値は1か所(StaffColor
  / GuestColor / WaitingColor)にまとめました。

  3. 取り替えたのは見た目だけ — すでにある prefab は FixWalkerLook が子の Body と
  Head だけを作り直します。親の CapsuleCollider(半径 0.2・高さ 1.7・中心
  0.85)、NavMeshAgent の半径と高さ、PersonBody、PersonRobotYield には触れていま
  せん。新規作成のときも、見た目を作ってから当たり判定・NavMeshAgent・PersonBody
  を今までと同じ値で付けています。Physics から見える形は前とまったく同じです。

  4. Tag — そのまま(SimStaff / SimGuest)。

  ServiceSim/Build Store を押してください(Unity
  に切り替えてコンパイルが終わるのを待ってから)。Setup
  を押さなくても、人を置く前に Build Store が見た目をそろえます。Console
  に「立っている人の見た目を胴+頭にそろえました(3 体ぶん・背の高さ 1.7
  m)」と出れば取り替え済みです(2回目以降は、もう同じ形なので出ません)。

  store_report と卓までの道の表は、08:23
  の分とすべて同じになるはずです。人の見た目は当たり判定を持たない子で、当たり判
  定は親のカプセルのまま変えていないので、NavMesh もセンサーも道のりも変わりませ
  ん。違いが出たら、それは見落としなので教えてください。

cs:122 の報告(チャット)

cs:122 で入れました。6節の a〜d は入れていません。記録を足しただけです。

  stops.csv に足した列(22 → 27 列)

  ┌─────────────┬────────────────────────────────────────────────────────────┐
  │     列      │                            中身                            │
  ├─────────────┼────────────────────────────────────────────────────────────┤
  │ solve_from  │ 道を引いた出発点(SamplePosition                           │
  │             │ で焼いた面へ寄せたあと)"x;z"                              │
  ├─────────────┼────────────────────────────────────────────────────────────┤
  │ solve_to    │ 道を引いた行き先(同じく寄せたあと)"x;z"                  │
  ├─────────────┼────────────────────────────────────────────────────────────┤
  │ solve_statu │ CalculatePath の結果(PathComplete / PathPartial /         │
  │ s           │ PathInvalid / 引けない)                                   │
  ├─────────────┼────────────────────────────────────────────────────────────┤
  │ solve_corne │ 引けた角の数                                               │
  │ rs          │                                                            │
  ├─────────────┼────────────────────────────────────────────────────────────┤
  │ off_mesh_m  │ ロボットの位置から、いちばん近い焼いた面までの距離(m)。  │
  │             │ 面の上なら 0 に近い。探す半径 1.0 m で見つからなければ -1  │
  └─────────────┴────────────────────────────────────────────────────────────┘

  SolvePath が道を引くたびに覚えて、いま開いている止まりの記録へ写します。止まっ
  ているあいだは 10 秒ごとに引き直すので、その止まりの最後の1回ぶんが残ります(止
  まり始めの時点でも1回writes)。

  動きを変えていないこと
  - SamplePosition は SolvePath
  がもともと呼んでいたものを使っています(呼ぶ回数は増えていません)。off_mesh_m
  はその戻り値から距離を取っただけです
  - from / to の決め方、寄せる半径、CalculatePath の呼び方、_pathValid
  の決め方、角の飛ばし方は1行も変えていません
  - 足したのは記録用のフィールドへの代入だけで、止まる・動くの決まりには使ってい
  ません

  ServiceSim/Site Run/③ スタッフ4人・ロボット2台 を押してください(Unity に切り替
  えてコンパイルが終わるのを待ってから)。10分ほどで止めていただければ、_stopped
  フォルダに stops.csv が出ます。

  A03 の入口(x≈9.3, z≈4.4〜4.5)の行で、次のどれになるかで原因が決まります。

  - off_mesh_m が大きい(0.3 m 以上)→ ロボットが面から外れて立っている
  - off_mesh_m ≈ 0 で solve_status が PathPartial →
  出発点と行き先が面の上で分断されている(solve_from / solve_to
  の座標でどこが切れているか分かります)
  - solve_status が PathInvalid / 引けない → 行き先そのものが面に乗っていない
  - solve_corners が 0 か 1 → 角が足もとだけで飛ばされ、hasPath が false
  になっている

  結果が出たら送ってください。原因を確定させてから、6節のどれを入れるかご相談しま
  す。

cs:123 の報告(チャット)

cs:123 で入れました。0913 の回のデータで、道は引けていた(path_blocked
  0・solve_status 105回すべて PathComplete・off_mesh_m 0.025
  m)ことが確定したので、台どうしの物理的なふさぎ合いだけを直しています。

  1. ふさぎ合ったら、決まった順で片方が譲る
  番号の小さい台が先。大きい台が下がって待ち、相手が通ったら進みます。ふさがれて
  から 2秒待ってから決めます(すれ違うだけで譲り合わないため)。下がる先は**来た
  道(道順の1つ前の点)**です —
  必ず通れた所なので確実に戻れます。無ければ相手と反対へ 0.9 m。相手とのすき間が
  0.6 m 空いたら区間の続きを走り、20秒で打ち切って進みます。
  下がっているあいだの止まりは、原因を「もう1台のロボット」として残します(下がり
  終えると道が引けていない状態になりますが、それは「幅が足りない」ではないため)
  。

  2. 入口で待つ台は、入口の点そのものに立たない
  通路の外へ 0.9 m 下がり、横へ 0.6 m
  ずれた点で待ちます。面に乗らなければ〈下がるだけ →
  入口そのもの〉の順に落とします。着いた判定もその点で見ます。

  3. 入口での順番待ちに上限 —
  20秒。人がロボットを待つ上限(PeopleSpec.robotYieldMaxSec
  20秒)と同じ考え方で、過ぎたらその区間は譲らずに進みます。

  4. 受け渡し口の前 — ParkIdleRobots
  が、料理が待っていても待機場所へ下げるようにしました(前は受け渡し口で待たせて
  いたので、出発する台と戻る台が1点に重なっていました)。待機場所は1台に1つなので
  重なりません。置き始めも受け渡し口ではなく待機場所にしました。

  値は Unity だけの仮の値として RobotSpec
  の「台どうしの譲り合い」の欄1か所にまとめ、.asset
  にも書き出してあります(20秒/0.9 m/0.6 m/2秒/20秒/0.6 m/0.9 m)。

  6節の a・c・d と人のよけ方は入れていません。

  ServiceSim/Site Run/③ スタッフ4人・ロボット2台 を押してください(コンパイルが終
  わってから)。前回(0913)との比べはこの2つです。

  ┌───────────────────────┬───────────────────────────────────────────┬──────┐
  │                       │              0913(cs:122)               │ 今回 │
  ├───────────────────────┼───────────────────────────────────────────┼──────┤
  │ 「もう1台のロボット」 │ 105 回(うち動けなくなった 80・5,375 秒) │ ?    │
  ├───────────────────────┼───────────────────────────────────────────┼──────┤
  │ 時間切れの往復        │ 41 往復中 27                              │ ?    │
  └───────────────────────┴───────────────────────────────────────────┴──────┘

  あわせて stops.csv の cause_detail に「道をゆずって下がった:…」が出ているか(1
  の仕組みが働いた回数)と、受け渡し口の前 (15,6)
  の止まりが減ったかも見ていただけると、どの直しが効いたか切り分けられます。3組が
  帰らない件は今回も直していないので、前回と同じなら 10 分ほどで止めてください。

受け渡し口の前の見立ての確かめ(チャット)

ご指示の4番を先に数えたところ、一部が合っていなかったので直さずに止めました。報
  告は claude_code_reports/20261023_1030_pass_front_check.txt です。

  数えた結果(2号機が受け渡し口の前で「もう1台のロボット」で止まった
  182回・1,143秒、1回あたり中央 2.8 秒)

  そのとき1号機は:
  - 配り終えて戻る途中 132回(73%)
  - 待機(往復をしていない)32回(18%)
  - 出て行く途中 18回(10%)

  2号機自身は、出て行く途中 58%/戻る途中 42%。

  合っているところ(主な原因) — 相手の91%は「戻ってきた台」か「待機場所にいる台
  」で、待機場所が受け渡し口の右にあるため、出発する台と戻る台がここで鉢合わせし
  ています。ここはご指摘のとおりです。

  違うところ —
  「料理を載せている台の前を通れない」という場面は1回もありません。Unity
  では載せる時間が 0 秒だからです(load_s は下げ膳だけの値、staffDwellAtPassSec
  も v5 3章で 0 にしました)。どの台も受け渡し口で立ち止まらず通り抜けます。
  そのため、1番の「使っている台がいる間」の“使っている”が、いまの作りでは決められ
  ません。止まっている時間が無いので、そのままでは使用中が 0
  秒になり何も変わりません。ここだけご判断をいただきたいので止めました。

  もう1点、比べ方について — 回数は増えましたが止まっていた時間は減っています。

  ┌───────────────────────┬────────────────┬──────────────────┐
  │                       │ 0913(cs:122) │  1006(cs:123)  │
  ├───────────────────────┼────────────────┼──────────────────┤
  │ 「もう1台のロボット」 │ 105 回         │ 429 回           │
  ├───────────────────────┼────────────────┼──────────────────┤
  │ その合計の秒数        │ 5,375 秒       │ 4,505 秒(−16%) │
  ├───────────────────────┼────────────────┼──────────────────┤
  │ 動けなくなった        │ 80 回          │ 50 回(−38%)    │
  ├───────────────────────┼────────────────┼──────────────────┤
  │ 時間切れの往復        │ 27 / 41        │ 24 / 45          │
  └───────────────────────┴────────────────┴──────────────────┘

  60秒で立ち往生する長い止まりが、中央 2.8
  秒の短い止まりに置き換わった形です。なお 429 回のうち新しい譲り合いが働いたのは
  22 回だけで、回数が増えた主因は cs:123 の4番(仕事が無い台を必ず待機場所へ下げ
  る)で受け渡し口と待機場所の行き来が増えたことです。私の直しが原因です。

  決めていただきたいこと(どちらでも2番の線は入れます)
  - 案A(おすすめ):受け渡し口の前を「予約」にする — 前の点から半径 1.2 m
  を1台だけの場所にし、〈料理を割り当てられたとき〉から〈その半径を出るまで〉を使
  用中とする。取れない台は自分の待機場所で待つ。30
  秒で取れなければ進む(固まり防止)
  - 案B:止める場所を分ける — 予約はせず、2番だけ。戻る台は受け渡し口の前の点を通
  らず、少し下を通って右へ抜ける。交差そのものを無くす

  線が通れる床に乗っているかは、0.05 m 刻みで SamplePosition を当て、乗らない点が
  1つでもあれば線を使わず今までどおりにして報告に出します。値は RobotSpec
  の1か所にまとめます。**A か B(または両方)**を教えてください。

20261023_1030_pass_front_check.txt(受け渡し口の前の見立ての確かめ)

受け渡し口の前の見立ての確かめ(1006 の記録)。
ご指示の4番のとおり先に数えました。**一部が合っていないので、直さずに止めて報告します。**

════════════════════════════════════════════════════════
1. 数えた結果:2号機が受け渡し口の前で止まったとき、1号機は何をしていたか
════════════════════════════════════════════════════════

  受け渡し口の前(x 14.0〜15.8 / z 4.8〜6.6)で「もう1台のロボット」で止まった回数
別のタブで開く保存

cs:124 の報告(チャット)

案B だけを cs:124 で入れました(予約の案A は入れていません)。

  戻る台の線
  サイトの道順の最後の点(受け渡し口の前の点)を通らず、次の3点を通って右へ抜け、
  待機場所で往復を終えます。

  - p1 = 受け渡し口の前の点の 1.0 m 下(15.3, 4.95)
  - p2 = 自分の待機場所の x で同じ下の線(16.9 または 17.7, 4.95)
  - p3 = 自分の待機場所

  サイトの道順そのものは変えていません(最後の点だけ差し替え)。

  線を使う前の確かめ(どれか1つでも外れたら線を使わず、今までどおり受け渡し口の前
  へ戻ります)
  - 道順から分かれたあとの区間を 0.05 m
  刻みで調べ、すべての点がロボット用の焼いた面に乗っていること
  - 出ていく台の線(受け渡し口の前の点を通る線)から中心どうしで 1.0 m 以上
  - ドリンクバーの並ぶ点(18.8, 4.8)(18.8, 5.3) から 0.6 m 以上

  離れを見るのは道順から分かれたあとの3点とそのあいだだけです。分かれる前はサイト
  の道順そのままなので、出る線と重なっていてかまいません(分かれる点は x≈12.5
  で、問題が出ていた x 14〜15.8 の外です)。使えなかった回数は Console
  に「戻りの線を使えなかった N 回」と出ます。

  JSON の数字で先に検算した結果
  - 戻りで道順から分かれる点 →(15.3, 4.95) の区間を
  42卓ぶん調べて、ロボットの半径 0.25 m を確保できない卓は 0(いちばん狭い所
  0.509 m)
  - (15.3,4.95)→(16.9/17.7, 4.95) は 1.450 m、→待機場所は 0.450 m
  - ドリンクバーの列からは 1.9 m / 1.1 m。なお3つめの待機場所 (18.5, 6.05)
  は列から 0.300 m
  しか離れないので、その台では線が使われません(確かめが働きます)

  値は RobotSpec の「受け渡し口の前の通り方」の欄1か所です(1.0 / 1.0 / 0.6 /
  0.05 m)。

  1点お伝えしておくこと:往復が待機場所で終わるようになるので、1往復の道のりと時
  間が少し伸びます(前は受け渡し口の前で終わり、そのあと待機場所へ移動していまし
  た)。speed_mps や total_s を前の回と比べるときは、この差を見てください。

  ServiceSim/Site Run/③ スタッフ4人・ロボット2台
  を押してください(コンパイルが終わってから)。比べるのはこの2つです。

  ┌───────────────────────┬──────────────────┬──────────────────┬──────┐
  │                       │       0913       │       1006       │ 今回 │
  ├───────────────────────┼──────────────────┼──────────────────┼──────┤
  │ 「もう1台のロボット」 │ 105 回・5,375 秒 │ 429 回・4,505 秒 │ ?    │
  ├───────────────────────┼──────────────────┼──────────────────┼──────┤
  │ 時間切れの往復        │ 27 / 41          │ 24 / 45          │ ?    │
  └───────────────────────┴──────────────────┴──────────────────┴──────┘

  あわせて Console の「戻りの線を使えなかった N 回」が 0 であること(0
  でなければ線が使えていません)と、stops.csv の受け渡し口の前(x 14〜15.8・z
  4.8〜6.6)の止まりが 209 回から減ったかを見てください。

回した記録(2回目〜5回目)

出力のフォルダごとに、people_jams.csv 以外のファイルをすべて載せます。conditions.json(その回の設定をすべて書き出したもの)は、5回目の分だけ載せます。

2回目(cs:117・途中で止めた):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped

summary.json

04_s0_0655_stopped_summary.json5,660字・27行・json
{
  "run_name": "family_v0",
  "written_at": "2026-10-23 07:12:24",
  "note": "speed_mps = distance_m / (total_s - stopped_s)。stopped_s には、動けなくなった60秒と、スタッフを待った秒数(stuck_wait_s)、通路の入口で待った秒数も入る。pause_s は stop_durations_s(自分で動き出した止まりだけ)の分布。site_metrics はサイトの meta.metrics と同じ名前・同じ定義。入店待ちの分け方もサイトの試算と同じで、blocked_wait は片付け待ちの卓の数だけ待っている列の前から順に足した分、full_wait は seat_wait − blocked_wait、staff_wait は blocked_wait + guide_wait。pauses と rescues は、サイト側が unity_measures の仮の値から出した数なので出どころが違う。",
  "sim_like": {"dish_wait_mean": 6.3116, "dish_wait_p90": 12.8193, "cold_share": 0.5485, "seat_wait_mean": 18.5708, "turn_mean": 4.4227, "robot_share": 0.135, "robot_dishes": 32, "staff_dishes": 205, "requeued_dishes": 100, "groups": 94, "people_jams": 3353, "robot_blocked_jams": 2225, "robot_blocked_jam_share": 0.6636, "chair_pulls": 221, "robot_contacts": 154, "robot_yield_waits": 387, "robot_yield_wait_s": 4426.923, "robot_yield_detours": 0, "register_crowd_max": 7, "register_crowd_mean": 1.2764, "register_pay_count": 73, "register_pay_not_at_back": 13, "register_pay_off_spot": 16, "register_pay_offset_mean_m": 1.2674, "register_pay_offset_max_m": 7.7712, "register_back_intruders": 0, "register_back_intruder_s": 0, "drink_bar_queued": 22, "drink_bar_gave_up": 12, "drink_bar_wait_mean": 0.6596, "drink_bar_wait_p90": 0.9965, "gave_up": 248, "warped": 117, "table_freed": 53, "people_jam_total_s": 5453.809, "walkers_mean": 10.2175, "measured_minutes": 299.7159},
  "site_metrics": {"entry_wait_mean": 24.2693, "full_wait_mean": 15.6671, "staff_wait_mean": 7.3573, "blocked_wait_mean": 2.9037, "guide_wait_mean": 4.4536, "seat_wait_mean": 18.5708, "dish_wait_mean": 6.3116, "dish_wait_p90": 12.8193, "cold_share": 0.5485, "turn_mean": 4.4227, "walk_km_per_staff": 2.8475, "staff_util": 0.6709, "robot_util": 0.7788, "robot_share": 0.135, "rescues": 110, "pauses": 1110, "groups": 94},
  "site_run": {"site_run": true, "condition_id": "fam_p1_s4_r2_a42", "arrivals_minutes": 120, "total_minutes": 299.7159, "everyone_left": false, "rescues_done": 99, "rescue_wait_s": 4839.804, "gave_up": 248, "warped": 117, "table_freed": 53},
  "site_result": {"dish_wait_mean": 0.4568, "dish_wait_p90": 0.8167, "cold_share": 0, "seat_wait_mean": 0.6083, "turn_mean": 4.3928, "walk_km_per_staff": 1.872, "staff_util": 0.6436, "robot_util": 0.4764, "robot_share": 0.7257, "robot_bus_share": 0, "collects": 0, "rescues": 1.475, "pauses": 41.625, "fragile_robot": 31.9, "groups": 82.1, "entry_wait_mean": 1.0194, "blocked_wait_mean": 0.5116, "guide_wait_mean": 0.2337, "staff_wait_mean": 0.7453, "full_wait_mean": 0.0967},
別のタブで開く保存

run_info.json

{
  "run_label": "site_v5",
  "written_at": "2026-10-23 07:12:24",
  "condition_id": "fam_p1_s4_r2_a42",
  "store_kind": "StoreLayout_p1_efficient_corner",
  "time_mode": "FixedStep",
  "time_scale": 1,
  "capture_delta_time": 0.05,
  "aisle_width_m": 1.2,
  "delivery_offset_m": 0,
  "delivery_offset_used_m": 0,
  "crowd": "normal",
  "robots": 2,
  "seed": 0,
  "trips_requested": 0,
  "trips_done": 47,
  "stopped_early": true,
  "sim_seconds": 17982.95,
  "wall_seconds": 998.7747,
  "speedup": 18.005,
  "frame_delta_s": {"count": 360075, "mean": 0.0499, "min": 0.02, "p50": 0.05, "p90": 0.05, "p99": 0.05, "max": 0.05},
  "robot_step_m": {"count": 360075, "mean": 0.0027, "min": 0, "p50": 0, "p90": 0.0075, "p99": 0.03, "max": 0.03},
  "people_step_m": {"count": 360075, "mean": 0.0431, "min": 0, "p50": 0.04, "p90": 0.05, "p99": 0.05, "max": 22.354},
  "frames_over_005m": 0,
  "frames_over_005m_ratio": 0,
  "people_frames_over_005m": 65926,
  "people_frames_over_005m_ratio": 0.1831,
  "chair_pulls": 221,
  "chair_pulls_by_reason": {"座る": 23, "食事中": 53, "ドリンクバー": 52, "戻って座る": 42, "トイレ": 7, "会計": 23, "退店": 21}
}

trips.csv

05_s0_0655_stopped_trips.csv12,359字・48行・text
condition_id,aisle_width_m,crowd,robots,seed,robot_id,trip_id,table_id,distance_m,total_s,stopped_s,n_stops,stop_durations_s,stuck,timeout,wait_aisle_s,max_decel_mps2,min_clearance_m,met_robot,table_ids,dishes,dish_ready_s,dish_arrived_s,undelivered,speed_mps,stuck_count,stuck_wait_s,via_narrow,stops_in_narrow,stops_out_narrow,stopped_in_narrow_s,stopped_out_narrow_s
fam_p1_s4_r2_a42,1.2,normal,2,0,2,1,2,13.4925,600.027,576.8827,1,0.95,0,1,575.9329,1,0.1109,0,2,0,,,0,0.583,0,0,0,0,2,0,576.8829
fam_p1_s4_r2_a42,1.2,normal,2,0,1,2,3,21.0776,600.027,563.0361,4,1.2;2.35;21.15;51.0495,1,1,0,1,-0.3602,1,3,0,,,0,0.5698,5,187.1068,0,0,9,0,375.9963
fam_p1_s4_r2_a42,1.2,normal,2,0,2,3,35,3.595,600.027,593.4286,1,4.5,1,1,0,1,0.1863,1,35;2;4,1,858.7338,-1,1,0.5448,4,348.7884,0,0,5,0,244.6975
fam_p1_s4_r2_a42,1.2,normal,2,0,1,4,34,3.565,600.027,593.4786,1,1.15,1,1,0,1,-0.1276,1,34;36;6,1,833.9399,1519.577,0,0.5444,6,232.1096,0,0,7,0,361.4462
fam_p1_s4_r2_a42,1.2,normal,2,0,1,5,36,21.0651,600.027,563.186,2,2.7;4.65,0,1,555.8378,1,-0.0485,1,36;37;6,3,1413.423;1323.886;1357.769,2145.337;-1;-1,2,0.5718,0,0,0,0,3,0,563.1878
fam_p1_s4_r2_a42,1.2,normal,2,0,2,6,9,27.2127,600.027,552.6386,3,0.95;12.25;0.95,1,1,0,1,-0.2257,1,9;2;4,3,1274.638;858.7338;1251.415,2145.087;-1;-1,2,0.5742,4,298.3507,0,0,7,0,254.3475
fam_p1_s4_r2_a42,1.2,normal,2,0,2,7,41,35.7777,112.0022,50.3995,4,0.95;0.45;0.1;48.8995,0,0,0,1,0.152,0,41;9;11,3,2102.145;858.7338;1251.415,2820.997;2820.997;2820.997,0,0.5808,0,0,0,0,4,0,50.3995
別のタブで開く保存

stops.csv

06_s0_0655_stopped_stops.csv163,869字・1,223行・text
condition_id,seed,robot_id,trip_id,t_s,x,z,aisle,in_narrow,cause,cause_detail,path_blocked,duration_s,resolved,clearance_left_cm,clearance_right_cm,min_gap_cm,blocked_s,no_path_s,yield_s,clear_wait_s,replans
fam_p1_s4_r2_a42,0,2,1,918.95,15.3,5.15,,0,分からない,,0,0.95,自分で動き出した,275,274.9999,274.9999,0,0,0,0.95,0
fam_p1_s4_r2_a42,0,2,1,943,1.8944,3.8068,,0,通路の順番待ち,先に入っている台:ServingRobot01,0,575.9329,入口で待った,275,275,275,0,0,575.9329,0,0
fam_p1_s4_r2_a42,0,1,2,894.15,15.3,5.95,,0,もう1台のロボット,ServingRobot02,0,1.2,自分で動き出した,275,274.9999,274.9999,0.25,0,0,0.95,0
fam_p1_s4_r2_a42,0,1,2,922.9,1.7384,6.8515,A01,0,人が立ち止まっていた,Staff02,0,2.35,自分で動き出した,28.8591,41.1751,28.8591,1.4,0,0,0.95,0
fam_p1_s4_r2_a42,0,1,2,925.9,1.7355,6.9739,A01,0,人が立ち止まっていた,Staff02,0,21.15,経路を引き直した,28.5667,41.4675,28.5667,20.2,0,0,0.95,2
fam_p1_s4_r2_a42,0,1,2,980.85,1.7762,4.7366,A01,0,もう1台のロボット,ServingRobot02,0,60.0494,動けなくなった,49.8667,188.1732,49.8667,60.0494,0,0,0,5
fam_p1_s4_r2_a42,0,1,2,1071.55,1.7762,4.7366,A01,0,もう1台のロボット,ServingRobot02,0,60.0494,動けなくなった,49.8667,188.1731,49.8667,60.0494,0,0,0,5
別のタブで開く保存

give_ups.csv

07_s0_0655_stopped_give_ups.csv32,743字・419行・text
condition_id,seed,t_s,who,job,table_id,to_x,to_z,x,z,aisle,waited_s,action
fam_p1_s4_r2_a42,0,163.0753,スタッフ,案内,3,0.9,2.1,17.2864,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,223.129,スタッフ,案内,3,0.9,2.1,18.0901,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,546.0102,スタッフ,案内,36,0.9,2.1,17.2864,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,606.0455,スタッフ,案内,36,0.9,2.1,18.0901,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,645.186,スタッフ,案内,5,0.9,2.1,17.2864,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,705.2213,スタッフ,案内,5,0.9,2.1,18.0901,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,740.8626,スタッフ,案内,6,0.9,2.1,17.2887,6.25,,60.0494,あきらめた
別のタブで開く保存

groups.csv

08_s0_0655_stopped_groups.csv10,110字・98行・text
condition_id,seed,group_id,size,table_id,table_seats,arrive_s,guide_start_s,seated_s,eat_end_s,pay_start_s,pay_s,left_s,waited_min,warmup,state
fam_p1_s4_r2_a42,0,1,4,0,0,56.4194,56.4194,119.5727,2680.53,2784.861,-1,3385.497,1.0526,0,Done
fam_p1_s4_r2_a42,0,2,3,2,4,95.8213,95.8213,161.6753,4547.351,4547.371,4796.294,4796.294,1.0976,0,Done
fam_p1_s4_r2_a42,0,3,4,0,0,103.0217,103.0217,289.1729,4202.372,4202.374,4352.286,4352.286,3.1025,0,Done
fam_p1_s4_r2_a42,0,4,2,34,2,334.1619,334.1619,408.2938,4638.07,4638.115,4886.042,4886.042,1.2355,0,Done
fam_p1_s4_r2_a42,0,5,1,35,2,424.5898,424.5898,499.5715,4329.194,4329.226,4486.061,4486.061,1.2497,0,Done
fam_p1_s4_r2_a42,0,6,4,4,4,434.8373,434.8373,504.8702,4733.681,4733.69,4975.791,4975.791,1.1672,0,Done
fam_p1_s4_r2_a42,0,7,1,0,0,485.9749,485.9749,681.927,4757.007,4757.048,5065.539,5065.539,3.2659,0,Done
別のタブで開く保存

dishes.csv

09_s0_0655_stopped_dishes.csv6,397字・101行・text
condition_id,seed,t_s,dish_id,table_id,robot_id,fragile,ready_s,waited_s,requeued_so_far,why
fam_p1_s4_r2_a42,0,1519.327,6,2,2,0,858.7338,660.5928,1,打ち切り
fam_p1_s4_r2_a42,0,2145.087,6,2,2,0,858.7338,1286.353,2,打ち切り
fam_p1_s4_r2_a42,0,2145.087,11,4,2,0,1251.415,893.6719,1,打ち切り
fam_p1_s4_r2_a42,0,2145.337,13,36,1,0,1323.886,821.4514,1,打ち切り
fam_p1_s4_r2_a42,0,2145.337,14,6,1,0,1357.769,787.5684,1,打ち切り
fam_p1_s4_r2_a42,0,2796.172,14,6,1,0,1357.769,1438.403,2,打ち切り
fam_p1_s4_r2_a42,0,4072.768,54,19,1,0,2832.258,1240.51,1,打ち切り
別のタブで開く保存

contacts.csv

10_s0_0655_stopped_contacts.csv10,532字・155行・text
condition_id,seed,t_s,x,z,aisle,place,who,careless,robot_id,gap_cm
fam_p1_s4_r2_a42,0,0.02,15.2028,5.3034,,,スタッフ:Staff01,0,2,-26.8368
fam_p1_s4_r2_a42,0,0.02,15.3505,5.5063,,,スタッフ:Staff02,0,2,-9.0114
fam_p1_s4_r2_a42,0,0.02,15.422,6.25,,,スタッフ:Staff03,1,1,-12.6161
fam_p1_s4_r2_a42,0,0.02,15.5939,5.7531,,,スタッフ:Staff04,0,1,-9.6257
fam_p1_s4_r2_a42,0,554.6081,14.7581,5.9297,,,スタッフ:Staff01,0,1,9.2258
fam_p1_s4_r2_a42,0,570.8541,14.7592,5.9327,,,スタッフ:Staff02,0,1,9.1126
fam_p1_s4_r2_a42,0,593.0987,14.823,5.7097,,,スタッフ:Staff01,0,1,8.4107
別のタブで開く保存

3回目(cs:122):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0913

summary.json

11_s0_0913_summary.json5,444字・26行・json
{
  "run_name": "family_v0",
  "written_at": "2026-10-23 09:27:34",
  "note": "speed_mps = distance_m / (total_s - stopped_s)。stopped_s には、動けなくなった60秒と、スタッフを待った秒数(stuck_wait_s)、通路の入口で待った秒数も入る。pause_s は stop_durations_s(自分で動き出した止まりだけ)の分布。site_metrics はサイトの meta.metrics と同じ名前・同じ定義。入店待ちの分け方もサイトの試算と同じで、blocked_wait は片付け待ちの卓の数だけ待っている列の前から順に足した分、full_wait は seat_wait − blocked_wait、staff_wait は blocked_wait + guide_wait。pauses と rescues は、サイト側が unity_measures の仮の値から出した数なので出どころが違う。",
  "sim_like": {"dish_wait_mean": 5.8791, "dish_wait_p90": 14.2694, "cold_share": 0.6311, "seat_wait_mean": 10.1117, "turn_mean": 5.2596, "robot_share": 0.32, "robot_dishes": 72, "staff_dishes": 153, "requeued_dishes": 15, "groups": 91, "people_jams": 2961, "robot_blocked_jams": 2092, "robot_blocked_jam_share": 0.7065, "chair_pulls": 176, "robot_contacts": 168, "robot_yield_waits": 495, "robot_yield_wait_s": 3697.181, "robot_yield_detours": 5, "register_crowd_max": 9, "register_crowd_mean": 2.0796, "register_pay_count": 68, "register_pay_not_at_back": 0, "register_pay_off_spot": 14, "register_pay_offset_mean_m": 0.0498, "register_pay_offset_max_m": 0.2494, "register_back_intruders": 0, "register_back_intruder_s": 0, "drink_bar_queued": 37, "drink_bar_gave_up": 10, "drink_bar_wait_mean": 0.5586, "drink_bar_wait_p90": 0.9965, "gave_up": 209, "warped": 105, "table_freed": 63, "people_jam_total_s": 4957.568, "walkers_mean": 10.9853, "measured_minutes": 221.5047},
  "site_metrics": {"entry_wait_mean": 13.5686, "full_wait_mean": 6.7449, "staff_wait_mean": 5.5502, "blocked_wait_mean": 3.3668, "guide_wait_mean": 2.1834, "seat_wait_mean": 10.1117, "dish_wait_mean": 5.8791, "dish_wait_p90": 14.2694, "cold_share": 0.6311, "turn_mean": 5.2596, "walk_km_per_staff": 3.0323, "staff_util": 0.822, "robot_util": 0.749, "robot_share": 0.32, "rescues": 134, "pauses": 174, "groups": 91},
  "site_run": {"site_run": true, "condition_id": "fam_p1_s4_r2_a42", "arrivals_minutes": 120, "total_minutes": 221.5047, "everyone_left": true, "rescues_done": 126, "rescue_wait_s": 4929.198, "gave_up": 209, "warped": 105, "table_freed": 63},
  "site_result": {"dish_wait_mean": 0.4568, "dish_wait_p90": 0.8167, "cold_share": 0, "seat_wait_mean": 0.6083, "turn_mean": 4.3928, "walk_km_per_staff": 1.872, "staff_util": 0.6436, "robot_util": 0.4764, "robot_share": 0.7257, "robot_bus_share": 0, "collects": 0, "rescues": 1.475, "pauses": 41.625, "fragile_robot": 31.9, "groups": 82.1, "entry_wait_mean": 1.0194, "blocked_wait_mean": 0.5116, "guide_wait_mean": 0.2337, "staff_wait_mean": 0.7453, "full_wait_mean": 0.0967},
別のタブで開く保存

run_info.json

{
  "run_label": "site_v5",
  "written_at": "2026-10-23 09:27:34",
  "condition_id": "fam_p1_s4_r2_a42",
  "store_kind": "StoreLayout_p1_efficient_corner",
  "time_mode": "FixedStep",
  "time_scale": 1,
  "capture_delta_time": 0.05,
  "aisle_width_m": 1.2,
  "delivery_offset_m": 0,
  "delivery_offset_used_m": 0,
  "crowd": "normal",
  "robots": 2,
  "seed": 0,
  "trips_requested": 0,
  "trips_done": 41,
  "stopped_early": false,
  "sim_seconds": 13290.29,
  "wall_seconds": 836.9855,
  "speedup": 15.8788,
  "frame_delta_s": {"count": 266471, "mean": 0.0499, "min": 0.02, "p50": 0.05, "p90": 0.05, "p99": 0.05, "max": 0.05},
  "robot_step_m": {"count": 266471, "mean": 0.0036, "min": 0, "p50": 0, "p90": 0.03, "p99": 0.03, "max": 0.03},
  "people_step_m": {"count": 266471, "mean": 0.0561, "min": 0, "p50": 0.0456, "p90": 0.05, "p99": 0.05, "max": 21.6723},
  "frames_over_005m": 0,
  "frames_over_005m_ratio": 0,
  "people_frames_over_005m": 65682,
  "people_frames_over_005m_ratio": 0.2465,
  "chair_pulls": 176,
  "chair_pulls_by_reason": {"座る": 18, "食事中": 43, "ドリンクバー": 44, "戻って座る": 33, "会計": 16, "退店": 16, "トイレ": 6}
}

trips.csv

12_s0_0913_trips.csv7,769字・42行・text
condition_id,aisle_width_m,crowd,robots,seed,robot_id,trip_id,table_id,distance_m,total_s,stopped_s,n_stops,stop_durations_s,stuck,timeout,wait_aisle_s,max_decel_mps2,min_clearance_m,met_robot,table_ids,dishes,dish_ready_s,dish_arrived_s,undelivered,speed_mps,stuck_count,stuck_wait_s,via_narrow,stops_in_narrow,stops_out_narrow,stopped_in_narrow_s,stopped_out_narrow_s
fam_p1_s4_r2_a42,1.2,normal,2,0,2,1,2,13.4925,600.027,576.8827,1,0.95,0,1,575.9329,1,0.0041,0,2,0,,,0,0.583,0,0,0,0,2,0,576.8829
fam_p1_s4_r2_a42,1.2,normal,2,0,1,2,3,20.9251,600.027,564.2858,2,1.2;9.7,1,1,0,1,-0.3976,1,3,0,,,0,0.5855,6,193.1572,0,0,8,0,371.1963
fam_p1_s4_r2_a42,1.2,normal,2,0,2,3,36,18.9375,600.027,566.9851,2,4.5;0.85,0,1,561.6364,1,0.0019,1,36;2;6,1,858.7338,-1,1,0.5731,0,0,0,0,3,0,566.9864
fam_p1_s4_r2_a42,1.2,normal,2,0,1,4,34,28.1702,600.027,550.2892,5,1;1.2;1.2;1.4;2,1,1,0,1,-0.0691,1,34;5;7,1,834.0399,1519.677,0,0.5664,6,183.2566,0,0,11,0,367.0962
fam_p1_s4_r2_a42,1.2,normal,2,0,1,5,37,14.2675,26.8499,1.65,2,0.95;0.7,0,0,0,1,0.349,0,37;37;39,3,1413.273;1440.55;1473.432,2195.586;2195.586;2195.586,0,0.5662,0,0,0,0,2,0,1.65
fam_p1_s4_r2_a42,1.2,normal,2,0,2,6,38,44.0998,219.2588,141.9041,6,0.95;0.5;2.3;10.65;26.8999;1.05,1,0,0,1,0.0374,0,38;2;6,3,1323.886;858.7338;1357.519,2145.087;-1;-1,2,0.5701,1,39.4997,0,0,7,0,102.3993
fam_p1_s4_r2_a42,1.2,normal,2,0,1,7,38,37.5601,132.1035,65.6494,6,0.95;0.75;1.8;58.0494;1.1;3,0,0,0,1,0.1503,1,38;40;10,3,2139.932;2187.178;2027.222,2297.686;2297.686;2297.686,0,0.5652,0,0,0,0,6,0,65.6494
別のタブで開く保存

stops.csv

13_s0_0913_stops.csv52,722字・313行・text
condition_id,seed,robot_id,trip_id,t_s,x,z,aisle,in_narrow,cause,cause_detail,path_blocked,duration_s,resolved,clearance_left_cm,clearance_right_cm,min_gap_cm,blocked_s,no_path_s,yield_s,clear_wait_s,replans,solve_from,solve_to,solve_status,solve_corners,off_mesh_m
fam_p1_s4_r2_a42,0,2,1,918.95,15.3,5.15,,0,分からない,,0,0.95,自分で動き出した,275,274.9999,274.9999,0,0,0,0.95,0,15.3;5.15,1.8;3.8,PathComplete,3,0.025
fam_p1_s4_r2_a42,0,2,1,943,1.8944,3.8068,,0,通路の順番待ち,先に入っている台:ServingRobot01,0,575.9329,入口で待った,275,275,275,0,0,575.9329,0,0,1.894;3.807,1.8;3.8,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,2,894.25,15.3,5.95,,0,もう1台のロボット,ServingRobot02,0,1.2,自分で動き出した,275,274.9999,274.9999,0.25,0,0,0.95,0,15.3;5.95,12.513;4.338,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,2,956.2,1.9553,4.7325,A01,0,もう1台のロボット,ServingRobot02,0,60.0494,動けなくなった,24.591,193.0749,24.591,60.0494,0,0,0,5,1.955;4.733,2.163;4.312,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,2,1044.55,1.9553,4.7325,A01,0,もう1台のロボット,ServingRobot02,0,60.0494,動けなくなった,24.591,193.0749,24.591,60.0494,0,0,0,5,1.955;4.733,2.163;4.312,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,2,1132.9,1.9553,4.7325,A01,0,もう1台のロボット,ServingRobot02,0,60.0494,動けなくなった,24.591,193.0749,24.591,60.0494,0,0,0,5,1.955;4.733,2.163;4.312,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,2,1233.75,1.9553,4.7325,A01,0,人が立ち止まっていた,Staff02,0,60.0494,動けなくなった,24.591,193.0749,24.591,60.0494,0,0,0,5,1.955;4.733,2.163;4.312,PathComplete,2,0.025
別のタブで開く保存

give_ups.csv

14_s0_0913_give_ups.csv29,446字・378行・text
condition_id,seed,t_s,who,job,table_id,to_x,to_z,x,z,aisle,waited_s,action
fam_p1_s4_r2_a42,0,163.0753,スタッフ,案内,3,0.9,2.1,17.2864,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,223.129,スタッフ,案内,3,0.9,2.1,18.0901,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,546.0102,スタッフ,案内,36,0.9,2.1,17.2864,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,606.0455,スタッフ,案内,36,0.9,2.1,18.0901,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,645.186,スタッフ,案内,5,0.9,2.1,17.2864,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,705.2213,スタッフ,案内,5,0.9,2.1,18.0901,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,740.8626,スタッフ,案内,6,0.9,2.1,17.2887,6.25,,60.0494,あきらめた
別のタブで開く保存

groups.csv

15_s0_0913_groups.csv9,509字・92行・text
condition_id,seed,group_id,size,table_id,table_seats,arrive_s,guide_start_s,seated_s,eat_end_s,pay_start_s,pay_s,left_s,waited_min,warmup,state
fam_p1_s4_r2_a42,0,1,4,0,0,56.4194,56.4194,119.6227,2680.48,2871.346,3135.604,3135.604,1.0534,0,Done
fam_p1_s4_r2_a42,0,2,3,0,0,95.8213,95.8213,161.6753,4191.449,4197.841,4417.331,4417.331,1.0976,0,Done
fam_p1_s4_r2_a42,0,3,4,3,4,103.0217,103.0217,289.2729,3544.787,3544.803,3751.104,3751.104,3.1042,0,Done
fam_p1_s4_r2_a42,0,4,2,0,0,334.1619,334.1619,408.1439,4688.319,4688.368,4988.391,4988.391,1.233,0,Done
fam_p1_s4_r2_a42,0,5,1,35,2,424.5898,424.5898,499.3216,3300.579,3300.615,3558.266,3558.266,1.2455,0,Done
fam_p1_s4_r2_a42,0,6,4,0,0,434.8373,434.8373,504.8702,3021.482,3101.37,3425.987,3425.987,1.1672,0,Done
fam_p1_s4_r2_a42,0,7,1,0,0,485.9749,485.9749,681.927,4134.755,4616.151,4880.215,4880.215,3.2659,0,Done
別のタブで開く保存

dishes.csv

condition_id,seed,t_s,dish_id,table_id,robot_id,fragile,ready_s,waited_s,requeued_so_far,why
fam_p1_s4_r2_a42,0,1519.327,6,2,2,0,858.7338,660.5928,1,打ち切り
fam_p1_s4_r2_a42,0,2145.087,6,2,2,0,858.7338,1286.353,2,打ち切り
fam_p1_s4_r2_a42,0,2145.087,14,6,2,0,1357.519,787.5684,1,打ち切り
fam_p1_s4_r2_a42,0,3356.119,44,15,2,0,2671.901,684.2175,1,打ち切り
fam_p1_s4_r2_a42,0,3356.119,46,8,2,0,2689.819,666.3,1,打ち切り
fam_p1_s4_r2_a42,0,5263.761,95,41,1,1,4513.553,750.208,1,打ち切り
fam_p1_s4_r2_a42,0,5353.808,99,4,2,0,4627.506,726.3018,1,打ち切り
fam_p1_s4_r2_a42,0,6599.224,121,6,2,0,5948.924,650.2998,1,打ち切り
fam_p1_s4_r2_a42,0,7933.292,162,11,2,0,7335.537,597.7559,1,打ち切り
fam_p1_s4_r2_a42,0,9077.605,194,1,1,0,8479.85,597.7559,1,打ち切り
fam_p1_s4_r2_a42,0,9725.266,194,1,1,0,8479.85,1245.416,2,打ち切り
fam_p1_s4_r2_a42,0,10037.79,213,3,2,0,9440.034,597.7559,1,打ち切り
fam_p1_s4_r2_a42,0,10323.02,217,12,1,0,9694.486,628.5352,1,打ち切り
fam_p1_s4_r2_a42,0,10323.02,194,1,1,0,8479.85,1843.172,3,打ち切り
fam_p1_s4_r2_a42,0,10660.5,213,3,2,0,9440.034,1220.464,2,打ち切り

contacts.csv

16_s0_0913_contacts.csv11,595字・169行・text
condition_id,seed,t_s,x,z,aisle,place,who,careless,robot_id,gap_cm
fam_p1_s4_r2_a42,0,0.02,15.2028,5.3034,,,スタッフ:Staff01,0,2,-26.8368
fam_p1_s4_r2_a42,0,0.02,15.3505,5.5063,,,スタッフ:Staff02,0,2,-9.0114
fam_p1_s4_r2_a42,0,0.02,15.422,6.25,,,スタッフ:Staff03,1,1,-12.6161
fam_p1_s4_r2_a42,0,0.02,15.5939,5.7531,,,スタッフ:Staff04,0,1,-9.6257
fam_p1_s4_r2_a42,0,554.6581,14.7581,5.9297,,,スタッフ:Staff01,0,1,9.2258
fam_p1_s4_r2_a42,0,570.8541,14.7592,5.9327,,,スタッフ:Staff02,0,1,9.1126
fam_p1_s4_r2_a42,0,592.7988,14.8152,5.7049,,,スタッフ:Staff01,0,1,9.3211
別のタブで開く保存

4回目(cs:123):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1006

summary.json

17_s0_1006_summary.json5,444字・26行・json
{
  "run_name": "family_v0",
  "written_at": "2026-10-23 10:22:14",
  "note": "speed_mps = distance_m / (total_s - stopped_s)。stopped_s には、動けなくなった60秒と、スタッフを待った秒数(stuck_wait_s)、通路の入口で待った秒数も入る。pause_s は stop_durations_s(自分で動き出した止まりだけ)の分布。site_metrics はサイトの meta.metrics と同じ名前・同じ定義。入店待ちの分け方もサイトの試算と同じで、blocked_wait は片付け待ちの卓の数だけ待っている列の前から順に足した分、full_wait は seat_wait − blocked_wait、staff_wait は blocked_wait + guide_wait。pauses と rescues は、サイト側が unity_measures の仮の値から出した数なので出どころが違う。",
  "sim_like": {"dish_wait_mean": 5.5955, "dish_wait_p90": 13.3312, "cold_share": 0.5448, "seat_wait_mean": 15.3202, "turn_mean": 5.4486, "robot_share": 0.2687, "robot_dishes": 72, "staff_dishes": 196, "requeued_dishes": 22, "groups": 104, "people_jams": 2502, "robot_blocked_jams": 2451, "robot_blocked_jam_share": 0.9796, "chair_pulls": 202, "robot_contacts": 222, "robot_yield_waits": 141, "robot_yield_wait_s": 1067.016, "robot_yield_detours": 5, "register_crowd_max": 10, "register_crowd_mean": 2.5346, "register_pay_count": 80, "register_pay_not_at_back": 1, "register_pay_off_spot": 29, "register_pay_offset_mean_m": 0.1475, "register_pay_offset_max_m": 4.9428, "register_back_intruders": 0, "register_back_intruder_s": 0, "drink_bar_queued": 41, "drink_bar_gave_up": 9, "drink_bar_wait_mean": 0.6425, "drink_bar_wait_p90": 0.9738, "gave_up": 169, "warped": 99, "table_freed": 71, "people_jam_total_s": 4047.516, "walkers_mean": 11.2642, "measured_minutes": 232.5199},
  "site_metrics": {"entry_wait_mean": 18.4536, "full_wait_mean": 11.6148, "staff_wait_mean": 5.5727, "blocked_wait_mean": 3.7054, "guide_wait_mean": 1.8673, "seat_wait_mean": 15.3202, "dish_wait_mean": 5.5955, "dish_wait_p90": 13.3312, "cold_share": 0.5448, "turn_mean": 5.4486, "walk_km_per_staff": 3.5582, "staff_util": 0.8386, "robot_util": 0.7232, "robot_share": 0.2687, "rescues": 127, "pauses": 644, "groups": 104},
  "site_run": {"site_run": true, "condition_id": "fam_p1_s4_r2_a42", "arrivals_minutes": 120, "total_minutes": 232.5199, "everyone_left": true, "rescues_done": 116, "rescue_wait_s": 3851.938, "gave_up": 169, "warped": 99, "table_freed": 71},
  "site_result": {"dish_wait_mean": 0.4568, "dish_wait_p90": 0.8167, "cold_share": 0, "seat_wait_mean": 0.6083, "turn_mean": 4.3928, "walk_km_per_staff": 1.872, "staff_util": 0.6436, "robot_util": 0.4764, "robot_share": 0.7257, "robot_bus_share": 0, "collects": 0, "rescues": 1.475, "pauses": 41.625, "fragile_robot": 31.9, "groups": 82.1, "entry_wait_mean": 1.0194, "blocked_wait_mean": 0.5116, "guide_wait_mean": 0.2337, "staff_wait_mean": 0.7453, "full_wait_mean": 0.0967},
別のタブで開く保存

run_info.json

{
  "run_label": "site_v5",
  "written_at": "2026-10-23 10:22:14",
  "condition_id": "fam_p1_s4_r2_a42",
  "store_kind": "StoreLayout_p1_efficient_corner",
  "time_mode": "FixedStep",
  "time_scale": 1,
  "capture_delta_time": 0.05,
  "aisle_width_m": 1.2,
  "delivery_offset_m": 0,
  "delivery_offset_used_m": 0,
  "crowd": "normal",
  "robots": 2,
  "seed": 0,
  "trips_requested": 0,
  "trips_done": 45,
  "stopped_early": false,
  "sim_seconds": 13951.19,
  "wall_seconds": 953.2166,
  "speedup": 14.6359,
  "frame_delta_s": {"count": 279741, "mean": 0.0499, "min": 0.02, "p50": 0.05, "p90": 0.05, "p99": 0.05, "max": 0.05},
  "robot_step_m": {"count": 279741, "mean": 0.0091, "min": 0, "p50": 0, "p90": 0.03, "p99": 0.03, "max": 0.03},
  "people_step_m": {"count": 279741, "mean": 0.0589, "min": 0, "p50": 0.0491, "p90": 0.05, "p99": 0.05, "max": 21.3957},
  "frames_over_005m": 0,
  "frames_over_005m_ratio": 0,
  "people_frames_over_005m": 78138,
  "people_frames_over_005m_ratio": 0.2793,
  "chair_pulls": 202,
  "chair_pulls_by_reason": {"座る": 23, "食事中": 51, "ドリンクバー": 47, "戻って座る": 37, "会計": 19, "退店": 17, "トイレ": 8}
}

trips.csv

18_s0_1006_trips.csv10,522字・46行・text
condition_id,aisle_width_m,crowd,robots,seed,robot_id,trip_id,table_id,distance_m,total_s,stopped_s,n_stops,stop_durations_s,stuck,timeout,wait_aisle_s,max_decel_mps2,min_clearance_m,met_robot,table_ids,dishes,dish_ready_s,dish_arrived_s,undelivered,speed_mps,stuck_count,stuck_wait_s,via_narrow,stops_in_narrow,stops_out_narrow,stopped_in_narrow_s,stopped_out_narrow_s
fam_p1_s4_r2_a42,1.2,normal,2,0,1,1,37,11.19,20.15,0.95,1,0.95,0,0,0,0,0.7839,0,37,0,,,0,0.5828,0,0,0,0,1,0,0.95
fam_p1_s4_r2_a42,1.2,normal,2,0,2,2,34,138.7391,600.027,309.448,108,0.95;2.6;2.8;3.25;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;4;2.8;2.8;2.8;2.8;2.8;2.8;2.8;5.15;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;4.65;2.8;2.8;5.05;2.8;2.8;2.8;2.8;4.5;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.95;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.8;2.85;2.8;2.8;2.8;2.8;2.8;2.85;2.8;2.8;2.8;2.8;2.8;1.15;2.9;2.9;2.9;2.9;2.9;2.9;2.9;3.3;2.9;2.9;3.3;2.9;2.9;1.3;2.9,0,1,0,1,-0.0221,1,34,0,,,0,0.4775,0,0,0,0,108,0,309.4498
fam_p1_s4_r2_a42,1.2,normal,2,0,1,3,14,23.8501,51.1495,8.65,5,2.05;1.55;2;1.1;1.95,0,0,0,1,0.182,1,14,1,1395.856,1441.1,0,0.5612,0,0,0,0,5,0,8.65
fam_p1_s4_r2_a42,1.2,normal,2,0,2,4,17,47.3922,94.9012,12,6,0.95;1.75;0.6;4.5;0.85;0.8,0,0,2.55,1,0.0431,0,17,1,1413.273,2039.034,0,0.5717,0,0,0,0,7,0,12
fam_p1_s4_r2_a42,1.2,normal,2,0,1,5,12,31.0203,97.3013,41.1997,8,0.95;0.8;1.65;1.05;28.3999;6.5;0.8;1.05,0,0,0,1,0.0147,0,12,1,2305.894,2382.168,0,0.5529,0,0,0,0,8,0,41.1999
fam_p1_s4_r2_a42,1.2,normal,2,0,2,6,35,16.53,56.8494,23.7999,10,0.95;2.55;2.7;2.7;2.7;2.7;2.7;2.7;2.65;1.45,0,0,0,1,0.0777,1,35,1,2327.916,2447.983,0,0.5002,0,0,0,0,10,0,23.8
fam_p1_s4_r2_a42,1.2,normal,2,0,1,7,17,30.2853,600.027,548.1397,3,0.95;33.7498;53.0495,1,1,0,1,-0.0389,1,17,1,2423.709,2546.178,0,0.5837,5,160.2052,0,0,8,0,387.9961
別のタブで開く保存

stops.csv

19_s0_1006_stops.csv131,723字・775行・text
condition_id,seed,robot_id,trip_id,t_s,x,z,aisle,in_narrow,cause,cause_detail,path_blocked,duration_s,resolved,clearance_left_cm,clearance_right_cm,min_gap_cm,blocked_s,no_path_s,yield_s,clear_wait_s,replans,solve_from,solve_to,solve_status,solve_corners,off_mesh_m
fam_p1_s4_r2_a42,0,1,1,1395.7,16.9,6.05,,0,分からない,,0,0.95,自分で動き出した,275,275,275,0,0,0,0.95,0,16.9;6.05,15.3;5.95,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,2,2,1413.1,17.7,6.05,,0,分からない,,0,0.95,自分で動き出した,275,275,275,0,0,0,0.95,0,17.7;6.05,15.3;5.95,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,2,2,1453.4,15.2858,4.7996,,0,もう1台のロボット,ServingRobot01,0,2.6,自分で動き出した,273.6019,275,273.6019,1.65,0,0,0.95,0,15.286;4.8,15.238;2.188,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,2,2,1457.95,15.2908,5.2496,,0,もう1台のロボット,ServingRobot01,0,2.8,自分で動き出した,274.1009,275,274.1009,1.85,0,0,0.95,0,15.291;5.25,15.238;2.188,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,2,2,1462.85,15.284,4.8897,,0,スタッフとすれ違った,Staff03,0,3.25,自分で動き出した,275,206.7646,206.7646,2.2,0,0,1.05,0,15.284;4.89,15.238;2.188,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,2,2,1468.2,15.2891,5.2496,,0,もう1台のロボット,ServingRobot01,0,2.8,自分で動き出した,273.9482,275,273.9482,1.85,0,0,0.95,0,15.289;5.25,15.238;2.188,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,2,2,1473.7,15.2887,5.2496,,0,もう1台のロボット,ServingRobot01,0,2.8,自分で動き出した,273.9119,275,273.9119,1.85,0,0,0.95,0,15.289;5.25,15.238;2.188,PathComplete,2,0.025
別のタブで開く保存

give_ups.csv

20_s0_1006_give_ups.csv26,478字・340行・text
condition_id,seed,t_s,who,job,table_id,to_x,to_z,x,z,aisle,waited_s,action
fam_p1_s4_r2_a42,0,2421.857,客,ドリンクバー,11,5.613,8.662,8.0871,4.1395,,60,移した
fam_p1_s4_r2_a42,0,2445.48,客,ドリンクバー,16,18.8,3.9,5.613,10.513,A02,0,あきらめた
fam_p1_s4_r2_a42,0,2492.927,客,ドリンクバー,7,1.912,8.662,2.0252,5.6988,A01,60,移した
fam_p1_s4_r2_a42,0,2511.495,客,ドリンクバー,13,5.613,4.962,8.9336,4.5495,,60,移した
fam_p1_s4_r2_a42,0,2828.003,スタッフ,料理を運ぶ,21,9.312,12.038,15.026,6.25,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,2862.087,スタッフ,片付け,3,15.3,5.95,14.8758,5.8818,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,2888.663,スタッフ,料理を運ぶ,20,15.3,5.95,14.7187,5.3221,,60.0494,あきらめた
別のタブで開く保存

groups.csv

21_s0_1006_groups.csv10,875字・105行・text
condition_id,seed,group_id,size,table_id,table_seats,arrive_s,guide_start_s,seated_s,eat_end_s,pay_start_s,pay_s,left_s,waited_min,warmup,state
fam_p1_s4_r2_a42,0,1,4,0,0,56.4194,56.4194,121.0228,3331.868,3331.895,-1,3932.531,1.0767,0,Done
fam_p1_s4_r2_a42,0,2,3,0,0,95.8213,95.8213,161.8253,3029.899,3029.9,3402.164,3402.164,1.1001,0,Done
fam_p1_s4_r2_a42,0,3,4,0,0,103.0217,103.0217,181.7765,2597.4,2597.428,2708.387,2708.387,1.3126,0,Done
fam_p1_s4_r2_a42,0,4,2,34,2,334.1619,334.1619,408.1439,3646.118,3669.274,4162.082,4162.082,1.233,0,Done
fam_p1_s4_r2_a42,0,5,1,0,0,424.5898,424.5898,499.3216,2699.161,2699.178,2810.837,2810.837,1.2455,0,Done
fam_p1_s4_r2_a42,0,6,4,0,0,434.8373,434.8373,504.8702,3121.652,3174.792,-1,3775.428,1.1672,0,Done
fam_p1_s4_r2_a42,0,7,1,0,0,485.9749,485.9749,563.5059,2896.796,2896.821,3135.854,3135.854,1.2922,0,Done
別のタブで開く保存

dishes.csv

condition_id,seed,t_s,dish_id,table_id,robot_id,fragile,ready_s,waited_s,requeued_so_far,why
fam_p1_s4_r2_a42,0,3333.346,60,22,2,0,2732.66,600.686,1,打ち切り
fam_p1_s4_r2_a42,0,3830.081,73,28,1,0,3083.503,746.5784,1,打ち切り
fam_p1_s4_r2_a42,0,3830.081,72,31,1,0,3050.37,779.7107,1,打ち切り
fam_p1_s4_r2_a42,0,3830.081,71,26,1,0,3031.052,799.0295,1,打ち切り
fam_p1_s4_r2_a42,0,4717.404,100,16,2,1,4032.629,684.7751,1,打ち切り
fam_p1_s4_r2_a42,0,5299.77,106,2,1,0,4611.17,688.5996,1,打ち切り
fam_p1_s4_r2_a42,0,5299.77,104,4,1,0,4587.214,712.5557,1,打ち切り
fam_p1_s4_r2_a42,0,5530.316,113,3,2,0,4789.073,741.2432,1,打ち切り
fam_p1_s4_r2_a42,0,5530.316,112,7,2,0,4775.526,754.79,1,打ち切り
fam_p1_s4_r2_a42,0,6764.974,154,11,1,0,6126.428,638.5459,1,打ち切り
fam_p1_s4_r2_a42,0,6764.974,152,1,1,1,6044.998,719.9766,1,打ち切り
fam_p1_s4_r2_a42,0,7756.536,175,27,1,0,7117.691,638.8447,1,打ち切り
fam_p1_s4_r2_a42,0,7756.536,174,23,1,0,7111.914,644.6221,1,打ち切り
fam_p1_s4_r2_a42,0,7839.46,176,42,2,0,7179.449,660.0117,1,打ち切り
fam_p1_s4_r2_a42,0,7839.46,177,32,2,0,7180.395,659.0654,1,打ち切り
fam_p1_s4_r2_a42,0,7839.46,178,8,2,1,7212.868,626.5928,1,打ち切り
fam_p1_s4_r2_a42,0,8487.121,178,8,2,1,7212.868,1274.253,2,打ち切り
fam_p1_s4_r2_a42,0,9109.829,208,6,2,0,8260.659,849.1699,1,打ち切り
fam_p1_s4_r2_a42,0,9109.829,178,8,2,1,7212.868,1896.961,3,打ち切り
fam_p1_s4_r2_a42,0,10675.44,249,3,1,0,9927.672,747.7676,1,打ち切り
fam_p1_s4_r2_a42,0,10675.44,248,7,1,0,9914.822,760.6172,1,打ち切り
fam_p1_s4_r2_a42,0,12059.26,265,1,1,1,11461.51,597.7559,1,打ち切り

contacts.csv

22_s0_1006_contacts.csv15,273字・223行・text
condition_id,seed,t_s,x,z,aisle,place,who,careless,robot_id,gap_cm
fam_p1_s4_r2_a42,0,1444.203,14.9568,6.0365,,,スタッフ:Staff02,0,1,7.927
fam_p1_s4_r2_a42,0,1457.316,14.9148,5.9882,,,スタッフ:Staff03,0,1,8.7943
fam_p1_s4_r2_a42,0,1460.519,15.867,5.9495,,,スタッフ:Staff01,0,1,8.6109
fam_p1_s4_r2_a42,0,1470.429,15.9174,5.7799,,,スタッフ:Staff02,0,1,8.8677
fam_p1_s4_r2_a42,0,1486.094,15.8381,5.4368,,,スタッフ:Staff03,0,1,8.766
fam_p1_s4_r2_a42,0,1517.375,14.9125,5.9817,,,スタッフ:Staff02,0,1,8.6838
fam_p1_s4_r2_a42,0,1560.867,14.9146,5.9878,,,スタッフ:Staff03,0,1,8.7969
別のタブで開く保存

5回目(cs:124):20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_1135

summary.json

23_s0_1135_summary.json5,604字・27行・json
{
  "run_name": "family_v0",
  "written_at": "2026-10-23 11:49:13",
  "note": "speed_mps = distance_m / (total_s - stopped_s)。stopped_s には、動けなくなった60秒と、スタッフを待った秒数(stuck_wait_s)、通路の入口で待った秒数も入る。pause_s は stop_durations_s(自分で動き出した止まりだけ)の分布。site_metrics はサイトの meta.metrics と同じ名前・同じ定義。入店待ちの分け方もサイトの試算と同じで、blocked_wait は片付け待ちの卓の数だけ待っている列の前から順に足した分、full_wait は seat_wait − blocked_wait、staff_wait は blocked_wait + guide_wait。pauses と rescues は、サイト側が unity_measures の仮の値から出した数なので出どころが違う。",
  "sim_like": {"dish_wait_mean": 4.4696, "dish_wait_p90": 11.7826, "cold_share": 0.431, "seat_wait_mean": 4.8768, "turn_mean": 6.035, "robot_share": 0.3233, "robot_dishes": 75, "staff_dishes": 157, "requeued_dishes": 10, "groups": 92, "people_jams": 1872, "robot_blocked_jams": 1842, "robot_blocked_jam_share": 0.984, "chair_pulls": 164, "robot_contacts": 134, "robot_yield_waits": 399, "robot_yield_wait_s": 2325.193, "robot_yield_detours": 6, "register_crowd_max": 9, "register_crowd_mean": 2.2419, "register_pay_count": 77, "register_pay_not_at_back": 0, "register_pay_off_spot": 38, "register_pay_offset_mean_m": 0.1166, "register_pay_offset_max_m": 0.2808, "register_back_intruders": 0, "register_back_intruder_s": 0, "drink_bar_queued": 27, "drink_bar_gave_up": 6, "drink_bar_wait_mean": 0.7095, "drink_bar_wait_p90": 0.9965, "gave_up": 153, "warped": 85, "table_freed": 65, "people_jam_total_s": 3827.123, "walkers_mean": 10.0269, "measured_minutes": 210.0422},
  "site_metrics": {"entry_wait_mean": 7.6967, "full_wait_mean": 2.8762, "staff_wait_mean": 3.5865, "blocked_wait_mean": 2.0006, "guide_wait_mean": 1.5859, "seat_wait_mean": 4.8768, "dish_wait_mean": 4.4696, "dish_wait_p90": 11.7826, "cold_share": 0.431, "turn_mean": 6.035, "walk_km_per_staff": 2.8351, "staff_util": 0.7861, "robot_util": 0.603, "robot_share": 0.3233, "rescues": 84, "pauses": 335, "groups": 92},
  "site_run": {"site_run": true, "condition_id": "fam_p1_s4_r2_a42", "arrivals_minutes": 120, "total_minutes": 210.0422, "everyone_left": true, "rescues_done": 78, "rescue_wait_s": 3408.977, "gave_up": 153, "warped": 85, "table_freed": 65},
  "site_result": {"dish_wait_mean": 0.4568, "dish_wait_p90": 0.8167, "cold_share": 0, "seat_wait_mean": 0.6083, "turn_mean": 4.3928, "walk_km_per_staff": 1.872, "staff_util": 0.6436, "robot_util": 0.4764, "robot_share": 0.7257, "robot_bus_share": 0, "collects": 0, "rescues": 1.475, "pauses": 41.625, "fragile_robot": 31.9, "groups": 82.1, "entry_wait_mean": 1.0194, "blocked_wait_mean": 0.5116, "guide_wait_mean": 0.2337, "staff_wait_mean": 0.7453, "full_wait_mean": 0.0967},
別のタブで開く保存

run_info.json

{
  "run_label": "site_v5",
  "written_at": "2026-10-23 11:49:13",
  "condition_id": "fam_p1_s4_r2_a42",
  "store_kind": "StoreLayout_p1_efficient_corner",
  "time_mode": "FixedStep",
  "time_scale": 1,
  "capture_delta_time": 0.05,
  "aisle_width_m": 1.2,
  "delivery_offset_m": 0,
  "delivery_offset_used_m": 0,
  "crowd": "normal",
  "robots": 2,
  "seed": 0,
  "trips_requested": 0,
  "trips_done": 51,
  "stopped_early": false,
  "sim_seconds": 12602.53,
  "wall_seconds": 810.5362,
  "speedup": 15.5484,
  "frame_delta_s": {"count": 252662, "mean": 0.0499, "min": 0.02, "p50": 0.05, "p90": 0.05, "p99": 0.05, "max": 0.05},
  "robot_step_m": {"count": 252662, "mean": 0.0129, "min": 0, "p50": 0, "p90": 0.03, "p99": 0.03, "max": 0.03},
  "people_step_m": {"count": 252662, "mean": 0.0576, "min": 0, "p50": 0.0468, "p90": 0.05, "p99": 0.05, "max": 21.7909},
  "frames_over_005m": 0,
  "frames_over_005m_ratio": 0,
  "people_frames_over_005m": 62778,
  "people_frames_over_005m_ratio": 0.2485,
  "chair_pulls": 164,
  "chair_pulls_by_reason": {"座る": 18, "食事中": 38, "ドリンクバー": 32, "戻って座る": 35, "トイレ": 7, "会計": 17, "退店": 17}
}

trips.csv

24_s0_1135_trips.csv9,470字・52行・text
condition_id,aisle_width_m,crowd,robots,seed,robot_id,trip_id,table_id,distance_m,total_s,stopped_s,n_stops,stop_durations_s,stuck,timeout,wait_aisle_s,max_decel_mps2,min_clearance_m,met_robot,table_ids,dishes,dish_ready_s,dish_arrived_s,undelivered,speed_mps,stuck_count,stuck_wait_s,via_narrow,stops_in_narrow,stops_out_narrow,stopped_in_narrow_s,stopped_out_narrow_s
fam_p1_s4_r2_a42,1.2,normal,2,0,1,1,37,12.51,22.35,0.95,1,0.95,0,0,0,0,0.7839,0,37,0,,,0,0.5846,0,0,0,0,1,0,0.95
fam_p1_s4_r2_a42,1.2,normal,2,0,2,2,34,11.1,20,0.95,1,0.95,0,0,0,0,0.3,0,34,0,,,0,0.5827,0,0,0,0,1,0,0.95
fam_p1_s4_r2_a42,1.2,normal,2,0,1,3,41,21.2101,37.8497,1.4,2,0.95;0.45,0,0,0,1,0.7898,0,41,1,1395.906,1443.353,0,0.5819,0,0,0,0,2,0,1.4
fam_p1_s4_r2_a42,1.2,normal,2,0,1,4,16,13.7375,600.027,572.5338,10,0.95;1.55;12;2.1;0.8;53.9495;1.85;5.2;1.25;4.65,1,1,10.15,1,0.0337,1,16,1,1845.545,1908.506,0,0.4997,5,177.9063,0,0,16,0,394.6964
fam_p1_s4_r2_a42,1.2,normal,2,0,2,5,14,33.6152,600.027,537.6423,12,0.95;0.45;1.15;6.45;3.15;4.2;0.9;0.95;33.3498;1.85;1.15;37.4997,1,1,0,1,-0.0216,1,14,1,1413.273,1458.367,0,0.5388,4,205.4579,0,0,16,0,332.247
fam_p1_s4_r2_a42,1.2,normal,2,0,2,6,24,21.1951,58.0494,20.5,3,0.95;2.35;1.35,0,0,15.85,1,0.1769,1,24,1,2388.575,3014.335,0,0.5645,0,0,0,0,4,0,20.5
fam_p1_s4_r2_a42,1.2,normal,2,0,1,7,23,33.2853,600.027,542.0412,3,0.95;26.0999;32.7998,1,1,0,1,-0.0249,1,23;25;16,1,2369.306,-1,1,0.574,5,182.0065,0,0,8,0,360.0965
別のタブで開く保存

stops.csv

25_s0_1135_stops.csv70,102字・422行・text
condition_id,seed,robot_id,trip_id,t_s,x,z,aisle,in_narrow,cause,cause_detail,path_blocked,duration_s,resolved,clearance_left_cm,clearance_right_cm,min_gap_cm,blocked_s,no_path_s,yield_s,clear_wait_s,replans,solve_from,solve_to,solve_status,solve_corners,off_mesh_m
fam_p1_s4_r2_a42,0,1,1,1395.75,16.9,6.05,,0,分からない,,0,0.95,自分で動き出した,275,275,275,0,0,0,0.95,0,16.9;6.05,15.3;5.95,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,2,2,1413.1,17.7,6.05,,0,分からない,,0,0.95,自分で動き出した,275,275,275,0,0,0,0.95,0,17.7;6.05,15.3;5.95,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,3,1844.95,16.8574,5.8332,,0,分からない,,0,0.95,自分で動き出した,275,275,275,0,0,0,0.95,0,16.857;5.833,15.3;5.95,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,3,1890.25,21.8423,2.2065,,0,椅子・荷物・ベビーカー,Table40/Chair,0,0.45,自分で動き出した,85.6728,90.6755,85.6728,0,0,0,0.45,0,22.232;2.198,16.738;2.312,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,4,2368.2,16.8575,5.8333,,0,分からない,,0,0.95,自分で動き出した,275,275,275,0,0,0,0.95,0,16.857;5.833,15.3;5.95,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,4,2371.7,15.6608,5.923,,0,スタッフとすれ違った,Staff04,0,1.55,自分で動き出した,275,32.8648,32.8648,0.6,0,0,0.95,0,16.857;5.833,15.3;5.95,PathComplete,2,0.025
fam_p1_s4_r2_a42,0,1,4,2373.3,15.6583,5.9232,,0,スタッフとすれ違った,Staff01,0,60.0494,動けなくなった,275,32.8461,32.8461,60.0494,0,0,0,5,15.658;5.923,15.3;5.95,PathComplete,2,0.025
別のタブで開く保存

give_ups.csv

26_s0_1135_give_ups.csv23,771字・304行・text
condition_id,seed,t_s,who,job,table_id,to_x,to_z,x,z,aisle,waited_s,action
fam_p1_s4_r2_a42,0,1764.866,客,ドリンクバー,4,1.912,10.312,2.0148,8.1237,A01,60,移した
fam_p1_s4_r2_a42,0,2456.841,スタッフ,料理を運ぶ,15,15.3,5.95,14.9542,5.7019,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,2468.152,スタッフ,料理を運ぶ,2,15.3,5.95,14.9679,6.1871,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,2517,スタッフ,料理を運ぶ,12,15.3,5.95,14.9782,6.2104,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,2538.721,スタッフ,料理を運ぶ,17,15.3,5.95,14.9213,5.9445,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,2587.769,スタッフ,料理を運ぶ,2,15.3,5.95,14.9782,6.2104,,60.0494,あきらめた
fam_p1_s4_r2_a42,0,2612.143,スタッフ,料理を運ぶ,12,15.3,5.95,14.9313,5.7953,,60.0494,あきらめた
別のタブで開く保存

groups.csv

27_s0_1135_groups.csv9,608字・93行・text
condition_id,seed,group_id,size,table_id,table_seats,arrive_s,guide_start_s,seated_s,eat_end_s,pay_start_s,pay_s,left_s,waited_min,warmup,state
fam_p1_s4_r2_a42,0,1,4,0,0,56.4194,56.4194,121.0228,3331.868,3331.895,3752.355,3752.355,1.0767,0,Done
fam_p1_s4_r2_a42,0,2,3,0,0,95.8213,95.8213,161.8253,3029.899,3029.9,3188.855,3188.855,1.1001,0,Done
fam_p1_s4_r2_a42,0,3,4,0,0,103.0217,103.0217,181.7765,2597.35,2597.378,2715.243,2715.243,1.3126,0,Done
fam_p1_s4_r2_a42,0,4,2,0,0,334.1619,334.1619,408.1439,3153.616,3164.532,3320.984,3320.984,1.233,0,Done
fam_p1_s4_r2_a42,0,5,1,35,2,424.5898,424.5898,499.3216,2699.161,2699.178,2827.353,2827.353,1.2455,0,Done
fam_p1_s4_r2_a42,0,6,4,0,0,434.8373,434.8373,504.8702,3121.652,3179.346,3411.172,3411.172,1.1672,0,Done
fam_p1_s4_r2_a42,0,7,1,0,0,485.9749,485.9749,563.5059,2896.796,2896.821,3098.667,3098.667,1.2922,0,Done
別のタブで開く保存

dishes.csv

condition_id,seed,t_s,dish_id,table_id,robot_id,fragile,ready_s,waited_s,requeued_so_far,why
fam_p1_s4_r2_a42,0,2969.992,50,16,1,0,2369.306,600.686,1,打ち切り
fam_p1_s4_r2_a42,0,3731.385,71,39,2,1,3102.621,628.7634,1,打ち切り
fam_p1_s4_r2_a42,0,5239.556,103,6,1,0,4636.969,602.5869,1,打ち切り
fam_p1_s4_r2_a42,0,5283.534,104,4,2,0,4669.043,614.4902,1,打ち切り
fam_p1_s4_r2_a42,0,5906.242,113,1,2,0,5065.887,840.3545,1,打ち切り
fam_p1_s4_r2_a42,0,5906.242,104,4,2,0,4669.043,1237.198,2,打ち切り
fam_p1_s4_r2_a42,0,8749.044,192,23,2,0,8045.602,703.4419,1,打ち切り
fam_p1_s4_r2_a42,0,8749.044,193,20,2,0,8051.828,697.2163,1,打ち切り
fam_p1_s4_r2_a42,0,8749.044,194,26,2,0,8081.412,667.6323,1,打ち切り
fam_p1_s4_r2_a42,0,8867.43,196,7,1,1,8148.698,718.7319,1,打ち切り

contacts.csv

28_s0_1135_contacts.csv9,288字・135行・text
condition_id,seed,t_s,x,z,aisle,place,who,careless,robot_id,gap_cm
fam_p1_s4_r2_a42,0,2406.042,9.7387,4.533,,,スタッフ:Staff04,0,2,9.4996
fam_p1_s4_r2_a42,0,2692.771,15.1228,6.0865,,,スタッフ:Staff03,0,2,9.2927
fam_p1_s4_r2_a42,0,2832.308,11.5373,4.55,,,スタッフ:Staff02,0,1,9.8942
fam_p1_s4_r2_a42,0,2931.705,9.0659,4.8812,A03,,スタッフ:Staff02,0,2,9.9774
fam_p1_s4_r2_a42,0,2999.17,12.6,4.9714,,,スタッフ:Staff01,0,1,9.7594
fam_p1_s4_r2_a42,0,3329.393,9.4938,4.939,A03,,スタッフ:Staff03,0,1,8.985
fam_p1_s4_r2_a42,0,3515.925,10.3084,4.1549,,,スタッフ:Staff03,0,1,8.4093
別のタブで開く保存

conditions.json

29_s0_1135_conditions.json9,111字・45行・json
{
  "run_name": "family_v0",
  "written_at": "2026-10-23 11:49:14",
  "unity_version": "2022.3.62f3",
  "trips_csv_columns": "condition_id,aisle_width_m,crowd,robots,seed,robot_id,trip_id,table_id,distance_m,total_s,stopped_s,n_stops,stop_durations_s,stuck,timeout,wait_aisle_s,max_decel_mps2,min_clearance_m,met_robot,table_ids,dishes,dish_ready_s,dish_arrived_s,undelivered,speed_mps,stuck_count,stuck_wait_s,via_narrow,stops_in_narrow,stops_out_narrow,stopped_in_narrow_s,stopped_out_narrow_s",
  "settings": {
    "store_layout": {"aisleWidthOptions":[1.2000000476837159],"aisleWidthIndex":0,"deliveryOffsetFromAisleCenter":0.0,"aisleEntranceSetback":0.800000011920929,"aisleEntranceSideOffset":0.44999998807907107,"wallHeight":2.700000047683716,"wallThickness":0.15000000596046449,"floorThickness":0.20000000298023225,"showAisleMarks":true,"aisleMarkThickness":0.019999999552965165,"showFloorPaint":true,"floorPaintCellSize":0.05000000074505806,"floorPaintHeight":0.029999999329447748,"navAgentRadius":0.25,"navAgentHeight":1.2000000476837159,"navAgentClimb":0.20000000298023225,"navAgentSlope":10.0,"navVoxelSize":0.05000000074505806,"navMinRegionArea":0.30000001192092898,"navBoundsPadding":1.0,"layoutJson":{"instanceID":29208},"summaryJson":{"instanceID":29202},"layoutFileName":"p1_efficient_corner","fetchedAt":"2026-10-22 20:23:50 JST(版 9628954a582f)","sourceUrl":"https://pixelstomotors.com/sim/layouts/unity/p1_efficient_corner.json","benchBackThickness":0.07999999821186066,"benchSeatInset":0.029999999329447748},
    "robot_spec": {"diameter":0.5,"height":1.2000000476837159,"maxSpeed":0.6000000238418579,"acceleration":1.0,"deceleration":1.0,"turnSpeedDegPerSec":180.0,"sensorRange":0.6000000238418579,"sensorWidth":0.5,"sensorHeight":1.2000000476837159,"resumeAfterClearSec":1.0,"replanAfterStoppedSec":10.0,"stuckAfterStoppedSec":60.0,"stuckRecoveryWaitSec":15.0,"maxTripSec":600.0,"aisleYielding":true,"aisleWaitMaxSec":20.0,"aisleWaitSetbackM":0.8999999761581421,"aisleWaitSideM":0.6000000238418579,"robotYieldAfterSec":2.0,"robotYieldMaxSec":20.0,"robotYieldClearM":0.6000000238418579,"robotYieldBackM":0.8999999761581421,"useReturnLine":true,"passReturnOffsetM":1.0,"passReturnSeparationM":1.0,"passReturnKeepAwayM":0.6000000238418579,"passReturnCheckStepM":0.05000000074505806,"tableDwellSec":25.0,"arriveRadius":0.25,"cornerReachDistance":0.11999999731779099,"stoppedSpeedEpsilon":0.019999999552965165,"clearanceProbeHeight":0.30000001192092898,"clearanceProbeRange":3.0,"pathBlockSearchRadius":2.0,"avoidancePriority":0,"repathRetrySec":1.0,"noPathForceReplanSec":10.0,"escapeToAisleEntranceOnPartialPath":true,"followSiteRoutes":true,"waypointReachDistance":0.25,"routePointSnapM":0.10000000149011612},
別のタブで開く保存

Build Store の店の報告(cs:121 のあと・2026-10-23 09:01)

30_Build_Store.txt5,473字・168行・text
ServiceSim 店の報告(v1 ファミレス型)
作った日時: 2026-10-23 09:01:21
Unity: 2022.3.62f3
run_name: family_v0

描画方式
GraphicsSettings.currentRenderPipeline: null(Built-in)
GraphicsSettings.defaultRenderPipeline: null(Built-in)
別のタブで開く保存

設計書の0.5章(unity_design_v0.md・追記したあと)

## 0.5 ゴールと進め方(2026-10-22 エイイチと決めた)

Unity をサイトの試算に完全に合わせることは目指さない。ズレを見つけるたびに直していると終わりがなく、何が達成できたのかが分からなくなるため。Unity は Unity の作りのまま回し切り、サイトとのズレは「直す対象」ではなく「調べる対象(結果)」として扱う。0章の表は、段階Aで店の形と条件をそろえるところまで使い、仕事の決まりや数字の数え方の違いは直さずに段階Cの一覧に入れる。

| 段階 | やること | 終わり |
|---|---|---|
| A. 店を作る | 図面(JSON)のある店を Unity で建てる。店の形と条件(1時間の組数・スタッフ数・ロボット台数)はサイトと同じ。仕事の決まりや数え方は Unity のままでよく、違いは一覧に書くだけ | どの店・どの条件でも最後まで回り切り、逃がし弁(あきらめた・移した・卓を空けた)がほぼ0 |
| B. 回して台帳にまとめる | 1回回すごとに台帳に1行足す(店・条件・乱数の種・結果の数字・ロボットの4つの値・逃がし弁の回数)。台帳の置き場所は先に MASTER の保存先の表に足す | 決めた条件と回数が全部台帳に入る |
| C. ズレを調べる | 同じ店・同じ条件でサイトと Unity の数字を並べ、ズレごとに理由を分ける(1 数え方の違い/2 サイトにない動き=すれ違い・混雑/3 Unity の作りの問題)。何を直すか(記録する項目・店の作り・サイトの計算)を決める | ズレの一覧と、それぞれの理由・対処が書ける。対処を実際に入れるのは次の版 |

- 店の順番:③⑦で A〜C を一度通してから、ほかの店(②④⑤⑥)を足す(エイイチが (ア) を選んだ)。③⑦で一度ズレの出方を見れば、ほかの店で何を記録すべきかが分かるため
- 問題が出たときに直すのは1回だけ。それでも直らなければ、制約として書いて先へ進む
- 段階Aの区切り(2026-10-23 エイイチと決めた):③で、助けに行く仕事(cs:117)・台どうしの譲り合い(cs:123)を直したあと、受け渡し口の前の通り方を最後の1回として直す。これで時間切れの往復が大半のままなら、段階Aは③⑦ともここで止め、段階Bへ進む。直す点(受け渡し口まわり・下の通路 z4 のすれ違いなど)は、段階B・Cを進めながら同時に考える
- ロボットの待機場所は受け渡し口の右のまま(2026-10-23 エイイチ:左は客とスタッフの行き来が多く、待機は邪魔になる)。サイトの店の形は変えない
- 次に進みながら考える直す点(2026-10-23 エイイチの指摘から。まだ入れていない):
  1. レジの置き方。いまはレジに並ぶ点(z 3.8・4.3)が客席の下の通路のまん中にあり、「人が立ち止まっていた」止まりの1位になっている。決まり(エイイチ):レジの向きは店によって違ってよいが、レジの台・店員の立つ所・会計で並ぶ所で通路を狭くしない。店の形なので、直すときはサイトの店の形の決まり(6店すべて)が先
  2. 同じ卓・同じ通路のまわりに2台のロボットを集めない。いまは2台が同じ通路の入口で鉢合わせて詰まる。料理を割り当てるとき、ほかの台が向かっている・入っている通路の卓は後に回すなど、割り当ての段階で避ける(Unity だけの決まりとして入れ、段階Cの違いの一覧に書く)
- 段階Cの候補として、いま分かっている違い:「席はあるのに待った時間」の数え方(2026-10-22 の cs:116 でサイトと同じ数え方に変えた)/片付けの時間(turn_mean。定義は同じ)/Unity にしかないもの(組の人数・2人席・ドリンクバー・トイレ・椅子を引く・歩く客の数)

コード全量(cs:117〜cs:124 で変わったファイル)

Assets/ServiceSim/ の下で、cs:116 のあと(2026-10-23 03:00 以降)に変わったファイルを、すべて載せます。シーンのファイル(Scenes/ServiceSim_Family.unity・1.8MB)は、建てた店の中身をそのまま書き出したもので、コードではないので載せていません。Tag を足した ProjectSettings/TagManager.asset は、最後に載せます。

Assets/ServiceSim/People/PersonRobotYield.cs

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

namespace ServiceSim
{
    /// <summary>
    /// 人がロボットをよける。スタッフと歩く客に付ける。
別のタブで開く保存

Assets/ServiceSim/People/StaffAgent.cs

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

namespace ServiceSim
{
    /// <summary>
    /// スタッフ1人。確率で仕事を選ぶのではなく、そのときに起きている仕事を
別のタブで開く保存

Assets/ServiceSim/People/SeatedGuest.cs

using System.Collections.Generic;
using UnityEngine;

namespace ServiceSim
{
    /// <summary>
    /// 1卓ぶんの椅子の出し入れ。座っている人は人として置かないので、
    /// この script が「その卓の椅子」だけを持つ。
別のタブで開く保存

Assets/ServiceSim/People/PeopleSpec.cs

using UnityEngine;
using UnityEngine.AI;

namespace ServiceSim
{
    /// <summary>混み具合の3段階</summary>
    public enum CrowdLevel
    {
別のタブで開く保存

Assets/ServiceSim/People/PeopleSpec.asset

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 0}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 485ae95cc6b11479eaf59a14275b67cb, type: 3}
  m_Name: PeopleSpec
  m_EditorClassIdentifier: 
  personRadius: 0.2
  personHeight: 1.7
  seatedBodyHeight: 1.35
  seatedSeatHeight: 0.45
  staffCount: 2
  staffSpeed: 1
  staffTaskWeights:
  - 1
  - 1
  - 1
  - 1
  - 1
  staffDwellAtPassSec: 3
  staffDwellAtTableSec: 5
  staffDwellAtReturnSec: 5
  staffDwellAtPantrySec: 5
  staffDwellAtWaitingSec: 5
  staffDwellAtRegisterSec: 30
  guestCountByCrowd: 010000000400000008000000
  guestSpeed: 0.8
  guestTripWeights:
  - 1
  - 1
  - 1
  guestDwellAtPoiSec: 10
  guestDwellAtRegisterSec: 20
  guestDwellAtTableSec: 30
  warmupOccupancy: 0.8
  jamNarrowAfterSec: 1
  jamNarrowRadius: 0.12
  jamBackOffAfterSec: 3
  jamStuckSpeed: 0.05
  waitingCountByCrowd: 000000000200000005000000
  waitingShuffleSec: 25
  chairPullHoldSec: 30
  chairPullDistance: 0.3
  chairPullIdleMeanIntervalSec: 1800
  guestGiveUpSec: 60
  guestWarpHomeSec: 60
  staffGiveUpSec: 60
  staffGiveUpMaxTries: 3
  registerBackArea: 3
  avoidancePriority: 50
  avoidanceQuality: 3
  acceleration: 2
  angularSpeedDegPerSec: 360
  stoppingDistance: 0.3
  robotYieldEnabled: 1
  robotAisleLookAheadM: 3
  robotAisleMarginM: 0.3
  robotDetourExtraMaxM: 5
  robotFaceToFaceM: 1.5
  robotKeepClearM: 0.3
  robotSideStepM: 0.5
  robotBackOffSearchM: 4
  robotPassedClearM: 0.5
  robotYieldMaxSec: 20
  robotCarelessChance: 0.02
  robotContactGapM: 0.1
  robotNudgeSpeedMps: 0.5

Assets/ServiceSim/People/SeatedGuestBody.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2838086114802356638
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
別のタブで開く保存

Assets/ServiceSim/People/Guest.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6073347054217536181
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
別のタブで開く保存

Assets/ServiceSim/People/WaitingGuest.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &832178874547918046
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
別のタブで開く保存

Assets/ServiceSim/People/Staff.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3098163907200169810
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
別のタブで開く保存

Assets/ServiceSim/Robot/ServingRobotController.cs

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

namespace ServiceSim
{
    /// <summary>
別のタブで開く保存

Assets/ServiceSim/Robot/RobotSpec.cs

using UnityEngine;

namespace ServiceSim
{
    /// <summary>
    /// 配膳ロボットの数字。ロボットに関する数字はすべてこの .asset に置く。
    /// </summary>
    [CreateAssetMenu(menuName = "ServiceSim/Robot Spec", fileName = "RobotSpec")]
別のタブで開く保存

Assets/ServiceSim/Robot/RobotSpec.asset

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 0}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 6b50de1a9617a4ad5b687f834c80800b, type: 3}
  m_Name: RobotSpec
  m_EditorClassIdentifier: 
  diameter: 0.5
  height: 1.2
  maxSpeed: 0.6
  acceleration: 1
  deceleration: 1
  turnSpeedDegPerSec: 180
  sensorRange: 0.6
  sensorWidth: 0.5
  sensorHeight: 1.2
  resumeAfterClearSec: 1
  replanAfterStoppedSec: 10
  stuckAfterStoppedSec: 60
  stuckRecoveryWaitSec: 15
  maxTripSec: 600
  aisleYielding: 1
  aisleWaitMaxSec: 20
  aisleWaitSetbackM: 0.9
  aisleWaitSideM: 0.6
  robotYieldAfterSec: 2
  robotYieldMaxSec: 20
  robotYieldClearM: 0.6
  robotYieldBackM: 0.9
  useReturnLine: 1
  passReturnOffsetM: 1
  passReturnSeparationM: 1
  passReturnKeepAwayM: 0.6
  passReturnCheckStepM: 0.05
  tableDwellSec: 25
  arriveRadius: 0.25
  cornerReachDistance: 0.12
  stoppedSpeedEpsilon: 0.02
  clearanceProbeHeight: 0.3
  clearanceProbeRange: 3
  pathBlockSearchRadius: 2
  avoidancePriority: 0
  repathRetrySec: 1
  noPathForceReplanSec: 10
  escapeToAisleEntranceOnPartialPath: 1

Assets/ServiceSim/Robot/ServingRobot.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1360704252653977340
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
別のタブで開く保存

Assets/ServiceSim/Service/ServiceOps.cs

using System.Collections.Generic;
using UnityEngine;

namespace ServiceSim
{
    /// <summary>料理1皿</summary>
    public class DishOrder
    {
別のタブで開く保存

Assets/ServiceSim/Experiment/ExperimentRunner.cs

using System.Collections.Generic;
using System.IO;
using UnityEngine;

namespace ServiceSim
{
    /// <summary>
    /// 条件を回して記録する。1回の Play の中で、条件を順に通せる(段階3の Run All)。
別のタブで開く保存

Assets/ServiceSim/Experiment/TripLogger.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using UnityEngine;

namespace ServiceSim
別のタブで開く保存

Assets/ServiceSim/Store/JsonStoreLayout.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using UnityEngine;

namespace ServiceSim
{
別のタブで開く保存

Assets/ServiceSim/Store/StoreBuilder.cs

using System;
using System.Collections.Generic;
using UnityEngine;

namespace ServiceSim
{
    /// <summary>
    /// StoreLayout が作った部品の一覧(StorePlan)を見て、床・壁・卓・椅子・ベンチ・
別のタブで開く保存

Assets/ServiceSim/Store/StorePlan.cs

using System.Collections.Generic;
using UnityEngine;

namespace ServiceSim
{
    /// <summary>席の種類</summary>
    public enum SeatKind
    {
別のタブで開く保存

Assets/ServiceSim/Store/SimTags.cs

using UnityEngine;

namespace ServiceSim
{
    /// <summary>
    /// 種類の印(Tag)。あとで天井の角のカメラの映像から人とロボットを見分ける学習に使う。
    /// いまは付けるだけで、Unity の中では何にも使わない。
    ///
    /// Layer ではなく Tag にしたのは、Layer が物理の問い合わせ(ロボットの前のセンサーなど)に
    /// 効くことがあるのに対し、Tag は何にも効かないため。
    /// 付けても NavMesh・センサー・人がよける処理・店の形の確かめは変わらない。
    ///
    /// Tag そのものは ProjectSettings/TagManager.asset に作られる(ServiceSimSetup が足す)。
    /// まだ無い Tag を付けようとすると Unity は例外を投げるので、
    /// ここで1回だけ試し、だめならそれ以降は何もしない(店が建たなくなるのを防ぐ)。
    /// </summary>
    public static class SimTags
    {
        public const string Robot = "SimRobot";
        public const string Staff = "SimStaff";
        public const string Guest = "SimGuest";
        public const string SeatedGuest = "SimSeatedGuest";
        public const string Bench = "SimBench";
        public const string Table = "SimTable";
        public const string Chair = "SimChair";

        /// <summary>Setup が作る Tag の一覧</summary>
        public static readonly string[] All =
            { Robot, Staff, Guest, SeatedGuest, Bench, Table, Chair };

        static readonly System.Collections.Generic.HashSet<string> _missing =
            new System.Collections.Generic.HashSet<string>();

        /// <summary>
        /// 印を付ける。その Tag がまだ無ければ、黙って何もしない(例外を投げない)。
        /// 子どもには付けない(当たりの箱と見た目を別々に数えたいため)。
        /// </summary>
        public static void Apply(GameObject go, string tag)
        {
            if (go == null || string.IsNullOrEmpty(tag)) return;
            if (_missing.Contains(tag)) return;

            try { go.tag = tag; }
            catch (UnityException)
            {
                _missing.Add(tag);
                Debug.LogWarning("[ServiceSim] Tag \"" + tag + "\" がまだありません。" +
                                 "ServiceSim/Setup を実行すると作られます(印が付かないだけで、" +
                                 "測る数字は変わりません)");
            }
        }
    }
}

Assets/ServiceSim/Store/StoreLayout_p1_efficient_corner.asset

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 0}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 290f4a1a37804297962e9248caa661ce, type: 3}
  m_Name: StoreLayout_p1_efficient_corner
  m_EditorClassIdentifier: 
  aisleWidthOptions:
  - 1.2
  aisleWidthIndex: 0
  deliveryOffsetFromAisleCenter: 0
  aisleEntranceSetback: 0.8
  aisleEntranceSideOffset: 0.45
  wallHeight: 2.7
  wallThickness: 0.15
  floorThickness: 0.2
  showAisleMarks: 1
  aisleMarkThickness: 0.02
  showFloorPaint: 1
  floorPaintCellSize: 0.05
  floorPaintHeight: 0.03
  navAgentRadius: 0.25
  navAgentHeight: 1.2
  navAgentClimb: 0.2
  navAgentSlope: 10
  navVoxelSize: 0.05
  navMinRegionArea: 0.3
  navBoundsPadding: 1
  layoutJson: {fileID: 4900000, guid: 2154377bd0d440b69bac2e9493720fa7, type: 3}
  summaryJson: {fileID: 4900000, guid: 4525eb25b69c4468aadbce9a96430dd9, type: 3}
  layoutFileName: p1_efficient_corner
  fetchedAt: "2026-10-22 20:23:50 JST\uFF08\u7248 9628954a582f\uFF09"
  sourceUrl: https://pixelstomotors.com/sim/layouts/unity/p1_efficient_corner.json
  benchBackThickness: 0.08
  benchSeatInset: 0.03

Assets/ServiceSim/Store/Prefabs/BenchBody.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4065994176022308155
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 1679362310706397511}
  - component: {fileID: 7560244343268238903}
  m_Layer: 0
  m_Name: BenchBody
  m_TagString: SimBench
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &1679362310706397511
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 4065994176022308155}
  serializedVersion: 2
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 0}
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &7560244343268238903
BoxCollider:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 4065994176022308155}
  m_Material: {fileID: 0}
  m_IncludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_ExcludeLayers:
    serializedVersion: 2
    m_Bits: 0
  m_LayerOverridePriority: 0
  m_IsTrigger: 0
  m_ProvidesContacts: 0
  m_Enabled: 1
  serializedVersion: 3
  m_Size: {x: 1, y: 1, z: 1}
  m_Center: {x: 0, y: 0, z: 0}

Assets/ServiceSim/Store/Prefabs/BenchSeat.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4325218961744234378
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4890538970695845508}
  - component: {fileID: 5913865391000008738}
  - component: {fileID: 5663976388492468277}
  m_Layer: 0
  m_Name: BenchSeat
  m_TagString: SimBench
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4890538970695845508
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 4325218961744234378}
  serializedVersion: 2
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 0}
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5913865391000008738
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 4325218961744234378}
  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &5663976388492468277
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 4325218961744234378}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_StaticShadowCaster: 0
  m_MotionVectors: 1
  m_LightProbeUsage: 1
  m_ReflectionProbeUsage: 1
  m_RayTracingMode: 2
  m_RayTraceProcedural: 0
  m_RenderingLayerMask: 1
  m_RendererPriority: 0
  m_Materials:
  - {fileID: 2100000, guid: 1b824132bc4d64ffca33b77e83b5a210, type: 2}
  m_StaticBatchInfo:
    firstSubMesh: 0
    subMeshCount: 0
  m_StaticBatchRoot: {fileID: 0}
  m_ProbeAnchor: {fileID: 0}
  m_LightProbeVolumeOverride: {fileID: 0}
  m_ScaleInLightmap: 1
  m_ReceiveGI: 1
  m_PreserveUVs: 1
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_StitchLightmapSeams: 1
  m_SelectedEditorRenderState: 3
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_AdditionalVertexStreams: {fileID: 0}

Assets/ServiceSim/Store/Prefabs/BenchBack.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &7550362257018928738
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 3266517807500762629}
  - component: {fileID: 739566609056111341}
  - component: {fileID: 1824733855874062047}
  m_Layer: 0
  m_Name: BenchBack
  m_TagString: SimBench
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &3266517807500762629
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 7550362257018928738}
  serializedVersion: 2
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_ConstrainProportionsScale: 0
  m_Children: []
  m_Father: {fileID: 0}
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &739566609056111341
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 7550362257018928738}
  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &1824733855874062047
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 7550362257018928738}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_StaticShadowCaster: 0
  m_MotionVectors: 1
  m_LightProbeUsage: 1
  m_ReflectionProbeUsage: 1
  m_RayTracingMode: 2
  m_RayTraceProcedural: 0
  m_RenderingLayerMask: 1
  m_RendererPriority: 0
  m_Materials:
  - {fileID: 2100000, guid: b7709c3f2dfd746daa7e02186261cd0d, type: 2}
  m_StaticBatchInfo:
    firstSubMesh: 0
    subMeshCount: 0
  m_StaticBatchRoot: {fileID: 0}
  m_ProbeAnchor: {fileID: 0}
  m_LightProbeVolumeOverride: {fileID: 0}
  m_ScaleInLightmap: 1
  m_ReceiveGI: 1
  m_PreserveUVs: 1
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_StitchLightmapSeams: 1
  m_SelectedEditorRenderState: 3
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_AdditionalVertexStreams: {fileID: 0}

Assets/ServiceSim/Store/Prefabs/Chair.prefab

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3687668175636490921
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
別のタブで開く保存

Assets/ServiceSim/Store/Materials/Mat_BenchSeat.mat

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
  serializedVersion: 8
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Mat_BenchSeat
  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
  m_Parent: {fileID: 0}
  m_ModifiedSerializedProperties: 0
  m_ValidKeywords: []
  m_InvalidKeywords: []
  m_LightmapFlags: 4
  m_EnableInstancingVariants: 0
  m_DoubleSidedGI: 0
  m_CustomRenderQueue: -1
  stringTagMap: {}
  disabledShaderPasses: []
  m_LockedProperties: 
  m_SavedProperties:
    serializedVersion: 3
    m_TexEnvs:
    - _BumpMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _DetailAlbedoMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _DetailMask:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _DetailNormalMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _EmissionMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _MainTex:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _MetallicGlossMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _OcclusionMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _ParallaxMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    m_Ints: []
    m_Floats:
    - _BumpScale: 1
    - _Cutoff: 0.5
    - _DetailNormalMapScale: 1
    - _DstBlend: 0
    - _GlossMapScale: 1
    - _Glossiness: 0.12
    - _GlossyReflections: 1
    - _Metallic: 0
    - _Mode: 0
    - _OcclusionStrength: 1
    - _Parallax: 0.02
    - _SmoothnessTextureChannel: 0
    - _SpecularHighlights: 1
    - _SrcBlend: 1
    - _UVSec: 0
    - _ZWrite: 1
    m_Colors:
    - _Color: {r: 0.62, g: 0.33, b: 0.29, a: 1}
    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
  m_BuildTextureStacks: []

Assets/ServiceSim/Store/Materials/Mat_BenchBack.mat

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
  serializedVersion: 8
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Mat_BenchBack
  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
  m_Parent: {fileID: 0}
  m_ModifiedSerializedProperties: 0
  m_ValidKeywords: []
  m_InvalidKeywords: []
  m_LightmapFlags: 4
  m_EnableInstancingVariants: 0
  m_DoubleSidedGI: 0
  m_CustomRenderQueue: -1
  stringTagMap: {}
  disabledShaderPasses: []
  m_LockedProperties: 
  m_SavedProperties:
    serializedVersion: 3
    m_TexEnvs:
    - _BumpMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _DetailAlbedoMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _DetailMask:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _DetailNormalMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _EmissionMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _MainTex:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _MetallicGlossMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _OcclusionMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _ParallaxMap:
        m_Texture: {fileID: 0}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    m_Ints: []
    m_Floats:
    - _BumpScale: 1
    - _Cutoff: 0.5
    - _DetailNormalMapScale: 1
    - _DstBlend: 0
    - _GlossMapScale: 1
    - _Glossiness: 0.12
    - _GlossyReflections: 1
    - _Metallic: 0
    - _Mode: 0
    - _OcclusionStrength: 1
    - _Parallax: 0.02
    - _SmoothnessTextureChannel: 0
    - _SpecularHighlights: 1
    - _SrcBlend: 1
    - _UVSec: 0
    - _ZWrite: 1
    m_Colors:
    - _Color: {r: 0.48, g: 0.25, b: 0.22, a: 1}
    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
  m_BuildTextureStacks: []

Assets/ServiceSim/Editor/ServiceSimSetup.cs

using System;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
別のタブで開く保存

Assets/ServiceSim/Editor/ServiceSimMenu.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
別のタブで開く保存

Assets/ServiceSim/Editor/ServiceSimSeatedBody.cs

using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;

namespace ServiceSim.EditorTools
{
    /// <summary>
別のタブで開く保存

Assets/ServiceSim/LABEL_RULES.md

52_Assets_ServiceSim_LABEL_RULES.md3,277字・104行・markdown
# ServiceSim 表示のルール

## 対象
Scene ビューに出す文字、store_report、Console。
CSV に書く値の言葉は対象外(過去の記録と比べられなくなるため。変えるときは対応表を作ってから別に行う)。

## 場所の名前
- 動かないものにだけ付ける:入口・風除室・待合・レジ・レジの内側・厨房・受け渡し口・返却口・パントリー・ドリンクバー・トイレ
別のタブで開く保存

ProjectSettings/TagManager.asset

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!78 &1
TagManager:
  serializedVersion: 2
  tags:
  - robot
  - SimRobot
  - SimStaff
  - SimGuest
  - SimSeatedGuest
  - SimBench
  - SimTable
  - SimChair
  layers:
  - Default
  - TransparentFX
  - Ignore Raycast
  - 
  - Water
  - UI
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  - 
  m_SortingLayers:
  - name: Default
    uniqueID: 0
    locked: 0