主要内容

occupancyMap

创建2-D占用地图

描述

occupancyMap创建一个2-D占用网格地图对象。占用网格中的每个单元格都有一个值,表示该单元格被占用的概率。接近1的值表示单元格中有障碍物的概率很高。接近0的值表示计算单元未被占用且无障碍的概率很高。

占用地图用于导航算法,如路径规划(参见plannerRRT).它们还用于映射应用程序中,以寻找无碰撞路径、执行碰撞避免和计算定位(参见monteCarloLocalization).您可以修改占用地图以适合您的特定应用程序。

occupancyMap对象支持局部坐标、世界坐标和网格索引。第一个带索引的网格位置(1,1)从网格的左上角开始。

使用occupancyMap类创建环境的二维地图,用概率值表示世界中的不同障碍。您可以指定细胞的确切概率值,或者包括来自传感器(如激光扫描仪)的观察结果。

概率值使用二元贝叶斯滤波器存储,以估计每个网格单元的占用率。使用log-odds表示,值存储为int16减少地图存储大小,并允许实时应用程序。

创建

描述

地图= occupancyMap (宽度高度创建一个表示世界空间的二维占用地图对象宽度而且高度在米。默认网格分辨率是每米1个单元。

例子

地图= occupancyMap (宽度高度决议用指定的网格分辨率(以单元格/米为单位)创建占用地图。决议设置决议财产。

地图= occupancyMap (关口决议“网格”)用指定的行数和列数创建占用映射,分辨率以单元格/米为单位。的值而且关口设置GridSize财产。

地图= occupancyMap (p根据矩阵中的值创建占用图p.网格的大小与矩阵的大小相匹配,每个单元格的概率值都是从矩阵的位置解释的。

例子

地图= occupancyMap (p决议根据指定的矩阵和分辨率(以单元格/米为单位)创建占用映射。

地图= occupancyMap (sourcemap使用来自另一个对象的值创建对象occupancyMap对象。

地图= occupancyMap (sourcemap决议使用来自另一个对象的值创建对象occupancyMap对象,但对矩阵进行重采样以获得指定的分辨率。

输入参数

全部展开

地图宽度,以米为单位的标量指定。

地图高度,以米为单位的标量指定。

网格分辨率,指定为每米单元格中的标量。

网格中的行数,指定为正标量整数。

网格中的列数,指定为正标量整数。

输入占用网格,指定为概率值的矩阵01.网格的大小与矩阵的大小相匹配。每个矩阵元素对应网格单元位置被占用的概率。值接近1表示该单元格包含障碍的高度确定性。值接近0表示确定单元没有被占用和无障碍。

占用地图对象,指定为occupancyMap对象。

属性

全部展开

阈值,低于该阈值的单元格被认为是无障碍的,指定为之间的标量0而且1包容性。概率值低于此阈值的单元被认为是无障碍的。此属性还定义了在使用诸如plannerRRT

数据类型:

阈值高于此值即认为单元格已占用,指定为一个标量。概率值高于此阈值的单元被认为已占用。

数据类型:

概率的饱和限制,指定为一个1乘2的实值向量,按此顺序表示最小值和最大值。高于或低于这些饱和度值的值被设置为最小值和最大值。当合并多个观察结果时,这个特性可以减少细胞的过饱和。

数据类型:

此属性是只读的。

网格中的行数和列数,按此顺序存储为1 × 2的实值向量,表示行数和列数。

数据类型:

此属性是只读的。

网格分辨率,存储为单元格中的标量,每米表示网格位置的数量和大小。

数据类型:

此属性是只读的。

的最小值和最大值x-坐标,存储为表单的双元素水平向量(最小最大).定义了局部帧LocalOriginInWorld财产。

数据类型:

此属性是只读的。

的最小值和最大值y-坐标,存储为表单的双元素水平向量(最小最大).定义了局部帧LocalOriginInWorld财产。

数据类型:

此属性是只读的。

的最小和最大世界范围值x-coordinates,存储为1 × 2的向量,按此顺序表示最小值和最大值。

数据类型:

此属性是只读的。

的最小和最大世界范围值y-coordinates,存储为1 × 2的向量,按此顺序表示最小值和最大值。

数据类型:

xy网格左下角的世界坐标,指定为1 × 2向量。

数据类型:

在世界坐标中局部帧的原点位置,指定为双元素向量,[xLocal yLocal].使用移动函数在车辆移动时移动本地帧。

数据类型:

在局部坐标中网格左下角的位置,指定为一个双元素向量,[xLocal yLocal]

数据类型:

未指定的映射位置的默认值,包括映射以外的区域,指定为标量between0而且1包容性。

数据类型:

对象的功能

checkOccupancy 检查场地是否空闲或有人
复制 创建2-D占用地图的副本
getOccupancy 获取地点的占用概率
grid2local 将网格索引转换为局部坐标
grid2world 将网格索引转换为世界坐标
膨胀 给每个被占领的位置充气
insertRay 插入激光扫描观察的射线
local2grid 将局部坐标转换为网格索引
local2world 将局部坐标转换为世界坐标
移动 在世界框架中移动地图
occupancyMatrix 转换占用地图到矩阵
raycast 沿着射线计算单元指数
rayIntersection 找到射线的交点和被占用的地图单元格
setOccupancy 设置地点的占用概率
显示 显示2-D占用地图
syncWith 用重叠的地图同步地图
updateOccupancy 更新各地点的占用率
world2grid 将世界坐标转换为网格索引
world2local 将世界坐标转换为本地坐标

例子

全部折叠

创建一个空的占用网格地图。

地图= occupancyMap(10、10、20);

指定车辆的姿态、范围、角度和激光扫描的最大范围。

构成= (5 5 0);范围= 3 * 1 (100 1);角= linspace(-π/ 2π/ 2100);maxrange = 20;

创建一个lidarScan对象,使用指定的范围和角度。

扫描= lidarScan(范围、角度);

把激光扫描数据插入入住地图。

insertRay(地图,姿势,扫描,maxrange);

显示地图以查看插入激光扫描的结果。

显示(图)

图中包含一个axes对象。标题为Occupancy Grid的axis对象包含一个类型为image的对象。

检查车辆正前方车位的占用情况。

getOccupancy(地图,5 [8])
ans = 0.7000

添加二次读取并查看占用值的更新。额外的阅读增加了阅读的信心。自由和占有的价值变得更加明显。

insertRay(地图,姿势,扫描,maxrange);显示(图)

图中包含一个axes对象。标题为Occupancy Grid的axis对象包含一个类型为image的对象。

getOccupancy(地图,5 [8])
ans = 0.8448

将包含ROS映射的便携灰度图(PGM)文件转换为occupancyMap在MATLAB中使用。

使用imread.将图像裁剪到游戏围栏区域。

形象= imread (“playpen_map.pgm”);imageCropped =图像(750:1250 750:1250);imshow (imageCropped)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

PGM值从0到255表示为uint8.通过将裁剪后的图像转换为规范化这些值每个单元格除以255。这张图片显示了接近0的障碍物值。从1中减去归一化图像得到占用值,其中1表示已占用空间。

imageNorm = (imageCropped) / 255年翻一番;imageOccupancy = 1 - imageNorm;

创建occupancyMap对象使用调整后的地图图像。导入的地图分辨率为每米20个单元。

地图= occupancyMap (imageOccupancy 20);显示(图)

图中包含一个axes对象。标题为Occupancy Grid的axis对象包含一个类型为image的对象。

限制

占用值的分辨率有限,为±0.001。这些值存储为int16使用对数-赔率表示。这种数据类型限制了分辨率,但在MATLAB中存储大型地图时节省了内存®.当调用setOccupancy然后getOccupancy,返回值可能不等于您设置的值。有关更多信息,请参见中的log-odds表示部分占用网格

如果内存大小受限,请考虑使用binaryOccupancyMap代替。使用二进制值时,二进制占用映射使用更少的内存,但仍然适用于Navigation Toolbox™算法和其他应用程序。

扩展功能

版本历史

介绍了R2019b

Baidu
map