从入门到放弃——Lidar小白学习Lidar SLAM系列(1)LeGO-LOAM环境搭建

前言

上一篇博客是在虚拟机上安装VINS,莫名其妙的失败了,经过一番垂死挣扎,博主不得不承认,这个系列胎死腹中了,博主怀疑可能是虚拟机导致的问题,打算换成双系统试试。正好最近公司有个激光雷达的相关项目,博主借此机会搞来了一台新电脑,安装了双系统,下面先记录一下Lidar的学习过程,VIO系列待有空再补上。

入门知识

Lidar SLAM没找到什么合适的入门书籍,还是把高博的《SLAM十四讲》拿出来重新学习一遍吧。

LeGO-LOAM环境的搭建

这回我们吸取教训,使用双系统来搭建整个环境。

安装Ubuntu16.06

双系统是请公司管理计算机的同事帮忙安装的,略过不谈。各位请自行百度,或向学长求救。

安装ROS Kinetic

这部分见我VIO系列的VINS环境搭建文章。

安装git

安装时多行命令请一行行执行,以免漏装,以后不再重复

sudo apt install git #安装git 

安装Eigen3.3.7

Kinetic自带Eigen3.2.92,我们需要重新安一下3.3.7。简单说下为什么,LeGO-LOAM采用gtsam作为全局优化,而gtsam最新版4.0,依赖于Eigen3.3.7,虽然gtsam自带Eigen3.3.7,但我们要将其配置成采用ROS系统带的Eigen,这样以后安装其他依赖于Eigen的软件时,就可以统一使用系统自带的Eigen,而不是每一个软件都要配一个对应版本的Eigen。

删除3.2.92

自带的Eigen会默认安装在以下文件夹中,如果大家发现Eigen安到别的地方去了,可以参考以下文章
Ubuntu 16.04, 卸载&安装 Eigen
Ubuntu中如何查找文件

sudo rm -rf /usr/include/eigen3 /usr/lib/cmake/eigen3 /usr/share/doc/libeigen3-dev /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums

安装3.3.7

sudo wget https://github.com/eigenteam/eigen-git-mirror/archive/3.3.7.tar.gz #下载Eigen3.3.7
sudo tar -xzvf 3.3.7.tar.gz 
sudo mv eigen-git-mirror-3.3.7/ eigen-3.3.7/
cd eigen-3.3.7/
sudo mkdir build
cd build
sudo cmake ..
sudo make install 
sudo ldconfig -v
cd ../..
sudo rm -r 3.3.7.tar.gz eigen-3.3.7/ 

这时我们可以看到在/usr/local/include中已经有了eigen3文件夹,该文件夹内包含/Eigen/unsupportedsignature_of_eigen3_matrix_library共两个文件夹和一个文件

由于目前程序都是以/usr/local/include/Eigen/usr/include/Eigen作为Eigen的根目录的,故我们目前的安装目录可能导致程序报找不到Eigen的错。
目前有以下3种解决方法,可以根据自己需要来选择。
1、直接将/usr/local/include/Eigen文件夹整个拷贝到/usr/local/include以及/usr/include

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include /usr/include

2、在/usr/local/include以及/usr/include下建立3个软链接,分别指向/Eigen/unsupported/eigen3

sudo ln -s /usr/local/include/eigen3/Eigen /usr/local/include/Eigen
sudo ln -s /usr/local/include/eigen3/unsupported /usr/local/include/unsupported
sudo ln -s /usr/local/include/eigen3/Eigen /usr/include/Eigen
sudo ln -s /usr/local/include/eigen3/unsupported /usr/include/unsupported
sudo ln -s /usr/local/include/eigen3 /usr/include/eigen3

3、以后在所有的CMakeLists.txt中添加Eigen目录

#CMakeLists.txt
...
include_directories( "/usr/local/include/eigen3" )
...

博主采用的是第2种方法,如果这步不解决该问题,等到编译LeGO-LOAM时会报找不到Eigen的错误。

安装gtsam 4.0.0-alpha2

安gtsam之前呢,我们得先安一下gtsam的依赖项,对,没错,没完没了的依赖项!

Prerequisites:
-	Boost >= 1.43 (Ubuntu: sudo apt-get install libboost-all-dev)
-	CMake >= 3.0 (Ubuntu: sudo apt-get install cmake)
-	A modern compiler, i.e., at least gcc 4.7.3 on Linux.
Optional prerequisites - used automatically if findable by CMake:
-	Intel Threaded Building Blocks (TBB) (Ubuntu: sudo apt-get install libtbb-dev)
-	Intel Math Kernel Library (MKL)

安装Boost

理论上我们的系统上应该自带了boost 1.58版本,为了以防万一,你懂得

sudo apt-get install libboost-all-dev

安装CMake

同样,理论上我们的系统上应该自带了cmake 3.5.1版本,为了以防万一,你懂得

sudo apt-get install cmake

安装TBB

同样,理论上我们的系统上应该自带了TBB 4.4版本,为了以防万一,你懂得

sudo apt-get install libtbb-dev

安装MKL(可跳过不装)

注意!MKL可以不用装,如果一定要使用MKL的话,必须使用gtsam已打过补丁的Eigen版本,详见gtsam的CMakeLists的280行

去Intel Math Kernel Library (MKL)下载,产品选Intel Math Kernel Library for Linux,下载项选Full Package

