---
title: "サービスロボット導入シミュレーション Log#47 | 現場の速さで見る、看護師と搬送ロボット"
slug: hospital-robot-nurse-3d-scenes-at-real-speed
date: 2026-11-13
day: 503
meta_description: "Unity の3DCGで、看護師が搬送ロボットのハコブくんに薬を積む・受け取る動きを現場の速さに縮め、幅1.8mの病棟の廊下ですれ違う場面を足した。3つの場面をサイトで動画と説明つきで見られるようにした。"
tags: [サービスロボット導入シミュレーション, 搬送ロボット, 病院, 看護師, 3Dモデル, Unity, 受け渡し, すれ違い, シミュレーション]
series: "導入シミュレーション"
---

Unity の3DCGで、看護師が搬送ロボット「ハコブくん」の引き出しに薬を積む・受け取る動きは、引き出しが開き始めてから看護師が体を起こすまでを約9秒から約3.6秒に縮めると、現場の速さに見えるようになった。幅1.8mの病棟の廊下ですれ違う場面も足し、看護師がよろけるとハコブくんは0.19秒で減速を始めて止まり、何もなければ0.6m/秒のまま通り過ぎる。**どれも実物ではなくシミュレーションの中の3DCGで、看護師とハコブくんのやり取りを見せる場面が、薬を積む・受け取る・廊下ですれ違うの3つそろった。**

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

