主要内容

占用网格

概述

利用占据网格将机器人工作空间表示为离散网格。可以从传感器实时收集环境信息,也可以根据预先获取的信息进行加载。激光测距仪、碰撞传感器、摄像机和深度传感器通常用于寻找机器人环境中的障碍物。

占用网格用于机器人算法,如路径规划(参见移动机器人(机器人系统工具箱)规划师)。它们用于将传感器信息集成到离散地图中的地图应用程序,用于寻找无碰撞路径的路径规划,以及用于在已知环境中定位机器人(参见monteCarloLocalization匹配扫描).您可以创建具有不同大小和分辨率的地图,以适合您的特定应用程序。万博 尤文图斯

有关三维入住地图,请参见occupancyMap3D

对于二维占用栅格,有两种表示:

二进制占用网格使用符合事实的表示占用工作空间(障碍物)的值,以及错误的值表示自由工作区。这个网格显示了障碍物在哪里,以及机器人是否可以通过这个空间。如果内存大小是应用程序中的一个因素,则使用二进制占用网格。

概率占据网格使用概率值来创建更详细的地图表示。这种表示是使用占用网格的首选方法。这种网格通常被简单地称为居住网格。占用网格中的每个单元格都有一个代表该单元格占用概率的值。接近1的值表示该单元格包含障碍的高确定性。接近0的值表示确定单元格未被占用且无障碍物。概率值可以提高目标的保真度,提高某些算法应用的性能。

二进制和概率占用网格共享若干属性和算法细节。栅格和世界坐标适用于这两种类型的占用栅格。膨胀函数也适用于两个网格,但每个网格的实现方式不同。对数优势表示和概率饱和的影响仅适用于概率占用网格。

世界坐标、栅格坐标和局部坐标

在MATLAB中使用占用网格时®,可以使用世界坐标、局部坐标或栅格坐标。

机器人在其中工作的绝对参考系被称为世界框架在居住网格中。大多数操作是在world框架中执行的,它是在这个工具箱中使用MATLAB函数时的默认选择。世界坐标作为一个固定原点的绝对坐标系,点可以用任何分辨率指定。然而,由于数据存储和地图本身的分辨率限制,所有位置都被转换为网格位置。

局部框架指车辆在地图上导航时以自我为中心的框架GridOriginInLocal本地原创世界属性定义网格在局部坐标中的原点以及局部框架在世界坐标中的相对位置移动函数。有关使用局部框架作为自我中心地图来模拟车辆移动和发送局部障碍的示例,请参见使用距离传感器创建以自我为中心的占用地图

网格坐标定义了占用网格的实际分辨率和障碍物的有限位置。网格坐标的原点在网格的左上角,第一个位置有索引(1,1).然而GridLocationInWorldMATLAB中占用网格的属性在世界坐标系中定义网格的左下角XWorldLimits世界极限是由输入定义的宽度高度决议。此图显示了这些属性的可视化表示以及世界坐标和栅格坐标之间的关系。

坐标膨胀

二进制和普通占用网格都有一个膨胀障碍物的选项。这种膨胀用于增加障碍物上的安全系数,并在机器人和环境中的障碍物之间创建缓冲区使充气占用栅格对象的函数转换指定的半径到从分辨率*半径每个算法分别使用此单元格值来修改障碍物周围的值。

二进制占用网格

使充气函数获取每个占用的单元格,并通过在每个点周围添加占用的空间来直接对其进行充气。此基本充气示例说明了如何使用半径值。

在二元居住网格中膨胀障碍物

此示例显示了如何创建地图、设置障碍物位置并将其膨胀1米半径。图上的其他图有助于说明由于转换为栅格位置而产生的膨胀和移动。

创建二进制占用网格。设置位置[5,5]的占用。

map=BinaryOccupencyMap(10,10,5);SetOccupage(map[5],1);

将地图上被占用的空间膨胀1米。

充气(图1);显示(图)

