自动驾驶3D碰撞检测原理

上周末,我坐 Uber 去旧金山上普拉提课。司机在红灯时一直在看手机,加速太晚,然后前面的车突然减速,他又猛踩刹车。我记得当时我本能地抓住了车门把手。那天晚上晚些时候,我吃完晚饭后坐 Waymo 回家。我放松地靠在椅背上,没多想接下来的旅程。

我花了近十年时间研发自动驾驶系统。我见过它们出现故障,调试过碰撞日志,也审查过数不清的脱离数据。我知道这项技术并不完美。然而,我真心相信机器人驾驶员胜过大多数人类驾驶员。

数据也证实了这一点(见下图)。与人类驾驶员相比,Waymo 的车辆在造成人员伤亡的事故中减少了 85%,在警方记录的事故中减少了 57%,总体事故率降低了 2.3 倍。当 94% 的碰撞事故都是人为错误造成的时,这种差异并非微不足道,而是根本性的。

数据也证实了这一点(见下图)。与人类驾驶员相比,Waymo 的车辆在造成人员伤亡的事故中减少了 85%,在警方记录的事故中减少了 57%,总体事故率降低了 2.3 倍。当94%的碰撞事故都是人为错误造成的时,这种差异并非渐进式的,而是结构性的。

就在本周,加州10号州际公路上发生了一起八车连环相撞事故,造成三人死亡,四人受伤住院。事故的疑似原因是什么?一名卡车司机吸毒后驾驶。这名司机没有足够的时间在2.3秒内做出反应,但从统计数据来看,自动驾驶系统比吸毒后的人类驾驶员更有可能发现这一情况。

那么,是什么让自动驾驶汽车更安全呢?

其核心在于碰撞避免系统(CAS)——这项技术能够检测障碍物并在碰撞发生前阻止事故的发生。虽然我无法分享我在行业工作中的专有细节,但我可以向您展示如何构建遵循相同核心原理的基础碰撞检测技术。此实现方案改编自Udacity的自动驾驶汽车纳米学位课程,并使用开源工具和公开数据集来演示3D物体跟踪和碰撞时间估计在实践中的工作原理。现实世界的生产系统远比这复杂得多,但理解这些基本原理对于理解自动驾驶汽车如何实现安全性能的提升至关重要。

想象一下,你正以 65 英里/小时的速度巡航,前方车辆突然刹车。在那危急时刻,三个问题决定着你的命运:前方车辆与你的距离有多远?距离缩短的速度有多快?最重要的是,你是否有足够的时间刹车?

此前,我们探讨了二维物体跟踪及其逐步流程,以解答这些问题。在本文中,我们将更深入地探讨——构建一个三维传感器融合系统,利用激光雷达和摄像头数据预测碰撞的发生。

1、从二维到三维深度估计的过渡

我们构建的二维跟踪系统能够以惊人的精度识别并跟踪跨摄像头帧的目标。但它存在一个关键的盲点:深度感知。摄像头可以告诉你图像中有一辆车正在移动,但它无法直接测量这辆车是在 10 英尺远还是 100 英尺远。这种深度模糊性使得仅凭摄像头数据几乎无法进行碰撞预测。

考虑以下场景:两辆车在你的摄像头视野中看起来大小相同。一辆是前方 30 英尺的小型车,另一辆是 60 英尺远的 SUV。如果没有深度信息,你的系统可能会将它们视为同一辆车,这可能会造成灾难性的错误。

而三维传感器融合技术正是为了弥补这一缺陷。通过将相机数据(包含丰富的视觉细节)与激光雷达数据(精确的距离测量)相结合,我们可以比以往的方法更精确地构建对周围三维世界的完整理解。

2、碰撞时间

碰撞时间 (TTC) 的估算概念看似简单:如果一个物体距离 X 米,并以 Y 米/秒的速度接近,那么它将在 X/Y 秒后到达。但实际情况远比这复杂。实际的 TTC 计算必须考虑以下因素:

  • 传感器噪声:相机和激光雷达都会产生不完美的测量结果
  • 物体动态特性:车辆的运动速度并非恒定
  • 检测不确定性:特征匹配和物体跟踪会引入误差
  • 处理延迟:计算需要时间,而且世界瞬息万变

通常,一个稳健的交通交通系统 (TTC) 是否可靠,取决于它如何应对这些不确定性。

3、架构概述

