# E. π0.5 の失敗12件のつかみと持ち上げを記録から調べる（2026-11-07・依頼110）

**読むだけ。** 実機・Raspberry Pi・daemon・SSH・シリアルには触れていない。`runs/pi05_policy/` の記録を読み、このフォルダにだけ書いた。r2r2r-scripts のコードは変えていない（`pi05/run_policy_client.py` は読むだけ）。

対象: 失敗12件と比べる成功5件（依頼107 の `B/selection.json` と同じ）。成功の `pi05_20261031_185246` は爪を閉じる命令の記録がなく（推論1回・送っていない）、上カメラもピンぼけなので、比べる成功は実質4件。

## 先に読むこと（結論）

| 問い | 答え |
|---|---|
| 1 閉じたあと π0.5 は持ち上げを出したか | **12件とも出していた**。閉じた次のかたまりの生の値で爪先 +9〜35mm、その次で +25〜71mm（成功は +25〜37mm → +56〜62mm）。**範囲の制限で削られたものは0**（閉じたあと人が手を入れるまでのかたまりに制限の記録なし）。送った値に届かない分（肩 j1 で 0.5〜2.2°・手首 j4 で 0.4〜2.7°）は**成功も同じ**で、失敗だけの特徴ではない。違いは、**失敗の10件で、人が π0.5 の持ち上げのかたまりを送らずに止めた**こと（成功は4件とも、j0 を回し始めるまで止めていない）。依頼107 で「持ち上げが 2〜15mm しかない」とした5件は、3件（185133・183219・191547）が人が止めた／記録を終えたもの、2件（183426・184312）が π0.5 が 16〜33mm 上げながら j0 を 8° 以上回し始めたもの |
| 2 閉じたときアームは止まっていたか | ほぼ止まっていた。閉じる前 0.3 秒の関節の速さ 0〜2.6°/s（成功 0〜0.3°/s）、爪を待つ 0.8 秒の間の動き 0〜1.1°（j4）。2.4〜2.6°/s の2件（184312・185050）は最後の送信の 0.09〜0.2 秒あとに閉じている。**爪の命令のあと送信が無視されて固まった件（LOG352 の形）は0**（送信の記録がある8件で、閉じたあと最初の送信のあと腕は 2 秒以内に 1.4〜8.1° 動いた。中継点の送り直しも0） |
| 3 渡した状態は実際とずれていたか | `state_source=target` のかたまりで、目標と実測の差は閉じるかたまり 0.9〜2.9°・次のかたまり 0.8〜2.9°（成功 0.9〜2.1°・1.2〜1.6°）。肩 j1 はおおむね目標の方が 0.2〜1.0° 小さい（上がっている）。**成功と同じ幅で、失敗の原因とは見えない** |
| 4 閉じた瞬間、ブロックは爪の間にあったか | **2件は爪の間にない（空振り）**: 閉じた直後の爪先の青い印の間が 73〜75px（ブロックを挟んだ件は 99〜100px）。**7件は浅い**: ブロックが爪先の印の線から 32〜40px（約 12〜15mm）先へはみ出したまま閉じている（成功 −14〜18px）。3件は成功と見分けがつかない。上からの画なので、**ブロックが爪といっしょに持ち上がったか（高さ）は言えない** |
| 5 爪の開き具合の記録 | **ない**。`states.csv` の `gripper_state` は送った命令（0/1）だけで、爪の値の読み返しは記録していない。代わりに上の画の青い印の間（4）で比べた |
| 6 原因（失敗12件） | **爪の間に入っていない 9件**（浅い 7・空振り 2）・**分からない 3件**・持ち上げを出していない 0・制限で削られた 0・送っても届かない 0・動きながら閉じた 0 |

## 1. 閉じたあとの持ち上げ（生の値 → 制限のあと → 送った値 → 届いた角度）

