主要内容

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

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

这个例子演示了在城市街区场景中使用虚幻引擎®模拟为配备立体相机的无人机开发一个视觉SLAM算法。有关立体相机视觉SLAM管道实现的更多信息[1],请参阅立体视觉同步定位与测绘(计算机视觉工具箱)的例子。

设置仿真环境

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

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

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

的UAVVisualSLAMIn3DSimulation万博1manbetxSimulink®模型配置了美国城市街区场景使用模拟3D场景配置块。模型将无人机放置在场景使用仿真3D无人机车辆块。由两个人组成的立体相机模拟3 d相机块被附加到无人机上。的对话框中模拟3 d相机块,用越来越多的选项卡以调整摄像机的位置。使用参数选项卡来配置摄像机的属性,以模拟不同的摄像机。要估计你想要模拟的立体相机的本质,使用使用立体相机校准应用程序(计算机视觉工具箱)应用程序。

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

实现立体视觉SLAM算法

Helper Stereo Visual SLAM System模块实现了立体视觉SLAM管道,包括以下步骤:

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

  • 跟踪一旦地图被初始化,对于每一对新的立体图像,相机的姿态是通过匹配左边图像的特征到最后一个关键帧的特征来估计的。通过跟踪局部地图,对估计的相机姿态进行优化。

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

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

算法的具体实现请参见立体视觉同步定位与测绘(计算机视觉工具箱)的例子。

运行立体视觉SLAM仿真

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

如果~ ispc错误(“虚幻引擎模拟仅支持微软”万博1manbetx+ char (174) +“Windows”+ char (174) +“。”);结束%运行仿真sim (modelName);

Loop edge added between keyframe: 5 and 356 Loop edge added between keyframe: 3 and 356 Loop edge added between keyframe: 4 and 358 Loop edge added between keyframe: 5 and 358 Loop edge added between keyframe: 6 and 358

关闭模式。

close_system (modelName);

参考文献

murr - artal, Raul和Juan D. Tardós。ORB-SLAM2:用于单眼、立体声和RGB-D相机的开源SLAM系统。IEEE机器人学报33岁的没有。5(2017): 1255 - 1262。