主要内容

不同复杂性环境下的路径规划

这个例子演示了如何使用概率路线图(PRM)路径规划器计算给定地图上两个位置之间的无障碍路径。PRM路径规划师利用自由空间中随机采样的节点在给定的映射的自由空间中构造一个路线图,并将它们彼此连接起来。一旦构建了路线图,您就可以查询从地图上给定的起始位置到给定的结束位置的路径。

在本例中,地图表示为使用导入数据的占用网格地图。当对地图的自由空间中的节点进行采样时,PRM使用这种二进制占用网格表示来推断自由空间。此外,在计算地图上的无障碍路径时,PRM没有考虑机器人的尺寸。因此,您应该根据机器人的尺寸来膨胀地图,以便计算出符合机器人尺寸的无障碍路径,并确保实际机器人的避碰性。在地图上为PRM路径规划器定义起点和终点位置,以找到无障碍路径。

导入规划路径的映射示例

负载exampleMaps.mat

导入的地图包括:simpleMapcomplexMapternaryMap

*地图*
名称大小字节类属性complexMap 41x52 2132 logical emptyMap 26x27 702 logical simpleMap 26x27 702 logical ternaryMap 501x501 2008008 double

使用进口simpleMap的数据并构造占用网格表示binaryOccupancyMap对象。将此地图的分辨率设置为2格/米。

地图= binaryOccupancyMap (simpleMap 2);

显示地图使用显示功能上的binaryOccupancyMap对象

显示(图)

图中包含一个坐标轴。标题为二进制占用网格的轴包含一个类型为image的对象。

定义机器人尺寸并膨胀地图

为了确保机器人不会与任何障碍发生碰撞,在将其提供给PRM路径规划器之前,应该根据机器人的尺寸膨胀地图。

这里机器人的尺寸可以假设为半径为0.2米的圆。然后,您可以使用膨胀函数。

robotRadius = 0.2;

如前所述,PRM不考虑机器人的维度,因此向PRM提供一个膨胀的映射将考虑机器人的维度。属性之前创建映射的副本膨胀函数保存原始映射。

mapInflated = (map)复印件;充气(mapInflated robotRadius);

显示的地图

显示(mapInflated)

图中包含一个坐标轴。标题为二进制占用网格的轴包含一个类型为image的对象。

构造PRM并设置参数

现在您需要定义一个路径规划器。创建一个mobileRobotPRM对象并定义关联的属性。

人口、难民和移民事务局= mobileRobotPRM;

将膨胀的映射分配给PRM对象

人口、难民和移民事务局。地图= mapInflated;

定义在PRM构建期间使用的PRM节点的数量。PRM使用给定映射上的给定节点数量构造一个路线图。根据输入映射的维度和复杂性,这是要调优的主要属性之一,以便在映射上的两个点之间获得解决方案。大量的节点创建一个密集的路线图,增加了找到路径的概率。然而,节点越多,创建路线图和寻找解决方案的计算时间就越长。

人口、难民和移民事务局。NumNodes = 50;

定义地图上两个连接节点之间的最大允许距离。PRM连接地图上被这个距离(或更小)分隔的所有节点。这是在较大和/或复杂的输入映射情况下需要调优的另一个属性。较大的连接距离增加了节点之间的连通性,更容易找到路径,但会增加路线图创建的计算时间。

人口、难民和移民事务局。ConnectionDistance = 5;

在构造的PRM上寻找可行路径

在地图上定义路径规划器要使用的开始和结束位置。

startLocation = [2 1];endLocation = [12 10];

属性查找起始位置和结束位置之间的路径findpath函数。解决方案是一组从起始位置到结束位置的路径点。请注意,路径会因PRM算法的概率性质而有所不同。

path = findpath(prm, startLocation, endLocation)
路径=7×22.0000 1.0000 1.9569 1.0546 1.8369 2.3856 3.2389 6.6106 7.8260 8.1330 11.4632 10.5857 12.0000 10.0000

显示PRM解决方案。

显示(人口、难民和移民事务局)

图中包含一个坐标轴。以“概率路线图”为标题的坐标轴包含图像、线、散点4个对象。

对大而复杂的地图使用PRM

使用进口complexMap数据,它表示一个庞大而复杂的楼层平面图,并构建一个给定分辨率(1 cell per meter)的二进制占用网格表示。

地图= binaryOccupancyMap (complexMap, 1);

显示地图。

显示(图)

图中包含一个坐标轴。标题为二进制占用网格的轴包含一个类型为image的对象。

基于机器人维度膨胀地图

复制并膨胀地图,以考虑到机器人的大小,以避免障碍

mapInflated = (map)复印件;充气(mapInflated robotRadius);

显示的地图。

显示(mapInflated)

图中包含一个坐标轴。标题为二进制占用网格的轴包含一个类型为image的对象。

将现有的PRM对象与新映射关联并设置参数

使用新膨胀的映射更新PRM对象,并定义其他属性。

人口、难民和移民事务局。地图= mapInflated;

设置NumNodesConnectionDistance属性。

人口、难民和移民事务局。NumNodes = 20;人口、难民和移民事务局。ConnectionDistance = 15;

人口、难民和移民事务局图显示。

显示(人口、难民和移民事务局)

图中包含一个坐标轴。以“概率路线图”为标题的坐标轴包含图像、线、散点三种对象。

在构造的PRM上寻找可行路径

在地图上定义开始和结束位置以找到无障碍路径。

startLocation = [3 3];endLocation = [45 35];

在起始位置和结束位置之间寻找解决方案。对于复杂映射,对于给定数量的节点可能没有可行路径(返回空路径)。

路径= findpath(prm, startLocation, endLocation);

由于您是在一个大型且复杂的映射上规划路径,因此可能需要更多的节点。然而,通常不清楚多少节点才足够。调整节点的数量,以确保在开始和结束位置之间有可行的路径。

isempty(路径)未找到可行路径,请增加节点数人口、难民和移民事务局。NumNodes =人口、难民和移民事务局。NumNodes + 10;%使用|update|函数重新创建更改后的PRM路线图%属性更新(人口、难民和移民事务局);%使用更新后的PRM搜索可行路径路径= findpath(prm, startLocation, endLocation);结束

显示路径。

路径
路径=12×23.0000 3.0000 4.2287 4.2628 7.7686 5.6520 6.8570 8.2389 19.5613 8.4030 33.1838 8.7614 31.3248 16.3874 41.3317 17.5090 48.3017 25.8527 49.4926 36.8804⋮

人口、难民和移民事务局显示的解决方案。

显示(人口、难民和移民事务局)

图中包含一个坐标轴。以“概率路线图”为标题的坐标轴包含图像、线、散点4个对象。