传感器标定是无人车最基础也是最核心的模块之一。作为软件层提供的第一项服务,标定质量和准确度极大地影响着感知、定位地图、PNC 等模块。在 Apollo 开源自动驾驶平台中,我们提供了丰富的多传感器标定服务,如激光雷达、惯导、摄像头、多普勒雷达等多种传感器之间的标定。算法覆盖常规 Level 2-Level 4 级别自动驾驶的传感器配置和标定需求。
在本文中,我们将从 L4 传感器标定中两项核心服务(激光雷达到惯导的标定,摄像头到激光雷达的标定)入手,详细介绍 Apollo 标定服务的流程、相关注意事项和常见问题分析,希望 Apollo 开发者和合作伙伴可以参考学习并顺利完成高质量的传感器标定。
多传感器标定
多传感器标定是指对于拥有不同特性和不同观测范围的传感器,去准确地找到它们之间的相对位置关系。以上图为例,虽然它们分别来自于不同的传感器(摄像头和激光雷达),拥有不同的观测角度和不同的数据表达形式, 但是我们也可以设计相应的算法,来准确找到他们的相对位置关系。
传感器之间的相对位置关系,我们通常会用一个 4×4 的转换矩阵 M 来表示。通过这个转换矩阵 M,我们可以将一个传感器坐标系下的点 x 转换成另一个传感器坐标系下的点y。在一个典型的 3D 空间中,传感器的位移、旋转、尺寸变化都可以用一个 4×4 的转换矩阵来表示。以上图为例,左上角 3*3 的矩阵 R,表示传感器的旋转尺寸变化等。右上角的 3×1 的向量 T,表示传感器之间的位移关系。
对于左上角 3×3 的矩阵 R,基于它的正交性和行列值为 1,我们可以将 3×3 共 9 个参数的 R,转换成 4 维的四元素向量。所以,传感器的标定问题,可以简化成寻找 7 个未知的参数,包括 4 维的 4 元数向量和3维的位移向量。和动辄上百万参数的深度学习相比,寻找 7 位未知的参数,听起来像是小菜一碟。
多传感器标定可能遇到的困难
但实际中,多传感器标定会遇到各种各样的问题,它们可能来自于硬件、车载 OS 和通信系统,这就导致多传感器标定成为了无人车中一个问题“黑洞”。
那么,多传感器标定为什么会有这么多困难呢?简单来说,因为不同传感器的特性和不同的观测角度,会导致标定算法有巨大的差异。例如,摄像机可以提供丰富的像素信息,但缺乏有用的 3D 信息,而激光点云可以提供非常准确的 3D 信息,但是信号比较稀疏,并且噪音较大。而不同传感器的观测范围,观测角度不同,导致标定时不能充分的使用所有传感器的信号。另外,传感器标定是硬件和车载 OS 准备充分后的第一个模块,因此它需要容忍传感器的噪音,并对传感器的状态有足够灵敏的反应。
Apollo 将多传感器标定变的简单可依靠
为了解决这些困难,Apollo 开源平台通过任务分解和算法设计,将多传感器标定变的简单可依靠。首先需要粗略的手量传感器之间的相对位置;其次需要采集有用的传感器标定数据;最后通过 Apollo 平台的多传感器标定服务产生准确的标定参数。如同为标定任务建立一个“虫洞”,使得标定变得更高效。
在本次分享中,我们将依次介绍以上所描述的各个步骤。在最后一个步骤中,外参的优化主要由 Apollo 服务提供,不在本次分享中叙述。
粗略估计标定参数
图中是一个典型的 Apollo3.5 传感器方案示例图。我们可以看到多个激光雷达、摄像头以及多普勒雷达被安装在不同的位置,所以需要我们对传感器进行不同的标定服务。
这一张图是一个 Apollo3.5 中多传感器安装位置和坐标系的俯视图。不同颜色的箭头代表着不同的方向。例如,红色代表 x 轴方向,绿色代表 y 轴方向,蓝色代表 z 轴方向;实心圆代表垂直于纸面向外,空心圆代表垂直于纸面向里。我们可以发现,不同的传感器会有不同的坐标系,而相同的传感器在不同的位置也会有不同的坐标系。
在手量传感器标定初值时,一定要分清楚从哪一个源传感器到哪一个目标传感器。生成传感器参数时,一定要注意,这些数值是在目标传感器坐标系下,位移向量以米为单位,转换矩阵 4 元素以弧度值为单位。
采集有效的传感器标定数据
完成初值丈量之后,下一步就是采集有用的标定数据。它主要有两个步骤,分别是通过 Apollo Cyber RT 录取有用的数据,并用新开发的 Apollo 数据提取工具,从录取的数据中提取产生有用的信息。下面,我们为大家详解如何通过 Apollo Cyber RT 录取有用的数据。
录取数据之前的先行检测
在录取数据之前,我们有一些先行的效验步骤来检测传感器状态。在进入 Apollo Docker 之后,我们可以使用 cyber_monitor 命令来检查安装的传感器,有对应的 cyber 信息。在图中 cyber_monitor 显示中,左右两列分别是 cyber 消息名称和对应的帧率。绿色代表消息正常收发,红色代表该消息没有出现。
通过 cyber_monitor,我们可以检查相应传感器的帧率是否正常。例如,激光雷达的帧率是 10 赫兹,而摄像机的帧率最低不能低于 15 赫兹,GPS 和惯导的信号帧率为 100 赫兹。
我们还要特别注意,GPS 的信号是否正常,质量是否够高。如图红色框中,Narrow_INT 是正常状态,而三个方向上的标准方差应该处于 1~2 厘米级别。
在安装 Apollo 平台的车辆上,我们还可以通过 cyber_visualizer 命令来查看传感器的原始数据,保证数据质量,例如,图像是否模糊,激光雷达点云是否噪音过多。如果上述的检查有各种问题,通常是由于其硬件安装和 EOS 系统的配置不正确导致的。
按照 Apollo 的建议进行数据采集
在通过上述初步检查之后,我们可以按照 Apollo 的建议采集有用的传感器标定数据。对于激光雷达,我们只需采集原始点云数据;对于摄像头,我们建议采集未压缩的原始图像信息;对于惯导和 GPS 需采集它的 odometry 信息。右图三个红框分别展示了典型的图像信息、点云信息以及 GPS 和惯导信息。在使用 Apollo Dreamview 进行数据采集前,大家可以通过上述步骤修改相应脚本里消息列表,以适配你的传感器方案。
例如激光雷达到惯导的标定,无人车以数字 8 的行车轨迹,进行数据采集。行驶速度在 5~10 英里每小时,需要行驶大概 8 圈。因为激光雷达到惯导的标定不需要摄像头图像信息,因此可以通过上一段中介绍的方法,更改脚本里消息列表来过滤掉图像消息,以减小采集数据包的大小。更详细的激光雷达到惯导的标定手册,请参照图中链接(https://github.com/ApolloAuto/apollo/blob/master/docs/specs/lidar_calibration.pdf)。
在采集时,我们希望场景中没有过多的动态障碍物,且地面基本平整,而且场景中有类似于树木、电线杆、隔离墩、少量停放的汽车之类的静态障碍物。
而对于摄像头到激光雷达的标定,我们可以通过简单的“4 个 5”来进行开车模式的指导。在一个较为空旷的、拥有大量静态障碍物的场景中,无人车以大约 5 英里每小时的速度直线行驶大约5米后刹车,之后完全停止大约 5 秒。重复上述步骤 5 到 6 次。
如果不能找到上述那样的数据采集场景,也可以在一个停放较多车辆的停车场里完成数据采集。只需注意不要有过多的动态障碍物,例如行人和行驶的车辆。
数据采集之后的检测
当完成数据采集之后,可以运用图中的命令来查看每一个采集下来的数据包。通过计算每秒钟采集数据的帧率,可以大致了解数据是否完整的被存放下来。例如 GPS 惯导信号,我们可以看到 4 秒左右的数据包中,大约有 430 个数据消息,它的帧率基本在 100 赫兹,符合预期。而红框中所标示的摄像头,它的消息数量为 0,如果我们需要完成该摄像头的标定,那说明数据采集不成功,这多半是由于硬件和车载 OS 系统没有按照 Apollo 平台的要求来安装和配置。
通过 Apollo 工具提取有效数据
当完成数据采集之后,我们可以通过近期开发的 Apollo 平台中数据分析提取工具,来提取有用的标定信息。它是开源的提取工具,只需一行命令,就可以自动完成数据提取和数据压缩。在 Apollo 的 GitHub 上,这个工具相对应的目录如右图所示。
和以前的一些工具相比,这个工具更加智能,而且会极大的减少标定所需上传的数据。
这个工具相应的命令和配置如图所示。它的配置主要包括三个部分,第 1 个是 IO 配置,主要是指定标定任务名称,以及相应的输出路径。第 2 个配置,主要为指定输入的数据包路径,它可以是完整的数据包路径列表,也可以是一个包含多个数据包的文件夹路径。最后一部分主要是指定所需要提取的消息名称以及采样率。对于小容量消息,我们建议完整的保留它,因此采样率为 1。
通过 Apollo 产生准确的标定参数
而对于摄像头的内参标定,在这里给大家一些基本的建议。 摄像头内参标定需要采集棋盘格的图像,要求棋盘格的成像能够覆盖图像的各个区域,并且图片中的棋盘格必须完整。采集步骤如下:将设备固定在三脚架上,开启摄像头,观察标定板在摄像头上的成像。将图像分为图中所示 5 个区域,将标定板正对摄像头并移动标定板将成像置于这 5 个区域内。在每个区域内,分别绕标定板的 X、Y 轴旋转正负 30 度左右各一次,绕Z轴旋转正负 45 度左右各一次,并采集图像。
采集完相应的棋盘格图像之后,可以使用 OpenCV 自带的摄像头内参标定工具完成标定。步骤如图所示。完成内参标定后,请按照 Apollo 建议内参文件格式,生成相应的内参文件。
当完成上述步骤后,可以将数据提取工具产生的压缩包以及摄像头的内参文件,发给 Apollo 服务团队,完成传感器的标定。
Apollo 的需要和反馈
在这里,我们总结了一些 Apollo 传感器标定服务所需要的数据等,并给出了两个示例的传感器标定数据提取工具配置文件。
短期内的预期
在不久的将来,我们将陆续开放更多的传感器工具和服务,并进一步优化算法,完成更精准的标定,同时降低传感器标定上传所需数据量,提高标定数据质量。