第1讲 前沿
-
本文的目标
本文将带领读者自己动手去写一个RGB-D SLAM程序。
因为我相信只有通过自己写程序,才能真正懂得slam的原理。
小萝卜:为什么要写一个SLAM程序,而不采用现有的代码呢?
- 师兄:为了更深的理解。
- 一个完整的程序含有大量的算法与GUI的代码,你读一遍需要多久?弄清楚原理要多久?
- 别人工具都做好了,代码都写完了,参数也调好了,你拿过来运行。那顶多给别人做一下评测。
- 你迟早要自己写代码。
另一方面,自己写程序,不代表要用C++实现矩阵的线性代数。基本的库我们还是会用的。
我们要用的库:OpenCV, PCL, g2o.
还等什么?赶紧动手吧!
预备知识与编程环境
1. 必备软件的安装: OpenCV
参考:www.cnblogs.com/zb-ml/p/8883055.html
OpenCV学习笔记:Mat类详解(一)
2.PCL
PCL就是Point Cloud Library啦,处理点云的必备工具。
小萝卜:师兄!为什么要处理点云?
师兄:啊……忘了说了,这篇文档是讲RGB-D SLAM的呀,深度相机采出来的本来就是点云数据啦。
小萝卜:这么重要的事情为什么你不放到开头去讲啊!
师兄:我忘了……
不管如何,PCL官网(http://pointclouds.org)上已经给出了ubuntu的安装方法。因为很多开发工具在ubuntu上装起来最方便,也比较适合小萝卜这种新手,所以我们才选用了ubuntu。
在Ubuntu 1404或更低版本,你需要通过私有源来安装PCL库
Step 1.
1 sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
2 sudo apt-get update
3 sudo apt-get install libpcl-all
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HELLO SLAM!
/home/louis/slam作为代码根目录
bin 用来放编译好的可执行二进制文件。
src 用来放源代码。
lib 用来放编译好的库文件。
include 用来放头文件。
我们要把目录结构告诉cmake。所以我们在代码根目录下写一个CMakeLists.txt。cmake在生成代码时,会读这个文件,并按照它来编译你的代码。刚才我们对opencv进行编译时,也采用了这个步骤。好,现在在代码根目录下新建一个CMakeLists.txt:
touch CMakeLists.txt
写入:
CMAKE_MINIMUM_REQUIRED( VERSION 2.8.12.2 ) #设定版本 PROJECT( slam ) #设定工程名,也就是代码根目录的名字 SET( CMAKE_CXX_COMPILER "g++") #设定编译器 #设定可执行二进制文件的目录 SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #设定存放编译出来的库文件的目录 SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #并且把该目录设为连接目录 LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib) #设定头文件目录 INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include) #增加子文件夹,也就是进入源代码文件夹继续构建 ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)
注:二进制就是可以直接运行的程序啦,库文件,就是为这些二进制提供函数。有main函数的代码可以编译成二进制,其他的则编译成库文件。链接时,把库文件链到二进制上,就可以运行啦。