1.1 研究背景
同时定位和建图(SLAM)是机器人和自主导航中的一个重要领域。它是指机器人在未知环境中移动并使用其传感器和里程计信息构建环境地图并同时估计其在此地图中位置的过程。SLAM对于机器人系统的自动操作是不可或缺的,如室内的自动扫地机器人与室外复杂环境下的自动驾驶汽车。使用像LiDAR和Kinect这样的复杂3D传感器进行SLAM目前已经有了较为成熟的技术方案,尤其是在大多数的室内环境中进行SLAM已经有了比较完善的方法[1]。然而,这些3D传感器诸如LiDAR的高成本和Kinect的有限识别范围之类的限制,使得LiDAR不能用于低成本的SLAM系统而Kinect则难以用于户外场景。因此,视觉SLAM(一个或两个2D摄像机用作传感器)仍然是一个很受欢迎的研究领域。但同时这也是非常具有挑战性的,因为缺少直接的3D信息,所以场景的3D结构必须通过从不同视角拍摄的多个图像中提取特征来进行推断。但是有时即使在存在3D传感器的情况下也需要来自相机的丰富视觉信息进行环闭检测。所以如果通过相机获得的3D信息也可以用于地图生成和定位,则可能大大的提高系统的性能。
ORB-SLAM [2][3]是一种较为成熟的视觉SLAM方案,能够仅使用单目摄像机创建基于点云的地图,在复杂的室外环境下也能有较好效果。虽然ORBSLAM获得的稀疏点云可以用于获得环境的3D结构,但是对于使用需要2D栅格地图[4]作为输入的路径规划和导航算法而言,这种地图并不能起到作用。ORB SLAM产生的点云是稀疏的,这使得其难以生成包含大部分障碍的栅格图,这些栅格图可以在自由空间中为机器人提供足够的连续性,以保证路径规划的顺利进行。该项目旨在通过使用ORB SLAM产生的3D点云实时构建2D栅格图的方法来解决稀疏点云不能用于导航的问题。栅格地图应该足以使ROS [5]的标准导航包使用它来生成导航命令,该命令可以允许机器人(实体或虚拟)跟踪ORB SLAM生成的摄像机轨迹。
Santana等人基于颜色将图片中的区域分为不同的连通域,然后使用由SLAM产生的homograhy矩阵对同一个连通域进行建图。但是这种方法对计算资源的需求比较大,对于需要通过视觉实时建图的系统来说具有较大的困难。另外一种构建地图的方法是将3D的点云信息转化为3D的激光雷达数据,然后调用ROS包,将得到的数据输入到Gmapping节点中。但是这种方法会带来额外的不确定性,对于建图的稳定性具有较大的挑战。
Goeddel等人最近的一项工作[6]提出了一种从3D LiDAR数据中提取2D地图以进行定位的方法。它的工作原理是通过对估计点所在的平面斜率进行阈值处理,对每个点施加垂直度约束。为了区别出合适大小的障碍物,它使用两个不同的阈值,一个较小的阈值(15度)用于检测导航过程中是否有危险,而较大的一个(80度)用于检测是否会发生碰撞。对障碍检测施加了两个额外的限制以进一步减少错误概率:1.只考虑那些z轴长度在设置范围内的点;2.该点的垂直线中包含的点云的数量需要超过阈值。Huesman [7]在将3D点云转换为2D栅格图的过程中也是基于斜率阈值法确定障碍物这一核心思想,本次项目中也使用的方法也将此作为检测虚假障碍的方法之一。
1.2 主要研究内容
本文首先分析了普通单目相机的内外参数,并对使用相机进行了标定。然后介绍了视觉SLAM中几种算法,接着在ORBSLAM2构建的3D点云图上实现了二维地图的构建。并通过实验验证了ORBSLAM2的效果以及构建2D地图的实时性以及准确性。
2.1 相机的内参与畸变
相机将3D世界中的真实点转换到二维图像平面上,为了从图像中复原出3D世界的真实点,我们需要用到相机模型。其中最常用的相机模型是针孔模型,如图2.1。
在图2.1中,右边为3D世界真实点,左边为相机获得的图像平面上的点。O为模型中的针孔[8]。由于图像是二维平面,因此还有Y坐标,根据相似三角形,有:
在这里,图像平面不能表示图像的像素平面坐标,因此,定义像素坐标系o-u-v,而像素坐标是可以直接在图像文件中获得的。通常,像素平面的坐标原点为图像左上角,而图像平面的坐标原点为图像中心,因此两个坐标系存在一个尺度变换和一个平移变换,像素平面o-u-v和图像平面O-X’-Y’的转换关系为:
简化模型,转换坐标系,去掉式(2-1)中的负号,并代入式(2-2),有:
转化为矩阵形式有:
在式(2-4)中,中间的3×3的矩阵被称为相机的内参矩阵K,内参矩阵反映了3D真实点到图像像素平面的变换关系。通常,相机在出厂后就已经标定好内参了,但是,由于一些外力和机械因素,内参可能会有些许变化。另一方面,当选择让相机输出不同分辨率的时候,内参矩阵也会发生变化,这种变化一般是与分辨率成线性关系的。
2.2 相机外参
使用旋转矩阵R与平移矩阵t表示这一变化如式2.5。
其中T表示旋转平移矩阵,也就是相机的外参。相机的外参也就是相对于世界坐标系的欧氏变换矩阵,它描述了相机相对于世界坐标系的相对位置和姿态,也就是平移和旋转量。我们要做的定位系统实际上就是为了实时求得相机的外参矩阵,如何求解这个矩阵是整个系统的核心问题。
2.3 相机标定
相机标定已经有了较为成熟的方案,本文采用张氏标定法进行相机内外参数的标定。”张正友标定”是指张正友教授1998年提出的单平面棋盘格的摄像机标定方法[1]。文中提出的方法介于传统标定法和自标定法之间,但克服了传统标定法需要的高精度标定物的缺点,而仅需使用一个打印出来的棋盘格就可以。同时也相对于自标定而言,提高了精度,便于操作。因此张氏标定法被广泛应用于计算机视觉方面。
本文基于opencv,采用张氏标定法对相机进行标定