🧠 第十章 交通与智驾:构建安全高效出行解决方案
📄 一句话概括

4000 个场景。TTC 阈值取 1.0 秒:漏警 19.9%、误触发只有 2.2%; 取 4.0 秒:漏警降到 6.2%、误触发冲到 16.7%。 2.0 到 2.5 秒是拐点,也是行业普遍取值。但判对率最高只有 79.9%——因为这个规则不看横向。

📝 本节和前面几节的关系

前两节都是「让交通更顺」,这一节是「让人不死」。 主动安全的核心矛盾只有一个:漏警和误触发,你更怕哪个。

一、AEB 只做一个判断

自动紧急制动(AEB)要回答的问题非常窄:现在这一瞬间,该不该踩刹车。它不做路径规划、 不做舒适性,只做这一个二选一的判断。 最常用的判据是碰撞时间 TTC:TTC = 距离 ÷ 相对速度。TTC 小于某个阈值就触发。 一个除法,没有模型。 为什么用这么简单的判据?因为它可解释、可验证、可认证。 出了事故要能复现「当时为什么刹/为什么没刹」,一个神经网络的输出没法回答这个问题。 所以真实的 AEB 是「简单判据 + 严格标定」,而不是「一个大模型端到端」。

二、两类错,代价完全不同

漏警:真该刹却没刹——后果是撞。 误触发:不该刹却刹了——后果是被追尾、乘客受惊。 Demo 造了 4000 个场景(距离 5~80 米、相对速度、前车减速度、横向偏移), 按「同车道且按当前速度必撞」定义真危险,再给 AEB 加上感知误差(距离 1.5 米、 相对速度 0.5 米/秒),扫六个阈值:

TTC 阈值 触发率 漏警率 误触发率 判对率
1.0 秒 6.8% 19.9% 2.2% 77.9%
1.5 秒 12.3% 16.4% 4.3% 79.3%
2.0 秒 17.3% 13.6% 6.5% 79.9%
2.5 秒 22.0% 11.4% 9.0% 79.6%
3.0 秒 27.2% 9.1% 11.8% 79.1%
4.0 秒 34.9% 6.2% 16.7% 77.1%
阈值 1.0 秒:漏警 19.9%,误触发只有 2.2%。1 秒是「马上要撞」的程度,
这时候刹车已经来不及了——漏警这么高就是这个原因。
阈值 4.0 秒:漏警降到 6.2%,误触发冲到 16.7%。四秒之外只要相对速度大一点就报警,
路上全是误刹。
这两类错是一条曲线上的两端,不可能同时压到零。所以定阈值不是在「找最优」,
是在选一个你更能承受的失败方式。

三、两秒是拐点

看「判对率」那一列:77.9 → 79.3 → 79.9 → 79.6 → 79.1 → 77.1。 在 2.0 秒处最高,两边都往下掉。 有意思的是:判对率的峰值很平(79.9 到 77.1 只差 2.8 个点),但漏警和误触发的比例变了三倍。 这说明「判对率」这个指标选不出阈值——它把两类错误的代价当成一样的。 所以业界普遍取 2 秒上下(对应 TTC 1.6~2.4 秒),不是因为判对率最高, 是因为这个区间里两类错误的绝对量都可控。具体偏 1.6 还是 2.4,取决于车型定位: 家用车偏保守,运动型偏激进。 再加一层现实:高速和市区该用不同的阈值。高速上 2.5 秒才够(刹停距离长), 市区里 1.5 秒就够(速度低、误刹代价大)。一张标定表管所有工况,是做不到的。

四、只算 TTC 的天花板

判对率最高只有 79.9%——注意,这个天花板不是数据不够,是这个规则本身的极限。 差在哪? 它不看横向。相邻车道的车离得很近、相对速度也大, TTC 一算就很危险,可人家根本不在你的车道上。 这些场景全部变成误触发。 Demo 里横向偏移服从标准差 1.6 米的正态, 同车道判据取 1.75 米——也就是说有相当一部分「邻道车」被算成了危险。 所以真实 AEB 必须融合横向位置和车道判断。单靠一个 TTC 数字,无论阈值怎么调, 都会在这个上限附近撞墙。 这条经验能推广:任何「单指标阈值」的方案,天花板都在那个指标漏掉的信息里。 换阈值只能沿着曲线挪,不能把曲线抬高。

五、落地:四件事

① 先定代价比。 「漏一次」和「误触发一次」哪个更严重、严重几倍。 这个数必须由产品和法务一起定,不能由算法定。 ② 分场景标定。 高速、城区、停车场,三套阈值。不要指望一套参数打通。 ③ 横向必须进判据。 车道线识别、目标跟踪, 哪怕只做一个「是否同车道」的二分类,也能把误触发砍掉一大截。 ④ 留数据闭环。 每次触发都要存前后几秒的数据, 事后人工标注「该不该触发」——这是唯一能持续调参的办法。没有闭环的系统,标定一次就用三年, 三年后一定不准。 最后一句:AEB 的指标不能只报「避免了多少事故」。 还要报「误触发了多少次」——因为误触发会导致用户关掉这个功能,关掉之后就一次都不保护了。

六、动手 Demo:AEB:阈值从 1.0 秒提到 4.0 秒,漏警 20% 掉到 6%,误触发 2% 涨到 17%

造 4000 个场景:自车速度 8~33 米/秒、前车速度、初始距离 5~80 米、前车减速度三档、 横向偏移服从正态。按「同车道且按当前速度必撞」定义真危险; 再给 AEB 加上距离 1.5 米、相对速度 0.5 米/秒的感知误差,用带噪的 TTC 在六个阈值下分别算漏警率、 误触发率和判对率。

