前言
2016.11 更新
增加了对16.04的支持。
整理了过时的代码。
SLAM,即Simultaneous //代码效果参考:中文译作同时定位与地图创建,是近几十年里机器人领域有重大发展的研究方向。作为自主机器人的核心技术,SLAM在机器人导航、控制、生产等方面都有着重要的研究意义。尤其在二十一世纪,以视觉传感器为中心的视觉SLAM技术,在理论和方法上都经历了明显的转变与突破,正逐步从实验室研究迈向成熟的市场应用。在国外研究如火如荼之际,它在国内的研究尚处于起步阶段。有关SLAM的中文资料、书籍更是难以一见。然而,随着机器人技术得到国家的重视,越来越多的青年研究者、学生正逐渐跨入这片领域。本文档则试图为这些刚走进SLAM的同事们,提供一些简单而实际的参考。
小萝卜:师兄!你上面写的都是些什么东西啊!
师兄:都是些没什么卵用的废话啊……但是没这些东西文档就不上档次啊。
小萝卜:师兄!你别干这些无聊的事情了!赶紧教我做SLAM啊!
师兄:前言才写了一段,读者会觉得我在敷衍他们的吧。算了,不管了,前两天让你跑的rgbd-slam怎么样了?
小萝卜:跑起来了!然后呢?
师兄:然后你就可以调调参数,改改代码啥的啊。
小萝卜:师兄!我看不懂!
师兄:呃这个……
小萝卜:师兄!你给我写一个SLAM程序吧!
师兄:呃这个……
小萝卜:赶紧写啦师兄!写完了你请我吃饭!
师兄:吃饭啊,那好吧……
于是,师兄就开始写这本文档了。由于师兄也不知道什么时候会写完,所以他每写一段就拿给小萝卜看(然后请他吃饭)。还好小萝卜热情很高,每次师兄给他写好的代码,都拿回去仔细看而且跑了。这也给了师兄很大动力继续往下写。
本文的目标
本文将带领读者自己动手去写一个RGB-D SLAM程序。
因为我相信只有通过自己写程序,才能真正懂得slam的原理。
小萝卜:为什么要写一个SLAM程序,而不采用现有的代码呢?
- 师兄:为了更深的理解。
一个完整的程序含有大量的算法//代码效果参考:http://www.ezhiqi.com/bx/art_1437.html 与GUI的代码,你读一遍需要多久?弄清楚原理要多久?
别人工具都做好了,代码都写完了,参数也调好了,你拿过来运行。那顶多给别人做一下评测。
你迟早要自己写代码。
另一方面,自己写程序,不代表要用C++实现矩阵的线性代数。基本的库我们还是会用的。
我们要用的库:OpenCV, PCL, g2o.
还等什么?赶紧动手吧!
预备知识与编程环境
编程环境:ubuntu 12.04。建议读者和我们使用一样或类似的环境。如果你(出于酷或者其他什么原因)就//代码效果参考:http://www.ezhiqi.com/zx/art_5974.html是要用Arch/Fedora/Mac,请你自己配环境。
必备软件的安装:
OpenCV
推荐从源代码安装的模式。编译过程需要一点时间。
Step 1.
下载OpenCV源代码:
目前(2015.6)较好的版本是2.4系列,因为3.0系列还不完善(主要是没文档)。请把它下载到电脑上随意一个目录下。
在下载过程中,你可以安装依赖项。基本的依赖项是底下那些,直接拷贝到终端执行。
1 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
Step 2.
把OpenCV解压到下载目录中,用cmake编译再安装.
mkdir build
cd build
cmake ..
make
sudo make install
编译过程需要一点时间,长短视你机器的配置而定。慢一点的可能一下午就过去了,请顺便找点其他事干干例如看场电影之类的。