Ros—RPLIDAR A2激光雷达安装(hector_mapping算法建图同cartographer_ros建图对比)

Ros—RPLIDAR A2激光雷达安装(hector_mapping算法建图同cartographer_ros建图对比)


因为大部分教程复杂繁琐,而且容易失败 。便整理总结了一下网上的资料,感谢
Cayla口袋里的超超的无私分享

前提:安装好了ubuntu系统以及ROS系统,并且USB口可是别设备。


基于ubuntu16 rplidar与主机连接


1、设备连接与数据通信


RPLIDAR A2 通讯接口采用 3.3V 电平的串口(UART)。
在这里插入图片描述
RPLIDAR A2 通讯接口采用 3.3V 电平的串口(UART)


2、安装rplidar2

按ctrl+alt+t打开terminal,输入以下命令:

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


3、运行雷达

没有报错之后运行:

roslaunch rplidar_ros rplidar.launch

运行成功后如下,雷达开始旋转
在这里插入图片描述在terminal中输入:

$ roslaunch rplidar_ros view_rplidar.launch

情况正常的情况下可以看见激光数据如下图:
在这里插入图片描述成功出现以上画面之后:

按Ctrl+c结束操作

使用hector_gmapping算法建图测试

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


成功出现如下界面表明安装成功:
在这里插入图片描述进入launch文件夹下,在文件夹下添加hector_mapping_demo.launch文件:

$ cd src/rplidar_ros/launch/
$ touch hector_mapping_demo.launch
$ gedit hector_mapping_demo.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>


按Ctrl+s保存文件并退出,运行:

$ roslaunch rplidar_ros rplidar.launch

当雷达转起来之后。

再打开一个新的terminal,输入命令以测试Hectormapping建图:

$ roslaunch rplidar_ros hector_mapping_demo.launch

成功观察到如图所示:
在这里插入图片描述

使用Cartographer算法建图测试

cartographer是Google的实时室内建图项目,传感器安装在背包上面,可以生成分辨率为5cm的2D格网地图。

获得的每一帧laser scan数据,利用scan match在最佳估计位置处插入子图(submap)中,且scan matching只跟当前submap有关。在生成一个submap后,会进行一次局部的回环(loop close),利用分支定位和预先计算的网格,所有submap完成后,会进行全局的回环。

local 2D slam

A.scans

submap的构造是一个重复迭代配准scan和submap的过程。利用配准估算出pose对scan进行刚体变换,插入到submap中。

B.submaps

连续的scan用来构造submap,这里submap以概率格网的形式表现。每一个scan,在插入格网(submap)时,每一个grid有hits和miss两种情况。离scan终点最近的grid为hits,在scan原点和终点之间相交的grid为miss。之前未观察的grid分配一个概率,已观察的grid进行概率更新。
在这里插入图片描述
C.Ceres scan matching

把求pose的问题转换为一个求解非线性最小二乘问题,利用Ceres解决这个问题。

因为最小二乘问题是一个局部最优问题,故一个好的初值(pose初值)对求解有很大影响。因此IMU能被用来提供pose初值的旋转变量。在缺乏IMU的时候,可以用提高scan match频率或匹配精度。

closing loops

利用SPA方法优化scan和submap的pose。存储插入scan位置处对应的pose用来做回环检测。此外,当submap不在变化时,对应pose的scan和submap也被用来做回环。scan match中找到的good match其对应的pose将被用来做优化问题。

A.Optimization problem

回环优化问题构造成非线性最小二乘问题,来求解。
在这里插入图片描述
公式中分别为submap的pose,scan的pose,对应submap和scan的pose的相关性,及相关协方差矩阵.

Cartographer安装

  • 安装全部依赖项
    • 安装ceres solver
      • 安装cartographer
        • 安装cartographer_ros

安装必要依赖项及SDK

$ sudo apt-get update

1.开始安装依赖

$ sudo apt-get install -y cmake g++ git google-mock libboost-all-dev libeigen3-dev libgflags-dev libgoogle-glog-dev liblua5.2-dev libprotobuf-dev libsuitesparse-dev libwebp-dev ninja-build protobuf-compiler python-sphinx ros-kinetic-tf2-eigen libatlas-base-dev libsuitesparse-dev liblapack-dev

2.安装ceres_solver

