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

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

在这个例子中,地图被表示为使用输入的数据的占用栅格地图。当在图中的自由空间采样节点,PRM使用该二进制占用网格表示推断的自由空间。此外,当计算在地图上的障碍物自由路径PRM不考虑机器人尺寸。因此,你应该通过充气机器人的尺寸图,为了让计及机器人的大小,并确保避免碰撞的实际机器人障碍自由路径的计算。定义开始和地图的PRM路径规划的结束位置找到一个无障碍物路径。

导入用于规划路径的示例映射

加载exampleMaps.mat

导入的地图有:simpleMapcomplexMapternaryMap

谁是*地图*
名字大小字节类属性complexMap 41x52 2132逻辑emptyMap 26x27 702逻辑simpleMap 26x27 702逻辑ternaryMap 501x501 2008008双

使用进口simpleMap数据以及使用该构建的占用网格表示binaryOccupancyMap对象。将此地图的分辨率设置为每米2个单元格。

MAP = binaryOccupancyMap(simpleMap,2);

使用显示在地图表演功能上的binaryOccupancyMap宾语

显示地图)

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

为了确保机器人不与任何障碍物发生碰撞,你应该把它提供给PRM路径规划之前充气机器人的尺寸的地图。

这里机器人的尺寸可以被假定为具有0.2米半径的圆。然后,您可以通过此维度使用膨胀地图膨胀功能。

robotRadius = 0.2;

如前所述,PRM不占机器人的尺寸,并因此提供一种充气位置图PRM考虑到机器人尺寸。使用之前创建的副本地图膨胀功能保留原始地图。

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

显示地图膨胀

显示(mapInflated)

构造PRM并设置参数

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

PRM = mobileRobotPRM;

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

prm.Map = mapInflated;

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

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

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

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

在建立的PRM上寻找可行路径

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

startLocation = [2 1];EndLocation所= [12 10];

方法在开始和结束位置之间搜索路径findpath功能。该解决方案是一组从开始位置到结束位置的路径点。注意,路径会因PRM算法的概率性而有所不同。

路径= 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解决方案。

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

使用PRM一个大而复杂地图

使用进口complexMap数据,其表示大而复杂的平面图,并构造一个二进制占用网格表示与给定的分辨率(每米1个细胞)

MAP = binaryOccupancyMap(complexMap,1);

显示地图。

显示地图)

基于地图上的充气机器人尺寸

复制和膨胀地图,以考虑机器人的大小,以避障

mapInflated = (map)复印件;膨胀(mapInflated,robotRadius);

显示地图膨胀。

显示(mapInflated)

随着新地图和设置参数相关联的现有PRM对象

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

prm.Map = mapInflated;

设置NumNodesConnectionDistance属性。

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

显示PRM图。

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

在建立的PRM上寻找可行路径

在地图上定义起点和终点位置,以找到一条没有障碍物的路径。

startLocation = [3 3〕;EndLocation所= [45 35];

搜索开始和结束位置之间的解决方案。对于复杂的地图,可能不存在对于给定数目的节点(返回一个空路径)的可行路径。

路径= findpath(PRM,startLocation,EndLocation组件);

既然你正在规划一个大型而复杂的地图上的路径,可能需要更大的节点数量。然而,往往是不明确的许多节点将如何就足够了。调整节点的数量,以确保有开始和结束位置之间的可行路径。

的isEmpty(路径)%未找到可行路径,增加节点数prm.NumNodes = prm.NumNodes + 10;使用|更新|功能重新创建更改后的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⋮

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

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