global_planner解析(2)

15 篇文章 0 订阅
7 篇文章 14 订阅

第二章我们则对功能包的文件及类进行解析:
首先我们看一下功能包里面有什么类分别作用(由于本人刚刚入门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()方法★ 也是我们路径规划的核心步骤。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: global_planner是ROS中的一个全局路径规划器,它可以根据地图和起点终点信息,生成一条全局路径。该路径规划器的源码解析可以帮助我们更好地理解其实现原理和算法。 global_planner的源码主要包括以下几个文件: 1. global_planner.cpp:该文件是全局路径规划器的主要实现文件,其中包含了路径规划的核心算法和逻辑。 2. grid_path.cpp:该文件实现了栅格地图的路径规划算法,包括A*算法和Dijkstra算法。 3. orientation_filter.cpp:该文件实现了路径方向的滤波算法,可以使路径更加平滑。 4. potential_field.cpp:该文件实现了基于势场的路径规划算法,可以避免障碍物和局部最优解。 在global_planner.cpp文件中,主要实现了以下几个函数: 1. makePlan:该函数是全局路径规划器的入口函数,它接收起点和终点的坐标信息,并调用其他函数进行路径规划。 2. initialize:该函数用于初始化全局路径规划器,包括读取参数、订阅地图和起点终点信息等。 3. computePotential:该函数实现了基于势场的路径规划算法,它会根据地图和障碍物信息计算每个点的势能值,并生成一张势能地图。 4. getPlanFromPotential:该函数根据势能地图和起点终点信息,使用A*算法或Dijkstra算法生成一条全局路径。 5. publishPlan:该函数将生成的全局路径发布出去,供其他节点使用。 总的来说,global_planner的源码实现了多种路径规划算法,可以根据不同的场景和需求进行选择。同时,它还实现了路径方向的滤波和势场的优化,可以使路径更加平滑和避免局部最优解。 ### 回答2: global_planner是ROS中的一个全局路径规划器,主要用于自动驾驶、机器人导航等领域。其核心算法是基于A*算法的Dijkstra和A*算法的融合。当起点和终点之间存在障碍物时,它会自动计算一条绕过障碍物的路径来达到终点。 global_planner的源码分为四个主要的文件:planner_core.cpp、dijkstra.cpp、astar.cpp和potential_fields.cpp。planner_core.cpp是这个路径规划器的主要文件,它定义了全局路径规划器的核心功能。 其中,Dijkstra算法是一个广度优先搜索算法,可以扩展当前可达节点的最短路径来找到起点到终点的最短路径。而A*算法则是在Dijkstra的基础上添加了启发式信息,即由启发式函数的估计值来指导搜索的方向,这样可以加快搜索速度。 在global_planner中,通过将Dijkstra算法和A*算法的两种算法进行融合,可以提高路径搜索的效率。同时,该算法还引入了potential_fields动力学概念,从而实现了避免障碍物的自适应路径规划,让机器人能够在不同场景下得到最有效的路径。 总的来说,global_planner的源码解析需要解释算法的原理、实现中的细节、运行过程中的各种参数以及算法效率等方面的内容。对于研究领域的专家和从事相关开发工作的人员,都需要有一定的数学和编程技能,才能够深入了解global_planner的工作原理和实现方式。 ### 回答3: global_planner是ROS中一个非常重要的全局路径规划器,它能够帮助机器人在未知环境中规划一条全局路径,使机器人能够尽可能地到达目标点,并且避开障碍物。本文将针对global_planner的源码进行解析,帮助读者更好地理解和使用该工具。 global_planner的源码分为两个部分:头文件和源文件。头文件定义了全局变量和函数声明,源文件实现了各种函数和算法。 在头文件中,首先定义了ros/ros.h和std_msgs/MapMetaData.h两个ros消息,用于表示全局地图的元数据和地图本身。同时,头文件中还定义了CellData和Cell的两个子类,用于表示地图中的单元格和单元格的信息。此外,还定义了一个Costmap2D类,用于存储3D地图数据和提供相关函数。 源文件中实现了多种路径规划算法,包括Dijkstra、A*、ARA*和Wavefront等。其中,Wavefront算法是一种基于搜索的路径规划算法,它以机器人当前位置为起点,传播到目标位置时,遇到的障碍物通过标记颜色进行标识。Wavefront算法可以在具有稀疏障碍物的环境中生成平滑的路径。 在global_planner源码中,还实现了一个名为makePlan的函数,用于在地图上规划一条全局路径。该函数首先在地图上搜索到目标位置,并使用A*算法计算出到达目标位置的最短路径。然后,该函数使用ARA*算法对路径进行平滑,避免机器人在前进时发生急剧转弯。最后,该函数返回一个包含路径的向量,并将该向量发送到Topic,供其他节点使用。 总结而言,global_planner是ROS中一个非常强大的全局路径规划器。它包含多种路径规划算法,可以在不同的场景下进行路径规划。在使用global_planner时,需要了解其中的算法与设计思路,才能更好地进行调用和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值