作为一名学习一年的机器视觉的学生,一直以来都没有写过像样点的自己的东西,真的是不像话,虽然有时候觉得会占用一些时间,但是能很大程度上帮助自己理解。
从github上可以下载到源码:[https://github.com/raulmur/ORB_SLAM],这ORB-SLAM;而ORB—SLAM2的源码地址:[https://github.com/raulmur/ORB_SLAM2],对于ORB-SLAM后面的ORB-SLAM2添加了RGBD和Stereo结构。
下载之后里面有个README.md文件,有Ubuntu默认的文本编辑器打开,开头是一些依赖库的安装,按照上面的教程去安装就好,因为我先看的高博的十四讲,所以这些库都已经安装了,就不在赘叙了,我们来说一下直接编译运行。按教程上的方法是:
cd ORB_SLAM2
chmod +x build.sh
./build.sh
因为作者把一些分步进行编译的命令都放到build.sh中,我们可以看一下build.sh
echo "Configuring and building Thirdparty/DBoW2 ..."
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
cd ../../g2o
echo "Configuring and building Thirdparty/g2o ..."
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
cd ../../../
echo "Uncompress vocabulary ..."
cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..
echo "Configuring and building ORB_SLAM2 ..."
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
从上面的语句可以知道,都是通过创建文件夹来编译生成CMakeLists.txt中需要的第三方共享库.so文件
Building CXX object CMakeFiles/ORB_SLAM2.dir/src/KeyFrameDatabase.cc.o
Building CXX object CMakeFiles/ORB_SLAM2.dir/src/PnPsolver.cc.o
virtual memory exhausted: Cannot allocate memory
virtual memory exhausted: Cannot allocate memory
virtual memory exhausted: Cannot allocate memory
virtual memory exhausted: Cannot allocate memory
virtual memory exhausted: Cannot allocate memory
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/FrameDrawer.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/Converter.cc.o] Error 1
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/KeyFrame.cc.o] Error 1
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/Viewer.cc.o] Error 1
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/Frame.cc.o] Error 1
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
出现上面的错误,我也在网上找了一些解决方案,但是都不行,然后到这里就结束了吗?显然不能放弃啊,也不知道是不是脑袋抽了,想到编译说内存用尽,于是就把build.sh文件拆开来,一步步单独编译,你还别说编译还通过了,也生成了相应的可执行性文件。
下面是我单独编译的顺序:
cd ORB-SLAM2/ThirdParty/g2o/
mkdir build
cd build/
cmake ..
make
结果在lib文件夹中生成了
接着就是ThirdParty的DBoW2共享库的生成:
cd ../../DBoW2/
mkdir build
cd build/
cmake ..
make
生成了文件夹lib下面的共享库:
还有一个关于词袋模型的文件要生成,即ORBvoc.txt,这个文件在Vocabulary下面。
生成的目标文件有4个:可以看CMakeLists.txt文件可以知道
数据有三种类型TUM,KITTI,EUROC,每个都对应的单目,rgbd,stereo三种。
如果你想编译生成:mono_tum(单目-相机类型为TUM)目标文件,可以在上面的程序中加上一句:
通过最后一次编译:
cd ORB-SLAM2
mkdir build
cd build/
cmake ..
make
编译的结果为
声明一下,因为是分步编译的所以上面生成的可执行性文件在我创建的build文件夹内,而按照源程序README.md编译,可执行性文件在Example下的二级目录内。
数据集按照README.md中给出的地址下载。
TUM数据集:http://vision.in.tum.de/data/datasets/rgbd-dataset
里面有很多数据集,随便下载一个,说明一下,这里的数据都是RGB-D的,所以运行单目时用不到深度信息。(后面几个其他类型的数据集也是一样的)
KITTI数据集:http://www.cvlibs.net/datasets/kitti/eval_odometry.php ,里面的数据集都特别大,因为这些都是在户外公路上用汽车收集的数据。
EUROC数据集:http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets (我没有试过)
运行一下:
(1)mono_tum
数据集:rgbd_dataset_freiburg1_xyz(这个数据集是不是很熟悉,没错它在高博的书中有用到哦!)
在终端输入上面的代码,看下运行结果
构建的稀疏地图
小白我觉得很有意思,就把大的KITTI数据集也下下来玩了一下,看下它的单目运行情况:
(2)rgbd-tum
数据集:上面那个也行,不过我换了一个,rgbd_dataset_freiburg1_360
要在上面TUM数据集里下载tool文件associate.py
python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt
运行一下该数据集:
构建的稀疏地图与关键点跟踪
其他的类型都差不多,这里就不展开来了。
总结:写第一篇博客花了一个网上和一个上午的时间,主要是我机子太差了,虚拟机老是卡,总是等。机子差还有一个表现,就是在上面运行时,程序初始化好久才开始追踪。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)