【ORB-SLAM3】从零开始安装到用安卓手机采集mono+imu数据跑自己的数据

本文大致记录三个部分:

1.配置ORB-SLAM3的运行环境并跑通数据集

2.配置ORB-SLAM3魔改版,标定设备,采集数据,启动ORB-SLAM3

3.安装evo插件,进行评估,后期可能会加入ORB-SLAM3和VINS的精度比较

介绍

我的电脑以及Ubuntu系统情况:

联想台式电脑 win11系统安装Ubuntu18.04,另外也介绍了网卡和显卡的驱动安装问题。

根据ORB-SLAM3的官方介绍,我们整理一下所需要准备的工具和依赖:

  • cmake3.22、git、OpenCV3.2.0、Pangolin0.6、eigen3.3.3

    1.安装ROS(ROS1)以及其他依赖

    在之前的一篇博客中,介绍了ROS的详细安装方法,网上也有很详细的教程,各种坑基本也有人踩过,其中比较烦人的一点就是网络代理问题(应该是吧)。但是现在网上鱼香ROS大佬发明了一种一键安装ROS的方法—一键安装ROS。 可以自动检测Ubuntu版本,找到对应的ROS进行安装,甚至还可以自动切换源…太牛了。虽然但是,如果时间比较充裕,还是建议用虚拟机手动试一下,这样能更好的熟悉Linux。

    安装指令如下:

    wget http://fishros.com/install -O fishros && . fishros
    

    ROS是一个管理机器人的操作平台,里面有很多指令来控制你的设备。这里安装ROS是想着是不是可以用ROS来启动ORB-SLAM3呢,后续也可能加入VINS,甚至是测试一些相机,都需要ROS来发布命令节点。而且ROS是自带一些环境的,比如比较难安装的OpenCV,因为我的是Ubuntu18.04,上述指令会自动安装ROS-melodic。

    pkg-config --modversion opencv
    

    我们并没有安装OpenCV,所以这里的3.2.0版本是ROS-melodic自带的。

    ROS安装完成了,这里有一个小问题,因为我们安装过程中选择了自动换源,大佬写的脚本会将我们的源换成最合适的,但是会造成后续的下载无法进行(我是这样的),建议再去软件和更新中换回来

    一些编译或者下载过程的依赖,git和g++自己安装就好了,一般没有什么问题。

    2.安装Cmake

    我之前装机的时候用到了Cmake,但是是用apt从仓库中下载的,查询了一下版本,显示的是cmake3.10,建议升级,我记得好像后续安装evo有一步要求version大于3.12。

    tips:cmake的升级方式有很多,但是千万别卸载原先的再升级,cmake是支持版本覆盖的,如果卸载掉原来的版本,一些依赖也会挂掉

    # 查看cmake版本
    cmake --version
    

    1)下载源码安装包(也可以官网自己选择合适的版本):

    wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gz
    

    2)解压缩后进入目录:

    # 给予最高的读写和执行权限
    chmod 777 ./configure
    ./configure
    

    tips:ubuntu 下修改文件访问权限chmod 777 -R *血的教训!没事别乱开权限!

    3) 编译&安装:

    make
    sudo make install
    

    4)替换一下原先的版本位置:

    sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
    

    tips:这一步好像是指向问题,我只见过Python有这种情况,但是网上很多教程是有的,应该是不用加也可以,保险起见还是加上

    5)查看版本:

    cmake --version
    

    3.安装Pangolin

    Pangolin是用来可视化的,这一步对版本要求很高,我之前用v0.6版本是通过了的。

    安装Pangolin 0.6(稳定版):官网下载地址

    1)安装依赖项:

    sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
    sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libpng-dev
    

    #2)解压、编译、安装:

    #  在主目录下(把第三方库全部放在这里)
    mkdir 3rdparty
    cd 3rdparty
    unzip Pangolin-0.6.zip
    cd Pangolin-0.6
    mkdir build && cd build
    cmake -DCPP11_NO_BOOST=1 ..
    make
    sudo make install
    

    3)验证:

    在pangolin-0.6下有个examples文件,里面有源码文件HelloPangolin,自己cmake编译一下出现立方体即可。

    4.安装OpenCV

    因为我们之前是安装过ROS的,其自带的OpenCV3.2.0官网上也是符合要求:

    所以节约时间就不在折腾了,如果后续版本出现版本问题,再慢慢排查。

    因为安装OpenCV实在是有点慢…

    这里检查一下版本、库文件、头文件就行:

    pkg-config --modversion opencv
    pkg-config --cflags opencv
    pkg-config --libs   opencv
    

    5.安装eigen3

    eigen3是一个矩阵库,基本上不管是哪个slam都需要这个库的。eigen库有个特点就是该库只有头文件,干净整洁,不需要依赖其他,调用的时候也很方便。

    就不推荐直接安装了(sudo apt-get install libeigen3-dev),因为安装的版本取决于你的仓库,下载的eigen也不一定是我们想要的。

    源码安装:文件

    # 还是放到之前建好的3rdparty下
    cd eigen3.3.3
    mkdir build && cd build
    # 这一步是编译生成执行程序
    cmake .. && make  
    #  这一步是把头文件放到本地的usr/local/include中
    sudo make install
    # 防止后续源代码调用头文件get不到,我们把头文件向上一步包含
    sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
    

    至此,所有的环境准备已完成。

    6.安装ORB-SLAM3

    1)进入文件,打开CMakeLists.txt,修改命令

    git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
    

    将find_package(Eigen3 3.1.0 REQUIRED)修改为

    find_package(Eigen3 REQUIRED)
    

    2)build.bash文件查看

    其中make -j会自动跑满你的cpu线程,性能弱一点的可以自行更改调用参数。

    这个文件也可以看到,ORB-SLAM3用的g2o优化库(非线性优化)和DBow2库(回环检测相关)它本身是包含的,自己调用不需要我们配置了。

    3)给与权限 执行

    chmod +x build.sh
    # 查看颜色发生改变,可以执行
    ls -la 
    ./build.sh
    #  我是直接编译通过了的,有问题可以将问题复制,自行查询,应该都是少了一些依赖,直接apt就好了
    

    7.测试ORB-SLAM3

    1)先去EuRoc数据集官网下个数据

    https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

    tips:因为vins集成ros效果非常好,vins-mono测试的时候我们直接下载.bag文件就好了,但是ORB-SLAM3有源码启动方式和ros启动两种方式,我们感受一下源码启动方式,这样能清楚的看出来orb运行所需要的文件以及格式。

    进入官网后,不要点击bag了,向上去点击link链接,这里我下载的是Machine Hall下面的MH_01_easy,下载一整个压缩文件,解压缩后发现里面有一个mav0文件夹,一整个复制,在我们的ORB-SLAM3文件夹下新建一个名为datasets的文件夹,放入。

    你可以用tree命令来看看mav0里面有啥,包含的关系怎样的。

    2)跑数据集

    先贴一条命令:

    ./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./datasets/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
    

    1.从命令中可以看出,终端的执行位置是在ORB-SLAM3文件夹下,不要执行错位置,包含关系还是挺复杂的。

    2. ./Examples/Monocular/mono_euroc 是一个可执行文件,文件下还有他的源码

    3. ./Vocabulary/ORBvoc.txt 是他的词袋路径,用于回环检测

    4. ./Examples/Monocular/EuRoC.yaml yaml肯定是配置文件了,相机内参和畸变参数之类的

    5. ./datasets/MH01 这个是要跑的文件

    6. ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt 这个是他配置好的时间戳了,不懂为啥要分开…,一帧一帧的图片与之对应

    7. dataset-MH01_mono 这个是要保存的轨迹文件名称,测试不加这一行也可以

    OK!

    –2023-05-11,后续继续更

    更新ros启动

    换了电脑,opencv版本换成了3.2.0,需要在orb-slam3文件夹中的CMakelists.txt中修改find_package寻找opencv的版本,默认是4.,修改成3.2.0

    继续编译,成功。

    进入orb-slam3文件夹中,继续编译ROS节点。

    chmod +x build_ros.sh
    ./build_ros.sh