予防安全システムの設計をどこから始めるか。センサの選定でも、AEB の制御則でもなく、最初に立つべき場所は「物理が許す最後のチャンスはいつか」という問いです。本記事ではその答えにあたる「最終制動点(latest braking point)」を、運動学から導出し、実務の設計判断とどう結びつくかを整理します。
必要制動距離の導出
車が一定の減速度 a [m/s²] でブレーキをかけ続けるとき、速度 v [m/s] からゼロになるまでの走行距離を求めます。
等減速直線運動の基本式は次の通りです。
v² = v₀² − 2·a·d
速度がゼロ(v = 0)になる距離 d を解くと、
d = v² / (2·a)
これが必要制動距離です。速度の単位を km/h で扱う場合、まず m/s に変換します(kinematics.ts の kmphToMps 関数が担当)。
v [m/s] = v [km/h] / 3.6
また減速度 a は、路面摩擦と制動力の総和をまとめて「ブレーキ能力 b [g]」で表し、重力加速度 G = 9.81 m/s² と掛け合わせて得ます(brakeDecelMps2 関数)。
a [m/s²] = b [g] × 9.81
たとえば自車速 40 km/h(≈ 11.1 m/s)、ブレーキ能力 0.9 g(≈ 8.83 m/s²)のとき、
d = 11.1² / (2 × 8.83) ≈ 7.0 m
速度の二乗が効いているため、速度が2倍になると必要制動距離は4倍に膨らみます。これが「高速域で余裕が急激に縮む」直感的な理由です。
最終制動点の定義
必要制動距離が分かれば「最終制動点」の定義は単純です。
現在の車間距離がこの必要制動距離を下回った瞬間、その想定ブレーキ能力では衝突を物理的に回避できなくなる。この「下回る直前の境界」が最終制動点である。
言い換えれば、最終制動点は「今すぐフルブレーキを踏んでも停止できるぎりぎりの距離」です。それ以遠なら回避可能、それ以内は回避不能——という二値の境界になります。
本サイトの kinematics.ts における実装は lastChanceGapM 関数です。
export const lastChanceGapM = (
speedKmph: number,
brakeG: number,
targetSpeedKmph = 0,
): number => {
const vRel = relativeSpeedMps(kmphToMps(speedKmph), kmphToMps(targetSpeedKmph));
const a = brakeDecelMps2(brakeG);
return a > 0 ? (vRel * vRel) / (2 * a) : Infinity;
};
この値が、トップページのデモ で橙の破線として描画される「最終制動点」に対応します。スライダで速度を上げると橙の破線が自車に近づき、「回避可能な時間的余裕」が急激に縮まる様子を直感的に確認できます。
移動対象への一般化:相対速度で置き換える
停止対象の場合は自車速 v_s がそのまま接近速度でした。では前方車両が同方向に走っている(速度 v_t)場合はどうなるでしょうか。
接近の実効速度は相対速度 v_rel です。
v_rel = max(v_s − v_t, 0)
v_t ≥ v_s なら相手の方が速く(または同速)、自車は追いつかないため v_rel = 0(衝突しない)とみなします。
必要制動距離の式は、v を v_rel に置き換えるだけで移動対象に対応します。
必要制動距離(移動対象)= v_rel² / (2·a)
lastChanceGapM の第3引数 targetSpeedKmph に前方車両の速度を渡すと、内部で relativeSpeedMps を呼んでこの相対速度を計算します。targetSpeedKmph = 0(省略時デフォルト)のとき v_rel = v_s となり、停止対象の結果と完全一致する設計になっています。
rearEndStateAt 関数も同じ考え方で動作します。時刻 t における車間 gap を gap₀ − v_rel · t で更新し、回避可否 avoidable を gap ≥ lastChanceGapM(...) で判定しています。
数値で感じるスケール感
速度・ブレーキ能力と必要制動距離の関係を表にまとめます。a は 0.9 g(≈ 8.83 m/s²)固定です。
| 速度 (km/h) | 速度 (m/s) | 必要制動距離 (m) |
|---|---|---|
| 10 | 2.78 | 0.4 |
| 20 | 5.56 | 1.7 |
| 30 | 8.33 | 3.9 |
| 40 | 11.11 | 7.0 |
| 50 | 13.89 | 10.9 |
| 60 | 16.67 | 15.7 |
| 80 | 22.22 | 27.9 |
40 km/h から 80 km/h に速度が倍になると、必要制動距離は 7.0 m → 27.9 m と 4倍になります。この急峻な増加が「センサは速度が上がるほど長い検知距離が要る」という直感と直結します。
ブレーキ能力を 0.6 g(≈ 5.89 m/s²)に落とすと 80 km/h での必要制動距離は 41.8 m に跳ね上がります。路面状態(濡れ路・凍結)や積載条件でブレーキ能力が変動するシナリオを設計に織り込む重要性が、この一式で定量的に見えてきます。
設計への含意:境界から逆算する
最終制動点の意義は「境界を把握すること」だけではありません。この境界を起点に、予防安全システムの要件を逆算できる点が実務上の価値です。
センサ検知距離の下限
AEB が介入するには、まずセンサが前方物体を検知している必要があります。自車速 v_s、想定ブレーキ能力 a のとき、最終制動点での最小必要距離は lastChanceGapM が与えます。センサはこれより手前で確実に検知を完了していなければなりません。
さらに現実には反応遅れ(ドライバー or AEB コントローラの判断時間)と、ブレーキの油圧立ち上がり時間が加わります。仮に総遅れ時間を τ [s] とすると、センサ検知が必要な距離は次式に広がります。
検知必要距離 ≥ v_rel² / (2·a) + v_rel · τ
この「遅れ時間分の走行距離」が現在のデモには含まれていない(Phase 1 は運動学のみ)項目であり、Phase 2/3 での拡充対象になっています。
AEB 介入タイミングの設定
timeToLastChanceS 関数は「今から最終制動点に達するまでの時間」を返します。
return (inp.gap0M - lc) / vRel;
この値が AEB システムの TTC しきい値設計に直接対応します。「残り X 秒で制動を開始しなければ間に合わない」——この X を具体的な数字として持つことが、介入タイミングの過剰な早期化(乗員の不快感)と介入遅延(衝突リスク)のバランスを取る設計判断の出発点です。
必要減速度から性能要件を決める
rearEndStateAt が返す requiredDecelMps2 は「現在の車間を維持したまま v_rel をゼロにするのに今すぐ必要な減速度」です。
requiredDecel = v_rel² / (2 · gap)
この値が車両のブレーキ能力上限を超えた瞬間に avoidable が false に転じます。設計観点では「どの速度域・どの車間域でこの値が上限を超えるか」を事前に把握することで、AEB の作動上限速度・最大ブレーキ圧の仕様策定が定量的に行えます。
デモで体感する
ここまで解説した内容は、トップページのデモ で実際にパラメータを操作しながら確認できます。
- 速度スライダを動かすと橙の破線(最終制動点)の位置がリアルタイムで変化します
- ブレーキ能力を下げると最終制動点が自車に近づき、余裕が縮まる様子が見えます
- 再生ボタンを押すと車間が縮まっていく時系列が流れ、最終制動点通過のタイミングが分かります
本記事の数式と対照しながら操作することで、v²/(2a) のスケール感が体に馴染むはずです。
まとめ
- 一定減速度 a で速度 v から停止するのに必要な距離は v²/(2a)。速度の2乗が効くため高速域で急増する。
- 最終制動点は「現在の車間がこの距離を下回る境界」であり、それ以内では物理的に回避不能になる。
- 相手が動く場合は v を相対速度 v_rel = v_s − v_t に置き換えるだけで同じ式が成立する(
lastChanceGapMの第3引数で対応)。 - この境界から逆算することで、センサ検知距離・AEB 介入タイミング(
timeToLastChanceS)・必要減速度(requiredDecelMps2)の要件を定量的に導出できる。
次のステップとして、CCRs(停止対象)と CCRm(移動対象)でこの要件がどう変わるかを「CCRs と CCRm の違い」で取り上げています。