论文地址:https://arxiv.org/pdf/2007.11898.pdf
代码地址:https://github.com/UZ-SLAMLab/ORB_SLAM3
1.安装gcc、g++
sudo apt install g++
sudo apt install gcc
由于后续实验的需要进行gcc/g++降级,降为4.8版本
sudo apt-get install gcc -4.8
sudo apt-get install g++ -4.8
之后进入/usr/bin目录实现链接
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.8 gcc
sudo rm g++
sudo ln -s g++-4.8 g++
查看gcc/g++版本
gcc -v
g++ -v
2.安装cmake,用于编译
sudo apt install cmake
3.安装Eigen库(矩阵运算)
sudo apt-get install libeigen3-dev
查看eigen版本
找到/usr/include/eigen3/Eigen/src/Core/util路径下的Macros.h文件
#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 4
表示版本为3.3.9
检查安装位置
pkg-config --cflags eigen3
4.安装git
sudo apt-get install git
5.Sophus
选择非模板类,只需编译,无需安装
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff #回滚到a621ff版本
mkdir build
cd build
cmake ..
6.安装opencv3.2.0
官网下载速度较慢,如下为镜像网站
https://www.bzblog.online/wordpress/index.php/2020/03/09/opencvdownload/
选择3.2.0版本,下载
安装相关依赖项
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
sudo add-apt-repository “deb http://security.ubuntu.com/ubuntu xenial-security main”
将下载的压缩包提取到home进行编译安装
cd opencv-3.2.0/
mkdir build
cd build
cmake ..
make -j4 #npoc查看核心数
sudo make install
配置环境变量
sudo gedit /etc/ld.so.conf.d/opencv.conf
将会打开一个空白文件
输入:
/usr/local/lib
保存退出
sudo ldconfig
配置环境文件
sudo gedit /etc/bash.bashrc
在末尾加入
#opencv3.2.0
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
检查opencv版本
pkg-config opencv --modversion
7.安装PCL
sudo apt-get install libpcl-dev pcl-tools
如果出现无法下载某个包的情况
sudo apt-get update
8.安装Pangolin(可视化工具)
安装依赖项
sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
安装
git clone https://github.com/zzx2GH/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOST= 1 ..
make -j4
sudo make install
find_package(FFMPEG QUIET)
if(BUILD_PANGOLIN_VIDEO AND FFMPEG_FOUND)
set(HAVE_FFMPEG 1)
list(APPEND INTERNAL_INC ${FFMPEG_INCLUDE_DIRS} )
list(APPEND LINK_LIBS ${FFMPEG_LIBRARIES} )
list(APPEND HEADERS ${INCDIR}/video/drivers/ffmpeg.h)
list(APPEND SOURCES video/drivers/ffmpeg.cpp)
list(APPEND VIDEO_FACTORY_REG RegisterFfmpegVideoFactory )
list(APPEND VIDEO_FACTORY_REG RegisterFfmpegVideoOutputFactory )
即可快速编译成功
9.安装Ceres(日志和测试工具)
安装依赖项
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev
遇到无法找到libcxsparse3.1.2的问题
解决办法:
sudo gedit /etc/apt/sources.list #打开sources.list
将deb http://cz.archive.ubuntu.com/ubuntu trusty main universe粘贴到文件中
sudo apt-get update #更新源
安装
git clone https://github.com/ceres-solver/ceres-solver.git
出现错误
查资料后发现是ceres版本与eigen版本冲突
转而手动下载ceres1.14版本
https://distfiles.macports.org/ceres-solver/
编译失败
10.g2o与DBoW2网址
可不进行安装,在代码中作者已设置好自动安装
git clone https://github.com/dorian3d/DBoW2.git DBoW2
git clone https://github.com/RainerKuemmerle/g2o.git g2o
二、编译ORB-SLAM3
cd ORB_SLAM3
chmod +x build.sh
./build.sh
编译遇到错误
/home/xuchenxing/ORB_SLAM3/src/LocalMapping.cc:628:49: error: no match for ‘operator/’ (operand types are ‘cv::Matx’ and ‘float’)
在两个文件LocalMapping.cc和KannalaBrandt8.cpp中include后加入
namespace cv
{
template 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());
}
}
之后此问题解决,出现大量未引用的定义问题
经过一段时间的测试,发现是由于后来eigen库的重装导致Pangolin出了问题,重新编译Pangolin后,ORBSLAM3编译通过!
测试
数据集为TUM_VI dataset 是两个fisheye镜头和一个惯性测量sensor录制的,这个数据集是在一个移动机器人上的 Kinect 记录的序列。 里边有包含了有超过 360度的转弯。 Bag文件还包含了激光雷达和odom的信息。
基于ground_truth 的轨迹 - ground truth trajectory
RGB movie and depth movie RGBD的信息
external camera view 扩展的摄像机视野
Downsampled bag file with point clouds
测试为单目相机+IMU
测试只有单目相机
输入命令:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml data/rgbd_dataset_freiburg1_xyz
出现错误:
查资料后发现,仍旧是Pangolin的问题,看了https://blog.csdn.net/qq_35042020/article/details/87632460这篇文章得以解决,方法如下:
//进入Pangolin的CMAKE工程根目录,Pangolin-master/src/display/device/display_x11.cpp 文件,CTRL+F找到GLX_SAMPLE_BUFFERS,注释两行代码。大概在123,124行。
static int visual_attribs[] =
{
GLX_X_RENDERABLE , True,
GLX_DRAWABLE_TYPE , GLX_WINDOW_BIT,
GLX_RENDER_TYPE , GLX_RGBA_BIT,
GLX_X_VISUAL_TYPE , GLX_TRUE_COLOR,
GLX_RED_SIZE , 8,
GLX_GREEN_SIZE , 8,
GLX_BLUE_SIZE , 8,
GLX_ALPHA_SIZE , 8,
GLX_DEPTH_SIZE , 24,
GLX_STENCIL_SIZE , 8,
GLX_DOUBLEBUFFER , glx_doublebuffer ? true : False,
// 注释这行 GLX_SAMPLE_BUFFERS , glx_sample_buffers,
// 注释这行 GLX_SAMPLES , glx_sample_buffers > 0 ? glx_samples : 0,
None
};
之后再次执行命令行又出现了cv的问题
原因是少了libgtk2.0-dev 这个依赖,运行如下命令进行安装
sudo apt-get install libgtk2.0-dev
之后进入opencv的文件夹重新编译,再重新编译ORBSLAM3。
又出现了段错误,将主文件夹中cmakelists与g2o中的cmakelists中-march=native删除即可。
出现Failed to load module “canberra-gtk-module”
解决办法:
sudo apt-get install libcanberra-gtk-module
结果
/home/luckyxu/ORB_SLAM3/src/LoopClosing.cc:1911:51: error: no matching function for call to ‘std::list