作者 | 奚少华 编辑 | 九章智驾
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【3D目标检测】技术交流群
随着激光雷达的上车数量的不断攀升,如何用好激光雷达成为了重中之重,而用好激光雷达的关键点之一就在于处理好点云数据。
激光点云指的是由三维激光雷达设备扫描得到的空间点的数据集,每一个点云都包含了三维坐标(XYZ)和激光反射强度(Intensity),其中强度信息会与目标物表面材质与粗糙度、激光入射角度、激光波长以及激光雷达的能量密度有关。
为了更进一步解释清楚点云,笔者梳理了点云的相关参数和特点。
表:激光雷达点云的相关参数
表:点云的特点
从点云的采集原理来看,以ToF路线的激光雷达为例,激光点云是由车载激光扫描系统向周围发射激光信号,然后收集反射回来的激光信号得来的,并通过光速、激光从发射到返回的时间等信息来测得目标物的距离信息,再结合IMU、里程计、GNSS等信息计算出前方目标物的三维坐标信息和距离信息。
此外,在点云的采集和分析过程中,感知算法人员需要根据车载激光雷达的特点与工作原理,并结合激光雷达的角分辨率、视场角等相关参数,才能更好地利用点云。
那么,激光雷达点云在车端的处理环节中,具体有哪些处理过程和方法?又如何优化?
此后,为了验证这些问题,笔者先后访谈了图达通算法负责人许建博士和系统及应用负责人Leon、上汽高级经理殷玮、纵目科技感知算法工程师汤强、禾赛科技的专家等。在此,笔者感谢各路专家给予的支持,并整理出如下系列的文章,以供读者参阅。
聊完何谓点云及其特征后,下文将继续分析激光雷达点云在自动驾驶中的处理流程。在此之前,有两点需要说明。
其一,激光雷达点云被用于感知和定位时,点云会先完成预处理,然后按照不同用途进行不同的处理,并在点云的应用细节上也会不同。
汤强说:“激光雷达用于定位的话,算法模型会要求点云的数据量尽可能多,并且区别于感知,定位还需要道路数据。如车道线或地标,它们对于激光的反射率和普通路面的反射率是不同的,激光雷达通过这种方式来获取路面信息的数据。激光雷达用于感知的话,它会有一个预处理的过程,会确定一个ROI范围,随后用这一区域的点云数据来完成后续的检测。”
其二,每家企业在点云的具体应用过程中,还会根据各自技术方案与应用场景不同,会存在些许处理流程上的差异,但大部分处理流程皆相同。
为了更详细地阐述点云的处理流程,笔者结合专家访谈的内容与公开信息,梳理出激光雷达点云在自动驾驶应用中的普遍流程。
图:激光点云的处理流程
01
点云预处理层面
(1)点云数据的接收
激光雷达的原始点云数据都会被存放在一个数据包里(pcap),此时数据包里面的数据都是一连串的字节符号,无法直接使用。
以Velodyne的16线激光雷达为例,原始点云数据的接收主要是通过UDP(用户数据报协议)的形式向网络发送数据。具体来说,在激光雷达的web端进行设置或通过命令行进行设置后,技术人员会在接收端匹配激光雷达的IP地址与自身的UDP端口号,从而即可接收原始点云数据。
从数据的内容来看,该型号的激光雷达在垂直方向上(-15°到+15°)有16线的激光束,其每帧的数据长度固定为1248字节,这些字节包括前42字节的前数据包标识、12组数据包、4字节时间戳和最后两字节雷达型号参数。
图:Velodyne-16激光雷达每一帧的点云数据情况
(数据来源:《Velodyne VLP-16激光雷达数据格式解析》)
每个数据包中的数据都包含了激光光束的旋转角度、距离值、反射强度的信息。例如,“B6 07”代表了激光雷达的探测距离,“2A”代表了激光的反射强度,但这些信息都是以两字节表示,需要进一步解析这些数据。
图:Velodyne-16激光雷达数据包的一部分数据
(数据来源:《Velodyne VLP-16激光雷达数据格式解析》)
(2)点云数据(pcd)的解析
数据包(pcap)中的原始数据需要进一步转换为可被感知技术人员使用的pcd格式的数据集。
点云数据的pcd格式文件是激光点云的一种存储格式,pcd文件主要是由笛卡尔坐标(x,y,z)和强度值i组成的列表,即每个点云都会附带独有的三维坐标系和能量反射强度。
在这个坐标系中,x轴指向汽车的前部,y轴指向汽车的左侧。由于这个坐标系采用右手定则,坐标系z轴指向汽车上方。
图:点云pcd坐标(数据来源:《学习笔记:点云库PCL介绍》)
为了阐述点云数据的解析过程,笔者还是以上文Velodyne-16激光雷达的某帧点云数据包为例,并根据公开信息梳理如下。
第一步,计算激光线的旋转角度值。
例如,上图数据包前一部分的第一行的旋转角度为0xE0、0x63。
a) 反转两个字节变成十六进制63 E0
b) 把63 E0变成无符号的十进制为25568
c) 再把25568除以100得到255.68,那么得到的值255.68就是当前的旋转角度值
第二步,计算16线激光分别测得的距离。
例如,上图数据包前一部分的第一个激光线的距离,其值为“B6 07 2A”,其中“ B6 07”为距离“2A”为反射强度。
a) 反转两个距离字节“ B6 07”,将其变成“07 B6”
b) 把“07 B6”变成无符号的十进制为1974
c) 由于该型号激光雷达的分辨率为2.0mm,所以激光束测得的目标物距离为1974*2=3948mm
d) 将3948mm转化为米计量的单位,即3.948m
第三步,获得该帧的时间戳和激光雷达型号参数。
例如,上图数据包后一部分的最后六个字节的数据“6D 69 94 0F 37 22”。
a) 前四个字节的数据“6D 69 94 0F”为该帧的时间戳,然后反转顺序“0F 94 69 6D”
b) 将“0F 94 69 6D”转换为十进制的值261384557微秒(μs)
c) 把261384557除以1000000可获得当前的时间,即261.384557秒(s)
d) 后两个字节“37 22”表示雷达的型号和参数
第四步,把角度和距离信息转化为三维坐标XYZ值。
三维坐标XYZ值可通过旋转角度α(已在第一步中求得)、垂直角度ω(每束激光线对应的固定值)和距离值R(已在第二步中求得)来综合求出,具体的坐标换算如下图所示。
图:目标物点云的三维坐标计算
(数据来源:《Velodyne VLP-16激光雷达数据格式解析》)
运动畸变是指在一帧时间内,激光雷达或者其载体在发生运动后,产生的点云位置不一样的问题。
要理解运动畸变补偿,我们首先要知道自动驾驶车端的激光雷达点云为什么会产生运动畸变。
其实,激光雷达发射的一帧激光点云会由多个激光点组成,而这些激光点云是由扫描器件经过一次扫描后才形成的。在静止的场景中时,车辆处于静止状态且场景中的目标物也处于相对静止状态,那么采集到的一帧点云是没有畸变的,每条激光线束最终会形成一个闭合的圆形。
图:静止状态下的车辆点云不产生畸变
在运动场景下,如车辆高速行驶或者转弯时,一帧点云中的起始点云和终止点云只能在不同坐标系下获得测量结果,这便导致了三维环境信息产生了畸变。如下图所示,当车辆在运动过程中,车端上的激光雷达在扫描完一圈后,在最后一束激光照射到目标物时,跟第一束激光照射到目标时相比,目标物的空间位置已发生了相对位移——该物体在两个不同时刻的点云,显示在坐标系中的信息是不同的。
运动畸变补偿就是为了解决上述问题——把激光在采集过程中的运动轨迹计算出来,并在对应的激光点云上补偿这部分运动位移带来的变化,将同一帧的点云统一到同一时刻的坐标系下。
为了进一步解释运动畸变补偿,某主机厂感知算法工程师举例说:“比如,若车端配有IMU或者轮式里程计,感知算法人员就可以通过IMU和轮式里程计(或者直接用IMU)的方式,推算出0.1秒内车是怎么运动的,然后利用运动模型来做运动畸变补偿。”
常见的运动畸变补偿的方法:
纯估计方法(ICP/VICP)
迭代最近点(ICP)方法是采用ICP算法来匹配两个点云,通过不断地算法迭代后,将点云之间的误差缩至最小。
VICP方法是ICP算法的变种形式,模型假设车辆是在匀速运动,在进行匹配点云的同时估计车辆的自身速度。
迭代最近点(ICP)和VICP被统称为“纯估计方法”。
传感器辅助方法(IMU/ODOM)
惯性测量单元(IMU)方法是在IMU队列中查找相邻两帧IMU的数据,然后通过球面线性插值的方式计算扫描点所在时刻的激光雷达位姿,并应用齐次坐标系变化将两个点云坐标变换至同一坐标系下。
轮式里程计(ODOM)方法是通过求解当前帧激光雷达数据中每个点云对应的坐标系下的里程计位姿后,再根据求得的位姿把每个点云坐标都转化到同一坐标系下(需要转化两次),最后重新封装该帧点云数据。
惯性测量单元(IMU)和轮式里程计(ODOM)被统称为传感器辅助方法。
融合的方法
该方法是同时使用里程计和ICP的融合方案,会先利用里程计方法进行矫正,去除大部分的运动畸变,再通过ICP方法进行匹配,得到里程计的误差值,再把误差值均摊到每个点云上,并重新对点云位置进行修正。最后,再利用ICP方法进行迭代,直至误差收敛为止。
感知算法人员在完成点云的运动畸变补偿后,会发现一个问题:激光雷达发送的点云数据包中的点云数量其实非常少,完全无法用来进行后续感知和定位层面的处理工作。
此时,感知算法人员就需要对这些数据包进行点云组帧的处理。
关于点云组帧,某L4解决方案商的感知算法工程师说:“以单激光雷达为例,感知算法人员会把多个点云数据包叠加到同一帧上,让这一帧上的点云数据能包含上万个点云,以便后续感知和定位流程的处理。若车端有多个激光雷达,感知算法人员会分别解析这几个激光雷达的点云数据包,然后把解析后的点云数据集合在同一时刻上,让其变成一个大的数据包。例如,技术人员会把车端多个激光雷达在t时刻的点云都汇集在一起,作为一帧点云数据来处理。”
点云数据通过解析得到的点云坐标系属于激光雷达坐标系,而在实际的自动驾驶技术应用中,仍需要将激光雷达的坐标系转化为车辆的坐标系,这个建立联系的过程称之为点云的外参变化。
由于激光雷达与车体是刚性连接,所以在车辆运动过程中,两者之间的相对姿态和位移是固定不变的,只需要建立两者相对坐标系之间的位置关系,通过旋转或者平移的方式,就能将这两个三维坐标系统一到一个三维坐标系下(也称为全局坐标系或世界坐标系)。
在激光雷达获取点云数据的过程中,由于受到产品自身系统、待测物体表面及扫描环境等因素的影响,点云数据中会不可避免地夹杂着一些噪点(离群点),需要将其直接剔除或者以平滑的方式进行处理。这些噪点(离群点)会在后续的点云处理环节中(如点云分割、特征提取、点云配准等)让模型结果产生一定的误差。因此,在实际的点云处理流程中,感知人员会对点云进行滤波处理。
噪点是指对模型处理无用的点云数据。
离群点是指远离主观测区域的点云数据。
在与专家的访谈交流中,笔者了解到,在自动驾驶行业内,噪点一般包含了离群点。所以,后续的文章中,笔者将以噪点来统称。
下表为笔者梳理的自动驾驶行业内常见的滤波算法。
表:自动驾驶行业内常见的滤波算法
02
感知功能层面的处理
在整个点云预处理工作完成后,感知算法人员会将点云数据分别进行感知和定位层面的处理。
在感知层面的流程中,点云数据主要是用于3D目标检测,即自动驾驶系统需要识别检测出车辆感知区域内的障碍物,从而采取避障等措施。
在点云预处理工作完成后,感知层面的处理会有两个分支:一个是应用传统的3D目标检测方法,包括点云分割、目标物的聚类分析等;另一个是直接应用深度学习模型来完成3D目标检测。
下文将分别拆解基于两种不同方法下的点云3D目标检测流程。
(1)地面点云分割
在进行目标检测后,点云数据中会有很大一部分点云属于地面点数据,并呈现出一定的纹理状,这会对后续目标物的点云处理流程产生影响。
一方面,若不将这些地面点云数据进行分割及去除,这些无效的点云数据就会对位于地面上的物体点云数据造成干扰,会降低目标障碍物分割算法的准确性和鲁棒性;另一方面,由于点云数据量过大,这就会增加模型对计算量的需求。
所以,在进行后续工作前,感知算法人员需要先对地面点云进行过滤处理。
由于卷积神经网络模型一般会以滑窗的方式对每一块局部区域提取特征,然后做分类回归,所以深度学习的方法往往不需要预先分割出地面点云。在自动驾驶领域,考虑到硬件性能的占用、开发周期、模型成熟度等因素,感知算法人员一般会采用传统算法来进行地面点云分割。
笔者梳理了几种常用的地面点分割方法:
平面栅格法
主要思路:平面栅格法通常是根据设定好的尺寸建立平面网格(也可以做多层网格或者三维体素),然后将原始点云投影到各自的网格中,对每个网格中的点云集合提取特征,比如平均高度、最大高度、高度差、密度等等。
技术亮点:不考虑矢量特征,让后续规划控制能更易于实现。
存在的问题:当激光雷达线束比较少的时候,比如16线激光雷达在采集道路数据时,车辆前方20米以外的地面上,能够打到的激光点已经比较少了,而且打到障碍物上的激光线束一般也只有一条。如果在栅格中采用高度特征进行地面过滤,低矮的障碍物很容易会被当成地面点过滤掉。
点云法向量
主要思路:点云的法向量是指通过设置点云的角度阈值来分割地面的点云,一般地面点云的法向量是垂直方向,只需要通过模型来求解点云法向量与地面法向量的夹角,并与设定好的阈值来作对比和分类。该方法需要其邻域点做支持,而邻域的大小一般由邻域半径值或临近点个数来表示。过大的邻域会抹平三维结构细节使得法向量过于粗糙,而过小的邻域由于包含了太少的点受噪声干扰程度较强。
技术亮点:该方法可以较好地提取出道路两旁法向量突变的点云集合构成路沿,从而配合栅格化将道路区域、非道路区域、障碍物进行划分。
存在的问题:
1)根据法向量方法的假设,该方法一定要先对点云进行校正,如果不进行校正,那么很可能出现某一帧没有地面点被分割出来的极端情况(激光雷达倾斜角度过大)。
2)法向量方法对于平台类型障碍物(如路沿边上的长方形花坛)生成的点无法有效区分。
模型拟合法-平面拟合(RANSAC)
主要思路:RANSAC平面拟合是指通过随机选区的三个点云来建立平面方程,并将点云数据依次代入平面方程内,然后根据设置好的距离阈值来判定,该点是否为平面内的点。例如,阈值范围内的点为内点,而阈值外的点为外点。迭代次数最多的平面方程即为地面方程,而方程内的内点为地面点集,反之为障碍物的点云集。
技术亮点:当数据中有大量的异常数据时,该方法也能高精度地估计模型参数——能从大规模点云数据中,更容易地估计出地面点云集。
存在的问题:
1)考虑到排水的因素,交通道路通常是中间凸起、两边低洼,类似于拱桥形状。虽然曲率不大,但是通过随机采样的一致性算法计算地平面,可能会得到倾斜于一侧的平面作为地面方程。
2)在上下坡的时候,由于地面非绝对平面,该方法计算出的地面方程,会出现把前方地面点集作为障碍物点的情况。
3)由于RANSAC是在点云空间随机地取三个点构建平面,如果场景中存在大块墙面时,会出现将墙面作为地面方程的情况。
面元网格法
主要思路:基于面元的分割可以分为局部类型或者表面类型,常采用区域增长的方式进行地面分割。其核心是基于点法线之间角度的比较,将满足平滑约束的相邻点合并在一起,以一簇点集的形式输出,每簇点集被认为是属于相同平面。
技术亮点:该方法能够较好地应对地面存在曲率的情况,对于比较平缓的曲面或者平面能够达到较好的分割效果。
存在的问题:
1)实际道路中的噪声点太多,直接使用区域增长的方式分割地面,会出现较多零星的地面点被当成障碍物点云集合地情况。
2)区域增长算法的时耗较大,对于实时性要求较高的感知算法模块,需要进一步优化。比如将平面的区域增长降为到边缘,或者划分区域,在小范围内进行分割等等。
(2)目标物的点云分割
在去除掉地面点云后,接下来感知算法人员就需要将目标物点云进行有效地分割、分块,从而便于对目标物进行单独处理,即点云分割。目标障碍物的点云分割是根据空间、几何和纹理等特征对点云进行划分。
笔者梳理了几个常用的点云分割方法:
基于边缘的方法
主要思路:基于边缘的方法是指由物体的形状是尤其边缘来描述的,所以通过定位目标物边缘点云快速变化的点,来寻找靠近目标物边缘区域的点并进行分割。
技术亮点:该方法采用了可重构多环网络的算法优化机制,提高了算法运行的效率。
存在的问题:
1)该方法较适用简单场景(如低噪声、均匀密度),不适用于拥有大量三维点云的数据集。
2)面对存在不连续边缘的目标物点云数据,若不采用点云填充,就不能直接用于识别检测。
基于区域增长的方法
主要思路:基于区域增长的方法是指通过使用邻域信息来将具有相似属性的附近点归类,以获得到分割区域,并区分出不同区域之间的差异性。该方法主要分为两类:种子区域方法和非种子区域方法。其中,种子区域方法是通过选择多个种子点来开始做分割,以这些种子点为起始点,通过添加种子的邻域点的方式逐渐形成点云区域;非种子区域方法是将所有点都分为一个区域,然后将其划分为更小的区域。
技术亮点:相比于边缘的方法,该方法的分割准确度会更高。
存在的问题:方法依赖于选取的起始种子点或者区域细分位置,若选取的不恰当,就会导致分割过度或不足等问题。
基于属性的方法
主要思路:基于属性的方法是先计算目标物点云的属性,例如距离、密度、水平或垂直方向的点云分布等,并以此来定义测量点之间的领域,然后将每个方向上的法向量的斜率和点邻域的数据之差作为聚类的属性。
技术亮点:相比于前两个方法,基于属性的方法可以消除异常值和噪点的影响。
存在的问题:该方法依赖于点之间邻域的定义和点云数据的点密度,在处理大量输入点的多维属性时,会导致模型对计算量的需求过大。
(3)目标物聚类分析
在目标物点云分割完后,感知算法人员就需要将点云图中各个已分割的点云聚类成若干个整体,即把具有相似程度较高的点云组成一组,以便降低后续模型的计算量——这个过程就被称为点云聚类。
常见的点云聚类方法如下:
K-means
主要思路:K-means 聚类算法是指将整个点云数据集分为 k 个具有某种统一特征的点云簇。首先,从每个点云簇中随机选择k个点作为点云簇的中心点。然后,对每个点云簇分别计算每个点云簇与上述k个点之间的实际距离,依据距离值最小的原则将其聚类到该点云簇。之后再对聚类的点云簇计算形心坐标,并更新点云簇中心点。最后,模型会重复上述步骤,直到点云簇中心点不再变化。
技术亮点:准确定性高、可处理较大数据量、运算速度快。
存在的问题:该方法需要预先设定K值和初始聚类中心,实时性差。
DBSCAN
主要思路:DBSCAN通过引入密度的概念,即要求聚类空间中的一定区域内所包含对象的数据量不小于某一给定阈值。该方法能够在具有噪声的空间数据库中发现任意形状的簇,可将密度足够大的相邻区域连接,能够有效地处理异常数据,主要用于对空间数据的聚类。
技术亮点:
1)可以聚类任意形状点云
2)可以有效去除噪声点
存在的问题:
1)对内存资源消耗大
2)对处理器的要求高
3)需要预先设定聚类区域的半径和触发的阈值
欧式聚类
主要思路:欧式聚类(也称为欧几里得聚类)是指基于欧式距离聚类的方法,在激光雷达的点云数据中,同一个物体的点云簇中两点之间的距离小于一定的值,而不同物体之间的点云簇之间的距离大于一定的值。欧式聚类算法就是根据此种原理,将欧几里德距离小于设定距离阈值的点合并成一类,从而完成聚类过程。
技术亮点:该方法运算速度快,且具有良好通用性。
存在的问题:该方法需要预设固定距离的阈值,这会导致近处的目标物聚类效果会较好,而远处的聚类会出现欠分割或者截断的问题。
(4)匹配与跟踪
在做完前面的部分后,感知算法人员基本上已经可以从已处理完的数据上获知这些点云具体代表了什么目标物,而接下来需要做的就是对目标物的匹配和跟踪,即预测下一时刻,目标物出现在哪个区域。在障碍物检测中,匹配的精确度是后续多传感器融合的基础。
通常来说,匹配和跟踪的算法流程是先将目标预测的结果与测量的点云数据计算关联矩阵,然后利用匈牙利算法(其核心原理是寻找增广路径,从而达成最大匹配)进行匹配关系的确定,最后将点云数据分为匹配上的目标和未匹配上的目标两类,将其分别保存,并为跟踪做准备。
在自动驾驶领域中,随着点云的数据量越来越大,传统的目标检测算法已经无法满足实际需求。笔者在与各个专家的交谈后获知,当前点云3D目标检测主要采用了深度学习模型。
某主机厂感知算法工程师说:“在感知层面的目标检测中,点云在预处理完成后,就直接放入深度学习模型中,或者是先降采样后再放入深度学习模型。”
常用的基于深度学习的目标检测方法:
PointNet
主要思路:PointNet首先为点云中的每一个点计算特征,然后通过一个与点云顺序无关的操作将这些特征组合起来,得到属于全体点云的特征,这个特征可以直接用于任务识别。
技术亮点:
1)直接将点云数据输入网络,而不是将其规范化;
2)对旋转不变性和置换不变性的利用。
√旋转不变性:所有的点做相同的变换(旋转平移),不影响对形状的表达。
√置换不变性:任意交换各点的位置,不影响对形状的表达。
存在的问题:无法获得局部特征,这使得PointNet方法很难对复杂场景进行分析。
图:PointNet的网络结构
PointNet++
主要思路:PointNet++是基于PointNet方法得出,主要借鉴了CNN的多层感受野的思想。CNN通过分层不断地使用卷积核扫描图像上的像素并做内积,使得越到后面的特征图感受野越大,同时每个像素包含的信息也越多。PointNet++就是仿照了这样的结构,先通过在整个点云的局部采样并划一个范围,将里面的点作为局部的特征,用PointNet进行一次特征提取。
技术亮点:
1)没有量化带来的信息损失,也无需调节量化超参数。
2)忽略空白区域,避免了无效的计算。
存在的问题:
1)无法利用成熟的基于空间卷积的2D物体检测算法。
2)虽然避免了无效计算,但是GPU对于点云的处理效率远低于对网格数据的处理效率。
图:PointNet(左侧部分)与PointNet++(中间部分)的分割效果对比
图:PointNet++的网络结构
VoxelNet
主要思路:VoxelNet主要是讲三维点云转化为voxel结构,然后以鸟瞰图的方式来处理这个结构。此处的voxel结构就是利用相同尺寸的立方体来划分三维空间,其中每个立方体称为voxel(体素)。
VoxelNet有两个主要过程,第一个被称为VFE(Voxel Feature Extraction)是voxel的特征提取过程,第二个是类似YOLO的目标检测过程。
技术亮点:
1)可以直接在稀疏的点云数据上进行任务检测,并避免了人工特征工程带来的信息瓶颈。
2)可以更有效地利用GPU的并行运算优势。
存在的问题:VoxelNet对于数据表示(为适应模型运算而重建的一种新数据结构)比较低效,并且中间层的3D卷积对计算量的需求太大,导致其运行速度只有大约2FPS(Frame Per Second),远低于实时性的要求。
SECOND
主要思路:SECOND是一种基于VoxelNet方法优化后的点云检测方法,其网络的整体结构和实现大部分与原先的VoxelNet相近,同时在VoxelNet的基础上改进了中间层的3D卷积,采用稀疏卷积来完成,提高了训练的效率和网络推理的速度。同时,SECOND还提出了一个新的损失函数与点云数据增强策略。SECOND网络结构主要由三部分组成:VFE特征提取阶段,稀疏卷积层,RPN网络。
技术亮点:利用稀疏卷积提高了模型的推理速度。
存在的问题:虽然SECOND相比VoxelNet来说,其速度有所提升,但仍然保留了3D卷积。
PointPillar
主要思路:PointPillar把落到每个网格内的点直接叠放在一起,形象地称其为柱子(Pillar),然后利用与PointNet相似的方式来学习特征,最后再把学到的特征向量映射回网格坐标上,得到与图像类似的数据。
技术亮点:
1)通过学习特征而不是依赖固定的编码器,PointPillars可以利用点云表示的全部信息。
2)通过对柱而不是体素进行操作,不需要手动调整垂直方向的装箱。
3)网络中只使用2D卷积,不使用3D卷积,对计算量的需求小、运行高效。
4)无需手动调整即可使用不同的点云配置。
存在的问题:点特征的学习被限制在网格内,无法有效地提取相邻区域的信息。
PCT
主要思路:PCT主要是利用Transformer固有的顺序不变性,避免定义点云数据的顺序,并通过注意力机制进行特征学习。网络结构整体分为三部分:输入嵌入、注意力层和点云的分类与分割。
技术亮点:
1)PCT具有固有的置换不变性,更适合点云学习。
2)相比于主流的PointNet网络,PCT的分割边缘更加清晰。
图:PointNet(左侧部分)与PCT(中间部分)的分割效果对比
存在的问题:PCT是一种有效的全局特征提取网络,然而它忽略了点云深度学习中同样重要的局部邻域信息。
虽然当前深度学习已经在自动驾驶行业内被广泛应用,但是深度学习在点云数据处理中也会遇到一些挑战。
一方面,点云作为场景中点的位置具有稀疏和非结构化的性质,因此它们的密度和数量都随着场景中对象的变化而变化。另一方面,由于自动驾驶汽车行驶时需要非常快速地做出反应,因此必须实时执行物体检测,而这意味着检测网络必须在两次扫描之间的时间间隔内提供计算结果。
所以,深度学习虽然可用、好用,但不可尽用。
许建说:“深度学习等AI算法目前还做不到100%的精准识别和检测,容易导致目标漏检。AI算法是3D点云感知的非常重要的手段,但是不能只靠AI。通过综合应用AI算法和传统算法,可以解决数据样本空间的不完备性问题,从而避免目标漏检情况。”
03
定位功能层面的处理
自动驾驶车辆在路上行驶时,其实车辆是不知道自己在哪的,所以用点云数据做定位的第一步就是先要让自动驾驶车辆知道“我在哪里”。
此时,感知算法人员就需要先提取周边场景的目标物特征,并通过这些特征和所获取到的相对距离信息来建立一个小地图,知道车辆的相对初始位置。
点云特征提取往往是实时的,这会导致点云的数据量会非常大,而现有量产车的硬件性能有限。所以,为了减少点云数据的计算量,点云数据在被提取特征时,一般会被优先提取一些较为明显的特征,比如物体的轮廓信息。
某主机厂感知算法工程师说:“激光雷达不会像视觉一样,视觉会有深度的语义信息,而激光雷达为了减少计算量,只会提取目标物的特征,主要是提取目标物的“线面角”特征。比如,电线杆就是线的特征,路面就是面的特征,建筑物的角点就是角的特征。”
在提取完周围目标物的特征后,感知算法人员就需要根据这些特征来进行点云地图匹配,来获取各个点云之间的相对位姿。点云地图匹配一般可分为帧间匹配和高精地图匹配。
帧间匹配,也叫子图匹配,指将前后帧上有相同特征的点云做匹配,最后得到一张局部小地图。
高精地图匹配,指将优化后的点云与高精地图做匹配。
在自动驾驶行业内,自动驾驶方案商或者主机厂都会应用这两种不同方案,但常用的匹配方案还是以帧间匹配为主。
某主机厂感知算法工程师说:“只有L4的无人驾驶项目或许是基于高精地图定位方案的地图匹配,而主机厂主要做的是帧间匹配,因为量产车的定位方案不可能都基于高精地图。另外,高精地图匹配的计算量很大,在应用时必须先做降采样的工作。”
上文也提到,点云数据在做完匹配后,可以获取各点云间的相对位姿,而相对位姿的准确性会影响构建地图的准确性,所以需要对点云的相对位姿做一定的优化。
通常来说,相对位姿的不准确主要是由于一些不可控因素造成的,如点云被物体遮挡或者激光雷达视场角的限制。点云的位姿优化通过一定的点云坐标系的刚体变化(旋转或平移)来得到最优相对位姿。
在与激光雷达公司和下游主机厂或者解决方案商的专家交流的过程中,笔者发现,当前激光点云的处理过程中,感知算法人员会遇到很多问题。比如,点云噪点的问题、点云的过多或者过少的问题、FOV的设计问题、点云重叠区域的问题、标定参数偏移的问题等。
本文将从技术层面和工程化层面两个维度,分别来阐述点云处理环节中遇到的问题以及相应的对策。
01
技术层面的问题及对策
点云噪点是指激光雷达采集到的一些无效点,它容易造成目标检测算法模型的误检。激光点云噪点的主要来源有两方面:一方面是目标物表面造成的噪点。比如,目标物表面材质的性质(高反射率的表面材质引起的点云反射能量过强,而使得目标物比实际大小更大)、粗糙程度(凹凸不平的表面使得点云的发射角度发生变化)等;另一方面是外部扫描环境造成的噪点,如雨雪雾尘等颗粒物遮挡了点云而无法反射回点云等。
点云噪点的处理主要集中在预处理阶段的滤波处理环节。滤波处理是从算法应用的角度来处理噪点,但是有些噪点并不能简单地通过滤波算法来处理。比如,大雨或者大雪等环境不能直接用滤波算法处理。再比如,对于某些电信号对激光雷达的影响,滤波算法也不能直接处理。
接下来,笔者梳理了几个较为典型的噪点因素,并依次详述它们各自的问题和对策。
(1)物体表面引起的噪点
激光点云扫描到一些特殊的目标物表面时,由于目标物反射回来的点云能量过高(高反射率)而造成了一些噪点。
对于高反射率的目标物表面,激光点云通常会出现高反“鬼影”和高反“膨胀”的现象。其中,高反“鬼影”指的是由于激光雷达对于高反射率目标物反射回来的高强度回波非常敏感,这促使目标物除了在原有真实坐标系下存在一个真实点云图像外,在临近的其它位置也会出现一个大小和形状类似的点云图像。例如,交通指示牌、车牌照、尾灯等。高反“膨胀”指的是激光扫描到高反射率的目标物表面后,点云图像会出现向四周扩散的现象,使得原有的目标物点云图像显得更大。
图:点云图像中的“鬼影”现象
(数据来源:速腾聚创)
图:点云图像中路牌的“高反”现象
(数据来源:速腾聚创)
那么,无论是高反“鬼影”还是高反“膨胀”都会造成误检,两者都可能会迫使车辆采取本来毫无必要的避障措施。
物体表面引起的点云噪点主要可以通过硬件层面和算法层面来解决。
在硬件层面,技术人员通过加强激光雷达产品的出厂测试环节,从而提升激光雷达对高反射率物体和低反射率物体的分辨能力。
在算法层面,主要靠滤波算法来处理。纵目科技感知算法工程师汤强说:“物体表面引起的噪点通过设置阈值条件来把异常点去掉。”
关于如何设置阈值的条件,某自动驾驶公司的感知算法工程师说:“举例来说,算法模型会先定位到一片点云密集区域内,计算该区域内每个点到其中心点的平均距离,然后将这个平均距离设为初始阈值条件。若目标点云在这个初始阈值范围外,该点云就是噪点。”
(2)恶劣天气引起的噪点
恶劣天气是自动驾驶系统较难应付的环境因素,尤其是雨雪雾尘,这些天气环境会让激光点云产生非常多的噪点。下文将依次分析这四种环境对激光雷达点云产生的影响。
首先是雨天环境。雨滴主要是晶体状,激光打上去会损失一定的能量,因为水滴会让部分激光束产生一定的镜面折射。另外,随着雨量增大后,降雨可能会由于地面温差而形成团状雾,这会让自动驾驶系统误以为前方是一个“障碍物”。
其次是雪天环境。雪是固体状,并且容易形成体积更大的固体物。除了会堆积成团状的障碍物外,大雪天还容易让地面形成大面积的积雪,这将不利于在目标检测环节中做地面点云分割处理。
再者是大雾环境。一般来说,在雾天不严重的情况下,如轻雾(能见度为1km-10km),雾天并不会影响激光雷达点云的处理效果,但是当雾天能见度越来越低后,激光点云的透过率会下降,车辆前方的点云图像会形成类似团状物体的假象,这就会造成误检。
最后是粉尘环境。相比于前面三者,粉尘或许会更难应付。一方面,粉尘会形成团状物体,易导致激光雷达的误识别;另一方面,粉尘不同于雨雪雾,它附着于激光雷达表面后,不会变干后自然消失,需要用清洁装置立即进行清理。
那么,该如何去解决这些问题?
上汽高级经理殷玮说:“如果激光雷达只是用于识别障碍物的话,点云噪点的影响不会特别大;如果这些点云数据用于勾勒free space(即可行驶区域,其指的是自动驾驶车辆可以进行规划控制的区域)的话,就需要考虑使用传统的滤波算法进行处理,但滤波算法处理这些噪点的程度不一定能把控好。”
虽然传统的滤波算法可以用于点云去噪,但是该方法的计算量非常大,其算法最终的效果还依赖于技术人员的技术水平。所以,在自动驾驶行业内,技术人员也会采用神经网络模型来处理点云噪点。
某主机厂感知算法工程师说:“感知算法人员可直接利用深度学习模型去识别车辆前方的障碍物,将雨水等噪点直接忽略掉。”
总的来说,技术人员与其采用传统方法来识别这些噪点,不如忽略这些噪点,直接采用神经网络模型来识别前方的障碍物,如车辆、行人等,毕竟这些障碍物才是需要重点去检测的目标物,而雨雪雾尘(不严重的情况下)并不会影响正常的行车安全。
(3)电磁信号引起的噪点
如今,随着5G网络日益发达,各种手机、笔记本电脑等电子产品到处都是,而激光雷达作为一种精密器械,将会被这些电子产品产生的电磁波干扰,从而产生噪点。另外,当自动驾驶车辆经过一些特定区域时,如机场、发电引起,这些区域也会产生电磁波的干扰。
关于电磁信号引起噪点的原因,图达通系统及应用负责人Leon说:“主要是两方面的原因:其一,电磁信号会影响激光雷达的整个电路,比如电容等等;其二,电磁信号将影响激光雷达的接收端,由于接收器的灵敏度非常高,意味着它更容易受到电磁信号的干扰。”
为了解释电磁信号影响激光雷达内部电路和接收器的原因,某激光雷达公司的专家说:“较强的电磁信号在透射进入激光雷达内部后,对整个电路或者接收端的器件形成电压变化(超过了激光雷达部内的额定电压),影响了激光雷达内部的正常工作。”
结合上述原因来看,电磁信号引起的噪点,本质上是因为激光雷达的硬件端受到了干扰。因此,这种噪点无法通过滤波算法来处理。若要正确解决电磁信号引起的噪点,关键是靠激光雷达自身硬件质量是否过硬。
Leon说:“在前期研发阶段,激光雷达厂商会做一些EMC测试(电磁兼容测试),需要在不同频段上做屏蔽电路的测试。”
点云过多的话,算法模型处理数据的难度和计算量会增加。比如,在点云分割过程中,由于点云数量过多,目标物之间的边缘可能无法快速进行特征计算和分割,从而导致计算量增加。
某主机厂感知算法工程师说:“目前车端的算力并不是那么高,点云过多的话,最直接的解决措施就是采取降采样——去除多余的点,但并不是随意删除,必须要最大程度地保留有用的信息(利用深度学习模型,提取目标物的主要特征)。举例来说,降采样方法会将90%的点云数据去除,但仍然保留了50%的有效信息。”
不过,目前行业内的关注点更多的还是点云信息不足的问题。那么,为什么点云过少会更受到关注?
目前,在自动驾驶行业内,点云在车端主要被用于感知,所以点云信息需要尽可能的多。
某主机厂的感知算法工程师说:“点云数据被用于目标检测时,感知算法人员不知道被测物体具体是什么,所以他们希望信息量尽可能地多。”
总的来说,点云过少的话,目标障碍物表面扫描到的点云数量过少,这可能会导致漏检。
纵目科技感知算法工程师汤强说:“点云过少的问题,主要有三种解决方案:第一,多帧叠加。举例来说,在处理点云图像时,感知算法人员会将当前帧点云前后各后5帧的pcd数据都投影到当前帧时刻上,这样就形成了共11帧的pcd数据,让点云显得更密。
“第二,深度补全——常见的传统方法主要是利用腐蚀和膨胀的形态学方法。比如,激光雷达扫描到一根铁丝上时,可能就只显示少量的点云,为了提升点云真值数据的准确性,就需要使用该方法将这根铁丝变得更粗。行业内也有很多通过深度学习来做深度补全的方案。
“第三,增加线束。一方面,使用性能更好的激光雷达产品,如32线的产品改用128线的产品;另一方面,技术人员通过堆激光雷达数量的方式,来增加感知区域的点云数量。”
当前,由于车辆外观造型和成本等因素,量产车主要是以半固态的激光雷达为主。该章节部分将重点介绍半固态激光雷达引起的点云问题和相关对策。
按照扫描方式的不同,ToF激光雷达可分为机械式、半固态、纯固态三类。在实际的应用过程中,不同扫描技术路线的激光雷达会出现不同的点云问题。
一般来说,半固态激光雷达由于其扫描方式导致了点云中间密、两边稀疏的特点。除此以外,半固态激光雷达在面对低反射率物体时,存在识别能力较弱的问题。
某L4自动驾驶解决方案商技术专家说:“以对铁丝网的检测为例,半固态的激光雷达无论是转镜式、棱镜式,还是MEMS,它们一般都有5-6个激光发射器,通过扫瞄镜去分光,这种扫描方式造成了分光后激光点云的能量减少,致使扫描到的铁丝网会出现大面积的漏空或者识别不出的情况。”
解决上述问题的主要对策就是增加感兴趣区域的点云密度。比如,某些半固态激光雷达产品采取了角分辨率可调的方法,将原本激光雷达看得远的优势转化为角分辨率上的优势。根据不同的场景使用需求,自动驾驶的感知系统可直接根据场景需求来设置激光雷达在感兴趣区域的点云密度。
02
工程化层面的问题及对策
在硬件性能固定的前提下,点云处理效果可能会与激光雷达安装的位置和对应的角度有关。不正确的安装可能会使得点云无法覆盖重点感知区域。
某激光雷达厂商的技术专家举例列出了三种可能会影响点云效果的不正确的激光雷达安装方式:“第一种是非正向的安装。比如,有些应用方可能会把激光雷达倒过来安装,这会影响激光雷达原有的内部结构。假设激光雷达里面有一根弹簧,在原本正向安装和使用时,弹簧是被压缩的,但倒过来安装和使用时,弹簧就会被拉升,这会影响激光雷达内部器件。
“第二种是激光雷达在垂直角度上安装得过偏。一般情况下,激光雷达在垂直角度上都是平向安装,而在水平角度上可根据具体需求来定,但有些时候车端的激光雷达在垂直角度上安装的过偏。比如,激光雷达在垂直角度上安装得过于朝上或者朝下,点云无法完全覆盖重点感知区域。
“第三种是安装得过低。激光雷达被安装在较低的位置,激光束与地面的夹角会减小,导致了点云反射回来的能量就比较弱,不利于实际的探测。所以,激光雷达一般会被安装在较高的位置。”
当然了,激光雷达具体怎么安装仍取决于具体需要实现什么功能。
某主机厂的感知算法工程师说:“抛开功能去做传感器的配置,这并不是正儿八经地做产品。如果激光雷达用于Robotaxi,激光雷达需要安装在车顶,这样可以实现360°的水平FOV。如果激光雷达用于检测盲区,激光雷达需要装在车的前后左右侧,这样可以实现行驶时的换道。如果激光雷达用于实现pilot功能(高速领航辅助功能),激光雷达一般就是装在车顶正前方。如果激光雷达用于交叉口的场景,激光雷达就需要在左右两侧的前端各装一个。”
哪怕安装方式没问题,如果FOV设计有短板,那激光雷达仍然会存在感知盲区。那么,激光雷达的水平或垂直FOV具体设计多少才合适?在水平方向上,多台激光雷达的FOV如何做拼接,才能将点云更有效地覆盖盲区?
表:部分激光雷达产品的FOV情况
数据来源:各激光雷达厂商官网首先,在水平FOV方面,大部分的应用方肯定都希望激光雷达的水平FOV能够无死角的覆盖,但考虑到成本因素,具体水平FOV设计多少度需要根据激光雷达所实现的功能而定。
某主机厂感知算法工程师说:“对于城区或者高速场景,一个水平FOV为120度的激光雷达已经够用了。对于泊车场景,激光雷达的水平FOV就需要达到360度。”
在城区或者高速场景,当前的量产车主要可实现的功能是辅助驾驶,激光雷达主要功能在于对前方目标物的识别检测,所以单个水平FOV为120°的激光雷达即可实现。某些车企为了增加激光雷达前方的点云覆盖面积,也会采用了两颗主激光雷达方案,从而达到180°左右的FOV。还有些车企采用了1颗前向主雷达+2颗侧向补盲激光雷达的方案(布置在车辆左右两侧),使得整个水平FOV达到320°以上。
在泊车场景,为了实现高级别自动驾驶的AVP功能,激光雷达部署需要采用水平FOV为360度的方案(1颗前向主激光雷达+2颗侧向补盲激光雷达+1颗后向补盲激光雷达),可以让点云全场景的覆盖。
图:不同激光雷达配置下的水平FOV
(来源:速腾聚创)
其次,在垂直FOV方面,主激光雷达为了获得更多的前方信息,需要尽可能地减少垂直方向的FOV,从而增加车前方的点云数量,返回能量也能更多,所以垂直方向FOV一般仅为25°;而补盲激光雷达为了看清车身周围的环境,需要其垂直FOV水平能更大,可达到近90°。
某主机厂感知算法工程师说:“面对小孩和宠物等体积小并且会“乱跑”的目标物,,就需要补盲激光雷达的垂直FOV更大一些,这样可以更大程度地扫描到近距离的目标物,让激光雷达扫在目标物上面的点云能够更加完整。”
图:补盲激光雷达的垂直FOV
(数据来源:速腾聚创)
在设计多激光雷达部署方案时,多个激光雷达之间的水平FOV往往需要有重叠区域,而不是完美地无缝拼接在一起。设计点云重叠区域的理由主要是:
第一,激光雷达产品标注的官方FOV水平是一个较为理想的状态,而在产品实际应用时,其FOV水平并不一定能达到该理想水平。
图达通算法负责人许建博士说:“虽然激光雷达产品标称了水平视场角,但实际上水平视场角边缘的点云质量容易退化,点云拼接时最好能够有一定的重叠区域。”
第二,多个激光雷达的重叠区域主要覆盖在车辆盲区位置。比如1个主雷达+2个补盲雷达的方案,相互之间的重叠区域主要是分布在车前侧两端的位置,这个区域增加点云的数据信息可以提高模型对车辆盲区的感知能力。再比如,车前方两个主雷达的方案可以提高车前端感知区域的信息冗余安全。
某主机厂感知算法工程师说:“如果两个激光雷达只是简单地拼接在一起,当一个目标物处于它们各自的边缘区域时,感知系统可能会很难检测到该盲区位置的目标物。如果两个激光雷达有一定的重叠区域时,系统至少有很大一部分点云能覆盖到该目标物。”
所以,多个激光雷达的感知区域重叠是非常有必要的,重叠区域可以让点云更密、信息冗余安全更高。那么,在水平FOV方向上,点云重叠区域到底需要交叉多少才合适呢?
Leon说:“以应用方的反馈来看,他们会要求多个激光雷达之间有一定的重叠部分,可以保证自动驾驶系统在识别检测时不漏掉任何目标物。同时,他们也不希望重叠区域太多,这会造成资源的浪费。”
也就是说,点云重叠区域较小的话,由于某些半固态激光雷达扫描区域的边缘部分点云较稀疏,这使得点云配准难度会加大。点云重叠区域较大的话,会造成传感器硬件性能的浪费,使得最后多个激光雷达拼接成的整体水平FOV过小。
在与各专家的交流后,笔者整理出了多个激光雷达方案下点云重叠区域的大小范围:
两个前向主激光雷达方案:重叠部分分布在车头盖前面,重叠区域的度数约20-30度;
一个主雷达+两个侧向补盲雷达方案:重叠部分分布在车头前向两侧,重叠区域的度数大概不小于5度。
当然,上述重叠区域的大小是一个理想范围,而真正在车端应用时仍需要做严格的测试。
许建说:“多个激光雷达在部署时,关于重叠区域的度数,技术人员需要做一套严格的工程应用测试,而不会直接定一个确定的数值。首先,技术人员会按照给定的产品设计指标参数进行3D模拟测试。然后,他们会在模拟测试的基础上,再进行实地测试。最后才会给出相应的重叠区域设置。”
在确定完重叠区域的度数后,接下来需要解决的是如何去使用重叠区域的目标物点云数据。
重叠区域的点云数据并不意味地拿来即用,其存在着一定的困难。许建说:“一方面,重叠区域的点云可能来自两种不同技术路线的激光雷达,这两种激光雷达不仅功率、视场角、角分辨率等参数指标都不同,而且,实际用法也不同。”
通常情况下,由于各家应用方的技术方案不同,所以针对点云重叠区域的处理方案也是不同的。笔者整理了三种可能的应对方案。
第一种方案是直接采用主激光雷达来检测识别。
Leon说:“对于重叠区域,感知算法人员可以是通过多个激光雷达相互的信号补充,来增加识别的可信度,也可以只看主雷达的点云数据,毕竟相比侧端的补盲激光雷达,主激光雷达在探测的精细度、距离等各个方面的性能更高。”
第二种方案是先采用主激光雷达的点云数据,再采用补盲激光雷达的点云数据。
某主机厂感知算法工程师说:“在很多时候,两个不同性能指标的激光雷达点云重叠在一起,不可能将两块点云合成一个点云来使用,很多时候是主激光雷达去测一下,然后补盲激光雷达再去测一下。”
第三种方案是多激光雷达的点云融合。
禾赛某技术专家说:“为了降低算力消耗与提升算法效果,多激光雷达融合在主流方案里基本都是点云前融合然后进行后续处理。前融合的过程会将所有的点云都转换到车身坐标系进行同一处理,最大程度地解决不同安装位置带来的点云数据差异。”
为了更好地融合激光雷达和相机的数据,自动驾驶车辆需要在出厂时就做好两种传感器的标定。感知算法人员通过求取其外参后,将两种传感器的三维信息转换到统一坐标系下,进行融合定位建图或者感知检测。
已标定好的传感器参数并不是一成不变的。事实上,在车辆的行驶过程中,由于车辆不断地机械振动,使得激光雷达与相机之间的标定参数会发生偏移,这会影响点云的识别检测以及激光雷达与相机的融合处理。
某主机厂感知算法工程师说:“激光雷达和相机之间的标定较难,虽然出厂时,车端传感器的联合标定是已经做好的,但随着时间的推移,它们之间的标定关系会慢慢发生改变,这个时候也不可能是让车辆回厂后进行重新标定。
“对于量产车来说,车已经卖出去了,不可能开回车厂再重新标定。自动驾驶车辆只能做在线标定,系统会根据已收集的数据,在车开至某个特定的场景后(比如线和面的特征较多的场景),让自动驾驶系统重新标定。如果在高速公路上的话,自动驾驶车辆很难找到一个特定场景去重新标定,只能将车辆开至城区的特定位置后再标定。
“对于细分场景的低速车来说,由于大部分低速场景都是半封闭的场景,通常技术人员会在场景内选择一个容易标定的位置,把车开过去,再重新进行标定。最后,如果实在没法解决问题,自动驾驶企业才会派人去现场。”
三. 激光雷达点云配准
由于受到视场角的限制,激光雷达在实时采集点云数据时,只能获得有限视野范围内的点云图像。为了获得三维场景的点云数据,感知算法人员需要在已知的初始姿态信息下,将采集到的前后两帧不同点云转换到统一坐标系下,将点云重合的部分拼接在一起——这就是点云配准技术。
下文将逐一分析点云配准具体是什么、点云配准的技术方法、点云配准面临的问题及对策。
01
点云配准在自动驾驶方面的应用
点云配准早先主要应用于建筑行业中的建筑信息模型(BIM)、采矿行业中的矿区开采等,而在自动驾驶领域内的作用主要有三类,分别为三维地图构建、高精地图定位、姿态估计。
第一,三维地图构建。在建高精地图时,自动驾驶系统通过激光雷达采集回来的相邻帧点云进行点云配准后,将不同位置采集回来的点云统一到一个坐标系下,然后构建出一个三维的高精度地图。
第二,高精地图定位。在自动驾驶车辆行驶时,车辆需要做到厘米级的精准定位。例如,自动驾驶车辆需要估计其在地图上的精确位置及车与道路路沿的距离。自动驾驶系统通过点云配准技术,将实时采集到的点云数据与高精地图的数据做匹配,为自动驾驶车辆给出精确的定位。
第三,姿态估计。自动驾驶系统通过点云配准技术来估计车辆的相对姿态信息,然后并有利于对车辆做决策规划。
02
点云配准的工作原理与技术方法
点云配准的工作原理是激光雷达由于受到环境等各种因素的限制,在点云采集过程中单次采集到的点云只能覆盖目标物表面的一部分,为了得到完整的目标物点云信息,就需要对目标物进行多次扫描,并将得到的三维点云数据进行坐标系的刚体变换,把目标物上的局部点云数据转换到同一坐标系下。
通俗点来说,点云配准的关键是如何寻找到初始点云和目标点云之间的对应关系,然后通过这个对应关系将原始点云和目标点云进行匹配,并计算出它们的特征相似度,最后统一到一个坐标系下。
图:点云的三维建图效果
(数据来源:互联网)
点云配准通常可分为两个步骤,分别是粗配准和精配准。
粗配准,即点云的初始配准,指的是通过一个旋转平移矩阵的初值,将两个位置不同的点云尽可能地对齐。粗配准的主流方法包括RANSAC、4PCS等。
经过粗配准之后,两片点云的重叠部分已经可以大致对齐,但精度还远远达不到自动驾驶车辆的定位要求,需要进一步做精配准。
精配准指的是在初始配准的基础上,进一步计算两个点云近似的旋转平移矩阵。精配准的主流方法包括ICP、NDT、深度学习等。
上文提到了一些点云配准的具体方法,由于各家自动驾驶公司的技术水平与技术方案都不同,所以他们会采用不同的点云配准方法——有些公司会在粗配准或者精配准过程中只采取一种方法,也有些公司会采取多种组合的方法。比如,在精准配过程中,某些公司会采用ICP+深度学习的方式。该章节将详细论述上文的几种点云配准方法。
(1)RANSAC(RAndom SAmple Consensus,随机采样一致)
方法原理:该算法从给定的样本集中随机选取一些样本并估计一个数学模型,将样本中的其余样本带入该数学模型中验证,如果有足够多的样本误差在给定范围内,则该数学模型最优,否则继续循环该步骤。
RANSAC算法被引入三维点云配准领域,其本质就是不断的对源点云进行随机样本采样并求出对应的变换模型,接着对每一次随机变换模型进行测试,并不断循环该过程直到选出最优的变换模型作为最终结果。
具体步骤:
1)对点云进行降采样和滤波处理,减少点云的计算量。
2)基于降采样和滤波处理后的点云数据,进行特征提取。
3)使用RANSAC算法进行迭代采样,获取较为理想的变换矩阵。
4)使用所获得的变换矩阵进行点云变换操作。
优点:适用于较大点云数据量的情况,可以在不考虑点云间距离大小的情况下,都能实现点云的粗配准。
缺点:存在配准精度的不稳定的问题。
(2)4PCS(4-Points Congruent Sets,全等四点集)
方法原理:该算法利用刚体变换中的几何不变性(如向量/线段比例、点间欧几里得距离),根据刚性变换后交点所占线段比例不变以及点之间的欧几里得距离不变的特性,在目标点云中尽可能寻找4个近似共面点(近似全等四点集)与之对应,从而利用最小二乘法计算得到变换矩阵,基于RANSAC算法框架迭代选取多组基,根据最大公共点集(LCP)的评价准则进行比较得到最优变换。
具体步骤:
1)在目标点云集合中寻找满足长基线要求的共面四点基(基线的确定与输入参数中overlap有很大关系,overlap越大,基线选择越长,长基线能够保证匹配的鲁棒性,且匹配数量较少)。
2)提取共面四点基的拓扑信息,计算四点基间的两个比例因子。
3)计算四种可能存在的交点位置,进而计算所有中长基线点对的交点坐标,比较交点坐标并确定匹配集合,寻找到对应的一致全等四点。
4)寻找点云中所有的共面四点集合,重复上述步骤可得到全等四点集合,并寻找最优全等四点对。
优点:适用于重叠区域较小或者重叠区域发生较大变化场景点云配准,无需对输入数据进行预滤波和去噪。
缺点:不适合工程化应用。
(1)ICP(Iterative Closest Point,最近点迭代法)
方法原理:选取两片点云中距离最近的点作为对应点,通过所有对应点对求解旋转和平移变换矩阵,并通过不断迭代的方式使两片点云之间的配准误差越来越小,直至满足我们提前设定的阈值要求或迭代次数。
具体步骤:
1)计算源点云中的每一个点在目标点集中的对应近点。
2)求得使上述对应点对平均距离最小的刚体变换,并求得平移参数和旋转参数。
3)对求得的平移和旋转矩阵进行空间变换,得到新的变换点集。
4)如果新的变换点集与参考点集满足两点集的平均距离小于某一给定阈值,或者迭代次数达到设定的最大值,则停止迭代计算,否则新的变换点集作为新的源点云继续迭代,直到达到目标函数的要求。
优点:
1)不需要对点云集进行分割和特征提取。
2)在初值较好的情况下,可以得到很好的算法收敛性。
缺点:
1)在搜索对应点的过程中,计算量较大,计算速度较慢。
2)对配准点云的初始位置有一定要求,不合理的初始位置会导致算法陷入局部最优。
3)ICP算法在寻找对应点时,模型会将任何两个点云之间的欧氏距离最近的点作为对应点,这种假设会产生一定数量的错误对应点。
(2)NDT(Normal Distribution Transform,正态分布点云算法)
方法原理:先对待配准点云进行栅格化处理,将其划分为指定大小的网格,通过正态分布的方式,构建每个网格的概率分布函数,之后优化求解出最优变换参数,使得源点云概率密度分布达到最大,以实现两个点云之间的最佳匹配。
具体步骤:
1)将空间划分成各个格子cell(也叫体素voxel grid)。
2)将参考点云投到各个网格中。
3)基于网格中的点,计算格子的正态分布概率密度函数(probability density function, PDF)的参数。
4)将第二幅点云的每个点按转换矩阵变换。
5)第二幅扫描点云的点落于参考点云的哪个网格,计算相应的概率分布函数PDF。
6)求最大似然函数,得到最优变换参数。
优点:
1)对初始配准的要求不高,即使初始值的误差较大,也能有很好的效果。
2)不需要进行点云之间的特征匹配,避免了特征匹配中出现的问题,例如点云噪声、物体移动、点云重合度对特征匹配的影响。
缺点:
1)对体素格子大小的要求较高,太大会导致配准精度低,而太小会导致计算量加大。
2)配准精度相比ICP算法略低。
(3)基于深度学习的点云配准
深度学习除了应用在感知层面,也应用到了定位层面的点云配准环节中。
基于深度学习的点云配准指的是利用深度学习模型来提取原始点云的特征,从而获取到点云的初始配置值,然后根据特征值再进一步地完成精配准。近年来,常见的基于深度学习的点云配准方法包括PointNetLK,Deep ICP,DCP,PRNet,IDAM,RPM-Net,3DRegNet,DGR等。
相比于其它传统的配准方法(ICP和NDT),基于深度学习的方法可以使得计算速度更快,并能学习到更高级的特征,从而达到更高的鲁棒性。
根据配准方法的结构是完全由深度神经网络组成还是将非深度学习方法的一部分组件替换为基于深度学习的网络,将基于学习的点云配准方法分为部分深度学习的方法和端到端的深度学习方法。
部分深度学习的点云配准方法是指直接用基于深度学习的组件替换掉非深度学习点云配准方法中的某个组件,这就可能给原来的算法带来速度或鲁棒性的提升。部分深度学习的点云配准方法最大的优势在于灵活性较大。
端到端的点云配准方法是指从点云的输入到最后的配准结果都在一个完整的网络中实现。端到端的点云配准方法能够最大程度地发挥深度学习方法的高效和智能,也能够更好地发挥GPU的并行计算能力,有更快的计算速度。
当前,自动驾驶行业内应用点云配准技术仍属于前期阶段。某自动驾驶公司感知算法工程师说:“基于深度学习的点云配准仍然处于早期阶段,其应用的精度无法保证,而且结合ICP等传统方法的应用也需要大量的计算时间。”
03
点云配准面临的问题及对策
3.1 配准时点云数量过多的问题及对策
当前,车上的数据都是先上传到云端再处理,但这样一方面数据的回传成本很高,另一方面,无法做到数据处理的实时性,进而难以保障自动驾驶车辆的安全性,因此,需要将数据处理环节在车端完成。
现有量产车上的算力有限,无法直接处理庞大的点云数据,这成为了点云配准时的一大障碍,而解决这一问题的主要方法就是点云精简。
点云精简是指将目标点云数据集合中的无用点云去除。主要可以有两种方式来实现:
1)去除冗余是指在数据配准之后,将一些重复区域的数据予以去除,而这部分数据的数据量大,并且多为无用数据,对建模的速度以及质量有很大影响。
2)抽稀简化是指由于激光雷达扫描获得的点云数据密度过大、数量过多,其中一部分数据对于后期建模用处不大,所以在满足一定精度以及保持被测物体几何特征的前提下,该部分数据就需要进行精简,以提高数据的实际运算速度、建模效率以及模型精度。
在前文中提到,初始配准也叫作粗配准,它是点云配准的关键点,一般通过IMU和车辆轮速计的运动数据来获取配准的初始值,但当前行业内点云初始配准的效率不高。
提高初始配准的效率可以缩小不同视角下的点云之间的旋转错位和平移错位,同时可以提高点云配准整体的成功率和效率。
对于ICP算法来说,初始配准的初始值效果会很大程度上影响ICP算法的精度。对于NDT算法来说,虽然初始值对于算法的效果不敏感,但是提高初始配准的效率和质量,也同样能提升NDT算法的配准精度。
那么,在自动驾驶领域内,技术人员是如何提高点云的初始配准效率?
一种是抓取目标关键点。纵目科技感知算法工程师汤强说:“为了提高点云的初始配准,最直接的方法就是提取选取一个关键目标,比如一辆车,然后从这个关键目标上选取几个关键点去做旋转矩阵和平移矩阵。”
另一种是特征提取,比如FPFH(快速点特征直方图)。图达通算法负责人许建博士说:“区别于ICP算法和NDT算法,基于特征提取的点云配准方法可以提高点云配准速度和精度。它通过提取的一些特征后(如棱角或者线、面),利用两个点云间的空间拓扑结构,来进行点云之间的匹配。此外,实际工程应用中,数据关联、系统偏差估计等在线点云配准技术也非常重要。”
同源点云配准是指从同一类型的传感器获取点云数据,但在不同的时间和视角下进行的点云配准。
在自动驾驶车辆上,除了一颗主激光雷达外,车端可能还会配置一些补盲激光雷达,或者采用两颗以上的主激光雷达方案。这些激光雷达采集的点云都属于是同源点云数据,但是从不同激光雷达采集回来的点云,由于从不同时间点和不同视角采集的情况,在点云配准时会遇到一些问题。
一方面,多个激光雷达从不同角度采集回来的点云数据,它们的三维坐标系不同,并且产生的噪点所在的坐标系也不同。在做点云配准时,点云数据需要统一到一个坐标系下才可以实现更精准的配准效果。
许建说:“为了能让多个激光雷达采集的点云统一到同一坐标系下,在联合标定时,多目标的点云配准会比单目标的点云配准带来更多的信息,使得配准精度会更高。单一目标的话,激光扫描到目标物上的时,目标边缘点云不完整,会影响配准的精度。多目标的话,激光雷达采集的点云信息会更多。比如,目标静止的时候,多目标之间就会形成拓扑结构信息,使得点云初始配准的信息更丰富,有利于提高配准整体的精度。”
另一方面,不同激光雷达之间的硬件性能指标可能不同,这会造成同一目标物表面覆盖的点云数量可能都不同。
汤强说:“不同性能的激光雷达,它们的角分辨率参数都不同,意味着点云密度不同,导致点云配准最终效果会受到影响。为了调节点云密度的不同,感知算法人员可以应用点云精简的方法,降低点云密度较高的激光雷达参数,也可以从硬件上进行调节,例如,技术人员可能会将两个激光雷达的角分辨率调节至同一个水平上。”
跨源点云配准是指对不同类型传感器的点云进行配准。它的优点是结合多个不同类型的传感器各自的优势,为自动驾驶系统提供更丰富的三维点云信息。相比于同源点云配准,跨源点云配准尚处于学术阶段,而其在自动驾驶领域的应用也是预研阶段。
某自动驾驶方案商的技术专家说:“跨源点云配准是未来点云配准技术的主要挑战之一。”
具体来说,由于不同类型的传感器之间的工作原理不同,传感器之间的点云的分辨率、点云密度质量、点云图像画面尺度、点云距离信息等都会不相同,而这些问题造成了跨源点云配准的技术实现难度大大增加。
以4D成像雷达与激光雷达为例,虽然4D成像雷达可以与激光雷达一样,能够形成点云数据,但是4D成像雷达的点云密度或许只能达到某些低线数的激光雷达(如16线、32线等),而无法达到高线数激光雷达(如128线等)的点云密度。另外,在角分辨率参数上,4D成像雷达只能接近1°的参数水平,而某些激光雷达可以做到0.1°的水平。当两个传感器扫描到同一个物体表面时,它们各自采集到的点云效果也会不同。例如在车辆前方较远处的点云数据中,激光雷达的点云质量或许比4D毫米波的点云质量会更好(前者的能量返回更多以及点云数量更多), 造成了最终点云配准的精度下降。
在现有的学术研究中,跨源点云配准的方法已有很多,但主要是在增强现实、建筑施工等领域内有应用,在自动驾驶领域内几乎没有相应的应用。下图为笔者整理的一些跨源点云配准的方法。比如,CSGM是将配准问题转化为图匹配问题,并利用图匹配理论来克服跨源点云配准的问题。再比如,FMR是探讨了深度学习在跨源点云配准的方面的应用。
图:跨源点云配准方法
(数据来源:《2021最新关于点云配准的全面综述》)
国内首个自动驾驶学习社区
近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;
添加汽车人助理微信邀请入群
备注:学校/公司+方向+昵称