1.首先需要安装Turtlebot相关的所有功能包,使用如下命令安装:
sudo apt-get install ros-kinetic-turtlebot-*
2.输入
sudo gedit ~/.bashrc
加入下面这一行
export TURTLEBOT_GAZEBO_WORLD_FILE="/opt/ros/kinetic/share/turtlebot_gazebo/worlds/playground.world"
3.启动gazebo仿真
roslaunch turtlebot_gazebo turtlebot_world.launch
正确的话应该会出现gazebo的图。
4.SLAM建图
使用如下命令打开gmapping_demo.launch文件,进行一点修改:
$ roscd turtlebot_gazebo/launch/
$ sudo gedit gmapping_demo.launch
结果是这样的:
<launch>
<arg name="3d_sensor" default="$(env TURTLEBOT_3D_SENSOR)"/> <!-- r200, kinect, asus_xtion_pro -->
<arg name="custom_gmapping_launch_file" default="$(find turtlebot_navigation)/launch/includes/gmapping/$(arg 3d_sensor)_gmapping.launch.xml"/>
<include file="$(find turtlebot_navigation)/launch/includes/gmapping/gmapping.launch.xml"/>
</launch>
然后使用如下命令启动仿真环境和gmapping节点:
$ roslaunch turtlebot_gazebo turtlebot_world.launch
$ roslaunch turtlebot_gazebo gmapping_demo.launch
$ roslaunch turtlebot_rviz_launchersview_navigation.launch
$ roslaunch turtlebot_teleopkeyboard_teleop.launch
SLAM结束后使用如下命令保存地图,命名为myslam(注意这一步直接使用古月的可能会报错,得指定路径):
rosrun map_server map_saver -f ~/map/myslam
这样就能正确执行了。
接下来我们在建立完成的地图上实现TurtleBot自主导航功能。turtlebot_gazebo功能包中同样提供了实现导航功能的launch启动文件,但是文件内部的包含路径也有问题,直接运行会提示错误。
用相同的方法修改:
$ roscd turtlebot_gazebo/launch/
$ sudo gedit amcl_demo.launch
改成这样:
<launch>
<!-- Map server -->
<arg name="map_file" default="$(env TURTLEBOT_GAZEBO_MAP_FILE)"/>
<node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" />
<!-- Localization -->
<arg name="initial_pose_x" default="0.0"/>
<arg name="initial_pose_y" default="0.0"/>
<arg name="initial_pose_a" default="0.0"/>
<include file="$(find turtlebot_navigation)/launch/includes/amcl/amcl.launch.xml">
<arg name="initial_pose_x" value="$(arg initial_pose_x)"/>
<arg name="initial_pose_y" value="$(arg initial_pose_y)"/>
<arg name="initial_pose_a" value="$(arg initial_pose_a)"/>
</include>
<!-- Move base -->
<include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>
</launch>
这里遇到个大坑,因为我是直接复制的古月博主的这一端,结果报错,找了半天发现是他贴上去的这一段的部分空格被消了,所以会报错,我贴的自己自己手动把空格打上了。
现在关闭除仿真环境以外的其他节点和rviz,运行如下命令就可以开始导航了;意思就是只保持gazebo不关,别的都关了:
roslaunch turtlebot_gazebo amcl_demo.launch map_file:=/home/midi/map/myslam.yaml
roslaunch turtlebot_rviz_launchers view_navigation.launch
还是注意古月的空格被消。
最后点击2D Nav Goal可选择目标点。