主要内容

Lidarslam.

使用LIDAR扫描执行本地化和映射

描述

Lidarslam.类对LIDAR扫描传感器输入执行同时定位和映射(SLAM)。SLAM算法采用LIDAR扫描,并将它们附加到底层姿态图中的节点。然后,算法将扫描匹配与扫描相关联。它还搜索循环封闭,其中扫描重叠先前映射区域,并优化姿势图中的节点姿势。

创建

描述

懒j= Lidarslam.创建一个LIDAR SLAM对象。默认占用映射大小为每米为20个单元格。每个激光扫描扫描的最大范围为8米。

例子

懒j= Lidarslam(mapresolution.maxlidarrange.创建一个LIDAR SLAM对象并设置mapresolution.maxlidarrange.基于输入的属性。

懒j= Lidarslam(mapresolution.maxlidarrange.,maxnumscans)指定生成代码时允许的接受扫描数的上限。maxnumscans.是一个正整数。仅在生成代码时才需要此扫描限制。

特性

展开全部

连接扫描的底层姿势图,指定为a姿势图目的。添加扫描Lidarslam.更新此姿势图。找到循环闭环时,使用姿势图优化FCN.

占用网格图的分辨率,指定为每米细胞中的正整数。指定施工的地图分辨率。

LIDAR传感器的最大范围,指定为以米为单位标量。指定构造的最大范围。

姿态图优化函数,指定为函数句柄。默认情况下,算法调用优化术照片.功能。要指定自己的优化方法,该类需要函数签名是:

[更新,stat] = myoptimizationfcn(posegraph)
姿势图是A.姿势图目的。更新是一个N- 3载体[x y theta]在顺序节点ID顺序中列出的姿势。统计是一个包含a的结构ResidualError.作为正标量的领域。使用统计结构包括与优化相关的其他信息。

从扫描匹配算法接受循环闭环的分数阈值,指定为正标量。较高的阈值对应于更好的匹配,但得分基于传感器数据而变化。

搜索循环闭合检测的半径,指定为正标量。增加这一半径通过增加搜索时间来影响性能。根据您的环境和预期的车辆轨迹调整此距离。

查找循环闭合的尝试次数,指定为正整数。通过增加搜索时间,增加尝试次数会影响性能。

允许自动回滚添加的回路闭合,指定为真的要么错误的。SLAM对象跟踪返回的残余错误优化FCN.。如果它检测到残余错误和此属性的突然变化真的,它拒绝(滚动)环闭合。

接受触发优化的循环闭合数指定为正整数。默认情况下,姿势图每次都优化Lidarslam.添加循环闭合。

处理扫描所需的姿势的最小变化,指定为a[翻译旋转]向量。计算新添加扫描的相对姿势改变是计算为的[x y theta]。如果翻译XY.- 旋转或旋转θ.超过这些门槛,Lidarslam.对象接受扫描并添加姿势添加到姿势图

扫描注册方法,指定为字符向量。

笔记

使用相位相关方法需要图像处理工具箱™。

对象功能

addscan. 将扫描添加到Lidar Slam Map
复制 复制LIDAR SLAM对象
removeloopclosures. 从姿势图删除环形封闭
ScanSandpose. 提取扫描和对应的姿势
显示 情节扫描和机器人姿势

例子

全部收缩

用一个Lidarslam.对象迭代地添加和比较LIDAR扫描并构建机器人轨迹的优化姿势图。要从相关的姿势和扫描中获取占用地图,请使用Buildmap.功能。

加载数据并设置SLAM算法

加载单元格数组Lidarscan.对象。LIDAR扫描由ClearPathRobotics®的哈士奇®机器人的停车车库收集。通常,LIDAR扫描以高频拍摄,并且每个扫描都不需要SLAM。因此,通过仅选择每40次扫描来扫描扫描。

加载Garage_fl1_southend.mat.扫描扫描=扫描(1:40:结束);

要设置SLAM算法,请指定LIDAR范围,地图分辨率,循环闭合阈值和搜索半径。调整特定机器人和环境的这些参数。创造Lidarslam.对象具有这些参数。

maxrange = 19.2;%仪表分辨率= 10;每米%细胞Slamobj = Lidarslam(分辨率,maxrange);slamobj.loopclosurethreshold = 360;slamobj.loopclosuresearchradius = 8;

迭代地添加扫描

用一个为了循环,将扫描添加到SLAM对象。该对象使用扫描匹配来将每个添加的扫描比较到先前添加的扫描。为了改进地图,每当检测到环路时,对象会优化姿势图。每10个扫描,显示存储的姿势和扫描。

为了i = 1:numel(扫描)addscan(Slamobj,Scans {i});如果REM(i,10)== 0 show(slamobj);结尾结尾

图包含轴。轴包含121个类型的类型。

查看占用地图

将所有扫描添加到Slam对象后,构建一个占领子通过呼叫地图Buildmap.随着扫描和姿势。使用与Slam对象一起使用的相同地图分辨率和最大范围。

[Scansslam,Pose] = ScanSandpose(Slamobj);orcomap = buildmap(Scansslam,Pose,分辨率,maxrange);图显示(orcomap)标题('车库的占用地图'

图包含轴。带有标题占用车库地图的轴包含类型图像的对象。

更多关于

展开全部

参考

[1] Hess,Wolfgang,Damon Kohler,Holger Rapp和Daniel Andor。“2D LIDAR SLAM中的实时循环关闭。”2016年IEEE机器人与自动化国际会议(ICRA)。2016年。

扩展能力

在R2019B中介绍