ORB_SLAM2编译笔记
前言
会点openGL,C++,Linux,其他啥也不会,先说说自己的目标吧,自己想搞一个室内定位机器人玩,顺带了解一下opencv和VSLAM,不求学多精,拓宽一下自己的见识。这次目的是编译ORB_SLAM2跑通。
此为菜鸡笔记,踩了大概一个星期的坑吧,才编译出 libORB_SLAM2.so,大神路过可以指导一下,同为菜鸟的话也可以互相交流。
环境
Ubuntu 20.04.6
g++/gcc 9.4.0
Python 3.8.10
安装开发环境
sudo apt update
sudo apt upgrade
sudo apt install build-essential cmake unzip pkg-config libjpeg-dev \
libpng-dev libtiff-dev libavcodec-dev libavformat-dev \
libswscale-dev libv4l-dev libxvidcore-dev libx264-dev \
libgtk-3-dev libatlas-base-dev gfortran python3.8-dev
编译ORB_SLAM2
拉取代码
cd ~
mkdir myProject # 在家目录建一个工程文件夹,也可自定义
cd ~/myProject
git clone https://github.com/raulmur/ORB_SLAM2.git
慢慢养成习惯,在github上拉的项目代码,不要急着去网上找指导教程,不管懂不懂英文,先看看作者的README.md,看的项目多了,对你的英语也有提升,或许你还能发现其他人没发现的东西。
在README.md
中,作者提到依赖以下条件:
- C++11 or C++0x Compiler
- Pangolin
- OpenCV
- Eigen3
- DBoW2 and g2o (Included in Thirdparty folder)
- ROS (optional)
配置好以上条件之后,可以直接执行./build.sh
来编译库文件。
a.安装编译器
sudo apt update
sudo apt upgrade
sudo apt install build-essential
b.安装Pangolin
cd ~/myProject
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOSR=1 ..
sudo make install
测试一下
cd ~/myProject/Pangolin/build/examples/HelloPangolin
./HelloPangolin
可以看到一个可根据鼠标变化的正方体
c.安装OpenCV
1号坑:作者说明 **Required at leat 2.4.3. Tested with OpenCV 2.4.11 and OpenCV 3.2**.
所以不要搞较低版本或者较新版本,ORB_SLAM2不一定适用。
2号坑:opencv 和 opencv_contrib 版本最好一致,不然发生什么不好说。
cd ~/myProject
# 拉代码
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
# 切换opencv分支
cd ~/myProject/opencv
git checkout -b 3.4 origin/3.4
# 切换opencv_contrib分支
cd ~/myProject/opencv_contrib
git checkout -b 3.4 origin/3.4
# 编译
cd ~/myProject/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D OPENCV_ENABLE_NONFREE=ON \
-D BUILD_EXAMPLES=ON ..
sudo make install # 时间可能有点久
测试一下
sudo apt pkg-config
pkg-config --modversion opencv
# 结果显示你刚刚安装的opencv版本号3.4.20
cd ~/myProject/opencv/samples/cpp/example_cmake
修改example.cpp
的第17行代码
...
- cout << "Built with OpenCV " << CV_VERSION << endl;
- Mat image;
- VideoCapture capture;
- capture.open(0); // 改为 capture.open("../../../data/vtest.avi");
...
mkdir build
cd build
cmake ..
make
# 会创建窗口,所以你别远程连接运行哦,说什么没反应。到UI终端运行
./opencv_example
可以看到一段测试视频的播放。
d.安装Eigen3
进官网Eigen,下载一份源代码压缩包即可。
3号坑:你可以看到ORB_SLAM2代码里的CMakeLists.txt有写find_package(Eigen3 3.1.0 REQUIRED),所以Eigen3的版本选择3.1.0.
Eigen3.1.0.tar.gz
tar -zxvf eigen-3.1.0.tar.gz
cd eigen-3.1.0
mkdir build
cmake ..
sudo make install
e.DBoW2 and g2o (Included in Thirdparty folder)
ORB_SLAM2仓库里包含这两个库,所以不用多做操作
f.ROS (optional)
可选,这次先不用。
编译
cd ~/myProject/ORB_SLAM2
chmod +x build.sh
./build.sh
错误1:找不到Eigen3的package
修改CMakeLists.txt内容,将find_package(Eigen3 3.1.0 REQUIRED)
和find_package(Pangolin REQUIRED)
这两行移到更前面的位置
错误2:报关于sigslot/signal.hpp的错误
需要将cmakelist中编译器支持版本更改为C++14
cd ~/myProject/ORB_SLAM2
rm -r build
sed -i 's/++11/++14/g' CMakeLists.txt
错误3:报关于usleep的错误
修改LoopClosing.h内容,在头文件引用部分,添加#include <unistd.h>
。
错误4:
可以看到是LoopClosing的错,修改LoopClosing.h内容
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
改为
Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;
编译完成
总结
历时一个星期才将库编译成功,离我的目的还差多远,下一篇总结也不知道什么时候的事了,加油。
总结记录不易,有用的话留下点赞再走