Landmark
**地图点(landmark)**是环境中一个固定、可重复观测的特征,由SLAM系统进行估计并存储在其地图中。在视觉SLAM中,典型的地图点是一个3D点:在多幅图像中检测到的一个关键点,被三角化为3D坐标,并关联一个描述子以便再次识别。地图点的集合就是地图(在稀疏、基于特征的系统中)。
地图点连接了SLAM问题两个部分之间的循环:
- 定位使用地图点:给定已知3D地图点的2D观测,可以估计相机位姿(2D-3D对应关系/PnP)。观测模型为——地图点通过位姿投影后应落在我们观测到的位置。
- 建图创建地图点:根据位姿和2D-2D对应关系,三角化出新的地图点并加入地图。
这种相互依赖——位姿需要地图点,地图点需要位姿——正是SLAM成为联合估计问题的原因:在因子图中,位姿和地图点都是变量节点,通过观测因子相互连接,光束法平差将它们联合优化。
参数化方式
最直观的表示——欧氏坐标——并不是唯一的选择,也并非总是最好的:
- 欧氏XYZ坐标:简单、最小化,一旦一个点被良好三角化且具有足够视差,就是理想选择。
- 逆深度(Inverse depth):将该点表示为相对于一个*锚点(anchor)*相机的观测方向加逆深度。远处的点()和视差很小时观测到的点在欧氏空间中具有高度不对称的深度不确定性,但在逆深度表示下接近高斯分布——因此估计器可以从第一次观测起就使用远处特征(它们非常适合约束旋转),远早于其深度被确定之前。系统通常在视差使某点条件良好之后,再将其切换为XYZ表示。
数据关联
将一个观测匹配到正确的地图点是前端的核心职责,标准方法叠加了若干层过滤:
- 投影搜索:用当前位姿估计预测地图点应出现的位置,只在该预测周围的搜索窗口内考虑关键点。
- 外观检查:地图点存储的描述子与候选关键点之间的描述子距离必须小(并通过比率/次优测试)。
- 兼容性检查:观测必须与地图点的尺度范围(金字塔层级)和平均观测方向一致。
- 统计门限:估计完成后,对重投影残差进行卡方检验,剔除与预测不确定性不一致的关联。
错误的数据关联——将一个观测匹配到错误的地图点——是SLAM中最具破坏性的错误之一,这就是为什么鲁棒匹配和外点剔除会受到如此多关注。
地图点的生命周期
一个实用的地图点携带的信息不止坐标。ORB-SLAM风格系统中一个典型的地图点会存储:其3D位置、一个代表性描述子(用于匹配)、观测方向统计(从哪些角度可见)、尺度/深度范围(在哪些图像金字塔层级可被检测到),以及用于剔除不可靠点的记录信息(观测次数、外点比例)。地图点管理是保持真实系统健康运行的重要组成部分:
- 创建:只有在具有足够视差、在两个视图中深度均为正、重投影误差较小时才进行三角化——否则新建的点只是伪装成地图点的噪声。
- 剔除:新创建的点必须迅速证明自己的价值(在理应能观测到它的帧中,以最小比例被找到,并收集到最少数量的观测)否则会被删除。
- 融合:当两个地图点被发现实际上是同一个物理点时(例如回环检测之后),它们会被合并,观测记录也会合并。
地图点不一定是点。已有系统使用线和平面(在人造场景中具有更丰富的几何信息),以及物体级地图点(带有位姿的已识别物体),用检测复杂度换取更具描述性、更具语义意义的地图。无论采取何种形式,其核心要求相同:必须是静态的(或对非静态情况进行特殊处理)、可重复观测的,并且足够可区分以实现可靠的数据关联。
对SLAM的意义
“地图点”是将里程计变为SLAM的关键概念:因为地图点是持久存在的,在长距离漫游之后重新观测到它,能够将当前位姿与旧地图相互约束,从而实现漂移校正、回环检测和重定位。当你阅读任何基于特征的系统的论文时,其地图点的设计——它们存储什么、如何被创建和剔除、如何被匹配——就是其地图的设计。