分享

激光雷达--点云处理

 爱萨摩 2023-11-20 发布于湖北
0 序言
当回波经过接收的各级电路,最终会被高速ADC转变成数字量送入到处理器。处理器会对数据进行处理,以提供应用端所需要的数据,如距离、反射强度等等。下图是TI给的机械旋转式雷达系统的方案框图。
图片
对于激光雷达本身而言,交出这些信息就算是完成了任务,由于数据带宽的问题,激光雷达通常通过千兆以太网向车端传递信息。车端需要将激光雷达的原始数据,即点云数据进一步处理,用于外界环境的感知以及车自身在环境中的定位。
本文会简单介绍激光雷达所使用的处理器以及点云处理算法。由于本人硬件出身,与算法相差甚远,因此本文对于点云处理算法的介绍所要达到的目的,仅仅是供算法外行人了解一下,点云给出去用于什么地方了,算法工程师们在做什么。本文中列出了很多算法的名称,而没有展开,仅作为有兴趣的朋友,深入学习时搜索的关键词。
此前写了三篇文章,分别介绍了激光雷达的发射模块、扫描模块和接收模块,各位读者可以查阅。
激光雷达--发射模块
激光雷达--性能指标&扫描系统
激光雷达--接收模块
1 处理器
在激光雷达中,通常用FPGA作为处理器。FPGA相对于MCU、DSP等处理器有什么优势呢?MCU和DSP都是通用集成芯片,通用的意思是其能做很多事,但通用的另一面可能就是做的不精。激光雷达需要进行大量的信号处理、电机时序控制等,MCU/DSP虽然也能做,但如果采用专用的算法以及为算法专门优化设计的电路,其效率会高得多。
图片
另外,作为汽车领域的新生事物,从2007年Velodyne激光雷达首次被用于DARPA挑战赛至今,其上车的历史也不过十五年,还有许多硬件/算法设计尚处在探索阶段,因此采用FPGA有利于反复迭代修改,同时还满足了专用电路的高效性。
这里要介绍下FPGA的主要特点之一,灵活。FPGA的中文名叫现场可编程门阵列,如果想深入了解FPGA的原理,可以看我之前写的文章。如果只想了解其大致特性,就可以简单粗暴的理解为其内部逻辑是可编程的。只要我们对其进行编程,就可以实现特定的电路。
了解一下FPGA
举个例子,高铁为了照顾沿途城市的通行需求,其路线基本固定,每站都要停车等待。只要在这条线上,你想去哪个城市都行。高铁就类似于MCU、DSP这种通用处理器。而专线飞机通常直达,比如从上海飞北京,效率很高,坐高铁就需要经过很多个站。当有一天,我们需要从上海去成都,那就调整航线去成都,也更加灵活。假设上海和成都之间原先没有高铁路线,想坐高铁去成都,那要先建设高铁。FPGA就是类似飞机这样的东西。
图片 
FPGA主要功能是时序控制、波形处理以及激光雷达其他功能模块的控制。举例来说,仅仅反射波的波形处理就需要消耗大量算力,而且每一束反射光都需要进行处理,如果使用MCU/DSP,可能既难以满足算力需求(高性能的MCU和DSP也许能够满足),又浪费MCU/DSP的通用能力,因此往往需要专门的电路进行处理。波形需要什么处理?实际中的情形比理论中复杂许多,虽然发射端发射的是一个短促的脉冲,但由于光束的扩散,飞行过程中会遇到多个障碍物,产生多个反射波。如果是树木等物体,其反射波将更复杂(如下图所示,反射波是一长串连续波)。在此情况下,我们如何判断反射光的返回时间,如何判断反射率,都需要算法处理。
图片 
目前全球最主要的两大FPGA厂家是AMD收购的Xilinx,Intel收购的 Altera,还有Lattice等规模稍小的厂商。
FPGA主要分为六个部分,选型时从这六个部分来看就行。
1.可编程输入输出单元:在选型时需要统计项目所需要的IO资源,这里说的IO资源不仅包括普通的GPIO,还需要关注特定的高速IO,特殊电平标准IO等资源。
2.可配置逻辑块:为了实现特定的电路,逻辑资源的数量是关键。类似于用积木搭建大厦,积木的数量将限制大厦的规模,前期需要着重评估。
3.数字时钟管理模块
4.嵌入式块RAM
5.布线资源
6.硬核IP:有些功能模块,FPGA厂家已经提供了,比如高速ADC。
上面说了,选用FPGA很大程度上是因为其灵活,在激光雷达处理算法和算力还未收敛的情况下,可以快速迭代自己的算法,优化性能。但FPGA本身的成本其实还是偏高,当某个厂家有把握把算法固化了,那么也可以把FPGA的可编程电路给固化下来,就会变成ASIC,即应用型专用集成电路。所以可以看到,很多激光雷达公司都在做芯片,例如禾赛。当然,其做的不仅仅是将原先FPGA的部分ASIC化,而是将更多的模块集中到一起,做成SOC,这样可以大大降低成本,也构建产品的壁垒。
图片 
处理器将整理好的点云信息通过车载以太网传输出去,激光雷达公司的工作就完成了,剩下的工作交给整车。
本文自此以下的主体内容均参考自九章智驾关于激光雷达点云处理的文章,并做了部分补充。九章智驾中文章中的一些说法,我无法求证,各位谨慎参考。原文的链接如下,下面与大家一起总结学习。非常推荐大家关注该公众号,文章质量很高。
http:///nd.jsp?id=184
2 点云数据处理
2.1 点云数据是什么样的
首先我们先看下点云数据是什么,有个直观的感受。下图是Velodyne的16线激光雷达的点云数据。从数据的内容来看,该型号的激光雷达在垂直方向上(-15°到+15°)有16线的激光束,其每帧的数据长度固定为1248字节,这些字节包括前42字节的前数据包标识、12组数据包、4字节时间戳和最后两字节雷达型号参数。
图片 
每个数据包中的数据都包含了激光光束的旋转角度、距离值、反射强度的信息。例如,“B6 07”代表了激光雷达的探测距离,“2A”代表了激光的反射强度,但这些信息都是以两字节表示,需要进一步解析这些数据。
图片 
2.2 点云要怎么用
车载激光雷达主要起到两个作用,即感知和定位。感知很容易理解,就是要判断前方有没有车或其他障碍物,给主控提供信息参考。而定位则是通过激光雷达的点云数据和高精地图对比,判断自身的精确位置和姿态。
当激光雷达的点云数据被用于感知和定位时,点云会先完成预处理,然后按照不同用途进行不同的处理。下图是激光雷达点云在自动驾驶应用中的普遍流程。
图片 
下面从点云预处理、感知应用、定位应用三个部分展开。
2.3 点云预处理
2.3.1 数据解包
通过车载以太网收到点云数据后,首先要对数据进行解包,转换成感知工程师需要用到的pcd格式的数据集,其主要包括笛卡尔坐标系(x,y,z)和强度值i,即每个点云都附带有独有的三位坐标系和能量反射强度。在这个坐标系中,x轴指向汽车的前部,y轴指向汽车的左侧。由于这个坐标系采用右手定则,坐标系z轴指向汽车上方。
图片 
点云中原来的信息其实是点云的极坐标系,点云数据里已经有的信息是旋转角度α、和距离值R。如果转换成笛卡尔坐标系,还需要一个ω,对于机械旋转式雷达,当结构固定下来后,每个激光束在垂直方向的发射角度就固定了,因此ω是一个固定值。每个点云的笛卡尔坐标计算如下图所示。
图片 
2.3.2 运动畸变补偿
当我们完成坐标变换后,就需要进行运动畸变补偿的工作。先来说说什么是运动畸变。传统360度机械式激光雷达每一帧,是以雷达为中心环绕扫描一周(通常是100ms)得到的。当雷达本体或所在车体静止时,扫描起始点和终止点可以比较好地闭合(坐标原点始终保持不变)。而当雷达或自车运动时,自运动畸变就会发生,环绕一圈的数据就会发生扭曲,导致环绕不再闭合(不同点的坐标原点不同)。
图片
下面左图p1~p3表示激光雷达依次扫描到的三个位置点,这三点在真实世界中共线。但由于激光雷达自身在一帧时间内存在“剧烈”运动,如中间图所示,雷达自身分别在三个不同的实际姿态下对三个点进行了扫描。因此在最后得到的点云中(最右图),三个点坐标实际处于不同的坐标系,看起来不再共线了。
图片 
为了消除这种畸变,我们需要做补偿,我们预测雷达在一定时间内(比如0.1s)的运动轨迹,通过坐标系变化,将0.1S所有时刻物体的坐标转换到初始时刻的坐标。可能会有人和我一样,会想一个问题,对于静止的物体,这种运动补偿当然不会有什么问题,因为0.1S内其位置都是固定的。但对于运动物体呢,0.1S内其位置已经不一样了,其实对于120km/h的车,0.1S内也就才3.3m,影响很小。
用于运动畸变补偿主要有三种方法:
(1)纯估计方法(ICP/VICP)
(2)传感器辅助方法:利用IMU或轮式里程计预估车的运动轨迹,进行补偿。
(3)上述二者进行融合。
2.3.3 点云组帧
感知算法人员在完成点云的运动畸变补偿后,会发现一个问题:激光雷达发送的点云数据包中的点云数量其实非常少,完全无法用来进行后续感知和定位层面的处理工作。此时,感知算法人员就需要对这些数据包进行点云组帧的处理。
以单激光雷达为例,感知算法人员会把多个点云数据包叠加到同一帧上,让这一帧上的点云数据能包含上万个点云,以便后续感知和定位流程的处理。若车端有多个激光雷达,感知算法人员会分别解析这几个激光雷达的点云数据包,然后把解析后的点云数据集合在同一时刻上,让其变成一个大的数据包。例如,技术人员会把车端多个激光雷达在t时刻的点云都汇集在一起,作为一帧点云数据来处理。
对于这一点,我个人有些疑问,用多帧的数据才能做一次感知判断,那整个系统的响应就慢了,对于高速场景,如何保证安全呢?有懂的可以私信交流下。
2.3.4 外参变化
点云数据通过解析得到的点云坐标系属于激光雷达坐标系,而在实际的自动驾驶技术应用中,仍需要将激光雷达的坐标系转化为车辆的坐标系,这个建立联系的过程称之为点云的外参变化。
由于激光雷达与车体是刚性连接,所以在车辆运动过程中,两者之间的相对姿态和位移是固定不变的,只需要建立两者相对坐标系之间的位置关系,通过旋转或者平移的方式,就能将这两个三维坐标系统一到一个三维坐标系下(也称为全局坐标系或世界坐标系)。
2.3.5 滤波处理
在激光雷达获取点云数据的过程中,由于受到产品自身系统、待测物体表面及扫描环境等因素的影响,点云数据中会不可避免地夹杂着一些噪点(离群点),需要将其直接剔除或者以平滑的方式进行处理。这些噪点(离群点)会在后续的点云处理环节中(如点云分割、特征提取、点云配准等)让模型结果产生一定的误差。因此,在实际的点云处理流程中,感知人员会对点云进行滤波处理,常见的滤波算法如下。
图片 
2.4 感知应用
激光雷达在感知方面的应用主要是3D目标检测,即自动驾驶系统需要识别检测出车辆感知区域内的障碍物,从而采取避障等措施。感知层面的处理会有两个分支:一个是应用传统的3D目标检测方法,包括点云分割、目标物的聚类分析等;另一个是直接应用深度学习模型来完成3D目标检测。
对于传统方法,主要有几个步骤。
(1)地面点云分割
在进行目标检测后,点云数据中会有很大一部分点云属于地面点数据,并呈现出一定的纹理状,这会对后续目标物的点云处理流程产生影响。一方面,若不将这些地面点云数据进行分割及去除,这些无效的点云数据就会对位于地面上的物体点云数据造成干扰,会降低目标障碍物分割算法的准确性和鲁棒性;另一方面,由于点云数据量过大,这就会增加模型对计算量的需求。
一句话,地面点云分割是将价值不大的地面点云去掉。用于地面分割的算法主要有平面栅格法、点云法向量、模型拟合法-平面拟合、面元网格法。以平面栅格法为例展开,其主要思路是根据设定好的尺寸建立平面网格(也可以做多层网格或者三维体素),然后将原始点云投影到各自的网格中,对每个网格中的点云集合提取特征,比如平均高度、最大高度、高度差、密度等等。假设以最高高度不超过某个阈值,即可判定是地面(我猜测是这么搞的)。
图片 
(2)目标物的点云分割
在去除掉地面点云后,接下来感知算法人员就需要将目标物点云进行有效地分割、分块,从而便于对目标物进行单独处理,即点云分割。目标障碍物的点云分割是根据空间、几何和纹理等特征对点云进行划分。
说大白话,就是将这么多的点云,分成很多块,分别处理。每一块里提取出很多特征。目标点云分割的方法主要有基于边缘的方法、基于区域增长的方法、基于属性的方法。
(3)聚类分析
在上一个步骤中,若干个点云块提出了很多特征,在这个步骤中,工程师把具有相似程度较高的点云组成一组,以便降低后续模型的计算量——这个过程就被称为点云聚类。常见的点云聚类方法有K-means、DBSCAN、欧式聚类。
(4)匹配跟踪
在做完前面的部分后,感知算法人员基本上已经可以从已处理完的数据上获知这些点云具体代表了什么目标物,而接下来需要做的就是对目标物的匹配和跟踪,即预测下一时刻,目标物出现在哪个区域。在障碍物检测中,匹配的精确度是后续多传感器融合的基础。
以上讲的是传统的3D目标检测方法,而基于深度学习的目标检测方法,在点云做完预处理便可直接送入模型进行处理输出。常用的基于深度学习的目标检测方法有PointNet、PointNet++、VoxelNet、SECOND、PointPillar、PCT。
2.5 定位应用
激光雷达点云用于定位时,主要分三个步骤。
(1)特征提取
感知算法人员需要先提取周边场景的目标物特征,并通过这些特征和所获取到的相对距离信息来建立一个小地图,知道车辆的相对初始位置。比如前方有个牌楼。
图片
点云特征提取往往是实时的,这会导致点云的数据量会非常大,而现有量产车的硬件性能有限。所以为了减少点云数据的计算量,点云数据在被提取特征时,一般会被优先提取一些较为明显的特征,比如物体的轮廓信息。
(2)地图匹配
在提取完周围目标物的特征后,感知算法人员就需要根据这些特征来进行点云地图匹配,来获取各个点云之间的相对位姿。点云地图匹配一般可分为帧间匹配和高精地图匹配。
帧间匹配,也叫子图匹配,指将前后帧上有相同特征的点云做匹配,最后得到一张局部小地图。高精地图匹配,指将优化后的点云与高精地图做匹配。
图片
(3)位姿优化
点云数据在做完匹配后,可以获取各点云间的相对位姿,而相对位姿的准确性会影响构建地图的准确性,所以需要对点云的相对位姿做一定的优化。通常来说,相对位姿的不准确主要是由于一些不可控因素造成的,如点云被物体遮挡或者激光雷达视场角的限制。点云的位姿优化通过一定的点云坐标系的刚体变化(旋转或平移)来得到最优相对位姿。
3 写在最后
用了四篇文章,共计三万六千字,大致讲完了TOF激光雷达。激光雷达的内容还有很多细节,但先写到这。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多