前提:需要安装navigation包,才可以运行move_base。
一.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机器人在运行时会出现倒着走的现象。
3、未来添加新的路径规划算法也可以如此加入move_base中。