• ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行---Ubuntu20.04


    ORB-SLAM3代码下载地址:ORB-SLAM3源码下载

    所有的操作都是在完成以下网址中的所有操作内容下进行的:Ubuntu系统安装之后首需要做的事情
    本文是总结的比较完善和直接的过程。
    其实在整个运行中也遇到了一些问题,也做了一些总结,记录在了文章
    ORB-SLAM3复现过程中遇到的问题及解决办法
    建议是先以本文为主,有问题之后再去参考问题解决办法。

    1. 安装所需要的依赖和包

    在一键安装ROS后,只需要再安装Pangolin即可,其他所有的需要都已经存在。
    依次执行以下命令即可:

    #依赖项
    sudo apt-get install libglew-dev
    sudo apt-get install cmake
    sudo apt-get install libpython2.7-dev
    sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
    sudo apt-get install libdc1394-22-dev libraw1394-dev
    sudo apt-get install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev
    #下载编译
    git clone https://github.com/stevenlovegrove/Pangolin.git
    cd Pangolin
    mkdir build
    cd build
    cmake ..
    cmake --build .
    sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这样下载下来的是Pangolin0.8。在ORB-SLAM3中是可以正常使用的。

    2. 修改代码及文件内容

    由于许多库的版本不一样,所以有部分代码需要更改
    这里先声明我的环境:

    Ubuntu20.04
    Opencv4.2.0
    C++11
    Eigen3.3.7
    Python3.8.10
    Pangolin0.8

    2.1 CMakeLists.txt文件的修改

    1. /home/xiaoduan/project/source2/orb_slam3/CMakeLists.txt文件的修改
    gedit /home/xiaoduan/project/source2/orb_slam3/CMakeLists.txt
    #第33行Opencv的版本改为4
    #第41行Eigen的版本改为3
    
    • 1
    • 2
    • 3
    1. /home/xiaoduan/project/source2/orb_slam3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt文件的修改
    gedit /home/xiaoduan/project/source2/orb_slam3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt
    
    • 1

    更改内容如下:

    1. 第33行Opencv的版本改为4
    2. 第41行Eigen的版本改为3
    3. 第49行,加入${PROJECT_SOURCE_DIR}/…/…/…/Thirdparty/Sophus

    2.2 单目可视化代码修改

    gedit /Examples/Monocular/mono_euroc.cc
    
    • 1

    更改内容:

    83行中的false改为true
    
    • 1

    2.3 环境配置文件的修改

    gedit ~/.bashrc
    export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples_old/ROS
    source ~/.bashrc
    
    • 1
    • 2
    • 3

    注意: 第二条命令中的${ROS_PACKAGE_PATH}是自己文件的路径。

    2.4 源码的修改

    在ORB_SLAM3中的src下有个AR文件夹,里面的一些内容会导致ros可执行文件的编译,做出以下修改:

    1. 在加入以下两个头文件:
    #include 
    #include 
    
    • 1
    • 2
    1. 删除ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc第151行,由下面内容替换
    cv::Mat Tcw;
    Sophus::SE3f Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
    Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();
    cv::eigen2cv(Tcw_Matrix, Tcw);
    
    • 1
    • 2
    • 3
    • 4
    1. 删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc第409行,由以下内容替换
    cv::Mat WorldPos;
    cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
    vPoints.push_back(WorldPos);
    
    
    • 1
    • 2
    • 3
    • 4
    1. 删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc第409行,由以下内容替换
    cv::Mat Xw;
    cv::eigen2cv(pMP->GetWorldPos(), Xw);
    
    • 1
    • 2

    3.ORB-SLAM3的编译

    3.1 构建 ORB-SLAM3 库

    按顺序执行以下命令即可:

    cd ORB_SLAM3
    chmod +x build.sh
    ./build.sh
    
    • 1
    • 2
    • 3

    3.2 生成ROS节点

    执行以下命令:

    cd Examples_old/ROS/ORB_SLAM3 
    chmod +x build_ros.sh
    ./build_ros.sh
    
    • 1
    • 2
    • 3

    4.ORB-SLAM3的运行

    4.1 非ROS环境下运行

    4.1.1 EuROC数据集

    用微型飞行器采集的视觉惯性数据集,包含双目相机和IMU同步测量数据及位姿的真值。
    数据集需下载MH_01_easy.zip,下载地址:MH_01_easy.zip下载地址
    将数据集解压,命名为MH01。
    运行命令:
    注意: 命令中的${dir}是个人数据的存放路径

    • 纯单目:
    cd Examples
    ./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml ${dir}/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
    
    • 1
    • 2
    • 纯双目:
    ./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml ${dir}/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo
    
    • 1
    • 单目惯导:
    ./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ${dir}/MH01 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_monoi
    
    • 1
    • 双目惯导:
    ./Examples/Stereo-Inertial/stereo_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/EuRoC.yaml ${dir}/MH01 ./Examples/Stereo-Inertial/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereoi
    
    • 1

    4.1.2 TUM VI 数据集

    其采用的相机和IMU传感器,在硬件上进行了时间同步。

    所提供的图像具有高动态范围,事先进行了光度标定,用20Hz的帧率采集,分辨率为1024像素*1024像素;三轴IMU采样频率为200Hz,可测量加速度和角速度。

    需要下载数据集dataset-room1_512_16和rgbd_dataset_freiburg1_desk。下载地址:TUM数据集下载

    • 纯单目:
    cd Examples
    ./Monocular/mono_tum_vi ../Vocabulary/ORBvoc.txt Monocular/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data Monocular/TUM_TimeStamps/dataset-room1_512.txt dataset-room1_512_mono
    
    • 1
    • 2
    • 纯双目:
    ./Stereo/stereo_tum_vi ../Vocabulary/ORBvoc.txt Stereo/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data /home/sangfor/2023/bro_ws/dataset-room1_512_16/mav0/cam1/data Stereo/TUM_TimeStamps/dataset-room1_512.txt dataset-room1_512_stereo
    
    • 1
    • 单目惯导:
    ./Monocular-Inertial/mono_inertial_tum_vi ../Vocabulary/ORBvoc.txt Monocular-Inertial/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data Monocular-Inertial/TUM_TimeStamps/dataset-room1_512.txt Monocular-Inertial/TUM_IMU/dataset-room1_512.txt dataset-room1_512_monoi
    
    • 1
    • 双目惯导:
    ./Monocular-Inertial/mono_inertial_tum_vi ../Vocabulary/ORBvoc.txt Monocular-Inertial/TUM_512.yaml ${dir}/dataset-room1_512_16/mav0/cam0/data Monocular-Inertial/TUM_TimeStamps/dataset-room1_512.txt Monocular-Inertial/TUM_IMU/dataset-room1_512.txt dataset-room1_512_monoi
    
    • 1
    • RGB-D:
    ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml ${dir}/rgbd_dataset_freiburg1_desk /home/sangfor/2023/bro_ws/rgbd_dataset_freiburg1_desk/associations.txt
    
    • 1

    4.2 ROS环境下运行

    首先,打开三个终端
    在第一个终端上面运行roscore
    接着在其余两个终端上,分别运行以下命令:

    • 纯单目:
    rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml
    rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/image_raw
    
    • 1
    • 2
    • 纯双目:
    rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml false
    rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw
    
    • 1
    • 2
    • 单目惯导:
    rosrun ORB_SLAM3 Mono_Inertial Vocabulary/ORBvoc.txt Examples/Monocular-Inertial/EuRoC.yaml
    rosbag play MH_01_easy.bag
    
    • 1
    • 2
    • 双目惯导:
    rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml false
    rosbag play MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw /imu0:=/imu
    
    • 1
    • 2
    • RGB-D:
      首先要下载数据集::rgbd_dataset_freiburg1_xyz.bag,fr1/xyz选择more info找到bag文件后,然后下载。
      下载地址就是稳重已经给出的TUM数据集的下载网址。
    rosrun ORB_SLAM3 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
    rosbag play rgbd_dataset_freiburg1_xyz.bag
    
    • 1
    • 2

    每条命令的运行都会有可视化界面,如下图所示:
    在这里插入图片描述

  • 相关阅读:
    华为OD机考算法题:TLV解码
    Android 基础知识4-1 用户界面简介VIewGroup、Onclick事件处理
    树莓派使用docker搭建owncloud私有云--外挂硬盘
    如何通过Jenkins进行自动化构建项目
    小几届的学弟问我,软件测试岗是选11k的华为还是20k的小公司,我直呼受不了,太凡尔赛了~
    Scrapy使用GitHub上的ProxyPool代理池
    Java EE初阶---多线程(基础)
    JVM之初识垃圾收集器
    前端之一阶段[HTML、CSS]问题记录
    通过融合UGV的地图信息和IMU的惯性测量数据,实现对车辆精确位置和运动状态的估计和跟踪研究(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/qq_44164791/article/details/132608190