视觉传感器体积小重量轻、价格相对低廉,同时能够提供丰富的信息供定位、感知等算法模块使用,因此在机器人和自动驾驶系统中的得到了广泛应用。作为视觉定位系统的重要组成部分,基于视觉传感器的同时定位和建图算法(SLAM)应用广泛,在学术界和工业界都得到了很多关注。具体来说,在自动驾驶系统中,视觉SLAM可以在地图不可靠、GPS不稳定情况下(例如城区辅助驾驶)提供可靠的位姿估计和周围环境信息。同时,相对于激光雷达等传感器,相机价格较低,配合视觉定位和感知算法,可以以低成本实现智能驾驶功能。
但是,视觉SLAM系统经常被人诟病的一点是鲁棒性。基于视觉的位姿估计的基本原理是追踪匹配图像中明显的视觉特征,因此过曝、弱纹理、运动模糊等问题一直是视觉SLAM系统实际应用中的痛点。在研究和工程实践中,多传感融合、相机参数控制等手段都可以用来提高视觉SLAM系统的鲁棒性;另一方面,目前的自动驾驶系统往往都配备了多个相机形成环视视觉系统,而合理利用多相机系统可以很大程度上提升SLAM系统的性能,因此本文将着重介绍在多相机SLAM系统的原理、和一般单目/双目系统的区别及其在自动驾驶系统中的应用。
一、从单相机到多相机的拓展
自2004年视觉里程计技术被正式提出以来,视觉SLAM技术经过长期发展,其基础理论已经相对完善(如立体几何、非线性优化和滤波等)。在工程实践方面,研究者也总结出一套相对通用的系统框架:粗略来说,视觉SLAM系统通常被划分为前端和后端,其中前端负责建立不同时刻图像之间的匹配关系并进行局部估计,保证系统的实时位姿输出,后端则负责在相对大范围内进行优化,保证系统的精度和全局地图一致性。从具体系统实现上来说,大部分工作都是针对单目或者双目相机进行的,因此我们最熟悉的一些技术实践不可避免是针对这两种相机配置进行设计的。
将单目/双目SLAM系统拓展到多相机SLAM系统时,前端-后端的系统框架一般可以沿用,但是需要对原有针对单目/双目的具体算法模块进行改进,使其适用于多相机配置,下面以MultiCol-SLAM为例进行说明。MultiCol-SLAM基于ORB-SLAM设计了多相机SLAM,在基础数据结构上将关键帧Keyframe的概念拓展到Multi-Keyframe(MKF),即不同相机在同一时刻观测的集合:
因此这里我们关注的不再是某个相机的位姿,而是图中body-frame的位姿,多个相机的观测都可以为估计body-frame的位姿服务。其他算法模块也需要针对MKF进行适配,首先需要通过非线性优化求解位姿的模块(例如Tracking中相对局部地图的定位、局部Bundle Adjustment)需要将body-frame的位姿作为求解变量并更改相应的cost,其次,一些常用的位姿求解器需要替换为支持多相机的版本,例如在重定位中使用Generalized P3P和PnP算法替代EPnP求解位姿初值。
从单相机绝对位姿估计(左)到多相机绝对位姿估计(右),其中f代表视觉观测。图取自OpenGV文档。
从MultiCol-SLAM的例子可以看出,将适用于单目/双目的SLAM系统拓展到多目整体来看是比较自然的:需要估计的位姿不再和相机绑定而是通过外参关联到多个相机,相应的算法模块也都可以比较容易地拓展到多相机系统。更一般地,从SLAM理论基础的角度来说,非线性优化和滤波的理论和工具相当灵活,可以方便地根据多相机配置进行适配,同时,针对多相机的几何视觉研究也相对成熟,常见的位姿求解问题基本都可以找到相应的工具。
但是,如果我们不仅仅满足于让多相机SLAM系统“跑起来”,而是想要实现一个鲁棒、泛用的多相机SLAM系统,就需要进一步考虑各个模块中引入多相机所带来的额外问题,而这些问题往往会对系统的整体性能有明显影响。下面对多目SLAM系统中的几个难点进行说明。
二、多相机SLAM中的难点
初始化
视觉SLAM初始化的目的是建立初始的3D点地图用于后续跟踪,直接影响SLAM系统的精度指标。对于单目和双目系统,分别通过5点法/planar homography和双目三角化进行初始化已经成为事实上的标准方法。但是,对于多目相机,由于相机的配置不确定,一套通用的初始化方法应当如何设计仍不明确。显然,相机的具体配置,尤其是相机之间是否有overlap,决定了合适的初始化流程。MultiCol-SLAM对多相机组中的每个相机都计算相对位姿、从中选择质量最好的一组得到粗略的3D点,再将这些3D点投影到其他相机中并利用所有观测进行联合优化,这种方法只适用于相机之间有overlap的情况。也有一些工作尝试通过分析相机之间的overlap情况来决定初始化的策略,可以对不同的多相机配置实现一定程度上的自适应,但是整体来说,通用鲁棒的多目相机初始化仍是一个开放的问题。
在线外参估计
和多传感融合算法一样,多相机SLAM算法也需要精确的相机间外参才能正常工作。离线标定虽然可以得到十分精确的结果,但是在系统运行过程中由于碰撞、震动等不可避免会出现外参的变化,尤其是对自动驾驶汽车来说,由于相机之间距离较大,外参甚至可能随着车体运动、负载状况的不同发生变化,因此系统在正常运行环境中(不依赖标定设备)对相机外参进行标定的能力比较重要,学界对此也有很多研究工作。一类工作是利用多个相机(单目或者双目组合)单独运行SLAM/SfM算法,再对不同相机的地图进行匹配融合,最后再通过联合优化得到外参;另一类工作是利用SLAM本身已有的非线性滤波或优化求解过程,将外参作为额外待估参数加入求解器进行估计,可以实时估计外参变化(激励充分时),例如有的提出一种MSCKF框架下的多相机、多IMU视觉惯性里程计,实现了对相机和IMU外参的在线估计;而针对自动驾驶平台上的多相机系统,也有人将相机之间的外参加入视觉SLAM的局部BA中进行估计。
原理上来说,上述方法和构建一般的状态估计问题差异不大,但是相较于离线标定问题,在线标定受限于系统的运行状况,需要额外注意当前数据是否足以准确估计外参(即系统是否有足够的激励,相应待估参数是否可观)。相关地,也有工作从数据的角度出发,自动选择信息量更大的数据对多相机外参进行估计。
特征选择
多个相机带来更多的观测数据,理论上来说总能带来更好的定位建图结果,但是也带来了更大的计算量。因此实际中经常需要面对的问题是,如何对丢弃一定的观测以减小计算量,同时对定位精度有较小的影响?启发式的方法可以起到一定的效果(例如视觉SLAM中经常用到的特征在图像上平均分布的技巧),但是往往不是最优的。因此一些研究工作提出了基于信息论的方法,粗略来说,是以一种数学上更严格的方法衡量丢弃观测后对系统的影响,例如利用Hessian矩阵的信息度量对多个相机中的特征进行选择,或者通过对特征分布的合理假设,简化Hessian矩阵的计算和多个相机的特征选择问题。本质上来说,特征选择是一种在尽量不影响求解结果的约束下,通过更改问题结构减小计算量的方法,这一方向的研究工作仍处于SLAM后端优化的研究前沿。
三、多相机SLAM在自动驾驶中的应用
自动驾驶平台上的多个相机往往覆盖车身周围360°的视角,能够利用全方向的视觉信息,因此如果能够充分利用这些相机,多相机视觉SLAM系统可以实现不同外部条件下鲁棒准确的位姿估计。在论文“Towards Robust Visual Odometry with a Multi-Camera System”中,作者设计了一种基于光度一致性的多目视觉SLAM系统,在配备有前、后、左、右四组双目相机的平台上进行测试,结果表明,如果能够利用全部四组双目相机,系统可以在不同光照条件下(白天、夜晚)稳定地工作,并保持较高的位姿估计精度。“ROVO: Robust Omnidirectional Visual Odometry for Wide-baseline Wide-FOV Camera Systems”一文则针对包含4个鱼眼相机的环视系统设计了基于特征点的视觉SLAM系统,实验结果表明在多相机SLAM系统中加入在线外参估计对系统性能有明显提升。
在自动驾驶平台上应用多相机SLAM系统同时也需要考虑自动驾驶汽车的特性。例如,自动驾驶汽车的运动自由度有限,并存在大量速度变化不大情况,这对某些参数的在线标定有一定影响,这一点在结合IMU搭建SLAM系统的时候需要尤其注意。另一方面,也可以利用车辆特有的性质减小状态估计的难度,例如通过离线实验识别出相机外参变化的可能模式(由具体相机安装方式决定),随后在在线外参标定中将这些模式作为约束,提高了在线标定的效率和精度,又如车道线作为结构性很强的特征,可以作为外参在线标定的重要线索。
自动驾驶平台上的感知系统往往也充分利用了多相机系统,可以提供丰富的语义信息,例如车道线和分割结果等,这些信息和传统视觉特征互为补充,可以作为多相机SLAM系统的重要输入。例如有的利用IPM图上提取的车道线信息构建地下车库的地图,为自动泊车提供定位功能,或者利用环视相机生成BEV视角下的分割结果,直接将该结果作为SLAM系统的输入,实现相邻帧的位姿估计和回环检测等功能。另外,特斯拉在AI Day 2022上也提到,在FSD中集成了多目视觉-惯性-轮速里程计,利用了神经网络输出的多种结果(特征、全景分割、地面等),实现了100Hz、漂移率在1%左右的位姿估计,该里程计输出的位姿和3D结构为下游自标注系统提供了输入。
四、总结
在视觉SLAM系统中引入多相机可以有效提高系统的鲁棒性和精度,具体到自动驾驶汽车,环视相机系统可以利用全方向的视觉信息,为视觉SLAM系统提供了很好的传感器配置。从具体算法来说,虽然视觉SLAM的理论基础相对成熟,但是实现一套效果优秀的多相机SLAM系统仍需要解决若干痛点,例如外参自标定、如何平衡计算量和精度等,这里既有工程上的挑战,也有待研究的问题。另外,自动驾驶汽车感知系统提供的语义信息可以作为多相机视觉SLAM系统的重要输入,如何将神经网络输入的语义信息和传统的非线性优化滤波有效结合(例如如何衡量语义输出的几何不确定度)仍是一个开放的问题。