移动机器人算法设计——地图创建

binaryOccupancyMap

用二进制值创建占用网格

二进制占用图(binaryOccupancyMap)创建一个二维占用地图对象,可用于表示和可视化机器人工作空间,包括障碍物。传感器数据和位置估计的集成创建了障碍物大致位置的空间表示。

占位网格可用于机器人算法,如路径规划。它们还可用于制图应用,如寻找无碰撞路径、执行防碰撞和计算定位。您可以根据具体应用修改占位网格。

占用网格中的每个单元格都有一个值,代表该单元格的占用状态。占用位置表示为真(1),空闲位置表示为假(0)。

该对象跟踪三个参照框架:世界、本地和网格。世界帧原点由 GridLocationInWorld 定义,它定义了地图相对于世界帧的左下角。LocalOriginInWorld 属性指定了本地框架相对于世界框架的原点位置。索引为(1,1)的第一个网格位置从网格的左上角开始。

创建

语法

  1. map = binaryOccupancyMap
  2. map = binaryOccupancyMap(width,height)
  3. map = binaryOccupancyMap(width,height,resolution)
  4. map = binaryOccupancyMap(rows,cols,resolution,"grid")
  5. map = binaryOccupancyMap(p)
  6. map = binaryOccupancyMap(p,resolution)
  7. map = binaryOccupancyMap(sourcemap)
  8. map = binaryOccupancyMap(sourcemap,resolution)

描述

  1. map = binaryOccupancyMap 创建一个宽度和高度均为 10 米的二维二进制占用网格。默认网格分辨率为每米一个单元格。
  2. map = binaryOccupancyMap(width,height)创建一个二维二进制占用网格,表示width和height以米为单位的工作空间。默认网格分辨率为每米一个单元格。
  3. map = binaryOccupancyMap(width,height,resolution)创建一个网格,网格的分辨率属性以每米为单位指定。地图默认采用世界坐标。
  4. map = binaryOccupancyMap(rows,cols,resolution, "grid") 创建大小为(行、列)的二进制占用网格。
  5. map = binaryOccupancyMap(p) 根据矩阵 p 中的值创建网格。网格的大小与矩阵的大小一致,每个单元格的值根据其在矩阵中的位置进行解释。
  6. map = binaryOccupancyMap(p,resolution) 根据矩阵创建地图,矩阵的分辨率属性以每米单元格为单位。
  7. map = binaryOccupancyMap(sourcemap) 使用另一个 binaryOccupancyMap 对象的值创建一个对象。
  8. map = binaryOccupancyMap(sourcemap,resolution) 使用另一个 binaryOccupancyMap 对象的值创建一个对象,但会对矩阵重新采样,以达到指定的分辨率。

输入参数

width - 地图宽度
正标量
地图宽度,以米为单位的正标量。

height - 地图高度
正标量
地图高度,以米为单位的正标量。

p - 地图网格值
矩阵
以矩阵形式指定网格值。

sourcemap - 占用地图对象
二进制占用图对象
占用图对象,指定为二进制占用图对象。

属性

GridSize - 网格中的行数和列数
行列数] 形式的双元素向量
此属性为只读。

网格中的行数和列数,以 [rows cols] 形式的双元素向量存储。

Resolution - 网格分辨率
1(默认) | 标量
此属性为只读。

网格分辨率,以每米单元格为单位的标量存储。

XLocalLimits - 本地框架中 x 坐标的最小值和最大值
形式为 [min max] 的双元素向量
此属性为只读。

本地帧中 x 坐标的最小值和最大值,以 [min max] 形式的双元素向量存储。本地帧由 LocalOriginInWorld 属性定义。

YLocalLimits - 本地框架中 Y 坐标的最小值和最大值
形式为 [min max] 的双元素向量
此属性为只读。

本地帧中 y 坐标的最小值和最大值,以 [min max] 形式的双元素向量存储。本地帧由 LocalOriginInWorld 属性定义。

XWorldLimits - 世界帧中 x 坐标的最小值和最大值
形式为 [min max] 的双元素向量
此属性为只读。

世界帧中 x 坐标的最小值和最大值,以 [min max] 形式的双元素向量存储。这些值表示网格中 x 坐标的世界范围。

YWorldLimits - Y 坐标的最小值和最大值
形式为 [min max] 的双元素向量
此属性为只读。

Y 坐标的最小值和最大值,以 [min max] 形式的双元素矢量存储。这些值表示网格中 Y 坐标的世界范围。

GridLocationInWorld - 网格在世界坐标中的位置
[0 0] (默认值) | 双元素向量 | [xGrid yGrid] (默认值
网格左下角在世界坐标中的位置,以两个元素向量 [xGrid yGrid] 的形式指定。

LocalOriginInWorld - 本地帧在世界坐标中的位置
[0 0](默认) | 双元素向量 | [xWorld yWorld]
本地帧在世界坐标中的原点位置,以两元素向量 [xLocal yLocal] 的形式指定。使用移动功能可以在车辆移动时移动局部框架。

GridOriginInLocal - 以本地坐标表示的网格位置
[0 0] (默认) | 双元素向量 | [xLocal yLocal]
网格左下角在本地坐标中的位置,以两元素向量 [xLocal yLocal] 的形式指定。

DefaultValue - 未指定地图位置的默认值
0(默认值) | 1
未指定地图位置的默认值,包括地图以外的区域,指定为 0 或 1。

创建和修改二进制占用网格


map = binaryOccupancyMap(10,10,10);%绘制一张 10 米 x 10 米的空白地图。

x = [1.2; 2.3; 3.4; 4.5; 5.6];
y = [5.0; 4.0; 3.0; 2.0; 1.0];

setOccupancy(map, [x y], ones(5,1))
figure
show(map)

inflate(map, 0.5)%按给定半径膨胀已占据的位置。
figure
show(map)

% 从世界位置中获取网格位置。
ij = world2grid(map, [x y]);

% 将网格位置设置为空闲位置。
setOccupancy(map, ij, zeros(5,1), 'grid')
figure
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

 图像到二进制占用网格示例

本例演示了如何将图像转换为二进制占位网格,以用于制图和路径规划。

image = imread('imageMap.png');%导入图像


grayimage = rgb2gray(image);   %根据给定的阈值将图像转换为灰度图像,
bwimage = grayimage < 0.5;     %然后再转换为黑白图像。

grid = binaryOccupancyMap(bwimage);
show(grid)


Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

 将 PGM 图像转换为地图

本示例演示如何将 .pgm 文件转换为二进制占位图对象,以便在 MATLAB 中使用。

使用 imread 导入图像。图像相当大,应裁剪到相关区域。


image = imread('playpen_map.pgm');      %导入图像
imageCropped = image(750:1250,750:1250);%裁剪图像
imshow(imageCropped)                    %显示图像

% 未知区域(灰色)应删除并作为自由空间处理。根据阈值创建逻辑矩阵。
% 根据图像的不同,阈值也可能不同。占用空间应设置为 1(图像中为白色)。
imageBW = imageCropped < 100;
imshow(imageBW)

% 使用调整后的地图图像创建二进制 OccupancyMap 对象。
map = binaryOccupancyMap(imageBW);
show(map)

Figure contains an axes object. The axes object contains an object of type image.

Figure contains an axes object. The axes object contains an object of type image.

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

进一步了解,请点击下面链接!

binaryOccupancyMap——对象函数_给老板画饼的博客-CSDN博客

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值