主要内容

三维仿真中无人机导航的立体视觉SLAM

视觉大满贯是计算相机相对于周围环境的位置和方向,同时映射环境的过程。开发可视化SLAM算法并评估其在不同条件下的性能是一项具有挑战性的任务。最大的挑战之一是生成相机传感器的地面真实值,特别是在室外环境中。使用模拟可以在各种场景和相机配置下进行测试,同时提供精确的地面真相。

本示例演示了在城市街区场景中使用虚幻引擎®仿真为配备立体摄像机的无人机开发视觉SLAM算法。有关立体摄像机的视觉SLAM管道实现的更多信息[1],请参阅立体视觉同步定位与映射的例子。

搭建仿真环境

首先,在仿真环境中搭建一个场景,用于测试可视化SLAM算法。使用一个场景描述一个典型的城市街区,无人机作为测试车辆。

接下来,为无人机在场景中选择一个轨迹。你可以参考为虚幻引擎模拟选择路点(自动驾驶工具箱)实例以交互方式选择路径点序列,然后使用helperSelectSceneWaypoints函数为无人机生成参考轨迹。这个例子使用了一个记录的参考轨迹,如下所示:

负载参考路径%数据=负载(“uavStereoSLAMData.mat”);Pos = data.pos;%的位置orientEuler = data.orientEuler;%取向

UAVTrajectoryVSLAM.png

的UAVVisualSLAMIn3DSimulation金宝app配置了美国城市街区场景的Simulink®模型模拟三维场景配置(无人机工具箱)块。该模型在现场放置一架无人机使用仿真三维无人机车辆(无人机工具箱)块。由两个组成的立体照相机模拟3D摄像机(无人机工具箱)块连接到无人机。的对话框中模拟3D摄像机(无人机工具箱)块,使用越来越多的标签来调整相机的位置。使用参数选项卡来配置相机的属性,以模拟不同的相机。要估计要模拟的立体相机的固有特性,请使用使用立体相机校准器应用程序应用程序。

立体声相机参数focalLength = [1109, 1109];%(像素)principalPoint = [640, 360];%单位为像素[x, y]imageSize = [720, 1280];%以像素计[mrows, ncols]基线= 0.5;%(米)打开模型modelName =“UAVVisualSLAMIn3DSimulation”;open_system (modelName);

vSLAMModelUAV.PNG

实现立体视觉SLAM算法

助手立体视觉SLAM系统块实现了立体视觉SLAM管道,包括以下步骤:

  • 地图初始化:该管道首先使用视差图从立体摄像机生成的一对图像初始化3-D点的映射。左边的图像被存储为第一个关键帧。

  • 跟踪:地图初始化后,对于每对新的立体图像,通过将左图像中的特征与最后一帧中的特征进行匹配来估计相机的姿态。估计的相机姿态是通过跟踪当地地图来改进的。

  • 当地的地图:如果当前左侧图像被识别为关键帧,则根据立体视觉对的视差计算新的三维地图点。在这个阶段,通过调整相机姿势和3-D点,使用束调整来最小化重投影误差。

  • 循环关闭:通过使用特征袋方法将每个关键帧与之前的所有关键帧进行比较来检测循环。一旦检测到循环闭合,姿态图将被优化以优化所有关键帧的相机姿态。

算法的具体实现请参见立体视觉同步定位与映射的例子。

运行立体视觉SLAM仿真

模拟模型并可视化结果。的视频查看器块显示立体图像输出。的点云播放器显示重建的三维地图与估计的摄像机轨迹。

如果~ ispc错误(虚幻引擎模拟仅支持微软金宝app+ char(174“Windows”+ char(174“。”);结束设置随机种子以获得一致的结果rng (0);%运行模拟sim (modelName);

{

循环边在关键帧:2和91之间添加

stereoImageUAV.png

关闭模型。

close_system (modelName);

参考文献

[1]穆尔·阿塔尔,劳尔·胡安·D. Tardós。ORB-SLAM2:用于单眼、立体声和RGB-D相机的开源SLAM系统。IEEE机器人汇刊33岁的没有。5(2017): 1255-1262。