1.程序概述
1.1 程序来源
- 程序来源:
Kurzer, Karl写于2015年,算法基于hyridAstar.结合了基于采样和基于搜索的方法的优点.
github 链接 - 算法来源:
程序中涉及到的算法来源于: hybrid A* algorithm developed by Dmitri Dolgov and Sebastian Thrun (Path Planning for Autonomous Vehicles in Unknown Semi-structured Environments DOI: 10.1177/0278364909359210)
1.2 程序的特点
优点:
- 结合了基于搜索树和基于A星的优点.
- 拓展了离散空间的状态.状态的数量和距离目标的距离成反比.便于更快搜索到路径
- 改进了启发式,采用只考虑动作约束的RR启发式和只考虑障碍物的一般启发式的结合,获得了比两者都要好的性能.
缺点:
- 出来的曲线不是全局最优的,需要进行进一步优化.原文中,作者也做了进一步的优化.
- 适用于有约束的场合,如果机器人是差速或者全向的,就没必要使用混合式A星,反而会降低速度.
1.3 适用场景
主要适用于阿克曼底盘的机器人.为其提供一个粗略的初始路径.
2.程序框架
这里暂且分析一个程序:manual.laungh
,手动规划路径.
<launch>
<!-- Turn on hybrid_astar node -->
<node name="hybrid_astar" pkg="hybrid_astar" type="hybrid_astar" />
<node name="tf_broadcaster" pkg="hybrid_astar" type="tf_broadcaster" />
<node name="map_server" pkg="map_server" type="map_server" args="$(find hybrid_astar)/maps/map.yaml" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find hybrid_astar)/launch/config.rviz" />
</launch>
可以看到,程序可以分成4个部分:
- hybrid_astar
- tf_broadcaster
- map_server
- rviz
打开rqt_graph
查看节点之间的关系:
![[混合式A星代码解析 2022-06-17 15.42.55.excalidraw]]
一共有4个节点,
分别的功能为:
节点名 | 对应程序 | 功能 |
---|---|---|
/a_star | main.cpp -> Planner.cpp | 规划的主程序 |
/tf_broadcaster | tf_broadcaster.cpp | 坐标转换 |
/map_server | navigation/map_server/src/map_server.cpp | 提供地图 |
/rivz | 略 | 可视化 |