ubuntu18.04配置ORB-SLAM3并跑EuRoC数据集(单目)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1 ORB-SLAM3算法环境搭建
1.1 C++11 or C++0x Compiler 安装
新建一个终端新建终端的快捷键是Ctrl+Alt+T
输入以下代码
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install build-essential
sudo apt-get install cmake
1.2 Pangolin 安装
Pangolin的官方教程地址https://github.com/stevenlovegrove/Pangolin
安装Pangolin
1.2.1下载Pangolin推荐安装tag v0.6版本
# Clone Pangolin along with it's submodules
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
1.2.2安装依赖
./scripts/install_prerequisites.sh --dry-run recommended
1.2.3编译
./scripts/install_prerequisites.sh -m brew all
可能出现的问题
如果安装Pangolin没有提示cmake版本不足则无需此步骤
cmake一般都是直接安装的如sudo apt-get install cmake所以这里我们需要自己下载新版的cmake并覆盖安装。
进入Cmake官网Cmake官网下载地址
选择合适的版本比如本人选择的是cmake-3.20.6.tar.gz
(1)先把旧版cmake卸载
sudo apt-get autoremove cmake
(2)下载之后进行解压编译这里提示缺少openssl库先进行安装。
新建一个终端输入如下
sudo apt-get install openssl
tar zxvf cmake-3.20.6.tar.gz
cd cmake-3.20.6
./bootstrap
make -j4
sudo make install
(3)再编译安装Pangolin则可以通过。
1.3 OpenCV3.4.3安装
去官网下载opencv版本选择opencv3.4.3其他版本同理。
1.3.1官网地址链接: opencv官网.
下载选择Source就可以没有必要选github下载太慢了。
1.3.2解压zip包
unzip opencv-3.4.3.zip
cd opencv-3.4.3
(1) .3.3安装opencv依赖项
这一步真的会缺少非常多库最好都提前安装好
sudo apt-get install cmake
sudo apt-get install build-essential
sudo apt-get install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
(2 Cmake
mkdir build
cd build
cmake ..
cmake 过程会出现非常多的错误
问题1
Unable to locate package libjasper-dev
解决方法
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
成功的解决了问题其中libjasper1是libjasper-dev的依赖包
问题2
No package ‘libavresample’ found
解决方法
sudo apt-get install libavresample-dev
问题3
IPPICV: Download failed: “Couldn’t connect to server”
即ippicv的 ippicv_2017u3_lnx_intel64_general_20180518.tgz 下载不下来
原因由于有qiang无法进入外网下载
解决方法
打开opencv 3.4.3/build/CMakeDownloadLog.txt
找到ippicv_2017u3_lnx_intel64_general_20180518.tgz 所对应的下载链接将这个链接保存下来。
选择一种你们懂得的方式将这个文件下载下来。没有这种方式的话只能找别人的百度云了
接着打开 /opencv-3.4.3/3rdparty/ippicv/ippicv.cmake 这个文件将47行的
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
改为
"file:home/xxx/xxx/"
这里的地址为下载下来的ippicv_2017u3_lnx_intel64_general_20180518.tgz的文件夹地址
特别需要注意的是file: 后面不要加/
特别需要注意的是file: 后面不要加/
特别需要注意的是file: 后面不要加/
问题4
Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
– Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
– Could NOT find Atlas (missing: Atlas_CBLAS_INCLUDE_DIR Atlas_CLAPACK_INCLUDE_DIR Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY Atlas_LAPACK_LIBRARY)
– A library with BLAS API not found. Please specify library location.
– LAPACK requires BLAS
– A library with LAPACK API not found. Please specify library location.
– Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
– Could NOT find Matlab (missing: MATLAB_MEX_SCRIPT MATLAB_INCLUDE_DIRS MATLAB_ROOT_DIR MATLAB_LIBRARIES MATLAB_LIBRARY_DIRS MATLAB_MEXEXT MATLAB_ARCH MATLAB_BIN)
– VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
解决方法
sudo apt-get install libopenblas-dev
问题5
No package ‘gstreamer-base-1.0’ found
解决方法
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
3再次cmake和make即执行以下命令
cmake ..
sudo make // 时间比较漫长
sudo make install
4 将OpenCV的库添加到路径
首先将OpenCV的库添加到路径可以让系统找到
sudo gedit /etc/ld.so.conf.d/opencv.conf
在文件末尾添加
/usr/local/lib
执行如下命令使得刚才的配置路径生效
sudo ldconfig
5 配置bash
打开bashrc
sudo gedit /etc/bash.bashrc
在末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存后重新运行配置
source /etc/bash.bashrc
更新
sudo updatedb
到此所有opencv3.4.3配置结束。
6 小程序运行
找到 opencv-3.4.3/samples/cpp/example_cmake 目录下官方已经给出了一个cmake的example拿来测试。按顺序执行
cmake .
make
./opencv_example
可看到打开了摄像头在左上角有一个hello opencv 即表示配置成功。
1.4、Eigen安装
建议源码安装Eigen。
这里给出Eigen的官网Eigen官网
Eigen版本我选择的是Eigen 3.3.9 released版。
下载下来我下载的是zip格式解压编译。
在终端内执行以下安装操作:
unzip eigen-3.3.9.zip
cd eigen-3.3.9
mkdir build
cd build
cmake ..
make
sudo make install
1.5、boost安装
如果不安装boost会报很多的关于c++的错误并且无法定位。
进入boost官网网址http://www.boost.org/users/download/
下载boost安装包我选择的是boost_1_77_0.tar.gz版本
接着还是一样解压编译安装即执行以下命令
tar -xvf boost_1_77_0.tar.gz
cd ./boost_1_77_0
./bootstrap.sh
sudo ./b2 install
1.6、DBoW2 and g2o
这两个库在ORB-SLAM3的Thirdparty文件夹下编译ORB-SLAM3的时候会自动编译不需要我们手动编译。
2. 正式编译ORB_SLAM3
克隆到本地
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
修改build.sh文件
将所有的make -j改为make -j4原因是make -j会调用所有的核心导致电脑直接卡死也可能是我电脑太弱了
cd ~/ORB_SLAM3
gedit build.sh
改为如下
接着编译运行
chmod +x build.sh
./build.sh
问题1
编译过程中出现已杀死internal computer error即内存不足的问题。
我参考了如下方式解决Linux增加swap分区的方法https://www.cnblogs.com/kaishirenshi/p/8986467.html
问题2
sigslot/signal.app报错错误内容类似error: ‘XXX’ is not a member of ‘std’
仔细研究std后发现可能是编译过程中调用了某一些库库里面使用的是c++14的标准语法但ORB_SLAM3中只有c++11的语法许可没有14的这就造成了冲突。
打开ORB_SLAM3/CMakeLists.txt
gedit ./CMakeLists.txt
添加c++14的使用许可
add_compile_options(-std=c++14)
测试
进入ORB_SLAM3
cd ~/ORB_SLAM3
编译成功后我们来跑一个示例。
首先进入 EuRoC 数据集
选择Downloads的ASL Dataset Format格式这里我下载了Machine Hall 01数据。
图片数据集下载好解压后是一个mav0这种形式的文件夹在ORB-SLAM3文件夹下新建一个dataset文件夹,在dataset文件夹新建一个名称为MH01的文件夹把mav0整个文件夹拷贝到MH01文件夹中。
在ORB-SLAM3路径下新打开一个终端
# 命令格式 可执行文件 词袋路径 yaml路径 数据集图片路径 时间戳路径 需要保存的轨迹文件名称
输入命令
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
如果没有图像在ORB-SLAM3/Examples/Monocular/mono_euroc.cc中的第83行False改成true,保存并退出。重新输入命令
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
可视化界面
如果最后出现Gtk-Message: 15:46:39.932: Failed to load module “canberra-gtk-module“报错则输入命令
sudo apt install libcanberra-gtk-module -y
重新输入命令
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
就没有报错了。