「あと何秒で接触するか」——これが TTC(Time To Collision, 衝突余裕時間)という指標の本質です。シンプルな数式でありながら、AEB(自動緊急ブレーキ)の介入タイミング設計を考えるとき、TTC は最も基本的な判断軸の一つになります。本記事では TTC の定義と算出を本サイトの実装と照らし合わせながら整理し、「いつ介入するか」という設計上のトレードオフを掘り下げます。
1. TTC の定義:車間を接近速度で割る
TTC の定義はシンプルです。
TTC = gap / v_rel
gap:現在の車間距離 [m](自車前端〜前方物体後端)v_rel:相対速度(接近速度)[m/s]
相対速度が一定のまま変化しないと仮定したとき、「あと TTC 秒で接触する」という予測値です。
停止対象と移動対象で v_rel が変わる
停止している前方物体(CCRs シナリオ相当)に対しては、接近速度は自車速度そのものです。
v_rel = v_s (ターゲット停止時)
TTC = gap / v_s
前方車両が同方向に走行している場合(CCRm シナリオ等)は、相対速度が支配します。
v_rel = max(v_s − v_t, 0) (v_t: ターゲット速度)
TTC = gap / v_rel
v_t ≥ v_s なら自車は追いつかないため v_rel = 0、つまり TTC = ∞(衝突しない)となります。
kinematics.ts での実装
本サイトの src/sim/core/kinematics.ts では、この TTC を rearEndStateAt 関数が返す RearEndState の ttc フィールドとして管理しています。
// TTC = 残車間 / 相対速度。相対速度 0 なら衝突しない(∞)。
const ttc = vRel > 0 ? gap / vRel : Infinity;
また collisionTimeS 関数は、初期状態(t=0)から接触までの時間を直接計算します。
export const collisionTimeS = (
speedKmph: number,
gap0M: number,
targetSpeedKmph = 0,
): number => {
const vRel = relativeSpeedMps(kmphToMps(speedKmph), kmphToMps(targetSpeedKmph));
return vRel > 0 ? gap0M / vRel : Infinity;
};
rearEndStateAt().ttc は時刻 t における残車間 gap を使うため「現時点からの TTC」、collisionTimeS は初期車間 gap0M を使うため「シナリオ開始からの接触時刻」という位置づけの違いがあります。
2. TTC と「最終制動点までの時間」の違い
TTC を理解するうえで混同しやすいのが、timeToLastChanceS 関数が返す「最終制動点までの時間」です。両者は全く異なる概念です。
| 意味 | 参照距離 | 実装 | |
|---|---|---|---|
| TTC | 接触が起きるまでの時間 | 現在の車間 gap | rearEndStateAt().ttc |
| 最終制動点までの時間 | 回避できる残り時間 | gap − 必要制動距離 | timeToLastChanceS |
TTC は「何も対応しなかったら何秒後に接触するか」という純粋な物理予測です。
一方、最終制動点までの時間は「今すぐフルブレーキを踏んでも回避できる残り時間」です。これが 0 になった瞬間、想定ブレーキ能力では物理的に回避不能になります。
// timeToLastChanceS の計算核:
// 車間が必要制動距離 lc まで縮まるのにかかる時間 = (gap0 − lc) / v_rel
return (inp.gap0M - lc) / vRel;
詳細は「最終制動点と必要制動距離」で解説しています。
両者の関係を数値で確認する
たとえば自車速 60 km/h(≈ 16.7 m/s)、停止対象、車間 30 m、ブレーキ能力 0.9 g(≈ 8.83 m/s²)の場合:
TTC = 30 / 16.7 ≈ 1.80 秒
必要制動距離 = 16.7² / (2 × 8.83) ≈ 15.8 m
最終制動点まで = (30 − 15.8) / 16.7 ≈ 0.85 秒
TTC は 1.80 秒ですが、最終制動点までの時間は 0.85 秒です。AEB が 0.85 秒を過ぎてから介入しても、もう回避は間に合いません。TTC だけを見て「まだ 1.8 秒ある」と判断することの危険が、ここに現れています。
3. 速度・相対速度で TTC の意味が変わる
TTC は数値が同じでも、速度域によってその背後の状況が全く異なります。
速度が高いほど同じ TTC でも車間は大きい
TTC = 1.5 秒のとき、自車速度ごとの車間(停止対象)を計算すると:
| 自車速度 (km/h) | 速度 (m/s) | TTC 1.5 秒時の車間 (m) |
|---|---|---|
| 30 | 8.3 | 12.5 |
| 50 | 13.9 | 20.8 |
| 80 | 22.2 | 33.3 |
| 120 | 33.3 | 50.0 |
高速域では「TTC 1.5 秒」でも車間が 50 m あります。しかし必要制動距離も速度の二乗で増えるため、余裕の感覚は裏切られます。80 km/h での必要制動距離(0.9 g 想定)は約 27.9 m です。TTC 1.5 秒時の車間 33.3 m と照らし合わせると、回避に使える時間的余裕はさほど多くありません。
相対速度が小さいほど TTC は長くなる
移動対象シナリオでは相対速度が減ることで TTC が伸びます。自車速 80 km/h、車間 30 m の場合:
停止対象(v_rel = 80 km/h ≈ 22.2 m/s):
TTC = 30 / 22.2 ≈ 1.35 秒
移動対象 60 km/h(v_rel = 20 km/h ≈ 5.6 m/s):
TTC = 30 / 5.6 ≈ 5.4 秒
TTC が長くなると「余裕がある」と読めますが、最終制動点までの時間は次のようになります(0.9 g 想定):
停止対象: 必要制動距離 ≈ 27.9 m → 車間 30 m はぎりぎり回避可能
移動対象: 必要制動距離 ≈ 1.8 m → 余裕は十分
この場合は CCRm(移動対象)の方が物理的な余裕が大きく、TTC の伸びとおおむね整合します。ただし TTC だけでは必要制動距離との対比が見えないため、設計判断には両者を組み合わせる必要があります。
4. 介入しきい値の段階設計
AEB は通常、段階的な介入で構成されます。一般的な設計思想として:
- 警告(HMI アラート): 比較的早い TTC で、ドライバーに状況を知らせる
- 部分制動(partial braking): ドライバーの踏み込みを促す程度の減速
- フルブレーキ(emergency braking): 最大制動力を即時投入して衝突被害を低減または回避
各段階でどの TTC しきい値を設定するかが設計の核心です。
早期化と遅延のトレードオフ
しきい値を早くする(TTC が大きいうちに介入する)と:
- 乗員が介入を「突然」と感じやすくなる(快適性の低下)
- 渋滞・合流など危険ではない接近でも反応しやすくなる(誤介入)
- ドライバーが AEB を信頼しなくなるリスク
しきい値を遅くする(TTC が小さくなってから介入する)と:
- 回避不能になった後に介入するリスクが高まる
- センサ確証・制御応答の遅れを考慮すると、さらに余裕が削られる
この「早すぎると不快・遅すぎると危険」という二律背反は、AEB 設計の中心課題です。
最終制動点までの時間が設計の下限を決める
いくら調整しても、フルブレーキ介入は timeToLastChanceS が 0 になる前に完了していなければなりません。センサ確証・制御遅延・ブレーキ油圧立ち上がり時間をすべて加算した「総システム遅延」を τ とすると、フルブレーキ介入開始は:
timeToLastChanceS ≥ τ
が成立している時刻でなければ回避は間に合いません。つまり timeToLastChanceS が定める時刻は「物理的に許される最も遅いフルブレーキ介入タイミング」であり、ここから逆算して TTC しきい値の下限が定まります。
警告や部分制動のしきい値はさらに手前(より大きな TTC)に置くことになります。
5. デモで TTC の変化を観察する
トップページのデモ を再生すると、車間が縮まるにつれて TTC が減少し、やがて最終制動点(橙の破線)を通過する様子を確認できます。
- 再生開始直後は TTC が大きく、最終制動点までの余裕もある
- 最終制動点を通過した瞬間に
avoidableがfalseになり、この時点以降はフルブレーキでも回避不能 - その後も TTC は縮み続け、やがて接触
この時系列を見ると、TTC と最終制動点までの時間が異なるペースで変化することが分かります。両者が一致するのは、必要制動距離がちょうどゼロになる状況(速度がゼロになる直前)だけです。
センサ検知距離やシステム遅延の詳細については、並行作成中の「センサ要件と検知距離」で取り上げる予定です。
まとめ
- TTC =
gap / v_rel。停止対象はv_rel = v_s、移動対象はv_rel = v_s − v_t。本サイトのrearEndStateAt().ttcとcollisionTimeSがこれを実装している。 - TTC(接触までの時間)と
timeToLastChanceS(回避できる残り時間)は別物。後者が 0 になった瞬間、物理的に回避不能になる。 - 速度域が変われば同じ TTC でも車間や必要制動距離のスケールが全く異なる。TTC 単体では設計判断に不十分で、最終制動点との対比が必要。
- 介入しきい値設計は「早すぎると不快・誤介入、遅すぎると回避失敗」のトレードオフ。フルブレーキのしきい値は
timeToLastChanceSとシステム遅延の合計から物理的な下限が決まる。