$cd ~/Documents
$ git clone https://github.com/BlueWhaleRobot/ceres-solver.git
$ cd ceres-solver
$ mkdir build
$ cd build
$ cmake …
$ make -j
$ sudo make install

3.安装cartographer开发工具包

$cd ~/Documents
$ git clone https://github.com/BlueWhaleRobot/cartographer.git
$ cd cartographer
$ mkdir build
$ cd build
$ cmake …
$ make -j
$ sudo make install

有的教程说需要安装prtobuf 3.0,测试不需要安装,还是贴上步骤:

4.安装prtobuf 3.0

$ cd ~/Documents
$ git clone https://github.com/google/protobuf.git
$ cd protobuf
$ git checkout 3.6.x
$ mkdir build
$ cd build
$ cmake \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DCMAKE_BUILD_TYPE=Release
-Dprotobuf_BUILD_TESTS=OFF
…/cmake
$ make -j 2
$ sudo make install

全部安装完成之后,进入ros工作空间

$ sudo apt-get update
$ sudo apt-get install -y python-wstool python-rosdep ninja-build
$ cd catkin_ws (此处为你的ros工作空间)
$ wstool init src
$ cd src/
$ git clone https://github.com/hitcm/cartographer_ros.git (博主一直没能下到正确的,导致catkin_make安装失败,这个是不会报错的版本)
$ cd …
$ catkin_make

5.安装成功后,编译一下:

catkin_make_isolated --install --use-ninja

从未source过setup文件的需要添加:

$ cd
$ gedit ~/.bashrc
打开gedit窗口后在末尾添加: source ~/catkin_ws/devel/setup.bash
注意不可同时source多个路径

6.修改demo_revo_lds.launch文件


    <launch>  
      
      <param name="/use_sim_time" value="true" />  
      <node name="cartographer_node" pkg="cartographer_ros"  
          type="cartographer_node" args="  
              -configuration_directory $(find cartographer_ros)/configuration_files  
              -configuration_basename revo_lds.lua"  
          output="screen">  
        <remap from="scan" to="scan" />  
      </node>  
      <node name="rviz" pkg="rviz" type="rviz" required="true"  
          args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />  
    </launch>
    

7.修改revo_lds.lua文件:

options = {

  map_builder = MAP_BUILDER,

  sensor_bridge = {

    horizontal_laser_min_range = 0.3,

    horizontal_laser_max_range = 8,

    horizontal_laser_missing_echo_ray_length = 1.2,

    constant_odometry_translational_variance = 0.,

    constant_odometry_rotational_variance = 0.,

  },

  map_frame = "map",

  tracking_frame = "laser",

  published_frame = "laser",

  odom_frame = "odom",

  provide_odom_frame = true,

  use_odometry_data = false,

  use_constant_odometry_variance = true,

  constant_odometry_translational_variance = 1e-2,

  constant_odometry_rotational_variance = 1e-1,

  use_horizontal_laser = true,

  use_horizontal_multi_echo_laser = false,
  
  horizontal_laser_min_range = 0.1,
  
  horizontal_laser_max_range = 30.,
  
  horizontal_laser_missing_echo_ray_length = 5.,

  num_lasers_3d = 0,

  lookup_transform_timeout_sec = 0.2,

  submap_publish_period_sec = 0.3,

  pose_publish_period_sec = 5e-3,

}

MAP_BUILDER.use_trajectory_builder_2d = true

TRAJECTORY_BUILDER_2D.use_imu_data = false

TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true

SPARSE_POSE_GRAPH.optimization_problem.huber_scale = 1e2

return options

修改好文件之后,重新编译一下:

$ cd
$ cd catkin_ws/
$ catkin_make_isolated --install --use-ninja

运行,测试Cartographer建图

$ roslaunch rplidar_ros rplidar.launch
$ roslaunch cartographer_ros demo_revo_lds.launch

如果出现以下报错,即为demo_revo_lds.launch文件中bag节点忘记删除:
在这里插入图片描述
若出现catkin_make失败即为下载的Cartographer_ros包不对。

若出现 cannot load < Cartographer Node>即需进入catkin_ws中的build文件夹中,全部删除后,重新编译


过程中出的问题很多很杂,博主这里就不截图了,有什么问题可以留言。成功运行后:
在这里插入图片描述在这里插入图片描述

  • 3
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值