Apollo-无人驾驶平台中多传感器标定

本文章来自: Apollo开发者社区     原创:阿波君   

传感器标定是无人车最基础也是最核心的模块之一。

作为软件层提供的第一项服务,标定质量和准确度极大地影响着感知定位地图PNC 等模块。

在 Apollo 开源自动驾驶平台中,我们提供了丰富的多传感器标定服务,如激光雷达惯导摄像头多普勒雷达等多种传感器之间的标定。算法覆盖常规 Level 2-Level 4 级别自动驾驶的传感器配置和标定需求。

 

在本文中,我们将从 L4 传感器标定中两项核心服务(激光雷达到惯导的标定,摄像头到激光雷达的标定)入手,详细介绍 Apollo 标定服务的流程、相关注意事项和常见问题分析,希望 Apollo 开发者和合作伙伴可以参考学习并顺利完成高质量的传感器标定。

 

TIPS

本次分享,我们有请到百度美研Apollo感知团队,资深软件架构师——Chen Guang讲解百度Apollo无人驾驶平台中多传感器标定。

Chen Guang,百度美研Apollo感知团队,资深软件架构师。曾加入美国斯坦福国际研究院,担任计算机视觉研发科学家。以项目负责人身份(Co-PI)和技术负责人(tech lead)的身份,参与、负责了美国国防部高等技术研究署(DARPA,IARPA)的数个大型研发项目。2016年加入百度硅谷无人车感知团队,以高级科学家和资深架构师的身份从事计算机视觉的研发工作。目前学术上担任CVPR, ICCV,ICME等权威会议的委员会委员。

 

Apollo-无人驾驶平台中多传感器标定_第1张图片

Apollo-无人驾驶平台中多传感器标定_第2张图片

                                                   多传感器标定

 

多传感器标定是指对于拥有不同特性不同观测范围的传感器,去准确地找到它们之间的相对位置关系。以上图为例,虽然它们分别来自于不同的传感器(摄像头和激光雷达),拥有不同的观测角度和不同的数据表达形式, 但是我们也可以设计相应的算法,来准确找到他们的相对位置关系。

 

Apollo-无人驾驶平台中多传感器标定_第3张图片

                                      传感器之间的相对位置关系

 

 

传感器之间的相对位置关系,我们通常会用一个 4*4 的转换矩阵 M 来表示。通过这个转换矩阵 M,我们可以将一个传感器坐标系下的点 x 转换成另一个传感器坐标系下的点y。在一个典型的 3D 空间中,传感器的位移、旋转、尺寸变化都可以用一个 4*4 的转换矩阵来表示。以上图为例,左上角 3*3 的矩阵 R,表示传感器的旋转尺寸变化等。右上角的 3*1 的向量 T,表示传感器之间的位移关系

 

Apollo-无人驾驶平台中多传感器标定_第4张图片

                                                  传感器的标定问题

对于左上角 3*3 的矩阵 R,基于它的正交性和行列值为 1,我们可以将 3*3 共 9 个参数的 R,转换成 4 维的四元素向量。所以,传感器的标定问题,可以简化成寻找 7 个未知的参数,包括 4 维的 4 元数向量和 3 维的位移向量。和动辄上百万参数的深度学习相比,寻找 7 位未知的参数,听起来像是小菜一碟。

 

 

Apollo-无人驾驶平台中多传感器标定_第5张图片

Apollo-无人驾驶平台中多传感器标定_第6张图片

                                                     无人车中一个问题“黑洞”

 

但实际中,多传感器标定会遇到各种各样的问题,它们可能来自于硬件车载 OS 通信系统,这就导致多传感器标定成为了无人车中一个问题“黑洞”。

 

Apollo-无人驾驶平台中多传感器标定_第7张图片

                                           不同传感器的特性和不同的观测角度

那么,多传感器标定为什么会有这么多困难呢?

简单来说,因为不同传感器的特性不同的观测角度会导致标定算法有巨大的差异。例如,摄像机可以提供丰富的像素信息,但缺乏有用的 3D 信息,而激光点云可以提供非常准确的 3D 信息,但是信号比较稀疏,并且噪音较大。

而不同传感器的观测范围,观测角度不同,导致标定时不能充分的使用所有传感器的信号。另外,传感器标定是硬件和车载 OS 准备充分后的第一个模块,因此它需要容忍传感器的噪音,并对传感器的状态有足够灵敏的反应。

 

 

Apollo-无人驾驶平台中多传感器标定_第8张图片

Apollo-无人驾驶平台中多传感器标定_第9张图片

                                    Apollo 将多传感器标定变得简单可依靠

 

为了解决这些困难,Apollo 开源平台通过任务分解算法设计,将多传感器标定变得简单可依靠。

首先需要粗略的手量传感器之间的相对位置;

其次需要采集有用的传感器标定数据;最后通过 Apollo 平台的多传感器标定服务产生准确的标定参数。如同为标定任务建立一个“虫洞”,使得标定变得更高效。

 

Apollo-无人驾驶平台中多传感器标定_第10张图片

                                          Apollo 开源平台通过任务分解和算法设计

