体验内容
   
使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。
    
    
    1. 安装一些依赖包
   
sudo apt-get install ros-melodic-move-base*
sudo apt-get install ros-melodic-map-server*
sudo apt-get install ros-melodic-amcl*
sudo apt-get install ros-melodic-navigation*
sudo apt-get install ros-melodic-openslam-gmapping
    
    
    2. 新建launch文件及其配置文件
   
    
    
    (1)rplidar_gmapping.launch.xml
   
    在
    
     turtlebot_ws/src/turtlebot_apps/turtlebot_navigation/launch/includes/gmapping/
    
    目录下新建文件
    
     rplidar_gmapping.launch.xml
    
<launch>
  <arg name="scan_topic"  default="scan" />
  <arg name="base_frame"  default="base_footprint"/>
  <arg name="odom_frame"  default="odom"/>
  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <param name="base_frame" value="$(arg base_frame)"/>
    <param name="odom_frame" value="$(arg odom_frame)"/>
    <param name="map_update_interval" value="0.01"/>
    <param name="maxUrange" value="4.0"/>
    <param name="maxRange" value="5.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="3"/>
    <param name="lstep" value="0.05"/>
    <param name="astep" value="0.05"/>
    <param name="iterations" value="5"/>
    <param name="lsigma" value="0.075"/>
    <param name="ogain" value="3.0"/>
    <param name="lskip" value="0"/>
    <param name="minimumScore" value="30"/>
    <param name="srr" value="0.01"/>
    <param name="srt" value="0.02"/>
    <param name="str" value="0.01"/>
    <param name="stt" value="0.02"/>
    <param name="linearUpdate" value="0.05"/>
    <param name="angularUpdate" value="0.0436"/>
    <param name="temporalUpdate" value="-1.0"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="8"/>
  <!--
    <param name="xmin" value="-50.0"/>
    <param name="ymin" value="-50.0"/>
    <param name="xmax" value="50.0"/>
    <param name="ymax" value="50.0"/>
  make the starting size small for the benefit of the Android client's memory...
  -->
    <param name="xmin" value="-1.0"/>
    <param name="ymin" value="-1.0"/>
    <param name="xmax" value="1.0"/>
    <param name="ymax" value="1.0"/>
    <param name="delta" value="0.05"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>
    <remap from="scan" to="$(arg scan_topic)"/>
  </node>
</launch>
    
    
    (2)rplidar_gmapping_demo.launch
   
    在
    
     turtlebot_ws/src/turtlebot_apps/turtlebot_navigation/launch/
    
    目录下新建文件
    
     rplidar_gmapping_demo.launch
    
<launch>
  <!-- 2D_laser -->
  <arg name="2D_laser" default="rplidar"/>
  <include file="$(find rplidar_ros)/launch/rplidar.launch">
  </include>
  <!-- Gmapping -->
  <arg name="custom_gmapping_launch_file" default="$(find turtlebot_navigation)/launch/includes/gmapping/$(arg 2D_laser)_gmapping.launch.xml"/>
  <include file="$(arg custom_gmapping_launch_file)"/>
  <!-- Move base -->
  <include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>
</launch>
    
    
    (3)修改rplidar.launch
   
    对
    
     turtlebot_ws/src/rplidar_ros/launch
    
    目录下的文件
    
     rplidar.launch
    
    进行修改,添加一句
   
<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0  0.0  0.18  0.0  0.0  1.0  0.0 base_link laser 100"/>
注意要添加在前一个
</node>
后面,并且注意空格。
    
    
    3. 运行
   
roscore
roslaunch turtlebot_bringup minimal.launch
roslaunch turtlebot_navigation rplidar_gmapping_demo.launch
rviz
    将map数据
    
     Add
    
    进来,并选择好话题。
    
    启动键盘控制,可以看到rviz程序中显示的地图在发生变化。
   
roslaunch turtlebot_teleop keyboard_teleop.launch
查看tf树和graph图
rosrun rqt_tf_tree rqt_tf_tree
rqt_graph
    得到一张如下图所示的建图结果。
    
    
    
    此时分析一下工作中的节点和信息流
   
保存地图的操作如下,将得到一张图片和一个地图配置文件。
rosrun map_server map_saver -f <path>
    
    
    作业内容
   
    
    
    一、rosbag
   
    自学rosbag,理解时间戳概念,写出rosbag的相关指令,利用rosbag储存的信息和gmapping,完成建图。
    
    在控制turtlebot执行运动和建图之前,首先打开一个终端运行
   
rosbag record -a
    录制完成后,在该终端按
    
     Ctrl
    
    +
    
     C
    
    结束录制,生成了数据包。
    
    断开turtlebot、激光雷达与计算机的连接,重新开启终端,执行
   
roscore
roslaunch turtlebot_navigation rplidar_gmapping_demo.launch
rviz
rosbag play <filename>.bag
    
    
    二、在gazebo中实现gmapping
   
    使用中国大学慕课网《机器人操作系统入门》课程的仿真环境,其代码的位置为:
    
    Kinetic:
    
     https://github.com/DroidAITech/ROS-Academy-for-Beginners/tree/kinetic
    
    
    Melodic:
    
     https://github.com/DroidAITech/ROS-Academy-for-Beginners/tree/melodic
    
    
    创建工作空间,将上面链接中下载的代码放入src目录中,进行编译即可。
   
    可能会遇到
    
     cmake
    
    报错,提示
    
     qt
    
    出现问题,需要安装qt,参考:
   
- https://blog.csdn.net/x356982611/article/details/71169940
- https://blog.csdn.net/weixin_41477306/article/details/95743555
成功编译后,运行
roscore
roslaunch robot_sim_demo robot_spawn.launch
roslaunch slam_sim_demo gmapping_demo.launch
roslaunch slam_sim_demo view_slam.launch
    可以使用
    
     rviz
    
    中
    
     2D Nav Goal
    
    工具指定目标位姿,使机器人运动起来。
   
 
