4、车道线跟踪与状态估计:卡尔曼滤波原理、基于卡尔曼滤波的车道线跟踪、车道线置信度评估、车道线丢失与重捕获策略
各位同学,欢迎来到第四章。这一章,咱们要啃一块硬骨头——车道线的跟踪与状态估计。
说实话,我当年刚接触ADAS时,觉得车道线检测已经够难了。后来才发现,检测只是第一步。真正让系统稳定跑起来的,是跟踪和估计。你想想看,摄像头每一帧都在抖动,光照忽明忽暗,车道线还可能被遮挡。如果每一帧都重新检测,那结果肯定跳来跳去,车辆也会跟着画龙。
所以,我们需要一个“大脑”,来平滑预测车道线的位置。这个大脑,就是卡尔曼滤波器。
4.1 卡尔曼滤波原理:从“猜”到“准”
卡尔曼滤波,说白了就是一种最优估计算法。它不完美,但它在噪声中能给出最靠谱的答案。
我习惯用一个比喻来解释:你站在一个房间里,想猜出温度是多少。你有一个温度计,但它有误差。你还有一个经验,知道温度不会突然变化。卡尔曼滤波就是把你“猜的”和“测的”结合起来,得出一个更准的值。
它的核心是两个步骤:
- 预测(Predict):根据上一帧的状态,猜一下当前帧的状态。
- 更新(Update):用当前帧的观测值,修正这个猜测。
数学上,它用五个公式搞定。嗯,这里我直接给出最常用的离散形式:
// 预测步骤
x_pred = A * x_prev + B * u
P_pred = A * P_prev * A^T + Q
// 更新步骤
K = P_pred * H^T * (H * P_pred * H^T + R)^(-1)
x_est = x_pred + K * (z - H * x_pred)
P_est = (I - K * H) * P_pred
别被公式吓到。我来拆解一下:
- x:状态向量,比如车道线的位置、曲率、斜率。
- P:协方差矩阵,代表你对当前状态有多不确定。
- Q:过程噪声,代表模型本身的不确定性。比如车辆突然加速,你的预测就会不准。
- R:测量噪声,代表传感器的误差。摄像头抖动、光线变化都会增大R。
- K:卡尔曼增益。它决定了你更相信预测还是观测。K大,就信观测;K小,就信预测。
4.2 基于卡尔曼滤波的车道线跟踪
好了,理论讲完,咱们看看怎么用在车道线上。
我一般把车道线建模成三次曲线:
y = C0 + C1 * x + C2 * x^2 + C3 * x^3
其中:
- C0:横向偏移(车辆中心到车道线的距离)
- C1:航向角(车辆与车道线的夹角)
- C2:曲率
- C3:曲率变化率
状态向量 x 就是 [C0, C1, C2, C3]^T。观测向量 z 是每一帧检测到的车道线点。
这里有个坑:状态转移矩阵 A 怎么设计?
我建议用恒定曲率模型。说白了,就是假设车道线的曲率变化很慢。这样A矩阵就是一个简单的单位矩阵加上时间步长的影响。代码实现如下:
// 状态转移矩阵 A (恒定曲率模型)
// dt 是帧间时间差
A = [1, dt, 0.5*dt^2, 0;
0, 1, dt, 0;
0, 0, 1, dt;
0, 0, 0, 1];
观测矩阵 H 就简单了,它把状态映射到观测空间。因为我们直接观测的是曲线参数,所以H就是单位矩阵。
4.3 车道线置信度评估
跟踪做好了,但你怎么知道跟踪的结果靠不靠谱?
这就需要置信度评估。我一般从三个维度来打分:
| 维度 | 评估方法 | 权重 |
|---|---|---|
| 检测质量 | 检测到的车道线点数量、点与曲线的拟合残差 | 40% |
| 跟踪一致性 | 卡尔曼滤波的新息(innovation)大小,即观测值与预测值的偏差 | 35% |
| 物理合理性 | 车道线宽度是否合理、曲率是否突变、横向偏移是否在车道内 | 25% |
具体实现时,我会给每个维度一个0到1的分数,然后加权求和。如果总分低于0.6,我就认为这条车道线不可靠。
4.4 车道线丢失与重捕获策略
这是最考验系统鲁棒性的地方。车道线丢失是家常便饭,关键是丢了之后怎么办。
我总结了一套“三步走”策略:
- 短暂丢失(< 0.5秒):直接用卡尔曼滤波的预测值。这时候置信度较高,预测值足够用。
- 中度丢失(0.5 - 2秒):降低预测值的置信度,同时扩大检测区域。比如,原本只在图像下半部分搜索,现在扩大到全图。另外,可以尝试用另一侧车道线来推断丢失侧的位置。
- 长时间丢失(> 2秒):放弃当前跟踪,重新初始化。这时候必须触发报警,提醒驾驶员接管。
这里有个小技巧:重捕获时,不要直接跳到新检测到的车道线。我习惯做一个“软切换”——用新检测值和旧预测值做加权平均,权重随时间逐渐过渡。这样车辆不会突然抖动。
好了,这一章的内容就到这里。卡尔曼滤波不是万能的,但它确实是车道线跟踪的基石。下一章,咱们会讲控制策略,看看怎么用这些跟踪结果去控制方向盘。
记住,理论要落地,实践出真知。回去把代码跑一跑,调一调Q和R,你会对卡尔曼滤波有更深的理解。