环境配置
- Ubuntu 20.04
- ROS版本:noetic
- OpenCV:3.4.5
- Pangolin
- Eigen3
- boost库
- libssl-dev
OpenCV版本:源码要求版本在3.2以上,但是听说最好不要安装OpenCV4以上(据说4默认不会生成.pc文件,最后查看版本的时候查看不到)可以选择3.4.5版本,这是一个稳定版本。
本人亲自试验的成功安装链接: link
ORB_SLAM3比起 ORB_SLAM2需要多安装boost库和libssl-dev,下面就介绍这两个的安装。
1.1 安装boost库
由此链接进入boost官网: Boost C++ Libraries进行下载。
下载后在自己定的位置解压,然后进入文件夹,打开终端,输入:
sudo ./bootstrap.sh
sudo ./b2 install
耐心等待即可。
1.2 安装libssl-dev
sudo apt-get install libssl-dev
安装 ORB_SLAM3
2.1创建环境
如果需要在ROS环境下运行ORB_SLAM,最好将工程放在catkin_ws/src文件夹下:
mkdir -p xxx_ws/src(必须得有 src)
cd xxx_ws
catkin_make
2.2下载
在合适的位置(例如刚刚创建的catkin_ws/src文件夹下):
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
文件很大,耐心等待。
2.3修改配置文件
2.3.1
打开ORB-SLAM3对应的CMakeLists.txt找到find_package(OpenCV 4.4) 这行代码(33行),将OpenCV版本号改为find_package(OpenCV 3.4)(你自己对应的版本号)
2.3.2
在项目打开终端
sed -i 's/++11/++14/g' CMakeLists.txt
2.3.3
mono_euroc.cc的第83行false改为true
2.4一行一行执行编译
可以一键编译
cd ORB_SLAM3
chmod +x build.sh
./build.sh
但是直接编译消耗内存太大,因此打开build.sh脚本,依次执行每条指令,并选择合适的核数进行编译。
2.5可能出现的问题
error: no match for ‘operator/’:
解决办法:
在报错的文件中,例如KannalaBrandt8.cpp,LocalMapping.cc
在include 之后加上以下代码:
namespace cv
{
template<typename _Tp, int m, int n> static inline
Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n> &a, float alpha)
{
return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp());
}
}
运行
3.1下载data
数据集下载地址:link
要下载ASL格式的,我下的是第一个MH01。
解压后,在合适的位置(项目根目录下)创建data文件夹,导入解压后的文件。
3.2运行
在ORB-SLAM3的源码的Examples文件夹中本来有一个脚本euroc_examples.sh,但是最新的ORB-SLAM3版本已经找不到了,可以去下面这个链接拷贝过来link
里面有ORB-SLAM3各种运行模式针对各个数据集的运行指令,选择下载数据集对应模式下的指令,提取出来(以MH01、单目+IMU为例):
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
把"$pathDatasetEuroc"/MH01 改成你自己的路径,然后把末尾的dataset-MH01_mono删了
得到:
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml ../data/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt
进入Examples文件夹运行终端,输入上文即可。