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;

编译完成
在这里插入图片描述

总结

历时一个星期才将库编译成功,离我的目的还差多远,下一篇总结也不知道什么时候的事了,加油。
总结记录不易,有用的话留下点赞再走
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值