速腾16线激光雷达+cartographer+ubuntu+20.04+ros离线二维建图

本文记录了这几天配置激光雷达slam实现二维建图的方法,第一次发帖,希望能帮助到大家

在进行激光slam之前需要安装诸多依赖和功能包,在安装过程中会出现依赖不足的问题,可以通过命令“sudo apt-get install xxx”来解决,但是有可能出现因为软件源过旧而导致安装出现问题,因此在apt之前可以去etc/apt/sources.list设置更新软件源,我是用的是最新的清华源,因此可以实现配置,需要用到的依赖有:

sudo apt-get install automake google-mock libatlas-base-dev libboost-all-dev libeigen3-dev libgflags-dev libgmock-dev libgoogle-glog-dev liblapack-dev liblua5.2-dev libpcl-dev libprotobuf-dev libsuitesparse-dev libwebp-dev ninja-build pcl-tools protobuf-compiler python3-sphinx ros-noetic-tf2-eigen stow

1. 安装ceres2.0.0

可以通过如下命令安装,安装在主目录即可:

git clone https://github.com/ceres-solver/ceres-solver.git

cd ceres-solver

git checkout 0ffb6db49cec52566f53ab66be7a19970ddc562b  # 将下载的ceres-solver的版本回退到2.0.0

mkdir build

cd build/

cmake ..

make -j8

sudo make install

图1. Ceres

2. 安装Protobuf3.21.1

可以通过如下命令来安装,安装在主目录即可:

git clone https://github.com/protocolbuffers/protobuf.git

cd protobuf/

git checkout e73ed1630fdec85d7fb513c166629ed49cd4eb18

./autogen.sh

./configure

make -j8

sudo make install

sudo ldconfig

图2. Protobuf

3. 安装Abseil

可以通过如下的命令来安装,安装在主目录即可:

git clone https://github.com/abseil/abseil-cpp.git

cd abseil-cpp/

git checkout 215105818dfde3174fe799600bb0f3cae233d0bf

mkdir build

cd build/

cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl ..

ninja

sudo ninja install

cd /usr/local/stow

sudo stow absl

图3. Abseil

4. 安装Cartographer

首先在喜欢的位置建立工作空间,使用如下命令即可:

mkdir -p cartographer/src

cd cartographer/src

git clone https://github.com/cartographer-project/cartographer.git

git clone https://github.com/cartographer-project/cartographer_ros.git

cd ..

catkin_make_isolated 

但是在最后编译的时候会报错,通过如下声明可以避免错误出现,即:

catkin_make_isolated # -DPYTHON_EXECUTABLE=/usr/bin/python3

注意此处井号以及后面的部分应该输入到命令行中。

5. 下载pointcloud_to_laserscan包实现三维转二维

在喜欢的位置创建工作空间3dto2dslam,并且进入工作空间的src目录,使用如下命令完成安装:

git clone https://github.com/BluewhaleRobot/pointcloud_to_laserscan.git

cd ..

catkin_make

图4. Point_to_laserscan

6. 修改与配置Cartographer

接下来修改cartographer工作空间。

a. 创建rs16_lidar.lua文件

使用如下命令创建文件:

cd ~/cartographer/src/cartographer_ros/cartographer_ros/configuration_files #找到自己的路径

cp revo_lds.lua rs16_lidar.lua  #复制

gedit rs16_lidar.lua  #打开文件

将文件内容修改为如下:

  1. include "map_builder.lua"
    include "trajectory_builder.lua"
    
    options = {
      map_builder = MAP_BUILDER,
      trajectory_builder = TRAJECTORY_BUILDER,
      map_frame = "map",
      tracking_frame = "rslidar",
      published_frame = "rslidar",
      odom_frame = "odom",
      provide_odom_frame = true,
      publish_frame_projected_to_2d = false,
      use_pose_extrapolator = true,
      use_odometry = false,
      use_nav_sat = false,
      use_landmarks = false,
      num_laser_scans = 1,
      num_multi_echo_laser_scans = 0,
      num_subdivisions_per_laser_scan = 1,
      num_point_clouds = 0,
      lookup_transform_timeout_sec = 0.2,
      submap_publish_period_sec = 0.3,
      pose_publish_period_sec = 5e-3,
      trajectory_publish_period_sec = 30e-3,
      rangefinder_sampling_ratio = 1.,
      odometry_sampling_ratio = 1.,
      fixed_frame_pose_sampling_ratio = 1.,
      imu_sampling_ratio = 1.,
      landmarks_sampling_ratio = 1.,
    }
    
    MAP_BUILDER.use_trajectory_builder_2d = true
    
    TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
    TRAJECTORY_BUILDER_2D.min_range = 0.3
    TRAJECTORY_BUILDER_2D.max_range = 8.
    TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
    TRAJECTORY_BUILDER_2D.use_imu_data = false
    TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
    TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
    TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
    TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
    
    POSE_GRAPH.optimization_problem.huber_scale = 1e2
    POSE_GRAPH.optimize_every_n_nodes = 35
    POSE_GRAPH.constraint_builder.min_score = 0.65
    
    return options

b. 创建cartographer_demo_rs16.launch文件

使用如下命令:

cd ~/cartographer/src/cartographer_ros/cartographer_ros/launch #自己的路径

cp demo_revo_lds.launch cartographer_demo_rs16.launch

接下来将修改cartographer_demo_rs16.launch文件内容:

  1. <launch>
      <param name="/use_sim_time" value="false" />
     
      <node name="cartographer_node" pkg="cartographer_ros"
          type="cartographer_node" args="
              -configuration_directory $(find cartographer_ros)/configuration_files
              -configuration_basename rs16_lidar.lua"
          output="screen">
        <remap from="scan" to="/scan" />
      </node>
      
      <node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.45 0 0.0 0.0 map rslidar 100" />
     
      <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
          type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
      <node name="rviz" pkg="rviz" type="rviz" required="true"
          args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
    </launch>

7. 运行程序并且完成建图

打开四个终端并分别为在正确的位置启动:

roscore #终端1

roscag play xxx.bag #终端2

roslaunch pointcloud_to_laserscan point_to_scan #在3dto2dslam工作空间下,别忘了source,终端3

roslaunch cartographer_ros cartographer_demo_rs16.launch#在cartographer工作空间,别忘了source,终端4

图5. 运行完成的结果

下面是参考资料:

https://blog.csdn.net/QQ3545325613/article/details/136688341
https://blog.csdn.net/TJZH0318/article/details/136458527

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值