Navigation(四)global_planner源码解析之框架
一、全局规划器概述
对于global planner,可以采用以下三种实现之一: "navfn/NavfnROS","global_planner/GlobalPlanner","carrot_planner/CarrotPlanner"
本文分析其中一种实现:global_planner/GlobalPlanner。
move_base调用global_planner需要修改的文件:
1、bgp_plugin.xml
2、package.xml
以上两个文件都在/global_planner文件夹内
二、根据nav_core提供的BaseGlobalPlanner接口:
initialize(name, costmap) ——算法实例的选取
makePlan(start, goal, plan)——两个步骤完成路径的生成(①计算可行点矩阵potential_array (planner_->calculatePotentials) → ②从可行点矩阵中提取路径plan (path_maker_->getPath))
主要是以下三个实例:
1.计算“一个点”的可行性 —— p_calc_:PotentialCalculator::calculatePotential()、 QuadraticCalculator::calculatePotential()
2.计算“所有”的可行点 —— planner_:DijkstraExpansion::calculatePotentials()、 AStarExpansion::calculatePotentials()
3.从可行点中“提取路径” —— path_maker_:GridPath::getPath()、 GradientPath::getPath()
涉及到四个算法程序:A*, Dijkstra;gradient_path, grid_path
可以总结出global_planner框架:
参考资料:
https://zhuanlan.zhihu.com/p/46212318