(i) sphere center detection in the point cloud,
(ii)the 3D sphere center estimation from the image
(iii)relative pose calculation.
在点云中准确、鲁棒地检测球体是估计目标物体中心的关键任务。随机抽样一致性(RANSAC)[24]用于检测内点,迭代过程中使用快速最小拟合方法[25]。确定最大内点集后,使用Eberley[26]方法的修改版本重新拟合模型。这是基于最小二乘误差最小化原理。设 [x0, y0, z0]T 为球心坐标,r为半径。误差函数定义为表面点到球心的估计距离与真实距离之间的差:
本文讨论了一个视觉系统的校准问题,该系统由RGB相机和3D光学雷达(LiDAR)传感器组成。将来自不同模态的两个独立点云进行配准始终是具有挑战性的。我们提出了一种新颖、准确的校准方法,使用已知尺寸的简单纸板箱。我们的方法主要基于在LiDAR点云中检测盒子平面,因此它可以校准不同的LiDAR设备。此外,还可以在最少的人工干预下实现相机-LiDAR校准。所提出的算法在合成数据和由由一组LiDAR传感器和RGB相机拍摄的实际测量结果上进行了验证并与最先进技术进行了比较。
现在,获取环境信息变得越来越重要,尤其是在自动驾驶汽车和机器人的情况下,它们需要在没有任何人类交互的情况下自我控制。3D机器感知可以通过多种方式实现,例如使用相机、麦克风、雷达、扫描仪等技术。目前最受欢迎的技术之一是3D激光雷达(LIDAR),它可以通过测量光束距离来获取稀疏点云以测量我们的周围环境。3D LIDAR技术的主要优势是主动照明,它不受环境光影响,可以在任何光照条件下使用,并且LIDAR传感器可以在长距离下准确地绘制3D世界。然而,这些设备仍然昂贵,分辨率有限,例如,流行的Velodyne-64 LIDAR只能测量64个通道并且刷新速率较低。
另一方面,RGB相机产生高分辨率、彩色图像,但它们必须处理光照条件,特别是夜晚的问题,此外,遮挡和阴影可能会导致图像处理问题。幸运的是,大多数LIDAR传感器的缺点可以通过相机或相反方法来弥补,因此3D LIDAR和相机经常一起使用以检测物体、重建场景或解决导航任务。通过 3D 视觉技术可以使点云更加密集,但是,对于由不同模态获取的两个独立点云进行配准是一项极具挑战性的任务。这些传感器的外部校准是必要的,这意味着它们的相对位置和方向需要事先知道。已经存在一些匹配算法,但它们的精度并不令人满意。
在机器人和汽车的情况下,设备是固定的,它们的位置和方向在时间上不会发生变化。因此,在应用仪器之前,可以离线计算两个仪器之间的刚体变换。我们在这里展示了使用普通盒子进行校准的方法。
外部校准。已经提出了多种方法来校准摄像机-LIDAR传感器对。早期工作集中在类似于[35]中概述的2D LIDAR设备上。可将3D LIDAR校准方法列表分为三组。其中一些[9,22]使用平面棋盘板,其他算法[24,32]应用不同形式的平面表面,还有方法[8,23]根本不使用校准对象,但后者的精度远低于所需水平。基于平面板的方法的主要问题是在LIDAR点云中准确检测其边缘很困难,特别是如果使用低分辨率设备,例如非常流行的只有16个垂直激光束的 Velodyne-16。当平面板上使用传统的棋盘格图案时,更多问题会出现,由于其黑白颜色,该图案会严重污染LIDAR点云 [27,24]。在大多数情况下,相机需要进行预校准,换句话说,其内部参数已知。所提出的方法使用空间校准对象并假设相机也经过预校准。
在[27]中,Rodriguez等人使用基于黑圆的平面板来避免棋盘格图案引起的大量噪声。他们的算法搜索圆心的3D坐标和平面的法向量。至少需要6个校准对象的位置,由众所周知的Levenberg-Marquardt [17,19](LM)算法对LIDAR-相机刚体变换的初始猜测进行改进。
Alismail等人[2]发布了一种自动校准方法,其使用具有黑色圆形区域和标记中心的平面校准对象。圆的中心和法线从单个视图图像中计算出来,然后应用基于随机样本一致性[7](RANSAC)的方法进行平面提取,最后使用非线性优化和LM的点-平面ICP [4]调整外部参数。
Park等人[24]提出的方法使用白色、均匀、平面三角形或菱形板进行校准。他们需要从多个位置拍摄板子的多个图像,或者同时使用至少三个板子。他们算法的另一个缺点是估算而不是测量平面板的空间坐标,这影响了校准的精度。该方法的详细信息可以在第3节中找到。
Gong等人[10]发表了一种方法,需要通过两个仪器测量同一三棱柱物体的至少两次扫描进行校准。这会产生更多的数据处理。在他们的工作中,使用9次观察需要20秒来进行校准。他们方法的主要缺点是三棱柱校准物体的制造并不容易。此外,校准需要大量人工干预,并且需要手动完成三棱柱点的分离和图像中相关平面的选择。
Velas等人在[32]中提出了一种不常见的校准对象。他们假设有一个白色背景和包含四个圆孔的平面对象,其方法基于Levison和Thrun [18]的工作。在3D LIDAR点云和获取的图像中自动检测圆孔。然而,我们无法使用我们的Velodyne HDL-16 LIDAR来重现此方法,因为此算法需要更密集的点云。
Geiger等人[9]介绍了一种方法,该方法通过LIDAR进行单次测量以及相机进行单张图像进行LIDAR-相机校准。该方法是完全自动的,但需要多个棋盘和至少2个相机进行校准。在第3节中将简要介绍该算法,并将其与所提出的方法进行比较。
本文的目标是双重的:(i)提出一种半自动校准过程;(ii)在实际应用中实现准确的相机- LIDAR校准。本文的主要贡献是我们的算法精确度高,校准过程仅需要一个简单的纸箱。我们方法的另一个好处是可以校准任意数量的相机和LIDAR传感器的外部参数。
正如介绍中提到的,我们方法的目标是准确校准相机-LiDAR系统的外部参数。普通的盒子被选定用于实现这个目标。使用这些盒子的主要好处是它们经常在日常工作中使用,不需要特殊的制造或印刷。使用盒子的另一个原因是它们的边是互相垂直的,因此可以从即使低分辨率的LiDAR获取的点云精确计算这些平面的交点。其他使用平面校准对象的方法会受到平面边缘测量不准确的影响。所提出的方法仅使用点的位置,而不使用来自LiDAR的任何其他信息,例如强度,因此可以与任何类型的LiDAR设备一起使用。
校准过程仅演示了一个校准物体,但该方法可以轻松扩展以适用于更多盒子的使用。这种能力非常重要,例如在自动驾驶中,常见的情况是将相机和LiDAR排成环形结构,因此某些设备可能没有共同的视野,并且可能需要更多的物体进行校准。由于假设相机已经进行了预校准 - 其内部参数先验已知 -,因此校准箱的放置几乎是任意的,图像畸变对校准精度没有影响。唯一的要求是校准盒的3个侧面在点云和图像中都清晰可见。
该方法的输入如下:
1.由LiDAR设备获取的点云(s);
2.每个相机一个图像;
3.相机的内部参数;
4.盒子边缘的测量长度。
我们校准算法的主要思想是,如果已知校准盒的七个角 - 沿三个平面的交点 - 并且这些角在图像中的投影也已知,则问题可以简化为一个简单的透视n点(PnP)问题,现今可以有效地解决[12,16,30,36]。因此,第一个目标是准确计算点云中的这些点。
首先,需要裁剪校准盒的粗略区域。虽然这是手动完成的,但它不需要精确。正如后面所展示的,算法可以自动将盒子的侧面与掉入该区域的其他物体分开。然后,算法在点云中搜索平面。由于位于该区域内的点数很少,因此采用简单的顺序RANSAC算法[15,33]。在每次迭代中,它选择了具有最多内部点的平面,基于欧几里得距离。与最显著平面相关的点从集合中删除,并且重复进行鲁棒拟合,直到可以检测到平面。然后,检测出校准盒的可见侧面。选择相互垂直的平面。我们应用以下误差以选择近乎垂直的侧面:
E(n1,n2,n3) = |n1 T n2| + |n1 T n3| + |n2 T n3|,(1)
其中nk是第k个平面的法线(k∈{1、2、3})。由于平面数通常较少,因此在候选平面中进行穷举搜索不需要太多的计算时间。图1左侧显示了此步骤的结果示例,其中盒子放在椅子上,并且位置在半径范围之外的点被排除。顺序RANSAC找到5个平面,然后选择红色,绿色和黄色作为盒子的3个侧面,如图1的右图所示。
左图:顺序RANSAC发现的五个平面。每个平面都有不同的颜色。右图:根据我们的盒子模型将点集聚类为内点(绿色)和外点(红色)。
所提出算法的下一个任务是去除离群点。这是一个重要的步骤,因为LiDAR点云可能会受到噪声的严重影响,例如由纹理引起的测距反射率偏差,正如[24]所讨论的那样。在这种情况下,离群点是属于校准盒但受到严重噪声影响的点。这些点被排除在剩余步骤之外。我们将从上一步继承的平面上的点称为L1、L2和L3,顺序不重要。我们的算法再次使用RANSAC [7] 确定离群点,但此时要匹配的模型代表三个垂直平面。请注意,在前一步中选择了产生最低误差的平面,并且不需要它们是垂直的。模型拟合如下:首先从L1中选择三个点,这些点确定了一个平面,然后从L2中选择两个点,这两个点确定了一个与第一个平面垂直的平面,最后从L3中选择一个点,确定了第三个与前两个平面垂直的平面。选择具有最多内点的模型,排除离群点。
这种双重离群点过滤似乎是冗余的,但实际上并不是。第一个的目的是将校准盒与其他物体分开,而这一个确定了嘈杂的盒子点。
去除点集中的离群点后,由两个步骤组成的迭代算法对盒子的平面进行了细化,以准确地适配三个垂直平面到点集。第一步旋转盒子模型,第二步将其平移。
在此步骤中,两个平面沿其交线——盒子的边缘旋转。旋转最小化点和平面之间的平方误差之和。
设p
1j,j∈{1,2,…m1},p
2j,j∈{1,2,…m2}和p
3j,j∈{1,2,…m3} 分别表示L1、L2和L3中的点。令qi表示位于第i个平面上的一个点,不一定在集合pij中。令ni表示平面的法线。拟合问题等价于最小化点与相应平面之间的平方距离之和。最小二乘代价函数定义如下:
不失一般性,世界坐标系被固定在盒子平面的交点处,旋转主轴等于长方体的边缘。假设我们考虑绕第三个轴旋转顺时针角度为γ,那么旋转矩阵如下:
其中 c = cos γ,s = sin γ。三个平面的法线向量分别为 [1 0 0]T,[0 1 0]T 和 [0 0 1]T。旋转不影响第三个平面上点的拟合误差,因此最小化问题变为:
经过基本的变换,代价函数被转化为最小化范数 |Ax|,同时满足 xT x = 1,其中:
常数 m1 和 m2 分别表示属于第一个平面和第二个平面的点的数量。x 的最优解是从 AT A 对应于较小特征值的特征向量中检索出来的。角度 γ 的计算公式为:γ = atan2(s, c)。绕X和Z轴的旋转同理。
盒子的平移沿着三个平面的法线依次进行。平移的优点是,如果盒子的平移与其法线平行,则只会改变所选平面的点拟合误差。等式2中定义的代价函数被修改为以下形式:
其中 α 是平移的长度。平移必须按照三个垂直方向依次计算。然而,该问题也可以通过一步来解决。对于这种情况,我们将平移问题视为最小化以下代价函数:
这个问题可以表示为一个齐次线性方程组,形式为 Bt = c,如下所示:
其中,行向量 njT 表示列向量 nj 的转置。代价函数的每一项都给出了方程组中的一个方程。解由著名公式 t = BTB−1 BTc 给出。由于向量n1,n2和n3互相垂直,所以矩阵B总是非奇异的,因此矩阵求逆可以计算出来。
如上所述,旋转和平移步骤将重复执行直到收敛。我们发现少于30次迭代就足够了。为了测试所提出的方法的收敛性,将坐标系原点设置为平面与轴对齐时的初始平移/旋转值,并发现迭代总是收敛到可接受的结果。
在盒子边的迭代精修完成后,可以计算出标定盒子的角点,因为盒子的大小已知。图3中的有色点表示盒子的角点,盒子的整个邻域都是算法的输入,经过从原始点云中裁剪后。
如果需要知道 LiDAR-LiDAR 对的外参数,则算法可以分别在 LiDAR 点云中找到角点。然后,通过点配准[3、13、14]利用盒子角点的点对应关系计算两个点云之间的变换。
标定方法也可用于校准 LiDAR-Camera 系统。在这种情况下,需要在处理后的图像中选择标定盒子角点的投影。然后,选择的点使用 Harris[11] 角点检测器进行精化。找到外参数的问题等同于一个 PnP 问题,因为已知 3D-2D 点对应关系。我们采用了EPnP算法[16]。由于相机已经被校准,因此在 PnP 过程中考虑了内参数,径向和切向畸变对校准的精度没有影响。
图2. 标定过程的块图。必须在空间点云中检测到盒子的角点。LiDAR-LiDAR 校准基于点配准,而 LiDAR-Camera 校准的本质是应用 PnP算法。
该方法在合成和真实世界的测试数据中进行验证。对于合成测试,使用Blensor(Blender Sensor Simulator)[1],它是一种用于广泛使用的3D建模和渲染软件的开源模拟包。真实世界的结果包括来自高分辨率和低分辨率LiDAR设备的彩色点云和点云融合。
3.1 合成测试
Blender是一款免费开源的3D模拟、渲染、动画和建模软件。它支持使用多个具有不同参数的摄像机,甚至可以保存逼真的图像。在Blender的合成环境中建模了棋盘和一个标定盒,以模拟逼真的测试场景。Blensor[1]是一个传感器模拟包,它扩展了Blender的功能,提供了不同类型的LiDAR和飞行时间设备。在合成测试中,使用了默认设置下的Velodyne-64,但也可以设置扫描范围、噪声级别和旋转速度。在我们的测试中,只变化了噪声水平。Gauss噪声添加到距离传感器零距离的地面实际值上,方差在0和0.14之间变化。这意味着噪声点位于激光雷达射线上。
图5展示了虚拟场景的一个例子,创建于Blensor[1]模拟软件包中。在构建场景时,考虑到三种竞争算法需要使用相同的相机-LiDAR系统设置,而每种算法都使用不同的对象进行校准。这些竞争方法如下:
• Geiger等人[9]在其首次引入的算法中使用棋盘;
• Park等人[24]的第二种算法使用多边形板;
• 而建议的算法应用虚拟盒来确定待校准设备的相对姿态。
Geiger等人的算法,在图表中标为“kitti”,至少需要许多棋盘的两个摄像机图像进行校准。该完全自动化的方法通过处理相机图像重建棋盘场景,然后尝试将点云与LiDAR传感器获取的点云合并。最后一步可能存在问题,并且高度依赖于校准环境。我们在作者网站上使用在线演示3获取校准数据。