buildMap

根据激光雷达扫描建立占用地图

描述

例子

地图= buildMap (扫描提出了mapResolutionmaxRange创建一个occupancyMap通过插入激光雷达绘制地图扫描在给定的提出了.指定结果映射的分辨率,mapResolution,以及激光雷达传感器的最大射程,maxRange

例子

全部折叠

buildMap函数接受激光雷达扫描读数和相关的姿势,以建立一个占用网格lidarScan对象和相关(x yθ)建立一个occupancyMap

装载扫描和姿态估计从传感器收集在一个停车场的机器人。将收集到的数据用lidarSLAM算法,该算法执行扫描匹配,以关联扫描和调整整个机器人轨迹的姿态。检查以确保扫描和姿势是相同的长度。

负载scansAndPoses.mat长度(扫描)= =(姿势)
ans =逻辑1

构建地图。指定扫描和姿态buildMap功能和包括所需的地图分辨率(10单元每米)和激光雷达的最大范围(19.2米)。每次扫描都在相关的姿势处添加,并更新占用网格中的概率值。

occMap = buildMap(扫描,姿势10 19.2);图显示(occMap)标题(《车库占用地图》

使用一个lidarSLAM目标迭代添加和比较激光雷达扫描,建立机器人轨迹的优化位姿图。要从相关的姿势和扫描中获得占用地图,请使用buildMap函数。

加载数据,建立SLAM算法

加载单元格数组lidarScan对象。激光雷达扫描是在ClearPath Robotics®公司的Husky®机器人的停车场收集的。通常,激光雷达扫描的频率很高,SLAM不需要每次扫描。因此,向下采样扫描只选择每40次扫描。

负载garage_fl1_southend.mat扫描扫描=扫描(1:结束);

设置SLAM算法,指定激光雷达距离、地图分辨率、环路闭合阈值和搜索半径。针对特定的机器人和环境调整这些参数。创建lidarSLAM对象的这些参数。

maxRange = 19.2;%米分辨率= 10;每米细胞百分比slamObj = lidarSLAM(分辨率,maxRange);slamObj。LoopClosureThreshold = 360;slamObj。LoopClosureSearchRadius = 8;

添加扫描迭代

使用一个循环,向SLAM对象添加扫描。对象使用扫描匹配将每个添加的扫描与先前添加的扫描进行比较。为了改进地图,对象在检测到循环闭合时优化姿态图。每10次扫描,显示存储的姿势和扫描。

addScan(slamObj,scans{i});如果if (result (i,10) == 0); / /返回结果结束结束

地图视图入住率

在将所有扫描添加到SLAM对象之后,构建一个occupancyMap通过调用地图buildMap通过扫描和姿势。使用与SLAM对象相同的地图分辨率和最大距离。

[scansSLAM,姿势]= scansAndPoses (slamObj);occMap = buildMap (scansSLAM、姿势、分辨率、maxRange);图显示(occMap)标题(《车库占用地图》

输入参数

全部折叠

用激光雷达扫描构建的地图,指定为单元阵列lidarScan对象。

激光雷达扫描的姿态,指定为n3矩阵。每一行是一个(x yθ)向量表示xy-扫描的位置和方向角度。

输出分辨率occupancyMapMap,指定为每米单元格的正整数。

激光雷达传感器的最大距离,指定为正标量,单位为米。分扫描超出此范围将被忽略。

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:(MapWidth, 10)

占用网格的宽度,指定为由逗号分隔的对组成的“MapWidth”一个正标量。如果不指定此值,地图将自动缩放以适应所有激光扫描。

占用网格的高度,指定为逗号分隔对,由“MapHeight”一个正标量。如果不指定此值,地图将自动缩放以适应所有激光扫描。

输出参数

全部折叠

占用地图,返回为occupancyMap对象。

介绍了R2019b