一、前言
本示例展示了如何使用从虚幻引擎®模拟环境中获取的图像数据开发可视化同步定位和映射(SLAM)算法。
视觉SLAM是计算摄像机相对于周围环境的位置和方向,同时映射环境的过程。开发可视化 SLAM 算法并评估其在不同条件下的性能是一项具有挑战性的任务。最大的挑战之一是生成相机传感器的地面实况,尤其是在户外环境中。使用仿真可以在各种场景和相机配置下进行测试,同时提供精确的地面实况。
此示例演示了如何使用虚幻引擎模拟为停车场景中的单眼或立体摄像机开发视觉SLAM算法。
二、在模拟环境中设置场景
使用模拟 3D 场景配置块设置模拟环境。选择内置的大型停车场场景,其中包含多个停放的车辆。视觉 SLAM 算法可匹配连续图像中的特征。要增加潜在要素匹配的数量,可以使用停放车辆子系统向场景添加更多停放车辆。要指定车辆的停车姿势,请使用该功能。如果选择更自然的场景,则不需要存在其他车辆。自然场景通常具有足够的纹理和特征多样性,适合特征匹配。
打开模型并添加停放的车辆
三、设置自我车辆和摄像头传感器
通过使用带有地面跟随块的模拟 3D 车辆,设置沿指定参考路径移动的自我车辆。相机变体子系统包含两种配置的相机传感器:单目和立体。在这两种配置中,摄像头都安装在车顶中心。您可以使用相机校准器或立体相机校准器应用来估计要模拟的实际相机的内部结构。此示例首先显示单目相机工作流,然后显示立体摄像机工作流。
四、可视化和记录传感器数据
运行模拟以可视化和记录传感器数据。使用视频查看器块可视化来自相机传感器的图像输出。使用“目标工作空间”块记录相机传感器的地面真实位置和方向。
五、利用记录数据开发单目视觉SLAM算法
使用图像评估单目视觉 SLAM 算法。该函数实现单目 ORB-SLAM 管道:
-
地图初始化:ORB-SLAM 首先初始化来自两个图像的 3-D 点地图。使基于 2-D ORB 特征对应关系计算相对姿态,并使用
三角测量
来计算 3-D 地图点。这两个帧作为关键帧存储在图像视图集
对象中。三维地图点及其与关键帧的对应关系存储在对象中。 -
跟踪:初始化地图后,对于每个新图像,该函数通过将当前帧中的特征与最后一个关键帧中的特征进行匹配来估计相机姿势。该函数通过跟踪本地地图来优化估计的相机姿势。
-
局部映射:如果当前帧被标识为关键帧,则用于创建新的三维地图点。在此阶段,用于通过调整相机姿势和 3D 点来最大程度地减少重投影错误。
-
闭环:通过使用功能袋方法将每个关键帧与所有先前的关键帧进行比较来检测每个关键帧的循环。检测到闭环后,将优化姿势图,以使用 导航工具箱功能优化所有关键帧的相机姿势。
六、根据实际情况进行评估
您可以根据从仿真中获得的地面实况评估优化的相机轨迹。由于图像是从单眼相机生成的,因此相机的轨迹只能恢复到未知的比例因子。您可以根据地面实况大致计算比例因子,从而模拟通常从外部传感器获得的比例因子。
七、立体视觉 SLAM 算法
在单目视觉SLAM算法中,使用单个相机无法准确确定深度。地图的比例和估计的轨迹是未知的,并且会随着时间的推移而漂移。此外,由于地图点通常无法从第一帧开始三角测量,因此引导系统需要多个视图才能生成初始地图。使用立体摄像头可以解决这些问题,并提供更可靠的视觉SLAM解决方案。该函数实现立体视觉 SLAM 管道。与单目管线的主要区别在于,在贴图初始化阶段,立体管线从同一帧的一对立体图像创建三维地图点,而不是从不同帧的两个图像创建它们。
八、提取立体图像
运行立体视觉 SLAM 算法
与单目视觉SLAM算法相比,立体视觉SLAM算法可以更准确地估计相机轨迹。
九、立体图像的密集重建
给定精细的相机姿势,您可以从与关键帧对应的立体图像中执行密集重建。
十、程序
使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)
程序有偿获取:评论区下留言,博主看到会私信你。