使用 TX2 和 realsense D435i 相机运行 ORBSLAM3

非 ROS 版本。
之后可能会更新 ROS 版本的 ORBSLAM3 配置指南。TODO

TX2 刷机JetPack-4.6.1

  1. 在另外一台ubuntu系统的电脑或者虚拟机上(笔者的是ubuntu18.04虚拟机),下载并安装 NVIDIA SDK Manager。
    下载地址:https://developer.nvidia.com/nvidia-sdk-manager
    安装:

    sudo apt install ./sdkmanager_[version]-[build#]_amd64.deb 
    

    安装完成后,终端执行 sdkmanager即可启动。

  2. 按照官方教程 Install Jetson Software with SDK Manager: https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html,刷机 JetPack。

    各个版本的Jetpack的信息,包括对应的 ubuntu 版本,可以在这个网站查看:
    JetPack Archive: https://developer.nvidia.com/embedded/jetpack-archive

    刷机时需要将 TX2 和给 TX2 刷机的电脑连接在同一局域网下。

刷机完成后,环境中自带 eigen-3.3.4 以及 opencv-4.1.1,eigen 满足 ORBSLAM3 的版本要求,但是 opencv 不满足版本要求,所以需要额外的 opencv 。

安装 realsense SDK 2.0

TX2 安装教程:https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_jetson.md
通过 DEB 包方式安装:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev

终端执行 realsense-viewer,能够打开一个可视化窗口,说明安装成功。

如果安装成功,在 CMakeLists.txt 中加入类似以下代码,就能使用 realsense 提供的库。

cmake_minimum_required(VERSION 3.1.0)
# Find librealsense2 installed package
find_package(realsense2 REQUIRED)
# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
# Add the application sources to the target
add_executable(${
    
    PROJECT_NAME} hello_librealsense2.cpp)
# Link librealsense2 to the target
target_link_libraries(${
    
    PROJECT_NAME} ${
    
    realsense2_LIBRARY})

编译 opencv-4.5.0

最新的 ORBSLAM3(2022.04.29) CMakeLists.txt 文件里要求 OpenCV > 4.4。
选择合适版本下载:https://opencv.org/releases/

  1. 安装依赖:
    sudo apt install -y g++
    sudo apt install -y cmake
    sudo apt install -y make
    
  2. 编译:
    cd opencv
    mkdir build
    cd build
    cmake ..
    make -j4
    
  3. 安装(可选):
    sudo make install
    
    也可以选择不安装,之后在 CMakeLists.txt 文件里指定 opencv 库的路径即可。

编译 Pangolin-0.5

尝试过安装 Pangolin-0.6,但是有的依赖太新了,没有安装成功。
github 仓库:https://github.com/stevenlovegrove/Pangolin/tree/v0.5

  1. 安装依赖:
    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
    sudo apt-get install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev
    
  2. 下载Pangolin-0.5,编译:
    cd Pangolin
    mkdir build
    cd build
    cmake ..
    make -j4
    
  3. 安装(可选):
    sudo make install
    
    也可以选择不安装,之后在 CMakeLists.txt 文件里指定 Pangolin 库的路径即可。

编译运行 ORBSLAM3

github仓库:https://github.com/UZ-SLAMLab/ORB_SLAM3
ORBSLAM3 提供了 build.sh 脚本文件,该脚本首先编译第三方库 DBoW2, Sophus 和 g2o,然后解压 Vocabulary/ORBvoc.txt.tar.gz 文件,最后编译 ORBSLSM3。

以上编译过程都使用了 make -j加速编译,这容易导致编译过程中系统卡顿,甚至会降低编译速度,所以宜把 build.sh 文件里的 make -j改为 make -j4,使用 4 个线程编译。

编译 ORBSLAM3 的时候,首先会生成一个 ORBSLAM3 库,然后再基于该库编译 Examples 和 Examples_old 文件夹的子文件夹里相应的源文件,生成相应的可执行程序。
如果不需要生成所有的可执行程序,可以在 CMakeLists.txt 里注释掉,缩短编译时间。

  1. 执行脚本 build.sh,开始编译
    如果之前安装了 opencv 和 Pangolin,就不需要修改 CmakeLists.txt 文件;如果只编译没安装,为了让 CMake 能够找到我们编译好的 opencv 和 Pangolin ,需要在在CmakeLists.txt 中指定库的路径:

    ...
    set(OpenCV_DIR opencv路径/opencv/build)
    find_package(OpenCV 4.4)
    ...
    set(Pangolin_DIR Pangolin路径/Pangolin/build)
    find_package(Pangolin REQUIRED)
    ...
    

    即在相应的 find_package(…) 前指定路径到 build 文件夹。

    执行 build.sh 文件:

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

    等待完成编译即可。
    如果 realsense SDK 没有安装成功,是不会生成 realsense 可执行程序的。

  2. 运行
    这里运行 双目-惯性 例子,其它类似:

    ./Examples/Stereo-Inertial/stereo_inertial_realsense_D435i Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/RealSense_D435i.yaml
    

    笔者在运行该程序的时候,程序初始化阶段会出现段错误:Segmentation fault (core dumped),最后发现是 src/Settings.cc 文件中 运算符重载函数 ostream &operator<<(std::ostream& output, const Settings& settings) 中下以下代码导致:

    for(size_t i = 0; i < settings.originalCalib2_->size(); i++){
          
          
    	output << " " << settings.originalCalib2_->getParameter(i);
    }
    

    然而并没有发现代码存在什么问题。TODO
    注释以上代码,重新编译,就能成功运行。

    附上一张运行成功的截图:
    ORBSLAM3这里直接使用了 ORBSLAM3 提供的标定文件,实际应用中需要自行对 相机 和 IMU 进行内外参标定。ORBSLAM3 提供了标定文档 Calibration_Tutorial.pdf ,使用 Kalibr ROS 标定包进行标定。TODO

猜你喜欢

转载自blog.csdn.net/weixin_43196818/article/details/124489721