爪先の高さは角度から近似式で出した（依頼107 B の Unity の爪先の高さ 2,085 行に j1〜j4 の三角関数を当てはめた。別に取り分けた 585 行で誤差の中央値 0.8mm・最大 5.4mm。`e_fk_fit.json`）。**実機とのずれは測っていない**ので、値は「閉じた瞬間からどれだけ上がったか」の比べ合いにだけ使う。

- 生の値: π0.5 が出した行動のうち、実際に使うステップ（10 ステップ目。爪を切り替えるかたまりは切り替えの1つ前）
- 制限のあと: `--raw-dir` の学習データの範囲 ±10°・肩 88°・j4 の安全範囲と、1回 ±20° の移動量の制限をかけた値（ログの `vias[].planned_target`）
- 送った値: `sent_targets` の最後
- 届いた: 送ったあと読んだ角度（`vias[].actual_after`）。次のかたまりの実測ともほぼ同じ（0.3° 以内）
- 窓: 閉じてから、j0 が 8° 回るか・次に開くか・HOME まで（依頼107 B と同じ）。「人」は人の補正（キーボード／ゲームパッド）で、前後の爪先の高さ

| 試行 | 結果 | 閉じた次のかたまり（c+1） | その次（c+2） | そのあと |
|---|---|---|---|---|
| pi05_20261030_185133 | 失敗 | 生 22.0 / 制限 22.0 / 送 22.0 / 届 9.7 | 生 71.0（j0 +19°）**送らず** | 人 11.3→3.8（下げた）、c+3 生 35.8→届 22.4 |
| pi05_20261030_190659 | 失敗 | 生 31.7 **送らず** | 人 0.4→−1.1、生 30.7 **送らず** | 人 −1.1→−2.9、c+3 生 25.6→届 15.4 |
| pi05_20261031_180023 | 失敗 | 生 18.1 **送らず** | 人 2.5→14.8、生 32.9→届 20.5 | 生 53.5 送らず、人 20.5→24.5 |
| pi05_20261031_183219 | 失敗 | 生 29.6 **送らず** | （記録を終えた） | |
| pi05_20261031_183426 | 失敗 | 生 35.1 / 送 35.1 / 届 15.6（j0 +9°。ここで窓が終わる） | | |
| pi05_20261101_191547 | 失敗 | 生 16.1 / 送 16.1 / 届 5.5 | 生 46.9（j0 +15°）**送らず**（記録を終えた） | |
| pi05_20261101_192758 | 失敗 | 生 22.5 **送らず** | 人 1.9→11.7、生 35.0 **送らず** | |
| pi05_20261101_194042 | 失敗 | 生 17.5 **送らず** | 人 2.4→115.7 | |
| pi05_20261106_184312 | 失敗 | 生 21.6 / 送 21.6 / 届 8.2 | 生 41.5 / 送 41.5 / 届 32.7（j0 +17°） | |
| pi05_20261106_185050 | 失敗 | 生 18.2 / 送 18.2 / 届 5.6 | 生 35.8 **送らず** | 人 5.9→147.3 |
| pi05_20261106_185225 | 失敗 | 生 13.8 / 送 13.8 / 届 7.1 | 生 36.5 **送らず** | 人 7.6→8.7、人 9.9→63.3 |
| pi05_20261106_185415 | 失敗 | 生 8.8 / 送 8.8 / 届 4.1 | 生 25.3 / 送 25.3 / 届 7.7 | 生 39.0 送らず、人 9.4→64.4 |
| pi05_20261030_184245 | 成功 | 生 29.9 / 送 29.9 / 届 17.1 | 生 59.5 / 送 59.5 / 届 51.8（j0 +11°） | |
| pi05_20261030_210954 | 成功 | 生 25.2 / 送 25.2 / 届 9.8 | 生 56.3 / 送 56.3 / 届 47.7（j0 +13°） | |
| pi05_20261031_175527 | 成功 | 生 25.0 / 送 25.0 / 届 9.8 | 生 57.7 / 送 57.7 / 届 48.7（j0 +15°） | |
| pi05_20261101_190347 | 成功 | 生 36.5 / 送 36.5 / 届 21.8 | 生 62.0 / 送 62.0 / 届 56.3（j0 +17°） | |