- 搬送ロボットと人のやり取りを、4本の動画で見せられるようになった。①薬剤部で積む、②病棟で受け取る、③-a 廊下でふつうに通り過ぎる、③-b 看護師がよろけてハコブくんが止まる
- 4本を、[サービスロボット導入シミュレーションのページ](https://pixelstomotors.com/series8#scenes) の「3Dで見る現場の場面」で、場面ごとの説明と一緒に見られるようにした。説明の「流れ」の行を押すと、動画がその時刻へ移る
- ハコブくんが人をよけるかどうかを、場面ごとに手で動かすのではなく、1つの決まり（横のすき間・よろけ・止まったあと走り出す距離）で動かすようにした。同じ決まりで2本の場面が分かれる
- 時間：この回は Unity への依頼を3本（依頼173〜175）出し、18時すぎから21時すぎまでかかった。そのうち2回は、Claude Code の接続が途中で切れて止まった（作業の中身ではない）。前のやり方と比べられる時間は測っていない

困っていたのは、前の回（[LOG499](https://pixelstomotors.com/record/nurse-hospital-robot-handover-without-clipping)）で引き出しをすり抜けなくなった動画でした。看護師は、引き出しが開いてから向き直り、1.7秒ほど何もせず立ってから、ゆっくりかがんで箱を置いていました。手順は合っていても、慣れた看護師の動きには見えません。動画を見たエイイチからは、細かい所より先に速さを、と指示がありました。

> 細かいところはいいです。看護師の動きを現実のスピード感に合わせてください（ドロワー開いてからはもっとスピーディーに動くはずです）

| 何を | なぜ | どうなったか |
|---|---|---|
| 看護師の動きの時刻を、現実の速さに縮めた（依頼173） | 引き出しが開いてから約9秒かかり、立って待つ時間もあった | ①3.57秒・②3.79秒。動画は ①34秒→27.6秒、②39.5秒→34.1秒 |
| 外れた2つを直し、静止画と保存を済ませた（依頼174） | 173 は撮り終えたあと接続が切れ、左手首36°・1コマ7.5cm が残った | 左手首23°・1コマ4.2cm。当たり0コマ。合格 |
| 幅1.8mの廊下で、すれ違う場面を2本作った（依頼175） | 3つめの場面。人とロボットが同じ通路を使う所を見せる | ③-a はすき間0.52mで減速なし。③-b はよろけから0.19秒で減速して止まる |
| サイトの /series8 に「3Dで見る現場の場面」を足した | 4本の動画を、どんな場面かの説明と一緒に見てもらうため | 場面を選ぶ・角度を切り替える・流れの行で時刻へ移る |

【図解】LOG503_real_speed_and_corridor_rule.html

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

【バナー】serving-robot-one-less-staff


## 作業ログ ― 引き出しが開いてからの看護師の動きを、約9秒から約3.6秒に縮めた（依頼173）

依頼173 では、看護師の動きの時刻だけを変えました。立つ所・姿勢の角度・手を伸ばす先・歩き・話しかけ・カメラ・ハコブくんの動きの速さ（引き出しが出てくる1.25秒・閉まるまでの3秒）は、依頼172 のままです。

目安にしたのは、慣れた看護師が、開いたらすぐ手を入れて、すぐ離れる速さです。向き直る3歩を0.9秒、かがむのを0.6〜0.8秒、置く・取るのを0.8〜1.0秒、起き上がるのを0.6〜0.8秒にし、開き始めから起き上がり終わりまでを3.5〜4.5秒に収める、と依頼に書きました。引き出しが出きる前（1.25秒より前）に手を口へ入れない、という条件も付けています。

### 依頼173 で決まった時刻（依頼172 と並べた表）

Claude Code が決めた時刻（times.json）を、依頼172 の台本の時刻と並べました。①は番号の認証が通った時、②はカードの認証が通った時から、引き出しが出始めます。

| 場面 | 動き | 依頼172 | 依頼173・174 |
|---|---|---|---|
| ① 積む | 番号を4回押す | 10.8・11.6・12.4・13.2 秒（0.8秒おき） | 10.15・10.6・11.05・11.5 秒（0.45秒おき） |
| ① 積む | 認証が通り、引き出しが出始める | 13.5 秒 | 11.8 秒 |
| ① 積む | 向き直る | 14.0〜15.1 秒（その後 16.8 秒まで立って待つ） | 12.2〜13.1 秒 |
| ① 積む | かがむ | 16.8〜18.2 秒 | 12.9〜13.65 秒 |
| ① 積む | 箱を置いて手を上げる | 18.2〜21.0 秒 | 13.67〜14.77 秒 |
| ① 積む | 体を起こし終わる | 22.4 秒 | 15.37 秒 |
| ① 積む | 開き始め→起こし終わり | 8.9 秒 | 3.57 秒 |
| ② 受け取る | カードを出してかざす | 12.4 秒に出し、14.7 秒に通る | 12.5〜13.4 秒、13.7 秒に通る |
| ② 受け取る | カードを胸ポケットに戻す | 16.05 秒（引き出しが出たあと） | 13.85〜14.6 秒（出てくる間） |
| ② 受け取る | 向き直る | 16.2〜17.3 秒 | 14.2〜15.1 秒 |
| ② 受け取る | かがむ | 17.3〜18.6 秒 | 14.9〜15.65 秒 |
| ② 受け取る | 箱をつかんで、口から出す | 18.8〜21.5 秒 | 15.72〜16.72 秒 |
| ② 受け取る | 体を起こし終わる | 23.1 秒 | 17.49 秒 |
| ② 受け取る | 開き始め→起こし終わり | 8.4 秒 | 3.79 秒 |

- ねらい：引き出しが開いてからの手順は変えずに、待っている時間をなくし、慣れた人の手の速さにする
- 変わったこと：開き始めから体を起こすまで、①8.9秒→3.57秒、②8.4秒→3.79秒。空いた分だけ、うなずき・話しかけ・見送りを前へずらしたので、動画は①34秒→27.6秒、②39.5秒→34.1秒になった（後ろの動きの骨のずれは①0.000mm・②最大0.647mm）
- 見込める効果：現場の人が見て「遅い」と感じる所が減り、受け渡しの手間がどれくらいかを、動画のまま伝えられる。現場の看護師が実際に何秒でやっているかは、まだ測っていない。観察シートなどで測ったら、この時刻と比べる

### 依頼173 は、撮り終えたあとに Claude Code の接続が切れて止まった

依頼173 は18:02に始まり、18:47に「失敗」で終わりました。報告は1行だけでした。

```
Failed to authenticate. API Error: 403 Attention Required! | Cloudflare
```

KIOXIA の出力を見ると、台本の直し・確かめ・4本の動画までは済んでいて、静止画・iCloud への写し・報告・Unity の保存（check-in）が残っていました。撮れた動画で、確かめの値のうち2つが基準から外れていました。

| 確かめ | 基準 | 依頼173 |
|---|---|---|
| ① 箱から手を上げる間の左手首の曲がり | 25° 以内 | 35.89°（14.767 秒） |
| 1コマで骨が動く量 | 6 cm 以内 | ① 7.51 cm（13.9 秒） |

速さは、撮れた横からの動画（実際の速さ）でエイイチに見てもらい、この速さでよいと決まりました。


## 作業ログ ― 外れた2つを直して仕上げた（依頼174）

依頼174 は、依頼173 の時刻（times.json）を変えずに、外れた2つだけを直し、静止画・報告・check-in を済ませる依頼です。

### 依頼174 の1回めも、同じ接続のエラーで止まった

依頼174 は19:01に始まり、19:18に同じエラー（認証で403）で止まりました。2回続いたので、Mac の Claude Code が接続できない状態を疑い、Mac でログインし直すようエイイチに頼みました。エイイチから、置き直せば動くはずだと言われ、依頼174 を同じ中身で「新規」に置き直しました。19:31に始まり、19:38に終わりました。1回めで台本の直し・確かめ・コマ撮りまで済んでいたので、2回めは確かめ直しと仕上げだけでした。前の2回は、始めてすぐではなく17分・44分動いたところで止まっていて、一時的なエラーだったと見ています。

### 左手首は36°から23°に、13.9秒の跳ねは消えた

直したのは①の台本の2か所だけです。

- 左手首：曲がりの上限22°を、手を上げ終わる14.77秒まで保つようにした（依頼173 では14.62秒で外していた）。手の位置と時刻は変えていない
- 13.9秒の跳ね：使わない右手を太ももへ運ぶつなぎを、0.35秒から0.95秒に延ばした。切りかわる時刻は変えていない

| 項目 | ① 積む | ② 受け取る |
|---|---|---|
| 当たったコマ・すり抜け | 0・0 | 0・0 |
| 体と引き出しの一番近い距離 | 1.10 cm | 1.53 cm |
| 頭と画面の距離の最小 | 5.59 cm | 10.85 cm |
| つなぎ目の1コマの骨の動き | 4.21 cm | 2.84 cm |
| 手の速さの最大 | 1.472 m/秒 | 1.495 m/秒 |
| 手が離れてから閉まり始めるまで | 3.000 秒 | 3.000 秒 |
| 番号4回の指先とボタンの中心 | 最大 0.56 cm | - |
| 箱の底とトレー | 0.18 cm | - |
| 足のすべり | 0.00 cm | 0.00 cm |
| 左手首の曲がり（手を上げる間） | 23.33°（依頼173 は 35.89°） | - |

依頼173 からある、1コマで6cmを少し超えて動く所が3か所残っています（①15.2秒の左の前腕6.57cm、②16.17秒の左の親指6.11cm、②16.87〜16.9秒の右の前腕6.45cm）。直す対象に入れていなかったので、そのままにしました。

【画像】LOG503_01_stills174.jpg 依頼174 の静止画。左上は①で番号を押す所、右上は①で斜め横から上に箱を置く所（横から）、左下は②でカードを画面にかざす所、右下は②で上から箱を取る所（横から）

【画像】LOG503_02_hand_speed174.jpg 依頼174 の手の速さのグラフ。①②とも、手の速さの最大は1.5m/秒に収まっている

【動画】LOG503_10_load.mp4 依頼174 の①積む（本番のカメラ・27.6秒）。カウンターで箱を取り、番号で認証し、引き出しが出てくるとすぐ向き直って上から入れる

【動画】LOG503_11_load_side.mp4 依頼174 の①積むを横から（実際の速さ・6.2秒）。番号を押す所から体を起こすまで

【動画】LOG503_12_receive.mp4 依頼174 の②受け取る（本番のカメラ・34.1秒）。カードで認証し、出てくる間にカードを戻し、上から取って話しかける

【動画】LOG503_13_receive_side.mp4 依頼174 の②受け取るを横から（実際の速さ・5.4秒）。カードをかざす所から体を起こすまで

エイイチは依頼174 の動画を見て、①と②はこの版で完成とした。


## 作業ログ ― 幅1.8mの病棟の廊下で、すれ違う場面を作った（依頼175）

3つめの場面「廊下ですれ違う」は、依頼を書く前に、すれ違い方・廊下の幅・やり取りの3つをエイイチに聞いて決めました。図解の「決めたこと」に、出した案と選んだ答えを並べています。

| 聞いたこと | 出した案 | 選んだ答え |
|---|---|---|
| すれ違い方 | ハコブくんが減速して寄る／止まって待つ／両方が少しずつよける | 下の引用（エイイチが自分で書いた答え） |
| 廊下の幅 | 2.7m（両側に部屋がある廊下）／1.8m（片側に部屋がある狭い廊下） | 1.8m |
| やり取り | 目線と画面の表情だけ／吹き出しで「通ります」／やり取りなし | 目線と画面の表情だけ |

> ハコブくんは看護師が近かったりヨロけたりしたら減速して端に寄る、もしくは止まる。適度な距離、特に何もなければならそのまま通り過ぎる。

この答えを、1つの決まりとして依頼に書きました。場面ごとに「ここで減速する」と手で動かすのではなく、ハコブくんが毎コマ看護師の体を見て、決まりで速さと横の位置を決めます。そうすれば、同じ決まりのまま、何も起きない場面（③-a）と、よろける場面（③-b）が分かれます。

### ハコブくんの決まり（依頼175 の台本の robot_rule）

加速度（速さが1秒あたりどれだけ変わるか）は m/秒² で書いています。0.4m/秒² なら、0.6m/秒から止まるまで1.5秒かかります。

| 項目 | 値 |
|---|---|
| ふつうの速さ | 0.6 m/秒 |
| 減速して寄る時の速さ | 0.3 m/秒 |
| 加速・減速の上限 | 0.4 m/秒² |
| 見る範囲 | 前 5.0 m 以内に来た人 |
| 見てから動くまで | 0.1 秒 |
| 「近い」の線（減速して寄る） | 会うときの横のすき間の予想が 0.4 m より狭い、または人の体が自分の進む帯に入った |
| 止まる | 人がよろけた（腰の横の速さが自分のほうへ 0.25 m/秒より速い、または上体の傾きが速く変わる）、または寄ってもすき間が 0.25 m 取れない |
| 寄る所 | 左の手すり・扉と 5 cm 以上あける |
| 走り出す | 止まったあと、人の体が自分の後ろ 1.0 m 以上離れた |
| にっこり | 人の顔が自分の画面のほうを向いた（10度以内・3.5 m 以内）、または止まったあと人が落ち着いて 0.5 秒。1.5 秒で元の顔に戻る |

- ねらい：ハコブくんが人をよけるかどうかを、場面ごとの演出ではなく、ロボットの側の決まりとして見せる
- 変わったこと：③-a では予想のすき間の最小が0.520mで線に当たらず、ずっと0.6m/秒。③-b ではよろけを見て6.9秒から「止まる」になった
- 見込める効果：決まりの値（線の0.4m・走り出す1.0m・速さ）を変えれば、同じ廊下で「どの値ならどんな場面になるか」を並べて見せられる。病院が知りたい「速くしたら何がどれくらい起こるか」を、病院の1日のシミュレーションの数字と、この寄りの場面の両方で示す下地になる（まだ値を変えて回してはいない）

### ③-a ふつうに通り過ぎる（16秒）

ハコブくんと看護師は廊下の両端から向かい合って進み、それぞれ進む向きの左側を通ります。

| 時刻（秒） | 動き |
|---|---|
| 0.0 | ハコブくんが 0.6 m/秒で走る（最後まで同じ） |
| 0.2〜1.2 | 看護師が歩き出して 1.25 m/秒に |
| 6.733 | 看護師がちらっとハコブくんを見る（すれ違う所の 2.7 m 手前。頭を22度・0.85秒） |
| 7.000 | ハコブくんの画面がにっこり |
| 8.500 | 画面が元の顔に戻る |
| 8.900 | すれ違う。体の横のすき間 0.520 m |

【画像】LOG503_03_pass175.jpg 依頼175 の③-a。左上はすれ違う手前の本番のカメラ、右上は看護師がちらっと見る所（顔の寄り）、左下はハコブくんの画面がにっこりする所、右下はすれ違う所を真上から

【動画】LOG503_14_pass.mp4 依頼175 の③-a ふつうに通り過ぎる（本番のカメラ・16秒）。すき間が十分あるので、ハコブくんは減速しない

【動画】LOG503_15_pass_top.mp4 依頼175 の③-a を真上から（16秒）。左上に2人の体のすき間・ハコブくんの速さ・決まりの状態が出る

### ③-b 看護師がよろけて、ハコブくんが寄って止まる（19秒）

| 時刻（秒） | 動き |
|---|---|
| 6.680 | よろけ始め。右足のつま先が引っかかる（ハコブくんの 3.48 m 手前） |
| 6.867 | ハコブくんが減速を始める（よろけ始めから 0.187 秒） |
| 6.88〜7.46 | たたら2歩。腰が廊下の真ん中へ 0.348 m 流れる |
| 7.73 | 左手のひらを手すりの上に置き、体を手すりの側へ戻す |
| 8.430 | 立て直す（よろけ全部で 1.75 秒） |
| 8.667 | ハコブくんが止まる（減速 1.80 秒・最大 0.400 m/秒²）。手すりとのすき間 5.2 cm |
| 8.800 | ハコブくんの画面がにっこり |
| 9.480 | 看護師がちらっとハコブくんを見る |
| 12.233 | すれ違う（ハコブくんは止まったまま）。体のすき間の最小 0.534 m |
| 13.734 | 看護師の体がハコブくんの後ろ 1.049 m 離れ、ハコブくんが走り出す |

【画像】LOG503_04_stumble175.jpg 依頼175 の③-b。左上は看護師がよろける所、右上は手すりに手を置いて体を戻す所、左下はハコブくんが止まった所を真上から、右下は止まったハコブくんの画面がにっこりする所

【動画】LOG503_16_stumble.mp4 依頼175 の③-b 看護師がよろける（本番のカメラ・19秒）。よろけを見てハコブくんが減速し、止まり、看護師が後ろへ離れてから走り出す

【動画】LOG503_17_stumble_top.mp4 依頼175 の③-b を真上から（19秒）。決まりの状態が「ふつうに走る」から「止まる」に変わる

### 手すりの間は1.68mで、ハコブくんが寄れたのは1.5cmだけだった

壁と壁の間は1.8mでも、両側に手すりが6cm出るので、通れる幅は1.68mです。看護師の体の幅（手まで）0.476m・ハコブくん0.642mで、③-a のすき間0.5mを取ると、両側の手すりとのすき間は合わせて6cmしか残りませんでした。Claude Code は、看護師の腕を4度だけ体へ寄せて（体の幅0.435m）すき間を作りました。そのため③-b でハコブくんが壁の側へ寄れたのは1.5cmだけです。

報告では、寄る様子を見せるなら、廊下を2.0mにする・③-a のすき間を0.4mにする・片側の手すりをなくす、のどれかが要るとしていました。エイイチは動画を見て、寄ったように見えたので、このままでよいとしました。もう1つ、幅1.8mの廊下では看護師の顔とハコブくんの画面が向き合うため、1つのカメラで両方を前から写せず、本番はハコブくんの後ろの上から撮り、目線とにっこりの所だけ寄りに切りかえています。この形もエイイチがよいとしました。


## 作業ログ ― サイトの /series8 に「3Dで見る現場の場面」を足した

3つの場面（4本）を、サービスロボット導入シミュレーションのページ（/series8）の「試算を試す」の下、「記録」の上に置きました。エイイチの指示は、ハコブくんと看護師のやり取りをなるべく全部入れ、動画ごとにどんな場面かを説明するパネルも入れ、見た目はサイトに合わせる、でした。

- 場面を選ぶ列：試算の6つのタブと同じ、黒い帯にカードを並べる形。カードには場面の静止画・番号・名前・一言
- 動画：本番のカメラと、横から（①②）・真上から（③）を切り替えられる。動画は R2 に置き、表紙には場面の静止画を使う
- 説明のパネル：場所・登場・どんな場面か・流れ・見どころ。流れの行には動画の時刻を付け、押すとその時刻へ移る。再生中の行は、行ごと黒く塗って文字を白くする。横からの動画は短い切り出しなので、時刻では移らないようにした
- 公開したあと、再生中の行を左の黒い線で示していた形を見たエイイチから、左だけに線が出る形は好まないので、選ばれている行だけを黒くするよう指示があり、行ごと黒く塗る形に直した
- /series8#scene-stumble のように開くと、その場面から始まる
- スマホでは、場面のカードを1列にし、動画の下に説明のパネルを置く

- ねらい：試算と病院の1日のシミュレーション（丸や四角が動く図）を見た人が、その中の1場面を、人とロボットの姿で確かめられるようにする
- 変わったこと：/series8 に、3つの場面の動画4本（角度を合わせて8本）と説明が入った
- 見込める効果：シミュレーションの数字だけでは伝わりにくい「人がどう受け取り、ロボットがどうよけるか」を、ページの中で見てもらえる。見られたかは、サイトの計測（場面のカードを押した数）で確かめる

### 3Dの場面のコンポーネント（src/components/SimScenes.astro）

```astro
---
// サービスロボット導入シミュレーション（/series8）の「3Dの場面」（2026-11-13・LOG503）
// 看護師と搬送ロボット「ハコブくん」のやり取りを、場面ごとに動画と説明のパネルで見せる。
// 中身は src/data/sim_scenes.json。動画は R2 の /media/。
// 場面を選ぶ → 動画と説明が切り替わる。角度（本番・横から・真上）を切り替えられる。
// 本番と真上の動画では、流れの行を押すとその時刻へ移り、再生中の行に印が付く。
import data from '../data/sim_scenes.json';
import { media } from '../lib/media';
const first = data.scenes[0];
const fmt = (t: number) => `0:${String(Math.floor(t)).padStart(2, '0')}`;
---
<section class="sec s-3d" id="scenes" data-ev-area="scenes"><div class="panel">
  <h2 class="sec-h">3Dで見る現場の場面 | Scenes</h2>
  <p class="sc-lead">{data.title}</p>
  <p class="sc-note">{data.note}</p>

  <div class="sc-picks" role="tablist" aria-label="3Dの場面">
    {data.scenes.map((s, i) => (
      <button type="button" role="tab" class="sc-pick" id={`sctab-${s.id}`} aria-selected={i === 0 ? 'true' : 'false'} aria-controls="sc-stage" data-scene={s.id} data-ev={`3Dの場面:${s.name}`}>
        <img src={media(s.poster)} alt="" loading="lazy" />
        <span class="sc-pick-n">{s.num}</span>
        <b>{s.name}</b><span class="sc-pick-s">{s.short}</span>
      </button>
    ))}
  </div>

  <div class="sc-stage" id="sc-stage" role="tabpanel">
    <div class="sc-video">
      <div class="sc-frame">
        <video id="sc-v" src={media(first.angles[0].src)} poster={media(first.poster)} controls muted playsinline preload="metadata" aria-label={`${first.name}（${first.angles[0].label}）`}></video>
      </div>
      <div class="sc-angles" id="sc-angles" role="group" aria-label="カメラの角度">
        {first.angles.map((a, i) => (
          <button type="button" class="sc-angle" aria-pressed={i === 0 ? 'true' : 'false'} data-angle={a.id}>{a.label}<i>{a.sec}秒</i></button>
        ))}
      </div>
      <p class="sc-angle-note" id="sc-angle-note" hidden></p>
    </div>

    <div class="sc-info">
      <p class="sc-num" id="sc-num">場面 {first.num}</p>
      <h3 class="sc-name" id="sc-name">{first.name}</h3>
      <dl class="sc-meta">
        <div><dt>場所</dt><dd id="sc-place">{first.place}</dd></div>
        <div><dt>登場</dt><dd id="sc-who">{first.who}</dd></div>
      </dl>
      <p class="sc-sit" id="sc-sit">{first.situation}</p>
      <p class="sc-h">流れ<span id="sc-steps-hint">（押すとその場面へ）</span></p>
      <ol class="sc-steps" id="sc-steps">
        {first.steps.map((st) => (
          <li><button type="button" data-t={st.t}><time>{fmt(st.t)}</time><span>{st.text}</span></button></li>
        ))}
      </ol>
      <p class="sc-h">見どころ</p>
      <ul class="sc-points" id="sc-points">{first.points.map((p) => <li>{p}</li>)}</ul>
    </div>
  </div>
  <a class="sc-log" href={data.log.href} data-ev="3Dの場面の記録を開く">{data.log.label} →</a>
</div></section>

<script define:vars={{ scenes: data.scenes.map((s) => ({ ...s, poster: media(s.poster), angles: s.angles.map((a) => ({ ...a, src: media(a.src) })) })) }}>
  const $ = (id) => document.getElementById(id);
  const v = $('sc-v');
  const picks = [...document.querySelectorAll('.sc-pick')];
  const fmt = (t) => `0:${String(Math.floor(t)).padStart(2, '0')}`;
  let scene = scenes[0], angle = scene.angles[0];

  const esc = (s) => s.replace(/[&<>"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c]));
  const setAngle = (a, keepTime) => {
    const t = keepTime && a.timed && angle.timed ? v.currentTime : 0;
    const playing = !v.paused;
    angle = a;
    document.querySelectorAll('.sc-angle').forEach((b) => b.setAttribute('aria-pressed', String(b.dataset.angle === a.id)));
    v.src = a.src; v.poster = a.id === 'main' ? scene.poster : '';
    v.setAttribute('aria-label', `${scene.name}（${a.label}）`);
    if (t) v.addEventListener('loadedmetadata', () => { v.currentTime = t; }, { once: true });
    if (playing) v.play().catch(() => {});
    const note = $('sc-angle-note'); note.hidden = !a.note; note.textContent = a.note || '';
    // 流れの時刻は本番と真上の動画のもの。横からの動画（短い切り出し）では押せないようにする
    const steps = $('sc-steps'); steps.classList.toggle('off', !a.timed);
    $('sc-steps-hint').textContent = a.timed ? '（押すとその場面へ）' : '（本番のカメラの時刻）';
    mark();
  };
  const setScene = (s, push) => {
    scene = s;
    picks.forEach((b) => { const on = b.dataset.scene === s.id; b.setAttribute('aria-selected', String(on)); b.tabIndex = on ? 0 : -1; });
    $('sc-num').textContent = `場面 ${s.num}`; $('sc-name').textContent = s.name;
    $('sc-place').textContent = s.place; $('sc-who').textContent = s.who; $('sc-sit').textContent = s.situation;
    $('sc-points').innerHTML = s.points.map((p) => `<li>${esc(p)}</li>`).join('');
    $('sc-steps').innerHTML = s.steps.map((st) => `<li><button type="button" data-t="${st.t}"><time>${fmt(st.t)}</time><span>${esc(st.text)}</span></button></li>`).join('');
    $('sc-angles').innerHTML = s.angles.map((a, i) => `<button type="button" class="sc-angle" aria-pressed="${i === 0}" data-angle="${a.id}">${esc(a.label)}<i>${a.sec}秒</i></button>`).join('');
    v.pause();
    angle = s.angles[0];
    setAngle(s.angles[0], false);
    if (push) history.replaceState(null, '', `#scene-${s.id}`);
  };
  // 再生中の行に印を付ける
  const mark = () => {
    const items = [...document.querySelectorAll('#sc-steps li')];
    let k = -1;
    if (angle.timed) scene.steps.forEach((st, i) => { if (v.currentTime + 0.05 >= st.t) k = i; });
    items.forEach((li, i) => li.classList.toggle('now', i === k));
  };
  v.addEventListener('timeupdate', mark);
  v.addEventListener('seeked', mark);
  $('sc-steps').addEventListener('click', (e) => {
    const b = e.target.closest('button[data-t]'); if (!b || !angle.timed) return;
    v.currentTime = Number(b.dataset.t); v.play().catch(() => {});
  });
  $('sc-angles').addEventListener('click', (e) => {
    const b = e.target.closest('.sc-angle'); if (!b) return;
    const a = scene.angles.find((x) => x.id === b.dataset.angle); if (a && a !== angle) setAngle(a, true);
  });
  picks.forEach((b, i) => {
    b.tabIndex = i === 0 ? 0 : -1;
    b.addEventListener('click', () => setScene(scenes.find((s) => s.id === b.dataset.scene), true));
    b.addEventListener('keydown', (e) => {
      const k = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0; if (!k) return;
      e.preventDefault(); const n = picks[(i + k + picks.length) % picks.length]; n.focus(); n.click();
    });
  });
  // /series8#scene-stumble のように開くと、その場面から始まる
  const start = scenes.find((s) => location.hash === `#scene-${s.id}`);
  if (start) { setScene(start, false); $('scenes').scrollIntoView(); }
</script>

<style is:global>
  /* 中身を JS で入れ替えるので、global にして .s-3d の中だけに効かせる */
  .s-3d .sc-lead { margin: -12px 0 8px; font: 600 18px/28px var(--sans); color: var(--ink); }
  .s-3d .sc-note { margin: 0 0 24px; font: 400 14px/24px var(--sans); color: var(--ink-2); max-width: 880px; }
  /* 場面を選ぶ列（試算のタブと同じ黒い帯） */
  .s-3d .sc-picks { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; padding: 8px; background: #111; border-radius: 12px; margin: 0 0 24px; }
  .s-3d .sc-pick { position: relative; display: grid; gap: 2px; align-content: start; text-align: left; padding: 8px 8px 12px; border: 0; border-radius: 8px; background: #2a2a2a; color: #f5f5f0; cursor: pointer; font: inherit; }
  .s-3d .sc-pick img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 4px; margin-bottom: 8px; opacity: .78; transition: opacity .2s; }
  .s-3d .sc-pick:hover img, .s-3d .sc-pick[aria-selected="true"] img { opacity: 1; }
  .s-3d .sc-pick-n { position: absolute; top: 14px; left: 14px; padding: 1px 6px; border-radius: 4px; background: rgba(17, 17, 17, .72); color: #f5f5f0; font: 600 11px/18px var(--sans); letter-spacing: .08em; }
  .s-3d .sc-pick b { font: 600 16px/24px var(--sans); }
  .s-3d .sc-pick-s { font: 400 12px/18px var(--sans); color: #b8b8b0; }
  .s-3d .sc-pick:hover { background: #3a3a3a; }
  .s-3d .sc-pick[aria-selected="true"] { background: #f5f5f0; color: #111; }
  .s-3d .sc-pick[aria-selected="true"] .sc-pick-s { color: #555; }
  .s-3d .sc-pick:focus-visible { outline: 2px solid #f5f5f0; outline-offset: 2px; }
  /* 動画（左）と説明のパネル（右） */
  .s-3d .sc-video { position: sticky; top: 96px; }
  .s-3d .sc-stage { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 32px; align-items: start; }
  .s-3d .sc-frame { background: #111; border-radius: 8px; overflow: hidden; }
  .s-3d .sc-frame video { display: block; width: 100%; aspect-ratio: 16 / 9; background: #111; }
  .s-3d .sc-angles { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 0; }
  .s-3d .sc-angle { display: inline-flex; align-items: baseline; gap: 6px; padding: 8px 14px; border: 1px solid #e6e6e6; border-radius: 4px; background: #fff; color: var(--ink); font: 500 14px/20px var(--sans); cursor: pointer; }
  .s-3d .sc-angle i { font-style: normal; font-size: 12px; color: var(--ink-3); font-variant-numeric: tabular-nums; }
  .s-3d .sc-angle[aria-pressed="true"] { background: var(--ink); border-color: var(--ink); color: #fff; }
  .s-3d .sc-angle[aria-pressed="true"] i { color: #c4c4c4; }
  .s-3d .sc-angle-note { margin: 8px 0 0; font: 400 13px/22px var(--sans); color: var(--ink-2); }
  .s-3d .sc-info { background: var(--bg); border-radius: 8px; padding: 24px; }
  .s-3d .sc-num { margin: 0; font: 500 11px/18px var(--sans); letter-spacing: .08em; color: var(--ink-3); }
  .s-3d .sc-name { margin: 2px 0 16px; font: 600 20px/30px var(--sans); color: var(--ink); }
  .s-3d .sc-meta { margin: 0 0 16px; display: grid; gap: 6px; }
  .s-3d .sc-meta div { display: grid; grid-template-columns: 3em minmax(0, 1fr); gap: 8px; }
  .s-3d .sc-meta dt { font: 500 12px/22px var(--sans); color: var(--ink-3); }
  .s-3d .sc-meta dd { margin: 0; font: 400 13px/22px var(--sans); color: var(--ink); }
  .s-3d .sc-sit { margin: 0 0 20px; padding-top: 16px; border-top: 1px solid #e6e6e6; font: 400 14px/26px var(--sans); color: var(--ink); }
  .s-3d .sc-h { margin: 0 0 8px; font: 600 13px/20px var(--sans); color: var(--ink); }
  .s-3d .sc-h span { font-weight: 400; color: var(--ink-3); }
  .s-3d .sc-steps { list-style: none; margin: 0 0 20px; padding: 0; display: grid; gap: 2px; }
  .s-3d .sc-steps button { display: grid; grid-template-columns: 3em minmax(0, 1fr); gap: 8px; width: 100%; padding: 6px 8px; border: 0; border-radius: 4px; background: transparent; text-align: left; cursor: pointer; font: inherit; color: var(--ink); }
  .s-3d .sc-steps button:hover { background: #fff; }
  .s-3d .sc-steps time { font: 500 12px/22px var(--sans); color: var(--ink-3); font-variant-numeric: tabular-nums; }
  .s-3d .sc-steps span { font: 400 13px/22px var(--sans); }
  /* 再生中の行は、行ごと黒く塗る（左の線は使わない） */
  .s-3d .sc-steps li.now button, .s-3d .sc-steps li.now button:hover { background: var(--ink); color: #fff; }
  .s-3d .sc-steps li.now time { color: #c4c4c4; }
  .s-3d .sc-steps.off button { cursor: default; }
  .s-3d .sc-steps.off button:hover { background: transparent; }
  .s-3d .sc-points { margin: 0; padding-left: 1.2em; font: 400 13px/24px var(--sans); color: var(--ink-2); }
  .s-3d .sc-log { display: inline-block; margin-top: 24px; font: 500 14px/22px var(--sans); color: var(--ink); }
  .s-3d .sc-log:hover { text-decoration: underline; }
  @media (max-width: 1023px) { .s-3d .sc-video { position: static; } .s-3d .sc-stage { grid-template-columns: minmax(0, 1fr); gap: 20px; } }
  @media (max-width: 767px) { .s-3d .sc-picks { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; padding: 6px; } }
  @media (max-width: 599px) {
    /* スマホでは1列にして、名前と一言を1行ずつで読めるようにする */
    .s-3d .sc-picks { grid-template-columns: minmax(0, 1fr); }
    .s-3d .sc-pick { grid-template-columns: 96px minmax(0, 1fr); grid-template-rows: 1fr 1fr; column-gap: 8px; row-gap: 0; align-items: center; padding: 0; overflow: hidden; min-height: 58px; }
    .s-3d .sc-pick img { grid-row: 1 / span 2; align-self: stretch; width: 100%; height: 100%; aspect-ratio: auto; margin: 0; border-radius: 0; }
    .s-3d .sc-pick-n { display: none; }
    .s-3d .sc-pick b { font-size: 15px; line-height: 20px; align-self: end; padding: 8px 4px 0 0; }
    .s-3d .sc-pick-s { font-size: 11px; line-height: 16px; align-self: start; padding: 0 4px 8px 0; }
    .s-3d .sc-info { padding: 20px 16px; }
  }
</style>
```

### 3Dの場面の中身（src/data/sim_scenes.json）

流れの時刻は、依頼174 の times.json と依頼175 の報告の時刻表から、本番のカメラの動画の秒で書いた。

```json
{
  "about": "サービスロボット導入シミュレーション（/series8）の「3Dの場面」に並べる動画と、場面ごとの説明（2026-11-13・LOG503）。動画は R2（p2m-media）の /media/。時刻は本番のカメラの動画の秒。看護師とハコブくんは実物ではなく Unity の3DCG",
  "title": "3Dで見る、看護師と搬送ロボットのやり取り",
  "note": "試算や病院の1日のシミュレーションでは、人とロボットは丸や四角で動きます。ここでは、その中の要所を、看護師と搬送ロボット「ハコブくん」の3DCGで短く切り取りました。薬を積む・受け取る・廊下ですれ違う、の3つの場面です。動きの速さは現場に合わせています（Unity・実物ではありません）。",
  "log": { "label": "作り方とコードの記録（LOG503）", "href": "/record/hospital-robot-nurse-3d-scenes-at-real-speed" },
  "scenes": [
    {
      "id": "load",
      "num": "01",
      "name": "薬剤部で積む",
      "short": "番号で認証して、上から入れる",
      "poster": "/media/LOG503_20_poster_load.jpg",
      "place": "薬剤部のカウンターの前",
      "who": "看護師（薬を積む人）・ハコブくん（引き出しが空）",
      "situation": "病棟へ運ぶ薬の箱を、看護師がハコブくんの引き出しに積みます。引き出しは、画面に認証番号を入れないと開きません。開いたら看護師は斜め横から上に手を入れ、箱を置いてすぐ離れます。何もしなければ、引き出しは3秒で自分で閉まります。",
      "points": ["引き出しは認証で自分で開き、看護師は取っ手に触らない", "しゃがまずに、上から入れる", "開き始めから看護師が体を起こすまで約3.6秒"],
      "angles": [
        { "id": "main", "label": "本番のカメラ", "src": "/media/LOG503_10_load.mp4", "sec": 27.6, "timed": true },
        { "id": "side", "label": "横から（手元）", "src": "/media/LOG503_11_load_side.mp4", "sec": 6.2, "note": "番号を押す所から体を起こすまでを、横から実際の速さで" }
      ],
      "steps": [
        { "t": 0.0, "text": "カウンターで薬の箱を取り、ハコブくんの前へ歩く" },
        { "t": 9.6, "text": "画面に認証番号を4けた入れる" },
        { "t": 11.8, "text": "認証が通り、引き出しが自分で出てくる" },
        { "t": 12.2, "text": "斜め横のまま箱のほうへ向き直り、かがむ" },
        { "t": 13.67, "text": "開いた口の真上から箱を置き、手を上げる" },
        { "t": 14.62, "text": "体を起こす。手が離れて3秒で引き出しが閉まる" },
        { "t": 17.63, "text": "うなずいて、走り出すハコブくんを見送る" }
      ]
    },
    {
      "id": "receive",
      "num": "02",
      "name": "病棟で受け取る",
      "short": "カードで認証して、上から取る",
      "poster": "/media/LOG503_21_poster_receive.jpg",
      "place": "病棟のナースステーションの前",
      "who": "看護師（受け取る人）・ハコブくん（薬を載せて到着）",
      "situation": "薬を載せたハコブくんが届け先に着き、受け取る人を待ちます。看護師は胸ポケットの認証カードを画面にかざし、自分で開いた引き出しから、上から箱を取ります。受け取ったあと何もしなければ、引き出しは3秒で閉まり、看護師はハコブくんに話しかけて見送ります。",
      "points": ["カードを戻すのは、引き出しが開いている間に済ませる", "開いた口から、まっすぐ上へ持ち上げて取る", "開き始めから看護師が体を起こすまで約3.8秒"],
      "angles": [
        { "id": "main", "label": "本番のカメラ", "src": "/media/LOG503_12_receive.mp4", "sec": 34.1, "timed": true },
        { "id": "side", "label": "横から（手元）", "src": "/media/LOG503_13_receive_side.mp4", "sec": 5.4, "note": "カードをかざす所から体を起こすまでを、横から実際の速さで" }
      ],
      "steps": [
        { "t": 0.0, "text": "ハコブくんが届け先に着き、向きを変えて待つ" },
        { "t": 6.5, "text": "看護師がナースステーションから歩いてくる" },
        { "t": 12.5, "text": "胸ポケットのカードを画面にかざす" },
        { "t": 13.7, "text": "認証が通り、引き出しが自分で出てくる。その間にカードを戻す" },
        { "t": 14.9, "text": "かがんで、開いた口の真上から箱をつかむ" },
        { "t": 16.28, "text": "まっすぐ上へ持ち上げ、体を起こす" },
        { "t": 19.23, "text": "話しかける。引き出しは3秒で自分で閉まる" },
        { "t": 28.43, "text": "ハコブくんが向きを変えて走り出す" }
      ]
    },
    {
      "id": "pass",
      "num": "03",
      "name": "廊下ですれ違う",
      "short": "すき間があれば、速さを変えない",
      "poster": "/media/LOG503_22_poster_pass.jpg",
      "place": "幅1.8mの病棟の廊下（両側に手すり）",
      "who": "看護師（歩いてくる人）・ハコブくん（0.6m/秒で走る）",
      "situation": "狭い病棟の廊下で、看護師とハコブくんが向かい合って進み、それぞれ左側を通ってすれ違います。横のすき間が十分にあるので、ハコブくんは減速せずに通り過ぎます。すれ違う手前で看護師がちらっと見て、ハコブくんの画面がにっこりします。",
      "points": ["体の横のすき間は最小0.52m", "ハコブくんは0.6m/秒のまま（減速も寄りもしない）", "やり取りは、目線と画面の表情だけ"],
      "angles": [
        { "id": "main", "label": "本番のカメラ", "src": "/media/LOG503_14_pass.mp4", "sec": 16.0, "timed": true },
        { "id": "top", "label": "真上から", "src": "/media/LOG503_15_pass_top.mp4", "sec": 16.0, "timed": true, "note": "左上に、2人の体のすき間・ハコブくんの速さ・決まりの状態を出しています" }
      ],
      "steps": [
        { "t": 0.0, "text": "ハコブくんが0.6m/秒で走り、看護師が歩き出す" },
        { "t": 6.73, "text": "すれ違う手前で、看護師がちらっとハコブくんを見る" },
        { "t": 7.0, "text": "ハコブくんの画面がにっこりする" },
        { "t": 8.9, "text": "すれ違う（体のすき間0.52m・減速なし）" }
      ]
    },
    {
      "id": "stumble",
      "num": "04",
      "name": "看護師がよろける",
      "short": "人がよろけたら、寄って止まる",
      "poster": "/media/LOG503_23_poster_stumble.jpg",
      "place": "幅1.8mの病棟の廊下（両側に手すり）",
      "who": "看護師（つまずいてよろける）・ハコブくん（0.6m/秒で走る）",
      "situation": "同じ廊下で、看護師がハコブくんの3.5mほど手前でつまずき、廊下の真ん中へよろけます。ハコブくんはよろけを見てすぐ減速し、壁の側へ寄って止まります。看護師は手すりに手を置いて立て直し、通り過ぎます。看護師が後ろへ1m離れてから、ハコブくんは走り出します。",
      "points": ["よろけ始めから0.19秒で減速を始める", "減速と加速はゆっくり（0.4m/秒²）", "走り出すのは、看護師が後ろへ1m以上離れてから"],
      "angles": [
        { "id": "main", "label": "本番のカメラ", "src": "/media/LOG503_16_stumble.mp4", "sec": 19.0, "timed": true },
        { "id": "top", "label": "真上から", "src": "/media/LOG503_17_stumble_top.mp4", "sec": 19.0, "timed": true, "note": "左上に、2人の体のすき間・ハコブくんの速さ・決まりの状態を出しています" }
      ],
      "steps": [
        { "t": 0.0, "text": "ハコブくんが0.6m/秒で走り、看護師が歩き出す" },
        { "t": 6.68, "text": "看護師がつまずき、廊下の真ん中へよろける" },
        { "t": 6.87, "text": "ハコブくんが減速を始め、壁の側へ寄る" },
        { "t": 7.73, "text": "看護師が手すりに手を置いて体を戻す" },
        { "t": 8.67, "text": "ハコブくんが止まる。画面がにっこり" },
        { "t": 9.73, "text": "看護師がちらっと見て、歩きを続ける" },
        { "t": 13.73, "text": "看護師が後ろへ1m離れ、ハコブくんが走り出す" }
      ]
    }
  ]
}
```

### ページへの組み込みと、サムネイルの並べ方（git diff）

シリーズのページ（src/pages/[series].astro）で、設定に `scenes: true` がある時だけこのセクションを出す。この回のサムネイルは、tools/sim_thumbs/make.py に縦3列の並べ方（stills_cols）を足して作った（左＝ちらっと見る看護師、中＝よろける看護師と手前のハコブくん、右＝にっこりするハコブくん）。

```diff
diff --git a/src/lib/records.ts b/src/lib/records.ts
index 95d9bca..3726163 100644
--- a/src/lib/records.ts
+++ b/src/lib/records.ts
@@ -44,7 +44,7 @@ export type SimTab = { id: string; task: string; place: string; src: string; tit
 
 // シリーズのページ（URL → 記事のシリーズ名）。Studio の一覧の絞り込み条件と同じ
 // intro はシリーズのページの見出しの下に出す説明（ないシリーズは出さない）
-export const SERIES_PAGES: Record<string, { series: string; title: string; pageTitle: string; limit: number; intro?: string; points?: { h: string; items: string[] }[]; guide?: boolean; thinking?: boolean; serving?: boolean; vision?: boolean; lab?: boolean; sim?: { src: string; title: string; note: string; obs?: { src: string; title: string; label: string; note: string; points: string[] }; tabs?: SimTab[] } }> = {
+export const SERIES_PAGES: Record<string, { series: string; title: string; pageTitle: string; limit: number; intro?: string; points?: { h: string; items: string[] }[]; guide?: boolean; thinking?: boolean; serving?: boolean; vision?: boolean; lab?: boolean; scenes?: boolean; sim?: { src: string; title: string; note: string; obs?: { src: string; title: string; label: string; note: string; points: string[] }; tabs?: SimTab[] } }> = {
   series1: { series: '薬剤搬送ロボット', title: 'Drug Delivery Robot | 薬剤搬送ロボットハコブくん', pageTitle: 'Series1 | 薬剤搬送ロボット', limit: 12,
     intro: '病院で薬を運ぶロボット「ハコブくん」を題材に、人とロボットの関わり（HRI）を設計している記録です。病院で使う画面（UI）の設計、Unity での自律移動、Fusion での形づくり、分身ロボット（アバター）の考察までを、4コママンガと一緒に残しています。' },
   series2: { series: 'R2R2R', title: 'R2R2R | デジタルツイン学習-R2R2R（Real to Render to Real）', pageTitle: 'Series2 | R2R2R', limit: 12,
@@ -63,7 +63,7 @@ export const SERIES_PAGES: Record<string, { series: string; title: string; pageT
     intro: 'ロボットアームが動きを覚える環境を、自宅にひとりで作っている記録です。机の上のアームでお手本の動きを集め、ロボット用のAI（Physical Intelligence の π0.5 など）に学習させ、実機で動かして確かめます。借りたGPUの種類・時間・費用も含めて、誰でも同じ手順で始められる形で残しています。' },
   series7: { series: '画像認識・物体検出', title: 'Image recognition and Object detection | 画像認識と物体検出', pageTitle: 'Series7 | 画像認識と物体検出', limit: 12, vision: true,
     intro: 'ロボットのカメラが物を見つける仕組みを、下の層から学び直している記録です。画素の数字、色の見分け方、しきい値、輪郭、特徴点といった昔からの手法を、机の上のアームを撮った写真で1つずつ測って確かめ、その上で SAM 3 のような新しいモデルも試します。評価の物差し（IoU・適合率・再現率など）を先に決め、結果は数字で残しています。' },
-  series8: { series: '導入シミュレーション', title: 'Service Robot Simulation | サービスロボット導入シミュレーション', pageTitle: 'Series8 | サービスロボット導入シミュレーション', limit: 12, serving: true,
+  series8: { series: '導入シミュレーション', title: 'Service Robot Simulation | サービスロボット導入シミュレーション', pageTitle: 'Series8 | サービスロボット導入シミュレーション', limit: 12, serving: true, scenes: true,
     intro: 'サービスロボット導入シミュレーションとは、配膳・清掃・搬送などのロボットを店や施設に入れる前に、待ち時間・必要な人数・ロボットが止まる場所・費用を試算して確かめることです。このシリーズでは、時間・順番・台数を SimPy で、ぶつかる・こぼれるといった空間と動きを Unity で扱い、結果とコードを全量公開しています。',
     // 見出しの下に並べる短い一覧（検索や AI が「何が分かるか・どう試算するか」を拾えるように、本文の文字で書く）
     points: [
diff --git a/src/pages/[series].astro b/src/pages/[series].astro
index 8cb7246..4d74342 100644
--- a/src/pages/[series].astro
+++ b/src/pages/[series].astro
@@ -10,6 +10,7 @@ import SeriesSheet from '../components/SeriesSheet.astro';
 import SeriesDoc from '../components/SeriesDoc.astro';
 import VisionGuide from '../components/VisionGuide.astro';
 import LabGuide from '../components/LabGuide.astro';
+import SimScenes from '../components/SimScenes.astro';
 import { seriesCards, SERIES_PAGES } from '../lib/records';
 import { media } from '../lib/media';
 import staticPages from '../data/static.json';
@@ -151,6 +152,7 @@ const jsonLd = {
       if (start) { select(start, false); document.querySelector('.s-sim')?.scrollIntoView(); }
     }
   </script>
+  {conf.scenes && <SimScenes />}
   <section class="sec"><div class="panel">
     <h2 class="sec-h">記録 | Record</h2>
     <LoadMore limit={conf.limit} total={items.length}>{items.map((c) => <RecordCard item={c} />)}</LoadMore>
diff --git a/tools/sim_thumbs/make.py b/tools/sim_thumbs/make.py
index c917683..524a0ae 100644
--- a/tools/sim_thumbs/make.py
+++ b/tools/sim_thumbs/make.py
@@ -169,8 +169,22 @@ def stills_split(n, a, b, r=0.5, bg=LIGHT):
     save(c, n)
 
 
+def stills_cols(n, ss, bg=LIGHT):
+    """場面の寄り（LOG503〜）：Unity で撮った寄りの静止画を、縦の列に並べる。ss は (素材名, fx, fy, z) の並び。z は元の幅に対する切り出し幅の割合"""
+    c = canvas(bg); k = len(ss); w = (W - G * (k - 1)) // k
+    for i, (name, fx, fy, z) in enumerate(ss):
+        img = np.array(Image.open(D + name + '.jpg').convert('RGB'))
+        h0, w0 = img.shape[:2]; cw = int(w0 * z); ch = int(cw * H / w)
+        if ch > h0: ch = h0; cw = int(ch * w / H)
+        sx = max(0, min(w0 - cw, int(w0 * fx - cw / 2))); sy = max(0, min(h0 - ch, int(h0 * fy - ch / 2)))
+        x = i * (w + G); ww = w if i < k - 1 else W - x
+        put(c, cv2.resize(img[sy:sy + ch, sx:sx + cw], (ww, H), interpolation=cv2.INTER_AREA if cw > ww else cv2.INTER_CUBIC), x, 0)
+    save(c, n)
+
+
 # ---- 各回（素材名, 店の範囲の中の中心 x, y, 切り出し幅の割合）
 JOBS = {
+    503: lambda n: stills_cols(n, [('closeup503_glance', .5, .55, .36), ('closeup503_stumble', .47, .5, .42), ('closeup503_smile', .5, .5, .5)]),  # 廊下ですれ違う場面を作った回（依頼175）。左＝ちらっとハコブくんを見る看護師（顔の寄り）、中＝よろける看護師と手前で止まるハコブくん（本番のカメラ）、右＝画面がにっこりするハコブくん（画面の寄り）
     499: lambda n: stills_split(n, ('closeup499_card_side', .52, .40, .50), ('closeup499_take_side', .60, .45, .45), r=.5),  # 受け渡しの場面を直した回（依頼171）。左＝ハコブくんの画面にカードをかざす看護師（横から）、右＝開いた引き出しに上から手を入れて取る所（横から）
     496: lambda n: still(n, 'closeup496_drawer', .47, .5, .9),  # ハコブくんと看護師の3Dを作った回。Blender で描いた、引き出しの前でかがむ看護師（LOG496 の scene_render.py。Unity の絵ではない）
     491: lambda n: split(n, ('h157_n_clean', .42, .42, .6), ('h157_w_west_10', .45, .42, .47), r=.56),  # 職員の動きを持ち場ごとの型に替えた回（依頼157）。左＝7時37分の外来の大廊下の清掃（清掃の人とカート）、右＝10時ごろの引き（西半分。職員が持ち場にいる）
```


## 作業ログ ― 依頼文と報告の全文

依頼箱（Claude Code への依頼の受け渡しの仕組み）に置いた依頼文と、結果のファイル、KIOXIA に残った報告と確かめの出力です。

### 依頼173 の依頼文（20261113_173_看護師の動きを現実の速さにして積むと受け取るを撮り直す.md）

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 240
---
# 依頼173：看護師の動きを現実の速さに合わせて、①積む・②受け取るを撮り直す（特に引き出しが開いてから）

依頼171・172 の報告（claude_code_reports/20261113_closeup_171.txt・_172.txt）を読んでから始める。土台は cs:137 の台本 closeup172_script.json（①②とも）。

エイイチの指摘（2026-11-13、依頼172 の動画を見て）：
- **看護師の動きを、現実のスピード感に合わせる。引き出しが開いてからは、もっとすばやく動くはず。**
- 細かい所（顔と画面の近さ・上体の倒れ方・カメラ）は今回は直さない

**変えるのは看護師の動きの時刻（速さ）だけ。** 立つ所・姿勢の角度（股関節・Spine・Chest・ひざ・腰・頭・手首）・手の的の位置・歩き・話しかけ・うなずき・見送り・まばたき・画面の表示・カメラの位置・ハコブくんの形と動きの速さ（走る・引き出しが開く 1.25 秒・閉まる 1.25 秒・手が離れて 3 秒で閉まる）は 172 のまま。指示していない動作は足さない・消さない。

**触るのは Assets/ServiceSim/Closeups/ の中だけ。** Models/・病院の1日の場面・配膳の場面・共通の部品・Packages・実行ファイルには触らない。Mixamo の FBX は写さない・check-in しない。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば作らずに報告して終わる）
保留は Mixamo のフォルダ（Models/Animations/）だけ・Unity と回し係が動いていない・KIOXIA がマウント済み・最新が cs:137

## 1. 引き出しが開いてから（ここを一番速くする）
慣れた看護師が、開いたらすぐ手を入れて、すぐ離れる速さにする。待つ間（何もしないで立っている時間）を作らない。目安は次のとおり（値は台本に合わせて決め、使った値を報告に書く）。

① 積む（172 では、開き始め 13.5 秒 → 手を離して起き上がり終わり 22.4 秒で約 9 秒）
- 引き出しが開き始めたら、すぐ箱のほうへ向き直る（3 歩を 0.9 秒くらいで。172 は 14.0〜15.1 秒の 1.1 秒と、その後 16.8 秒まで立ったまま）
- 向き直りながらかがみ始め、0.6〜0.8 秒でかがみ終わる（172 は 1.4 秒）
- 手が口の真上に来るのは、引き出しが出きってから（14.75 秒より後）
- 箱を下ろして置き、手を上げるまで 0.8〜1.0 秒（172 は 18.2〜21.0 秒で 2.8 秒）
- 起き上がるのは 0.6〜0.8 秒（172 は 1.4 秒）
- **開き始めから起き上がり終わりまで 3.5〜4.5 秒**

② 受け取る（172 では、開き始め 14.7 秒 → 起き上がり終わり 23.1 秒で約 8.4 秒）
- カードを胸ポケットに戻すのは、引き出しが開いている間に済ませる
- 向き直り・かがみ・起き上がりは①と同じ速さ
- 箱をつかんで、まっすぐ持ち上げて口から出すまで 0.8〜1.0 秒（172 は 18.8〜21.5 秒で 2.7 秒）
- **開き始めから起き上がり終わりまで 3.5〜4.5 秒**

## 2. 引き出しが開く前の動き
- ① 番号を押す間を、1 回 0.4〜0.5 秒にする（172 は 0.8 秒ずつ：10.8・11.6・12.4・13.2 秒）。押す前に立ち止まって考える間は作らない
- ② カードを胸ポケットから出してかざすまでを 1.0〜1.5 秒にする（172 は 12.4 秒に出して 14.7 秒に通る）
- 歩きの速さと歩数は 172 のまま

## 3. 後ろの時刻
- 速くして空いた分だけ、後ろの動き（自動で閉まる・うなずき・話しかけ・見送り・ハコブくんが走り去る）を前へずらす。それぞれの長さは 172 のまま
- 場面の長さは短くなってよい（短くなった長さを報告に書く）
- カメラの切りかえの時刻は、同じ動きの所で切りかわるように一緒にずらす

## 4. 確かめ（違えば 5 は撮らずに止める）
- 172 の確かめの表と同じ項目・同じ基準（当たったコマ 0・体と引き出し 1 cm 以上・すり抜け 0・真上から入れる／取る・頭と画面 5 cm 以上・手首 25 度以内・番号 4 回とも 1 cm 以内・手が離れてから閉まり始めるまで 3.0 秒・箱の底とトレー 1 cm 以内）
- つなぎ目の 1 コマの骨の動きは **6 cm 以内**に変える（速くした分、1 コマで動く量が増えるため。172 は 3 cm）
- 手の速さの最大が 1.5 m/秒 以内。ガクッと止まる・はねる所がない（手の速さのグラフを報告に入れる）
- 足が床をすべった長さが 172 と同じ基準
- 1〜3 で決めた時刻の表（172 の時刻 → 173 の時刻）を、①②それぞれ報告に書く

## 5. 撮る
- ①②とも、172 と同じ 2 本ずつ（本番のカメラ・横からのカメラ）。**横からのカメラは 0.5 倍にせず、現実の速さ（1 倍）で撮る**
- 静止画は 172 と同じ名前・同じ動きの所
- 出力は KIOXIA の closeup/20261113_closeup173/ に置き、iCloud の hospital/closeup173/ に動画と静止画を写す（md5 を確かめる）
- 作業の区切りで check-in する（Mixamo のフォルダは除く）

## 6. 報告
claude_code_reports/20261113_closeup_173.txt（KIOXIA にも写し）。最後に「判定：合格／止めた」を書く。
```

### 依頼173 の結果（20261113_173_…_20261113_1802.md）

```markdown
# 結果：20261113_173_看護師の動きを現実の速さにして積むと受け取るを撮り直す

- 状態：失敗
- 始めた時刻：2026-11-13 18:02
- 終わった時刻：2026-11-13 18:47（44分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume b7cb8ca1-2707-4e3a-9f02-363ba80aecc3`

## Claude Code の報告

Failed to authenticate. API Error: 403 Attention Required! | Cloudflare
```

### 依頼173 で決まった時刻（KIOXIA closeup/20261113_closeup173/times.json）

```json
{
 "load": {
  "presses": [
   10.15,
   10.6,
   11.05,
   11.5
  ],
  "check": 11.8,
  "open_end": 13.05,
  "turn": [
   12.2,
   13.1
  ],
  "bend": [
   12.9,
   13.65
  ],
  "put": [
   13.67,
   14.12
  ],
  "lift": [
   14.17,
   14.77
  ],
  "up": [
   14.62,
   15.37
  ],
  "side": [
   9.55,
   15.77
  ],
  "place_still": 13.87,
  "rhand": [
   11.7,
   12.45,
   12.1,
   13.1,
   13.55
  ],
  "rwrist_on": 13.55,
  "D": -6.367,
  "dur": 27.633
 },
 "receive": {
  "card_show": [
   12.5,
   13.4
  ],
  "check": 13.7,
  "open_end": 14.95,
  "card_back": [
   13.85,
   14.6
  ],
  "turn": [
   14.2,
   15.1
  ],
  "bend": [
   14.9,
   15.65
  ],
  "reach": [
   14.9,
   15.7
  ],
  "grip": [
   15.72,
   16.22
  ],
  "grab": 16.26,
  "lift": [
   16.28,
   16.72
  ],
  "up": [
   16.74,
   17.49
  ],
  "side": [
   12.5,
   17.89
  ],
  "card_still": 13.55,
  "lwrist_on": 15.75,
  "lean_back": [
   14.15,
   14.65
  ],
  "D": -5.366,
  "dur": 34.134
 }
}
```

### 依頼173 の確かめの出力（an173_out.txt）

```text
===== load
   speed_max_all {'LeftHand': (1.375, 13.9), 'LeftIndexIntermediate': (1.467, 14.6), 'RightHand': (1.236, 5.033), 'RightIndexIntermediate': (1.472, 12.9)}
   speed_jump_max {'LeftHand': (0.531, 15.4), 'LeftIndexIntermediate': (0.744, 15.4), 'RightHand': (0.486, 11.267), 'RightIndexIntermediate': (0.796, 13.933)}
   body_bone_frame_max (7.51, 13.9)
   stand {'open': ('右手・指→前の板', 2.26, 12.9), 'turn': ('右手・指→前の板', 2.26, 12.9), 'bend': ('右手・指→前の板', 2.26, 12.9), 'put_lift': ('左腕→前の板', 1.1, 14.133), 'up': ('左手・指→前の板', 2.13, 15.2), 'wait': ('右手・指→前の板', 13.0, 16.2), 'close': ('右手・指→前の板', 13.0, 17.6), 'all': ('左腕→前の板', 1.1, 14.133)}
   clear_close (14.6, 17.6)
   above_first (13.833, True, 11)
   hip_max (44.01, 14.6)
   knee_max_bend (29.32, 14.6)
   wristL_hold(bend..lift_end) (35.89, 14.767)
   wristL_hold(bend..U0) (23.33, 14.6)
   wristR_thigh (12.23, 14.8)
===== receive
   speed_max_all {'LeftHand': (1.495, 15.267), 'LeftIndexIntermediate': (1.485, 15.3), 'RightHand': (1.237, 7.233), 'RightIndexIntermediate': (1.48, 15.967)}
   speed_jump_max {'LeftHand': (0.816, 14.0), 'LeftIndexIntermediate': (0.441, 16.967), 'RightHand': (0.822, 16.4), 'RightIndexIntermediate': (1.06, 16.4)}
   body_bone_frame_max (6.61, 9.533)
   stand {'open': ('ズボン→前の板', 2.08, 14.933), 'turn': ('ズボン→前の板', 2.08, 14.933), 'bend': ('ズボン→前の板', 2.08, 14.933), 'grip_lift': ('右腕→横の壁（−x）', 1.53, 16.067), 'up': ('右手・指→前の板', 7.29, 17.033), 'wait': ('右手・指→前の板', 9.42, 17.5), 'close': ('ズボン→前の板', 9.64, 20.567), 'all': ('右腕→横の壁（−x）', 1.53, 16.067)}
   clear_close (17.567, 20.567)
   above_first (15.967, True, 11)
   hip_max (40.0, 16.733)
   knee_max_bend (21.69, 17.467)
   wristR_take(reach1..lift_end) (23.09, 15.9)
   wristR_take(bend..U0) (23.09, 15.9)
   wristL_thigh (12.57, 16.167)
   card_1to8cm (1.089, 13.067, 14.133, 4.31, 6.99)
```

### 依頼173 の後ろの動きのずれ（check173_out.txt）

```text
① 歩き: 172 の 0〜9.2 秒 → 173 の 0.000〜9.200 秒（277 コマ・ずらし 0 コマ）最大 0.000 mm（・172 の 0.000 秒）
① 後ろの動き（うなずき・見送り）: 172 の 24.0〜34.0 秒 → 173 の 17.633〜27.633 秒（300 コマ・ずらし -191 コマ）最大 0.000 mm（・172 の 0.000 秒）
② 歩き: 172 の 0〜11.4 秒 → 173 の 0.000〜11.400 秒（343 コマ・ずらし 0 コマ）最大 0.000 mm（・172 の 0.000 秒）
② 後ろの動き（話しかけ・見送り）: 172 の 24.6〜39.5 秒 → 173 の 19.233〜34.133 秒（447 コマ・ずらし -161 コマ）最大 0.647 mm（RightLittleIntermediate・172 の 34.800 秒）
```

### 依頼174 の依頼文（20261113_174_依頼173の仕上げ.md）

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 180
---
# 依頼174：依頼173 の仕上げ（外れた2つを直し、静止画・報告・check-in を済ませる）

依頼173 は、動画を撮ったあとに Claude Code の接続が切れて（認証のエラー）止まった。KIOXIA の closeup/20261113_closeup173/（times.json・an173_out.txt・check173_out.txt・video/）と、173 の依頼文（依頼箱の 完了 または 結果 の 20261113_173_*）を読んでから始める。

エイイチの判断（2026-11-13）：**173 の速さで OK。** 速さ（times.json の時刻）は変えない。

**変えるのは下の 1 の 2 つだけ。** 立つ所・姿勢・時刻・歩き・話しかけ・カメラ・ハコブくんは 173 のまま。指示していない動作は足さない・消さない。
**触るのは Assets/ServiceSim/Closeups/ の中だけ。** Models/・病院の1日の場面・配膳の場面・共通の部品・Packages・実行ファイルには触らない。Mixamo の FBX は写さない・check-in しない。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば作らずに報告して終わる）
保留は Mixamo のフォルダと 173 で変えた Closeups/ の中だけ・Unity と回し係が動いていない・KIOXIA がマウント済み。173 の台本とコードが作業場所に残っているか（残っていなければ、KIOXIA の 173 の tools/ などから戻せるかを書いて止める）

## 1. 外れた2つを直す
- ① 箱を置いて手を上げる間（14.17〜14.77 秒あたり）、左手首が 36° まで曲がる → **25° 以内**にする（手の位置と時刻は変えず、手首の向きだけで直す）
- 1 コマで骨が動く量が ① 13.9 秒で 7.51 cm → **6 cm 以内**にする（その前後の動きのつなぎを、時刻を変えずになめらかにする）

## 2. 確かめ
173 の依頼文の 4 と同じ項目・同じ基準。①②とも全部の値を表にする。外れたら 3 は撮らずに止める。

## 3. 撮る・写す
- ①②とも 4 本（本番のカメラ・横から 1 倍）を撮り直す。名前は closeup174_*.mp4
- 静止画は 172 と同じ名前・同じ動きの所（時刻は 173 の times.json に合わせる）
- 出力は KIOXIA の closeup/20261113_closeup174/、iCloud の hospital/closeup174/ に動画と静止画を写す（md5 を確かめる）
- check-in（Mixamo のフォルダは除く）

## 4. 報告
claude_code_reports/20261113_closeup_174.txt（KIOXIA にも写し）。173 の時刻の表（172 → 173）も入れる。最後に「判定：合格／止めた」を書く。
```

### 依頼174 の1回めの結果（20261113_174_依頼173の仕上げ_20261113_1901.md）

```markdown
# 結果：20261113_174_依頼173の仕上げ

- 状態：失敗
- 始めた時刻：2026-11-13 19:01
- 終わった時刻：2026-11-13 19:18（17分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 6a974896-217a-4516-8dc7-3a1f413f7f39`

## Claude Code の報告

Failed to authenticate. API Error: 403 Attention Required! | Cloudflare
```

### 依頼174 の2回めの結果（20261113_174_依頼173の仕上げ_20261113_1931.md）

```markdown
# 結果：20261113_174_依頼173の仕上げ

- 状態：完了
- 始めた時刻：2026-11-13 19:31
- 終わった時刻：2026-11-13 19:38（7分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 81eee894-19cc-47ed-87c9-8cab46a01cb8`

## Claude Code の報告

**やったこと**
- 173 の依頼文と、KIOXIA にある 173 の出力（times.json・an173_out.txt・check173_out.txt・video/）を読みました。始める前の確かめはすべて合っていました。
  - 保留は Mixamo のフォルダと Closeups/ の台本だけでした。
  - Unity と回し係は動いていませんでした。KIOXIA はマウント済みでした。
  - 173 の台本は作業場所に残っていました。道具も /tmp/c173/tools に残っていて、作り直すと台本の md5 が同じになりました。
- この依頼は 1 回め（19:01〜19:18）も認証のエラーで止まっていました。1 回めで台本の直し・確かめ・コマ撮りまでは済んでいました。今回はその出力を確かめ直し、動画・静止画・写し・check-in・報告を済ませました。
- 直したのは ①積むの台本の 2 か所だけです（closeup174_script.json）。時刻・立つ所・姿勢・歩き・カメラ・ハコブくんは 173 のままです。②の台本は 173 と同じです。
  - 左手首：曲がりの上限 22 度を、手を上げ終わる 14.77 秒まで保つようにしました。173 では 14.62 秒で外していました。手の位置と時刻は変えていません。
  - 13.9 秒の跳ね：右手を太ももへ運ぶつなぎを 0.35 秒から 0.95 秒に延ばしました。切りかわる時刻は 173 のままです。

**結果**
- 外れた 2 つは、どちらも基準の中に入りました。
  - 左手首：35.89 度 → 23.33 度（基準は 25 度以内）
  - 13.9 秒の 1 コマ：7.51 cm → 消えました。右手の動きは最大 4.12 cm です（基準は 6 cm 以内）。
- 173 の依頼文の 4 の確かめは、①②ともすべて基準を満たしました。

| 項目 | ① 積む | ② 受け取る |
|---|---|---|
| 当たったコマ・すり抜け | 0・0 | 0・0 |
| 体と引き出しの一番近い距離 | 1.10 cm | 1.53 cm |
| 頭と画面の距離の最小 | 5.59 cm | 10.85 cm |
| つなぎ目の 1 コマの骨の動き | 4.21 cm | 2.84 cm |
| 手の速さの最大 | 1.472 m/秒 | 1.495 m/秒 |
| 手が離れてから閉まり始めるまで | 3.000 秒 | 3.000 秒 |
| 番号 4 回の指先とボタンの中心 | 最大 0.56 cm | - |
| 箱の底とトレー | 0.18 cm | - |
| 足のすべり | 0.00 cm | 0.00 cm |

- 172 と同じはずの所（歩きと後ろの動き）のずれは、①が 0.000 mm、②が最大 0.647 mm でした。
- 動画は 4 本撮りました（1920×1080・現実の速さ）。
  - closeup174_load.mp4：27.633 秒
  - closeup174_load_side.mp4：6.233 秒
  - closeup174_receive.mp4：34.133 秒
  - closeup174_receive_side.mp4：5.4 秒
- 静止画は 16 枚で、172 と同じ名前・同じ動きの所です。時刻は 173 の times.json に合わせました。
- 手の速さのグラフは KIOXIA の hand_speed174.png です。
- 動画と静止画（20 ファイル）を KIOXIA の closeup/20261113_closeup174/ と iCloud の hospital/closeup174/ に置き、md5 が全部同じことを確かめました。
- check-in は cs:138 です。保留は Mixamo のフォルダだけになりました。
- 報告に 172 → 173 の時刻の表を入れました。開き始めから起き上がり終わりまでは、①が 8.9 → 3.57 秒、②が 8.4 → 3.79 秒です。
- 判定：合格

**変えたファイル**
- 作業場所：Assets/ServiceSim/Closeups/closeup174_script.json（.meta とも追加）。1 回めの 174 で作ったものです。
- 作業場所：Assets/ServiceSim/Closeups/closeup173_script.json（.meta とも、173 で作ったものを check-in）
- 報告：claude_code_reports/20261113_closeup_174.txt（KIOXIA にも report174.txt として写し）
- KIOXIA：closeup/20261113_closeup174/ の動画・静止画・確かめの出力・tools/。173 の道具も KIOXIA の 173 の tools/ が空だったので、ここに残しました。
- iCloud：hospital/closeup174/

**決めてほしいこと**
1. 1 コマで骨が 6 cm を超えて動く所が、つなぎ目の外にまだ残っています。どれも 173 からあるもので、依頼の 13.9 秒ではないので変えていません。これらも 6 cm 以内にしますか。
   - ① 15.2 秒：6.57 cm（左の前腕）
   - ② 16.17 秒：6.11 cm（左の親指）
   - ② 16.87〜16.9 秒：6.45〜6.46 cm（右の前腕）
   - 歩きの所の ① 7.51 cm・② 6.61 cm は、172 の歩きと同じです。
2. 173 の報告（20261113_closeup_173.txt）は、173 が止まったため作られていません。173 の時刻の表と確かめの値は 174 の報告に入れました。173 の報告を別に作りますか。
3. Mixamo の FBX の check-in は、依頼163 の答えのとおり保留のままです。
```

### 依頼174 の報告（KIOXIA closeup/20261113_closeup174/report174.txt）

```text
依頼174：依頼173 の仕上げ（外れた2つを直し、静止画・報告・check-in を済ませる）（2026-11-13）

依頼173 の依頼文（依頼箱 失敗/20261113_173_*）と KIOXIA closeup/20261113_closeup173/（times.json・an173_out.txt・check173_out.txt・video/）を読んでから始めた。
173 の時刻（times.json）は変えていない。変えたのは ①積むの 2 つの値だけ（下の 1）。立つ所・姿勢・時刻・歩き・話しかけ・カメラ・ハコブくんは 173 のまま。②受け取るの台本は 173 と同じ。
触ったのは Assets/ServiceSim/Closeups/ の中だけ（台本 closeup173_script.json と closeup174_script.json の check-in）。コードは変えていない。Mixamo の FBX は写していない・check-in していない。実行ファイルは作っていない。

（いきさつ）この依頼は 1 回め（19:01〜19:18）も認証のエラーで止まった。1 回めで、台本の直し・確かめ・コマ撮り（KIOXIA）までは済んでいた。2 回め（この報告）は、その出力を確かめ直し、動画・静止画・写し・check-in・報告を行った。

結論：外れた 2 つとも基準の中に入った。①左手首 35.89 度 → 23.33 度（25 度以内）、①13.9 秒の 1 コマの骨の動き 7.51 cm → 4.12 cm 以下（13.9 秒前後の右手のつなぎ）。173 の確かめの項目はすべて基準を満たしたので、①②の 4 本を撮った。

■ 始める前の確かめ（すべて合っていたので始めた）
- 保留：Mixamo のフォルダ（Models/Animations/ と Animations.meta）と、173 で足した closeup173_script.json（と .meta）だけ。1 回めの 174 で作った closeup174_script.json（と .meta）もあった（どちらも Closeups/ の中）
- Unity と回し係：動いていない（Unity Hub と依頼箱の回し係だけ。Unity の本体・night_runner・rec_runner はない）
- KIOXIA：マウント済み
- 173 の台本とコード：作業場所に残っていた。173 の道具は /tmp/c173/tools にあり（KIOXIA の 173 の tools/ は空）、make_script173.py と env_final.sh で台本を作り直すと closeup173_script.json と md5 が同じ（18ad76fa6f3811309f31e83f6ee7bbce）、時刻も times.json と同じだった

■ 1. 外れた 2 つの直し（closeup174_script.json。173 の台本との違いはこの 2 か所だけ）
① 左手首（箱を置いて手を上げる間）
- 173 では、左手首の上限 22 度を「起き上がり始め 14.62 秒」で外していたため、手を上げ終わる 14.77 秒までの間に手首が 35.89 度（14.767 秒）まで曲がった
- 上限 22 度を手を上げ終わる 14.77 秒まで保ち、そこから起き上がり終わり 15.37 秒までに外すようにした（台本 L_wrist の 1 点：14.62 → 14.77 秒）
- 手の的の位置・時刻は変えていない。手首の向きだけ
- 結果：かがみ始め〜手を上げ終わり（12.9〜14.77 秒）の左手首の曲がりの最大 23.33 度（14.6 秒）

② 13.9 秒の 1 コマ 7.51 cm（右手の親指）
- 原因：番号を押し終えた右手を太ももへ運ぶつなぎが 0.35 秒と短く、13.9 秒の 1 コマで右手の親指の骨が 7.51 cm 動いていた
- 太ももへ運ぶ的（r_thigh）に切りかわる時刻（173 のまま）はそのままで、つなぐ長さを 0.35 → 0.95 秒にした（台本 R_target の 1 点）
- 試した値：0.35 秒（173）7.51 cm／0.6 秒 5.03 cm（14.067 秒）／0.95 秒 4.12 cm（14.333 秒）→ 0.95 秒を使った
- 太ももに着いた後の右手首の曲がり 12.23 度（173 と同じ）

173 と比べた骨のずれ（同じコマどうし）
- ①：13.633 秒より前は 0.1 mm 未満（同じ）。13.633 秒から変わる（一番大きいのは 13.933 秒の右手の親指 11.97 cm＝つなぎ方を変えた所）
- ②：最大 0.014 mm（同じ台本。コマを書き出すかどうかの違いで出る誤差）

試した値ごとの出力は /tmp/c174/try（a1・rtt0.6・rtt0.95・ltd1・lh148・lh15・lh156・ltd085・ltd055）。左腕のつなぎ（LTD・LH1）を変えた試しは 15.2 秒の左腕の動きが逆に大きくなったので使っていない。

■ 2. 確かめ（173 の依頼文の 4 と同じ項目・同じ基準。撮った出力で計った）
| 項目 | 基準 | ① 積む | ② 受け取る | 合否 |
| 当たったコマ（引き出し） | 0 | 0 | 0 | 合う |
| 体と引き出しの一番近い距離 | 1 cm 以上 | 1.10 cm（左腕→前の板・14.133 秒） | 1.53 cm（右腕→横の壁・16.067 秒） | 合う |
| すり抜け（胴を突き抜けたコマ） | 0 | 0 コマ | 0 コマ | 合う |
| 真上から入れる／取る | 真上から | 真上から（13.833 秒に口の真上・11 コマ） | 真上から（15.967 秒に口の真上・11 コマ） | 合う |
| 頭と画面の距離の最小 | 5 cm 以上 | 5.59 cm（13.667 秒） | 10.85 cm（15.667 秒） | 合う |
| 頭が胴・画面の板に入ったコマ | 0 | 0・0 | 0・0 | 合う |
| 手首（入れる／取る間） | 25 度以内 | 左 23.33 度（14.6 秒）［173：35.89 度］ | 右 23.09 度（15.9 秒） | 合う |
| 手首（太ももに置いた手・参考） | - | 右 12.23 度 | 左 12.57 度 | - |
| 番号 4 回とも指先とボタンの中心 | 1 cm 以内 | 4 回・最大 0.56 cm | - | 合う |
| 指の肌と画面の面の距離の最小 | めり込まない | 0.01 cm | 1.34 cm | 合う |
| カードと画面の距離（参考・171 の基準 1〜8 cm） | - | - | 4.31〜6.99 cm（13.067〜14.133 秒）・角 2.86 cm | - |
| 手が離れてから閉まり始めるまで | 3.0 秒 | 3.000 秒（14.6 → 17.6 秒） | 3.000 秒（17.567 → 20.567 秒） | 合う |
| 箱の底とトレー | 1 cm 以内 | 0.18 cm（横のずれ 0.80 cm） | - | 合う |
| 引き出しの開き・開けて閉めた | 0〜0.26 m・はい | 0.000〜0.260 m・はい | 0.000〜0.260 m・はい | 合う |
| つなぎ目の 1 コマの骨の動き（m） | 6 cm 以内 | 4.21 cm［173：3.48 cm］ | 2.84 cm | 合う |
| 手の速さの最大（手首の骨・人さし指） | 1.5 m/秒 以内 | 1.472 m/秒（右の人さし指・12.9 秒） | 1.495 m/秒（左手・15.267 秒） | 合う |
| 手の速さの 1 コマの変わり（ガクッと・はねる） | 目立つ所がない | 最大 0.744 m/秒（左の人さし指・15.4 秒）［173：右の人さし指 0.796］ | 最大 1.06 m/秒（右の人さし指・16.4 秒） | 合う（グラフ） |
| 足が床をすべった長さ（歩く所） | 0 cm（172 と同じ） | 0.00 cm | 0.00 cm | 合う |
| 靴が床に沈んだ・両足とも浮いた | 0 cm | 0.00・0.00 cm | 0.00・0.00 cm | 合う |
| 歩く所の外のすべり（参考） | - | 0.00 cm | 0.00 cm | - |
| 腰の高さ 一番低い値の割合 | （172 と同じ） | 94.9 %（0.847 m） | 96.8 %（0.864 m） | 合う |
| 太ももの曲げの最大（歩く所の外） | （172 と同じ） | 23.3 度 | 20.7 度 | 合う |
| 股関節・ひざの最大（参考） | - | 44.01 度・29.32 度 | 40.0 度・21.69 度 | - |
| 頭・服・髪・脚が引き出しの箱に入ったコマ（参考） | - | 0 | 0 | - |
| 172 と同じはずの所（歩き） | ずれなし | 0.000 mm（0〜9.2 秒） | 0.000 mm（0〜11.4 秒） | 合う |
| 172 と同じはずの所（後ろの動き・時刻をずらして） | ずれなし | 0.000 mm（172 の 24.0〜34.0 秒 → 17.633〜27.633 秒） | 0.647 mm（172 の 24.6〜39.5 秒 → 19.233〜34.133 秒） | 合う |

1 コマの骨の動きが 6 cm を超えるコマ（参考。つなぎ目の外。1 の②で直した 13.9 秒は消えた）
- ① 歩き 6.0〜7.51 cm（6.6〜8.0 秒・12.6 秒の足。一番大きいのは 7.333 秒の左の足首 7.51 cm。172 の歩きと 0.000 mm で同じ）
- ① 15.2 秒 6.57 cm（左の前腕。起き上がりながら左手を太ももへ下ろす所。173 と同じ）
- ② 歩き 6.13〜6.61 cm（9.43〜9.6 秒の左のつま先。172 と同じ）
- ② 16.167 秒 6.11 cm（左の親指）・16.867〜16.9 秒 6.45〜6.46 cm（右の前腕）（173 と同じ）
→ 173 の基準（つなぎ目 6 cm）の外なので直していない。決めてほしいことの 1

手の速さのグラフ：KIOXIA closeup/20261113_closeup174/hand_speed174.png（①②・左右の手首の骨・1 コマの動き × 30）

■ 173 の時刻の表（172 → 173。174 も同じ。単位は秒）
① 積む
| 動き | 172 | 173・174 |
| 番号を押す（4 回） | 10.8・11.6・12.4・13.2（0.8 秒ずつ） | 10.15・10.6・11.05・11.5（0.45 秒ずつ） |
| チェックの印＝引き出しが開き始める | 13.5 | 11.8 |
| 引き出しが出きる | 14.75 | 13.05 |
| 向き直る（3 歩） | 14.0〜15.1 | 12.2〜13.1（0.3 秒ずつ） |
| かがむ | 16.8〜18.2 | 12.9〜13.65 |
| 下ろして置く | 19.3〜20.2 | 13.67〜14.12 |
| まっすぐ上げる | 20.4〜21.2 | 14.17〜14.77 |
| 起き上がる | 21.0〜22.4 | 14.62〜15.37 |
| 開き始め → 起き上がり終わり | 13.5 → 22.4（8.9 秒） | 11.8 → 15.37（3.57 秒） |
| 入れる所の静止画 | 19.7 | 13.87 |
| 手が離れる → 閉まり始め | 23.967 で閉まり始め | 14.6 → 17.6 |
| 後ろの動き（うなずき・見送り・去る） | 24.0〜34.0 | 17.633〜27.633（−6.367 秒） |
| 場面の長さ | 34.0 | 27.633 |
② 受け取る
| 動き | 172 | 173・174 |
| カードを出してかざす | 12.6〜13.6（通る 14.7） | 12.5〜13.4（通る 13.7） |
| 引き出しが開き始める・出きる | 14.7・15.95 | 13.7・14.95 |
| カードを胸ポケットへ戻す | 15.0〜16.0 | 13.85〜14.6（開いている間に済む） |
| 向き直る（3 歩） | 16.2〜17.3 | 14.2〜15.1 |
| かがむ | 17.3〜18.6 | 14.9〜15.65 |
| 右手を口の真上へ・下ろしてつかむ | 17.4〜18.4・18.8〜19.9（持つ 20.15） | 14.9〜15.7・15.72〜16.22（持つ 16.26） |
| まっすぐ持ち上げて口から出す | 20.3〜21.6 | 16.28〜16.72 |
| 起き上がる | 21.7〜23.1 | 16.74〜17.49 |
| 開き始め → 起き上がり終わり | 14.7 → 23.1（8.4 秒） | 13.7 → 17.49（3.79 秒） |
| 手が離れる → 閉まり始め | - | 17.567 → 20.567 |
| 後ろの動き（話しかけ・見送り・去る） | 24.6〜39.5 | 19.233〜34.133（−5.366 秒） |
| 場面の長さ | 39.5 | 34.133 |
（カメラの切りかえは同じ動きの所で切りかわるよう、173 で一緒にずらしてある。174 では変えていない）

■ 3. 撮ったもの（すべて 1920×1080・30 コマ/秒・1 倍＝現実の速さ）
- closeup174_load.mp4：① 本番のカメラ 27.633 秒（829 コマ）
- closeup174_load_side.mp4：① 横から（位置 (−2.6, 0.8, 0.7)・見る所 (0, 0.8, 0.7)・画角 40 度。172・173 と同じ）9.55〜15.77 秒の 6.233 秒（187 コマ）
- closeup174_receive.mp4：② 本番のカメラ 34.133 秒（1024 コマ）
- closeup174_receive_side.mp4：② 横から（同じカメラ）12.5〜17.89 秒の 5.4 秒（162 コマ）
- 当たりの赤い印：①② とも 0 コマ（文字なし）
- 静止画 16 枚（172・171 と同じ名前・同じ動きの所。時刻は 173 の times.json）
  ①：load_key_press（10.6 秒・2 回めを押す所）／load_key_press_side（同じ時の横からの動画のコマ 318）／load_check（12.1 秒）／load_drawer_open（13.3 秒）／load_place・load_place_side・load_place_wrist（13.87 秒・入れる所）／load_place_sidecam（同じ時の横からの動画のコマ 416）／load_drawer_closed（19.633 秒）
  ②：recv_card_show（13.55 秒）／recv_card_show_side（横からの動画のコマ 407＝13.567 秒。13.55 秒ちょうどのコマがないため一番近いコマ）／recv_drawer_open（15.0 秒）／recv_take・recv_take_side・recv_take_wrist（16.26 秒・持つ所）／recv_drawer_closed（22.234 秒）
  確かめ用の静止画は KIOXIA の load/stills/（19 枚）と receive/stills/（19 枚）

■ 出力の場所
- KIOXIA：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/closeup/20261113_closeup174/
  video/closeup174_load.mp4（md5 ba40ea52c4128a2f9f764f8507e2aa78・2,360,050 バイト）
  video/closeup174_load_side.mp4（md5 a1e58d699368f7c22e93de1a2b2d97e2・471,872 バイト）
  video/closeup174_receive.mp4（md5 fbebe2d32ebdcd031268f5da1f5d5474・2,202,302 バイト）
  video/closeup174_receive_side.mp4（md5 96b06db92bb4b735c11d9370dffbb46a・419,239 バイト）
  stills174/（静止画 16 枚）・load/・receive/（コマ・確かめの出力・stills/）・logs/
  closeup174_script.json・times.json（173 と同じ）・hand_speed174.png・an174_out.txt・check174_out.txt（172 と同じはずの所）・fr174_out.txt（6 cm を超えるコマ）・report174.txt（この報告の写し）
  tools/：make_script174.py（make_script173.py に 174 の 2 つの値を足したもの。値が無ければ 173 の台本になる）・env_final.sh・try174.sh・shoot174.sh・make174.py・an173.py・check173.py・fr174.py・speed173.py ほか 173 の道具（make_script173.py・try173.sh・shoot173.sh・make173.py など。KIOXIA の 173 の tools/ は空だったので、ここに残した）
- iCloud：…/サービスロボット導入シミュレーション/hospital/closeup174/ に動画 4 本と静止画 16 枚。20 ファイルとも md5 が KIOXIA と同じ（確かめた）

■ check-in
- cs:138（4 件：closeup173_script.json・closeup174_script.json とそれぞれの .meta を追加）
- 保留は Mixamo のフォルダ（Models/Animations/ と Animations.meta）だけ

■ 決めてほしいこと
1. つなぎ目の外で、1 コマの骨の動きが 6 cm を超える所が残っている（① 15.2 秒 左の前腕 6.57 cm・② 16.17 秒 6.11 cm・16.87〜16.9 秒 6.46 cm。どれも 173 と同じ。歩きの ① 7.51 cm・② 6.61 cm は 172 と同じ）。依頼で直すように言われたのは 13.9 秒の 1 つなので、ほかは変えていない。これらも 6 cm 以内にするか
2. 173 の報告（claude_code_reports/20261113_closeup_173.txt）は、173 が止まったため作られていない。173 の時刻の表と確かめの値はこの報告に入れた。173 の報告を別に作るか
3. Mixamo の FBX の Plastic への check-in（依頼163 の答えのとおり保留のまま）

判定：合格
```

### 依頼174 の確かめの出力（an174_out.txt）

```text
===== load
   speed_max_all {'LeftHand': (1.375, 13.9), 'LeftIndexIntermediate': (1.467, 14.6), 'RightHand': (1.236, 5.033), 'RightIndexIntermediate': (1.472, 12.9)}
   speed_jump_max {'LeftHand': (0.531, 15.4), 'LeftIndexIntermediate': (0.744, 15.4), 'RightHand': (0.486, 11.267), 'RightIndexIntermediate': (0.486, 11.267)}
   body_bone_frame_max (7.51, 7.333)
   stand {'open': ('右手・指→前の板', 2.26, 12.9), 'turn': ('右手・指→前の板', 2.26, 12.9), 'bend': ('右手・指→前の板', 2.26, 12.9), 'put_lift': ('左腕→前の板', 1.1, 14.133), 'up': ('左手・指→前の板', 2.13, 15.2), 'wait': ('右手・指→前の板', 13.0, 16.2), 'close': ('右手・指→前の板', 13.0, 17.6), 'all': ('左腕→前の板', 1.1, 14.133)}
   clear_close (14.6, 17.6)
   above_first (13.833, True, 11)
   hip_max (44.01, 14.6)
   knee_max_bend (29.32, 14.6)
   wristL_hold(bend..lift_end) (23.33, 14.6)
   wristL_hold(bend..U0) (23.33, 14.6)
   wristR_thigh (12.23, 14.8)
===== receive
   speed_max_all {'LeftHand': (1.495, 15.267), 'LeftIndexIntermediate': (1.485, 15.3), 'RightHand': (1.237, 7.233), 'RightIndexIntermediate': (1.48, 15.967)}
   speed_jump_max {'LeftHand': (0.816, 14.0), 'LeftIndexIntermediate': (0.441, 16.967), 'RightHand': (0.822, 16.4), 'RightIndexIntermediate': (1.06, 16.4)}
   body_bone_frame_max (6.61, 9.533)
   stand {'open': ('ズボン→前の板', 2.08, 14.933), 'turn': ('ズボン→前の板', 2.08, 14.933), 'bend': ('ズボン→前の板', 2.08, 14.933), 'grip_lift': ('右腕→横の壁（−x）', 1.53, 16.067), 'up': ('右手・指→前の板', 7.29, 17.033), 'wait': ('右手・指→前の板', 9.42, 17.5), 'close': ('ズボン→前の板', 9.64, 20.567), 'all': ('右腕→横の壁（−x）', 1.53, 16.067)}
   clear_close (17.567, 20.567)
   above_first (15.967, True, 11)
   hip_max (40.0, 16.733)
   knee_max_bend (21.69, 17.467)
   wristR_take(reach1..lift_end) (23.09, 15.9)
   wristR_take(bend..U0) (23.09, 15.9)
   wristL_thigh (12.57, 16.167)
   card_1to8cm (1.089, 13.067, 14.133, 4.31, 6.99)
```

### 依頼174 の1コマの動きの出力（fr174_out.txt）

```text
load 6.633 6.36 RightFoot
load 6.667 6.68 RightFoot
load 6.700 6.85 RightFoot
load 6.733 6.85 RightFoot
load 6.767 6.69 RightFoot
load 6.800 6.36 RightFoot
load 7.200 6.42 LeftFoot
load 7.233 6.97 LeftFoot
load 7.267 7.33 LeftFoot
load 7.300 7.51 LeftFoot
load 7.333 7.51 LeftFoot
load 7.367 7.33 LeftFoot
load 7.400 6.97 LeftFoot
load 7.433 6.42 LeftFoot
load 7.833 6.18 RightFoot
load 7.867 6.50 RightFoot
load 7.900 6.66 RightFoot
load 7.933 6.66 RightFoot
load 7.967 6.49 RightFoot
load 8.000 6.17 RightFoot
load 12.633 6.01 LeftFoot
load 12.667 6.28 LeftFoot
load 12.700 6.01 LeftFoot
load 15.200 6.57 LeftLowerArm
load walk max 7.51 cm 7.333 LeftFoot
load rest max 6.57 cm 15.200 LeftLowerArm
receive 9.433 6.13 LeftToes
receive 9.467 6.45 LeftToes
receive 9.500 6.61 LeftToes
receive 9.533 6.61 LeftToes
receive 9.567 6.45 LeftToes
receive 9.600 6.13 LeftToes
receive 16.167 6.11 LeftThumbIntermediate
receive 16.867 6.45 RightLowerArm
receive 16.900 6.46 RightLowerArm
receive walk max 6.61 cm 9.500 LeftToes
receive rest max 6.46 cm 16.900 RightLowerArm
```

### 依頼174 の後ろの動きのずれ（check174_out.txt）

```text
① 歩き: 172 の 0〜9.2 秒 → 174 の 0.000〜9.200 秒（277 コマ・ずらし 0 コマ）最大 0.000 mm（・172 の 0.000 秒）
① 後ろの動き（うなずき・見送り）: 172 の 24.0〜34.0 秒 → 174 の 17.633〜27.633 秒（300 コマ・ずらし -191 コマ）最大 0.000 mm（・172 の 0.000 秒）
② 歩き: 172 の 0〜11.4 秒 → 174 の 0.000〜11.400 秒（343 コマ・ずらし 0 コマ）最大 0.000 mm（・172 の 0.000 秒）
② 後ろの動き（話しかけ・見送り）: 172 の 24.6〜39.5 秒 → 174 の 19.233〜34.133 秒（447 コマ・ずらし -161 コマ）最大 0.647 mm（RightLittleIntermediate・172 の 34.800 秒）
```

### 依頼175 の依頼文（20261113_175_廊下ですれ違う場面を作って撮る.md）

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 300
---
# 依頼175：要所の場面の3つめ「廊下ですれ違う」を作って撮る（ふつうに通り過ぎる・看護師がよろけてハコブくんが寄って止まる、の2本）

依頼174 の報告（claude_code_reports/20261113_closeup_174.txt）と、依頼166・171・172 の報告を読んでから始める。看護師・ハコブくん・台本の作り・撮り方は 174（cs:138）の場面の寄りを土台にする。

エイイチと決めたこと（2026-11-13）：
- ①積む・②受け取るは依頼174 の版で完成。**今回はそれに触らない**（台本・コード・出力とも）
- 3つめの場面は「廊下ですれ違う」。廊下の幅は **1.8 m**（片側に部屋がある狭い廊下）
- **ハコブくんの動き方：看護師が近い、またはよろけたら、減速して端に寄る、もしくは止まる。適度な距離があり、特に何もなければ、そのまま（0.6 m/秒のまま）通り過ぎる**
- やり取りは **目線と画面の表情だけ**（看護師がちらっとハコブくんを見る・ハコブくんの画面がにっこりする）。吹き出し・おじぎ・話しかけは入れない
- 看護師の歩き方・立ち方は 162〜174 の手づくりの歩き（Mixamo 前）を使う。Mixamo の動きは使わない
- 動きの速さは現実に合わせる（174 と同じ考え方）

**触るのは Assets/ServiceSim/Closeups/ の中だけ。** Models/・病院の1日の場面・配膳の場面・共通の部品・Packages・実行ファイルには触らない。①②の台本と出力は変えない。Mixamo の FBX は写さない・check-in しない。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば作らずに報告して終わる）
保留は Mixamo のフォルダ（Models/Animations/）だけ・Unity と回し係が動いていない・KIOXIA がマウント済み・最新が cs:138

## 1. 廊下をつくる（台本の rooms に足す。①②の部屋とは離れた所に置く）
- 病棟の廊下：壁と壁の間 1.8 m・長さ 14 m 以上。片側の壁に病室の扉を 2〜3 つ（閉じた引き戸）、両側の壁に手すり（高さ 0.8 m・壁から 6 cm 出る）
- 色は病院の1日の場面の A（ミント×木目）に合わせる（床・壁・手すり・扉。値は病院の1日の場面の色を読んで使い、報告に書く）
- 天井は撮る角度で見えない所は作らなくてよい

## 2. 2本の場面（どちらも 15〜25 秒）
どちらも、ハコブくんと看護師は廊下の両端から向かい合って進み、**左側通行**（それぞれ進む向きの左寄り）ですれ違う。ハコブくんは引き出しを閉じた空の状態、画面はふだん顔（表情集の「基本」）。看護師は手に何も持たない。

### ③-a ふつうに通り過ぎる
- 看護師はふつうの速さ（1.2〜1.3 m/秒）でまっすぐ歩く。ハコブくんは 0.6 m/秒 のまま走る
- すれ違う時の横のすき間（ハコブくんの体と看護師の体のいちばん近い所）が 0.5 m 以上になる位置どりにする
- すれ違う 2〜3 m 手前で、看護師がちらっとハコブくんを見る（頭を 15〜25° 向けて 0.6〜1.0 秒、前に戻す）。同じ頃、ハコブくんの画面がにっこり（表情集の笑顔。1.5 秒くらいで「基本」に戻る）
- ハコブくんは減速しない・寄らない

### ③-b 看護師がよろけて、ハコブくんが寄って止まる
- 看護師はふつうに歩いてくるが、ハコブくんの 3〜4 m 手前で **つまずいてよろける**（体が廊下の真ん中のほうへ 0.3〜0.4 m 流れ、1〜2 歩たたらを踏み、手すり側へ片手を伸ばして体を戻す。全部で 1.5〜2 秒）。よろけ方は人の自然な動きに見えるように、腕と上体も動かす
- ハコブくんは、よろけ始めを見てから 0.3 秒以内に減速を始め、左の壁（手すり）側へ寄り、止まる。止まるまでの減速は 0.5 m/秒² 以下でなめらかに。寄った時の手すりとのすき間は 5 cm 以上
- 看護師が体を立て直したら、ハコブくんの画面がにっこり。看護師はハコブくんをちらっと見て（③-a と同じ）、歩きを続けて通り過ぎる
- 看護師の体がハコブくんの後ろ 1 m 以上に離れてから、ハコブくんが走り出す（加速も 0.5 m/秒² 以下）
- この場面の看護師とハコブくんの一番近い距離を数え、報告に書く

### ハコブくんの決まり（③-a と ③-b で同じ決まりで動く形にする）
- 「近い」の線：向かってくる人との横のすき間が 0.4 m より狭くなりそう、または人の体が自分の進む帯に入ってきたら → 減速して寄る。すき間が取れない、または人がよろけたら → 止まる
- 何もなければ 0.6 m/秒 のまま通り過ぎる
- 決まりの値は台本に書き、報告に表で書く。③-a ではこの線に当たらないこと、③-b では当たることを数字で確かめる

## 3. カメラ
- 本番：廊下の少し上（高さ 1.6〜1.8 m）から、廊下の長い方向に斜めに見下ろす。すれ違う所で看護師の顔とハコブくんの画面の両方が見える
- 真上：すれ違う所の真上から、2人のすき間と寄り方が分かる画（③-b は止まる所も入る）
- 横からの寄り（看護師の顔とハコブくんの画面）：目線とにっこりの所だけに切りかえる
- 1本の動画の中で、本番と寄りを切りかえる。真上は別の動画にする

## 4. 確かめ（違えば 5 は撮らずに止める）
- 当たったコマ 0（看護師とハコブくん・看護師と壁と手すり・ハコブくんと壁と手すり）
- ③-a：横のすき間の最小 0.5 m 以上・ハコブくんの速さが 0.6 m/秒 のまま（ずれ 0.02 m/秒 以内）
- ③-b：減速の始まりがよろけ始めから 0.3 秒以内・減速と加速が 0.5 m/秒² 以下・止まっている間にハコブくんが動かない・走り出しが看護師の体がハコブくんの後ろ 1 m 以上に離れてから
- 足が床をすべった長さ・沈む／浮く：174 と同じ基準。よろける所の足も数える
- 1 コマで骨が動く量：6 cm 以内（よろける所は 8 cm まで）
- 頭の向きを変える所・目線：首だけでなく、目（または顔の向き）がハコブくんの画面のほうを向いている
- 看護師の手と手すりが当たる所：手が手すりの中に入らない（手すりに触れる形なら、手のひらが手すりの上にのる）

## 5. 撮る
- ③-a・③-b それぞれ、本番（寄りの切りかえ入り）と真上の 2 本ずつ、計 4 本。現実の速さ（1 倍）
- 静止画：③-a の目線とにっこり・すれ違う所（本番と真上）／③-b のよろける所・ハコブくんが止まった所（本番と真上）・にっこり
- 出力は KIOXIA の closeup/20261113_closeup175/、iCloud の hospital/closeup175/ に動画と静止画を写す（md5 を確かめる）
- 作業の区切りで check-in（Mixamo のフォルダは除く）

## 6. 報告
claude_code_reports/20261113_closeup_175.txt（KIOXIA にも写し）。2 の時刻の表・ハコブくんの決まりの値・4 の値を ③-a・③-b ごとに表で書く。最後に「判定：合格／止めた」を書く。
```

### 依頼175 の結果（20261113_175_廊下ですれ違う場面を作って撮る_20261113_2017.md）

```markdown
# 結果：20261113_175_廊下ですれ違う場面を作って撮る

- 状態：完了
- 始めた時刻：2026-11-13 20:17
- 終わった時刻：2026-11-13 21:15（58分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 9ee37c7e-d2aa-469c-8d7d-150805f4fceb`

## Claude Code の報告

やったこと
- 始める前に確かめた（保留は Mixamo のフォルダだけ・Unity と回し係は止まっている・KIOXIA はマウント済み・最新は cs:138）。すべて合っていたので始めた。
- 廊下を作った。台本 closeup175_script.json の rooms に「廊下_…」を足し、①②の部屋から 25 m 以上離した所に置いた。
  - 壁と壁の間 1.8 m、長さ 25 m。
  - 片側の壁に閉じた引き戸が 3 つ。
  - 両側に手すり（上の面の高さ 0.8 m・壁から 6 cm 出る・金具つき）。
  - 色は病院の1日の場面の A を読んで使った：床 #DBD6C9・壁 #666E7A・手すり #D7B88C（木目）・扉 #4FAE8E（ミント）。
- ③-a（16.0 秒）と ③-b（19.0 秒）を作った。
  - 看護師は 162〜174 の手づくりの歩きで、1.25 m/秒・毎分 111 歩。
  - ③-b のよろけは、つまずき → たたら 2 歩 → 左手を手すりの上に置いて体を戻す、の 1.75 秒。
- ハコブくんの決まりを台本の robot_rule に書いた。Unity の中で毎コマ看護師の体を見て、速さと横の位置を決める（③-a・③-b とも同じ値）。
- にっこりの顔は表情集の「小さな笑み」を使った。
- 撮った：本番（寄りの切りかえ入り）と真上を 2 本ずつ、計 4 本と静止画 12 枚。現実の速さ（1 倍）。
- 写した：KIOXIA の closeup/20261113_closeup175/ と iCloud の hospital/closeup175/。16 ファイルとも md5 が同じなのを確かめた。
- check-in は cs:139（12 件）。保留は Mixamo のフォルダだけ。
- 報告は claude_code_reports/20261113_closeup_175.txt（KIOXIA にも写した）。

結果
- ①②：新しいコードで 174 の台本を回し、174 の出力と骨の位置を比べた。差は 0 mm で、変わっていない。
- 当たったコマ：看護師とハコブくん 0・看護師と壁/手すり/扉 0・ハコブくんと壁/手すり/扉 0（③-a・③-b とも）。

| 項目 | 基準 | ③-a | ③-b |
|---|---|---|---|
| 体の横のすき間の最小 | ③-a 0.5 m 以上 | 0.520 m | 一番近い距離 0.534 m（参考） |
| ハコブくんの速さ | ③-a 0.6 のまま | 0.6000 m/秒のまま | － |
| 決まりの線 | ③-a 当たらない・③-b 当たる | 予想のすき間の最小 0.520 m（当たらない） | よろけを見て 6.9 秒から「止まる」（当たる） |
| 減速の始まり | よろけ始めから 0.3 秒以内 | － | 0.187 秒 |
| 減速・加速 | 0.5 m/秒² 以下 | － | どちらも 0.400 m/秒² |
| 止まっている間の動き | 動かない | － | 0 m |
| 走り出し | 看護師が後ろ 1 m 以上 | － | 1.049 m で走り出した |
| 寄った時の手すりとのすき間 | 5 cm 以上 | － | 5.2 cm |
| 1 コマの骨の動き（根の動きを除いた） | 6 cm（よろけ 8 cm）以内 | 5.68 cm | 5.68 cm・よろけの間 7.90 cm |
| 目線（顔の向きと画面への向きの角度の最小） | 画面のほうを向く | 1.5 度 | 6.1 度 |
| 頭の向き・時間 | 15〜25 度・0.6〜1.0 秒 | 22 度・0.85 秒 | 22 度・0.85 秒 |
| 手と手すり | 手すりに入らない | － | 入った頂点 0・手の一番低い所は手すりの上 0.47 cm |
| 足のすべり | 0 cm（174 と同じ） | 0.00 cm | 0.02 cm（0.2 mm・歩き出した後） |

- ③-b のよろけ：腰が真ん中へ 0.348 m 流れる・たたら 2 歩・全部で 1.75 秒。
- 判定：合格。ただし足のすべりの 0.02 cm だけは 174 の 0 cm にそろっていない（決めてほしいことの 6）。

変えたファイル
- Assets/ServiceSim/Closeups/closeup175_script.json（追加）
- Assets/ServiceSim/Closeups/Editor/CloseupCorridor.cs（追加）
- Assets/ServiceSim/Closeups/Textures/face175_smile_albedo.png・face175_smile_emission.png（追加。それぞれ .meta も）
- Assets/ServiceSim/Closeups/CloseupDirector.cs・CloseupNurse.cs（変更。台本に値が無ければ 174 と同じに動く）

決めてほしいこと
1. 廊下の幅が足りない：手すりの間は 1.68 m しかなく、③-a のすき間 0.5 m を取ると、両側の手すりとのすき間は合わせて約 6 cm しか残らなかった。
   - そのため ③-b でハコブくんが壁の側へ寄れるのは 1.5 cm だけで、画では寄ったように見えない（止まるのは見える）。
   - 寄る幅を見せるなら、③-a のすき間を 0.4 m にする・廊下を 2.0 m にする・片側の手すりをやめる、のどれかが要る。
2. すき間 0.5 m を取るため、看護師の腕を 4 度だけ体へ寄せた（手が太ももの横に来る）。162〜174 の歩きからの変えだが、よいか。
3. カメラ：看護師の顔とハコブくんの画面は向き合っているので、この廊下では 1 つのカメラで両方を前から写せる所が無い。
   - 本番はハコブくんの後ろの上から撮った。看護師の顔とよろけ方は見えるが、ハコブくんは後ろ姿。
   - 寄りを 2 つ（看護師の顔・ハコブくんの画面）にして切りかえた。この形でよいか。
4. 「すれ違う 2〜3 m 手前」：2 人の間が 2〜3 m だと、頭 25 度まででは画面のほうを向けない。そこで、看護師がすれ違う所の 2.7 m 手前に来た時（2 人の間 4.0 m）から見る形にした。この読み方でよいか。
5. 1 コマの骨の動きは、体ごと進む分を除いて数えた。世界の位置で数えると、歩きで 9.83 cm、よろけで 11.02 cm になる（1.25 m/秒で体ごと 1 コマ 4.2 cm 進むため）。この数え方でよいか。
6. 足のすべり 0.02 cm（目に見えない）は直していない。0 にするか。
7. 止まったハコブくんは、寄る途中の向き 2 度のまま止まっている。このままでよいか。
8. 表情集に「笑顔」という名前の絵が無いので「小さな笑み」を使った。よいか。
9. Mixamo の FBX の check-in は、依頼163 の答えのとおり保留のまま。
```

### 依頼175 の報告（KIOXIA closeup/20261113_closeup175/report175.txt）

```text
依頼175：要所の場面の 3 つめ「廊下ですれ違う」を作って撮る（③-a ふつうに通り過ぎる・③-b 看護師がよろけてハコブくんが寄って止まる）（2026-11-13）

依頼174・166・171・172 の報告を読んでから始めた。看護師・ハコブくん・台本の作り・撮り方は 174（cs:138）の場面の寄りが土台。
触ったのは Assets/ServiceSim/Closeups/ の中だけ。①②（load・receive）の台本・出力は変えていない（closeup174_script.json はそのまま）。
Models/・病院の1日の場面・配膳の場面・共通の部品・Packages・実行ファイルには触っていない。Mixamo の FBX は写していない・check-in していない。看護師の動きに Mixamo は使っていない（162〜174 の手づくりの歩き）。

■ 始める前の確かめ（すべて合っていたので始めた）
- 保留：Mixamo のフォルダ（Models/Animations/）だけ
- Unity と回し係：動いていない（Unity Hub と依頼箱の回し係だけ）
- KIOXIA：マウント済み
- 最新：cs:138

■ 1. 廊下（台本 closeup175_script.json の rooms に「廊下_…」76 個を足した。①② の部屋から 25 m 以上離した原点 (50, 0, 0)）
- 壁と壁の間 1.8 m・長さ 25 m（場面に使うのは 0〜18 m）・壁の高さ 2.6 m。天井は作っていない
- 片側（ハコブくんの側＝−x の壁）に病室の扉 3 つ（閉じた引き戸。幅 1.3 m・高さ 2.03 m・壁の前に 2.5 cm 出る。窓・取っ手・番号の札・枠つき）。扉は z 2.9・11.0・15.6 m（止まる所の z 5〜8 m は手すりのある所にした）
- 手すり：両側。上の面の高さ 0.80 m・太さ 3.5 cm・壁から 6 cm 出る（壁との間 2.5 cm）・1.2 m ごとに金具。扉の所は切ってある
- 巾木：高さ 8 cm・8 mm 出る
- 壁と扉は影を落とさない（天井の明かりの下のように、床に壁の影を出さない）。人・ハコブくん・手すりの影は出す
- 色（病院の1日の場面の色 A を読んで使った）
| 所 | 色 | もと |
| 床 | #DBD6C9 | 病院の1日の場面の床（Store/Materials/Mat_Floor 0.86・0.84・0.79） |
| 壁 | #666E7A | 病院の1日の場面の部屋の箱・壁（Mat_Wall 0.40・0.43・0.48） |
| 手すり | #D7B88C | 色 A の木目（HospitalLook.SchemeHex A） |
| 扉 | #4FAE8E | 色 A の張り地（ミント。依頼153 の値） |
| 扉の取っ手 | #F3F0E8 | 色 A の天板 |
| 扉の枠・巾木・手すりの金具 | #5F5E5A | 病院の1日の場面の灰色（車いすの場所の色） |
| 扉の窓・番号の札 | #F6F3EC | 162 からの台本の paper |
（光は 174 と同じ＝病院の1日の場面の Sun・Fill・ambient）

■ 2. 2 本の場面（左側通行。看護師は +x の壁の側、ハコブくんは −x の壁の側を進む）
- ハコブくん：引き出しを閉じた空（袋を外した）。画面はふだん「基本」。にっこりは「小さな笑み」（表情集に「笑顔」という名前の絵が無いので、hakobu.py の smile＝小さな笑み を使った。目は基本のまま、口だけ太い弧に描き直した絵 face175_smile_albedo.png・face175_smile_emission.png を、画面の材質に重ねて切りかえる）
- 看護師：手に何も持たない。162〜174 の歩き（脚・腕の振り・足を床に留める IK）。根の通り道は 1 コマごとのキーで、速さを現実に合わせた（1.25 m/秒・1 歩 0.54 秒＝毎分 111 歩）
- ハコブくん：決まり（下の表）で Unity の中で毎コマ動く。③-a と ③-b は同じ決まり・同じ値

(1) ③-a ふつうに通り過ぎる（16.0 秒）
| 時刻（秒） | 動き |
| 0.0 | ハコブくん z 1.6 m から 0.6 m/秒で走る（最後まで同じ）。看護師は z 17.2 m に立っている |
| 0.2〜1.2 | 看護師が歩き出して 1.25 m/秒に |
| 6.733 | 看護師がちらっとハコブくんを見る（すれ違う所の 2.7 m 手前。頭を 22 度へ 0.25 秒・そのまま 0.35 秒・0.25 秒で戻す＝0.85 秒） |
| 7.000 | ハコブくんの画面がにっこり（見られたのを見て。顔の向きと画面の角度 5.5 度・3.48 m） |
| 8.500 | 画面が基本に戻る（1.5 秒） |
| 8.900 | すれ違う（z 6.96 m）。体のすき間 0.520 m |
| 16.0 | おわり |
カメラ：0 本番 → 6.583 看護師の顔の寄り → 7.633 ハコブくんの画面の寄り → 8.75 本番

(2) ③-b よろけて、ハコブくんが寄って止まる（19.0 秒）
| 時刻（秒） | 動き |
| 0.0〜1.2 | ③-a と同じ（ハコブくん 0.6 m/秒・看護師が歩き出す） |
| 6.680 | よろけ始め：右足のつま先が引っかかって短く着く（6.68〜6.88）。ハコブくんの前の面から 3.48 m 手前 |
| 6.88〜7.46 | たたら 2 歩（左・右。真ん中のほうへ）。腰が真ん中へ 0.348 m 流れる。上体を前へ 13 度・右へ傾け、右腕を外へ出して釣り合いを取る |
| 6.867 | ハコブくんが減速を始める（よろけ始めから 0.187 秒） |
| 7.3〜7.9 | 左手を手すりへ伸ばし、手のひらを手すりの上に置く（7.73 から）。上体を手すりの側へ戻す |
| 7.52〜8.28 | 左足で手すりの側へ戻し、右足をそろえる |
| 8.430 | 立て直す（よろけ全部で 1.75 秒）。左手は手すりから上へ離して体の横へ |
| 8.667 | ハコブくんが止まる（減速 1.80 秒・最大 0.400 m/秒²）。横は 1.5 cm 壁の側へ寄った所（x −0.466・手すりとのすき間 5.2 cm） |
| 8.800 | ハコブくんの画面がにっこり（看護師が立て直して 0.5 秒落ち着いたのを見て） |
| 9.480 | 看護師がちらっとハコブくんを見る（③-a と同じ 22 度・0.85 秒） |
| 9.730 | 看護師が歩き出す。10.3 画面が基本に戻る |
| 12.233 | すれ違う（ハコブくんは止まったまま）。12.467 体のすき間の最小 0.534 m |
| 13.734 | 看護師の体がハコブくんの後ろ 1.049 m 離れたのを見て、ハコブくんが走り出す（加速 最大 0.400 m/秒²） |
| 19.0 | おわり |
カメラ：0 本番 → 8.7 ハコブくんの画面の寄り → 9.43 看護師の顔の寄り → 10.43 本番

この場面の看護師とハコブくんの一番近い距離：0.534 m（12.467 秒・すれ違う所。よろけの間は前後に 1.5 m 以上離れている）

■ ハコブくんの決まり（台本の robot_rule。③-a・③-b 同じ）
| 項目 | 値 |
| ふつうの速さ | 0.6 m/秒 |
| 減速して寄る時の速さ | 0.3 m/秒 |
| 加速・減速の上限 | 0.4 m/秒²（加加速度 1.0 m/秒³ でなめらかに） |
| 見る範囲 | 前 5.0 m 以内に来た人 |
| 見てから動くまで | 0.1 秒（＋1 コマ） |
| 「近い」の線（減速して寄る） | 予想の横のすき間（今の横のすき間＋0.5 秒の横の速さ×会うまでの時間（1.5 秒まで））が 0.4 m より狭い、または人の体が自分の進む帯に入った |
| 止まる | 人がよろけた（腰の横の速さが自分のほうへ 0.25 m/秒より速い、または上体の傾きが 45 度/秒より速く変わる）、または壁の側へ寄ってもすき間が 0.25 m 取れない |
| 寄る所 | 左の手すり・金具・扉と 5.3 cm（向きが変わる分を見て 5 cm 以上に） |
| 横へ動く速さ | 0.03 m/秒まで・向きは 2 度まで（進みながらだけ） |
| ふつうの横の位置 | 廊下の中心から −0.451 m（手すりと 7.2 cm） |
| 走り出す | 止まった後、人の体が自分の後ろ 1.0 m 以上離れた |
| にっこり | 人の顔の向きが自分の画面から 10 度以内・3.5 m 以内（止まっている間は使わない）、または止まった後に人が落ち着いて 0.5 秒（腰の速さ 0.3 m/秒より遅く・上体の傾き 12 度より小さい）。1.5 秒で基本に戻る |
| 決まりの当たり | ③-a：予想の横のすき間の最小 0.520 m（0.4 より広い）・帯に入らない・よろけなし → ずっと「ふつうに走る」（当たらない） |
|  | ③-b：よろけを 6.767 秒に見た（よろけ始めの 0.087 秒後）・予想のすき間の最小 −0.982 m・帯に入った → 6.9 秒から「止まる」（当たる） |

■ 3. カメラ（廊下の原点から。pos→look・縦の画角）
- 本番：(−0.62, 1.72, すれ違う所−6 m)→(0.12, 0.8, すれ違う所＋0.9 m) 38 度。ハコブくんの後ろの上（左の壁の側）から廊下の長い方向に斜めに見下ろす。看護師の顔とよろけ方が前から見える
- 看護師の顔の寄り：看護師について動く。(−0.30, 1.28, 看護師−1.6 m)→(0.595, 1.42, 看護師) 30 度（ハコブくんの側の斜め前から）
- ハコブくんの画面の寄り：ハコブくんについて動く。(0.30, 1.32, ハコブくん＋1.35 m)→(−0.451, 0.95, ＋0.3 m) 26 度（看護師の側の斜め前から）
- 真上：すれ違う所（③-b は止まった所と看護師が立て直した所の真ん中）の真上 7.6 m から 27 度。画面の上が −x の壁（ハコブくんの側）、右が廊下の先。左上に 2 人の体のすき間・ハコブくんの速さ・決まりの状態（ふつうに走る／減速して寄る／止まる）・にっこり・時刻を書いた（PIL・ヒラギノ角ゴ W6）
- 本番と寄りは 1 本の動画の中で切りかえ、真上は別の動画

■ 4. 確かめ（撮った出力で計った）
| 項目 | 基準 | ③-a | ③-b | 合否 |
| 当たったコマ：看護師とハコブくん | 0 | 0 | 0 | 合う |
| 当たったコマ：看護師と壁・手すり・扉 | 0 | 0（一番近い 3.8 cm） | 0（手すりの上に置いた手 0.47 cm） | 合う |
| 当たったコマ：ハコブくんと壁・手すり・扉 | 0 | 0（一番近い 7.2 cm） | 0（一番近い 5.2 cm） | 合う |
| 体の横のすき間の最小 | ③-a 0.5 m 以上 | 0.520 m（8.900 秒） | 0.534 m（参考・12.467 秒） | 合う |
| ハコブくんの速さ | ③-a 0.6 のまま（ずれ 0.02 以内） | 0.6000〜0.6000 m/秒（位置の差からは 0.6000〜0.6030。CSV の丸め） | - | 合う |
| 減速の始まり | よろけ始めから 0.3 秒以内 | - | 0.187 秒 | 合う |
| 減速・加速 | 0.5 m/秒² 以下 | 0 | 減速 0.400・加速 0.400 | 合う |
| 止まっている間の動き | 動かない | - | 0.0000 m（153 コマ・位置と向きが同じ） | 合う |
| 走り出し | 看護師の体が後ろ 1 m 以上 | - | 1.049 m で走り出した | 合う |
| 寄った時の手すりとのすき間 | 5 cm 以上 | - | 5.2 cm | 合う |
| よろけ（台本どおり） | 真ん中へ 0.3〜0.4 m・1〜2 歩・1.5〜2 秒 | - | 0.348 m・2 歩・1.75 秒 | 合う |
| 足のすべり（歩く所・よろけを含む） | 0 cm（174 と同じ） | 0.00 cm | 0.02 cm（13.033 秒・歩き出した後の歩き。0.2 mm）・よろけの間 0.00 cm | ほぼ合う（決めてほしいことの 4） |
| 靴の沈み・両足とも浮いた | 0 cm | 0.00・0.00 | 0.00・0.00 | 合う |
| 1 コマの骨の動き（根の動きを除いた） | 6 cm（よろけ 8 cm） | 5.68 cm（左のつま先） | 5.68 cm・よろけの間 7.90 cm（右のすね） | 合う |
| 1 コマの骨の動き（世界・参考） | - | 9.83 cm（左足・歩き） | 11.02 cm（右のすね・よろけ） | 決めてほしいことの 5 |
| 頭の向き・時間 | 15〜25 度・0.6〜1.0 秒 | 22 度・0.85 秒 | 22 度・0.85 秒 | 合う |
| 目線（顔の向きとハコブくんの画面への向きの角度の最小） | 画面のほうを向く | 1.5 度（横 1.1・上下 1.1） | 6.1 度（横 4.5・上下 4.2） | 合う |
| 手と手すり | 手が手すりに入らない・のせるなら上に | - | 手の頂点が手すりの中 0・手のひらの中心は手すりの上の面から 3.5 cm・手の一番低い所 0.47 cm 上（19 コマ） | 合う |
- 体のすき間：看護師の肌・服・髪・靴の頂点と、ハコブくんの形（高さ 2 cm ごとの真上から見た外形）の、横と高さを合わせた距離
- 「1 コマの骨の動き」は、看護師の根の動き（1.25 m/秒＝1 コマ 4.2 cm）を引いた、姿勢だけの動きで数えた（全部の骨）

■ 5. 撮ったもの（1920×1080・30 コマ/秒・1 倍＝現実の速さ）
- closeup175_a.mp4：③-a 本番（寄りの切りかえ入り）16.0 秒・480 コマ（md5 bd5490c68bae5c83496c0e1a5f96d24c・1,145,489 バイト）
- closeup175_a_top.mp4：③-a 真上 16.0 秒（md5 760cf8dd99e689aad7bb1a4b5a9d9fd3・571,741 バイト）
- closeup175_b.mp4：③-b 本番（寄りの切りかえ入り）19.0 秒・570 コマ（md5 5fe70ec5360f5a5d4cf4160b5ddbfb8c・1,379,320 バイト）
- closeup175_b_top.mp4：③-b 真上 19.0 秒（md5 8690dbb247abcfa24bd08666c288ee69・765,881 バイト）
- 静止画 12 枚：③-a a_glance（目線・顔の寄り 7.133 秒）・a_smile（にっこり・画面の寄り 7.5 秒）・a_glance_main（同じ時の本番）・a_pass_main・a_pass_top（すれ違う所 8.933 秒）
  ③-b b_stumble_main・b_stumble_top（よろける所 7.13 秒）・b_rail_main（手すりに手を置く 7.78 秒）・b_stopped_main・b_stopped_top（止まった所 8.867 秒）・b_smile（にっこり 9.1 秒）・b_glance（目線 9.88 秒）
- 確かめ用の静止画 4 枚（KIOXIA stills_check/：看護師の前から・手すりの手の寄り）

■ 出力の場所
- KIOXIA：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/closeup/20261113_closeup175/
  video/（4 本）・stills/（12 枚）・stills_check/（4 枚）・out/（check175.txt・events175.txt・frames175_*.csv・bones175_*.csv・feet175_*.csv・unity.log）・an175_out.txt・closeup175_script.json
  tools/：make_script175.py（174 の台本から 175 の台本を作る。環境の値で位置・時刻を変えられる）・times.json（1 回めの走りで決まったにっこり・止まった時刻。カメラの切りかえと静止画に使う）・run175.sh（Unity で回す）・make175.py（動画・真上の文字）・an175.py（時刻と値）・face175.py（小さな笑みの顔の絵）
  試しの出力（t1〜t7）は /tmp/c175/try（KIOXIA には写していない）
- iCloud：…/サービスロボット導入シミュレーション/hospital/closeup175/ に動画 4 本と stills/ に静止画 12 枚。16 ファイルとも md5 が KIOXIA と同じ（確かめた）
- 台本 closeup175_script.json の md5：91d297f6d0b414f424b7da5932810758

■ ①② が変わっていないことの確かめ
CloseupDirector.cs・CloseupNurse.cs に足した値は、台本に無ければ 174 と同じになる。closeup174_script.json の load・receive を新しいコードで回し、174 の出力（KIOXIA closeup174 load/receive の bones167_*.csv）と骨の位置を比べた：load 830 行・receive 1025 行とも、差の最大 0 mm（同じ）。

■ check-in
- cs:139（12 件：closeup175_script.json・Editor/CloseupCorridor.cs・Textures/face175_smile_albedo.png・face175_smile_emission.png（と .meta）を追加、CloseupDirector.cs・CloseupNurse.cs を変更）
- 足したもの（コード）：CloseupCorridor.cs（廊下を組む・ハコブくんの決まり・確かめ・撮る。場面のファイルは保存しない）。CloseupDirector：キーの "lin"（同じ速さでつなぐ）・横への傾き hip_roll/spine_roll/chest_roll・腕を寄せる arm_in・足を着く所のずらし・足を運ぶ速さの形 swing_ramp・足を上げる形 lift_pow・手の的の ref "world"。CloseupNurse：横への傾き・腕を寄せる・顔の向き HeadForward
- 保留は Mixamo のフォルダ（Models/Animations/）だけ

■ 決めてほしいこと
1. 廊下の幅：手すりの間は 1.68 m。看護師の体の幅（手まで）0.476 m・ハコブくん 0.642 m で、③-a のすき間 0.5 m を取ると、残りは両側の手すりとのすき間を合わせて 6 cm しかなかった。そこで看護師の腕を 4 度だけ体へ寄せ（arm_in。手が太ももの横に来る。幅 0.435 m）、看護師は手すりと 3.8 cm、ハコブくんはふだん手すりと 7.2 cm の所を通る形にした。このため ③-b でハコブくんが壁の側へ寄れるのは 1.5 cm だけ（手すりと 5.2 cm）で、画では寄ったように見えない（止まるのは見える）。このままでよいか。寄る幅を見せるなら、③-a のすき間を 0.4 m にする・廊下を 2.0 m にする・片側の手すりをやめる、などのどれか
2. 看護師の腕を 4 度寄せたのは、162〜174 の歩きからの変え（腕の振り・脚はそのまま）。よいか
3. カメラ：幅 1.8 m の廊下では、看護師の顔（−z 向き）とハコブくんの画面（+z 向き）が向き合っているので、1 つのカメラで両方を前から写せる所が無い。本番はハコブくんの後ろの上から（看護師の顔・よろけ方が見える。ハコブくんは後ろ姿）にし、寄りを 2 つ（看護師の顔＝ハコブくんの側の斜め前から・ハコブくんの画面＝看護師の側の斜め前から）にして切りかえた。この形でよいか
4. 「すれ違う 2〜3 m 手前」：2 人の間が 2〜3 m だと、頭 25 度まででは画面のほうを向けない（25〜34 度が要る）ので、看護師がすれ違う所の 2.7 m 手前に来た時（2 人の間 4.0 m）から見る形にした。この読み方でよいか
5. 1 コマの骨の動き：根の動きを除いた姿勢だけの動きで 6 cm（よろけ 8 cm）以内にした。世界の位置で数えると、1.25 m/秒で歩く足は 1 コマ 9.83 cm、よろけは 11.02 cm になる（体ごと 1 コマ 4.2 cm 進むため。174 の歩きでも 7.51 cm で、参考にしていた）。この数え方でよいか
6. 足のすべり：③-b の歩き出した後の歩きで 0.02 cm（0.2 mm・13.033 秒）が出た（174 は 0.00 cm）。目に見えないので直していない。0 にするか
7. ③-b で止まったハコブくんは、寄る途中の向き 2 度のまま止まっている（止まっている間は動かない決まりのため）。このままでよいか
8. 表情集に「笑顔」という名前の絵が無いので「小さな笑み」を使った。よいか
9. Mixamo の FBX の Plastic への check-in（依頼163 の答えのとおり保留のまま）

判定：合格
```

### 依頼175 の確かめの出力（an175_out.txt）

```text
■ corridor_a  長さ 16.0 秒  台本の時刻 {'t_pass': 8.933, 'z_pass': 6.96, 't_glance': 6.733}
  ハコブくんの速さ 0.6000〜0.6000 m/秒（0.6 とのずれの最大 0.0000）・加速度 0.000〜0.000 m/秒²
  位置の差から出した前への速さ 0.6000〜0.6030 m/秒
  決まりの状態の移り: [(0.0, 'cruise')]
  にっこり 始め [7.0] おわり [8.5]
  体のすき間の最小 0.520 m（8.900 秒）
  前 5.0 m 以内に来てからの予想のすき間の最小 0.520 m・帯に入った いいえ・よろけを見た いいえ
  すれ違う時刻 8.900 秒（z 6.96 m）
  看護師の腰の横の位置：はじめ 0.595・最小 0.595（流れ 0.000 m）
■ corridor_b  長さ 19.0 秒  台本の時刻 {'t_stumble': 6.68, 't_settle': 8.43, 't_go': 9.73, 't_glance': 9.48}
  ハコブくんの速さ 0.0000〜0.6000 m/秒（0.6 とのずれの最大 0.6000）・加速度 -0.400〜0.400 m/秒²
  位置の差から出した前への速さ 0.0000〜0.6000 m/秒
  決まりの状態の移り: [(0.0, 'cruise'), (6.9, 'stop'), (13.767, 'cruise')]
  にっこり 始め [8.8] おわり [10.3]
  体のすき間の最小 0.534 m（12.467 秒）
  前 5.0 m 以内に来てからの予想のすき間の最小 -0.982 m・帯に入った はい・よろけを見た はい
  すれ違う時刻 12.233 秒（z 6.29 m）
  看護師の腰の横の位置：はじめ 0.595・最小 0.247（流れ 0.348 m）
  よろけ始め 6.680・減速の始まり（速さが 0.6 から下がった最初のコマの前）6.867（差 0.187 秒）・止まった 8.667（1.80 秒かけて）・走り出し 13.734
  止まっている間（153 コマ）の位置と向きの種類 1：[('-0.4662', '6.2892', '-2.000')]
  走り出した時に見ていた『後ろの距離』1.0494 m
  止まった所 x -0.466・z 6.289・手すりのすき間 0.052 m
  よろけの間の看護師とハコブくんの 2 人の前後の距離（看護師の体の前の端－ハコブくんの前の面）はじめ 3.48 m
```


## 作業ログ ― 残っていること

- 依頼173 からある、1コマで6cmを少し超えて動く3か所（①15.2秒・②16.17秒・②16.87秒）はそのまま
- ③-b で止まったハコブくんは、寄る途中の向き（2度）のまま止まっている。表情は表情集の「小さな笑み」を使った
- 看護師の動きの時刻は、慣れた人の速さを目安に決めた。現場の看護師が実際に何秒でやっているかは測っていない
- Mixamo の動きのファイルは、決めたとおり Unity の保存（check-in）の外に置いたまま
- 要所の場面の作業が終わるまで止めていた、病院の1日を回す依頼（依頼164）を再開する
