Bootstrap

激光雷达初体验 == 思岚A1M8 + Ubuntu 18.04 + ROS melodic + hector_slam

一、开箱图

型号 RPLIDAR A1
配料 激光雷达一台 + usb 转接板一块 + 转接线一条

二、文档和SDK下载 (官网链接)

RPILIDAR A1M8 简介与规格书 Datasheet
RPILIDAR 标准版SDK使用简介
RPILIDAR 通讯接口协议和应用手册 Protocol
在线文档 Online Doc
RPILIDAR A1 开发套装使用手册 User manual
RPILIDAR SDK Github或者镜像
RPILIDAR ROS_SDK Github或者镜像
RPILIDAR ROS WIKI
HECTOR SLAM

三、SDK 安装

官方提供了纯 C++和ROS节点两种形式的SDK,ROS版SDK中已经包含了C++的SDK(版本稍晚),不需要单独下载C++版本的SDK。

这里我们主要使用ROS来测试,从官网的github克隆仓库到我们的ROS工作空间的src下,然后编译工作空间:

cd ~/catkin_ws/src
git clone https://github.com/robopeak/rplidar_ros.git
cd ..
catkin_make

编译完功能包,利用rosrun或者roslaunch的时候,可能出现tab键按下没有提示出我们新增的节点或launch文件的情况,比如上述SDK编译完,输入roslaunch rp然后按tab应该会自动补全剩下的lidar_ros,可是系统没有补全。原因可能有三个:

(1) 没有source setup
(2) 没有加入ros环境变量
(3) 没有更新目录。

前两个问题可以通过编辑 ~/.zshrc(对应zsh)或者 ~/.bashrc (对应bash) 在后面添加如下两条语句来解决,不需要每次在命令行下source。

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_ws/src
source ~/catkin_ws/devel/setup.zsh

如果上述已经完成,仍然不能自动补全,使用下面的命令来更新目录:

rospack profile

四、HECTOR SLAM 安装

(1) 使用 apt 安装 hector-slam 包

sudo apt install ros-melodic-hector-slam

(2)或者使用源码安装

cd ~/catkin_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git
cd ..
catkin_make

(3)不再需要额外安装驱动的源码链接

git clone https://github.com/zhangwenxiao/HectorSlamWithoutROS.git

重构ros官方hector_slam代码
目的是使hector_slam算法脱离ROS平台

Linux版本:ubuntu14.04
cmake版本:3.9.6

另外需要安装opencv3、boost和Eigen

使用方法:
创建build目录:

mkdir build

进入build,依次执行:

cmake ..
make
./hectorslam

五、launch 文件编写

在~/catkin_ws/src/rplidar_ros/launch/下编写slam.launch文件,然后编译工作空间:

<launch>

<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<!-- Frame names -->
<param name="pub_map_odom_transform" value="true"/>
<param name="map_frame" value="map" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="base_link" />

<!-- Tf use -->
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>

<!-- Map size / start point -->
<param name="map_resolution" value="0.05"/>
<param name="map_size" value="2048"/>
<param name="map_start_x" value="0.5"/>
<param name="map_start_y" value="0.5" />
<param name="laser_z_min_value" value = "-1.0" />
<param name="laser_z_max_value" value = "1.0" />
<param name="map_multi_res_levels" value="2" />

<param name="map_pub_period" value="2" />
<param name="laser_min_dist" value="0.4" />
<param name="laser_max_dist" value="5.5" />
<param name="output_timing" value="false" />
<param name="pub_map_scanmatch_transform" value="true" />
<!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />-->

<!-- Map update parameters -->
<param name="update_factor_free" value="0.4"/>
<param name="update_factor_occupied" value="0.7" />    
<param name="map_update_distance_thresh" value="0.2"/>
<param name="map_update_angle_thresh" value="0.06" />

<!-- Advertising config --> 
<param name="advertise_map_service" value="true"/>
<param name="scan_subscriber_queue_size" value="5"/>
<param name="scan_topic" value="scan"/>
</node>

<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>

  <node pkg="rviz" type="rviz" name="rviz"
    args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>

</launch>

在~/catkin_ws/src/rplidar_ros/launch/下新建launch文件:

cd ~/catkin_ws/src/rplidar_ros/launch/
touch slam.launch
vim slam.launch

提示1

如果通过github源码编译安装功能包的话,就不需要再利用 sudo apt-get install 的形式进行安装,否则可能会导致索引问题。例如:使用差速轮仿真库arbotix的时候,如果同时安装了源码和apt的包,节点运行时优先索引到了源码下的功能包,然后提示py文件没权限(py文件很多,去挨个赋予权限肯定不是一劳永逸的办法),最后把源码下的包和catkin_ws/share中的编译文件全删除了,仅用apt的包就一点问题没有。如果需要看源码的都用源码安装,如果只是拿来用的就用apt安装。

提示2

主要参考了 Rplidar A1/A2使用及Hector_SLAM建图激光雷达初体验 - Ubuntu 18.04 + 思岚科技 RPLIDAR A1M8 + hector_slam 建图 两篇文章。

六、运行建图节点

提示:

可能需要使用以下命令来连接雷达。

chmod 666 /dev/ttyUSB0

方法一:

首先打开激光雷达节点,然后运行我们刚编写的slam.launch节点。

roslaunch rplidar_ros rplidar.launch
roslaunch rplidar_ros slam.launch

方法二:

使用官方的SDK节点launch文件。注意:一共有三种launch文件,分别是普通xx.launch,test_xx.launch,view_xx.launch,后缀 a3对应a3版本雷达,无后缀的对应a1/a2版本,第一个是纯节点,需要自己查看输出信息,第二个是在命令行窗口直接输出测量数据,第三个是利用rviz展示测量数据。

 roslaunch rplidar_ros view_rplidar.launch

方法三

分别在三个终端执行以下命令

roslaunch rplidar_ros rplidar.launch
roslaunch hector_slam_launch tutorial.launch
rosrun map_server map_saver -f + PATH/FileName

方法四

编写脚本 test.sh 文件,启动执行sh ./test.sh

#!/bin/bash
echo "hector-slam"
roslaunch rplidar_ros rplidar.launch &
sleep 2
roslaunch hector_slam_launch tutorial.launch & 
sleep 60   #建图过程中所用的时间可以调整 
rosrun map_server map_saver -f PATH/FileName

运行的节点和两个脚本文件,脚本文件用于设置串口及设备,详见ros wiki和源码,rplidarNode节点运行起来,查看节点信息。

roscore
rosrun rplidar_ros rplidarNode
rosnode info /rplidar_node

可以看到,有两个发布话题,无订阅话题,四个服务,另外一个节点是rplidarNodeClient客户端节点,保持上面的节点在运行,同时运行这个客户端接节点,也查看一下节点信息:

rosrun rplidar_ros rplidarNodeClient
rosnode info /rplidar_node_client

看到这个客户端订阅了/scan也就是上一个节点发布的测量数据话题,并且运行这个节点会在命令行输出扫描信息。

首次使用体验基本结束。

;