当前位置:   article > 正文

MAC Ubuntu20.04.2安装运行ORB-SLAM3(非 ROS)无坑版!_mac orbslam3

mac orbslam3

0 环境

mac M1 pro
parallels
Ubuntu 20.04.2(x86 emulation))
cmake 3.23.2
opencv 4.5.5
pangolin 0.6
boost 1.79
ORBslam 1.0 -2021
realsense 2

1 准备工作

1.1 安装 git ,g++,python

sudo apt-get install git
sudo apt install g++
sudo apt install libpython2.7-dev
  • 1
  • 2
  • 3

1.2 安装cmake

  1. 下载最新版本的cmake

下载地址
安装对应版本
一般放在住文件夹下面的opt文件夹

  1. 移动到期望目录位置,并解压软件包

解压下载好的cmake 并进入其文件夹中

  1. 建立软连接
    需要用到权限sudo;参数-s表示软连接:即会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间
    sudo ln -sf /opt/cmake3.23.2/bin/* /usr/bin/

  2. 配置环境变量

打开并编辑文件

gedit ~/.bashrc
行末加上完整的路径
export PATH=/home/zgj/opt/cmake-3.23.2/bin:$PATH

更新 bashrc
source ~/.bashrc

  1. 查看是否安装成功

source --version

2. 安装库

2.1 安装 eigen 库

2.1.1 安装

方法一:使用命令安装

此方法可能会报错(有坑)

sudo apt-get install libeigen3-dev

如果需要卸载: sudo apt --purge remove libeigen3-dev

方法二:使用源码编译安装:
下载链接: https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz

cd eigen-3.3.7

mkdir build && cd build

sudo cmake ..

sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意: 安装后需要移动头文件
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include

2.1.2 卸载

  1. 查看当前版本
    pkg-config --modversion eigen3

  2. 删除 eigen3 相关文件

查看eigen3位置

sudo updatedb
locate eigen3
  • 1
  • 2

删除eigen3相关文件

sudo rm -rf /usr/include/eigen3
sudo rm -rf /usr/lib/cmake/eigen3
sudo rm -rf /usr/local/include/eigen3
sudo rm -rf /usr/local/lib/cmake/eigen3
sudo rm -rf /usr/share/doc/libeigen3-dev 
sudo rm -rf /usr/local/share/pkgconfig/eigen3.pc /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums
sudo rm -rf /usr/local/lib/pkgconfig/eigen3.pc
sudo rm -rf /usr/local/share/eigen3

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

刷新查看是否删除彻底

sudo updatedb
locate eigen3
pkg-config --modversion eigen3

  • 1
  • 2
  • 3
  • 4

2.1.3 查看是否安装成功

查看 eigen3 是否成功安装以及版本
应该有文件夹 /usr/include/eigen3,否则没有成功安装;编译orb_slam3时会出现很多错误

cat /usr/include/eigen3/Eigen/src/Core/util/Macros.h
或者
cat /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h

2.2 安装 opencv

2.2.1 安装

我选择是opencv4.5.5

  1. step1 安装依赖项
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

sudo apt install python3-dev python3-numpy
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. step2 下载源文件

从官网下载源码:链接。注意下载source源码

下载完成后解压到主目录中,重新命名 opencv

  1. step3 安装 opencv
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
make -j16 
sudo make install

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.2.2 配置环境

  1. 查看pc 文件

opencv 安装成功后需要查看目录下 /usr/local/lib/pkgconfig/opencv4.pc 此文件

推荐: 复制此文件并重命名为 opencv.pc

不更改会查询失败,但是改后后边编译还是有问题,所以直接复制

  1. 配置 /etc/profile.d/pkgconfig.sh

sudo gedit /etc/profile.d/pkgconfig.sh

在最后一行输入,并保存
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

  1. 执行命令配置生效
    source /etc/profile

查看依赖
pkg-config --libs opencv4
pkg-config --libs opencv

  1. 配置 /etc/ld.so.conf/opencv4.conf

sudo gedit /etc/ld.so.conf.d/opencv4.conf
在文件末尾加上:/usr/local/lib

  1. 更新系统库

sudo ldconfig

  1. 添加环境路径

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
echo $PKG_CONFIG_PATH

  1. 配置 bash
    sudo gedit /etc/bash.bashrc
    添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH 

  • 1
  • 2
  • 3

保存后,更新配置
source /etc/bash.bashrc
sudo updatedb

2.2.3 测试

查看版本号:
pkg-config --modversion opencv

cd到 opencv 主文件/samples/cpp/example_make 目录下

以此执行:

cmake .
make
./opencv_example
  • 1
  • 2
  • 3

2.3 安装 pangolin

2.3.1 安装

  1. 安装依赖
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
sudo apt-get install libpng-dev

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  1. 安装 Pangolin

安装 V0.6 版本
https://github.com/stevenlovegrove/Pangolin/tree/v0.6

cd Pangolin
mkdir build && cd build
cmake ..
make -j4
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5

2.3.2 测试安装效果

cd examples/HelloPangolin
cmake .
make 
./HelloPangolin

  • 1
  • 2
  • 3
  • 4
  • 5

2.3.3 补坑

  1. 如果出现 error 大概率版本高,请安装 06 版本

  2. Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
    sudo apt install doxygen

2.4 安装boost

sudo apt install libboost-dev libboost-serialization-dev

官网下载boost: 链接
下载版本为:boost_1_79_0.tar.gz

下载解压提取到主目录; 在解压后的文件夹下打开终端,执行以下指令:

sudo ./bootstrap.sh
sudo ./b2 install
  • 1
  • 2

2.5 DBow2

1. 安装 DBow 依赖

sudo apt-get install libcanberra-gtk-module
sudo apt-get install libssl-dev

  • 1
  • 2
  • 3

在对应的文件夹(home/ORBSLAM3/ThirdPart/DBow2)执行

mkdir build
cd build
cmake ..
make -j4

  • 1
  • 2
  • 3
  • 4
  • 5

2.6 g2o

  1. 安装依赖
    sudo apt-get install qt5-qmake qt5-default libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3 libcholmod3

  2. 下载安装
    下载
    https://github.com/RainerKuemmerle/g2o

安装
进入目录

mkdir build 
cd build
cmake ..
make -j4
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5

2.7 安装ceres

2.7.1 安装依赖

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev

2.7.2 下载安装

下载

进入ceres目录

mkdir build 
cd build 
cmake ..
make -j4
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5

2.8 安装realsense2

2.8.1 下载

注册public key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE

2.8.2 添加 apt 源

sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u

2.8.3 安装

sudo apt install librealsense2-dkms librealsense2-utils librealsense2-dev

2.9 安装Sophus库(非必需)

2.9.1 fmt 安装

  1. 下载文件
    下载文件
  2. 安装
mkdir build
cd build
cmake ..
make
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
git clone https://github.com/strasdat/Sophus.git
cd Sophus/
mkdir build
cd build
cmake ..
make
sudo make install

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.10 安装libssl-dev

sudo apt-get install libssl-dev

3 安装 ORB_SLAM3

3.1 下载

从 GitHub 下载源码
下载
解压到主目录,重命名

3.2 更改文件

  1. 打开 CMakeLists.txt
    更改 34 行,opencv 改为自己的版本,本篇为 4.4.5
    更改 42 行,Eigen 改为自己版本,本篇为 3.3.7

3.3 编译

3.3.1 默认编译

cd ORB_SLAM3
sudo chmod +x build.sh
sudo ./build.sh

  • 1
  • 2
  • 3
  • 4

3.3.2 排坑编译法

进入 ORBLSAM 主文件中
找到 build.sh

主文件推荐更改为:

如果核心多可以更改 make -j[?] ?为并发编译,推荐为 4
下面文件一步一步执行,看出错在哪

echo "Configuring and building Thirdparty/DBoW2 ..."

cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j2

cd ../../g2o

echo "Configuring and building Thirdparty/g2o ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j2

cd ../../Sophus

echo "Configuring and building Thirdparty/Sophus ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j2

cd ../../../

echo "Uncompress vocabulary ..."

cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..

echo "Configuring and building ORB_SLAM3 ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

4 运行 ORB-SLAM3

4.1 下载数据集

下载

  1. step1 在 ORB-SLAM3 文件夹中新建 dataset
  2. step2 将数据集复制到dataset下 ,本篇测试的是MH_01_easy
  3. step3 运行 ORB-SLAM3

./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH_01_easy ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt

4.2 打开可视化界面

打开 mono_euroc.cc第 83 行,将"false"改为"true"

改完重新编译 ORB_SLAM3

cd ORB_SLAM3
sudo chmod +x build.sh
sudo ./build.sh

  • 1
  • 2
  • 3
  • 4

运行 ./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH_01_easy ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt

1

BUG

1. 线程问题

更改 make -j[?] , ?改想并发的线路,推荐 4 、 8

2. usleep 报错

System.ccViewer.cc中添加 #include<unisted.h>

3. value 报错

解决方法:

把incloud中LoopClosing.h中的
     typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
改成下面
    typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<KeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.monotonic_clock报错

出现这个问题的原因是C++版本之间存在区别。在C++11版里已经没有momotonic_clock了,有steady_clock作为替代。所以orb-slam2的作者在代码中使用了ifdef来判断用户的C++版本。对应路径下的文件需处理的代码段如下

#ifdef COMPILEDWITHC11
        std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
#else
        std::chrono::monotonic_clock::time_point t1 = std::chrono::monotonic_clock::now();
#endif
 
        //Pass the image to the SLAM system
        SLAM.TrackMonocular(im,tframe);
 
#ifdef COMPILEDWITHC11
        std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();
#else
        std::chrono::monotonic_clock::time_point t2 = std::chrono::monotonic_clock::now();
#endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

如果你这部分报错了,大概率你的C++是11版本,那么我们其实可以删掉这部分判断语句,只保留如下部分。

std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
 
 //Pass the image to the SLAM system
 SLAM.TrackMonocular(im,tframe);
 
std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();
 
//......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这部分就行,把monotonic_clock的代码删掉之后就能正常编译了!

5. Makefile:84 报错

问题为:

/usr/bin/ld: cannot find -lEigen3::Eigen
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/joinMap.dir/build.make:102: joinMap] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/joinMap.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
  • 1
  • 2
  • 3
  • 4
  • 5

解决方法:

CMakeLists.txt中添加

#添加红色语句
find_package(Eigen3 3.3 REQUIRED NO_MODULE)   

#编译报错再添加如下语句
include(FindEigen3.cmake)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/646948
推荐阅读
相关标签
  

闽ICP备14008679号