一、介绍

LVI-SAM是一种基于3D激光雷达的slam算法(效果如下图),他结合了 LIO-SAM 和 Vins-Mono两者的优势,同前者一样是开源的,有条件的小伙伴可以去github查看源码

二、依赖

在编译该功能包之前,我们需要先安装相关依赖功能

1、ROS

他是一个基于ROS的功能包,因此我们首先需要配置好ros,并且官方在kinetic (ubuntu16.04)melodic(18.04)中已经测试过了,如果你是这两版的ROS,根据以下指令直接安装即可。ROS的安装不是本篇的重点,这里就不详细展开了,有需要的小伙伴可自行查找教程。

如果有小伙伴想要在noetic(ubuntu20.04)中安装的话,需要对源码做一定修改,详情查看第五节

2、gtsam (Georgia Tech Smoothing and Mapping library)

如果网络允许的情况下,可以直接按照以下步骤进行安装

wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.2.zip  # 获取文件包
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/                                # 解压文件
cd ~/Downloads/gtsam-4.0.2/                                                       # 进入文件目录
mkdir build && cd build                                                           # 创建build文件夹
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j4

这里我直接把这个文件放到网盘,有需要的小伙伴可以到这里下载

链接:https://pan.baidu.com/s/17-Dxia-l2AuQgkphsvtIKw 
提取码:kape

安装步骤与上述大同小异,cd到功能包目录下,依次输入:

mkdir build && cd build                                                           
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j4

3、Ceres (C++ library for modeling and solving large, complicated optimization problems)

sudo apt-get install -y libgoogle-glog-dev
sudo apt-get install -y libatlas-base-dev
wget -O ~/Downloads/ceres.zip https://github.com/ceres-solver/ceres-solver/archive/1.14.0.zip
cd ~/Downloads/ && unzip ceres.zip -d ~/Downloads/
cd ~/Downloads/ceres-solver-1.14.0
mkdir ceres-bin && cd ceres-bin
cmake ..
sudo make install -j4

同样,文件在这:

链接:https://pan.baidu.com/s/1QTTDa-GMWUVhzJ2pIWhKKA 
提取码:c7p9

cd到功能包目录下,依次输入:

mkdir ceres-bin && cd ceres-bin
cmake ..
sudo make install -j4

三、编译

创建一个工作空间(如果没有)

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src 
catkin_init_workspace

使用catkin_make进行编译

git clone https://github.com/TixiaoShan/LVI-SAM.git
cd ..
catkin_make


四、运行(模拟)

1、下载测试用的bag文件

官方地址

网盘(只上传了一个):

链接:https://pan.baidu.com/s/1-xDTEZED02twMXnUg1Bosg 
提取码:088v

2、打开终端运行launch文件

cd ~/catkin_ws/devel
source setup.bash
roslaunch lvi_sam run.launch

可以看到该功能包当前使用rviz作为可视化窗口

3、打开另一个终端运行bag文件

rosbag play garden.bag

随后我们便能在rviz中看到已经开始建图了

五、ubuntu20.04中的安装

1、CMakelists.txt

直接编译会出现error: #error PCL requires C++14 or above,主要原因是ros-noetic中pcl包只支持c++14以上

在lvi-sam目录下的CMakelists.txt中添加如下:
```powershell
ADD_COMPILE_OPTIONS(-std=c++11 )
ADD_COMPILE_OPTIONS(-std=c++14 )
set( CMAKE_CXX_FLAGS “-std=c++11 -O3” )

2、修改源文件

该部分主要是opencv2.x与4.x中对应的头文件命名不一致

  • LVI-SAM/src/lidar_odometry/utility.h中,修改:#include <opencv/cv.h>#include <opencv2/opencv.hpp>

  • LVI-SAM/src/visual_odometry/visual_loop/ThirdParty/DVision/BRIEF.cpp文件添加头文件#include <opencv2/imgproc.hpp>,修改53行CV_RGB2GRAYcv::COLOR_RGB2GRAY

  • LVI-SAM/src/visual_odometry/visual_loop/parameters.h添加头文件#include <opencv2/opencv.hpp>
  • LVI-SAM/src/visual_odometry/visual_feature/parameters.h添加头文件#include <opencv2/opencv.hpp>
  • LVI-SAM/src/visual_odometry/visual_loop/keyframe.cpp的240行CV_FONT_HERSHEY_SIMPLEX改为cv::FONT_HERSHEY_SIMPLEX
  • LVI-SAM/src/visual_odometry/visual_loop/loop_detection.cpp的64, 82, 92, 112, 149行中修改CV_FONT_HERSHEY_SIMPLEXcv::FONT_HERSHEY_SIMPLEX

编译时容易因为内存不足造成死机或者编译中断,可以设置虚拟内存保证编译成功率