サービスロボット導入シミュレーション Log#41 | 病院の搬送ロボット、立体で見せて車いすを1%に直す

この記事の素材(コード・ログ・データ 7ファイル・まとめてダウンロードあり)
AIで読む ChatGPT・Claude などで、この記事に質問できます

病院の外来の廊下にいる人のうち、車いすの人は約0.6〜1.9%、杖や歩行器を使う人は約1〜9%と、公開統計から推計できました。病院で検体を運ぶ搬送ロボットのシミュレーション(Unity で再現した仮の病院)では、前の回で根拠なしに車いす・杖の人を各10%置いていたので、車いす1%・杖の人3%に直しました。 あわせて、それまで真上からの平らな図でしか見ていなかった Unity の病院を、配膳ロボットのときと同じ立体の見た目にし、廊下で起きる問題が壁に隠れずに見えるカメラの角度を数で比べて決めました。

この回で良くなったこと、できるようになったことです。

  • 病院の人が動画を見て、ロボットがどこで、だれの前で止まったかを自分の目で確かめられるようになった。前は点と四角の図で、どれが車いすかも見分けにくかった
  • 廊下の人の内訳に、出典と計算の式が付いた。前の回(LOG477)では、ロボットが止まりきれなかった相手の多くが車いすで、問題の回数が多めに出ていた。その分を、次に回し直すときに正せる
  • 見た目の作り直しは、記録を1バイトも変えない形で入れた。色3案×カメラ4つのサンプル12枚は27分、角度を変えた14枚と比べる数は16分で、Claude Code(依頼箱)が作った。人が Unity を開いて撮り直す手間はなかった(前に手で撮ったときの時間は測っていない)

前の回で困っていたのは、病院の Unity を一度も立体で見ていなかったことと、廊下の人の内訳に根拠がなかったことです。配膳ロボットのファミレスでは、元ファミレス店員の実感と、立体の動画を見ての手直しを重ねて、店の形や人の動きを詰めてきました。病院ではそのやり方を使わずに数え始めてしまい、記録用の平らな図のまま数を出していました。人の内訳も、外来の廊下で10人に1人が車いす、というのは多すぎる、という実感がありました。

やったことなぜ結果
Unity の病院を立体の見た目にし、色3案×カメラ4つのサンプルを撮った(依頼139)
配膳ロボットで作った見た目(立体・斜めのカメラ・右のパネル)を病院にも使い、見ながら直せるようにするため
色は A(ミント×木目)に決めた。フロア全体の引きは灰色の部屋ばかりで人が点になり、60°の寄りは廊下の手前が壁に隠れた
引きを廊下と待合に絞り、寄りの見下ろす角度4つ×向き2つを数で比べた(依頼140)
壁に隠れる問題を、見た目の好みではなく数で選ぶため
寄りは左30°・75°見下ろし(廊下の93%と問題の輪5個すべてが見える)、引きは西半分・左30°・75°に決めた
外来の廊下の車いす・杖の人の割合を、公開統計から推計した
前の回の各10%に根拠がなく、多すぎると感じていたため
車いす約0.6〜1.9%、杖・歩行器約1.0〜8.5%。車いす1%・杖の人3%を選び、サイトの前提の表に入れた

配膳ロボットを自分の店に入れたらどうなるかは、このシリーズの試算をもとにした別のページで試せます。病院の搬送も、試算が固まったら同じ形にしていきます。

店の立体図(席・キッチン・配膳ロボットの通り道)導入前シミュレーション配膳ロボットを、導入前に自分の店舗でシミュレーション店舗の図面と人数から、何人で回るか・どこで止まるか・月いくらかかるかを出します

作業ログ ― Unity の病院を、配膳ロボットと同じ立体の見た目にする(依頼139)

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

ファイルの一覧(7本)

01_sec01.md ― 見た目だけの直しであることを、記録の md5 で確かめた / 依頼139 の依頼文(病院の Unity を立体の見た目にして色3案とカメラ4つのサンプルを撮る)・3,562字

02_sec01.txt ― 見た目だけの直しであることを、記録の md5 で確かめた / 依頼139 の報告(claude_code_reports/20261110_hospital_139.txt の全文)・10,424字

03_md5_pan139.py.txt ― 見た目だけの直しであることを、記録の md5 で確かめた / pan139.py(問題の輪とパネルを重ね、並べた図と動画のコマを作るコード)・13,546字

04_sec02.txt ― 引きは廊下と待合に絞り、ふだんは西半分を使う / 依頼140 の報告(claude_code_reports/20261110_hospital_140.txt の全文)・7,955字

05_sec02.py.txt ― 引きは廊下と待合に絞り、ふだんは西半分を使う / vis140.py(見える廊下・輪・ロボット・人の高さを数えるコード)・7,128字

06_sec02.py.txt ― 引きは廊下と待合に絞り、ふだんは西半分を使う / pan140.py(輪とパネルを重ねるコード。輪を床の高さ0に直した版)・11,952字

07_sec02.py.txt ― 引きは廊下と待合に絞り、ふだんは西半分を使う / sheet140.py(並べた図を作るコード)・4,047字

ここから下は作業ログです。数字は、特に断りがなければシミュレーションの値です。効果の欄は、測った値か見込みかを書いています。

病院の Unity は、記録用の真上の平らな図のままだった

前の回(LOG477)で病院の搬送ロボット(KEENON の W3)が廊下で起こす問題を数えた Unity の場面は、真上から見た平らな図で撮っていました。人は色の点、車いすは桃色の四角、部屋は灰色の塊です。数を出すには足りますが、病院の人が見て「どこで、何が起きたか」を確かめる絵にはなっていませんでした。

配膳ロボットの Unity では、人とロボットを立った筒で描き、壁に高さを付け、60°見下ろしの斜めのカメラで、引き(全体の流れ)と寄り(問題が起きている所)を組み合わせて撮ってきました。録画の横には、ロボットとスタッフがいま何をしているかのパネルを付けています。この形を病院にも持ってくることにしました。配膳に全部合わせる必要はなく、病院に合う椅子や色は変えてよい。ただし床・壁・背景の色、人とロボットの形と色、パネルの作りといったベースは変えない、という決め方です。

色の参考には、病院の待合室の写真を検索した画面を使いました(検索結果の画面なので、記事には載せていません)。床は明るいアイボリーか明るい木目、長いすは薄いミント・青緑が多く、明るい木の脚やひじ掛け、差し色に若草色やベージュ、という傾向でした。ここから3案を作りました。

案長いす
木目(脚・ひじ掛け・受付の前板)
受付の天板待合の床
A ミント×木目#9FD6CB#D7B88C#F3F0E8#E4CFAA
B 生成り×木目#E6DAC3#CFA77A#F6F3EC#D8BF98
C 黄緑×木目#B3CC6E#D7B88C#F3F0E8#E4CFAA

