第二章我们则对功能包的文件及类进行解析:
首先我们看一下功能包里面有什么类分别作用(由于本人刚刚入门uml,故图片可能有所偏差)
里面最主要的就是插件算法类GlobalPlanner父类nav_core::BaseGlobalPlanner,而路径搜索分别是DijkstraExpansion(地杰斯特拉算法)、AStarExpansion(astar算法),路径回溯PotentialCalculator、QuadraticCalculator(使用梯度下降)
然后我们看一下里面有哪些文件:
.
├── bgp_plugin.xml
├── cfg
│ └── GlobalPlanner.cfg
├── CMakeLists.txt
├── include
│ └── global_planner
│ ├── astar.h
│ ├── dijkstra.h
│ ├── expander.h
│ ├── gradient_path.h
│ ├── grid_path.h
│ ├── orientation_filter.h
│ ├── planner_core.h
│ ├── potential_calculator.h
│ ├── quadratic_calculator.h
│ └── traceback.h
├── package.xml
└── src
├── astar.cpp
├── dijkstra.cpp
├── gradient_path.cpp
├── grid_path.cpp
├── orientation_filter.cpp
├── planner_core.cpp
├── plan_node.cpp
└── quadratic_calculator.cpp
bgp_plugin.xml是用来注册导航插件的,而 GlobalPlanner.cfg文件则是动态参数调节所用文件,主要解析以下头文件及cpp文件:
以下对文件及类进行简单对应:
首先呢,各个类继承关系没什么难度,在planner core cpp中initialize()方法对导航进行初始化的时候,根据上一章所述的参数
如果参数use_quadratic为ture即使用二次近似函数则实例化QuadraticCalculator类,false则实例化PotentialCalculator
参数use_dijkstra是否使用地杰斯特拉算法true则实例化DijkstraExpansion否则实例化AStarExpansion(astar)
参数use_grid_path是否沿边界创建路径,true则实例化GridPath,false则实例化GradientPath使用梯度下降算法。
而各个类的主要方法也已经列出
GlobalPlanner 进行初始化时会调用initialize()方法
而每当我们需要规划路径时调用makeplan服务,GlobalPlanner会调用makePlan()方法★ 也是我们路径规划的核心步骤。