SLAM示例介绍

DSP示例包基于Cadence提供的SLAM示例包开发,可上板或仿真运行,本章将为您简单介绍SLAM DSP示例流程。

原理介绍

SLAM(simultaneous localization and mapping),也称为CML(Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。这里说的地图,是用来在环境中定位,以及描述当前环境以便于规划航线的一个概念;它通过记录以某种形式的感知获取的信息,用以和当前的感知结果相比较,以支撑对现实定位的评估。问题可以描述为:将一个机器人放入未知环境中的未知位置,是否有办法让机器人一边逐步描绘出此环境完全的地图,同时一边决定机器人应该往哪个方向行进。

SLAM 实现流程

视觉SLAM应用示例基于开源的ORB_SLAM2实现。然而,该应用程序仅提取了最基本的功能,并在各种功能上进行了简化和修改。这些修改旨在适应Vision DSP上的SIMD实现,以提高循环性能并减少对系统内存的频繁随机访问。此外,还在各个模块中增加了用于剔除异常值的额外功能。

同时,SLAM应用程序还支持“双目立体”与“RGBD”输入。然而,其方法与ORB_SLAM2的方法有显著不同。ORB_SLAM2使用额外信息(双目立体视觉中的右图像和RGBD中的深度信息)来减少重投影误差或代价函数。相反,应用程序使用了一种专有方法,利用这些额外的信息来执行异常值剔除。

下图展示了SLAM应用程序的模块图。该SLAM应用程序可以接受单目、双目立体或RGBD输入。在RGBD输入的情况下,灰度单目图像和深度图像被作为输入提供。然后从输入图像中检测关键点或角点,并为这些关键点创建描述符,这些描述符用于匹配。在双目立体输入的情况下,深度信息从双目立体图像中生成。对于单目输入,在初始状态下,SLAM应用程序尝试找到一组两个关键帧以获得初始的3D点集和位姿。对于RGBD和立体输入,3D点在第一帧就会生成,并且应用程序会初始化。一旦应用程序初始化完成,它将进入跟踪状态,在每一帧中使用已知的3D点及其观察到的投影通过位姿优化来估计相机的位姿。根据条件,关键帧(KF)会被插入以生成新的3D点集,局部捆绑调整则会进一步优化估计的3D点和位姿。

slam block