• 【ROS小车9】仅用 RPLIDAR A1(思岚 A1) 雷达在 Ubuntu 虚拟机跑 gmapping


    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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    sudo apt-get install ros-melodic-csm
    
    • 1

    4、测试

    roslaunch laser_scan_matcher demo.launch
    
    • 1

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

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

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

    
    
    <launch>
    
      #### set up data playback from bag #############################
      
      
      
    
      <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    测试 gmapping :

    roslaunch laser_scan_matcher demo_gmapping.launch
    
    • 1

    报错:
    在这里插入图片描述
    解决:
    ~/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
    
    • 1
    • 2
    • 3
    • 4

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

    sudo chmod 777 /dev/ttyUSB0
    
    • 1

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

    6、建图效果

    在这里插入图片描述

  • 相关阅读:
    数据结构与算法之图: Leetcode 417. 太平洋大西洋水流问题 (Typescript版)
    Shiro和Zuul权限管理整合方案
    有什么好玩的网页小游戏网站推荐么?
    纯JSP MySQL分页
    操作系统抢占、非抢占式内核的区别
    Ansible概述以及模块
    一个好的接口自动化测试脚本是怎么写出来的?
    java-net-php-python-jspm看病预约信息管理系统计算机毕业设计程序
    本地部署AutoGPT
    在Webpack 5 中如何进行 CSS 常用配置?
  • 原文地址:https://blog.csdn.net/weixin_42915934/article/details/126072264