ORB_SLAM2的安装、配置与应用
一、安装的工具
配置过程中所需要cmake、gcc、g++和git工具。
安装所需的工具 | 在终端运行的命令 |
---|---|
cmake | sudo apt-get install cmake |
git | sudo apt-get install git |
g++ ,g++ | sudo apt-get install gcc g++ |
二、安装Pangolin
- 安装依赖项
sudo apt-get install libglew-dev libpython2.7-dev
- 从Github下载Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
- 下载好后,进入Pangolin所在的目录 ~/Pongolin
cd Pangolin
- 在Pangolin下创建文件夹build
mkdir build
- 将目录切换到 ~/Pangolin/build
cd build
- 进行编译
cmake ..
对于一个大项目,编写这个makefile是非常复杂的,所以出现了cmake工具,他能够生成makefile。
make -j
make工具的出现就是为了使用一条命令实现编译,但是需要一个规则文件,也就是makefile,make依靠这个文件来进行批处理编译;
make -j4 与make -j8的意思就是多线程运行,即4个进程去竞争多核cpu,或者8个线程去竞争cpu,可以提高执行速度。
sudo make install
将编译成功的可执行文件移动到make编译时填写的目录,依据生成的makefile文件,一般默认系统目录 /usr/local/bin。
三、安装OpenCV
方法一:下载OpenCV的链接:OpenCV-3.4.1.zip
提取码:v4uw
直接点击打开百度网盘下载OpenCV,操作更方便哦!
方法二:用命令下载
wget -O opencv-3.4.1.zip https://github.com/Itseez/opencv/archive/3.4.1.zip官网
方法三:点击下面的opencv官网自己去官网下载,然后自己解压缩到相应的目录即可
opencv官网
- 为OpenCV安装依赖库
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev
- 编译
在opencv-4.3.1文件夹的目录下创建编译文件夹build,进入~/opencv-4.3.1/build,执行cmake
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release –D CMAKE_INSTALL_PREFIX=/usr/local ..
效果如下
- 执行make
sudo make
结果如下
-
执行make install命令,结果如下图
sudo make install
OpenCV编译过程完成! -
配置OpenCV的编译环境,目的是让系统找到OpenCV的库的路径
打开编写一个空白的文件opencv.conf
sudo gedit /etc/ld.so.conf.d/opencv.conf
在opencv.conf中添加如下内容
/usr/local/lib
效果如下图
- 使刚配置路径生效
sudo ldconfig
- 打开bash文件,配置bash
sudo gedit /etc/bash.bashrc
- 在打开的bash.bashrc的最末尾添加如下代码
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
如图所示
- 保存关闭文件,使刚才的配置生效
source /etc/bash.bashrc
opencv配置完成!
四、安装Eigen
- 使用命令
sudo apt-get install libeigen3-dev
结果如图
Eigen官网
五、安装ORB_SLAM2
- 进入ROS工作区间catkin_ws下的src
cd ~/catkin_ws/src/
- 使用 git clone ***来得到ORB_SLAM2
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
结果如下图
- 进入ORB_SLAM2目录,给build.sh文件可执行权限,编译ORB-SLAM2,运行如下命令
cd ORB_SLAM2
chmod +x build.sh
./build.sh
如图
结果如下
- 编辑bash文件
sudo gedit ~/.bashrc
- 将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加的内容如图所示
六、运行单目SLAM实例
- 下载数据集
有TUM、KITTI、EuRoC三种数据集,本实验使用TUM数据集,从下载序列并解压缩。
- 编译
PATH_TO_SEQUENCE_FOLDER为数据集的存储路径,并将tumx.yaml与下载的数据集对应,比如TUM1.yaml,TUM2.yaml 和TUM3.yaml 分别对应 freiburg1, freiburg2 和 freiburg3
我的数据集放在/home/mango/catkin_ws/ros目录下
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/mango/catkin_ws/src/rgbd_dataset_freiburg1_xyz
出现运行结果:
七、运行kitti数据集
我的数据集放置的路径
- 相关数据集下载路径
- 编译执行命令
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml /home/hadoop/test
该命令的数据集路径,这个根据自己下载的kitti数据集路径修改
运行结果显示
根据摄像头移动路径绘制的地图如下
八、实验遇见的问题与解决方法
问题一:运行时出现如下错误
解决办法:在~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/文件夹下修改CMakeLists.txt文件,在set(LIBS…)后面添加如下的一句话,井使它生效
-lboost_system
如图所示
问题二:install cimpiler error:killed(program cciplus)
解决办法:我好像直接关机重启就好了。
问题三:
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.
解决办法:
1.直接运行sudo chmod 777 /etc,避免出现mkdir无法创建该包的错误.,如下图
2.自己相应文件夹下/etc/ros/rosdep/sources.list.d去创建目录 20-default.list
3.在etc/ros/rosdep/sources.list.d目录下打开终端,运行
sudo gedit 20-default.list
4.编辑 20-default.list文件,将里面的内容替换为如下
# os-specific listings first
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
# generic
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
效果如下图
5.在home打开终端继续执行命令,会出现另外的错
ERROR: default sources list file already exists:
/etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize
解决办法:sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
终于对了
问题四:
/src/ros_rgbd.cc:35:
/home/mango/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/…/…/…/Thirdparty/g2o/g2o/types/…/core/jacobian_workspace.h:30:10: fatal error: Eigen/Core: No such file or directory
#include <Eigen/Core>
^~~~~~~~~~~~
compilation terminated.
分别将se3_ops.h、se3quat.h…等等出现问题的XXX.h文件找到,打开将里面的
#include <Eigen/Core>
修改为
#include <eigen3/Eigen/Core>
如图所示
问题五:出现error:'usleep’问题
解决办法:根据提示哪个文件有这个问题,将它找到,在引入头文件地方添加如下
#include<unistd.h>
问题六:在编译ORB-SLAM2时,出现cpp项目编译时报错: c++: internal compiler error: Killed
原因是内存不够,并且没swap,增加swap
解决办法
sudo -s
dd if=/dev/zero of=/tmp/newdisk bs=1M count=8000
du -sh /tmp/newdisk
mkswap -f /tmp/newdisk
free -m
chmod 0600 /tmp/newdisk
swapon /tmp/newdisk
free -m
- 参考文献
- https://blog.csdn.net/qq_42585108/article/details/105519029
- https://blog.csdn.net/weixin_44436677/article/details/105587986
加油!