一起做RGB-D SLAM (1)-前言及准备
一起做RGB-D SLAM (1)-前言及准备
说明:
- 介绍基本的C程序结构和编译方法
前言:
- SLAM,即Simultaneous Localization and Mapping,中文译作同时定位与地图创建,是近几十年里机器人领域有重大发展的研究方向。
- 作为自主机器人的核心技术,SLAM在机器人导航、控制、生产等方面都有着重要的研究意义。尤其在二十一世纪,以视觉传感器为中心的视觉SLAM技术,在理论和方法上都经历了明显的转变与突破,正逐步从实验室研究迈向成熟的市场应用。
- 在国外研究如火如荼之际,它在国内的研究尚处于起步阶段。有关SLAM的中文资料、书籍更是难以一见。然而,随着机器人技术得到国家的重视,越来越多的青年研究者、学生正逐渐跨入这片领域。
目标:
- 通过自己写程序,才能真正懂得slam的原理
预备知识与编程环境:
- 编程环境:ubuntu 12.04。建议读者和我们使用一样或类似的环境。
- 如果你(出于酷或者其他什么原因)就是要用Arch/Fedora/Mac,请你自己配环境。
- 编程软件:OpenCV, PCL, g2o
OpenCV
OpenCV, 计算机视觉库
目前(2015.6)较好的版本是2.4系列,因为3.0系列还不完善
下载OpenCV源代码: http://opencv.org/downloads.html。
安装依赖:
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
- 把OpenCV解压到下载目录中,用cmake编译再安装.
mkdir build
cd build
cmake ..
make
sudo make install
头文件在/usr/local/include/,里面有opencv和opencv2的头文件,基本只用opencv2。
库文件默认就在/usr/local/lib/
cmake就是linux下的C++管理工具,简单的代码你用g++一条条敲,再多些可以用Makefile来管理,cmake就是自动生成makefile的工具,比makefile集成度更高一些。
二进制安装OpenCV 2.4.9:
sudo apt-get install libopencv-dev
PCL
- PCL,Point Cloud Library,点云库
- PCL官网(http://pointclouds.org)
- 在Ubuntu 1404或更低版本,你需要通过私有源来安装PCL库:
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all
- 在 Ubuntu 1604,PCL库已经存在于公共软件源中,直接安装即可:
sudo apt-get install libpcl-dev pcl-tools
编写测试程序:
新slam的文件夹,里面再新建四个文件夹:
- bin 用来放编译好的可执行二进制文件
- src 用来放源代码
- lib 用来放编译好的库文件
- include 用来放头文件
slam的文件夹里,新建文件CMakeLists.txt,用于确定如何编译。
touch CMakeLists.txt
图示:
编辑CMakeLists.txt文件,输入内容如下:
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #设定版本
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)
编写测试程序
- 在src/目录下,新建main.cpp
touch main.cpp
vim mian.cpp
- 内容如下:
#include <iostream>
int main(int argc, char**argv)
{
std::cout<<"Hello SLAM!"<<std::endl;
return 0;
}
- 在src/目录下,新建一个CMakeLists.txt
touch CMakeLists.txt
vim CMakeLists.txt
- 内容如下:
ADD_EXECUTABLE( main main.cpp )
- 在slam目录下,新建build, 在进入build目录,编译代码:
mkdir build
cd build
cmake ..
make
- cmake就会把这个main.cpp编译成一个叫做main的二进制,放在在bin/目录下,
- 如果你执行这个二进制,就会输出Hello SLAM的语句,如图:
参考:
- 《CMake实践》
- 本教程的github代码库:https://github.com/gaoxiang12/rgbd-slam-tutorial-gx
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号