待合(総合受付・会計・待合の部屋)だけは灰色の箱にせず、中を見せました。長いす50台と、座っている患者86人を置いています。この患者は飾りで、動かず、数える人にも入りません。待合の床は、はじめ廊下と同じ色で撮ったら境が分からなかったので、明るい木の色を差しました(Claude Code が決めた値で、そのまま使うことにしました)。

人とロボットの形は配膳と同じ決まりです。歩く患者・付き添いは黄色の筒、杖の人は同じ黄色の筒に細い杖、車いすは濃い灰色の車いすに黄色の人を座らせた形、スタッフは青の筒、ストレッチャーは白に近い灰色の台を青のスタッフが押す形、ロボットは配膳と同じ白の筒で、高さを W3 の公表値 1.081m にしました。車いすや杖を色ではなく形で分けたのは、色の意味を増やさないためです。

依頼139 のサンプル12枚。色3案(ミント×木目・生成り×木目・黄緑×木目)とカメラ4つ(真上の引き・真上の寄り・60°見下ろし左30°の引き・60°見下ろし右30°の寄り)

フロア全体の引きは灰色ばかりで、60°の寄りは廊下の手前が壁に隠れた

12枚を並べると、色の違いが分かるのは寄りの絵だけでした。引きではどの案もほとんど同じに見えます。

困ったのはカメラのほうです。フロア全体(120m×60m)を映す引きは、画面のほとんどが灰色の部屋で、人が動く廊下は細い帯になり、人は点にしか見えませんでした。病院で見せたいのは廊下なので、全体を映す意味がありません。

60°見下ろしの寄りでは、問題がいちばん多く起きた所(積む所から西の縦廊下の角までの大廊下)の手前半分が、手前の部屋の壁(高さ2.4m)に隠れました。隠れた所で起きた問題の輪は、壁の上に重なって描かれます。配膳のファミレスは客席が広く開けていたので60°で足りましたが、病院の廊下は両側が部屋なので、どちらから見ても同じことが起きます。

60°見下ろし・右30°の寄り。大廊下の手前(下側)が手前の部屋の壁に隠れ、問題の輪が壁の上に重なっている

この2つを受けて、色は A(ミント×木目)に決め、引きは廊下と待合が入る範囲に絞り、寄りは見やすい角度を探ることにしました。

見た目だけの直しであることを、記録の md5 で確かめた

見た目を入れたことで数が変わってしまうと、前の回と比べられなくなります。依頼139 では、見た目を入れた状態で前の回(依頼138)と同じ条件(時間で切り替える道・0.6m/秒・種0)を回し、ロボットの道のり・出来事・助け・ロボットの位置・便・移り・混み具合の記録7つが、依頼138 と1バイトも違わないことを確かめました。足した物には当たり判定を付けず、道を探す地図(NavMesh)を作ったあとに置き、乱数を使わない、という作りにしています。

依頼139 の依頼文(病院の Unity を立体の見た目にして色3案とカメラ4つのサンプルを撮る)

01_sec01.md3,562字・71行・markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 180
---
# 依頼139:病院の Unity を立体の見た目にして、色3案とカメラ4つのサンプルを撮る

エイイチと決めたこと(2026-11-10):
1 病院の Unity は今まで真上の平らな図(点と四角)でしか撮っていない。配膳ロボットの Unity で作ってきた見た目と撮り方(立体・60°見下ろしの斜めのカメラ・右のパネル)を病院にも使う
別のタブで開く保存

依頼139 の結果(依頼箱の結果の全文)

# 結果:20261110_139_病院のUnityを立体の見た目にして色3案とカメラ4つのサンプルを撮る

- 状態:完了
- 始めた時刻:2026-11-10 08:12
- 終わった時刻:2026-11-10 08:39(27分)
- 作業フォルダ:/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき:作業フォルダで `claude --resume 836390ff-8655-4a45-afaa-6d4b2646f731`

## Claude Code の報告

**やったこと**
- 始める前の確かめはすべて合格でした(保留0・cs:115 のあと、Unity と回し係は止まっている、KIOXIA はマウント済み、params と形の md5 は依頼のとおり)。
- 病院に立体の見た目を入れました。引数 -h139Look on のときだけ立体になり、既定は今の平らな図のままです。
  - 床・壁・光・影・背景・人とロボットの形と色は、配膳の値を読んでそのまま写しました。
  - 部屋は灰色の箱(高さ 2.4m)にしました。
  - 待合には、大廊下を向いた4人掛けの長いすを50台と、受付・会計のカウンターを置きました。座っている患者86人も置きましたが、どれも飾りで、当たりは無く数えにも入りません。
- カメラは4つ作り、パネル(時刻・ロボットの状態・大廊下の人数・問題1〜5)と問題の輪を重ねました。
  - カメラ4の寄る場所は大廊下 x9〜31 にしました。走っている間の問題がいちばん多い x17〜23 と、待っている間の問題が集まる積む所 x12 の両方が入るからです。
- 撮った回は「廊下だけ・0.6m/秒・種0」、時刻は9時57分42秒(7:30から8862秒)です。ロボットがこの問題の多い区間を行きで走っていて、大廊下に60人いる時刻です。
  - 静止画は12枚、色3案を並べた図は4枚、12枚の一覧は1枚です。
  - 動画は色Aでカメラ4つ、それぞれ20.04秒です(店の時刻の5倍)。
- 12枚を自分で開いて、次の5つを直しました。
  - 待合と大廊下の境が見えなかったので、待合の床に差し色を入れた
  - 全体図の空白を灰色の箱で埋めた
  - 真上・寄りの範囲を広げた
  - 引きのカメラでロボットの位置に白い輪を足した
  - パネルの文字の切れを直した

**結果**
- 見た目を入れた状態で、依頼138 の check138a と同じ回(時間で切替・0.6m/秒・種0)を回しました。記録7つ(legs・events・rescues・robot_track・trips・moves・crowd)の md5 は、7つとも依頼138 と一致しました。
- 瞬間移動はロボット0・人0でした。
- 撮った回も、止めた8945秒まで依頼138 と同じでした(robot_track 17,890行・crowd 150行が同じ、events は8940秒までに閉じた1,213件が同じ)。
- 撮った時刻(8845〜8945秒)にはストレッチャーが1台も出ていません。そこで別の時刻(300秒)を確かめ用に撮り、白に近い灰色の台を青のスタッフが押す形で見分けられることを見ました。
- check-in は cs:116(保留0)です。実行ファイルは Builds/hospital139 に作り、前の実行ファイルは残しています。
- 出力は KIOXIA の hospital/20261110_look139/ です。並べた図5枚は iCloud の hospital/look139/ にも写しました。
- 報告は claude_code_reports/20261110_hospital_139.txt です。最後の行は「判定:止めた(決めてほしいことあり)」です。