我们的 3D 跟踪系统基于 2D 系统,并添加了以下几个复杂的组件。您也可以在我的 GitHub 上查看代码。

  • 多模态目标检测

我集成了 YOLO(You Only Look Once)深度学习框架进行目标检测。我的 2D 系统跟踪的是通用特征点,而 YOLO 可以识别特定类型的目标——汽车、卡车、行人和骑自行车的人。这种语义理解对于制定合适的响应策略至关重要。

  • 3D 边界框匹配

核心创新在于将 2D 边界框随时间关联起来,同时结合来自 LiDAR 的 3D 空间信息。这不仅仅是跟踪像素;它旨在理解真实物体如何在三维空间中运动。

  • 双路碰撞时间 (TTC) 估计

我使用激光雷达 (LiDAR) 和摄像头数据实现了并行 TTC 计算,然后比较了它们的性能。这种冗余提供了关键的错误检测和系统可靠性。

4、TTC 估计:激光雷达 vs. 摄像头

基于激光雷达的 TTC 计算实际上更直接;我们测量车辆在连续帧中的最近点,计算接近速度,然后得出碰撞时间(见下图)。

然而,原始激光雷达数据(不出所料)存在噪声。单个虚假测量值,例如来自反光车牌或路面水坑的噪声,都可能影响整个 TTC 计算。

统计滤波在这里发挥了作用:我们不使用最近的单个点(它可能是一个异常值),而是使用距离最近的 20% 的点来计算平均距离。这种方法兼顾了鲁棒性和响应速度,既有足够的数据点来过滤噪声,又足够集中以捕捉真实的接近程度。

// Simplified TTC calculation core
double meanClosestDistance = computeMedianDistance(lidarPoints, 0.2);
double deltaTime = frameDuration; // typically ~0.1 seconds
double relativeVelocity = (prevDistance - currentDistance) / deltaTime;
double ttc = currentDistance / relativeVelocity;

TTC 的计算看起来很简单:自动驾驶车辆与另一辆车之间的距离除以两者之间的相对速度。但是,当 relativeVelocity 接近于零时会发生什么?或者当它为负值(物体远离)时会发生什么?请注意,速度既有大小也有方向(角度),这有助于处理此类极端情况,从而避免出现严重错误的估计或系统崩溃。

基于摄像头的 TTC 算法更为复杂,它基于物体在图像中随着距离的增加而显得更大的原理。通过追踪物体视大小的变化速度,我们可以估计其接近速度。首先,我们需要将 2D 关键点匹配与特定的 3D 物体关联起来。这包括:

  • ROI 过滤:仅考虑物体边界框内的关键点
  • 异常值剔除:使用统计距离阈值来消除虚假匹配
  • 几何一致性:确保匹配的关键点遵循物理上合理的运动模式

摄像头 TTC 计算依赖于测量同一物体在连续帧中关键点之间的相对距离。随着物体的接近,这些距离会成比例增加。数学原理相当简洁:如果两个关键点之间的距离在时间 Δt 内从 d₀ 变为 d₁,且这种变化完全是由于物体靠近造成的,那么 TTC = Δt / ((d₁ - d₀) / d₀)

由于每帧图像中可能存在数千个关键点匹配,距离计算的组合爆炸可能会使系统不堪重负。我实现了智能过滤,以专注于最可靠的关键点对——那些运动稳定且匹配度高的关键点对。

5、性能分析

与 2D 跟踪分析类似,我们将测试不同的检测器/描述符组合在更具挑战性的 3D TTC 估计任务中的性能。结果既令人惊讶又发人深省(见下图)。

在分析了 18 种不同组合的平均绝对误差 (MAE)、均方根误差 (RMSE) 和系统稳定性后,最终脱颖而出:

最佳组合:

  • FAST + BRISK/FREAK/BRIEF:MAE 为 1.609 秒,RMSE 为 1.941 秒
  • SIFT + FREAK/BRIEF/BRISK:MAE 为 0.870 秒,RMSE 为 1.130 秒
  • AKAZE + AKAZE:MAE 为 1.601 秒,RMSE 为 1.953 秒

最终胜出者:SIFT 组合——尽管处理速度最慢,但基于 SIFT 的组合却能产生最准确的 TTC 估计值。其卓越的特征质量足以弥补计算开销。在安全关键型系统中,这种权衡通常是合理的。