dv = v_self - v_lead
dmin = np.where(dv > 0, d - dv * dv / (2.0 * np.maximum(a_lead, 0.3)), d)
crash = (dmin < 0.0) & (np.abs(lat) < 1.75)   # 同车道且必撞

d_m = d + rg.normal(0.0, 1.5, n)              # 感知误差
dv_m = dv + rg.normal(0.0, 0.5, n)
ttc = np.where(dv_m > 0.1, d_m / np.maximum(dv_m, 0.1), 99.0)

for th in (1.0, 1.5, 2.0, 2.5, 3.0, 4.0):
    fire = ttc < th
    miss = np.mean(~fire & crash)              # 漏警
    fa = np.mean(fire & ~crash)                # 误触发

实跑输出:

--------------------------------------------------------------------
AEB:阈值从 1.0 秒提到 4.0 秒,漏警 20% 掉到 6%,误触发 2% 涨到 17%
--------------------------------------------------------------------
  场景数                   4000
  真危险定义               同车道且按当前速度必撞
  感知误差                 距离 1.5 米、相对速度 0.5 米/秒
  横向判断                 AEB 不做,只看 TTC

  TTC 阈值   触发率   漏警率   误触发率   判对率
  ---------------------------------------------
    1.0 秒     6.8%    19.9%       2.2%    77.9%
    1.5 秒    12.3%    16.4%       4.3%    79.3%
    2.0 秒    17.3%    13.6%       6.5%    79.9%
    2.5 秒    22.0%    11.4%       9.0%    79.6%
    3.0 秒    27.2%     9.1%      11.8%    79.1%
    4.0 秒    34.9%     6.2%      16.7%    77.1%

  先看两端。**阈值 1.0 秒:漏警 19.9%,误触发只有 2.2%。**
  **1 秒是「马上要撞」的程度,这时候刹车已经来不及了**——漏警率这么高就是这个原因。
  **阈值 4.0 秒:漏警降到 6.2%,误触发冲到 16.7%。**
  **四秒之外只要相对速度大一点就报警,路上全是误刹。**
  中间三档里,**2.0 到 2.5 秒是拐点**:漏警 13.6%~11.4%,误触发 6.5%~9.0%。
  **这也是行业里 AEB 普遍取 2 秒上下(对应 TTC 1.6~2.4)的原因。**
  但真正值得注意的是:**判对率最高只有 79.9%**,
  **也就是说这个只看 TTC 的规则,最好也就到这。**
  差在哪?**它不看横向。** 相邻车道的车离得很近、相对速度也大,
  **TTC 一算就很危险,可人家根本不在你的车道上。**
  **所以真实 AEB 必须融合横向位置和车道判断,单靠 TTC 一定误刹。**

两个端点先记住:1.0 秒漏警 19.9%、4.0 秒漏警 6.2%。 漏警降了 13.7 个点,代价是误触发从 2.2% 涨到 16.7%,涨了 7 倍多。 判对率那一列几乎不动(77.9 到 79.9), 这是最值得注意的地方:一个把两类错误等价的指标,在两类错误代价差十倍时是没有用的。 横向那一条是天花板所在:AEB 只用 TTC,不看车道,所以邻道车的场景全部算误触发。 判对率上不去,是因为信息不够,不是参数没调好。 要说明:真危险的定义是我写的物理判据(同车道 + 减速度不足以避免相撞), 感知误差是我设的高斯噪声,场景也是随机生成的。 但漏警/误触发的定义、阈值扫描、判对率的算法都是真的。 还有一点要说清:这里没有建模「驾驶员反应」和「制动延迟」, 所以真危险的比例偏高(漏警那一列的分母包含了很多人本来就会自己刹的场景)。 真实标定必须带上人和车的响应模型。

30 秒实验

  1. 把感知误差从 1.5 米加到 4.0 米(大雨、逆光),重跑。 每个阈值的漏警和误触发都会同时变差——噪声让两个方向都退化。
  2. 把横向同车道阈值从 1.75 米改成 2.5 米(更宽的车道),看误触发。 会显著上升——判据放宽,邻道车更容易被算成同车道。
  3. 把前车减速度的概率分布改成更多「急刹」(0.2 改成 0.4),重跑。 真危险的比例会上升,所有阈值的漏警都会变大。

常见误区

  1. 「阈值调到最优就行」。两类错在一条曲线上,只能选一个可承受的失败方式,不存在同时最优。
  2. 「判对率最高的阈值就是最好的」。判对率把两类错误等价,而漏警和误触发的代价差十倍。
  3. 「AEB 越灵敏越好」。误触发多了用户会关掉,关掉之后一次都不保护。
自测三问(点开对答案) 1. 漏警和误触发分别是什么后果? —— 漏警是真该刹没刹,后果是撞;误触发是不该刹却刹了,后果是被追尾、乘客受惊,以及用户关掉功能。 2. 为什么判对率选不出合适的阈值? —— 它把两类错误当成等价。当漏警和误触发的代价差一个数量级时,判对率最高的点未必是代价最小的点。 3. 只算 TTC 的 AEB 为什么有天花板? —— 它不看横向位置,邻道车会被算成危险,全部变成误触发。这个信息缺口调阈值补不上。

交通场景三节讲完:配时、ETA、AEB。下一节进智驾本身——从「车怎么知道自己在哪」开始。

相关笔记