下载完成后,会得到一个名为l_mkl_2019.5.281.tgz的压缩包,进入到该压缩包所在目录后,将该压缩包解压。

cd xxx  #这里 xxx 代表了压缩包所在目录
tar -xvzf l_mkl_2019.5.281.tgz

解压后,会在该目录下生成一个l_mkl_2019.5.281的文件夹,进入该文件夹,运行安装脚本

cd l_mkl_2019.5.281
sudo ./install_GUI.sh

此时会跳出像windows安装程序时一样的安装界面,一路accept、next、install后ok了。默认安装在/opt/intel,赶紧去/opt里找找看。

配置环境变量,需要输入参数,请参考Scripts to Set Environment Variables

sudo /opt/intel/mkl/bin/mklvars.sh intel64 

安装完成后,我们要验证一下安装是否正确。

cd /opt/intel/mkl/examples #进入intel自带例子文件夹
sudo mkdir examples_core_c
sudo tar -xvzf examples_core_c.taz -C ./examples_core_c #将压缩包解压到examples_core_c文件夹
cd examples_core_c/cblas
sudo gedit makefile #由于我们强迫症上一步多建立了一级目录,也就是examples_core_c所以需要更改一下makefile里的相对索引

在makefile文件中将第74行的MKLROOT = ../..改为MKLROOT = ../../..,顺便提一句gedit的行号显示在右下角。
右上角点保存后退出。这时我们就可以编译了

sudo make -j12 libintel64 compiler=gnu #-j12是指用多少个线程去编译,采用多线程编译可以有效的节省编译时间

好了 此时我们就可以去/_results/gnu_lp64_parallel_intel64_lib文件夹里去查看刚才生成的文件了,就是诸如.out.res的文件,别看我,我也不知道这东西都是干什么的。。。。

最后别忘了把刚才下载和解压缩的l_mkl_2019.5.281文件夹和l_mkl_2019.5.281.tgz给删掉

rm -rf xxx/l_mkl_2019.5.281 
rm -rf xxx/l_mkl_2019.5.281.tgz #xxx是我们之前下载该压缩包的目录

安装gtsam

好了,现在我们可以开始安装gtsam

git clone https://bitbucket.org/gtborg/gtsam.git
cd gtsam/
gedit CMakeLists.txt # 修改284行,将)前的OFF改为ON,意为使能该编译选项,这里我们使用系统自带Eigen 
sudo mkdir build &&cd build #如果是在home及其子文件下 不要加sudo 免得给自己找事
cmake ..

暂停一下,我们需要更改一下build文件夹中的GTSAMConfig.cmake文件

sudo gedit GTSAMConfig.cmake 

将该文件中第17行的find_dependency改为find_package,否则在编译LeGO-LOAM时会遇到Invalid arguments to find_dependency的错误,感谢这位博主提供的宝贵经验。修改后保存退出,我们继续

sudo make -j12 check #可选  如果是在home及其子文件下 不要加sudo  有多线程一定要记得开哦 
sudo make -j12 install  # 有多线程一定要记得开哦  一定要加sudo哦

check和install都比较耗时,如果cpu有多个线程一定要开多线程,不然就会像这位博主一样,花了一个多小时去编译,这里我们感谢一下这位博主的宝贵经验。

安装LeGO-LOAM

终于,终于,我们要开始正式安装LeGO-LOAM了,我打赌已经有人忘记我们最初的目标是安装LeGO-LOAM了。

LeGO-LOAM的编译需要使用catkin,还记得我们在装ROS时干了什么吗?不记得赶紧回去看看

cd ~/catkin_ws/src #进入ROS工作空间源代码目录
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd .. #回到 ~/catkin_ws 目录下
catkin_make -j12 #作者原话是catkin_make -j1 这里初次编译时-j1目的是为了生成某些message types,以后就不用输了
                            #我这里改成12是采用多线程,目前还不清楚是否会产生什么后续问题
echo "source ./devel/setup.bash" >> ~/.bashrc #将环境变量加入到启动文件中,省的每次开shell都要重新输一遍
source ~/.bashrc                                                #这两句安装ROS时我们也输过哦 忘记了可以回去看看

测试LeGO-LOAM

经过两天的艰苦奋斗(吐个槽,完全没体会到linux的便捷性),我们终于把LeGO-LOAM装好了,下面自然要跑一跑数据集看看效果喽。

感谢这位博主提供的官网数据集百度网盘链接,提取码:l5rl
自行下载数据集,并将数据集拷贝到ubuntu下。为了方便,我们在catkin_ws下新建一文件夹作为以后数据集的存放处。

cd ~/catkin_ws
mkdir dataset 

然后就把U盘中的nsh_indoor_outdoor.bag放到这个dataset文件夹中。
然后激动人心的时刻到了!!!打开一个终端输入

roslaunch lego_loam run.launch

打开另一个终端输入

rosbag play --clock ~catkin_ws/dataset/nsh_indoor_outdoor.bag

当当当!!!
从入门到放弃——Lidar小白学习Lidar SLAM系列(1)LeGO-LOAM环境搭建_第1张图片
恭喜大家,当rviz软件上开始出现如上画面时,说明我们已经完成了一个阶段性的成果。至此本博文结束,下一篇博文开始介绍如何使用自己的数据集跑通LeGO-LOAM。

你可能感兴趣的:(Lidar学习系列)