2017年1月20号正式定下了研究生期间的研究方向:slam,之前的我是完全不懂什么叫SLAM(Simultaneous Localization and Mapping),叫做同时定位与地图重建,主要解决了机器人的位姿和地图构建,从我现在的理解,也就是这样了。
本学期开始,重装了系统,用的时Ubuntu14.04,瞬间感觉自己电脑无比干净,因为是个Linux菜鸟,上学期配过深度框架,结果在配SLAM基本库的时候各种出问题,索性重装系统了,下面介绍几个SLAM常用库的配置方法。
Ubuntu14.04镜像肯定是要的,虽然现在已经出来16.04,但是感觉有些库还不兼容,或者说配置起来没有14.04方便,所以对于新手(我就是)还是决定不做探路者,用14.04.
SLAM其实在没有GPU的支持下,实时性还是很重要的,所以一般都是用c++作为变成的语言(我还没学过C++),本科是个学渣,C语言勉强过二级,所以C++还是要恶补一下,不然看见代码第一反应就是,我去!神马鬼….
sudo apt-get install g++
总得用C++吧!
IDE(integrated Development Evironment ),这是啥?这是集成开发环境,和Windows下的VS类似,表示VS并不怎么会,以前学校也就用个Matlab做个简单实验。这里我就使用的是Kdevelop,不要问我为啥,因为安装简单,使用方便,易上手!
sudo apt-get install Kdevelop-dev
这又是啥!因为做SLAM,其实需要很多数学运算,Eigen其实就是个C++开源的线性代数库,里面有很多矩阵运算,吧啦吧啦…
sudo apt-get install libeigen3-dev
感觉安装还蛮简单的^_^
简直了,SLAM的库就是很多,感觉小伙伴还是一次配全了比较好,不然回头做开发或者跑一些程序的demo的时候,就会发现:“我的天哪,各种不兼容!”,因为我是相当于裸机重新配置,啥也没有装,所以遇到的问题还稍微少一些。
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff
如果没有安装git,要先安装一下git
sudo apt-get install git
这个库主要做李群和李代数之类的运算,具体是啥,以后再写啦!
这个就是很头疼的一个问题了,请安装的小伙伴慎重考虑好自己是用2系列还是3系列,两个系列的接口是不同的,所以代码的编写方式也是有所不同,如果,不行,把两个版本装到一起,那么简直相爱相杀,出现一大堆的问题。函数的互相覆盖,函数命名错误,头文件找不吧,简直阿西吧!所以LZ提供两种方式,但是最好不要同时使用,不然就game over!
sudo apt-get install libopencv-dev
这个是直接从Ubuntu中把编译好的库文件下载下来,通常是Opencv2系列的,下面介绍安装OpenCV3系列的,这个比较新,所以要从源代码来安装它了,刚把得~~~
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
上面都是一些依赖项
下面就需要你去OpenCV的官网啦,把源代码下载下来,这个可能要花些时间,接着解压到你需要的文件夹,进入解压后的文件夹
mkdir build
cd build
cmake ..
make
不出意外,OpenCV就安装好啦!O(∩_∩)O哈哈~
相信如果之前了解过SLAM的小伙伴肯定都知道进行实时地图重建啥的,都要做点云拼接,PCL就是一个还不错的工具哟!
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all
哈哈,就是这么的完美,怎么快就已经装好这么多库啦,小伙伴们加油哦,胜利就在前方,嗯啊,(づ ̄ 3 ̄)づ
Ceres
这个就是Google出品的一个做优化的库,里面内容博大精深,我也只能说我还是个门外汉
首先还是来先安装一下Ceres的依赖项吧
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev
这些有些事谷歌自己使用的一些日志和测试工具,具体有啥用,我也没弄明白。接下来可以就是按照之前在github上下载Ceres库
``` python
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build
cd build
cmake ..
make
sudo make install
class="se-preview-section-delimiter">div>
这个编译可能要一定的时间,要有点耐心啊,我之前做了一件很蠢的事情,就是在用Ceres的时候,发现怎么也用不起来,然后抓耳挠腮好久之后才发现,诶,这个是要安装的,忘加install,小伙伴那么聪明,肯定不会忘记的啦!
g2o
哇哇,这个当之无愧可是一个重头戏啊,在做闭环检测或者BA的时候,都要进行优化,SLAM里面一般都会出现图优化,注意不是凸优化,这两个好像读音有点像,但实际上可是差别很大的哦,凸优化我的理解可能是针对凸函数之类的(数学渣啦,如果有大神觉得我说的肤浅,可以随时欢迎指正哈),图优化可能就是把数学问题抽象成边和节点,来做优化,恩恩,应该是这样的吧^_^。好吧,开始安装依赖项了哦,可能有部分依赖项和之前安装的依赖项有些重合,但是我还是都写在这上面了,万一有些小伙伴直接看到这里肿么办,是吧,哈哈。
sudo apt-get install libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev libcxsparse3.1.2 libcholmod2.1.2
class="se-preview-section-delimiter">div>
后面几个都是稀疏矩阵运算可以加速使用的,比如Cholesky分解之类的,不是数学专业,并且数学很渣的我表示呵呵。嗯,下面就是g2o的安装步骤啦,
git clone https://github.com/RainerKuemmerle/g2o
cd g20
mkdir build
cd build
cmake ..
sudo make install
class="se-preview-section-delimiter">div>
最后一行就是把编译和安装一块进行了,省的我再犯只编译没安装的低级错误啦,小伙伴们也可以这么预防哈。
Pangolin
这是一个轻量级的显示3D一个库吧,写了好久了,感觉有点小累,坚持就是胜利。下面来加一下它的依赖项
sudo apt-get install libglew-dev camke libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libpython2.7-dev
class="se-preview-section-delimiter">div>
这里需要注意的是python2系列和3系列有些代码编写方式也是不一样的,有些人认为2系列好,有些人就会认为3系列也不错,这是因人而异,没有谁对谁错的,我这里安装的就是2系列的,小伙伴也可以选择3系列的,没有问题。
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make
class="se-preview-section-delimiter">div>
这里面有些依赖项没有装,太多了,所以有兴趣的小伙伴可以去github上自行安装,我这里就不赘述了。
DBoW3
其实之前有个DBow2版本,但是还要以来DLIB,所以从简单方便至上的LZ来说,就安装3版本啦,其实3版本还是比2版本有很多提高的,而且3版本依赖只有OpenCV(前面已经写过咯),所以,本LZ就决定它了~\(≧▽≦)/~啦啦啦,这个主要是词袋(Bag of Words),的应用啦,具体是啥,回头再说啦O(∩_∩)O哈!
git clone https://github.com/hcjghr/DBow3
cd DBow3
mkdir build
cd build
cmake ..
make
还有经常update或者upgrade有些安装找不到库的问题也会解决,个人实践小技巧。
哇哇哇,简直感动的要哭了,SLAM安装大全搞定啦!
下面一章会介绍怎么写CMakeLists把这些库添加进来,让你的C++飞起来!^_^