自定义全局规划器
一、ros navigation仿真
1.安装相关模块
- 安装gazobo接口模块
sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
- 安装turtlebot相关模块
sudo apt-get install ros-noetic-turtlebot-*
2.编译navigation源文件
cd catkin_ws_navigation
catkin_make
soure devel/setup.bash
3.打开gazebo
soure devel/setup.bash
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_gazebo turtlebot3_world.launch
4.slam建图
- 如果有地图了,可以忽略本步骤
soure devel/setup.bash
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
- 新建终端,启动键盘控制
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
- 保存地图
mkdir -p ~/Desktop/map
rosrun map_server map_saver -f ~/Desktop/map
5.navigation
map的路径要注意不要填错了,可以看一下map.yaml里边的路径是什么,是按照这个路径去找map.pgm的。
soure devel/setup.bash
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=/home/gao/Desktop/map/map.yaml
注意gazobo的环境要保持打开,不然没有map,rviz会报错。
二、turtlebot3仿真
1.下载编译
cd ~/catkin_ws/src/
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
cd ~/catkin_ws && catkin_make
2.打开gazebo
soure devel/setup.bash
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_gazebo turtlebot3_world.launch
3.slam建图
soure devel/setup.bash
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
4.navigation导航
soure devel/setup.bash
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=/home/gao/Desktop/map/map.yaml
三、自定义全局规划器
[官方教程](http://wiki.ros.org/action/fullsearch/navigation/Tutorials/Writing A Global Path Planner As Plugin in ROS?action=fullsearch&context=180&value=linkto%3A"navigation%2FTutorials%2FWriting+A+Global+Path+Planner+As+Plugin+in+ROS")
1.拷贝一个功能包
比如拷贝一个navigation中carrot_planner的功能包,文件夹该名为hy_planner。
2.launch文件
新建launch文件夹,并新建文件test.launch.
这个test.launch其实就是turtlebot3_navigation中的turtlebot3_navigation.launch
<launch>
<!-- Arguments -->
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<arg name="map_file" default="$(find turtlebot3_navigation)/maps/map.yaml"/>
<arg name="open_rviz" default="true"/>
<arg name="move_forward_only" default="false"/>
<!-- Turtlebot3 -->
<include file="$(find turtlebot3_bringup)/launch/turtlebot3_remote.launch">
<arg name="model" value="$(arg model)" />
</include>
<!-- Map server -->
<node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)"/>
<!-- AMCL -->
<include file="$(find turtlebot3_navigation)/launch/amcl.launch"/>
<!-- move_base -->
<include file="$(find turtlebot3_navigation)/launch/move_base.launch">
<arg name="model" value="$(arg model)" />
<arg name="move_forward_only" value="$(arg move_forward_only)"/>
</include>
<!-- rviz -->
<group if="$(arg open_rviz)">
<node pkg="rviz" type="rviz" name="rviz" required="true"
args="-d $(find turtlebot3_navigation)/rviz/turtlebot3_navigation.rviz"/>
</group>
</launch>
修改launch文件
roscd turtlebot_navigation/
cd launch
3.指定自定义全局规划器
通过turtlebot3_navigation启动ros导航。
可以看到turtlebot3_navigation的launch文件夹中有三个launch文件,需要修改move_base.launch。
修改内容只是添加了一行内容,指定了global planner插件
<!-- move_base -->
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
<!-- 添加自定义的全局规划器 -->
<param name="base_global_planner" value="hy_planner/HyPlanner" />
</node>
4.编译运行
- 编译
catkin_make
source devel/setup.bash
- 检查test_planner是否成功注册进ROS系统
#必须source以后,在本终端可以看到自定义的插件
rospack plugins --attrib=plugin nav_core
- 运行
先打开gazobo环境
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_gazebo turtlebot3_world.launch
再启动test.launch
#必须source以后,在本终端可以看到自定义的插件,要在本终端启动test.launch
source devel/setup.bash
roslaunch hy_planner test.launch