（単位 mm。閉じた瞬間の爪先の高さからの差）

読み取れること

- **持ち上げを出していない試行はない**。c+1 の生の値は失敗 8.8〜35.1mm（中央値 20）・成功 25.0〜36.5mm（中央値 27.5）で、失敗の方がやや小さいが重なる。c+2 では失敗も 25〜71mm を出している
- **範囲の制限で削られた値はない**（制限のあとの値＝生の値。制限の記録 `notes` が出たのは、194042 の人の補正のあとの j4 の移動量の制限だけ）
- **送った値と届いた角度の差は成功にもある**（c+1 で失敗 5〜20mm・成功 13〜15mm、c+2 で失敗 9〜18mm・成功 6〜9mm）。関節で見ると肩 j1 が 0.5〜2.2°、手首 j4 が 0.4〜2.7° 足りない（`_send_and_wait_arrival` は 3° 以内で着いたとする）。次のかたまりの実測でも同じ差が残っていて、動き続けてはいない
- **失敗の10件は、π0.5 の持ち上げのかたまりを人が送らずに止めた**（上の表の「送らず」。184312 と 183426 だけは、j0 を回し始めるまで π0.5 のかたまりを送っている）。成功の4件は、j0 を回し始めるまで止めていない。止めた理由は記録にないが、4 の画で多くはブロックを浅くつかんでいた
- 依頼107 の「閉じたあと 2〜15mm しか持ち上げていない」5件（185133・183219・183426・191547・184312）は、π0.5 が上げを出していなかったのではなく、185133・183219・191547 は人が止めた（183219・191547 は記録を終えた）、183426・184312 は 15〜33mm 上げながら j0 が 8° 回った（依頼107 の数え方では、そこで持ち上げの窓が終わる）

ファイル: `e_chunks.csv`（閉じるかたまりの1つ前から窓の終わりまでの、かたまりと人の補正の1行ずつ。列は下の「列の意味」）・`e_summary.csv`（試行ごと）

## 2. 閉じたときアームは止まっていたか・爪の命令のあと送信が無視されたか

| 試行 | 結果 | 閉じる前 0.3 秒の速さ °/s | 爪を待つ 0.8 秒の動き °（関節） | 最後の送信から閉じるまで 秒 | そのときの目標と実測の差 °（関節） | 閉じたあと最初の送信 |
|---|---|---|---|---|---|---|
| 185133 | 失敗 | 1.2 | 0.0 | 記録なし | — | 送信の記録なし（10/30・10/31 は `send_angles` の行がない。中継点の送り直しは0） |
| 190659 | 失敗 | 0.6 | 0.0 | 記録なし | — | 同上 |
| 180023 | 失敗 | 2.0 | 0.0 | 記録なし | — | 同上 |
| 183219 | 失敗 | 1.2 | 0.0 | 記録なし | — | 同上 |
| 183426 | 失敗 | 0.3 | 0.0 | 記録なし | — | 同上 |
| 191547 | 失敗 | 0.3 | 0.0 | 1.65 | 2.0（j4） | 7.0 秒後・2 秒で 2.5° 動いた |
| 192758 | 失敗 | 1.5 | 0.0 | 1.58 | 1.2（j4） | 人の補正 13.7 秒後・1.4° 動いた |
| 194042 | 失敗 | 0.3 | 0.0 | 1.65 | 1.7（j4） | 人の補正 14.3 秒後・1.8° 動いた |
| 184312 | 失敗 | **2.4** | **1.1（j4）** | **0.20** | 1.4（j4） | 3.0 秒後・8.1° 動いた |
| 185050 | 失敗 | **2.6** | **1.0（j4）** | **0.09** | 1.7（j4） | 7.3 秒後・4.6° 動いた |
| 185225 | 失敗 | 0.0 | 0.5（j2） | 0.09 | 0.8（j4） | 3.7 秒後・6.2° 動いた |
| 185415 | 失敗 | 0.0 | 0.4（j4） | 0.21 | 1.0（j2） | 2.7 秒後・6.5° 動いた |
| 184245 | 成功 | 0.3 | 0.0 | 記録なし | — | 同上 |
| 210954 | 成功 | 0.3 | 0.0 | 記録なし | — | 同上 |
| 175527 | 成功 | 0.3 | 0.0 | 記録なし | — | 同上 |
| 190347 | 成功 | 0.0 | 0.0 | 5.98 | 1.7（j4） | 5.4 秒後・2.7° 動いた |