**変えたファイル**
- Assets/ServiceSim/Hospital/HospitalLook.cs(新しく作った)
- Assets/ServiceSim/Hospital/HospitalRun.cs
- Assets/ServiceSim/Hospital/Editor/HospitalSetup.cs
- Assets/ServiceSim/Hospital/Hospital.unity
- Assets/ServiceSim/Hospital/Materials/H139_*.mat(10個)
- 配膳の場面・実行ファイル・台帳、配膳と共通の部品には触っていません。

**決めてほしいこと**
1. 待合の床の差し色は依頼に値が無かったので、写真の明るい木の床から選びました(A・C は #E4CFAA、B は #D8BF98)。この値でよいか、差し色を入れないかを決めてください。
2. カメラ4は南東から見るので、大廊下の南の半分(約1.4m)が手前の部屋の箱に隠れます。隠れた所で起きた問題の輪は、箱の上に重なって見えます。このままでよいか決めてください。
3. シミュレーションで建てていない部屋も含めて、外形 120×60m の床でない所を、つながった灰色の箱で描きました(部屋どうしの境は描いていません)。これでよいか決めてください。
4. 撮った時刻にストレッチャーがいないので、12枚と動画には写っていません。このままでよいか決めてください。

依頼139 の報告(claude_code_reports/20261110_hospital_139.txt の全文)

02_sec01.txt10,424字・185行・text
依頼139:病院の Unity を立体の見た目にして、色3案とカメラ4つのサンプルを撮る(2026-11-10)
====================================================================

--------------------------------------------------------------------
0. 始める前の確かめ(すべて合格)
--------------------------------------------------------------------
  作業場所の保留:0(最後の check-in は cs:115)
  Unity・回し係:動いていない(Unity Hub だけ)。KIOXIA:マウント済み
別のタブで開く保存

camfit139.py(範囲の四隅が画面に入るカメラの距離を決めるコード)

#!/usr/bin/env python3
"""依頼139:カメラの距離と注視点を決める(Unity の Euler(pitch, yaw, 0) と同じ式。透視投影・縦の画角 fov)。
決めた点(床の範囲の四隅・高さ 0 と 2.4 m)がすべて画面の内側(余白 margin)に入る、いちばん近い距離を探し、
写った範囲の真ん中が画面の真ん中に来るよう注視点を動かす。"""
import math, sys

W, H = 2720, 2160


def basis(yaw, pitch):
    y, p = math.radians(yaw), math.radians(pitch)
    f = (math.cos(p) * math.sin(y), -math.sin(p), math.cos(p) * math.cos(y))
    u = (math.sin(p) * math.sin(y), math.cos(p), math.sin(p) * math.cos(y))
    r = (u[1] * f[2] - u[2] * f[1], u[2] * f[0] - u[0] * f[2], u[0] * f[1] - u[1] * f[0])
    return f, u, r


def proj(pt, yaw, pitch, tx, tz, dist, fov):
    f, u, r = basis(yaw, pitch)
    c = (tx - f[0] * dist, -f[1] * dist, tz - f[2] * dist)
    d = (pt[0] - c[0], pt[1] - c[1], pt[2] - c[2])
    zc = sum(d[i] * f[i] for i in range(3))
    xc = sum(d[i] * r[i] for i in range(3))
    yc = sum(d[i] * u[i] for i in range(3))
    t = math.tan(math.radians(fov) / 2)
    a = W / H
    nx, ny = xc / (zc * t * a), yc / (zc * t)
    return (nx + 1) / 2 * W, (1 - ny) / 2 * H


def fit(yaw, pitch, x0, x1, z0, z1, fov=40, margin=0.03, hmax=2.4):
    pts = [(x, h, z) for x in (x0, x1) for z in (z0, z1) for h in (0.0, hmax)]
    tx, tz = (x0 + x1) / 2, (z0 + z1) / 2
    for _ in range(30):
        lo, hi = 1.0, 2000.0
        for _ in range(60):
            m = (lo + hi) / 2
            uv = [proj(p, yaw, pitch, tx, tz, m, fov) for p in pts]
            ok = all(margin * W <= u <= (1 - margin) * W and margin * H <= v <= (1 - margin) * H for u, v in uv)
            if ok: hi = m
            else: lo = m
        dist = hi
        uv = [proj(p, yaw, pitch, tx, tz, dist, fov) for p in pts]
        cu = (min(u for u, v in uv) + max(u for u, v in uv)) / 2 - W / 2
        cv = (min(v for u, v in uv) + max(v for u, v in uv)) / 2 - H / 2
        if abs(cu) < 0.5 and abs(cv) < 0.5: break
        # 画面のずれを床の上のずれに直す(小さく動かして試す)
        e = 0.05
        u0 = proj((tx, 0, tz), yaw, pitch, tx, tz, dist, fov)
        ux = proj((tx + e, 0, tz), yaw, pitch, tx, tz, dist, fov)
        uz = proj((tx, 0, tz + e), yaw, pitch, tx, tz, dist, fov)
        a11, a21 = (ux[0] - u0[0]) / e, (ux[1] - u0[1]) / e
        a12, a22 = (uz[0] - u0[0]) / e, (uz[1] - u0[1]) / e
        det = a11 * a22 - a12 * a21
        dx = (a22 * cu - a12 * cv) / det
        dz = (-a21 * cu + a11 * cv) / det
        tx += dx * 0.8; tz += dz * 0.8
    return tx, tz, dist


if __name__ == "__main__":
    yaw, pitch, x0, x1, z0, z1 = map(float, sys.argv[1:7])
    tx, tz, d = fit(yaw, pitch, x0, x1, z0, z1)
    print(f"{tx:.2f},{tz:.2f},{d:.1f}")

pan139.py(問題の輪とパネルを重ね、並べた図と動画のコマを作るコード)

03_md5_pan139.py.txt13,546字・304行・python
#!/usr/bin/env python3
"""依頼139:病院の立体の見た目の静止画・動画に、問題の輪と右のパネルを付ける(1920×1080)。

左 1360×1080=Unity で撮った 2720×2160 を縮めたもの。輪は床の上(高さ FLOOR_Y)に、cam_{name}.json の行列で画素に移して描く
(依頼136 の vid136.py と同じ色・同じ印。10 秒出す)。引きのカメラ(top_wide・obl_l30_wide)だけ、ロボットの位置に白の輪を足す。
右 560=配膳のパネル(rec_lp_20261105/p0_round/after/round_after_panel.png)と同じ作り:白地・小さな見出し・大きな時刻・
「ロボット・スタッフがしていること」・数。中身は病院の値(ロボットの状態・助けに出ているスタッフ・大廊下の人数・撮り始めからの問題1〜5)。
別のタブで開く保存

run139.sh(依頼139 の回し方)

#!/bin/bash
# 依頼139:見た目入りの回を回す。check=依頼138 の check138a と同じ回(時間で切替・0.6・種0)を -h139Look on で。shots=撮る回(廊下だけ・0.6・種0)
cd /Users/shimazueiichi/Robotics_UX/ServiceSim
O=/Volumes/KIOXIA/r2r2r-data/service_sim/unity/hospital/20261110_look139
EXE=Builds/hospital139/HospitalSim.app/Contents/MacOS/ServiceSim
CS=$(python3 -c "import json;print(json.load(open('Builds/hospital139/build_info.json'))['unity_cs'])")
COMMON=(-batchmode -h127Speed 0.6 -h127Seed 0 -h127Out $O/runs -h127Cs $CS -h136Mode day -h138Mode 138 -h139Look on)
CAMS=(-h139Cam top_wide,0,90,60,30,142.8,40,2720,2160 -h139Cam top_near,0,90,40.5,22.5,73.2,40,2720,2160
      -h139Cam obl_l30_wide,30,60,54.69,22.45,154.5,40,2720,2160 -h139Cam obl_r30_near,-30,60,20.69,29.05,27.5,40,2720,2160)
case "$1" in
  check) $EXE "${COMMON[@]}" -h127Label check139a -h136Plan switch -logFile $O/logs/check139a.log; echo "check exit $?" ;;
  shots) $EXE "${COMMON[@]}" -h127Label look139 -h136Plan hall "${CAMS[@]}" -h139StillAt 8862 -h139VidFrom 8845 -h139VidTo 8945 -h139VidStep 0.2 -h139VidScheme A -h139EndAfterShots on -logFile $O/logs/look139.log; echo "shots exit $?" ;;
esac

vid139.sh(動画にまとめる)

#!/bin/bash
for c in top_wide top_near obl_l30_wide obl_r30_near; do python3 /Volumes/KIOXIA/r2r2r-data/service_sim/unity/hospital/20261110_look139/tools/pan139.py video /Volumes/KIOXIA/r2r2r-data/service_sim/unity/hospital/20261110_look139/runs/look139_v06_hall_s0 $c /Volumes/KIOXIA/r2r2r-data/service_sim/unity/hospital/20261110_look139/videos/hospital139_A_${c}_5x.mp4 & done; wait; echo all done

作業ログ ― 寄りの見下ろす角度を、見える廊下と問題の輪の数で選ぶ(依頼140)

角度を比べる4つの数

寄りの場所と時刻は依頼139 と同じにしたまま、見下ろす角度を 60°・67.5°・75°・82.5° の4つ、向きを右30°(南東から)と左30°(南西から)の2つにして、8枚を撮りました。好みで選ばないように、角度ごとに次の4つを数えてもらいました。

  • 見える廊下:寄りの範囲の大廊下の床を10cm 四方のマス8,800個に切り、部屋の箱や壁に隠れずに画面に写っているマスの割合
  • 見える輪:その時刻の前10秒に出た問題の輪5個のうち、中心が隠れていない数
  • ロボット:100秒(501コマ)のうち、白い筒の上の面が見えているコマの割合
  • 人の見分け:廊下に立つ人の筒が、画面で何画素の高さになるか。真上に近いほど低くなり、立体に見えなくなる
向き見下ろす見える廊下見える輪ロボットが見える人の高さ(足元〜頭の線)
右30°60°82.5%2/542.3%56.1画素(45.6)
右30°67.5°88.9%4/541.7%47.8画素(34.6)
右30°75°93.5%5/541.3%39.2画素(23.2)
右30°82.5°98.4%5/541.3%30.5画素(11.7)
左30°60°79.9%2/544.7%56.1画素(45.6)
左30°67.5°87.5%4/548.5%47.8画素(34.6)
左30°75°93.1%5/549.7%39.2画素(23.2)
左30°82.5°98.3%5/549.9%30.5画素(11.7)

ロボットが見える割合が4〜5割なのは、ロボットが途中で西の縦廊下へ曲がって寄りの範囲から出ていくためです。範囲の中にいる間に壁で隠れたのは、左30°・60°の11コマと67.5°の1コマだけでした。

寄りの角度8枚。行が向き(右30°・左30°)、列が見下ろす角度(60°〜82.5°)。それぞれの下に4つの数

75°で、問題の輪は5個すべて見え、廊下も9割以上見えます。82.5°にすると廊下はほぼ全部見えますが、人の足元から頭までの線が12画素ほどになり、立った筒が丸い点に近づきます。真上の絵とほとんど変わらなくなるので、立体にした意味が薄れます。向きは、ロボットが画面の中にいる時間が長く、待合の長いすが画面の右に入ってどこの廊下か分かる左30°にしました。

  • ねらい:廊下の両側が部屋になっている病院で、問題が起きた所を壁に隠さずに見せる
  • 変わったこと:寄りの見下ろす角度を配膳の60°から75°に変え、向きを左30°にした
  • 見込める効果:見える廊下が79.9%から93.1%に、見える問題の輪が5個中2個から5個に増えた(同じ時刻・同じ場所で測った値)。病院の人が動画で問題の場面を見落としにくくなる見込み
決めた寄り(左30°・75°見下ろし)。白い筒がロボット、赤い枠が速いままのひやり、黄色が患者、青がスタッフ

引きは廊下と待合に絞り、ふだんは西半分を使う

引きは、全長(廊下と待合だけ。x −0.5〜120.5m・z 12.5〜31.5m)と、西半分(積む所・人の多い区間・待合・西の縦廊下。x −0.5〜72m)の2つの範囲で、真上・60°・75°を撮りました。

引き6枚。行が範囲(全長・西半分)、列がカメラ(真上・60°見下ろし左30°・75°見下ろし左30°)

範囲を絞っても、全長は廊下が120m あるので細い帯になり、人は点にしか見えません。西半分の75°なら、積む所から人の多い区間、待合までが1画面に入り、患者・スタッフ・車いすも見分けられます。ふだんの引きは西半分・左30°・75°にし、全長は、ロボットがどの道を走るかを見せたいときなど、ごくたまに使うことにしました(エイイチの決定)。

決めた引き(西半分・左30°・75°見下ろし)。左下の白い輪がロボット

色の既定は A にし、B・C は引数で残しました。依頼140 でも、見た目を入れた状態で前と同じ回を回し、記録7つが依頼138・139 と1バイトも違わないことを確かめています。依頼139 では問題の輪を床から0.2m 浮かせて描いていて、60°では床の上で約0.12m ずれていたので、依頼140 で床の高さ0に直しました。

依頼140 の依頼文(引きを廊下に絞り寄りの見やすい角度を探る)

---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 150
---
# 依頼140:病院の立体の見た目で、引きを廊下と待合に絞り、寄りの見やすい角度を探る

依頼139 の報告(claude_code_reports/20261110_hospital_139.txt)を見て、エイイチと決めたこと(2026-11-10):
1 色は A(ミント×木目)にする。-h139Look on のときの既定の色を A にする(B・C は引数で残す)
2 決めてほしいこと1:待合の床の差し色 #E4CFAA はこのままでよい
3 引きはフロア全体(120×60m)ではなく、廊下と待合が入る範囲に絞る(全体だと灰色の箱ばかりで、人が点にしか見えないため)
4 決めてほしいこと2:斜めの寄りで廊下の手前半分が部屋の壁に隠れる件は、見やすい角度を探って決める。今回は角度を変えたサンプルを並べるだけで、どれかに決めない
5 決めてほしいこと3:建てていない部屋を1つながりの灰色の箱で描くのは、このままでよい
6 決めてほしいこと4:ストレッチャーが写っていないのは、このままでよい

**今回も見た目と撮り方だけ。試算の数え方・人やロボットの動き・記録の中身は1行も変えない。**
**配膳の場面・配膳の実行ファイル・配膳の台帳、配膳と共通の部品には触らない。** 変えるのは Assets/ServiceSim/Hospital/ の中だけ。部屋の箱・壁の高さ(2.4m)は配膳のベースのまま変えない。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 正(読むもの)
- params の md5 f72d3810674b31dadd9dfa4ce0141178、h0・h0b は依頼139 と同じ(違えば回さずに報告して終わる)
- 撮る回・時刻は依頼139 と同じ(廊下だけ・0.6m/秒・種0、静止画は 8862 秒、動画は 8845〜8945 秒)。比べられるように変えない

## 始める前に確かめること(違えば回さずに報告して終わる)
作業場所の保留 0(cs:116 のあと)・Unity と回し係が動いていない・KIOXIA がマウント済み・上の md5

## 1. 引きを絞る(真上と斜め)
範囲は2つ作って並べる:
- 全長:x -0.5〜120.5、z 12.5〜31.5(職員の中廊下・待合・外来の大廊下・救急室の前までの廊下すべて)
- 西半分:x -0.5〜72、z 12.5〜31.5(積む所・人の多い区間・待合・西の縦廊下。青のロボットの行きの前半)
それぞれ、真上(90°)と、斜め(左30°)を 60° と 75° の2つ = 2範囲 × 3 = 6枚。
距離の決め方は依頼139 の camfit139.py と同じ(範囲の四隅が画面に入るいちばん近い距離・余白3%)。
引きのロボットの白い輪は今のまま付ける。

## 2. 寄りの角度を探る
寄りの場所は依頼139 と同じ(x9〜31・z26〜32。問題がいちばん多い所)。距離は角度ごとに同じ決め方で合わせる。
- 見下ろす角度:60°・67.5°・75°・82.5° の4つ
- 向き:右30°(依頼139 と同じ南東から)と、左30°(南西から)の2つ
- = 8枚。依頼139 の右30°・60°と同じ値の1枚は、依頼139 と同じ絵になるはずなので、並べて確かめる
- 角度ごとに数で比べる表を作る(見た目の好みではなく、比べるための数):
  - 見える廊下の割合:範囲の中の大廊下の床(z27〜31)のうち、部屋の箱・壁に隠れずに画面に写っている面積の割合
  - 見える輪の数:この時刻の前10秒に出ている輪(問題の起きた所)のうち、中心が隠れていないものの数/全部の数
  - ロボットが見えるか:ロボットの白い円柱の上の面が隠れていないか(8845〜8945 秒のうち見えている時間の割合)
  - 人の見分け:カプセル1つが画面で何画素の高さになるか(真上に近いほど低くなる。立体に見えるかの目安)
- 動画:寄りの右30°・左30° それぞれ 4角度、計8本(各 20秒・店の時刻の5倍・パネル付き・色A)

## 3. 並べた図
- 引きの6枚を1枚に並べた図(行=範囲、列=真上・60°・75°)
- 寄りの8枚を1枚に並べた図(行=右30°・左30°、列=角度)。それぞれの絵の下に 2 の4つの数を小さく書く
- 出力:/Volumes/KIOXIA/r2r2r-data/service_sim/unity/hospital/20261110_look140/。並べた図2枚は iCloud の …/サービスロボット導入シミュレーション/hospital/look140/ にも写す

## 4. 確かめ(違えば止める)
- 色の既定を A にした実行ファイルで、依頼139 の check139a と同じ回(時間で切替・0.6m/秒・種0)を -h139Look on で回し、記録7つの md5 が依頼138・139 と1バイトも違わないこと
- 瞬間移動 0
- 並べた図を自分で開き、文字や絵が切れていないか、輪がずれて描かれていないか(角度を変えても輪が床の正しい所に重なるか)を見る。見て直したことを書く

check-in(保留0)して、病院の実行ファイルを Builds/hospital140/ に作る。前の実行ファイルは残す。

## 報告
claude_code_reports/20261110_hospital_140.txt に:始める前の確かめ、色の既定の直し、引き6枚と寄り8枚のカメラの値(角度・方位・注視点・距離・カメラの高さ)、2 の数の表、4 の確かめ、出力の場所、check-in の番号、決めてほしいこと(直し方の候補は作らない。どの角度がよいかは書かなくてよい)。
**報告の最後の1行は必ず次のどれか**:「判定:合格」/「判定:止めた(決めてほしいことあり)」/「判定:失敗」

依頼140 の結果(依頼箱の結果の全文)

# 結果:20261110_140_病院の立体の見た目で引きを廊下に絞り寄りの見やすい角度を探る

- 状態:完了
- 始めた時刻:2026-11-10 08:44
- 終わった時刻:2026-11-10 09:00(16分)
- 作業フォルダ:/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき:作業フォルダで `claude --resume ae0a1dd2-0e55-4529-a991-df81fe01430f`

## Claude Code の報告

**やったこと**
- 始める前の確かめは4つとも合いました。作業場所の保留は 0(cs:116 のあと)、Unity と回し係は止まっていました。KIOXIA はつながっていて、params の md5 f72d3810… と h0・h0b も依頼139 と同じでした。
- 色の既定を A にしました。引数 -h140Scheme A|B|C|all を足し、既定は A です。静止画も既定では A だけを撮ります。B・C はこの引数で選べ、all にすると依頼139 と同じく3案とも撮ります。
- check-in して cs:117 になり、実行ファイルを Builds/hospital140 に作りました。前の実行ファイルは残しています。
- 引き6枚を撮りました。範囲は全長と西半分の2つで、それぞれ真上・左30° 60°・左30° 75° です。
- 寄り8枚を撮りました。向きは右30°と左30°、見下ろす角度は 60°・67.5°・75°・82.5° です。
- 寄りの動画を8本作りました。各 20 秒・店の時刻の5倍・パネル付き・色A です。
- 4つの数の表、並べた図2枚を作りました。

**結果**
- 依頼139 の右30°・60°と同じ値の1枚は、Unity で撮った元の画像が依頼139 と md5 まで同じでした。
- 寄りの数の表(60° → 67.5° → 75° → 82.5° の順):

| 数 | 右30° | 左30° |
|---|---|---|
| 見える廊下 | 82.5 → 88.9 → 93.5 → 98.4% | 79.9 → 87.5 → 93.1 → 98.3% |
| 見える輪(5個のうち) | 2 → 4 → 5 → 5 | 2 → 4 → 5 → 5 |
| ロボットの上の面が見える | 41〜42% | 45〜50% |
| 人の高さ(画素) | 56.1 → 47.8 → 39.2 → 30.5 | 同じ |

- ロボットが見える割合が低いのは、8877 秒ごろに寄りの範囲から出ていくためです。範囲の中にいる間に箱に隠れたのは、左30°の 60° で 11 コマ、67.5° で 1 コマだけでした。
- 確かめの回(時間で切替・0.6m/秒・種0)は、記録7つの md5 が依頼138・139 と1バイトも違いませんでした。瞬間移動はロボット・人とも 0 です。
- 並べた図2枚を開いて見ました。文字や絵は切れていません。
- 見て直したこと:床の上の面は高さ 0 なのに、依頼139 では輪を 0.2 m 上に描いていました(60° で約 0.12 m ずれる)。0 に直し、床の角に印を重ねた確かめの図で、絵の床の角と合うのを見ました。
- 隠れた所の輪は、依頼139 と同じく箱の上に重なって描かれます。今回は変えていません。
- 出力は KIOXIA の …/hospital/20261110_look140/ です。並べた図2枚は iCloud の …/hospital/look140/ にも写し、md5 が合うのを確かめました。報告は claude_code_reports/20261110_hospital_140.txt に書きました。

**変えたファイル**
- Assets/ServiceSim/Hospital/HospitalLook.cs
- Assets/ServiceSim/Hospital/HospitalRun.cs(引数を読む所だけ)
- Assets/ServiceSim/Hospital/Editor/HospitalSetup.cs(出力先を hospital140 に)

**決めてほしいこと**
なし(寄りの角度は依頼のとおり、並べただけで決めていません)

判定:合格

依頼140 の報告(claude_code_reports/20261110_hospital_140.txt の全文)

04_sec02.txt7,955字・130行・text
依頼140:病院の立体の見た目で、引きを廊下と待合に絞り、寄りの見やすい角度を探る(2026-11-10)
====================================================================

--------------------------------------------------------------------
0. 始める前の確かめ(すべて合格)
--------------------------------------------------------------------
  作業場所の保留:0(最後の check-in は cs:116)
  Unity・回し係:動いていない(Unity Hub だけ)。KIOXIA:マウント済み
別のタブで開く保存

near_metrics140.csv(寄り8枚の4つの数)

cam,yaw,pitch,tx,tz,dist,cam_h,cam_x,cam_z,hall_visible_pct,hall_inframe_pct,rings_visible,rings_total,rings_hidden_ids,robot_top_center_visible_pct,robot_top_all_visible_pct,robot_frames,robot_inframe_frames,robot_hidden_inframe_frames,person_px,person_axis_px
n_l30_60,30.0,60.0,19.31,29.05,27.5,23.82,12.44,17.14,79.9,100.0,2,5,1202 1204 1205,44.7,37.3,501,235,11,56.1,45.6
n_l30_675,30.0,67.5,19.52,29.12,27.8,25.68,14.2,19.91,87.5,100.0,4,5,1204,48.5,44.1,501,244,1,47.8,34.6
n_l30_75,30.0,75.0,19.71,29.14,27.9,26.95,16.1,22.89,93.1,100.0,5,5,,49.7,47.7,501,249,0,39.2,23.2
n_l30_825,30.0,82.5,19.85,29.07,28.0,27.76,18.02,25.91,98.3,100.0,5,5,,49.9,49.5,501,250,0,30.5,11.7
n_r30_60,-30.0,60.0,20.69,29.05,27.5,23.82,27.57,17.14,82.5,100.0,2,5,1202 1204 1205,42.3,37.9,501,212,0,56.1,45.6
n_r30_675,-30.0,67.5,20.48,29.12,27.8,25.68,25.8,19.91,88.9,100.0,4,5,1204,41.7,40.9,501,209,0,47.8,34.6
n_r30_75,-30.0,75.0,20.29,29.14,27.9,26.95,23.9,22.89,93.5,100.0,5,5,,41.3,40.7,501,207,0,39.2,23.2
n_r30_825,-30.0,82.5,20.15,29.07,28.0,27.76,21.98,25.91,98.4,100.0,5,5,,41.3,40.9,501,207,0,30.5,11.7

cams140.py(引き6つ・寄り8つのカメラ)

#!/usr/bin/env python3
"""依頼140:引き6・寄り8のカメラ(距離は依頼139 の camfit139.py と同じ決め方)。-h139Cam の引数を出す"""
import os, sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from camfit139 import fit

WIDE = [("full", "全長", -0.5, 120.5, 12.5, 31.5), ("west", "西半分", -0.5, 72.0, 12.5, 31.5)]
NEAR = (9.0, 31.0, 26.0, 32.0)
NEAR_PITCH = [60.0, 67.5, 75.0, 82.5]


def cams():
    out = []
    for key, ja, x0, x1, z0, z1 in WIDE:
        for yaw, pitch, tag in ((0.0, 90.0, "top"), (30.0, 60.0, "l30_60"), (30.0, 75.0, "l30_75")):
            tx, tz, d = fit(yaw, pitch, x0, x1, z0, z1)
            out.append(("w_%s_%s" % (key, tag), yaw, pitch, round(tx, 2), round(tz, 2), round(d, 1)))
    for yaw, side in ((-30.0, "r30"), (30.0, "l30")):
        for p in NEAR_PITCH:
            tx, tz, d = fit(yaw, p, *NEAR)
            out.append(("n_%s_%s" % (side, ("%g" % p).replace(".", "")), yaw, p, round(tx, 2), round(tz, 2), round(d, 1)))
    return out


if __name__ == "__main__":
    for n, yaw, p, tx, tz, d in cams():
        print("%s,%g,%g,%g,%g,%g,40,2720,2160" % (n, yaw, p, tx, tz, d))

vis140.py(見える廊下・輪・ロボット・人の高さを数えるコード)

05_sec02.py.txt7,128字・159行・python
#!/usr/bin/env python3
"""依頼140:寄りのカメラごとに、比べるための数を出す(見た目の好みではない)。

  python3 vis140.py <回のフォルダ> <出力.csv>

隠れの判定:カメラの位置から点までの線分が、動かない物の箱(look_static.csv)のうち「部屋の箱・壁」
(group rooms の全部・waiting の WallBack*/WallWest・world の高さ 0.5 m 超えのもの)を通るかで決める。
長いす・カウンター・座った人・人・ロボットは隠すものに入れない。画面の外(0≤u≤w・0≤v≤h の外)も「写っていない」に数える。
別のタブで開く保存

pan140.py(輪とパネルを重ねるコード。輪を床の高さ0に直した版)

06_sec02.py.txt11,952字・278行・python
#!/usr/bin/env python3
"""依頼140(依頼139 の pan139.py をもとに、カメラの名前を cams140.py から取るようにした)。依頼139:病院の立体の見た目の静止画・動画に、問題の輪と右のパネルを付ける(1920×1080)。

左 1360×1080=Unity で撮った 2720×2160 を縮めたもの。輪は床の上(高さ FLOOR_Y)に、cam_{name}.json の行列で画素に移して描く
(依頼136 の vid136.py と同じ色・同じ印。10 秒出す)。引きのカメラ(top_wide・obl_l30_wide)だけ、ロボットの位置に白の輪を足す。
右 560=配膳のパネル(rec_lp_20261105/p0_round/after/round_after_panel.png)と同じ作り:白地・小さな見出し・大きな時刻・
「ロボット・スタッフがしていること」・数。中身は病院の値(ロボットの状態・助けに出ているスタッフ・大廊下の人数・撮り始めからの問題1〜5)。
別のタブで開く保存

sheet140.py(並べた図を作るコード)

07_sec02.py.txt4,047字・81行・python
#!/usr/bin/env python3
"""依頼140:並べた図2枚。引き6枚(行=範囲・列=真上・60°・75°)と寄り8枚(行=右30°・左30°・列=角度。絵の下に4つの数)

  python3 sheet140.py <出力フォルダ>   (stills/ のパネル付きの絵と sheets/near_metrics140.csv を読む)
"""
import csv, os, sys
from PIL import Image, ImageDraw, ImageFont
別のタブで開く保存

run140.sh(依頼140 の回し方)

#!/bin/bash
# 依頼140:check=依頼139 の check139a と同じ回(時間で切替・0.6・種0)を cs:117 の実行ファイル・-h139Look on(色の既定 A)で。
# wide=引き6枚(静止画だけ)。near=寄り8枚(静止画+動画 8845〜8945 秒・0.2 秒ごと)。撮る回は廊下だけ・0.6・種0(依頼139 と同じ)
cd /Users/shimazueiichi/Robotics_UX/ServiceSim
O=/Volumes/KIOXIA/r2r2r-data/service_sim/unity/hospital/20261110_look140
EXE=Builds/hospital140/HospitalSim.app/Contents/MacOS/ServiceSim
CS=$(python3 -c "import json;print(json.load(open('Builds/hospital140/build_info.json'))['unity_cs'])")
COMMON=(-batchmode -h127Speed 0.6 -h127Seed 0 -h127Out $O/runs -h127Cs $CS -h136Mode day -h138Mode 138 -h139Look on)
WCAMS=(); NCAMS=()
while read -r c; do
  case "$c" in w_*) WCAMS+=(-h139Cam "$c");; n_*) NCAMS+=(-h139Cam "$c");; esac
done < <(python3 $O/tools/cams140.py)
case "$1" in
  check) $EXE "${COMMON[@]}" -h127Label check140a -h136Plan switch -logFile $O/logs/check140a.log; echo "check exit $?" ;;
  wide) $EXE "${COMMON[@]}" -h127Label wide140 -h136Plan hall "${WCAMS[@]}" -h139StillAt 8862 -h139EndAfterShots on -logFile $O/logs/wide140.log; echo "wide exit $?" ;;
  near) $EXE "${COMMON[@]}" -h127Label near140 -h136Plan hall "${NCAMS[@]}" -h139StillAt 8862 -h139VidFrom 8845 -h139VidTo 8945 -h139VidStep 0.2 -h139EndAfterShots on -logFile $O/logs/near140.log; echo "near exit $?" ;;
esac

作業ログ ― 外来の廊下の車いす・杖の人の割合を、公開統計から推計する

病院の廊下で人を数えた公開データは見つからなかった

まず、病院の外来の廊下や玄関で、車いすや杖の人が何人通ったかを数えた調査を探しました。外来の待合の座席を観察した建築の研究や、外来の満足度調査はありましたが、廊下を通る人のうちの車いす・杖の割合を数字で出したものは、読める形では見つかりませんでした。そこで、全国の統計を掛け合わせて推計する形にしました。

掛け合わせた3つの数

廊下の人のうちの割合 = 来院者の割合 × 来院者のうち患者の割合 × 患者のうち65歳以上の割合 × 65歳以上で道具を使う割合

数値出典
廊下の人のうち来院者90%
残りの10%はスタッフ(前の回のまま)
来院者のうち患者約2/3
仮置き(残りは付き添い)。図解のつまみで1/2〜3/4に動かせる
患者のうち65歳以上50.8%
患者調査 2023。外来の推計患者 727.5万人のうち65歳以上 369.8万人(75歳以上は 227.5万人で31.3%)
65歳以上で車いすを使う1.96%〜6.1%
下=介護保険の車いすの貸与 70.99万件(2024年4月)÷ 65歳以上 3,625万人、上=米国 NHATS の 6.1%
65歳以上で杖・歩行器を使う3.41%〜28.0%
下=介護保険の歩行器 94.26万件+歩行補助つえ 29.34万件 ÷ 3,625万人、上=NHATS の杖 16.4%+歩行器 11.6%

患者調査は、厚生労働省が3年ごとに、全国の病院・診療所を受診した患者を調べる統計です。2023年10月の指定した1日に、どんな年齢の患者が何人受診したかが分かります。

介護保険の貸与の件数は、厚生労働省の介護保険制度における福祉用具の資料にある、介護給付費等実態統計の種目ごとの件数です。介護保険で車いすや歩行器を借りている人の数に近いものですが、自分で買った人は入りません。杖は買う人が多いので、杖の数はかなり少なく出ます。65歳以上の人口は総務省の統計からみた我が国の高齢者(2024年9月)の値です。

NHATS(National Health and Aging Trends Study)は、米国の65歳以上を毎年追いかけている全国調査です。Gell らの分析(2015年)では、65歳以上の4人に1人以上が何かの移動の道具を使い、杖16.4%・歩行器11.6%・車いす6.1%でした。家の中だけで使う人も含み、杖と歩行器の両方を使う人を重ねて数えているので、廊下にいる人の割合としては多めに出ます。

推計の幅は、車いす約0.6〜1.9%、杖・歩行器約1.0〜8.5%

患者の割合を2/3にすると、廊下の人に掛かる数は 0.9 × 2/3 × 0.508 = 約0.305 です。

下(日本の介護保険の貸与)上(米国 NHATS)
車いす
0.305 × 1.96% = 0.60%
0.305 × 6.1% = 1.86%
杖・歩行器
0.305 × 3.41% = 1.04%
0.305 × 28.0% = 8.54%

前の回の各10%は、上の値と比べても車いすで5倍以上、杖でも1割以上多い値でした。前の回では、ロボットが止まりきれなかった相手の多くが車いすだったので、そのぶん問題の回数が多めに出ていたことになります。

この幅を出す途中で、一度「車いす約1〜2%・杖と歩行器約3〜9%」と伝えてから、計算の式を書き直しました。杖の下側の3%は、日本の貸与の値を使うと約1%になり、車いすの下側も約0.6%でした。選んだ値(車いす1%・杖の人3%)は、書き直した幅の中にも入っています。

選んだ値:車いす1%・杖の人3%

推計の幅のうち、車いすは真ん中より少し下、杖の人は下寄りの値を、エイイチが選びました。杖の人には、歩行器や押し車の人も含めます。歩く患者・付き添いは86%、スタッフは10%のままです。

  • ねらい:根拠のない仮置きで多めに出ていた問題の回数を、公開統計から見て無理のない人の内訳に直す
  • 変わったこと:廊下の人の内訳を、車いす10%・杖の人10%から、車いす1%・杖の人3%に変えた。根拠の欄は「仮置き」から「公開統計からの推計」になり、計算の式と出典を前提の表に書いた
  • 見込める効果:車いすの前を横切る・車いすに止まりきれない、といった問題の回数が、前の回より減る見込み。どれだけ減るかは、新しい内訳で Unity を回し直して確かめる(まだ回していない)

値は、サイトの前提の表(p2m-site の tools/hospital_sim/assumptions.json)に入れ、Unity が読む条件(hospital-unity-params.json)を書き出し直しました。Unity の側はこの条件を読むだけなので、Unity のコードは変えていません。現場の廊下で数えた値が手に入ったら、それで置き換えます。

tools/hospital_sim/assumptions.json の people_mix(入れ直した後の全文)

"people_mix": {
 "value": {
  "歩く患者・付き添い": 0.86,
  "杖の人": 0.03,
  "車いす": 0.01,
  "スタッフ": 0.1
 },
 "unit": "割合",
 "what": "人の内訳(外来の大廊下)。杖の人には歩行器・押し車の人も含める",
 "basis": "公開統計からの推計",
 "source": "外来の大廊下の人のうち、スタッフ10%を除いた9割を来院者とし、その2/3を患者(仮置き)、患者の50.8%を65歳以上(患者調査 2023 の外来の推計患者)とした(係数 0.9×2/3×0.508=約0.305)。これに65歳以上で道具を使う割合を掛けた。車いす:下=介護保険の車いすの貸与 70.99万件(介護給付費等実態統計 2024年4月)÷65歳以上 3,625万人(総務省 2024年9月)=1.96%、上=米国 NHATS 6.1% → 廊下の約0.6〜1.9%。杖・歩行器:下=介護保険の歩行器と歩行補助つえの貸与 123.6万件÷3,625万人=3.41%(杖は買う人が多く、少なく出る)、上=NHATS の杖16.4%+歩行器11.6%(重なりを引いていないので多めに出る)→ 廊下の約1.0〜8.5%。幅の中から、エイイチが車いす1%・杖の人3%を選んだ(2026-11-10)。前は車いす・杖とも10%(根拠なしの仮置き・LOG477)",
 "n": null,
 "updated": "2026-11-10",
 "range": {
  "車いす": [
   0.006,
   0.019
  ],
  "杖の人": [
   0.01,
   0.085
  ]
 },
 "note": "病院の廊下で数えた公開データは見つからなかった。現場で数えられたら置き換える"
}

hospital-unity-params.json の変わった所(git diff)

diff --git a/tools/hospital_sim/hospital-unity-params.json b/tools/hospital_sim/hospital-unity-params.json
index 40bcda0..43d32b9 100644
--- a/tools/hospital_sim/hospital-unity-params.json
+++ b/tools/hospital_sim/hospital-unity-params.json
@@ -65,9 +65,9 @@
    "混んでいる": 60
   },
   "mix": {
-   "歩く患者・付き添い": 0.7,
-   "杖の人": 0.1,
-   "車いす": 0.1,
+   "歩く患者・付き添い": 0.86,
+   "杖の人": 0.03,
+   "車いす": 0.01,
    "スタッフ": 0.1
   },
   "stretcher_per_h": 2
@@ -2688,7 +2688,7 @@
  "basis": {
   "speeds": "決まり",
   "crowd_people": "仮置き",
-  "people_mix": "仮置き",
+  "people_mix": "公開統計からの推計",
   "stretcher_per_h": "仮置き"
  }
 }
\ No newline at end of file

残したことと、次に回すこと

  • 前の回(LOG477)の Unity の数は、人の内訳を直す前のもの。新しい内訳(車いす1%・杖の人3%)で回し直し、問題の回数がどう変わるかを見る
  • 回し直すときは、決めたカメラ(寄り 左30°・75°、引き 西半分 左30°・75°)で動画も撮る
  • 依頼138 で Claude Code から聞かれた3つ(積む所で待っている間のひやりの数え方、16:30 より前に戻った回の終わり方、16:30 以降のストレッチャーと最後の便を待つ上限)は、まだ決めていない
  • 来院者のうち患者の割合(2/3)は仮置き。外来の廊下で人を数えた値が手に入れば、内訳ごと置き換える
  • 寄りの角度は、病院の廊下(両側が部屋)では75°がよかった。配膳のファミレスの60°は変えていない

出典