主要内容

scansAndPoses

提取扫描和相应的姿势

描述

例子

扫描提出了= scansandpose (slamObj对象使用的扫描lidarSLAM对象作为lidarScan对象,以及它们相关的[x y theta]的基本姿态图中的姿态slamObj

扫描提出了= scansandpose (slamObjnodeid返回特定节点id的扫描和姿态。要获得节点id,请参阅底层poseGraph对象slamObj为节点id。

例子

全部折叠

使用一个lidarSLAM对象迭代添加和比较激光雷达扫描,并构建机器人轨迹的优化姿态图。要从相关的姿势和扫描中获取占用图,请使用buildMap函数。

加载数据并设置SLAM算法

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

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

为了建立SLAM算法,需要指定激光雷达的范围、地图分辨率、环路闭合阈值和搜索半径。针对特定的机器人和环境调整这些参数。创建lidarSLAM对象使用这些参数。

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

迭代添加扫描

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

i = 1:数字(扫描)addScan(slamObj,扫描{i});如果rem(i,10) == 0 show(slamObj);结束结束

图中包含一个轴。坐标轴包含121个line类型的对象。

查看占用率图

将所有扫描添加到SLAM对象后,构建一个occupancyMap通过调用映射buildMap扫描和摆姿势。使用与SLAM对象相同的映射分辨率和最大范围。

[scansSLAM,pose] = scansandpose (slamObj);occMap = buildMap(扫描slam,姿势,分辨率,maxRange);图显示(occMap)“车库占用图”

图中包含一个轴。标题为Occupancy Map of Garage的轴包含一个image类型的对象。

输入参数

全部折叠

激光雷达SLAM对象,指定为lidarSLAM对象。对象包含SLAM算法参数、传感器数据和用于构建地图的底层姿态图。

姿态图中的节点id,指定为正整数。节点以连续的ID号添加到姿态图中。要获得节点id,请参阅底层poseGraph对象slamObj为节点id。

输出参数

全部折叠

激光雷达扫描读数,返回为lidarScan对象。

姿态为每次扫描,返回作为n的-乘3矩阵[x y theta]向量。每一行都是一个对应于扫描的姿势扫描

扩展功能

R2019b引入