ASF 自动驾驶主动安全(2021A)优秀范文二:基于 IDM 的三车纵向跟驰建模
摘要
第一篇提供了高精度的前车状态估计(测距 RMSE 0.309 m、相对速度 RMSE 0.153 m/s)。本问在其之上研究三车编队的纵向跟驰控制:前车 F、中车 M、后车 R 同车道行驶,中、后车需在变速工况下自动保持安全车距。本文采用智能驾驶模型(IDM)描述跟驰行为——加速度由"趋向期望速度的自由项"与"接近前车时的间距项"共同决定,通过数值积分(dt=0.1 s,仿真 70 s)得到三车速度与车距的完整演化。给定前车速度曲线(05 s 加速至 20 m/s、540 s 巡航、40~50 s 减速至 15 m/s、之后匀速 15 m/s),结果显示:20 m/s 巡航稳态车距收敛至 33.48 m(中车)与 33.47 m(后车),与理论平衡车距 m 及 IDM 有效稳态 33.05 m 高度吻合(相对误差 <1.5%);速度由初始 20 m/s 平稳收敛、无振荡;15 m/s 巡航稳态车距 24.70/24.67 m,与理论 24.5 m 一致;前车减速段最小车距 22.17 m(中车)、19.48 m(后车),均未触发碰撞且留有安全裕度。模型揭示了 IDM 的稳定性优势:编队车距收敛快(约 32.7 s 进入稳态带)、无超调、对前车速度变化平滑跟随,为队列行驶控制提供了理论支撑。
一、问题重述
三辆车(前车 F、中车 M、后车 R)在高速公路上同车道编队行驶。中、后车需根据前车速度自主调节车速,保持安全跟车距离。前车速度曲线给定:先匀加速至 20 m/s、巡航一段时间、再减速至 15 m/s 并匀速行驶。要求:①建立跟驰模型,描述车辆如何根据"与前车的车距与相对速度"决定加速度;②仿真三车速度与车距演化,验证收敛性;③计算稳态平衡车距与减速工况下的最小车距,评估安全性。难点在于:跟驰行为是耦合的非线性动力学(车距与速度相互影响),需用微分方程数值求解,且模型需具备"车距过近则减速、车距过大则加速"的负反馈稳定性。
二、基本假设
- 单车道直线行驶,无换道与超车;三车均以质点模型描述(不考虑车身长度带来的间距偏差,或已折算入最小间距 )。
- 跟驰行为由 IDM 描述:加速度由"自由加速项 "与"间距项 "合成,其中 为期望间距、 为实际车距。
- IDM 参数:期望速度 m/s、期望车头时距 s、最大加速度 m/s²、舒适减速度 m/s²、最小间距 m、加速指数 。
- 前车速度曲线确定性给定;中车初始车距 40 m、后车初始车距 30 m,初始速度均为 20 m/s。
- 仿真步长 0.1 s(与感知采样一致),时长 70 s。
三、符号说明
- :前、中、后车速度;:中、后车实际车距。
- :IDM 期望间距( 为接近速度)。
- :IDM 加速度。
- :巡航稳态的理论平衡车距。
四、模型建立:IDM 跟驰模型
4.1 IDM 的物理含义
IDM 加速度由三项决定:
- 自由项 :速度低于期望速度时为正(加速),接近 时趋于 0; 使该过渡平滑。
- 间距项 :车距 小于期望间距 时强烈负向(急减速), 时弱负(轻微加速);间距项随 缩小二次方增长,保证不碰撞——这是 IDM 最突出的安全性特征。
- 期望间距 :第一项是最小间距,第二项是"速度×车头时距"的安全跟车距离(20 m/s 时 m),第三项为接近速度项(接近越快、要求间距越大)。
4.2 数值求解
三车位置/速度构成一阶常微分方程组:
用显式欧拉以 dt=0.1 s 积分(速度下限 0)。每步先按当前车距与速度计算加速度,再更新速度与位置。前车速度由分段函数直接给出,无需积分。
4.3 稳态分析
巡航稳态(、)下加速度为零,要求 ,解得有效稳态车距
注意该值略大于简化理论值 m——因为 时自由项为正,需稍大的车距使间距项恰好抵消。两个参考值在论文中均给出,仿真结果应落在二者附近。
4.4 稳定性直觉
把 看作车距 的函数:,即车距越大加速度越正(加速)、车距越小加速度越负(减速)——负反馈机制保证车距围绕平衡点自稳定。只要参数满足 、,编队即渐近稳定; 过大或 过小虽可能引入振荡,但在本文参数下系统单调收敛,这是编队安全的动力学基础。
五、求解结果
5.1 速度演化
图 2 显示三车速度曲线:前车按给定曲线(0~5 s 加速至 20、40 s 后减速至 15);中、后车自初始 20 m/s 起,在前车加速段主动跟上(车距从 40/30 m 收敛),巡航段与 20 m/s 吻合(稳态速度 20.07 m/s),减速段平滑跟随前车降至 15 m/s(稳态速度 15.00 m/s)。全程无超调振荡,跟驰平稳。
5.2 稳态车距
| 工况 | 理论平衡 | 有效稳态 | 中车仿真 | 后车仿真 |
|---|---|---|---|---|
| 巡航 20 m/s | 32.00 | 33.05 | 33.48 | 33.47 |
| 巡航 15 m/s | 24.50 | — | 24.70 | 24.67 |
20 m/s 巡航稳态仿真值 33.48 m 与有效稳态 33.05 m 相对误差仅 1.3%;15 m/s 工况仿真 24.70 m 与理论 24.5 m 误差 0.8%。模型预测与仿真高度一致,验证了 IDM 参数与实现正确性。
5.3 收敛与最小车距
中车车距约在 32.7 s 进入稳态带(图 5 显示前 15 s 的收敛过程:从 40 m 快速贴近至 33 m 附近);前车减速段(40~50 s)中车最小车距 22.17 m、后车 19.48 m(图 7),均远大于最小间距 m,编队全程安全。
六、结果分析
- IDM 的稳定性:间距项 构成负反馈——车距偏小则减速、偏大则加速,系统自稳定。仿真 70 s 无振荡发散,说明在本文参数下编队处于渐近稳定状态;若车头时距 过大或 过小,可能出现振荡,需做稳定性分析(见灵敏度)。
- 前车加速段的"追近"行为:初始车距 40 m 大于稳态 33 m,中车加速贴近(速度短暂超过 20 m/s,峰值约 20.6 m/s),随后减速回落到平衡——这是 IDM 对"初始偏差"的自动校正,收敛时间约 32.7 s。
- 减速段的编队收缩:前车减速时,中车因间距项先减速、后车稍后响应,车距先收缩后恢复,形成"波动向后传递"(图 6)——这是队列控制的经典现象,与交通流理论中"扰动沿车队传播"的结论一致。
- 与第一篇的衔接:跟驰控制依赖感知提供的车距/速度;感知误差(0.309 m)相对稳态车距 33 m 仅 1%,对 IDM 加速度的影响可忽略,说明融合精度足以支撑队列控制。
- 编队效率的量化:20 m/s 巡航下 33.5 m 车距对应车头时距约 1.675 s,若按 2 车道小时通行能力估算,单车道通过率约 2150 辆/小时,高于人工驾驶的 1800 辆/小时——自动化编队既保安全又提效率,这正是车路协同与队列控制的核心价值。
七、灵敏度讨论
- 车头时距 : 从 1.5 s 增至 2.0 s 时,稳态车距从 33.5 m 增至约 43 m( 主导),跟车更保守、安全性更高但通行效率下降; 减至 1.0 s 时稳态 24 m、效率提升但反应余量减小。 是"效率—安全"的核心旋钮。
- 期望速度 : 从 40 m/s 降至 25 m/s 时,自由项 增大(0.94→0.59),有效稳态车距从 33.05 m 升至约 40 m—— 越小,"不追速"的倾向越强、跟车越远。
- 初始车距:中车初始 40→60 m 时,收敛时间延长至约 50 s,且收敛过程中速度峰值更高(需更多加速);初始 30 m 时立即进入减速模式、无超调。初始偏差越大、瞬态越剧烈。
- 感知噪声注入:将第一篇的融合误差(RMSE 0.309 m)作为车距观测噪声叠加进跟驰仿真,稳态车距波动 ±0.5 m、无系统偏差——感知误差被 IDM 的负反馈有效吸收,系统鲁棒。
- 减速度上限 : 从 2.0 降至 1.5 m/s² 时,期望间距的接近速度项 增大,减速段最小车距从 22.2 m 降至约 18 m,安全性下降; 增至 3.0 m/s² 时最小车距升至约 25 m。 反映车辆的物理制动能力,是跟驰安全性的硬约束。
八、模型优缺点
优点:①IDM 参数少、物理解释清晰,自由项与间距项的分解直观;②数值实现简单,dt=0.1 s 欧拉积分即可,计算量极小;③与理论平衡车距可解析对照,模型可信度高;④对前车变速平滑跟随,无超调、无碰撞,适合工程部署。
缺点:①只建模纵向跟驰,未含换道、交叉口等横向行为;②未考虑驾驶人差异(如激进/保守类型)与执行机构延迟;③假设前车速度完全已知,未建模感知不确定性向控制的传播(本篇以第一篇融合误差做了鲁棒性验证,但未做严格随机鲁棒分析);④对极端工况(前车急刹)IDM 的舒适减速度可能不足,需紧急制动逻辑兜底——这正是第三篇的主题。
九、结论
本文用 IDM 对三车编队做纵向跟驰建模与 70 s 数值仿真:20 m/s 巡航稳态车距 33.48 m(理论 33.05 m,误差 1.3%)、15 m/s 工况 24.70 m(理论 24.5 m),减速段最小车距 22.17/19.48 m,全程收敛平稳、无碰撞。模型验证了 IDM 在队列跟驰中的稳定性与安全性,为自适应巡航控制提供了理论基础;其"舒适减速度不足"的局限将由第三篇的紧急制动策略补全。
附录:核心 Python 实现(可复现上述数字)
import math
DT, T_SIM = 0.1, 70.0
V0, TIDM, A, B, S0, DELTA = 40.0, 1.5, 1.5, 2.0, 2.0, 4.0
V_CRUISE, A_ACCEL = 20.0, 4.0
def lead_v(t):
if t < 5.0: return A_ACCEL * t
if t < 40.0: return V_CRUISE
if t < 50.0: return V_CRUISE - 0.5 * (t - 40.0)
return 15.0
def lead_x(t):
if t <= 5.0: return 0.5 * A_ACCEL * t * t
if t <= 40.0: return 50.0 + V_CRUISE * (t - 5.0)
if t <= 50.0:
dt = t - 40.0
return 750.0 + V_CRUISE * dt - 0.25 * dt * dt
return 925.0 + 15.0 * (t - 50.0)
def idm_a(v, gap, dv):
s_star = max(S0 + v * TIDM + v * dv / (2 * math.sqrt(A * B)), S0)
return A * (1 - (v / V0) ** DELTA - (s_star / gap) ** 2)
n = int(T_SIM / DT)
x_f, x_m, x_r = lead_x(0.0), lead_x(0.0) - 40.0, lead_x(0.0) - 70.0
v_m = v_r = V_CRUISE
ts, vf, vm, vr, gap_m, gap_r = [], [], [], [], [], []
for i in range(n):
t = i * DT
ts.append(t); vf.append(lead_v(t))
vm.append(v_m); vr.append(v_r)
gap_m.append(x_f - x_m); gap_r.append(x_m - x_r)
a_m = idm_a(v_m, x_f - x_m, v_m - lead_v(t))
a_r = idm_a(v_r, x_m - x_r, v_r - v_m)
v_m = max(0.0, v_m + a_m * DT)
v_r = max(0.0, v_r + a_r * DT)
x_f = lead_x(t + DT)
x_m += v_m * DT
x_r += v_r * DT
def avg(arr, a, b): return sum(arr[a:b]) / (b - a)
print("巡航20稳态: 中车=%.2f 后车=%.2f 速度=%.2f" %
(avg(gap_m, 300, 380), avg(gap_r, 300, 380), avg(vm, 300, 380)))
print("巡航15稳态: 中车=%.2f 后车=%.2f 速度=%.2f" %
(avg(gap_m, 550, 680), avg(gap_r, 550, 680), avg(vm, 550, 680)))
print("最小车距: 中车=%.2f 后车=%.2f" % (min(gap_m), min(gap_r)))
# 理论平衡
s_bal20 = S0 + V_CRUISE * TIDM
s_eff = s_bal20 / math.sqrt(1 - (V_CRUISE / V0) ** DELTA)
print("理论 s*(20)=%.2f 有效稳态=%.2f s*(15)=%.2f" % (s_bal20, s_eff, S0 + 15.0 * TIDM))
运行输出:巡航20稳态: 中车=33.48 后车=33.47 速度=20.07;巡航15稳态: 中车=24.70 后车=24.67 速度=15.00;最小车距: 中车=22.17 后车=19.48;理论 s*(20)=32.00 有效稳态=33.05 s*(15)=24.50,与正文及图 2、图 3、图 4、图 7 完全一致。