精华内容
下载资源
问答
  • 引言 自动驾驶感知和定位中传感器融合成了无人驾驶领域的趋势,融合按照实现原理分为硬件层的融合, 如禾赛和Mobileye等传感器厂商, 利用传感器的底层数据进行融合;数据层, 利用传感器各种得到的后期数据,即每个...
    版权声明:本文为博主转载文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
    原文链接: https://blog.csdn.net/orange_littlegirl/article/details/89067017
    在微信公众号:来知晓, 后台回复:自动驾驶学习包,免费获取价值3000元近300G前沿学习资源。

    1. 引言

    自动驾驶感知和定位中传感器融合成了无人驾驶领域的趋势,融合按照实现原理分为硬件层的融合, 如禾赛和Mobileye等传感器厂商, 利用传感器的底层数据进行融合;数据层, 利用传感器各种得到的后期数据,即每个传感器各自独立生成目标数据,再由主处理器进行融合这些特征数据来实现感知任务;任务层, 先由各传感器完成感知或定位任务, 如障碍物检测,车道线检测,语义分割和跟踪以及车辆自身定位等, 然后添加置信度进行融合。

    在这里插入图片描述

    2. 多传感器标定

    传感器标定是自动驾驶的基本需求,良好的标定是多传感器融合的基础, 一个车上装了多个/多种传感器,而它们之间的坐标关系是需要确定的。

    这个工作可分成两部分:内参标定和外参标定,内参是决定传感器内部的映射关系,比如摄像头的焦距,偏心和像素横纵比(+畸变系数),而外参是决定传感器和外部某个坐标系的转换关系,比如姿态参数(旋转和平移6自由度)。

    摄像头的标定曾经是计算机视觉中3-D重建的前提,张正友老师著名的的Zhang氏标定法,利用Absolute Conic不变性得到的平面标定算法简化了控制场。

    另外在自动驾驶研发中,GPS/IMU和摄像头或者激光雷达的标定,雷达和摄像头之间的标定也是常见的。不同传感器之间标定最大的问题是如何衡量最佳,因为获取的数据类型不一样:

    • 摄像头是RGB图像的像素阵列;
    • 激光雷达是3-D点云距离信息(有可能带反射值的灰度值);
    • GPS-IMU给的是车身位置姿态信息;
    • 雷达是2-D反射图。

    另外,标定方法分targetless和target两种,前者在自然环境中进行,约束条件少,不需要用专门的target;后者则需要专门的控制场,有ground truth的target,比如典型的棋盘格平面板。

    这里仅限于targetless方法的讨论,主要利用Apollo中的标定工具对标定各个传感器进行研究

    2.1 标定场地

    我们的标定方法是基于自然场景的,所以一个理想的标定场地可以显著地提高标定结果的准确度。我们建议选取一个纹理丰富的场地,如有树木,电线杆,路灯,交通标志牌,静止的物体和清晰车道线。下图是一个较好的标定环境示例:
    在这里插入图片描述

    2.2 相机到相机

    智能车一般会有多个相机, 长焦距的用来检测远处场景(视野小), 短焦距检测近处(视野大).以Apollo的标定方法为例:
    基本方法:根据长焦相机投影到短焦相机的融合图像进行判断,绿色通道为短焦相机图像,红色和蓝色通道是长焦投影后的图像,目视判断检验对齐情况。在融合图像中的融合区域,选择场景中距离较远处(50米以外)的景物进行对齐判断,能够重合则精度高,出现粉色或绿色重影(错位),则存在误差,当误差大于一定范围时(范围依据实际使用情况而定),标定失败,需重新标定(正常情况下,近处物体因受视差影响,在水平方向存在错位,且距离越近错位量越大,此为正常现象。垂直方向不受视差影响)。
    结果示例:如下图所示,图2为满足精度要求外参效果,图3为不满足精度要求的现象,请重新进行标定过程。

    • 良好的相机到相机标定结果,中间部分为融合结果,重叠较好:
      在这里插入图片描述
    • 错误的相机到相机标定结果,,中间部分为融合结果,有绿色重影:
      在这里插入图片描述

    2.2 相机到多线激光雷达标定

    基本方法:在产生的点云投影图像内,可寻找其中具有明显边缘的物体和标志物,查看其边缘轮廓对齐情况。如果50米以内的目标,点云边缘和图像边缘能够重合,则可以证明标定结果的精度很高。反之,若出现错位现象,则说明标定结果存在误差。当误差大于一定范围时(范围依据实际使用情况而定),该外参不可用。

    • 良好的相机到多线激光雷达标定结果:
      在这里插入图片描述
    • 错误的相机到多线激光雷达标定结果:
      在这里插入图片描述

    2.3 相机到毫米波雷达标定

    基本方法:为了更好地验证毫米波雷达与相机间外参的标定结果,引入激光雷达作为桥梁,通过同一系统中毫米波雷达与相机的外参和相机与激光雷达的外参,计算得到毫米波雷达与激光雷达的外参,将毫米波雷达数据投影到激光雷达坐标系中与激光点云进行融合,并画出相应的鸟瞰图进行辅助验证。在融合图像中,白色点为激光雷达点云,绿色实心圆为毫米波雷达目标,通过图中毫米波雷达目标是否与激光雷达检测目标是否重合匹配进行判断,如果大部分目标均能对应匹配,则满足精度要求,否则不满足,需重新标定。

    • 良好的毫米波雷达到激光雷达投影结果:
      在这里插入图片描述
    • 错误的毫米波雷达到激光雷达投影结果:
      在这里插入图片描述

    2.4 相机到IMU标定

    虽然Apollo中没有, 但这是视觉slam中的常见传感器标定, 本人在近期会写一个相关的博客。
    利用Kalibr 对 Camera-IMU 进行标定

    2.5 论文总结

    最近相关的标定方面的论文也出现了不少, 奇点的黄裕博士的知乎专栏有总结

    3. 数据层融合

    有些传感器之间很难在硬件层融合,比如摄像头或者激光雷达和毫米波雷达之间,因为毫米波雷达的目标分辨率很低(无法确定目标大小和轮廓),但可以在数据层层上探索融合,比如目标速度估计,跟踪的轨迹等等。
    这里主要介绍一下激光雷达和摄像头的数据融合,实际是激光雷达点云投影在摄像头图像平面形成的深度和图像估计的深度进行结合,理论上可以将图像估计的深度反投到3-D空间形成点云和激光雷达的点云融合,但很少人用。原因是,深度图的误差在3-D空间会放大,另外是3-D空间的点云分析手段不如图像的深度图成熟,毕竟2.5-D还是研究的历史长,比如以前的RGB-D传感器,Kinect或者RealSense。

    相机和激光雷达的数据层融合原因:
    在无人驾驶环境感知设备中,激光雷达和摄像头分别有各自的优缺点。
    摄像头的优点是成本低廉,用摄像头做算法开发的人员也比较多,技术相对比较成熟。摄像头的劣势,第一,获取准确三维信息非常难(单目摄像头几乎不可能,也有人提出双目或三目摄像头去做);另一个缺点是受环境光限制比较大。
    激光雷达的优点在于,其探测距离较远,而且能够准确获取物体的三维信息;另外它的稳定性相当高,鲁棒性好。但目前激光雷达成本较高,而且产品的最终形态也还未确定。

    3.1 融合的传统方法

    • bayesia filter
      在这里插入图片描述
    • guided image filtering

    在这里插入图片描述
    在这里插入图片描述

    • 传统形态学滤波法

    3.2 深度学习方法

    (1) “Propagating Confidences through CNNs for Sparse Data Regression“, 提出normalized convolution (NConv)layer的改进思路,训练的时候NConv layer通过估计的confidence score最大化地融合 multi scale 的 feature map, 算法如下图:

    在这里插入图片描述
    (2)ICRA的论文High-precision Depth Estimation with the 3D LiDAR and Stereo Fusion
    只是在合并RGB image和depth map之前先通过几个convolution layer提取feature map:
    在这里插入图片描述
    (3)法国INRIA的工作,“Sparse and Dense Data with CNNs: Depth Completion and Semantic Segmentation“
    作者发现CNN方法在早期层将RGB和深度图直接合并输入性能不如晚一些合并(这个和任务层的融合比还是early fusion),这也是它的第二个发现,这一点和上个论文观点一致。算法流程:
    在这里插入图片描述
    前后两种合并方式的结果示意:
    在这里插入图片描述

    4. 任务层融合

    对于摄像头和激光雷达摄像头的感知任务来说, 都可用于进行车道线检测。除此之外,激光雷达还可用于路牙检测。对于车牌识别以及道路两边,比如限速牌和红绿灯的识别,主要还是用摄像头来完成。如果对障碍物的识别,摄像头可以很容易通过深度学习把障碍物进行细致分类。但对激光雷达而言,它对障碍物只能分一些大类,但对物体运动状态的判断主要靠激光雷达完成。任务级融合:障碍物检测/分类,跟踪,分割和定位。有时候融合可能在某一级的特征空间进行,这个也会随任务不同而变化。

    4.1 传统之障碍物检测跟踪

    • 双目和激光雷达融合

    法国INRIA利用做十字路口安全驾驶系统的障碍物检测[1]。
    在这里插入图片描述
    双目算法:
    在这里插入图片描述

    • 激光雷达和单摄像头融合
      用一个Bayesian分类器合并两个检测器的结果送进跟踪器[2], 算法流程:
      在这里插入图片描述
    • 单目和激光雷达融合
      图像数据的检测器用DPM算法,激光雷达点云数据检测采用自己提出的3D Morph算法,融合方式如加权和[3], 算法流程:
      在这里插入图片描述
    • 激光雷达,摄像头和毫米波雷达融合
      把激光雷达,摄像头和毫米波雷达的数据在障碍物检测任务进行融合, 基于D-S证据理论[4]
      在这里插入图片描述

    4.2 传统之多传感器定位

    • 激光雷达64线,雷达,摄像头,GPS-IMU(RTK),还有HD Map

    百度Apollo传感器融合用于车辆定位, 传感器配置有激光雷达64线,雷达,摄像头,GPS-IMU(RTK),还有HD Map。整个融合框架是基于EKF(扩展卡尔曼滤波器):估计最优的position, velocity, attitude (PVA)[5]。
    在这里插入图片描述
    在这里插入图片描述

    -视觉里程计和激光里程计
    该方法是在VO的基础上增加激光雷达点云信息[6]。这是系统框架:
    在这里插入图片描述

    4.3 深度学习之障碍物检测跟踪

    • 最常见的是利用激光雷达和相机进行障碍物检测:

    采用激光雷达点云的鸟瞰图和前视图像两个方向的投影和RGB图像共同构成目标检测的输入,检测器类似两步法,其中region proposal被3D proposal导出的bird view/frontal view proposal和2D image proposal结合所取代[7]。
    在这里插入图片描述

    • 利用激光雷达和相机进行障碍物跟踪层融合:
      还是采用tracking by detection思路,训练了三个CNN模型,即detectionnet,matchingnet和scoringnet[8]。
      在这里插入图片描述

    4.4 深度学习之定位

    • 定位
      激光雷达灰度图像(反射值)和点云定位进行融合, 两种定位方法都用了卷积网络进行搜索
      采用激光雷达扫描(利用卷积网络)的地面反射图来定位车辆,下面可以看到这种灰度图的样子。
      在这里插入图片描述

    引用文献
    [1] Intersection Safety using Lidar and Stereo sensors.
    [2] LiDAR and Camera-based Pedestrian and Vehicle Detection.
    [3] 2D/3D Sensor Exploitation and Fusion for Detection.
    [4] Multiple Sensor Fusion and Classification for Moving Object Detection and Tracking.
    [5] Robust and Precise Vehicle Localization based on Multi-sensor Fusion in Diverse City Scenes.
    [6] Real-time Depth Enhanced Monocular Odometry.
    [7] Multi-View 3D Object Detection Network for Autonomous Driving.
    [8] End-to-end Learning of Multi-sensor 3D Tracking by Detection.
    [9] Learning to Localize Using a LiDAR Intensity Map.

                                    </div>
                <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e44c3c0e64.css" rel="stylesheet">
                    </div>
    
    展开全文
  • 自动驾驶感知技术 视觉感知技术发展 本报告主要介绍面向自动驾驶的视觉感知技术。首先是对自动驾 驶视觉感知发展的行业综述, 介绍了自动驾驶感知技术的发展路 线, 以及视觉传感器在其中的作用; 其次介绍了车载...
  • 自动驾驶汽车中,传感器融合融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的安全性。为了更好地理解,让我们考虑一个简单的例子,如激...


    eecbca6c42715a8754929d8facc72d8a.png

    在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的安全性。

    为了更好地理解,让我们考虑一个简单的例子,如激光雷达和相机都在看着行人: 

    • 如果两个传感器中的一个没有检测到行人,我们将使用另一个传感器作为冗余来增加检测到行人的机会。

    • 如果两个传感器都检测到了行人,传感器融合技术将使我们更准确地知道行人的位置……通过处理两个传感器的噪声值。

    由于传感器是有噪声的,因此需要传感器融合算法来处理这些噪声,并尽可能进行最精确的估计。

    在融合传感器时,我们实际上是在融合传感器数据,或者叫做数据融合。有9种方法可以构建数据融合算法。这9种方法又可以分为3大类。

    本文将重点介绍传感器融合的3种分类和9种算法。

    按抽象级别进行传感器融合

    最常见的融合类型是抽象级别的。在这种情况下,问题是“应该什么时候进行融合?”

    文章激光雷达和摄像头的融合中描述了早期(EARLY)和后期(LATE)融合两种过程。

    在业界,还有其他称呼:低级(Low Level)、中级(Mid-Level)和高级(High-Level)传感器融合。

    低级别融合:融合原始数据

    低级别传感器融合是关于融合来自多个传感器的原始数据。例如,融合来自激光雷达的点云数据和来自摄像头的像素级数据。

    ✅ 这种类型的融合在未来几年具有很大的潜力,因为其考虑了所有数据。

    ❌ 早期融合(Low-Level)几年前还很难做到的,因为所需的处理量很大。每毫秒可以将数十万个点与数十万个像素融合在一起。

    下面是一个摄像头和激光雷达低级别融合的示例。

    315c8ac0f395732c7c0c1d8de3874c29.png

    在此过程中使用了对象检测,但真正完成这项工作的是将3D点云投影到图像中,然后将其与像素关联起来。

    中级别融合:融合检测数据

    中级传感器融合是将传感器独立检测到的物体进行融合。

    如果摄像头检测到障碍物,雷达也检测到它,我们把这些结果融合到一起形成对障碍物的位置、类别和速度的最佳估计。通常使用的方法是卡尔曼滤波器(贝叶斯算法)。

    ✅ 这个过程很容易理解,并且包含了几个现有的实现。

    ❌ 它严重依赖于检测器。如果一个失败,整个融合都可能失败。卡尔曼滤波器来解决这个问题!

    中级传感器融合示例:

    d0ad407de78c6cd596c43524a2e9aa54.png

    在此示例中,我们将来自激光雷达的3D边界框与来自对象检测算法的2D边界框融合在一起。该过程有效;但也可以逆转。可以将3D激光雷达的结果映射到2D中,并在2D影像中进行数据融合。

    高级别融合:融合轨迹

    最后,高级传感器融合是关于融合对象及其轨迹。我们不仅依赖于检测,还依赖于预测和跟踪。

    ✅ 此过程高一级,其优点是简单。

    ❌ 一个主要问题是可能会丢失太多信息。如果追踪是错误的,那么整件事都是错误的。

    雷达和摄像头之间按抽象级别的数据融合图:

    9f8972b66c9b1b4e4634247d18d02155.png

    中心化级别的传感器融合

    融合算法的第二类方法是按中心化级别来区分的。该场景下的问题是“融合在哪里发生?”。主计算机可以做,或者每个传感器可以做自己的检测和融合。一些方法是通过使用称为卫星架构的技术来做融合的。

    我们来了解一下3种类型的融合:

    • 中心化:

      一个中央单元处理融合(低级别)。

    • 去中心化:

      每个传感器融合数据并将其转发到下一个。

    • 分布式:

      每个传感器在本地处理数据并将其发送到下一个单元(后期融合)。

    我们以一辆经典的自动驾驶汽车为例。在这种情况下,每个传感器都有自己的计算机。所有这些计算机都连接到一个中央计算单元。

    与此相反,Aptiv开发了一种卫星架构的架构。这个想法是:所有传感器都连接到一个中央单元上,该单元处理称为主动安全域控制器的智能。

    94d38c8de0c3731dd86362fb16ea260d.png

    在这个过程中,利用传感器的位置和传递的信息类型,可以帮助减轻车辆的总重量,并随着传感器的数量可以更好地扩展。

    左图的情况如下:

    1. 传感器只是“卫星”:

      它们只是用来收集原始数据的。

    2. 主计算机中进行360°的融合:

      不必安装非常好的传感器,因为不会进行单个检测。

    3. 检测是在360°的全景图上完成的。

    ✅ 这有几个优点,请阅读。

    这是“中心化融合”的两个例子。当我们使用经典架构时,可能会遇到另外两种类型的融合。

    雷达和摄像头之间按抽象级别的数据融合图:

    a09fc8d1f647393569e4ea6bd4c3dfa2.png

    按竞争级别的传感器融合

    对传感器融合算法进行分类的最后一种方法是按竞争级别。

    • 在抽象级别,问题是“什么时候”融合应该发生。

    • 在中心化级别,它是关于“在哪里”的。

    • 在竞争级别,问题是“融合应该做什么?

    同样,有3种可能。

    • 竞争融合

    竞争融合是指传感器用于相同目的。例如,当同时使用雷达和激光雷达来检测行人时。这里发生的数据融合过程称为冗余,使用术语“竞争”。

    • 互补融合

    互补融合是指使用不同的传感器观察不同的场景来获取我们使用其他方式无法获得的东西。例如,使用多个摄像头构建全景图时。由于这些传感器相互补充,使用术语“互补”。

    • 协同融合

    最后,协同融合是关于使用两个或更多传感器来产生一个新场景,但是关于同一个对象的。例如,在使用2D传感器进行3D扫描或3D重建时。

    4d1468c954ee9097c801fa99c39a0f73.png

    希望这篇文章可以帮助您更好地了解如何使用传感器融合,以及如何区分不同的融合算法。

    融合通常由贝叶斯算法完成,例如卡尔曼滤波器。我们可以融合数据来估计物体的速度、位置或类别。

    译自:Learn Self-Driving Cars, Computer Vision, and cutting-edge Artificial Intelligence

    287d0768037cf48dfc006baa0230dcc3.png

    欢迎加入智能交通群!加微信号automan332,标注”加群“。

    展开全文
  • 自动泊车、公路巡航控制和自动紧急制动等自动...只有把多个传感器信息融合起来,才是实现自动驾驶的关键。”   现在路面上的很多汽车,甚至是展厅内的很多新车,内部都配备有基于摄像头、雷达、超声波或LIDAR...

    “自动泊车、公路巡航控制和自动紧急制动等自动驾驶汽车功能在很大程度上是依靠传感器来实现的。重要的不仅仅是传感器的数量或种类,它们的使用方式也同样重要。目前,大多数路面上行驶车辆内的ADAS都是独立工作的,这意味着它们彼此之间几乎不交换信息。只有把多个传感器信息融合起来,才是实现自动驾驶的关键。”

     

    现在路面上的很多汽车,甚至是展厅内的很多新车,内部都配备有基于摄像头、雷达、超声波或LIDAR等不同传感器的先进驾驶员辅助系统(ADAS)。

     

    这些系统的数量将会随着新法案的通过而不断增加,例如在美国,就有强制要求安装后视摄像头的法案。此外,诸如车险打折优惠和美国公路交通安全管理局(NHTSA)、欧洲新车安全评鉴协会(Euro-NCAP)等机构做出的汽车安全评级正在使某些系统成为汽车的强制功能;另一方面,这也助长了消费者对它们的需求。

     

    诸如自动泊车、公路巡航控制和自动紧急制动的自动驾驶汽车功能也在很大程度上依靠传感器来实现。重要的不仅仅是传感器的数量或种类,它们的使用方式也同样重要。目前,大多数路面上行驶车辆内的ADAS都是独立工作的,这意味着它们彼此之间几乎不交换信息。(没错,某些高端车辆具有非常先进的自动驾驶功能,不过这些功能还未普及)。后视摄像头、环视系统、雷达和前方摄像头都有它们各自的用途。通过将这些独立的系统添加到车辆当中,可以为驾驶员提供更多信息,并且实现自动驾驶功能。不过,你还可以突破限制,实现更多功能——参见图1。

    640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

    图1:ADAS以汽车内单个、独立的功能存在。

    传感器融合

     

    仅仅通过多次使用相同种类的传感器无法克服每种传感器的缺点。反之,我们需要将来自不同种类传感器的信息组合在一起。工作在可见光谱范围内的摄像头CMOS芯片在浓雾、下雨、刺眼阳光和光照不足的情况下会遇到麻烦。而雷达缺少目前成像传感器所具有的高分辨率。我们可以在每种传感器中找到诸如此类的优缺点。

     

    传感器融合这一想法的伟大之处在于获得不同传感器和传感器种类的输入内容,并且使用组合在一起的信息来更加准确地感知周围的环境。相对于独立系统,这样可以做出更好、更安全的决策。雷达也许不具有光传感器所具有的分辨率,不过它在测距和穿透雨、雪和浓雾方面具有很大优势。这些天气条件或光照不足的恶劣情况不利于摄像头发挥作用,不过摄像头能够分辨颜色(可以想一想街道指示牌和路标),并且具有很高的分辨率。目前路面上图像传感器的分辨率已经达到1百万像素。在未来几年内,图像传感器的发展趋势将是2百万,甚至4百万像素。

     

    雷达和摄像头是两项传感器技术完美融合、互为补充的典范。采用这种方法的融合系统所实现的功能要远超这些独立系统能够实现的功能总和。使用不同的传感器种类可以在某一种传感器全都出现故障的环境条件下,额外提供一定冗余度。这种错误或故障可能是由自然原因(诸如一团浓雾)或是人为现象(例如对摄像头或雷达的电子干扰或人为干扰)导致。即使是在一个传感器失效的情况下,这样的传感器融合系统也可以保持某些基本或紧急的功能。完全借助报警功能,或者让驾驶员时刻做好准备,从而接管对车辆的控制,系统故障也许就不那么严重了。然而,高度和完全自动驾驶功能必须提供充足的时间让驾驶员重新获得对车辆的控制。在这段驾驶员接管车辆控制之前的时间范围内,控制系统需要保持对车辆最低限度的控制。

     

    传感器融合系统示例

     

    传感器融合的复杂程度有所不同,并且数据的类型也不一样。两个基本的传感器融合示例是:a)后视摄像头加上超声波测距;b)前方摄像头加上多模式前置雷达——参见图2。现在,我们可以通过对现有系统进行轻微更改和/或通过增加一个单独的传感器融合控制单元来对其进行实现。

    640?wx_fmt=jpeg

    图2:将前方雷达与前方摄像头融合在一起,以实现自适应巡航控制加车道保持辅助,或者将后视摄像头与超声波测距报警组合在一起来实现自动泊车。

    • 后视摄像头+超声波测距

    超声波泊车辅助技术在汽车市场内被广泛接受,并且已十分成熟;这项技术在泊车时能对邻近物体给出听得见或看得见的报警。正如之前提到的那样,到2018年,美国所有新出厂的车辆都必须安装后视摄像头。将来自二者的信息结合在一起,才能实现先进的泊车辅助功能,而其靠单一系统是无法实现的。后视摄像头使驾驶员能很清楚地看到车辆后方的情况,而机器视觉算法可以探测物体,以及路肩石和街道上的标记。通过超声波提供的补充功能,可以准确确定识别物体的距离,并且在低光照或完全黑暗的情况下,也能确保基本的接近报警。

    • 前视摄像头+多模前置雷达

    另一种强大的组合是将前视摄像头的功能与前置雷达组合在一起。前置雷达能够在任何天气条件下测量高达150米的物体的速度和距离。摄像头在探测和区分物体方面(包括读取街道指示牌和路标)十分出色。通过使用具有不同视场角(FoV)和不同光学元件的多个摄像头传感器,系统可以识别车前通过的行人和自行车,以及150米甚至更远范围内的物体,同时,其还可以可靠实现自动紧急制动和城市启停巡航控制等功能。

    许多情况下,在特定的已知外部条件下,仅通过一种传感器或单个系统,就能够执行ADAS功能。然而,考虑到路面上有很多不可预计的情况,这还不足实现可靠运行。传感器融合除了能实现更复杂和自主的功能外,还可以在现有功能中实现更少的误报和漏报。说服消费者和立法者,使他们相信汽车可以由“一台机器”自主驾驶,将会十分关键。

    传感器融合系统分割

     

    与汽车内每个系统单独执行各自的报警或控制功能不同,在一个融合系统中,最终采取哪种操作是由单个器件集中决定的。现在的关键问题就是在哪里完成数据处理,以及如何将传感器的数据发送到中央电子控制单元(ECU)。当对不是集中在一起而是遍布车身的多个传感器进行融合时,我们就需要专门考虑传感器和中央融合ECU之间的连接和电缆。对于数据处理的位置也是如此,因为它也会影响整个系统的实现。让我们来看一看可能的系统分割中的两种极端情况。

    ·  集中式处理

     

    集中式处理的极端情况是,所有的数据处理和决策制定都是在同一个位置完成,数据是来自不同传感器的“原始数据”——请见图3。

    640?wx_fmt=jpeg

    图3:具有“传统”卫星式传感器模块的集中处理。

    优点:

    传感器模块——传感器模块体积小巧,成本低,功耗也低,这是因为其只需要执行检测和数据传输任务。传感器的安装位置也很灵活,并且所需安装空间很小。替换成本低。通常情况下,由于无需处理或做决策,传感器模块具有较低的功能安全要求。

    处理ECU——中央处理ECU可以获取全部数据,这是因为数据不会因为传感器模块内的预处理或压缩而丢失。由于传感器成本较低,并且外形尺寸较小,因此可以部署更多的传感器。

    缺点:

    传感器模块——实时处理传感器数据需要提供宽带通信(高达数Gb/s),因此可能出现较高电磁干扰(EMI)。

    处理ECU——中央ECU需要有高处理能力和速度来处理所有输入数据。对于很多高带宽I/O和高端应用处理器来说,这意味着更高的电能需求和更大的散热量。传感器数量增加将大幅增加对中央ECU性能的需要。通过使用FPD-Link III等接口,在一根同轴电缆上传送传感器及功耗、控制和配置等多种数据(双向反向通道),有些缺点可以被克服。这样便可极大降低系统的接线要求。

    · 全分布式系统

     

    另一种截然不同的极端情况是全分布式系统。这种情况是由本地传感器模块进行高级数据处理,并在一定程度上进行决策制定的。全分布式系统只将对象数据或元数据(描述对象特征和/或识别对象的数据)发回到中央融合ECU。ECU将数据组合在一起,并最终决定如何执行或做出反应——请见图4。

    640?wx_fmt=jpeg

    图4:传感器数据由传感器模块处理、决策由中央ECU制定的分布式系统。

    全分布式系统既有优点又有缺点。

    优点:

    传感器模块——传感器模块与中央ECU之间可以使用更低带宽、更加简单且更加便宜的接口。在很多情况下,小于1Mb/s的CAN总线就足够用了。

    处理ECU——中央ECU只将对象数据融合在一起,因此其所需处理能力更低。对于某些系统来说,用一个高级的安全微控制器就足够了。模块更小,所需功耗也就更低。由于很多处理都是在传感器内部完成的,传感器数量增加不会大幅增加对中央ECU的性能需求。

    缺点:

    传感器模块——传感器模块需要有应用处理器,这样的话就会变得体积更大、价格更高且功耗更大。由于本地处理和决策制定,传感器模块的功能安全要求也就更高。当然,增加更多的传感器,成本也会大幅上升。

    处理ECU——中央决策制定ECU只能获取对象数据,而无法访问实际的传感器数据。因此,想要“放大”感兴趣的区域很难实现。

    寻找黄金分割

     

    根据系统中所使用传感器的数量与种类,以及针对不同车型和升级选项的可扩展性要求,将两个拓扑混合在一起就可获得一个优化解决方案。目前很多融合系统使用带本地处理的传感器用于雷达和激光雷达(LIDAR),使用前置摄像头用于机器视觉。一个全分布式系统可以使用现有的传感器模块与对象数据融合ECU组合在一起。诸如环视和后视摄像头的系统中的“传统”传感器模块可以让驾驶员看到周围的环境情况——请见图5。可以将更多的ADAS功能集成进驾驶员监测或摄像头监控系统等融合系统中,但是传感器融合的原理还是一样。

    640?wx_fmt=jpeg

    图5:寻找分布式和集中式处理的完美结合。

    平台管理、目标汽车细分、灵活性和可扩展性是重要的经济因素;这些因素也在分割和设计融合系统时发挥着重要作用。对于任一特定情况,所得系统也许不是最佳设计方案,但是从平台和车队的角度看,它却可能是最佳方案。

    谁是所有这些传感器数据的“观看者”?

     

    关于ADAS,我们还有两个方面没有讨论到:信息ADAS对功能ADAS。前者就是当驾驶员仍然对汽车完全掌控时,扩大和延伸驾驶员的感官范围(例如环视和夜视)。第二个是机器视觉,它使汽车能够感知周围环境,并做出自我决策以及执行(自动紧急制动、车道保持辅助)。传感器融合自然而然地将这两个世界合而为一。

    正因如此,我们才有可能将同一传感器应用于不同用途,不过这么做的代价就是在选择最佳模块间通信和处理位置方面受到了限制。以环视为例,这项功能最初的设计目的是,通过将视频传入到中央显示屏上,为驾驶员提供360度视场角。为什么不使用同样的摄像头,并将机器视觉应用到其上呢?后视摄像头可用于实现倒车保护或自动停车,而侧视摄像头可用于实现盲点检测/报警,也包括自动泊车。

    单独使用的机器视觉在传感器模块内进行本地处理,然后通过CAN总线等简单的低带宽连接将对象数据甚至是命令传送出去。然而,这种连接不足以传送完整的视频流。视频压缩当然可以降低所需带宽,但是还不足以将所需带宽降到百兆位范围内,并且它本身也存在一些问题。随着高动态范围(HDR)分辨率、帧速率和曝光数增加,这变得更加困难。高带宽连接和摄像头模块不参与数据处理解决了视频的问题,但是现在需要将处理添加到中央ECU,以便在其中运行机器视觉。缺少中央处理能力或散热控制会成为这种解决方案的瓶颈。

    虽然在传感器模块中进行处理并同时使用高带宽通信在技术上并不是不可实现,但从总体系统成本、功耗和安装空间角度来讲并不十分有利。

    传感器融合配置的可靠运行

     

    由于很多融合系统能够在没有驾驶员的情况下执行特定汽车功能(例如转向、制动和加速)的自主控制,我们需要对功能安全进行认真考虑,以确保在不同条件下和汽车的使用寿命内系统能够安全和可靠运行。一旦做出决策,并随后采取自主操作,那么对于功能安全的要求将会大幅提升。

    若采用分布式的方法,每个处理关键数据或制定决策的模块必须符合那些增加的标准。与只搜集和发送传感器信息的模块相比,这会增加物料清单(BOM)成本、尺寸、功耗和软件。在安装空间不足的环境中,器件很难冷却,并且其损坏的风险和所需的更换也很高(一次简单的小事故有可能需要更换保险杠和所有相连的传感器),这可能抵消具有多个传感器模块的分布式系统的优势。

    如果采用“传统”传感器模块,则需进行自检和故障报告,以实现整个系统的安全运转,但是其还未达到智能传感器模块的程度。

    虽然纯粹的驾驶员信息系统可以在它们的功能受到损害时关闭并将其通报给驾驶员,但是高度自主驾驶功能就没有那么自由了。想象一下一辆汽车正在执行紧急制动操作,然后又突然解除并松开制动器的情况。或者说,汽车在公路上行驶时,整个系统关闭,而此时驾驶员正在汽车“全自动驾驶”状态下呼呼大睡(未来可能的一个场景)。在驾驶员能够安全控制车辆之前,系统需要继续保持工作一段时间,而这至少需要有几秒到半分钟。系统必须运行到何种程度,以及如何确保在故障情况下运转,这些问题在业内似乎还未达成明确共识。具有自动驾驶功能的飞机通常情况下使用冗余系统。虽然我们一般情况下认为它们是安全的,不过它们造价昂贵并且占用大量空间。

    传感器融合将会是迈向自动驾驶及享受旅途时光和驾驶乐趣的关键一步。

    多传感器信息融合算法

    智能汽车的显著特点在于智能,意思就是说汽车自己能通过车载传感系统感知道路环境,自动规划行车路线并控制车辆到达预定目标。目前而言,车载感知模块包括视觉感知模块、毫米波雷达、超声波雷达、360°环视系统等,多源传感器的协同作用识别道路车道线、行人车辆等障碍物,为安全驾驶保驾护航。因此,感知信息也需要融合,感知信息也需要相互补充。

     

    这里引出一个重要的概念:多传感器信息融合(information fusion)。各种不同的传感器,对应不同的工况环境和感知目标。比方说,毫米波雷达主要识别前向中远距离障碍物(0.5米-150米),如路面车辆、行人、路障等。超声波雷达主要识别车身近距离障碍物(0.2米-5米),如泊车过程中的路沿、静止的前后车辆、过往的行人等信息。两者协同作用,互补不足,通过测量障碍物角度、距离、速度等数据融合,刻画车身周边环境和可达空间范围。

     

     

    640?wx_fmt=jpeg

     

    图6:智能汽车感知模块

     

    信息融合起初叫做数据融合(data fusion),起源于1973年美国国防部资助开发的声纳信号处理系统,在20世纪90年代,随着信息技术的广泛发展,具有更广义化概念的“信息融合”被提出来,多传感器数据融合MSDF (Multi-sensor Data Fusion)技术也应运而生。

     

    数据融合主要优势在于:充分利用不同时间与空间的多传感器数据资源,采用计算机技术按时间序列获得多传感器的观测数据,在一定准则下进行分析、综合、支配和使用。获得对被测对象的一致性解释与描述,进而实现相应的决策和估计,使系统获得比它各组成部分更为充分的信息。

     

    一般地,多源传感器数据融合处理过程包括六个步骤,如下图所示。首先是多源传感系统搭建与定标,进而采集数据并进行数字信号转换,再进行数据预处理和特征提取,接着是融合算法的计算分析,最后输出稳定的、更为充分的、一致性的目标特征信息。

     

    640?wx_fmt=jpeg

    图7:多源数据融合过程

     

    利用多个传感器所获取的关于对象和环境全面、完整信息,主要体现在融合算法上。因此,多传感器系统的核心问题是选择合适的融合算法。对于多传感器系统来说,信息具有多样性和复杂性,因此,对信息融合方法的基本要求是具有鲁棒性和并行处理能力,以及方法的运算速度和精度。以下简要介绍三种种常用的数据融合算法,包括贝叶斯统计理论,神经网络技术,以及卡尔曼滤波方法。

     

    贝叶斯统计理论

     

    640?wx_fmt=jpeg

    图8:文氏图

     

    英国数学家托马斯·贝叶斯(Thomas Bayes)在1763年发表的一篇论文中,首先提出了这个定理。贝叶斯统计理论是一种统计学方法,用来估计统计量的某种特性,是关于随机事件A和B的条件概率的一则定理。所谓"条件概率"(Conditional probability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。根据上述文氏图,容易推导得到:P(A ∩ B) = P( A | B) * P(B) = P( B | A) * P(A),由此可以推导出条件概率的公式,其中我们把P(A)称为先验概率(Prior probability),即在事件B发生之前,我们对事件A发生概率有一个认识。

    640?wx_fmt=jpeg

    举个简单的例子,视觉感知模块中图像检测识别交通限速标志(Traffic Sign Recognition, TSR )是智能驾驶的重要一环。TSR识别过程中,交通限速标志牌被树木,灯杆等遮挡是影响识别的主要干扰。那么我们关心的,是交通限速标志被遮挡的情况下,检出率有多少呢?这里我们定义事件A为交通信号标志正确识别,事件为交通信号标志未能识别;B为限速标志被遮挡,事件为限速标志未被遮挡。

     

    640?wx_fmt=jpeg

    图9:被遮挡的交通限速标志

     

    根据现有算法,可以统计出事件A正确识别交通限速标志的概率,此处事件A的概率称为先验概率。通过查看视觉感知模块的检测视频录像,我们可以统计检测出来的交通限速标志中有多少被遮挡,有多少是没被遮挡的,还可以统计漏检的交通限速标志中,有多少是被遮挡的,有多少是没被遮挡的。因此,我们可以得到下面值:

    640?wx_fmt=jpeg

    由此,可以推算出被遮挡的情况下,正确识别限速标志的概率:

    640?wx_fmt=jpeg

    那么,也有人可能会问,如果限速标志没有被遮挡,识别率有多高呢?同理,我们这里也可以一并计算:

    640?wx_fmt=jpeg

    从以上计算我们可以看到,限速标志未被遮挡完全暴露出来,识别率是相当高的,但如果限速标记牌被阻挡住,识别率是比未遮挡的低很多。这两个指标的融合使用,可以用于作为评价目前图像处理算法识别限速标志性能的重要参考。当然,实际的融合过程比这复杂得多,小鹏汽车工程师们正努力不断优化,提高各种工况下的识别率,提供更为舒适的智能驾驶辅助。

     

    神经网络理论

     

    640?wx_fmt=jpeg

    图9:神经网络

     

    神经网络(Artificial Neural Network,ANN)是机器学习(Machine Learning,ML)的其中一种方式,是人工智能、认知科学、神经生理学、非线性动力学、信息科学、和数理科学的“热点”。

     

    ANN的发展经历了三个阶段

     

    • 第一个阶段是起步阶段,从20世纪40年代开始逐渐形成了一个新兴的边缘性交叉学科。1943年,心理学家McCulloch和数学家Pitts合作,融汇了生物物理学和数学,提出了第一个神经计算模型: MP模型。1949年,心理学家Hebb通过对大脑神经细胞、学习和条件反射的观察与研究,提出了改变神经元连接强度的、至今仍有重要意义的Hebb规则。

       

    • 第二阶段是发展阶段,1957年,Rosenblatt发展了MP模型,提出了感知器模型:Perception Model,给出了两层感知器的收敛定理,并提出了引入隐层处理元件的三层感知器这一重要的研究方向。1960年,Widrow提出自适应线性元件模型:Ada-line model以及一种有效的网络学习方法:Widrow-Hoff学习规则。

       

    • 第三阶段是成熟阶段,1982年美国加州工学院的物理学家Hopfield提出了一个用于联想记忆和优化计算的新途径——Hopfield网络,使得神经网络的研究有了突破性进展。1984年在Hopfield的一篇论文中,指出Hopfield网络可以用集成电路实现,很容易被工程技术人员和计算机科技工作者理解,引起工程技术界的普遍关注。

     

    上世纪八十年代后期,神经网络的光芒被计算机技术、互联网掩盖了,但这几年计算机技术的发展,恰恰给神经网络更大的机会。神经网络由一层一层的神经元构成。层数越多,就越深,所谓深度学习(Deep Learning)就是用很多层神经元构成的神经网络达到机器学习的功能。辛顿是深度学习的提出者,2006年,基于深度置信网络(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。目前,深度学习的神经网络技术广泛用于计算机视觉、语音识别、自然语言处理识别上。

     

    关于神经网络的研究包含众多学科领域,涉及数学、计算机、人工智能、微电子学、自动化、生物学、生理学、解剖学、认知科学等学科,这些领域彼此结合、渗透,相互推动神经网络研究和应用的发展。

     

    640?wx_fmt=jpeg

    图10:一个人工神经细胞

     

    接着,简单介绍下神经网络的基础。生物的大脑是由许多神经细胞组成,同样,模拟大脑的人工神经网络ANN是由许多叫做人工神经细胞(Artificial neuron,也称人工神经原,或人工神经元)的细小结构模块组成。人工神经细胞就像真实神经细胞的一个简化版,如图所示,左边几个蓝色圆中所标字母w代表浮点数,称为权重(weight,或权值,权数)。进入人工神经细胞的每一个input(输入)都与一个权重w相联系,正是这些权重将决定神经网络的整体活跃性。你现在暂时可以设想所有这些权重都被设置到了-1和1之间的一个随机小数。因为权重可正可负,故能对与它关联的输入施加不同的影响,如果权重为正,就会有激发(excitory)作用,权重为负,则会有抑制(inhibitory)作用。当输入信号进入神经细胞时,它们的值将与它们对应的权重相乘,作为图中大圆的输入。大圆的‘核’是一个函数,叫激励函数(activation function),它把所有这些新的、经过权重调整后的输入全部加起来,形成单个的激励值(activation value)。激励值也是一浮点数,且同样可正可负。然后,再根据激励值来产生函数的输出也即神经细胞的输出:如果激励值超过某个阀值(作为例子我们假设阀值为1.0),就会产生一个值为1的信号输出;如果激励值小于阀值1.0,则输出一个0。这是人工神经细胞激励函数的一种最简单的类型。

     

    640?wx_fmt=jpeg

    图11:神经网络结构

     

    大脑里的生物神经细胞和其他的神经细胞是相互连接在一起的。为了创建一个人工神经网络,人工神经细胞也要以同样方式相互连接在一起。为此可以有许多不同的连接方式,其中最容易理解并且也是最广泛地使用的,就是如图所示那样,把神经细胞一层一层地连结在一起。这一种类型的神经网络就叫前馈网络(feed forward network)。这一名称的由来,就是因为网络的每一层神经细胞的输出都向前馈送(feed)到了它们的下一层(在图中是画在它的上面的那一层),直到获得整个网络的输出为止。

     

    神经细胞通过输入层、隐含层和输出层的链接,形成一个复杂的神经网络系统,通过有效的学习训练,使输出层的结果与现实越来越靠近,误差越来越小,当其精度满足一定的功能需求时,神经网络训练完毕,此刻构建的神经网络系统即能为我们解决众多机器学习上的图像识别、语音识别、文字识别上的问题。

     

    在智能驾驶目前的发展历程上看,人工神经网络技术,乃至现在最新的深度学习技术,广泛用于视觉感知模块的车辆识别、车道线识别、交通标志识别上。通过对中国路况工况的数据采集和处理,广泛获取国内不同天气状况(雨天、雪天、晴天等),不同路况(城市道路、乡村道路、高速公路等)的真实的环境数据,为深度学习提供了可靠的数据基础。此处神经网络的输入层数据,也即是传感器获取的数据,是多源多向的,可以是前挡风玻璃片上视觉感知模块的障碍物位置、形状、颜色等信息,也可以是毫米波雷达、超声波雷达检测的障碍物距离、角度、速度、加速度等信息,还可以是360°环视系统上采集的车位数据、地面减速带数据。

     

    卡尔曼滤波

     

    卡尔曼滤波(Kalman filtering)一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,它是最优,效率最高甚至是最有用的。Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态。由于,它便于计算机编程实现,并能够对现场采集的数据进行实时的更新和处理, Kalman滤波是目前应用最为广泛的滤波方法,在通信、导航、制导与控制等多领域得到了较好的应用。
     

    卡尔曼滤波是多源传感数据融合应用的重要手段之一,为了扼要地介绍卡尔曼滤波的原理,此处形象地用毫米波雷达与视觉感知模块融合目标位置的过程描述。举一个简单的例子,目前高级辅助驾驶系统(Advanced Driver Assistance System,ADAS)上,搭载有毫米波雷达和超声波雷达模块,两者均能对障碍物车辆进行有效的位置估计判别。雷达利用主动传感原理,发射毫米波,接收障碍物回波,根据波传播时间计算角度距离。两者均能识别出车辆位置,那么我们该如何融合信息,如何取舍,计算出具体的车辆位置呢?卡尔曼正是解决这个问题的方法之一。我们获取的车辆位置在任何时刻都是有噪声的,卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),还可以是对过去位置的估计(插值或平滑)。卡尔曼滤波就是这样一个根据当前时刻目标的检测状态,预测估计目标下一时刻目标检测状态的一个动态迭代循环过程。

     

    高级辅助驾驶系统ADAS是目前智能汽车发展的重要方向,其手段是通过多源传感器信息融合,为用户打造稳定、舒适、可靠可依赖的辅助驾驶功能,如车道保持系统(Lane Keeping Assist, LKA),前碰预警(Forward Collision Warning, FCW),行人碰撞警告(Pedestrian Collision Warning,PCW),交通标记识别(Traffic Sign Recognition,TSR),车距监测报告(Head Monitoring and Warning,HMW)等。多源信息的融合,目的在于数据信息的冗余为数据信息的可靠分析提供依据,从而提高准确率,降低虚警率和漏检率,实现辅助驾驶系统的自检和自学习,最终实现智能驾驶、安全驾驶的最终目标。

    ▎本文转自电子技术设计,知乎小鹏汽车,作者:Hannes Estl,德州仪器(TI)汽车ADAS部门的总经理,如需转载请注明来源。

    --------------------- 本文来自 人人都是极客 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/p23onzq/article/details/79257269?utm_source=copy

    展开全文
  • 前一篇文章讲了,Apollo 6.0 中融合的代码逻辑流程,但那是基于软件的角度进行梳理和分析的,这一篇文章基于上篇的成果进一步对算法进行较深入的分析,主要涉及到多目标跟踪中的数据关联和滤波算法。 目标跟踪的基础...

    前一篇文章讲了,Apollo 6.0 中融合的代码逻辑流程,但那是基于软件的角度进行梳理和分析的,这一篇文章基于上篇的成果进一步对算法进行更详细的分析,因为代码量奇大,所以本文重点讨论数据关联的一些细节。

    目标跟踪的基础知识概念

    为保持文章内容由浅入深,先做一些基础的概念介绍。

    卡尔曼滤波如何工作?

    数据融合最常见的算法是卡尔曼滤波及其变种。
    卡尔曼滤波是一个多次迭代的算法,一个周期内的工作如图所示:

    在这里插入图片描述
    一个目标初始状态,经过 T 时间后,调用 Predict() 方法,初始状态会移植到预测状态,一般 Predict() 方法都是基于特定运动公式进行计算的,比如手机上的 GPS,5s 更新一次 GPS 位置,但 5s 颗粒度太粗了,就将 1s 切分成 10 段,每一段 100ms 自己调用公式推断一次位置,这就是 Predict 过程。

    大家会发现问题,这样的结果虽然凑合着可用,但毕竟是理论上推断出来的,不会怎么靠谱。

    那就需要一个靠谱的东西,将结果及时纠偏。

    比如,你每隔 100ms 自行推断的位置,我每隔 5s 收到 GPS 数据时,用这个数据来更新数据。

    这就涉及到融合的过程了,这一过程称为 Update 或者是 Measure,融合可以简单理解为加权,就是一个比例,相信历史数据多一些还是相信检测到的数据多一些。

    然后,融合得到的值传递给下一周期的状态值,这样一轮一轮进行下去。

    单目标跟踪和多目标跟踪区别?

    讲完滤波算法,讲讲单目标跟踪和多目标跟踪的区别。

    多目标比单目标难。

    假设,车辆前方只有一个目标需要跟踪,比如 ACC 功能。

    在这里插入图片描述

    蓝色正方形是融合系统每次推断的结果值。
    橙色三角形是每次传感器检测到的结果。
    绿色圆形则是融合的数据。

    这是单个目标跟踪,基本上是 1 对 1 的关系,也就是一个目标状态值对应一个观测值。

    当然,也许传感器有杂波可能产生多个观测值,但我们同样可以通过算法进行筛选或者做加权融合最终得到一个观测值,总之在单目标跟踪中观测值和状态值一般是 1 对 1 的。

    再来看多目标跟踪问题。
    在这里插入图片描述
    紫色正方形是另外一个目标的状态值,大家很容易发现问题。

    上图标记红色问题的地方会存在一个困惑,那个橙色三角形代表的观测数据究竟属于哪个目标真实的检测信号呢?

    因为传感器本身也存在抖动,所以,你不能简单说左边,因为左边更近吧?

    这涉及到一个多目标匹配的问题,需要靠谱的数据关联(data associate)技术解决。

    Apollo 中的目标融合

    目标跟踪领域,一般用 Track 来代表一个被稳定跟踪的对象,
    但 Track 是有生命周期状态变换的。

    生命周期和状态

    • initial
    • tracking
    • temporary lost
    • destroyed

    在这里插入图片描述
    上面这张图已经跟踪清晰了,对应到代码中其实就是 3 个:

    • 新建 Track
    • 维护 Track
    • 销毁过时 Track

    讲了目标的状态后,我们需要解决一个问题:
    将检测信号和正确的 Track 进行匹配。

    数据关联中的关联矩阵?

    在代码中如何表示新检测的目标和历史 Track 的关系呢?
    在这里插入图片描述
    比如,上图中左侧代表 Tracks,右侧代表新检测到的 Objects。
    两个节点之间有连线,说明这个object 和对应的 Track 可能是同一个对象,线段上可以保存距离值,如果没有连接,距离值就为 -1。
    但大家可以看到,会出现一些多对多的情况,这个时候就需要我们用一个矩阵将objects和tracks之间的距离值保存下来。
    比如,上图的关系完全可以用一个 4x5 的数组来表示,我们称为关联矩阵。

    5,6,-1,-1,-1;
    3,-1,4,-1,-1;
    1,-1,-1,-1,-1;
    -1,-1,2,-1,3
    

    然后,就需要通过数据关联的算法去寻找最佳匹配,这个过程会迭代很多次,最终迭代到最佳状态,就是我们匹配的结果。
    比如这样:
    在这里插入图片描述
    上图所示,找到了一个好的匹配结果。
    节点 I 是 unassign obj,需要为它单独创建新的 Track。
    另外,还会出现一种情况,就是可能某些历史节点 Track,没有新的 obj 和它匹配,这个时候就需要看情况,是不是删掉这个 Track,还是继续跟踪一段时间。

    Apollo 6.0 中会有这样的关联矩阵计算过程。

    在这里插入图片描述
    先不管实现代码,单单从函数参数中我们就知道,这个函数要通过 fusion tracks 和 sensor objs 计算一个距离矩阵,并且还要详细记录未匹配上的 tracks 和 objs。

    因为代表很多,我们要克服好奇心,先不探索这个函数怎么实现的,我们关心它被谁调用。

    其实它是 hm_tracks_objects_match.cc 内部的方法,在 Associate() 方法中被调用。
    在这里插入图片描述
    Associate() 方法的代码实在是长,我简单概括了一下,它内部调用了好几个方法。

    我们很容易看到,ComputeAssociationDistanceMat() 之前有个很重要的方法 IDAssign。
    并且,我们也需要知道 ComputeAssociationDistanceMat 里面的参数变量如何得到的。
    在这里插入图片描述

    IDAssign

    在这里插入图片描述
    目标融合有几种情况需要处理:

    第 1 种情况,系统第 1 次融合时,FusionTracks 数量为 0.

    这个时候会发生什么呢?
    根据上面的代码,它会将 unassigned_measurements 的数量置为 objs 的数量.
    在这里插入图片描述
    就是一个 vector,用来保存未分配的 obj 的信息。
    如果 fusion_tracks 为空,调用 std::itoa 方法给 unassigned_measurements 赋值,从 0 开始。

    第2种情况,某次融合时,sensor objs 数量为 0

    这和第 1 种情况相反,会将 unassigned_tracks 结果更新。

    第 3 种情况,fusion_tracks,objs 数量都正常

    这个时候会根据 sensor id 和时间戳去重置位置相关的信息,然后就进入到 IDAssign 方法。

    当然,如果是前向毫米波雷达,代码是有区别对待的,它将不参与 ID 分配.

    我们需要关注的是正常情况下,ID 是怎么分配的?这个 ID 代表什么?

    在这里插入图片描述
    在 IDAssign() 方法中,有上面这么一段。
    我们需要思考 sensor_id_2_track_ind 这个 map 有什么作用,从字面意思上看应该是要标记一个 track 来自于哪个 sensor。
    可事实上不是这样的,里面保存的是track_id 和 track 在 fusion_tracks 中的索引位置一一对应关系。
    假设 fusion_tracks 里面有 3 个 Track。
    在这里插入图片描述
    那么,可以推出:
    在这里插入图片描述
    当然,前面还有一个细节,那就是前视摄像头的对象要区别对待。
    在这里插入图片描述
    这一段代码干嘛呢?
    从 sensor_objs 中提取一个 obj 的 trackid,然后去 fusion_tracks中找相同的 trackid 的 track,如果找到了就给 sensor_used 和 fusion_used 赋值,并且将这种简单的 fusion_tracks 和 sensor_objs 的匹配关系的数组索引保存到 assignment。

    然后分别检测未在 IDAssign 阶段得到 trackid 匹配的 fusion_tracks 和 sensor_objects 保存到 unassigned_fusion_tracks 和 unassigned_sensor_objects 中。

    其实 IDAssign 的目的很简单,无非就是从 sensor objs 中去查找已经存在于 fusion tracks 中的 track。

    绕回ComputeAssociationDistanceMat

    在这里插入图片描述
    了解了 IDAssign 做了什么之后,再看 ComputeAssociationDistanceMat 就会比较容易了。
    在这里插入图片描述
    association_mat 是针对 trackid 未匹配上的 track 和 sensor objs 的二维矩阵,这样避免了已经匹配上的 track 进行重复计算。
    在这里默认距离是 s_match_distance_thresh_。
    要计算的是两者中心位置的欧式距离。
    如果 center_dist 小于 s_association_center_dist_threshold_,
    那么将调用 track_object_distance_.Compute() 做精细化计算。
    在这里插入图片描述
    代码注释中讲到,因为 2D 到 3D 转换误差太大,所以数据关联的时候,阈值设置的很宽松,在这里是 30m,为了防止 camera 检测到的目标和 Lidar 的目标匹配不上。

    这一行解释其实也透露出了在实际数据关联时常见的无奈。
    重头戏在这里。
    在这里插入图片描述
    这个函数的逻辑很复杂,值得独立一小节来介绍它。

    TrackObjectDistance.compute()

    之前说过 Apollo 6.0 感知融合的传感器有 Lidar、Radar、Camera。
    所以,在某个时刻一个 Track 其实有对应 LidarObject、RadarObject、CameraObject。
    而做数据关联的时候,需要计算 sensor obj 和 track 中的哪个 object 距离最近。

    在这里插入图片描述
    这个是一一比较的过程。
    我们先看 computeLidarLidar 的实现。
    在这里插入图片描述
    在这里插入图片描述
    如果两个 Lidar 对象的中心距离大于 10 米,那么它们的距离就被重置为 max,也就是一个最大数,表示不是一个对象。

    如果在 10 米范围内,那就调用 ComputePolygonDistance3d()方法。
    在这里插入图片描述
    求 track 和 sensor 之间的距离时,并不是直接求距离。
    需要计算 track 在 sensor obj 同样时间戳下的距离,有一个航迹推断的过程,上图红线圈了出来。
    其实也就是我在文章前面部分讲到的

    measure() 前要经过 predict()

    比如 track 是在 0 s 时的位置为 p0,sensor obj 有数据参与融合时是在 1.5s,那么这个时候 track 的位置为p1= p0 + track 的速度乘以 1.5s,才是当前 track 的位置,而与 sensor obj 进行距离计算是 p1 不是 p0。

    ComputeLidarRadar 和 ComputeLidarLidar 逻辑是一样的,ComputeLidarCamera 逻辑有点不同。

    ComputeLidarCamera

    这个方法初看不起眼,没想到跟踪代码时简直让我感受到陷入泥坑当中,代码量太多了。

    这个方法是计算 Lidar 目标和 Camera 目标的距离。

    在这里插入图片描述
    首先是判断 lidar 检测到的 object 和 camera 检测到的 object id 是不是一致。

    如果不一致的话,需要判断两者的距离是不是超过了一个动态的距离阈值。
    调用的是 LidarCameraCenterDistanceExceedDynamicThreshold 方法。
    判断的依据是两个obj的中心点的差值,是否大于 5 + 0.15 * local_distance,默认情况下 local_distance 为 60,如果存在点云数据则取最近的点云距离,总体阈值应该是 9 米的样子。

    如果超过了,直接返回 distance_thresh_ 在这里插入图片描述
    计算 Lidar 和 Camera object 的 distance 有两种情况。
    一种是当前有点云数据,另外一种是无点云数据。

    有点云数据的情况需要计算一个相似度,这个相似度取值范围是 0 ~ 1,1 代表完全一致,0 代表不一致。

    相似度怎么计算呢?

    1. 计算点云数据和camera数据的距离相似度和形状相似度;
    2. 融合距离相似度和形状相似度。

    ComputePtsBoxSimilarity。

    在这里插入图片描述
    求距离的相似度时,基本思路是算一个点云到 camera bbox 的平均距离,然后再以 box 的尺寸进行归一化操作。

    在这里插入图片描述
    在这里假设 mean_pixel_dist 是服从高斯分布,然后计算卡方分布。
    这里运用了统计学中的卡方检验工具。
    卡方检验是要假设 H0 和 H1 的。
    在这里 H0 假设应该是:Lidar 和 camera 是一致的。
    然后通过计算两者在 x,y 维度的卡方值,来验证假设。
    ChiSquaredCdf2TableFun 求的是累积的概率。
    在这里插入图片描述
    这个是需要查询卡方分布表的。
    在这里插入图片描述
    提前将卡方值和对应的 p 值存储起来,dist_int 代表的是卡方分布表中的卡方值,在上面这个 table 中通过 dist_int 能够查找到对应的 p 值。

    原始的卡方检验中,卡方值越大,p 值越小,如果 p 值小于显著性水平比如 0.05,那么原假设就可以算不成立。

    但我观察 Apllo 上方的分布表,dist_int 越小,p 值也越小。那么这个 p 代表什么呢?

    代表 H0 假设不成立的概率?

    而后面相似度的计算是

    double location_similarity =
          1 - ChiSquaredCdf2TableFun(square_norm_mean_pixel_dist);
    

    需要 1 减去这个概率,得到 H0 假设成立的概率,似乎也符合我的推断,但说实话,我这边还没有怎么整明白,只是根据代码去推断它的算法思想,在这一块比较了解的同学可以留言交流。

    上面计算的是距离相似度,还有个形状相似度,最终两个相似度要进行融合,产生一个新的相似度。

    在这里插入图片描述
    注释写的很明白,输入的概率值如果 sum 大于 1,那么最终的结果会大于 0.5,反之小于 0.5.
    有了相似度后,终于可以得到最终的 distance 了。
    在这里插入图片描述
    相似度越高,distance 越小。

    以上就是 Lidar 和 Camera 目标间的距离计算。

    ComputeRadarCamera

    计算 Radar 和 Camera 之间的距离和 LidarCamera 类似,但又有一些不同。

    Radar 返回来的是一个点,需要通过一个点生成 8 个顶点,其实就是一个长方体的 8 个顶点。

    在这里插入图片描述
    代码很容易编写。
    在这里插入图片描述
    需要注意到的细节是,因为 Radar 探测到的目标是有方向信息的,所以生成长方体的时候要考虑到 xy 平面的旋转。

    radar 的中心点需要投影到相机坐标系,形成 local_pt。

    最终通过求 X、Y、Loc、Velocity 的相似度,得到最终融合后的相似度 fused_similarity。

    通过 fused_similarity 求得最终的 distance,这个和之前的 LidarCamera 基本思路一致。
    在这里插入图片描述
    X 相似度主要通过一个 WelshVarLossFunc 确定的。
    在这里插入图片描述
    说实话,我不大懂它的用意,但看代码可以粗略估计到,如果 dist 非常小,小于阈值,那么说明两者相似度非常高,给一个权重值。
    如果 dist 很大,那么就需要缩放,将 p 最终的结果限制在(0,1] 区间。

    我比较关心的是 Radar 的速度和 Camera 的速度如何求相似度。
    在这里插入图片描述

    ComputeCameraCamera

    在这里插入图片描述
    这里直接返回最大的数了,意思肯定就是计算 Ojbect 和 track 的时候优先考虑 Liar、Radar 与 Camera 的距离关系。

    MinimizeAssignment

    计算了 Object 和 track 之间的距离后,用矩阵保存下来。
    然后就需要执行匈牙利匹配算法了。
    在这里插入图片描述
    optimizer 声明如下:
    在这里插入图片描述
    就把它当成一个黑盒子吧,下一篇文章讲解 Apollo 6.0 中的匈牙利算法实现。

    所以,MinimizeAssignment 进行了实际的目标匹配。

    postIdAssign

    数据关联之后,还需要进行一些后处理。
    主要是要提取一些有效的 track.
    在这里插入图片描述
    如果一个 track 没有匹配上,但它只有上一次的 camera 数据,没有 lidar 数据,那么还是认为它有效。

    ComputeDistance

    数据关联的最后,需要计算距离,距离指得是一个距离分数。

    总结

    数据关联还挺难的,代码很多,很多细节都还来不及展开。

    总之,要做好数据融合要注意下面几个点:

    1. 目标的生命周期管理
    2. 目标的 ID 匹配
    3. ID 匹配需要注意计算 Object 和 Measurement 的距离
    4. 距离不等同于欧式距离,它是为了计算相似度,相似度越大,距离越小。
    5. 匈牙利算法比较复杂,但好在有成熟的现成的代码可以实现。
    6. 数据关联之后,还需要进行一些后期处理。
    7. 数据关联做好之后,后面的卡尔曼滤波算法才能正确的运行起来。
    展开全文
  • V ehicle Perception and Localization: A Review深度学习传感器融合技术在自动驾驶汽车感知与定位中的应用研究进展摘要1、介绍2、传感器技术和传感器融合概述2.1 介绍了传统传感器融合方法2.2 介绍了深度学习传感器...
  • 如何入门学习自动驾驶感知技术?

    千次阅读 2019-12-04 19:29:16
    点击上方“3D视觉工坊”,选择“星标”干货第一时间送达本文授权转载自公众号:自动驾驶视觉感知工程师一、前言目前车企正在经历着前所未有的改革,包括前两天奥迪的裁员计划:将在2025年裁员9...
  • 首先,本文介绍了 KITTI 数据集中涉及传感器融合算法的点云数据以及检测结果的评判 标准,并通过梳理点云数据无序性、稀疏性以及信息量有限的特性,提出点云数据鸟瞰化方案,融合点云数据高度、密度、强度信息,将其...
  • 自动驾驶感知算法

    2021-05-06 12:56:15
    1.设计高效可靠的深度学习模型,在几十毫秒...3.如何保证感知模型和算法在极端的环境里的准确性和可靠性,如大雨,大雪,雾霾,风沙等 4.把模型优化到极致,让十几个到几十个模型在车上有限的计算资源上欢快的运行 ...
  • 前言 说来惭愧,我个人也算有近10年AI教育经验,中间获得过一些名号,比如北理工校外导师,微软MVP兼CSDN技术专家,本博客也有1700多万PV了,在AI圈内还是有很高知名度的。后2015年和团队一块创业创办AI职教平台「...
  • 自动驾驶感知概述

    千次阅读 2020-08-29 20:52:05
    为了确保自动驾驶车辆对周围环境的获取和识别,自动驾驶系统的感知模块需要通过各种传感器获取大量的环境信息,包括自车的状态、交通流信息、道路状况、交通标志等,这些传感器主要包括:激光雷达(Lidar)、摄像头...
  • 自动驾驶传感器融合系列】02自动驾驶中的多传感器同步理论文前白话1、传感器时空同步概念2、传感器时间同步- 时间硬同步- 时间软同步3、传感器时空同步 文前白话 1、传感器时空同步概念 2、传感器时间同步 - 时间...
  • 来源:自动驾驶综述|定位、感知、规划常见算法汇总 自驾车自动驾驶系统的体系结构一般分为感知系统和决策系统。感知系统一般分为许多子系统,负责自动驾驶汽车定位、静态障碍物测绘、移动障碍物检测与跟踪、道路...
  • 正是因为这个原因,导致在自动驾驶技术在环境感知环节依赖于多传感器的数据融合,这样才能让不同的传感器在不同的环境下发挥自身的最大作用。所以本篇文章将重点介绍下,如何实现自动驾驶传感器的融合。 传感器...
  • 说起自动驾驶感知系统,大家都会谈论到感知融合,这涉及到不同传感器数据在时间、空间的对齐和融合,最终的结果将提升自动驾驶系统的感知能力,因为我们都知道单一的传感器都是有缺陷的。本篇文章梳理 Apollo 6.0 中...
  • 自动驾驶多传感器融合

    万次阅读 2018-01-02 10:01:50
    简单地说,Pandora指的是一套以激光雷达、环视摄像头模组、多传感器融合感知识别算法为一体的自动驾驶开发者套件,它实际上是一种新型的“多传感器融合”技术。 通常,业界所说的“多传感器
  •  图 1.2.2a后融合算法典型结构 后融合算法: 每个传感器各自独立处理生成的目标数据。 每个传感器都有自己独立的感知,比如激光雷达有激光雷达的感知,摄像头有摄像头的感知,毫米波雷达也会做出自己的感知...
  • 2021年第二季度某大厂感知融合算法工程师面试 - C++部分和解答 1. 继承与内存相关问题 在C++的继承中,子类会继承父类中除构造函数和析构函数之外的所有成员(正所谓儿子无法继承父亲的生死) 。 1.1 虚表有什么用?...
  • 浅谈自动驾驶系统感知系统

    千次阅读 2020-09-30 15:27:52
    自动驾驶并不是一项单一的技术,而是汽车电子、智能控制以及互联网等技术发展融合的产物,其原理为自动驾驶系统通过感知系统,获取车辆自身信息与周围环境信息,经过处理器对采集到的数据信息进行分析计算和处理,...
  • 自动驾驶作为当下汽车行业最为前沿的技术,也是人工智能的主要应用场景之一。无论是美国、中国,还是欧盟、日本、韩国;无论是谷歌、百度,还是福特、通用、宝马等都加快在汽车自动驾驶领域的布局。随着...
  • 【小鹏】城市NGP感知融合算法简介 1. 背景介绍封面 报告人:Feng Han, 小鹏自动驾驶算法总监。美国的office。 1.1 小鹏自动驾驶发展路径 2015-2018, prototype: APA (Automatic Parking Assistance, 自动停车...
  • 目前,自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以及自动驾驶汽车测试与验证技术等。 在这套技术体系以及关键软硬件设备的支持下,自动驾驶汽车可通过车载摄像...
  • 因为最近再看apollo的传感器融合模块,就想到了之前看到智行者CEO张德兆的方案分享,作为清华系自动驾驶初创公司的创始人,有着和百度不一样的方案,故整理于此。   基于自动驾驶智能车控制决议计划系统开发,有4...
  • 讲座内容主要包括自动驾驶系统的总览,自动驾驶感知的介绍,以及感知的前沿动态和总结。 1.自动驾驶系统总览 关于自动驾驶系统,目前主流的L4级别自动驾驶系统通常包括预先提供的地图以及众多传感器,具体传感器系统...
  • 点击上方“AI算法修炼营”,选择加星标或“置顶”标题以下,全是干货3感知1、计算机视觉无人驾驶车有四个感知世界的核心任务:检测——指找出物体在环境中的位置;分类——指明确对象是什么;跟踪...
  • 本文将继续为大家解析自动驾驶所涉及到的核心技术,上篇《感知篇》内容可以查看历史原文。 二、决策篇 在一套相对成熟的自动驾驶技术体系中,如果将环境感知模块比作人的眼睛和耳朵,那么决策规划模块就相当于自动...
  • 业分类-物理装置-一种实时感知信息与自动驾驶地图的融合方法及系统.zip
  • 自动驾驶 Apollo 源码分析系列,感知篇(一)

    千次阅读 多人点赞 2020-12-17 22:52:53
    我是自动驾驶从业者,百度的 Apollo 是行业优秀的开源框架,近几年发展的比较快,基于对技术的热爱,我计划用 3 个月的样子来学习 Apollo 的源码,以提升自己的自动驾驶认知和技术。 在 Apollo 官网它有显示自己开放...
  • 实车内部的数据都需要经过一些列的处理过程,首先是传感器获得数据,送入感知模块,之后送入融合模块,最后送入归控模块,根据传感器的类型,主要是下面三类的传感器数据。 具体来说,获取的Lidar数据要和Camera...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,927
精华内容 3,970
关键字:

自动驾驶感知融合算法