binaryOccupancyMap——对象函数

copy创建二进制占用图副本
checkOccupancy检查位置是否空闲或被占用
getOccupancy获取位置的占用值
setOccupancy设置位置占用值
grid2local将网格指数转换为本地坐标
grid2world将网格指数转换为世界坐标
local2grid将本地坐标转换为网格指数
local2world将本地坐标转换为世界坐标
world2grid将世界坐标转换为网格指数
world2local将世界坐标转换为本地坐标
inflate膨胀每个被占用的位置
insertRay插入激光扫描观测的射线
move在世界帧中移动地图
occupancyMatrix将占用网格转换为矩阵折叠
raycast沿射线计算单元格指数
rayIntersection查找射线与所占地图单元的交点
show显示二进制占用图
syncWith与重叠地图同步

copy

创建二进制占用图副本

语法

copyMap = copy(map)

描述

copyMap = copy(map) 创建具有相同属性的 binaryOccupancyMap 对象的深度副本。

例子

复制二进制占用网格图

% 复制二进制 OccupancyMap 对象。复制后,可以修改原始对象而不影响复制的地图。
% 
% 为空地图创建一个带零的占用地图。

p = zeros(10);                  %创建10*10的零矩阵
map = binaryOccupancyMap(p);    %创建二值地图

