1、背景

F1TENTH 平跑车架的底盘还没搞定,想跑一下 ROS 上层应用,刚好发现 gmapping 可以不需要里程计信息、只用激光雷达数据就能建图,因此借底盘还没搞定的机会在虚拟机上跑一下 gmapping。

2、硬件连接

司岚 A1 激光雷达通过串口连接到笔记本的USB接口。就这么简单!一根线就搞定了通信和供电。
虚拟机:Ubuntu 1804
ROS版本: Melodic

3、laser_scan_matcher通过源码安装

mkdir -p ~/RPLIDAR_test_ws/src

cd  ~/RPLIDAR_test_ws/src

git clone https://github.com/ccny-ros-pkg/scan_tools.git

cd ..

catkin_make  // 会发现 fail, 此时进入到scan_tools/ 目录下把除laser_scan_matcher 目录之外的所有文件(夹)都删掉。

catkin_make //  此时又报错,看下面的注释解决

catkin_make

sudo sh -c 'echo "source /home/jyc/RPLiDAR_test_ws/devel/setup.bash" >> ~/.bashrc'

注:
报错如下:
在这里插入图片描述
解决:

sudo apt-get install ros-melodic-csm

4、测试

roslaunch laser_scan_matcher demo.launch

不过,demo.launch 运行结果是在 rviz 中播放.bag数据包,我们要使用真实激光雷达(思岚 A1)建图,具体做法见下个标题。

5、使用思岚 A1 激光雷达运行 gmapping

~/RPLiDAR_test_ws/src/laser_scan_matcher/demo文件夹下,有一个demo_gmapping.launch文件,运行该.launch文件同样是用.bag数据来播放 gmapping 的结果。对这个.launch文件进行修改,用实时的激光数据代替.bag数据,代码如下(可直接复制替换):

<!-- 
Example launch file: uses laser_scan_matcher together with
slam_gmapping 
-->

<launch>

  #### set up data playback from bag #############################
  <!-- 此处,用激光数据 替换掉bag数据  -->
  <!-- <param name="/use_sim_time" value="true"/> -->
  <!-- <node pkg="rosbag" type="play" name="play" 
    args="$(find laser_scan_matcher)/demo/demo.bag delay=5 clock"/> -->

  <include file="$(find rplidar_ros)/launch/rplidar.launch"/>
 

  #### publish an example base_link -> laser transform ###########

  <node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" 
    args="0.0 0.0 0.0 0.0 0.0 0.0 /base_link /laser 40" />

  #### start rviz ################################################

  <node pkg="rviz" type="rviz" name="rviz" 
    args="-d $(find laser_scan_matcher)/demo/demo_gmapping.rviz"/>

  #### start the laser scan_matcher ##############################

  <node pkg="laser_scan_matcher" type="laser_scan_matcher_node" 
    name="laser_scan_matcher_node" output="screen">

    <param name="fixed_frame" value = "odom"/>
    <param name="max_iterations" value="10"/>

  </node>

  #### start gmapping ############################################

  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <param name="map_udpate_interval" value="1.0"/>
    <param name="maxUrange" value="12.0"/>
    <param name="sigma" value="0.1"/>
    <param name="kernelSize" value="1"/>
    <param name="lstep" value="0.15"/>
    <param name="astep" value="0.15"/>
    <param name="iterations" value="1"/>
    <param name="lsigma" value="0.1"/>
    <param name="ogain" value="3.0"/>
    <param name="lskip" value="1"/>
    <param name="srr" value="0.1"/>
    <param name="srt" value="0.2"/>
    <param name="str" value="0.1"/>
    <param name="stt" value="0.2"/>
    <param name="linearUpdate" value="1.0"/>
    <param name="angularUpdate" value="0.5"/>
    <param name="temporalUpdate" value="0.4"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="10"/>
    <param name="xmin" value="-10.0"/>
    <param name="ymin" value="-10.0"/>
    <param name="xmax" value="10.0"/>
    <param name="ymax" value="10.0"/>
    <param name="delta" value="0.02"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.05"/>
    <param name="lasamplerange" value="0.05"/>
    <param name="lasamplestep" value="0.05"/>
  </node>

</launch>

测试 gmapping :

roslaunch laser_scan_matcher demo_gmapping.launch

报错:
在这里插入图片描述
解决:
~/RPLiDAR_test_ws/src目录下安装rplidar_ros包,并重新在~/RPLiDAR_test_ws目录下编译:

cd ~/RPLiDAR_test_ws/src
git clone https://github.com/Slamtec/rplidar_ros.git
cd ..
catkin_make

报错:
[rplidarNode-2] process has died [pid 20367, exit code -6, cmd /home/jyc/RPL
在这里插入图片描述
原因:
USB串口的权限不够(我也不能从报错中看出这个端倪,百度到的解决办法,能解决问题就行)
解决:

sudo chmod 777 /dev/ttyUSB0

注:
因为虚拟机只连接了激光雷达的这一个串口,因此这个串口被Linux分配的设备名一定是/dev/ttyUSB0

6、建图效果

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