前提:需要安裝navigation包,才可以運(yùn)行move_base。
move_base包默認(rèn)算法:
- 全局路徑規(guī)劃:Dijkstra;
- 局部路徑規(guī)劃:航跡推算;
一.move_base路徑規(guī)劃包內(nèi)容
?二.更換全局路徑規(guī)劃算法(A*、Dijkstra、DWA)
A*、Dijkstra屬于全局路徑規(guī)劃、DWA屬于局部路徑規(guī)劃。
1、move_base.launch
move_base.launch文件需要添加以下內(nèi)容:
<!--加載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文件內(nèi)容如下(其中turtlebot3_navigation內(nèi)容需要修改為對應(yīng)自己的包):
<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包中的文件,其具體目錄如下(對應(yīng)自己的路徑):
?修改如下內(nèi)容:
private_nh.param("use_dijkstra", use_dijkstra, false);
此句true為使用dijkstra算法,false為使用A star算法。
ROS_INFO("use_dijkstra");
ROS_INFO("use_A_star");
此句可以在運(yùn)行路徑規(guī)劃時(shí),查看自己使用的是dijkstra還是A star。
注意:修改完代碼之后,需要刪除build和devel文件,重新catkin_make編譯。
3、效果展示
默認(rèn)算法:
?dijkstra算法:
A star算法:
?驗(yàn)證算法:
4、展望(未來需要注意問題)
1、A*算法并不是最優(yōu)路徑(如上),也是會出現(xiàn)問題(如下),還是需要優(yōu)化。
?出現(xiàn)上述原因是因?yàn)榕蛎洶霃皆O(shè)置問題,需要自己設(shè)置,最簡單方法是將膨脹半徑設(shè)置為機(jī)器人外切圓。
2、使用的turtlebot3機(jī)器人在運(yùn)行時(shí)會出現(xiàn)倒著走的現(xiàn)象。
解決:將base_local_planner_params.yaml中holonomic_robot參數(shù)改為false;
holonomic_robot參數(shù)意義:代表是否是全向機(jī)器人。
3、未來添加新的路徑規(guī)劃算法也可以如此加入move_base中。文章來源:http://www.zghlxwxcb.cn/news/detail-476438.html
比如安裝TEB包:ROS-melodic:源碼安裝teb_local_planner算法、替換DWA算法_ros teb源碼編譯_Charlesffff的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-476438.html
到了這里,關(guān)于ROS:move_base路徑規(guī)劃介紹、更換全局路徑規(guī)劃算法(A star、Dijkstra、DWA,測試當(dāng)前是哪種算法,效果展示圖)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!