-
Notifications
You must be signed in to change notification settings - Fork 426
使用Astar进行全局路径规划
全局路径规划是在已知的环境中,给机器人规划一条路径,路径规划的精度取决于环境获取的准确度,全局路径规划可以找到最优解,但是需要预先知道环境的准确信息,当环境发生变化,如出现未知障碍物时,该方法就无能为力了。它是一种事前规划,因此对机器人系统的实时计算能力要求不高,虽然规划结果是全局的、较优的,但是对环境模型的错误及噪声鲁棒性差。
局部路径规划则环境信息完全未知或有部分可知,侧重于考虑机器人当前的局部环境信息,让机器人具有良好的避障能力,通过传感器对机器人的工作环境进行探测,以获取障碍物的位置和几何性质等信息,这种规划需要搜集环境数据,并且对该环境模型的动态更新能够随时进行校正,局部规划方法将对环境的建模与搜索融为一体,要求机器人系统具有高速的信息处理能力和计算能力,对环境误差和噪声有较高的鲁棒性,能对规划结果进行实时反馈和校正,但是由于缺乏全局环境信息,所以规划结果有可能不是最优的,甚至可能找不到正确路径或完整路径。
两者协同工作,机器人可更好的规划从起始点到终点的行走路径。
A*算法是全局启发式搜索算法,是一种尽可能基于现有信息的搜索策略,也就是说搜索过程中尽量利用目前已知的诸如迭代步数,以及从初始状态和当前状态到目标状态估计所需的费用等信息。
A*算法在选择下一个被检查的节点时考虑来之前花费代价,同时使用到目标距离作为引导,两者之和作为评价该节点处于最优路线上的可能性的量度,这样可以首先搜索到位于最优路径上可能性大的节点。
A算法的基本思想如下:引入当前节点j的估计函数$f^$,当前节点j的估计函数定义为:
$f^(j)= g(j)+h^(j)$
其中$g(j)$是从起点到当前节点j的实际代价的量度,$h^(j)$是从节点j到终点的最小消耗的估计,可以依据实际情况,选择$h^(j)$的具体形式,$h^(j)$要满足一个要求:不能高于节点j到终点的实际最小费用。从起始节点点向目的节点搜索时,每次都搜索$f^(j)$最小的节点,直到发现目的节点。
与算法相关的程序有
- 主节点:
global_planner_node.cpp
- 全局规划算法管理函数:
global_planning.cpp
- A star算法:
A_star.cpp
- 地图处理程序:
occupy_map.cpp
使用激光雷达作为传感器
-
运行launch文件(请查看launch文件参数说明,并进行调整)
roslaunch prometheus_gazebo sitl_astar_3dlidar.launch
-
在打开的rviz窗口中勾选
Global_Planner
、Octomap_Mapping
及Ground_Truth
显示 -
输入2选择A_star算法,无人机将自动起飞
-
也可以通过终端发布目标点
rostopic pub /prometheus/planning/goal ...
运行截图:
感谢使用Prometheus自主无人机软件平台!