链接:
Stereo Visual Simultaneous Localization and Mapping - MATLAB & Simulink - MathWorks 中国
摘要
视觉同时定位与地图构建(vSLAM)是指在构建环境地图的同时,计算相机相对于其周围环境的位置和方向的过程。该过程仅使用相机的视觉输入。vSLAM的应用包括增强现实、机器人技术和自动驾驶。
vSLAM可以通过仅使用单目相机来实现。然而,由于单目相机无法准确计算深度,地图的尺度和估计的轨迹在时间上会不断漂移。此外,为了引导系统,需要多个视角来生成初始地图,因为它无法从第一帧进行三角测量。使用立体相机可以解决这些问题,并提供更可靠的vSLAM解决方案。
本示例演示了如何从立体相机处理图像数据,构建室外环境的地图,并估计相机的轨迹。示例使用ORB-SLAM2 [1]算法的一个版本,该算法基于特征,并支持立体相机。
Overview of Processing Pipeline
双目vSLAM的流程与单目vSLAM的流程在“单目视觉同时定位与地图构建”示例中非常相似。主要区别在于,在地图初始化阶段,3D地图点是从同一立体图像对的一对立体图像中创建的,而不是来自不同帧的两个图像。
- Map Initialization: 流程首先通过使用视差图从一对立体图像中初始化3D点的地图。左图像被保存为第一个关键帧。
- Tracking: 一旦地图初始化完成,对于每一对新的立体图像,通过将左图像中的特征与最近的关键帧中的特征进行匹配,估计相机的姿态。估计的相机姿态通过跟踪局部地图进行细化。
- Local Mapping: 如果当前的左图像被识别为关键帧,新的3D地图点将通过立体图像对的视差计算得到。在这个阶段,使用束调整来通过调整相机姿态和3D点来最小化再投影误差。
- Loop Closure: 通过使用特征包的方法,将每个关键帧与所有之前的关键帧进行比较,检测回环。一旦检测到回环闭合,将优化位姿图以细化所有关键帧的相机姿态。
Download and Explore the Input Stereo Image Sequence
本示例中使用的数据来自多伦多大学航空航天研究所提供的UTIAS长期定位和建图数据集。您可以通过Web浏览器下载数据到一个目录,或者通过运行以下代码来获取数据:
dataFolder = [fullfile(pwd), filesep, 'stereoImageData'];
zipFileName = [dataFolder, filesep, 'run_000005.zip'];
folderExists = exist(dataFolder, 'dir');
% Create a folder in the current directory to save the downloaded file
if ~folderExists
mkdir(dataFolder);
disp('Downloading run_000005.zip (818 MB). This download can take a few minutes.')
!wget ftp://asrl3.utias.utoronto.ca/2020-vtr-dataset/UTIAS-In-The-Dark/run_000005.zip -P ./stereoImageData -nv
% Extract contents of the downloaded file
disp('Extracting run_000005.zip (818 MB) ...')
unzip(zipFileName, dataFolder);
end
--------------------------------------------
多伦多大学航空航天研究所在2020年公开的双目SLAM数据集
UTIAS Long-Term Localization and Mapping Dataset
--------------------------------------------
连接:ASRL // In the Dark and Multiseason (utoronto.ca)
Hardware
这两个数据集是在Clearpath Robotics Grizzly机器人实用车辆上进行的采集。一台Point Grey Bumblebee XB3立体相机被刚性地安装在Grizzly车辆上的支架上。XB3相机提供了0.24米的基线和512 x 384的分辨率。完整的立体图像流以16 Hz的频率采集,但已经进行了降采样,约每0.2米行驶提供一个立体关键帧。在黑暗数据集的夜间穿越过程中,车辆下方刚性安装了前灯,用于照亮场景。部分黑暗数据集的运行期间,GPS设备记录了低精度的GPS数据(尽管未用于辅助自主穿越)。
相机参数可以在camera_parameters.txt文件中找到。
描述车辆坐标系到相机坐标系的刚性变换矩阵,T_camera_vehicle,在transform_camera_vehicle.txt文件中给出。
描述车辆坐标系到GPS坐标系的刚性变换矩阵,T_gps_vehicle,在transform_gps_vehicle.txt文件中给出。
POSE GRAPH(位姿图)
要想使用数据集,首先下载Teach run、run_000000以及其他所需的重复运行。Teach run中的关键帧已经通过视觉里程计定位到下一个Teach run的关键帧。所有重复运行的关键帧都通过视觉定位回到Teach run。数据集中任意两个顶点之间的相对变换可以通过穿过Teach run的位姿链来找到。
注意:在位姿图中拓扑上相近的顶点之间的变换可以被认为是非常准确的,但是在远离的顶点之间的变换不应被依赖。
下图展示了位姿图的形式,其中点表示顶点,箭头表示变换。顶点ID元组中的第一个数字表示运行编号,第二个数字表示在该运行中的位姿编号。
Helpful Tools
本节为每个运行提供单独的压缩文件,其中包含立体图像以及转换、时间戳和GPS测量(如果有的话)的文本文件。还提供了Python下载脚本,以帮助下载大量数据集。在下载之前,还提供了每个运行的视频预览,以快速查看天气和光照条件。注意:Multiseason数据集中的一些运行不构成完整的循环。
重要提示:此数据集提供ftp下载链接。一些浏览器不再默认启用ftp链接,如果您想使用浏览器下载,需要更改浏览器的设置。使用wget命令或下载脚本是避免使用浏览器下载的替代方法。
跳转到Multiseason(多季节数据集)。
场景类型 | 序列起止号 | 备注 |
IN THE DARK | 000000-000038 | 黑暗的场景 |
MULTISEASON | 000000-000135 | 包含春、夏、秋、冬和上午、中午、下午的组合 |