图中包含一个轴。带有标题的轴包含一个image类型的对象。

绘制原位置,转换网格位置,绘制原圆。从图中可以看出,网格中心为[4.9 4.9],从[5 5]位置偏移。从这里画出一个1米的圆圈,注意到任何接触到这个圆圈的细胞都被标记为已占用。图被放大到相关区域。

持有在…上θ= linspace(0, 2 *π);x = 4.9 + cos(θ);%x圆坐标y = 4.9 +罪(θ);%y圆坐标图(5 5‘* b”“MarkerSize”, 10)%原址图(4.9,4.9,“xr”“MarkerSize”, 10)%网格定位中心图(x,y,“-r”“线宽”,2);%半径为1m的圆。轴([3.6 6 3.6])ax=gca;ax.XTick=[3.6:0.2:6];ax.YTick=[3.6:0.2:6];网格在…上传奇(“原始位置”“网格中心”“通货膨胀”

图中包含一个坐标轴。以二进制占用网格为标题的坐标轴包含图像、直线等4个对象。这些对象代表原始位置,网格中心,膨胀。

从上图中可以看出,即使是与膨胀半径几乎没有重叠的细胞也被标记为已占用。

占用网格

使充气函数使用充气半径执行以下操作:概率通货膨胀. 概率膨胀作为一个局部最大算子,为附近的单元找到最高的概率值。这个使充气函数使用此定义在整个网格中对较高的概率值进行充气。此充气增加了任何占用位置的大小,并为机器人在障碍物周围导航创建了缓冲区。此示例显示了充气如何在一系列概率值下工作。

为占用网格中的障碍物充气

此示例显示了充气方法如何对障碍物执行概率充气,以增大其大小,并为障碍物概率较高的区域创建缓冲区。

创建10米x 10米的空地图。

地图=职业地图(10,10,10);

使用中的特定值更新世界各地的入住率pvalues

x=[1.2;2.3;3.4;4.5;5.6];y=[5.0;4.0;3.0;2.0;1.0];pvalues=[0.2 0.4 0.6 0.8 1];updateOccupancy(地图,[x y],pvalues)图形显示(地图)

图中包含一个轴。带有标题占用网格的轴包含一个image类型的对象。

按给定半径对占用区域进行充气。较大的占用率值写在较小的值上。您可以事先复制地图以恢复任何不需要的更改。

savedMap = (map)复印件;充气(图0.5)图显示(图)

图中包含一个轴。带有标题占用网格的轴包含一个image类型的对象。

概率值的对数赔率表示

当使用具有概率值的占用网格时,目标是估计用于实时机器人应用的障碍物位置的概率。这个职业地图类使用对数赔率表示每个单元格的概率值。每个概率值被转换为一个相应的日志概率值,以便内部存储。该值在访问时被转换回概率。这种表示以最少的操作有效地更新概率值。因此,可以快速地将传感器数据集成到地图中。

对数赔率表示使用以下等式:

请注意

日志赔率值存储为int16价值观此数据类型将概率值的分辨率限制为±0.001,但极大地改善了内存大小,并允许创建更大的贴图。

概率饱和

当使用log-odds表示用观察值更新占用网格时,值的范围是-∞到∞。这个范围意味着,如果一个机器人多次观察一个位置,比如一个关闭的门,这个位置的对数概率值就会变得不必要的高,或者值概率达到饱和。如果门打开了,机器人需要观察门打开多次,然后概率从被占用到自由。在动态环境中,您希望映射对更改作出反应,以更准确地跟踪动态对象。

要防止此饱和,请更新概率饱和属性,它限制了在合并多个观测值时所允许的最小和最大概率值。此属性是日志概率值的上限和下限,并允许映射根据环境中的更改快速更新。饱和度限制的默认最小值和最大值为[0.001 0.999]。对于动态环境,建议的值至少为[0.12 0.97]如果地图没有足够快地更新以进行多个观察,请考虑修改此范围。

另见

||

相关话题