ROS:move_base路径规划介绍、更换全局路径规划算法(A star、Dijkstra、DWA,测试当前是哪种算法,效果展示图)

文章介绍了如何在ROS的move_base包中更换全局路径规划算法A*或Dijkstra,以及局部路径规划算法DWA。通过修改move_base.launch文件和planner_core.cpp文件的参数,可以实现算法的切换。同时,文章提到了可能出现的问题,如路径规划的非最优性、机器人的运动方向等,并给出了相应的解决策略。

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

前提:需要安装navigation包,才可以运行move_base。

move_base包默认算法:

  1. 全局路径规划:Dijkstra;
  2. 局部路径规划:航迹推算;

一.move_base路径规划包内容

 二.更换全局路径规划算法(A*、Dijkstra、DWA)

A*、Dijkstra属于全局路径规划、DWA属于局部路径规划。

1、move_base.launch

move_base.launch文件需要添加以下内容

    <!--加载A star、Dijkstra算法-->
    <param name="base_global_planner" value="global_planner/GlobalPlanner"/>
    <param name="planner_frequency" value="1.0" />
    <param name="planner_patience" value="5.0" />
    <!--加载DWA算法-->
    <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />

整体的move_base.launch文件内容如下(其中turtlebot3_navigation内容需要修改为对应自己的包):

<launch>
  <!-- Arguments -->
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="cmd_vel_topic" default="/cmd_vel" />
  <arg name="odom_topic" default="odom" />
  <arg name="move_forward_only" default="false"/>

  <!-- move_base -->
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <!--加载A star算法-->
    <param name="base_global_planner" value="global_planner/GlobalPlanner"/>
    <param name="planner_frequency" value="1.0" />
    <param name="planner_patience" value="5.0" />
    <!--加载DWA算法-->
    <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
    <!---->
    <rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find turtlebot3_navigation)/param/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find turtlebot3_navigation)/param/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find turtlebot3_navigation)/param/move_base_params.yaml" command="load" />
    <rosparam file="$(find turtlebot3_navigation)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />
    <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>
    <remap from="odom" to="$(arg odom_topic)"/>
    <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />
  </node>
</launch>

2、修改planner_core.cpp文件

 planner_core.cpp文件是navigation包中的文件,其具体目录如下(对应自己的路径):

 修改如下内容:

private_nh.param("use_dijkstra", use_dijkstra, false);

此句true为使用dijkstra算法,false为使用A star算法。

ROS_INFO("use_dijkstra");
ROS_INFO("use_A_star");

此句可以在运行路径规划时,查看自己使用的是dijkstra还是A star。

注意:修改完代码之后,需要删除build和devel文件,重新catkin_make编译

3、效果展示

默认算法:

 dijkstra算法:

A star算法:

 验证算法:

4、展望(未来需要注意问题)

1、A*算法并不是最优路径(如上),也是会出现问题(如下),还是需要优化。

 出现上述原因是因为膨胀半径设置问题,需要自己设置,最简单方法是将膨胀半径设置为机器人外切圆。

2、使用的turtlebot3机器人在运行时会出现倒着走的现象。

解决:将base_local_planner_params.yaml中holonomic_robot参数改为false;

holonomic_robot参数意义:代表是否是全向机器人。

3、未来添加新的路径规划算法也可以如此加入move_base中。

比如安装TEB包:ROS-melodic:源码安裝teb_local_planner算法、替换DWA算法_ros teb源码编译_Charlesffff的博客-CSDN博客

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值