- 閉じる命令は、かたまりの最後の送信が「3° 以内に着いた」と返ったすぐあとに出る（`run_policy_client.py` 1598〜1604 行）。11/06 の4件は最後の送信から 0.09〜0.21 秒で閉じている。そのうち 184312・185050 は閉じる前に 2.4〜2.6°/s で動いていて、爪を待つ間に j4 が約 1° 動いた。**j4 の 1° は爪先で数 mm で、原因と言えるほどではない**と見た（この2件のうち 185050 は浅いつかみ、184312 は成功と同じ形で閉じている）
- 爪の命令（`set_gripper_value`）の返事は 0.01 秒で、爪が閉じきるのを待っていない（0.8 秒待つだけ。`GRIPPER_SLEEP`）。閉じきったかどうかの記録はない
- 「送信が無視された」は「目標が 2° 以上離れているのに、2 秒たっても 0.5° 未満しか動かない」で数えた。**該当0**。中継点の送り直し（`retried`）も、閉じたあとのかたまりで0。人の補正の1刻みで「着いた」と判定されなかったものは4件に1回ずつあるが、どれも腕は動いていて（0.5〜18°）、固まってはいない
- 10/30・10/31 の記録には送信（`send_angles`）の行がないので、最後の送信の時刻は分からない

ファイル: `e_close.csv`

## 3. π0.5 に渡した状態と実際のずれ

`--state-from-target` で、前に送った目標を状態として渡している（目標と実測の差が 6° を超えたら実測。`STATE_TARGET_MAX_GAP_DEG`）。

| | 閉じるかたまり（c+0）の差 ° | うち肩 j1 °（目標−実測） | 次のかたまり（c+1）の差 ° | うち肩 j1 ° |
|---|---|---|---|---|
| 失敗 12件 | 0.0〜2.9（target 10件・measured 2件） | −0.9〜0.0 | 0.8〜2.9（12件とも target） | −0.9〜+0.5 |
| 成功 4件 | 0.9〜2.1（4件とも target） | −0.9〜−0.5 | 0.0〜1.6（target 3件・measured 1件） | −1.0〜0.0 |

差がいちばん大きい関節はたいてい j4（2 の「目標と実測の差」と同じ、着いたとみなす 3° の中に残る分）。**失敗も成功も同じ幅**。

## 4. 閉じた瞬間、ブロックは爪の間にあったか

一覧画像（1行1試行。左から 閉じる直前・閉じて 1.0 秒後・π0.5 の持ち上げ1かたまり目を送り終えた直後・爪先が閉じたときより 40mm 上がった 0.5 秒後）:

- **`e_grasp_failures.jpg`**（失敗12件。赤い字）
- **`e_grasp_successes.jpg`**（成功5件。緑の字。185246 は閉じる命令がないので空）

ブロックのあたり（閉じる直前のコマの赤の重心）を 420×315px で切り出し 1.25 倍。コマの時刻は `top_frame_log.csv` の `capture_ts`。カメラの映像の遅れは測っていない。使ったコマは `e_frames.csv`。

閉じた直後のコマを数えた値（`e_grasp_metrics.csv`）:

| 試行 | 結果 | 青い印の間 px | ブロックのはみ出し px（爪先の印の線から先） | 目安 mm |
|---|---|---|---|---|
| 185133 | 失敗 | 99.5 | 15.7 | 6 |
| 190659 | 失敗 | 100.0 | 34.5 | 13 |
| 180023 | 失敗 | 99.4 | 36.6 | 14 |
| **183219** | 失敗 | **74.5** | 78.8 | 30 |
| 183426 | 失敗 | 99.8 | 40.3 | 15 |
| **191547** | 失敗 | **72.6** | 75.2 | 29 |
| 192758 | 失敗 | 99.2 | 35.3 | 14 |
| 194042 | 失敗 | 99.3 | 32.3 | 12 |
| 184312 | 失敗 | 99.9 | 20.8 | 8 |
| 185050 | 失敗 | 99.8 | 35.0 | 13 |
| 185225 | 失敗 | 99.3 | 8.7 | 3 |
| 185415 | 失敗 | 100.1 | 33.0 | 13 |
| 184245 | 成功 | 100.2 | 6.7 | 3 |
| 210954 | 成功 | 100.2 | 12.0 | 5 |
| 175527 | 成功 | 99.5 | −13.5 | −5 |
| 190347 | 成功 | 99.3 | 17.5 | 7 |

- 「青い印」は爪先の2つの青い丸。閉じる前はどれも 135〜138px。ブロックを挟むと 99〜100px で止まり、空振りでは 73〜75px まで閉じる
- 「はみ出し」は、選んだ赤の塊の下の端（画像の下＝根元から遠い側）と、青い印2つの縦の平均との差。mm の目安はブロックの上面（約 62px／24mm）から 2.6px/mm とした
- 閉じる直前と直後で、ブロックを挟んだ試行のはみ出しは 18〜29px 減る（爪の閉じ方で爪先が前に出るため。成功も同じ）。空振りの2件は減らない（−7px・+17px）

見え方の違い（画を見て）

- **成功4件**: ブロックが両方の爪の真ん中に入り、ブロックの奥の端が爪の付け根の近くまで入っている。40mm 上がったときも、ブロックは爪先の印の間にあり、j0 を回すといっしょに動く
- **空振り 2件（183219・191547）**: 閉じる直前、ブロックは爪先より 1 つ分以上先にある。閉じたあと、爪はブロックの手前（根元側）で閉じ、191547 ではブロックが押されて約 30° 回っている
- **浅い 7件（190659・180023・183426・192758・194042・185050・185415）**: ブロックは左右の爪の間にあるが、爪先の線から 12〜15mm 先へはみ出していて、爪がブロックの根元側の端だけをつかんでいる。185415 は 40mm 上がったとき、ブロックが爪先の印より根元側に写り、爪から抜けて床に残ったように見える
- **成功と見分けられない3件（185133・184312・185225）**: 閉じた形ははみ出し 9〜21px・印の間 99〜100px で成功の幅。185133 は閉じてから 150 秒ほどブロックを爪の間に入れたまま人の補正を続け、最後は箱の外のマットにあった。184312 はブロックを爪の間に入れたまま箱の上まで回っている。185225 は人の補正で 72mm 上げたときに爪から離れた
- 上からの画では、**ブロックが床から浮いたか（爪といっしょに持ち上がったか）は言えない**。言えるのは「爪の間に横から見て入っているか」と「横に離れたか」だけ

ブロックが爪から横に離れた時刻（`e_track.csv`・`e_track_series.csv`。0.5 秒おきのコマで、ブロックの重心と爪先の印の中点の距離が閉じた直後より 40px 以上離れたコマが2つ続いた最初）:

| 試行 | 離れた時刻（閉じてから）秒 | そのときの爪先の高さ mm | j0 の回り ° | それまでの最高 mm |
|---|---|---|---|---|
| 185133 | 155.5 | 26.4 | 13.8 | 26.4 |
| 190659 | 192.5 | 52.1 | 0.3 | 52.1 |
| 180023 | 離れていない（HOME まで） | — | — | 39.4 |
| 183219 | 離れていない（空振り。はじめから離れている） | — | — | 2.3 |
| 183426 | 144.0 | 115.0 | 9.2 | 115.0 |
| 191547 | 離れていない（空振り） | — | — | 7.5 |
| 192758 | 59.5 | 12.9 | 0.3 | 61.3 |
| 194042 | 88.5 | 11.1 | 7.8 | 115.7 |
| 184312 | 離れていない（HOME まで） | — | — | 157.0 |
| 185050 | 22.0 | 145.3 | 0.8 | 146.7 |
| 185225 | 16.5 | 72.1 | 0.1 | 72.3 |
| 185415 | 22.5 | 60.2 | 1.7 | 60.2 |
| 成功4件 | 離れていない（開く命令まで） | | | 78.5〜128.3 |

