主要内容

使用LIDAR扫描实现同时定位和映射(SLAM)

此示例演示了如何使用姿势图优化在收集的LIDAR扫描上实现同时定位和映射(SLAM)算法。此示例的目标是使用LIDAR扫描构建环境的地图,并检索机器人的轨迹。

为了构建环境的地图,SLAM算法逐渐处理LIDAR扫描并构建链接这些扫描的姿势图。机器人通过扫描匹配识别先前访问的位置,并且可以沿其移动路径建立一个或多个环闭合。SLAM算法利用循环闭合信息来更新地图并调整估计的机器人轨迹。

从文件加载激光扫描数据

加载由在室内环境中从移动机器人收集的激光扫描组成的下采样数据集。每两个扫描之间的平均位移约为0.6米。

offlineslamdata.mat.文件包含扫描可变,其中包含此示例中使用的所有激光扫描

加载('offlineslamdata.mat');

提供了用于说明性目的的机器人的平面图和近似路径。此图像显示映射的相对环境以及机器人的近似轨迹。

运行SLAM算法,构建机器人的优化地图和绘图轨迹

创建一个Lidarslam.对象并设置地图分辨率和最大LIDAR范围。此示例使用ClearPath Robotics™的Jackal™机器人。机器人配备了SICK™TIM-511激光扫描仪,最大范围为10米。设置略小于最大扫描范围(8M)的最大LIDAR范围,因为激光读数在最大范围内的近距离更准确。将网格图分辨率设置为每米的20个单元格,这给出了5厘米的精度。

maxlidarrange = 8;mapresolution = 20;Slamalg = Lidarslam(Mapresolution,MaxLidarrange);

以下循环闭合参数凭经验设置。使用更高的循环闭合阈值有助于抑制环路关闭识别过程中的误报。然而,请记住,高分匹配可能仍然是一个糟糕的匹配。例如,在具有类似或重复特征的环境中收集的扫描更有可能产生误报。使用较高的循环闭合搜索RADIUS允许该算法在循环闭合的电流姿势估计周围搜索更宽的地图。

Slamalg.LoopClosurethreshold = 210;Slamalg.LoopClosuresearchRadius = 8;

使用初始10扫描观察地图建筑过程

逐步添加扫描斜坡目的。如果添加到地图,则打印扫描号。如果扫描之间的距离太小,则对象拒绝扫描。首先添加前10个扫描以测试您的算法。

为了i = 1:10 [iscanacceped,loopclosureinfo,优化info] = addscan(斜坡,扫描{i});如果Isscancepted fprintf('添加了扫描%d \ n', 一世);结尾结尾
添加扫描1添加扫描2添加扫描3添加扫描4添加扫描5添加扫描6添加扫描7添加扫描8添加扫描9添加扫描10

通过绘制扫描和追踪的扫描来重建场景斜坡

数字;展示(史册);标题({'环境地图''初始10扫描的姿势图'});

图包含轴。具有初始10扫描的环境姿势图的标题图的轴包含11个类型的线。

观察循环闭合和优化过程的影响

继续在循环中添加扫描。当机器人移动时,应自动检测循环闭环。每当识别出环闭时,都会执行姿势图优化。输出优化in.有一个领域,缺乏形状,表示何时发生姿态图形优化。

每当识别循环闭合并在视觉上验证结果时,请绘制扫描并姿势。该图显示了第一环闭合的覆盖扫描和优化的姿势图。作为红色链路添加环形闭合边缘。

firsttimelcdetected = false;数字;为了i = 10:长度(扫描)[iscanacceped,loopclosureinfo,优化info] = addscan(斜坡,扫描{i});如果〜Isscanceped继续;结尾%可视化第一个检测到的循环关闭,如果要查看%完整的地图构建过程,删除以下IF条件如果OptimizationInfo.isperformed &&〜Firsttimelcdeted Show(Slamalg,'姿势''离开');抓住;展示(Slamalg.70707apraph);抓住离开;firsttimelcdetected = true;drawn结尾结尾标题('第一个循环关闭');

图包含轴。标题第一环闭合的轴包含42个类型的类型,文本。

可视化机器人的构造地图和轨迹

绘制所有扫描后的最终构建的地图斜坡目的。以前的为了尽管仅绘制初始环路闭合,但循环应该添加所有扫描。

图显示(斜坡);标题({'环境的最终建造地图''机器人的轨迹'});

图包含轴。带有标题最终构建地图的机器人环境轨迹的轴包含73个类型的类型。

与原始平面图相比,目视检查内置地图

扫描和姿势图的图像覆盖在原始平面图上。您可以看到地图在添加所有扫描并优化姿势图后匹配原始楼层平面匹配。

构建占用网格图

优化的扫描和姿势可用于生成一个占领子,这代表了作为概率占用网格的环境。

[扫描,优化] = ScanSandpose(Slamalg);地图= buildmap(扫描,优化,mapresolution,maxlidarrange);

可视化填充激光扫描和优化的姿势图填充的占用网格图。

数字;显示地图);抓住展示(Slamalg.707apraph,'ids''离开');抓住离开标题('占用网格地图使用LIDAR Slam'建造');

图包含轴。使用LIDAR SLAM构建的标题占用网格映射的轴包含4个类型图像,线路。