% 复制占用地图。修改原始地图。
% 复制的地图不会被修改。并排绘制两张地图。
mapCopy = copy(map);            %复制地图副本
setOccupancy(map,[1:3;1:3]',ones(3,1));
subplot(1,2,1)
show(map)
title('原始地图')
subplot(1,2,2)
show(mapCopy)
title('复制地图')

Figure contains 2 axes objects. Axes object 1 with title Original map, xlabel X [meters], ylabel Y [meters] contains an object of type image. Axes object 2 with title Copied map, xlabel X [meters], ylabel Y [meters] contains an object of type image.

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示车辆所处的环境。

输出参数

copyMap - 复制地图表示法
二进制占位Map 对象
复制的地图表示法,以二进制 OccupancyMap 对象的形式返回。其属性与输入对象 map 相同,但副本的对象句柄不同。

checkOccupancy

检查位置是否空闲或被占用

语法

occVal = checkOccupancy(map,xy)

occVal = checkOccupancy(map,xy,"local")

occVal = checkOccupancy(map,ij,"grid")

[occVal,validPts] = checkOccupancy(___)

occMatrix = checkOccupancy(map)

occMatrix = checkOccupancy(map,bottomLeft,matSize)

occMatrix = checkOccupancy(map,bottomLeft,matSize,"local")

occMatrix = checkOccupancy(map,topLeft,matSize,"grid")

描述

例子

获取占用值并检查占用状态

% 根据 occupancyMap 对象的占用和空闲阈值,访问占用值并检查其占用状态。

% 创建一个矩阵并填充数值。使用该矩阵创建占用图。
p = zeros(20,20);
p(11:20,11:20) = ones(10,10);
map = binaryOccupancyMap(p,10);
show(map)

% 获取不同位置的占用情况并检查其占用状态。
% 空闲空间的占用状态返回 0,占用空间的占用状态返回 1。未知值返回 -1。
pocc  = getOccupancy(map,[1.5 1]);
occupied = checkOccupancy(map,[1.5 1]);
pocc2 = getOccupancy(map,[5   5],'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.

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。

xy - 地图中的坐标
n-by-2 矩阵
地图中的坐标,以 [x y] 对的 n乘2 矩阵形式指定,其中 n 是坐标个数。根据语法的不同,坐标可以是世界坐标或本地坐标。

数据类型:双

ij - 地图中的网格位置
n-by-2 矩阵
地图中的网格位置,以 [i j] 对的 n 乘 2 矩阵形式指定,其中 n 是位置数。网格位置以 [row col] 的形式给出。

数据类型: double

bottomLeft - 输出矩阵在世界或本地的位置
二元素向量 [xCoord yCoord].
输出矩阵左下角在世界或本地坐标中的位置,以 [xCoord yCoord] 两元素向量形式指定。根据语法以世界坐标或本地坐标表示。

数据类型:双

matSize - 输出矩阵大小
二元素向量 | [xLength yLength] | [gridRow gridCol] [gridRow gridCol
输出矩阵大小,指定为双元素向量、[xLength yLength] 或 [gridRow gridCol]。大小根据语法以世界、本地或网格坐标表示。

数据类型:双

topLeft - 网格位置
二元素向量 [iCoord jCoord].
网格左上角的位置,以两元素向量 [iCoord jCoord] 的形式指定。

数据类型: double

输出参数

occVal - 占用值
n-by-1 列向量
占用值,以长度等于 xy 或 ij 输入值的 n-by-1 列向量形式返回。占用值可以是无障碍(0)、占用(1)或未知(-1)。

validPts - 有效地图位置
n-by-1 列向量
有效的地图位置,以长度等于 xy 或 ij 的 n-by-1 列向量形式返回。地图范围内的位置返回值为 1,地图范围外的位置返回值为 0。

occMatrix - 占用率矩阵
矩阵
占用值矩阵,以矩阵形式返回,大小等于 matSize 或地图大小。占用值可以是无障碍物(0)、占用(1)或未知(-1)。

getOccupancy

获取位置占用值

语法

occVal = getOccupancy(map,xy)

occVal = getOccupancy(map,xy,"local")

occVal = getOccupancy(map,ij,"grid")

[occVal,validPts] = getOccupancy(___)

occMatrix = getOccupancy(map)

occMatrix = getOccupancy(map,bottomLeft,matSize)

occMatrix = getOccupancy(map,bottomLeft,matSize,"local")

occMatrix = getOccupancy(map,topLeft,matSize,"grid")

描述

occVal = getOccupancy(map,xy) 返回世界帧中 xy 位置的占用值数组。未知位置(包括地图之外)将返回 map.DefaultValue 值。

occVal = getOccupancy(map,xy, "local") 返回本地帧 xy 位置的占用率值数组。

occVal = getOccupancy(map,ij, "grid") 指定 ij 网格单元索引,而不是 xy 位置。

[occVal,validPts]=getOccupancy(____)另外输出一个 n 元素逻辑值向量,表示输入坐标是否在地图范围内。

occMatrix = getOccupancy(map) 以矩阵形式返回地图中的所有占用值。

occMatrix = getOccupancy(map,bottomLeft,matSize)以世界坐标为单位指定左下角位置,以米为单位指定矩阵大小,从而返回占用率值矩阵。

occMatrix = getOccupancy(map,bottomLeft,matSize, "local")以本地坐标指定左下角位置,以米为单位指定矩阵大小,从而返回占用率值矩阵。

occMatrix = getOccupancy(map,topLeft,matSize, "grid")通过指定网格索引中的左上角单元格索引和矩阵大小,返回占用率值矩阵。

例子

% 创建一个空的二进制占位网格图。
map = binaryOccupancyMap(10,10,20);
% 输入车辆姿态、范围、角度和激光扫描的最大范围。
pose = [5,5,0];
ranges = 3*ones(100,1);
angles = linspace(-pi/2,pi/2,100);
maxrange = 20;
% 创建一个具有指定范围和角度的 lidarScan 对象。
scan = lidarScan(ranges,angles);
% 将激光扫描数据插入占用图。
insertRay(map,pose,scan,maxrange);
% 显示地图,查看插入激光扫描的结果。
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.

 获取占用值并检查占用状态

% 根据 occupancyMap 对象的占用和空闲阈值,访问占用值并检查其占用状态。

% 创建一个矩阵并填充数值。使用该矩阵创建占用图。
p = zeros(20,20);
p(11:20,11:20) = ones(10,10);
map = binaryOccupancyMap(p,10);
show(map)

% 获取不同位置的占用情况并检查其占用状态。
% 空闲空间的占用状态返回 0,占用空间的占用状态返回 1。未知值返回 -1。
pocc  = getOccupancy(map,[1.5 1]);
occupied = checkOccupancy(map,[1.5 1]);
pocc2 = getOccupancy(map,[5   5],'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.

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示车辆所处的环境。

xy - 地图中的坐标
n-by-2 矩阵
地图中的坐标,以 [x y] 对的 n-by-2 矩阵形式指定,其中 n 是坐标个数。根据语法的不同,坐标可以是世界坐标或本地坐标。

数据类型:双

ij - 地图中的网格位置
n-by-2 矩阵
地图中的网格位置,以 [i j] 对的 n-2 乘 2 矩阵形式指定,其中 n 是位置数。网格位置以 [row col] 的形式给出。

数据类型: double

bottomLeft - 输出矩阵在世界或本地的位置
二元素向量 [xCoord yCoord].
输出矩阵左下角在世界或本地坐标中的位置,以 [xCoord yCoord] 两元素向量形式指定。根据语法以世界坐标或本地坐标表示。

数据类型:双

matSize - 输出矩阵大小
二元素向量 | [xLength yLength] | [gridRow gridCol] [gridRow gridCol
输出矩阵大小,指定为双元素向量 [xLength yLength] 或 [gridRow gridCol]。根据语法,大小以世界坐标、本地坐标或网格索引为单位。

数据类型:双

topLeft - 网格位置
二元素向量 [iCoord jCoord].
网格左上角的位置,以两元素向量 [iCoord jCoord] 的形式指定。

数据类型: double

输出参数

occVal - 占用值
n-by-1 列向量
占用值,以长度等于 xy 或 ij 的 n-by-1 列向量形式返回。占用值可以是无障碍(0)或有障碍(1)。

validPts - 有效地图位置
n-by-1 列向量
有效的地图位置,以长度等于 xy 或 ij 的 n-by-1 列向量形式返回。地图范围内的位置返回值为 1,地图范围外的位置返回值为 0。

occMatrix - 占用率矩阵
矩阵
占用值矩阵,以矩阵形式返回,大小等于 matSize 或地图大小。

setOccupancy

设置位置的占用值

语法

setOccupancy(map,xy,occval)

setOccupancy(map,xy,occval,"local")

setOccupancy(map,ij,occval,"grid")

validPts = setOccupancy(___)

setOccupancy(map,bottomLeft,inputMatrix)

setOccupancy(map,bottomLeft,inputMatrix,"local")

setOccupancy(map,topLeft,inputMatrix,"grid")

描述

setOccupancy(map,xy,occval)将占用值occval分配给占用网格map中的世界坐标xy的输入数组。数组的每一行xy都是世界上的一个点,并表示为[x-y]坐标对。ocval是与xy长度相同的标量或单列数组。占用位置表示为true(1),空闲位置表示为false(0)。

setOccupancy(map,xy,occval,“local”)将占用值occval分配给局部坐标xy的输入数组作为局部坐标。

setOccupancy(map,ij,occval,“grid”)将占用值occval分配给网格索引ij的输入数组,作为[行-列]。

validPts=setOccupancy(___)输出一个逻辑值的n元素矢量,指示输入坐标是否在映射限制内。

setOccupancy(map,bottomLeft,inputMatrix)通过指定世界坐标中左下角的位置来指定占用值矩阵。

setOccupancy(map,bottomLeft,inputMatrix,“local”)通过指定局部坐标中的左下角位置来指定占用值矩阵。

setOccupancy(map,topLeft,inputMatrix,“grid”)通过指定网格索引中左上角的单元格索引和矩阵大小来分配占用值矩阵。

例子


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.

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示机器人所处的环境。该对象包含一个矩阵网格,其中的二进制值表示障碍物为真(1),空闲位置为假(0)。

xy - 世界坐标
n-by-2 垂直数组
以 [x y] 对的 n-by-2 垂直数组形式指定的世界坐标,其中 n 是世界坐标的个数。

数据类型: double

ij - 网格位置
n-by-2 垂直数组
以 [行列数] 格式指定的网格位置,是由 [i j] 对组成的 n-by-2 垂直数组,其中 n 是网格位置的个数。

数据类型:双

occval - 占用值
n-by-1 垂直数组
与 xy 或 ij 长度相同的占用值,以 n-by-1 垂直数组形式返回,其中 n 与 xy 或 ij 中的 n 相同。数值介于 0 和 1 之间。

inputMatrix - 占用值
矩阵
以矩阵形式指定的占用率值。数值介于 0 和 1 之间。

bottomLeft - 输出矩阵在世界或本地的位置
二元素向量 [xCoord yCoord].
输出矩阵左下角在世界或本地坐标中的位置,以 [xCoord yCoord] 两元素向量形式指定。根据语法以世界坐标或本地坐标表示。

数据类型:双

topLeft - 网格位置
二元素向量 [iCoord jCoord].
网格左上角的位置,以两元素向量 [iCoord jCoord] 的形式指定。

数据类型: double

输出参数

validPts - 有效地图位置
n-by-1 列向量
有效的地图位置,以长度等于 xy 或 ij 的 n-by-1 列向量形式返回。地图范围内的位置返回值为 1,地图范围外的位置返回值为 0。

grid2local

将网格指数转换为本地坐标

语法

xy = grid2local(map,ij)

描述

xy = grid2local(map,ij) 将网格索引 ij 的[row col]数组转换为本地坐标 xy 数组。

例子

map = binaryOccupancyMap(10,10);%创建一张宽度和高度均为10米的空白二进制占位图。
%从网格索引中获取本地坐标。
[i,j] = meshgrid(1:5);
xyLocal = grid2local(map,[i(:) j(:)]);

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示机器人所处的环境。该对象包含一个矩阵网格,其中的二进制值表示障碍物为真(1),空闲位置为假(0)。

ij - 网格位置
n-by-2 垂直数组
网格位置,以 [row col] 格式指定为 [i j] 对的 n-by-2 垂直数组,其中 n 是网格位置数。

输出参数

xy - 本地坐标
n-by-2 垂直数组
本地坐标,以 [x y] 对的 n-by-2 垂直数组形式指定,其中 n 是本地坐标的个数。

grid2world

将网格指数转换为世界坐标

语法

xy = grid2world(map,ij)

描述

xy = grid2world(map,ij)将网格索引数组 ij[row col] 转换为世界坐标数组 xy。

例子

map = binaryOccupancyMap(10,10);%创建一张宽度和高度均为10米的空白二进制占位图。
%从网格索引中获取本地坐标。
[i,j] = meshgrid(1:5);

xyWorld = grid2world(map,[i(:) j(:)]);

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示机器人所处的环境。该对象包含一个矩阵网格,其中的二进制值表示障碍物为真(1),空闲位置为假(0)。

ij - 网格位置
n-by-2 垂直数组
网格位置,以 [row col] 格式指定为 [i j] 对的 n-by-2 垂直数组,其中 n 是网格位置数。

输出参数

xy - 世界坐标
n-by-2 垂直数组
以 [x y] 对的 n-by-2 垂直数组形式指定的世界坐标,其中 n 是世界坐标的个数。

local2grid

将本地坐标转换为网格指数

语法

ij = local2grid(map,xy)

描述

ij = local2grid(map,xy) 将本地坐标 xy 数组转换为 [row col] 格式的网格索引 ij 数组。

例子

map=binaryOccupancyMap(10,10);%创建一张宽度和高度均为 10 米的空白二进制占位图。
% 从本地坐标获取网格指数。
[xLocal yLocal]=meshgrid(0:0.5:2);
ij=local2grid(map,[xLocal(:) yLocal(:)]);

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示车辆所处的环境。

xy - 本地坐标
n-by-2 矩阵
本地坐标,指定为 [x y] 对的 n-by-2 矩阵,其中 n 是本地坐标的个数。

数据类型:双

输出参数

ij - 网格位置
n-by-2 矩阵
网格位置,以 [row col] 格式返回的 n-by-2 [i j] 对矩阵,其中 n 是网格位置数。网格单元位置从网格左上角开始计算。

数据类型:双

local2world

将本地坐标转换为世界坐标

语法

xyWorld = local2world(map,xy)

描述

xyWorld = local2world(map,xy) 将本地坐标数组转换为世界坐标。

例子

map=binaryOccupancyMap(10,10);%创建一张宽度和高度均为 10 米的空白二进制占位图。
% 从本地坐标获取网格指数。
[xLocal yLocal]=meshgrid(0:0.5:2);

xyWorld = local2world(map,[xLocal(:) yLocal(:)]);

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示车辆所处的环境。

xy - 本地坐标
n-by-2 矩阵
本地坐标,指定为 [x y] 对的 n-by-2 矩阵,其中 n 是本地坐标的个数。

数据类型:双

输出参数

xyWorld - 世界坐标
n-by-2 矩阵
以 [x y] 对的 n-by-2 矩阵形式指定的世界坐标,其中 n 是世界坐标的个数。

数据类型:双

world2grid

将世界坐标转换为网格指数

语法

ij = world2grid(map,xy)

描述

ij = world2grid(map,xy) 将世界坐标数组 xy 转换为网格索引数组 ij [rows cols]。

例子

map=binaryOccupancyMap(10,10);%创建一张宽度和高度均为 10 米的空白二进制占位图。
% 从世界坐标中获取网格指数。
[xWorld,yWorld] = meshgrid(0:0.5:2);

ij = world2grid(map,[xWorld(:) yWorld(:)]);

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。

xy - 世界坐标
n-by-2 垂直数组
以 [x y] 对的 n-by-2 垂直数组形式指定的世界坐标,其中 n 是世界坐标的个数。

输出参数

ij - 网格索引
n-by-2 垂直数组
以[行列数]格式指定的 n-by-2 垂直数组[i j]对的网格索引,其中 n 是网格位置数。

world2local

将世界坐标转换为本地坐标

语法

xyLocal = world2local(map,xy)

描述

xyLocal = world2local(map,xy) 将世界坐标数组转换为本地坐标。

例子

map=binaryOccupancyMap(10,10);%创建一张宽度和高度均为 10 米的空白二进制占位图。
% 从世界坐标获取本地坐标。
[xWorld,yWorld] = meshgrid(0:0.5:2);
xyLocal = world2local(map,[xWorld(:) yWorld(:)]);

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。

xy - 世界坐标
n-by-2 垂直数组
以 [x y] 对的 n-by-2 垂直数组形式指定的世界坐标,其中 n 是世界坐标的个数。

输出参数

xyLocal - 本地坐标
n-by-2 垂直数组
本地坐标,指定为一个 n-by-2 对 [x y] 的垂直数组,其中 n 是本地坐标的个数。

inflate

语法

inflate(map,radius)

inflate(map,gridradius,'grid')

描述

inflate(map,radius)按以米为单位的半径充气地图上每个被占据的位置。半径根据地图的分辨率四舍五入到最接近的单元格。半径内的每个单元格都会被设置为 true (1)。

inflate(map,gridradius,'grid')以单元格数为单位,按半径放大每个被占据的位置。

例子

%创建和修改二进制占用网格
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.

输入参数

map - 地图表示法
二进制占位Map 对象
以二进制 OccupancyMap 对象形式指定的地图表示法。该对象表示机器人所处的环境。该对象包含一个矩阵网格,其中的二进制值表示障碍物为真(1),空闲位置为假(0)。

radius - 定义所占位置膨胀程度的尺寸
标量
定义占用位置膨胀程度的维度,以标量形式指定。半径四舍五入为最接近的单元格值。

数据类型:双

gridradius - 定义所占位置膨胀程度的维度
正标量
定义占用位置膨胀程度的维度,以正标量形式指定。 gridradius 是要膨胀占用位置的单元格数。

数据类型:双

insertRay

插入激光扫描观测的射线

语法

insertRay(map,pose,scan,maxrange)

insertRay(map,pose,ranges,angles,maxrange)

insertRay(map,startpt,endpoints)

描述

insertRay(map,pose,scan,maxrange)使用输入的激光雷达扫描(lidarScan)对象扫描,在占用网格(map)中插入一个或多个激光雷达扫描传感器观测值,以获取射线端点。端点位置会以占用值更新。如果范围高于最大范围,则射线端点被视为自由空间。射线沿线的所有其他点都被视为无障碍空间。

insertRay(map,pose,ranges,angles,maxrange) 将范围读数指定为由输入范围和角度定义的向量。

insertRay(map,startpt,endpoints)在从起点到终点的线段之间插入观测数据。端点更新为占用空间,线段上的其他点更新为自由空间。

例子

% 

map = binaryOccupancyMap(10,10,20);%创建一个空的二进制占位网格图。

pose = [5,5,0];                   %车辆姿态
ranges = 3*ones(100,1);           %范围
angles = linspace(-pi/2,pi/2,100);%角度
maxrange = 20;                    %激光扫描最大范围

%创建一个具有指定范围和角度的 lidarScan 对象。
scan = lidarScan(ranges,angles);

insertRay(map,pose,scan,maxrange);%将激光扫描数据插入占用图。

show(map)

getOccupancy(map,[8 5])%检查车辆正前方车位的占用情况。

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.

输入参数

map - 地图表示法
二进制占位Map 对象
以二进制 OccupancyMap 对象形式指定的地图表示法。该对象表示机器人所处的环境。该对象包含一个矩阵网格,其中的二进制值表示障碍物为真(1),空闲位置为假(0)。

pose - 车辆的位置和方向
三元素矢量
车辆的位置和方向,指定为[x y theta]向量。车辆姿态是一个 x 和 y 位置,其角度方向 theta(以弧度为单位)从 x 轴测量。

scan - 激光雷达扫描读数
lidarScan 对象
以 lidarScan 对象形式指定的激光雷达扫描读数。

ranges - 来自扫描数据的范围值
矢量
扫描数据中的范围值,指定为以米为单位的元素向量。这些范围值是给定角度下传感器的距离。矢量的长度必须与相应的角度矢量相同。

angles - 扫描数据中的角度值
矢量
扫描数据中的角度值,指定为以弧度为单位的元素向量。这些角度值与给定的范围相对应。该向量的长度必须与相应的范围向量相同。

maxrange - 传感器的最大量程
标量
激光测距传感器的最大范围,以米为单位的标量。大于或等于 maxrange 的测距值被认为是整个射线长度上的自由值,直至 maxrange。

startpt - 射线的起点
二元素向量
射线的起点,在世界坐标系中以 [x y] 两元素向量的形式指定。所有射线都是以此点为起点的线段。

endpoints - 射线的端点
n-by-2 矩阵
以世界坐标系中 [x y] 对的 n-by-2 矩阵形式指定的射线端点,其中 n 是范围或角度的长度。所有射线都是以起点为起点的线段。

move

语法

move(map,moveValue)

move(map,moveValue,Name,Value)

描述

move(map,moveValue)将地图的本地原点移动到世界帧中的绝对位置 moveValue,并更新地图的限制。移动值会根据地图的分辨率截断。默认情况下,新显示的区域将设置为 map.DefaultValue。

move(map,moveValue,Name,Value)指定由一个或多个名称-值对参数指定的附加选项。

例子

移动本地地图并与世界地图同步

% 移动本地地图并与世界地图同步

% 本例展示了如何移动本地自我中心地图,并将其与更大的世界地图同步。
% 此过程模拟车辆在环境中行驶,并获取新区域中障碍物的更新信息。

load exampleMaps.mat    %加载示例地图
map = binaryOccupancyMap(complexMap);% 从complexMap 中创建二进制占用地图
show(map)
% 创建更小的本地地图。
mapLocal = binaryOccupancyMap(complexMap(end-20:end,1:20));
show(mapLocal)

% 跟随世界地图中规划的路径,并在移动本地框架时更新本地地图。
% 指定路径位置并绘制在地图上。
path = [5 2
        8 2
        8 8
        30 8];
show(map)
hold on
plot(path(:,1),path(:,2))
hold off

% 创建一个循环,用于按贴图分辨率在点之间移动。
% 将点之间的差异除以贴图分辨率,以查看可以进行多少增量移动。
for i = 1:length(path)-1
    moveAmount = (path(i+1,:)-path(i,:))/map.Resolution;
    for j = 1:abs(moveAmount(1)+moveAmount(2))
        moveValue = sign(moveAmount).*map.Resolution;
        move(mapLocal,moveValue, ...
            "MoveType","relative","SyncWith",map)
 
        show(mapLocal)
        drawnow limitrate
        pause(0.2)
    end
end

 

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 2 objects of type image, line.

 

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.

 

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示车辆所处的环境。

moveValue—本地映射原点移动值
[x y]矢量
局部贴图原点移动值,指定为[x y]矢量。默认情况下,该值是将本地原点移动到世界帧中的绝对位置。使用MoveType名称-值对可以指定相对移动。

名称-值参数
以 Name1=Value1,...NameN=ValueN 的形式指定可选的参数对,其中 Name 是参数名,Value 是相应的值。名称-值参数必须出现在其他参数之后,但参数对的顺序并不重要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号括起名称。

示例:"MoveType", "relative

MoveType - 移动类型
绝对"(默认) | "相对
移动类型,指定为 "绝对 "或 "相对"。对于相对移动,请根据当前本地帧为 moveValue 指定一个相对 [x y] 向量。

FillValue - 显示位置的填充值
0(默认) | 1
由于地图界限移动而显示位置的填充值,指定为 0 或 1。

SyncWith - 与之同步的辅助地图
binaryOccupancyMap 对象
要与之同步的辅助地图,指定为二进制占星图对象。任何基于移动而显示的位置都将使用世界坐标与该地图中的值进行更新。

occupancyMatrix

将占用网格转换为矩阵折叠

语法

mat = occupancyMatrix(map)

描述

mat = occupancyMatrix(map) 以矩阵形式返回存储在占用网格对象中的占用率值。

例子

将二进制占用图转换为矩阵


map = mapMaze(2,MapSize=[10 10],MapResolution=1);%随机生成一张 2-D 迷宫地图。
show(map)

occupancyMatrix(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.

ans = 10x10 logical array

   1   1   1   1   1   1   1   1   1   1
   1   0   0   0   0   0   0   0   0   1
   1   0   0   0   0   0   0   0   0   1
   1   1   1   1   1   1   1   0   0   1
   1   0   0   0   0   0   0   0   0   1
   1   0   0   0   0   0   0   0   0   1
   1   0   0   1   1   1   1   1   1   1
   1   0   0   0   0   0   0   0   0   1
   1   0   0   0   0   0   0   0   0   1
   1   1   1   1   1   1   1   1   1   1

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示机器人所处的环境。该对象包含一个矩阵网格,其中的二进制值表示障碍物为真(1),空闲位置为假(0)。

输出参数

mat——占用率值
矩阵
Occupancy值,作为h-by-w矩阵返回,其中h和w由占用网格对象的GridSize属性的两个元素定义。
数据类型:双

raycast

沿射线计算单元格指数

语法

[endpoints,midpoints] = raycast(map,pose,range,angle)

[endpoints,midpoints] = raycast(map,p1,p2)

描述

[endpoints,midpoints] = raycast(map,pose,range,angle)以指定的角度和范围值返回从指定的姿势出发的射线所经过的指定地图中所有单元格的单元格索引。 endpoints 包含射线末端接触到的所有索引,其他所有点都包含在 midpoints 中。

[endpoints,midpoints] = raycast(map,p1,p2) 返回两个指定点之间线段的单元格索引。

例子

沿射线计算网格单元索引

% 沿射线计算网格单元索引
% 使用 raycast 函数为射线穿过的所有单元格生成单元格索引。

% 创建空地图。使用低分辨率地图来说明受影响的网格位置。
map = binaryOccupancyMap(10,10,1);
show(map)

p1 = [2 3];
p2 = [8.5 8];
[endPts,midPts] = raycast(map,p1,p2);% 获取从[2 3]到[8.5 8]的光线中点和端点的栅格索引
setOccupancy(map,midPts,zeros(length(midPts),1),'grid');% 设置这些网格索引的占用率值。
setOccupancy(map,endPts,ones(length(endPts),1),'grid');% 设置这些网格索引的占用率值。
% 中点被视为开放空间。使用已占用的观测更新端点。

% 在地图上绘制原始射线。
% 直线触及的每个网格单元都会被更新。
% 起点与多个单元格重叠,线条触及某些单元格的边缘,但所有单元格仍会被更新。
show(map)
hold on
plot([p1(1) p2(1)],[p1(2) p2(2)],"-b","LineWidth",2)
plot(p2(1),p2(2),"or")
grid on

 

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 3 objects of type image, line. One or more of the lines displays its values using only markers

 

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示机器人所处的环境。该对象包含一个矩阵网格,其中的二进制值表示障碍物为真(1),空闲位置为假(0)。

pose - 传感器的位置和方向
三元素向量
传感器的位置和方向,指定为[x y theta]向量。传感器的姿态是一个 x 和 y 位置,其角度方向 theta(以弧度为单位)是从 x 轴测量的。

range - 射线的范围
标量
射线的范围,以米为单位的标量。

angle - 射线的角度
标量
射线的角度,以弧度为单位的标量。角度值为相应的范围。

p1 - 射线的起点
二元素向量
射线的起点,指定为 [x y] 双元素向量。点的定义以世界帧为基准。

p2 - 射线的端点
二元素向量
以 [x y] 双元素向量形式指定的射线端点。点是相对于世界帧定义的。

输出参数

endpoints - 端点网格指数
n-by-2 矩阵
端点指数,以 [i j] 对的 n乘 2 矩阵形式返回,其中 n 是网格指数的个数。端点是范围值在指定角度的位置。如果端点位于多个单元格的边界上,则会返回多个索引。

midpoints - 中点网格指数
n×2 矩阵
中点指数,以 [i j] 对的 n乘 2 矩阵形式返回,其中 n 是网格指数的个数。该参数包括射线相交的所有网格指数,不包括端点。

rayIntersection

查找射线与所占地图单元的交点

语法

intersectionPts = rayIntersection(map,pose,angles,maxrange)

描述

intersectionPts = rayIntersection(map,pose,angles,maxrange) 返回射线与指定地图中被占单元格的交点。射线从指定的姿势和角度发出。交点以世界坐标框架返回。如果在指定的最大范围内没有交点,则返回 [NaN NaN]。

例子

在占用率地图上获取 Ray 交叉点


map = binaryOccupancyMap(10,10,2);%创建二进制占位网格图。
obstacles = [4 10; 3 5; 7 7];%添加障碍物并使其膨胀。
setOccupancy(map,obstacles,ones(length(obstacles),1))%设置占用值
inflate(map,0.25)
show(map)%使用分辨率较低的地图来说明网格单元大小的重要性。显示地图

% 查找已占用单元格与从给定车辆姿态发出的射线的交点。
% 指定这些射线的最大范围和角度。
% 最后一条射线在最大范围内没有与障碍物相交,因此没有碰撞点。
maxrange = 6;                 %最大范围
angles = [pi/4,-pi/4,0,-pi/8];%发射角度
vehiclePose = [4,4,pi/2];     %车辆姿态
intsectionPts = rayIntersection(map,vehiclePose,angles,maxrange)

hold on
plot(intsectionPts(:,1),intsectionPts(:,2),'*r') % 交叉点
plot(vehiclePose(1),vehiclePose(2),'ob') % 车辆姿势
for i = 1:3
    plot([vehiclePose(1),intsectionPts(i,1)],...
         [vehiclePose(2),intsectionPts(i,2)],'-b') % 绘制相交射线
end
plot([vehiclePose(1),vehiclePose(1)-6*sin(angles(4))],...
     [vehiclePose(2),vehiclePose(2)+6*cos(angles(4))],'-b') %无交叉射线

 

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.

 

intsectionPts = 4×2

    3.5000    4.5000
    6.0000    6.0000
    4.0000    9.0000
       NaN       NaN

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 7 objects of type image, line. One or more of the lines displays its values using only markers

 

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示机器人所处的环境。该对象包含一个矩阵网格,其中的二进制值表示障碍物为真(1),空闲位置为假(0)。

pose - 传感器的位置和方向
三元素向量
传感器的位置和方向,指定为[x y theta]向量。传感器的姿态是一个 x 和 y 位置,其角度方向 theta(以弧度为单位)是从 x 轴测量的。

angles - 从传感器发出的光线角度
矢量
从传感器发出的光线角度,指定为以弧度为单位的矢量。这些角度相对于指定的传感器姿态。

maxrange - 传感器的最大量程
标量
激光测距传感器的最大范围,以米为单位的标量。大于或等于 maxrange 的测距值被认为是整个射线长度上的自由值,直至 maxrange。

输出参数

intersectionPts - 相交点
n-by-2 矩阵
交点,以世界坐标系中 [x y] 对的 n-by-2 矩阵形式返回,其中 n 是角度的长度。

show

显示二进制占用图

语法

show(map)

show(map, "local")

show(map, "grid")

show(___,Name,Value)

mapImage = show(___)

描述

show(map) 在当前轴上显示二进制占位网格图,轴标签代表世界坐标。

show(map, "local")以当前坐标轴显示二进制占位网格图,坐标轴标签代表本地坐标而非世界坐标。

show(map, "grid")在当前坐标轴上显示二进制占位网格图,坐标轴标签代表网格坐标。

show(___,Name,Value) 指定由一个或多个名称-值对参数指定的附加选项。

mapImage = show(___) 返回 show 创建的图像对象的句柄。

例子

移动本地地图并与世界地图同步

% 移动本地地图并与世界地图同步

% 本例展示了如何移动本地自我中心地图,并将其与更大的世界地图同步。
% 此过程模拟车辆在环境中行驶,并获取新区域中障碍物的更新信息。

load exampleMaps.mat    %加载示例地图
map = binaryOccupancyMap(complexMap);% 从complexMap 中创建二进制占用地图
show(map)
% 创建更小的本地地图。
mapLocal = binaryOccupancyMap(complexMap(end-20:end,1:20));
show(mapLocal)

% 跟随世界地图中规划的路径,并在移动本地框架时更新本地地图。
% 指定路径位置并绘制在地图上。
path = [5 2
        8 2
        8 8
        30 8];
show(map)
hold on
plot(path(:,1),path(:,2))
hold off

% 创建一个循环,用于按贴图分辨率在点之间移动。
% 将点之间的差异除以贴图分辨率,以查看可以进行多少增量移动。
for i = 1:length(path)-1
    moveAmount = (path(i+1,:)-path(i,:))/map.Resolution;
    for j = 1:abs(moveAmount(1)+moveAmount(2))
        moveValue = sign(moveAmount).*map.Resolution;
        move(mapLocal,moveValue, ...
            "MoveType","relative","SyncWith",map)
 
        show(mapLocal)
        drawnow limitrate
        pause(0.2)
    end
end

 

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 2 objects of type image, line.

 

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.

 

输入参数

map - 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。该对象表示车辆所处的环境。

Parent - 用于绘制地图的坐标轴
轴对象 | UIAxes 对象
以 Axes 或 UIAxes 对象指定的绘制地图的轴。请参见 Axes 或 uiaxes。

FastUpdate - 更新现有地图地块
0(默认) | 1
更新现有地图绘制,指定为 0 或 1。如果您之前在图形上绘制了地图,则设置为 1 可以更快地更新图形。这对于在循环中更新图形以实现快速动画非常有用。

syncWith

与重叠地图同步

语法

mat = syncWith(map,sourcemap)

描述

mat = syncWith(map,sourcemap)用另一个二进制占位图对象(sourcemap)中的数据更新地图。map 中与 sourcemap 相同的位置会被更新。map 中的所有其他单元格都将设置为 map.DefaultValue。

例子

将地图与重叠地图同步

% 本示例展示了如何使用 syncWith 函数同步两个重叠的地图

% 二维占用图用于表示和可视化机器人工作区
% 在本示例中,我们使用存储在exampleMaps.mat中的现有地图网格值创建二维占位图
load('exampleMaps.mat');

% 使用二进制占用图函数创建并显示一个新的二维空占用图对象。
map1 = binaryOccupancyMap(70,70); 
show(map1) 
title('New Map')

% 使用存储在 complexMap 中的地图网格值创建并显示二维占位图。
map2 = binaryOccupancyMap(complexMap); 
show(map2)
title('Complex Map')

% 现在使用 syncWith 函数更新 map1 和 map2。
syncWith(map1,map2);
show(map1)

 

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

 

Figure contains an axes object. The axes object with title Complex Map, 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.

输入参数

map- 地图表示法
二进制占位Map 对象
地图表示法,指定为二进制 OccupancyMap 对象。

sourcemap - 地图表示法
二进制占位Map 对象
以二进制 OccupancyMap 对象形式指定的地图表示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值