浅い7件のうち 4件（190659・183426・185050・185415）は、人の補正で 52〜145mm 上げたあたりで離れている。192758・194042 は 61・116mm まで上げたあと下げ、低い所（11〜13mm）で離れた。180023 は HOME まで離れていない（上げたのは 39mm まで）

## 5. 爪の開き具合の記録

**ない**。`recording/states.csv` の `gripper_cmd` 行の `gripper_state` は送った命令（0=開・1=閉）で、`rpc` 行も `set_gripper_value` の返事の時間だけ。`log.jsonl` の `grip_state`（ゲームパッド）・`grip_before/after`（補正）も命令の状態。daemon に爪の値や電流を読む `read_servo` を足したが、Pi にはまだ置いていない（git `32a4280`）ので、この17件には入っていない。代わりに 4 の青い印の間で比べた。

## 6. まとめ（失敗12件の原因）

決め方（`e_cause.py`。上から順に見て最初に当たったもの。線は成功4件の幅から置いたこの依頼での目安）:
1. 爪の間に入っていない（空振り）: 閉じた直後の青い印の間 < 90px
2. 爪の間に入っていない（浅い）: はみ出し > 成功の最大（17.5px）+ 10px
3. 動きながら閉じた: 閉じる前の速さ > 5°/s か、爪を待つ間に 3° 以上動いた
4. 持ち上げを出していない: 人の補正より前のかたまりで、生の値が 20mm 以上上げていない
5. 制限で削られた: 生の値は 20mm 以上、制限のあとで 20mm 未満
6. 送っても届かない: 送った値は 20mm 以上で届いた角度が 20mm 未満、かつ成功より大きく足りない
7. 分からない

| 試行 | いちばんありそうな原因 | 根拠の数字 |
|---|---|---|
| pi05_20261030_185133 | 分からない | 閉じた形は成功の幅（はみ出し 16px・印の間 100px）。π0.5 は c+1 で 22mm 上げを送り届いたのは 10mm、c+2（71mm・j0 +19°）は人が止めて下げた。そのあと 150 秒ほど人の補正を続け、ブロックは箱の外のマットに残った |
| pi05_20261030_190659 | 爪の間に入っていない（浅い） | はみ出し 34px（約 13mm。成功 −14〜18px）。π0.5 の c+1（32mm）・c+2（31mm）は人が止めた。人の補正で 52mm 上げたあたりで離れた |
| pi05_20261031_180023 | 爪の間に入っていない（浅い） | はみ出し 37px（約 14mm）。c+1（18mm）は人が止めた |
| pi05_20261031_183219 | 爪の間に入っていない（空振り） | 青い印の間 74px（成功 99〜100px）、ブロックが印の線から 79px 先。c+1（30mm）は人が止めて記録を終えた |
| pi05_20261031_183426 | 爪の間に入っていない（浅い） | はみ出し 40px（約 15mm）。π0.5 は c+1 で 35mm 上げを送り届いたのは 16mm（j0 +9°）。115mm 上げたあたりで離れた |
| pi05_20261101_191547 | 爪の間に入っていない（空振り） | 青い印の間 73px、ブロックが 75px 先で約 30° 回された。c+1 は 16mm を送り 6mm、c+2（47mm）は人が止めて記録を終えた |
| pi05_20261101_192758 | 爪の間に入っていない（浅い） | はみ出し 35px（約 14mm）。c+1（23mm）・c+2（35mm）は人が止めた |
| pi05_20261101_194042 | 爪の間に入っていない（浅い） | はみ出し 32px（約 12mm）。c+1（18mm）は人が止め、人の補正で 116mm 上げた |
| pi05_20261106_184312 | 分からない | 閉じた形は成功の幅（はみ出し 21px）。π0.5 は c+1・c+2 で 22・42mm 上げを送り、届いたのは 8・33mm（成功と同じくらい）、j0 +17°。ブロックを爪の間に入れたまま箱の上まで運んでいる。閉じる 0.2 秒前まで動いていた（2.4°/s・爪を待つ間に j4 1.1°） |
| pi05_20261106_185050 | 爪の間に入っていない（浅い） | はみ出し 35px（約 13mm）。c+1 は 18mm を送り 6mm、c+2（36mm）は人が止め、人の補正（j1 を −15° ずつ押し続け）で 145mm 上げたところで離れた。閉じる 0.09 秒前まで動いていた（2.6°/s・j4 1.0°） |
| pi05_20261106_185225 | 分からない | 閉じた形は成功の幅（はみ出し 9px）。c+1 は 14mm を送り 7mm、c+2（37mm）は人が止めた。人の補正で 72mm 上げたときに離れた |
| pi05_20261106_185415 | 爪の間に入っていない（浅い） | はみ出し 33px（約 13mm）。c+1・c+2 は 9・25mm を送り 4・8mm、c+3（39mm）は人が止め、人の補正で 60mm 上げたときに離れた |