我没想到 ORB 组合的表现会如此糟糕。虽然速度很快,但其 TTC 精度很差,MAE 值超过 9 秒。ORB 的二进制描述符虽然使其计算效率高,但也降低了其在 TTC 估计所需的几何计算方面的精度。

6、实际验证

测试揭示了几个学术论文很少提及的关键见解:

  • 即使是性能最佳的组合也偶尔会出现 TTC 估计值异常的情况——有时预测碰撞将在 50 秒以上发生,而物体明显以更快的速度接近。这些异常值可能会触发错误的紧急响应,从而导致事故发生而不是预防事故。
  • FAST 组合处理帧的时间在 3-4 毫秒之间,但精度一般。SIFT 组合的处理时间为 68-137 毫秒,但精度更高。在高速行驶的自动驾驶车辆中,这种时间差可能意味着成功避障和碰撞之间的区别。

总体而言,比较激光雷达和摄像头的碰撞时间 (TTC) 估计值,揭示了它们的互补优势:

激光雷达提供了更稳定的 TTC 估计值,且不易受异常值的影响,但其适用范围仅限于点云密度足够的物体。摄像头的性能弥补了激光雷达的不足,它提供了丰富的上下文信息,适用于任何可见物体,但对光照和天气条件更为敏感。

最稳健的方法是将两种估计值结合起来,并使用统计方法根据置信度对它们的贡献进行加权。虽然双重 TTC 估计提供了冗余,但下一步的发展方向是利用概率模型智能地融合多个传感器的输入。卡尔曼滤波器可以将激光雷达测量值、摄像头估计值、雷达数据和车辆动力学模型融合到一个单一的、最优的预测结果中。

构建碰撞检测系统也让我明白,性能指标只能反映部分情况。一个设计完善的安全关键型系统需要考虑以下几点:

  • 故障安全设计:当 TTC 计算失败(例如除以零、负速度、传感器数据丢失)时,系统必须安全失效。我实施了保守的回退策略,假设最坏情况发生,而不是忽略有问题的帧。
  • 延迟管理:在自动驾驶系统中,即使结果完美,但响应过晚也毫无意义。例如,我优化了处理流程,以保持稳定的 10Hz 处理速率,确保 TTC 估计值能够跟上快速变化的驾驶环境。
  • 验证与测试:每种算法组合都经过了各种场景的广泛测试:高速公路驾驶、城市环境、不同天气条件以及诸如静止障碍物和快速减速车辆等极端情况。

还记得 I-10 高速公路上的那起八车连环相撞事故吗?酒驾的卡车司机反应时间不足,未能避免事故。自动驾驶系统能避免吗?也许可以,但不能保证。自动驾驶系统也有其自身的极端情况和故障。重要的是,从统计数据来看,它们比人类更能稳定地捕捉到这些情况。

在这样的系统中,每一次算法优化、每一个极端情况的处理以及每一毫秒延迟的减少,都转化为实实在在的安全改进。美国国家公路交通安全管理局 (NHTSA) 估计,仅在美国,车对车通信和自动紧急制动每年就能预防超过 50 万起碰撞事故,挽救 1083 条生命。94% 的碰撞事故源于人为失误,因此我们在此构建的 3D 跟踪和双 TTC 估计并非纸上谈兵——它是 Waymo 所展示的 85% 碰撞事故减少率的基石。

此实现方案侧重于最近的前车并假设速度恒定,但实际生产系统要复杂得多。

它们能够同时跨车道跟踪多个物体,整合行为预测以预判变道和紧急制动,并考虑自身车辆的制动能力和路况。我们在此探讨的双重 TTC 估计将与更多数据融合,例如雷达、IMU,甚至使用复杂概率框架的预测模型。

通过这项练习,我们了解到,在动态环境中准确检测和分类障碍物的能力是碰撞避免、路径规划以及最终建立对自动驾驶系统信任的基础。

这项技术尚未臻于完美。但每个周末,当我乘坐 Waymo 穿梭于旧金山时,我都会看到这些系统在关键情况下已经超越了人类驾驶员。我感觉乘坐 Uber 比乘坐 Waymo 更焦虑,这不仅仅是算法或传感器的进步——而是……道路安全和生命挽救方面取得了可衡量的进步。对我而言,这才是值得构建的未来。


原文链接:Why I'm More Scared in Ubers Than Waymos—and the 3D Collision System That Explains It

汇智网翻译整理,转载请标明出处