主要内容

occupancyMap3D

创建三维占用地图

描述

occupancyMap3D对象存储三维地图和地图信息。映射以概率值的形式存储在八叉树数据结构.该类处理任意环境,并根据观察输入动态扩展其大小。您可以将观测数据添加为点云或特定点云xyz位置。这些观测更新了概率值。概率值代表地点的占用率。八叉树数据结构适当地修剪数据,以保持内存和磁盘上的效率。

创建

描述

的核心= occupancyMap3D创建一个空的3-D占用图,没有观察值和默认属性值。

例子

的核心= occupancyMap3D (res以单元格/米为单位指定映射分辨率,并设置决议财产。

的核心= occupancyMap3D (res、名称、值)使用一个或多个名称-值参数指定属性。例如,“FreeThreshold”,0.25将单元格无障碍的阈值设置为概率值0.25。

属性

全部展开

网格分辨率(单元格/米),指定为标量。指定构造的分辨率。精度高于此值的插入观测值被四舍五入并应用于此分辨率。

将单元格视为无障碍的阈值,指定为正标量。低于此阈值的概率值被认为是无障碍的。

将单元格视为已占用的阈值,指定为正标量。高于此阈值的概率值被认为已占用。

概率值的饱和限制,指定为(最小最大)向量。高于或低于这些饱和度值的值被设置为最小值马克斯值。当合并多个观察时,这一特性减少了细胞的过饱和。

对象的功能

checkOccupancy 检查场地是否空着或有人
getOccupancy 获取位置的占用概率
膨胀 充气每个已占用的位置
insertPointCloud 在地图中插入三维点或点云观测
rayIntersection 找到射线和已占用地图单元格的交点
setOccupancy 设置位置的占用概率
显示 显示三维占用图
updateOccupancy 更新地点的入住率

例子

全部折叠

occupancyMap3Dobject在三维空间中存储障碍物,使用传感器观测来映射环境。创建地图并从点云中添加点来识别障碍。然后在地图中对障碍物进行充气,以确保障碍物周围的安全操作空间。

创建一个occupancyMap3D对象的地图分辨率为10格/米。

map3D = occuancymap3d (10);

定义一组3-D点作为一个姿势的观察[x y z qw qx qy qz].这个姿态是用于观察这些点的传感器,并以原点为中心。定义两组点来插入多个观测值。

姿态= [0 0 0 1 0 0 0];Points = repmat((0:0.25:2)', 1,3);points2 =[(0:0.25:2)“(2:-0.25:0)”(0:0.25:2)];maxRange = 5;

插入第一组点使用insertPointCloud.该函数使用传感器姿态和给定点将观测值插入到地图中。所显示的颜色与点的高度相关,仅用于说明目的。

insertPointCloud (map3D姿势,点,maxRange)显示(map3D)

图中包含一个轴对象。标题为Occupancy Map的axes对象包含一个patch类型的对象。

插入第二组点。传感器姿态(原点)和这些点之间的射线与之前插入的点重叠。因此,传感器和新点之间的空闲空间被更新并标记为空闲空间。

insertPointCloud (map3D姿势,points2 maxRange)显示(map3D)

图中包含一个轴对象。标题为Occupancy Map的axes对象包含一个patch类型的对象。

膨胀地图,为障碍物周围的安全操作添加缓冲区。定义车辆半径和安全距离,并使用这些值的和来定义地图的膨胀半径。

vehicleRadius = 0.2;safetyRadius = 0.3;inflationRadius = vehicleRadius + safetyRadius;充气(map3D inflationRadius);显示(map3D)

图中包含一个轴对象。标题为Occupancy Map的axes对象包含一个patch类型的对象。

算法

全部展开

参考文献

Hornung, Armin, Kai M. Wurm, Maren Bennewitz, Cyrill Stachniss和Wolfram Burgard。OctoMap:基于八叉树的高效概率三维映射框架。自主机器人34岁的没有。3(2013年4月):189-206https://doi.org/10.1007/s10514 - 012 - 9321 - 0。

扩展功能

C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。

版本历史

R2019b引入