混合式A星代码解析_1 概述和框架

1.程序概述

混合式A星代码解析_1 概述和框架_第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 可视化

你可能感兴趣的:(自动驾驶,人工智能,c++)