手把手教你将A*算法作为全局路径规划器应用于ROS

本文详细介绍了如何将A*算法应用于ROS的全局路径规划器。从创建ROS工作空间、编写Astar.cpp/h文件,到注册插件、修改CMakeLists.txt,再到生成XML描述文件和package.xml的更新,一步步手把手教学,最终实现自定义规划器的调用与使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

未经作者同意禁止转载

首先创建ROS环境:

mkdir -p aster_ws/src

cd aster_ws/src

catkin_init_workspace

cd ..

catkin_make

第一步:创建功能包并添加依赖:

cd src

catkin_create_pkg astar_planner nav_core roscpp rospy std_msgs pluginlib

第二步:把自己写的 astar.cpp 和 astar.h 文件放进功能包的src文件中

astar.cpp 和 astar.h 源码我已经上传到我的优快云

白嫖链接:为自己打造 a 世界 / Aster · GitCode

第三步:把自己写的全局规划器注册为一个插件(已在源码中体现),在astar.cpp文件中加入以下代码:

记住Astar_planner::AstarPlannerROS,分别是代码的命名空间和类名,后面将多次出现,不能出错。

PLUGINLIB_EXPORT_CLASS(Astar_planner::AstarPlannerROS, nav_core::BaseGlobalPlanner)

第四步:修改功能包的CMakeLists.txt文件

catkin_package(

INCLUDE_DIRS include

# LIBRARIES Astar_planner

CATKIN_DEPENDS nav_core pluginlib roscpp rospy std_msgs

# DEPENDS system_lib

)

 

add_library(Astar_planner_lib

     src/astar.cpp

)

第五步:编译功能包,Aster/devel/lib下会生成libAstar24_planner_lib.so文件

在aster_ws目录下编译:

第六步:为我们的规划器写⼀个.xml描述⽂件,文件名Astar_planner.xml

在aster_planner目录下新建文件:

touch Aster_planner.xml

Aster_planner.xml文本内容如下,一定要记住名字,前面出现过哦name="Astar_planner/AstarPlannerROS",这个将是你调用插件时的名字

<library path="lib/libAstar_planner_lib">
   <class name="Astar_planner/AstarPlannerROS" type="Astar_planner::AstarPlannerROS" base_class_type="nav_core::BaseGlobalPlanner">
      <description>This is a global planner plugin by iroboapp project.</description>
    </class>
</library>

第七步:修改package.xml⽂件,在最后面包含刚刚写的.xml文件


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->
    <nav_core plugin="${prefix}/Astar_planner.xml" />
  </export>
</package>

 此时路径规划器已经写完。

注意:在其他窗口调用时,一定要 source 这个ROS包的环境变量

全局规划器调用过程:

调用move_base功能包时,通过参数加载自定义的全局规划器

<launch>

    <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
        
        <!-- 加载自己写的全局规划器 -->
        <param name="base_global_planner" value="Astar_planner/AstarPlannerROS"/>

        <!-- 通用参数用在全局代价地图上 -->
        <rosparam file="$(find nav_demo)/newparam/costmap_common_params.yaml" command="load" ns="global_costmap" />
        <!-- 通用参数用在局部代价地图上 -->
        <rosparam file="$(find nav_demo)/newparam/costmap_common_params.yaml" command="load" ns="local_costmap" />
        <!-- 加载局部代价地图参数 -->
        <rosparam file="$(find nav_demo)/newparam/local_costmap_params.yaml" command="load" />
        <!-- 加载全局代价地图参数 -->
        <rosparam file="$(find nav_demo)/newparam/global_costmap_params.yaml" command="load" />
        <!-- 加载本地路径规划算法 -->
        <rosparam file="$(find nav_demo)/newparam/base_local_planner_params.yaml" command="load" />
        <!-- reset frame_id parameters using user input data -->
        <param name="global_costmap/global_frame" value="map" />
        <param name="global_costmap/robot_base_frame" value="base_link" />
        <param name="local_costmap/global_frame" value="odom" />
        <param name="local_costmap/robot_base_frame" value="base_link" />

        <!-- <remap from="cmd_vel" to="cmd_vel" />
        <remap from="odom" to="odom" />
        <remap from="scan" to="scan" />
        <remap from="map" to="map" /> -->
    </node>

</launch>

结果,选择Path_global的话题名称,就是你的规划器名称

 

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值