基于MATLAB的PRM算法的路径规划设计
下载链接:
【Matlab期末大作业】基于MATLAB的PRM算法的路径规划设计(大报告+源代码+注释)
- 课题内容和要求
学会运用MATLAB 解决实际优化问题,例如粒子群优化算法,模拟退火算法等。要求每个同学任意选择学习一种智能优化算法,并应用解决路径规划问题。也可以多名同学进行组队,利用多种算法求解同一问题,并对比不同算法求解特定问题的性能。
1:随机生成具有空白区域和路障区域的二维仿真地图,保证起点和终点之间有一条路径可达。
2:任意选择学习一种智能优化算法,例如PRM算法,粒子群优化算法,蚁群算法,模拟退火算法等。
3:利用选择的优化算法去解决路径规划的问题,并且通过GUI界面显示规划好的路径结果。
二、需求分析
地图生成模块(build):实现二维仿真地图,具备空白区域(自由通行)和黑色区域(路障禁止通行);每次随机生成空白格子和黑色格子的数量和位置不同;在每次生成的地图中,固定起点和终点位置,保证在每次的随机地图中,两点间必有一条路径可达。
PRM算法模块(PRM):基于PRM算法思想,实现PRM概率路径的算法设计,并且能够基于随机地图去找到多种可行的路径规划方案。
画图模块(dijkstar):根据PRM算法求解随机地图的路径链表,选取dijkstar描绘出一条合适的路径;基于MATLAB的GUI模块设计出便于人机交互的可视化图形界面,显示出最终的算法规划结果。
三、概要设计
- Node类: classdef Node
创建了一个Node类用来代表无向图中的节点,每个Node都记录着与自己相邻的所有节点以及其连接边的代价值,并通过创建一个Node的结构图数组node_list来表示整个无向图。
类的成员包括:
type:节点的类型(起点、终点、路点)。
coordinate:节点的实际坐标。
adjacent_coordinate:与该节点相邻的所有节点的坐标。
adjacent_index:与该节点相邻的所有节点在node_list中的索引。
cost:与相邻点的边的代价值。
2.计算距离函数: function dis = distance(node1, node2)
用欧几里得度量(euclidean metric)计算二维空间两个Node节点间的实际距离;欧几里得度量(欧氏距离)是欧几里得空间中两点间“普通”(即直线)距离,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。
计算公式如下:
3.碰撞检测函数: function result = ObstacleCheck(start, target, Map, step_length)
碰撞检测是PRM算法中十分重要的部分。如果没有碰撞检测机制,就无法正确构建一张避开障碍的无向图,也就无法生成一条规划好的路径。
碰撞检测机制如下图所示:
假设要对A,B两点之间的连线进行碰撞检测,那么就需要对矢量AB进行等距采样,从中分割出若干个等间距的采样点,从而逐个检测其是否位于障碍物的位置。至于要从中取多少个采样点,这取决于你对其检测精度的要求。
采样点的个数取决于对碰撞检测精度的要求。显而易见的是,采样点越多,碰撞检测结果就越精确,但是当采样点的数量到达某一阈值后,随着其数目的增加,检测精度的提高并没有明显得提升,相反,过多的采样点在一定程度上增加了计算的压力,降低了程序运行时的性能。
碰撞函数的流程图如下:
4.随机地图生成:build.m
基于深度优先搜索法去遍历地图中的所有可通行点,并且生成一条连通的可行路径。深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
随机地图生成的流程图如下:
5.PRM路径生成函数:
function[NodeList]=PRM_Builder(Map,origin,destination,sampling_points,step_length_limit, show_graph)
PRM是基于启发式节点增强策略的一种路径规划方法,很好的解决了在高维空间中构造出有效路径图的困难。它通过在构形空间中进行采样、对采样点进行碰撞检测、测试相邻采样点是否能够连接来表示路径图的连通性。此方法的一个巨大优点是,其复杂度主要依赖于寻找路径的难度,跟整个规划场景的大小和构形空间的维数关系不大。 然而当规划的路径需要通过密集的障碍物或者需要经过狭窄的通道时,PRM方法的效率变的低下。
PRM的作用:PRM的主要任务是将原本的栅格地图转化为一张稀疏无向图,然后将简化得到的无向图交给Dijkstar进行查询。
PRM路径生成函数的流程图如下:
6.主程序: begin.m
调用不同的函数与M文件,实现对随机地图的可行路径规划。
主程序流程图如下:
7.GUI设计
四、详细设计
1. Node类
2.计算距离函数:
3. 碰撞检测函数:
4. 随机地图生成:
5.PRM路径算法:
6. GUI函数:
6.测试数据以及结果如下:
序号 | 起点 | 终点 | 地图大小 | 步长限制 | 采样点 | 时间结果 | |
1 | (0,1) | (11,10) | 11 x 11 | 5 | 100 | 6.16s | 成功 |
2 | (0,1) | (11,10) | 11 x 11 | 20 | 100 | 3.88s | 成功 |
3 | (0,1) | (15,14) | 15 x 15 | 5 | 200 | 20.78s | 成功 |
4 | (0,1) | (15,14) | 15 x 15 | 5 | 100 | 15.10s | 失败 |
5 | (0,1) | (15,14) | 15 x 15 | 5 | 200 | 49.58s | 成功 |
7.测试数据及其结果分析
1:成功
2:成功
3:成功
4:失败