binaryOccupancyMap
用二进制值创建占用网格
二进制占用图(binaryOccupancyMap)创建一个二维占用地图对象,可用于表示和可视化机器人工作空间,包括障碍物。传感器数据和位置估计的集成创建了障碍物大致位置的空间表示。
占位网格可用于机器人算法,如路径规划。它们还可用于制图应用,如寻找无碰撞路径、执行防碰撞和计算定位。您可以根据具体应用修改占位网格。
占用网格中的每个单元格都有一个值,代表该单元格的占用状态。占用位置表示为真(1),空闲位置表示为假(0)。
该对象跟踪三个参照框架:世界、本地和网格。世界帧原点由 GridLocationInWorld 定义,它定义了地图相对于世界帧的左下角。LocalOriginInWorld 属性指定了本地框架相对于世界框架的原点位置。索引为(1,1)的第一个网格位置从网格的左上角开始。
创建
语法
map = binaryOccupancyMap
map = binaryOccupancyMap(width,height)
map = binaryOccupancyMap(width,height,resolution)
map = binaryOccupancyMap(rows,cols,resolution,"grid")
map = binaryOccupancyMap(p)
map = binaryOccupancyMap(p,resolution)
map = binaryOccupancyMap(sourcemap)
map = binaryOccupancyMap(sourcemap,resolution)
描述
- map = binaryOccupancyMap 创建一个宽度和高度均为 10 米的二维二进制占用网格。默认网格分辨率为每米一个单元格。
- map = binaryOccupancyMap(width,height)创建一个二维二进制占用网格,表示width和height以米为单位的工作空间。默认网格分辨率为每米一个单元格。
- map = binaryOccupancyMap(width,height,resolution)创建一个网格,网格的分辨率属性以每米为单位指定。地图默认采用世界坐标。
- map = binaryOccupancyMap(rows,cols,resolution, "grid") 创建大小为(行、列)的二进制占用网格。
- map = binaryOccupancyMap(p) 根据矩阵 p 中的值创建网格。网格的大小与矩阵的大小一致,每个单元格的值根据其在矩阵中的位置进行解释。
- map = binaryOccupancyMap(p,resolution) 根据矩阵创建地图,矩阵的分辨率属性以每米单元格为单位。
- map = binaryOccupancyMap(sourcemap) 使用另一个 binaryOccupancyMap 对象的值创建一个对象。
- 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)
图像到二进制占用网格示例
本例演示了如何将图像转换为二进制占位网格,以用于制图和路径规划。
image = imread('imageMap.png');%导入图像
grayimage = rgb2gray(image); %根据给定的阈值将图像转换为灰度图像,
bwimage = grayimage < 0.5; %然后再转换为黑白图像。
grid = binaryOccupancyMap(bwimage);
show(grid)
将 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)
进一步了解,请点击下面链接!