**原因ごとの件数: 爪の間に入っていない 9（浅い 7・空振り 2）・分からない 3・持ち上げを出していない 0・制限で削られた 0・送っても届かない 0・動きながら閉じた 0**

気をつけること

- 「浅い」は「爪の間に入っていない」に入れたが、ブロックの一部（根元側の 9〜12mm 前後）は爪の間にある。上からの画では、爪がブロックのどの高さをつかんだかは分からない
- 浅い・空振りのどちらも、**閉じる前の位置が成功より根元側に寄っている**（閉じる直前のはみ出し: 浅い 55〜64px・空振り 58〜86px、成功 16〜45px）。π0.5 が爪を閉じると決めた位置が、ブロックの 1〜2cm 手前だった形
- 爪先の高さは Unity から作った近似式。実機の爪先の高さは測っていない
- 人が π0.5 のかたまりを止めた理由は記録にない。ここでは画から「浅くつかんでいた」ことだけを言っている

## 列の意味（`e_chunks.csv`）

`rel_to_close` 閉じたかたまりからの番号（0=閉じたかたまり）／`executed` 送ったか／`after_window` j0 が 8° 回ったあと（窓の外）か／`state_meas_gap_*` 渡した状態と実測の差／`h_*_mm` 閉じた瞬間からの爪先の高さの差（`raw_used` 使うステップの生の値・`raw_horizon_max` 10 ステップの中の最大・`clipped` 制限のあと・`target_from_actual` 送る直前の実測からかけ直した値・`sent` 送った値・`actual_after` 届いた角度）／`j0_raw_used_minus_close` 生の値の j0 − 閉じたときの j0／`notes` 制限の記録／`via_retried_steps` 中継点で送り直したステップ。`kind=correction` の行は人の補正（`h_state_mm` 始め、`h_actual_after_mm` 終わり）

## やり直し方

```bash
cd "/Volumes/KIOXIA/r2r2r-data/lab/twin/20261107_失敗の再生と置き場所/E_つかみと持ち上げ"
python3 -I e_analyze.py        # e_fk_fit.json・e_chunks.csv・e_close.csv・e_summary.csv
python3 -I e_images.py         # e_grasp_failures.jpg・e_grasp_successes.jpg・e_frames.csv
python3 -I e_grasp_metrics.py  # e_grasp_metrics.csv
python3 -I e_track.py          # e_track.csv・e_track_series.csv（数分）
python3 -I e_cause.py          # e_cause.csv
```