在本次分享中,我们将依次介绍以上所描述的各个步骤。在最后一个步骤中,外参的优化主要由 Apollo 服务提供,不在本次分享中叙述。

 

 

Apollo-无人驾驶平台中多传感器标定_第11张图片

Apollo-无人驾驶平台中多传感器标定_第12张图片

                                     Apollo3.5 传感器方案示例图

图中是一个典型的 Apollo3.5 传感器方案示例图。我们可以看到多个激光雷达摄像头以及多普勒雷达被安装在不同的位置,所以需要我们对传感器进行不同的标定服务。

 

Apollo-无人驾驶平台中多传感器标定_第13张图片

                                  Apollo3.5 中多传感器安装位置和坐标系的俯视图

这一张图是一个 Apollo3.5 中多传感器安装位置和坐标系的俯视图。不同颜色的箭头代表着不同的方向。例如,红色代表 x 轴方向绿色代表 y 轴方向蓝色代表 z 轴方向;实心圆代表垂直于纸面向外,空心圆代表垂直于纸面向里。我们可以发现,不同的传感器会有不同的坐标系,而相同的传感器在不同的位置也会有不同的坐标系。

 

Apollo-无人驾驶平台中多传感器标定_第14张图片

                                                   传感器标定数值

在手量传感器标定初值时,一定要分清楚从哪一个源传感器到哪一个目标传感器。生成传感器参数时,一定要注意,这些数值是在目标传感器坐标系下,位移向量以为单位,转换矩阵 4 元素以弧度值为单位。

 

 

Apollo-无人驾驶平台中多传感器标定_第15张图片

 

Apollo-无人驾驶平台中多传感器标定_第16张图片

                                            采集有效的传感器标定数据

完成初值丈量之后,下一步就是采集有用的标定数据。它主要有两个步骤,分别是通过 Apollo Cyber RT 录取有用的数据,并用新开发的 Apollo 数据提取工具,从录取的数据中提取产生有用的信息。下面,我们为大家详解如何通过 Apollo Cyber RT 录取有用的数据。

 

 

Apollo-无人驾驶平台中多传感器标定_第17张图片

Apollo-无人驾驶平台中多传感器标定_第18张图片

cyber_monitor 命令来检查安装的传感器

在录取数据之前,我们有一些先行的效验步骤来检测传感器状态。在进入 Apollo Docker 之后,我们可以使用cyber_monitor命令来检查安装的传感器,有对应的 Cyber 信息。在图中cyber_monitor显示中,左右两列分别是Cyber 消息名称和对应的帧率。绿色代表消息正常收发红色代表该消息没有出现

Apollo-无人驾驶平台中多传感器标定_第19张图片

                                                 检查相应传感器的帧率

通过 cyber_monitor,我们可以检查相应传感器的帧率是否正常。例如,激光雷达的帧率是 10 赫兹,而摄像机的帧率最低不能低于 15 赫兹,GPS 和惯导的信号帧率为 100 赫兹。

Apollo-无人驾驶平台中多传感器标定_第20张图片

                                                            检查GPS 的信号

我们还要特别注意,GPS 的信号是否正常,质量是否够高。如图红色框中,Narrow_INT是正常状态,而三个方向上的标准方差应该处于 1~2 厘米级别。

Apollo-无人驾驶平台中多传感器标定_第21张图片

                                    cyber_visualizer 命令来查看传感器的原始数据

 

在安装 Apollo 平台的车辆上,我们还可以通过cyber_visualizer 命令来查看传感器的原始数据,保证数据质量,例如,图像是否模糊,激光雷达点云是否噪音过多。如果上述的检查有各种问题,通常是由于其硬件安装和 EOS 系统的配置不正确导致的。

 

 

Apollo-无人驾驶平台中多传感器标定_第22张图片

Apollo-无人驾驶平台中多传感器标定_第23张图片

                                               按照 Apollo 的建议进行数据采集

 

在通过上述初步检查之后,我们可以按照 Apollo 的建议采集有用的传感器标定数据。

对于激光雷达,我们只需采集原始点云数据;对于摄像头,我们建议采集未压缩的原始图像信息;对于惯导和 GPS 需采集它的 odometry 信息。右图三个红框分别展示了典型的图像信息点云信息以及 GPS 和惯导信息

在使用 Apollo Dreamview 进行数据采集前,大家可以通过上述步骤修改相应脚本里消息列表,以适配你的传感器方案。

 

Apollo-无人驾驶平台中多传感器标定_第24张图片

                                                     激光雷达到惯导的标定

 

