这个讲的不错:
第六篇 无人驾驶的sensor fusion和多目标tracking - 知乎
题图来自matlab公开课--sensor fusion and tracking 侵权删。
但凡目前自动驾驶公司的一线工程师,或多或少都听过多传感器融合,sensor fusion这个名词。这个领域可谓是自动驾驶技术岗位中的香饽饽,为什么呢?
- sensor fusion是自动驾驶软件栈中不可缺失的一环。sensor fusion其实要区分两种岗位,一种是sensor fusion for localization, 中文是多传感器融合定位,或者组合导航,属于定位组,另一种是sensor fusion for perception, 中文是多传感器融合感知,属于感知组。虽然两个岗位的底层技术高度相似,但从难度上讲,多传感器融合感知的难度更大,挑战更多,用到的传感器更多更复杂,这里我们主要涉及融合感知。
- sensor fusion这个领域在学校没有明确对应的专业方向,是个跨专业问题,也是产业界领先于学校教育的典型之一(嗯如果你要说多传感器融合所有的理论基础都来自于经典理论,从单点来说倒也无可反驳),最近看到一句话:engineering is sometimes more art than science, 放在这里非常合适,因为大量的sensor fusion技术难题来自于无人驾驶路测的一线,而且现在传感器技术进步很快,高线束lidar、固态lidar、4D成像级毫米波雷达、超高动态范围和低照明度相机等等,都是厂商一有样品马上供给主流车厂的自动驾驶研发部门或者专门的自动驾驶公司去上车测试,而学校很难有这么及时的供应链渠道。
言归正传,**sensor fusion究竟是怎样的一个过程呢?**简单说,一般分为下面三步:
- 时间同步(time synchronization),确保各种传感器的时间基准一致。我在第三篇 有一说一,无人驾驶的感知痛点有哪些?里介绍过这个问题,此处摘录一段:“不同感知传感器的原始数据帧率各不相同,相机10~60Hz,Lidar典型的10Hz,毫米波轻易几百Hz。触发方式不同:外触发的典型是相机,内触发的典型是lidar和毫米波;时间基准不同:有自带时间基准的,比如同步了GPS PPS信号的Lidar,有需要外部提供时间戳的,比如挂在CAN总线上的毫米波、超声。”要解决这个问题,一般需要自动驾驶公司自己开发专门的硬件同步板卡,以FPGA方案居多,因为FPGA可以方便的接入不同接口的传感器设备,包括网口、USB3.0、CAN等,并通过verilog逻辑给不同的设备触发电平信号,再结合传感器本身支持的同步协议,比如高精度时间同步PTP协议,一般都可以做到ms级的同步,甚至更高精度。
- 数据关联(data association),即找到哪些传感器数据表征的是同一个物体?举个例子,前方路面上有辆车,lidar提供了点云和3D bounding box, 图像提供了2D bounding box, 毫米波雷达提供了几个雷达点,怎么把这些raw data和semantic data找到,塞到代表这辆车的object struct里去呢?一般常用做法是通过空间投影和坐标系变换,比如lidar data一般是在map坐标系下,通过3D-2D转换,可以映射到图像2D坐标系,再和图像的2D结果匹配。嗯,这里就提到匹配算法了,数据关联的核心就是如何做特征匹配,这方面的研究一直在进步,常用的有KM matching(即匈牙利算法),近些年来通过深度学习方法,在目标检测时候直接生成物体的高维特征,然后去匹配,结果会更加promising,但是这部分工作还比较新,工程化尚需时日。
- 求解状态估计问题,即预测-观测-更新的循环(实际上只需要prediction和update这两步),这里我们只介绍应该最广的贝叶斯概率方法,各种kalman filter,以及partical filter都可以归到此类。这个要展开就太庞大了,简单说就是物体的状态、传感器误差、观测误差都可以表示成高斯或非高斯过程,我们要构建运动方程和观测方程,再求解(啊这几句话简直是浓缩的面目全非,请各位SLAM的朋友不要打我。。。)
回到主题,上面总结的sensor fusion过程,跟object tracking有什么关系呢?
原因就是一句话,这两个问题都是状态估计问题,本质都是在求解prediction-update.
更完整的表述是,为了实现稳定的object tracking, 我们需要用到多种传感器,例如lidar/camera/radar, 但是1)每种传感器都有自己的局限性,可能造成miss tracking or false tracking 2)要解决multiple object tracking (MOT) 问题时,我们不希望用不代表该物体的sensor数据,去估计该物体的状态。这些问题的基础,都先要解决sensor fusion问题。
所以我们可以把sensor fusion理解成一个基础模块,有了它,你可以实现:
- 稳定的定位,sensor fusion for localization;
- 稳定的目标检测,sensor fusion for detection;
- 稳定的单、多目标跟踪,sensor fusion for single / multiple object tracking;
今天先码这么多,上面介绍的两个问题,sensor fusion和object tracking,都涉及到多项底层技术的融会贯通,在学界和工业界正在随着自动驾驶的浪潮迅速发展,后续我再更新更多技术细节和技术发展前沿。