4. 安全距离模型:基于车头时距的安全距离、基于制动过程的安全距离、不同模型对比与适用场景
各位同学,咱们今天聊聊安全距离模型。说实话,这是纵向规划里最基础、也最容易被忽视的一块。我见过不少新手工程师,一上来就搞复杂的MPC、强化学习,结果跟车距离算得乱七八糟——说白了,连安全底线都没守住。
安全距离模型,就是回答一个问题:前车刹车了,我到底该离多远才不撞? 答案看似简单,但不同场景下,答案完全不同。咱们今天就把两种主流模型掰开揉碎了讲。
4.1 基于车头时距的安全距离模型
这个模型,我个人习惯叫它「时间距离法」。思路很简单:我跟着前车,保持一个固定的时间差。比如前车经过某个点,我2秒后经过同一个点。
公式长这样:
d_safe = v_host * t_headway + d_min
其中:
v_host:自车速度(m/s)t_headway:车头时距(通常0.8s~2.5s)d_min:最小停车距离(比如2~5米)
嗯,这里要注意:车头时距不是拍脑袋定的。我在项目中遇到过,某主机厂要求高速场景用1.2s,结果测试时发现,在湿滑路面上根本刹不住。后来我们改成了动态时距——车速越高,时距越大。
这个模型的优点很明显:计算简单,实时性好。你想想看,只需要知道自车速度和前车速度,就能算出安全距离。在ACC(自适应巡航)里,这是最常用的模型。
但缺点也很致命:它假设前车匀速运动。如果前车急刹车,这个模型就失效了。说白了,它只考虑了「跟车」,没考虑「紧急制动」。
4.2 基于制动过程的安全距离模型
这个模型更「物理」一些。它从制动过程出发,算清楚:前车从刹车到停,需要多远?我从前车刹车到我自己停,又需要多远?
公式稍微复杂点:
d_safe = v_host * t_reaction + (v_host² / (2 * a_host)) - (v_front² / (2 * a_front)) + d_min
其中:
t_reaction:系统反应时间(包括感知、决策、执行延迟,通常0.2s~0.5s)a_host:自车最大制动减速度(通常-3m/s² ~ -8m/s²)a_front:前车最大制动减速度(通常假设-5m/s² ~ -8m/s²)d_min:最小安全余量
这个模型的优势在于:能处理紧急制动场景。它把反应时间、制动能力都考虑进去了。在AEB、FCW(前向碰撞预警)等功能里,这是标配模型。
但缺点也有:参数太多,容易过设计。你想想看,如果每个参数都取最保守值,算出来的安全距离会非常大,导致车辆频繁制动,乘坐体验很差。
4.3 不同模型对比与适用场景
咱们直接上表格,一目了然:
| 对比维度 | 车头时距模型 | 制动过程模型 |
|---|---|---|
| 计算复杂度 | 低(O(1)) | 中(O(1),但参数多) |
| 对前车速度的依赖 | 需要前车速度 | 需要前车速度+减速度 |
| 对传感器要求 | 低(仅需相对速度) | 高(需估计前车减速度) |
| 紧急制动场景 | 不适用 | 适用 |
| 跟车平顺性 | 好(时距固定,加减速平滑) | 一般(参数保守时易顿挫) |
| 典型应用 | ACC、TJA(交通拥堵辅助) | AEB、FCW、ESA(紧急转向辅助) |
我个人习惯的做法是:两者结合。在正常跟车时,用车头时距模型,保证平顺性;当检测到前车减速度超过阈值(比如-3m/s²),切换到制动过程模型,保证安全性。
// 伪代码示例
if (a_front > -3.0) {
// 正常跟车,用车头时距模型
d_safe = v_host * 1.8 + 3.0;
} else {
// 前车急刹,用制动过程模型
d_safe = v_host * 0.3 + (v_host² - v_front²) / (2 * 6.0) + 2.0;
}
你想想看,为什么不能只用一种模型?因为没有银弹。车头时距模型在高速跟车时,如果前车突然变道切入,它反应不过来;制动过程模型在低速蠕行时,算出的距离可能比实际需要的大很多,导致车辆频繁被加塞。
我记得有一次做路测,在晚高峰的北京三环上,我们用了纯制动过程模型。结果呢?每当前车减速等红灯,我们的车在50米外就开始减速,后车疯狂按喇叭。后来改成混合模型,低速时用车头时距,高速时用制动过程,问题就解决了。
最后总结一下:
- 车头时距模型:简单、平顺,适合正常跟车场景
- 制动过程模型:安全、保守,适合紧急场景
- 实际工程:混合使用,根据场景动态切换
下一章,咱们聊聊纵向加速度规划——怎么让车既安全又舒适地加减速。到时候我会分享一个我踩过的坑:加速度变化率(jerk)没限制好,乘客直接晕车了。敬请期待。