例如激光雷达到惯导的标定,无人车以数字 8 的行车轨迹,进行数据采集。行驶速度在 5~10 英里每小时,需要行驶大概 8 圈。因为激光雷达到惯导的标定不需要摄像头图像信息,因此可以通过上一段中介绍的方法,更改脚本里消息列表来过滤掉图像消息,以减小采集数据包的大小。更详细的激光雷达到惯导的标定手册,请参照图中链接(https://github.com/ApolloAuto/apollo/blob/master/docs/specs/lidar_calibration.pdf)

 

在采集时,我们希望场景中没有过多的动态障碍物,且地面基本平整,而且场景中有类似于树木、电线杆、隔离墩、少量停放的汽车之类的静态障碍物。

Apollo-无人驾驶平台中多传感器标定_第25张图片

                                            摄像头到激光雷达的标定

 

而对于摄像头到激光雷达的标定,我们可以通过简单的“4 个 5”来进行开车模式的指导。在一个较为空旷的、拥有大量静态障碍物的场景中,无人车以大约 5 英里每小时的速度直线行驶大约5米后刹车,之后完全停止大约 5 秒。重复上述步骤 5 到 6 次。

Apollo-无人驾驶平台中多传感器标定_第26张图片

                                             摄像头到激光雷达的标定

如果不能找到上述那样的数据采集场景,也可以在一个停放较多车辆的停车场里完成数据采集。只需注意不要有过多的动态障碍物,例如行人和行驶的车辆。

 

 

Apollo-无人驾驶平台中多传感器标定_第27张图片

 

Apollo-无人驾驶平台中多传感器标定_第28张图片

                                                  数据采集之后的检测

 

当完成数据采集之后,可以运用图中的命令来查看每一个采集下来的数据包。通过计算每秒钟采集数据的帧率,可以大致了解数据是否完整的被存放下来。例如 GPS 惯导信号,我们可以看到 4 秒左右的数据包中,大约有 430 个数据消息,它的帧率基本在 100 赫兹,符合预期。而红框中所标示的摄像头,它的消息数量为 0,如果我们需要完成该摄像头的标定,那说明数据采集不成功,这多半是由于硬件和车载 OS 系统没有按照 Apollo 平台的要求来安装和配置。

 

 

Apollo-无人驾驶平台中多传感器标定_第29张图片

 

Apollo-无人驾驶平台中多传感器标定_第30张图片

                                          通过 Apollo 工具提取有效数据

 

当完成数据采集之后,我们可以通过近期开发的 Apollo 平台中数据分析提取工具,来提取有用的标定信息。它是开源的提取工具,只需一行命令,就可以自动完成数据提取和数据压缩。在 Apollo 的 GitHub 上,这个工具相对应的目录如右图所示。

Apollo-无人驾驶平台中多传感器标定_第31张图片

                                                Apollo 工具的特性

 

和以前的一些工具相比,这个工具更加智能,而且会极大的减少标定所需上传的数据。

 

Apollo-无人驾驶平台中多传感器标定_第32张图片

                                                    Apollo 工具相应的命令和配置

 

这个工具相应的命令和配置如图所示。它的配置主要包括三个部分,第 1 个是 IO 配置,主要是指定标定任务名称,以及相应的输出路径。第 2 个配置,主要为指定输入的数据包路径,它可以是完整的数据包路径列表,也可以是一个包含多个数据包的文件夹路径。最后一部分主要是指定所需要提取的消息名称以及采样率。对于小容量消息,我们建议完整的保留它,因此采样率为 1。

 

 

Apollo-无人驾驶平台中多传感器标定_第33张图片

 

Apollo-无人驾驶平台中多传感器标定_第34张图片

                                               摄像头内参标定采集步骤

 

而对于摄像头的内参标定,在这里给大家一些基本的建议。 摄像头内参标定需要采集棋盘格的图像,要求棋盘格的成像能够覆盖图像的各个区域,并且图片中的棋盘格必须完整。采集步骤如下:将设备固定在三脚架上,开启摄像头,观察标定板在摄像头上的成像。将图像分为图中所示 5 个区域,将标定板正对摄像头并移动标定板将成像置于这 5 个区域内。在每个区域内,分别绕标定板的 X、Y 轴旋转正负 30 度左右各一次,绕Z轴旋转正负 45 度左右各一次,并采集图像。

 

Apollo-无人驾驶平台中多传感器标定_第35张图片

                                       用 OpenCV 自带的摄像头内参标定步骤

 

采集完相应的棋盘格图像之后,可以使用 OpenCV 自带的摄像头内参标定工具完成标定。步骤如图所示。完成内参标定后,请按照 Apollo 建议内参文件格式,生成相应的内参文件。

 

Apollo-无人驾驶平台中多传感器标定_第36张图片

                               发送数据提取工具产生的压缩包以及摄像头的内参文件

 

当完成上述步骤后,可以将数据提取工具产生的压缩包以及摄像头的内参文件,发给 Apollo 服务团队,完成传感器的标定。

 

 

Apollo-无人驾驶平台中多传感器标定_第37张图片

Apollo-无人驾驶平台中多传感器标定_第38张图片

                                                传感器标定数据提取工具配置文件

在这里,我们总结了一些 Apollo 传感器标定服务所需要的数据等,并给出了两个示例的传感器标定数据提取工具配置文件。

 

Apollo-无人驾驶平台中多传感器标定_第39张图片

 

Apollo-无人驾驶平台中多传感器标定_第40张图片

                                               短期内的预期

在不久的将来,我们将陆续开放更多的传感器工具和服务,并进一步优化算法,完成更精准的标定,同时降低传感器标定上传所需数据量,提高标定数据质量。

 

希望对你有帮助。

你可能感兴趣的:(Apollo开发者社区)