【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i、EuRoC 和 TUM-VI 运行测试

news/2024/4/27 13:33:27/文章来源:https://blog.csdn.net/G_C_H/article/details/136907206

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i、EuRoC 和 TUM-VI 运行测试

  • 1 Prerequisites
    • 1.1 C++11 or C++0x Compiler
    • 1.2 Pangolin
    • 1.3 OpenCV
    • 1.4 Eigen3
  • 2 安装 Intel® RealSense™ SDK 2.0
    • 2.1 测试设备
    • 2.2 编译源码安装 (Recommend)
    • 2.3 预编译包安装
  • 3 编译 ORB-SLAM3 (非 ROS)
  • 4 使用 D435i 运行 ORB-SLAM3
    • 4.1 运行
    • 4.2 运行时遇到的 Bug
      • 4.2.1 terminate called after throwing an instance of 'rs2::invalid_value_error'
      • 4.2.2 Segmentation fault (core dumped)
  • 5 编译 ORB-SLAM3 (ROS)
    • 5.1 编译
    • 5.2 编译时遇到的问题
      • 5.2.1 OpenCV > 2.4.3 not found
      • 5.2.2 fatal error: sophus/se3.hpp: No such file or directory
      • 5.2.3 About AR
  • 6 使用 EuRoC 和 TUM-VI 运行 ORB-SLAM3
    • 6.1 Notes
    • 6.2 EuRoC
    • 6.3 TUM-VI

ORB-SLAM3 GitHub 链接: Link

1 Prerequisites

如果要重新安装以下第三方库,可以在之前运行 sudo make install 的目录(一般是 build 文件夹)下运行 sudo make uninstall 对其进行卸载。

1.1 C++11 or C++0x Compiler

在 ORB-SLAM3 的 CMakeLists.txt 中会有检查,如果不满足会有报错。

在这里插入图片描述

1.2 Pangolin

参考文档: Link

这里我选择安装的是 Pangolin v0.6,下载链接: Link

  1. 准备工作
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
./scripts/install_prerequisites.sh recommended

如果有报错:E: Unable to locate package catch2,则

  • 从 install_prerequisites.sh 中移除安装 catch2

参考 issue: Link

在这里插入图片描述

  • 自行安装 catch2

参考文档: Link

git clone https://github.com/catchorg/Catch2.git
cd Catch2
cmake -B build -S . -DBUILD_TESTING=OFF
sudo cmake --build build/ --target install
  1. 安装 Pangolin v0.6
unzip Pangolin-0.6.zip -d ~/3rdparty
cd ~/3rdparty/Pangolin-0.6cmake -B build
cmake --build build			# instead of ”make“
sudo cmake --install build 	# instead of ”sudo make install“

1.3 OpenCV

参考文档: Link

这里我选择安装的是 OpenCV 4.4.0 + OpenCV_Contrib 4.4.0

sudo apt update && sudo apt install -y cmake g++ wget unzipwget -O opencv.zip https://github.com/opencv/opencv/archive/4.4.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.4.0.zip
unzip opencv.zip -d ~/3rdparty
unzip opencv_contrib.zip -d ~/3rdpartycd ~/3rdparty/opencv-4.4.0 
mkdir build && cd build
# Configure
cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules ..
# Build
cmake --build .
# Install
sudo make install

1.4 Eigen3

要使用 Eigen,只需下载并提取 Eigen 的源代码,Eigen 子目录中的头文件是使用 Eigen 编译程序所需的唯一文件。

这里我选择安装的是 Eigen 3.3.0,下载链接: Link

unzip eigen-3.3.0.zip -d ~/3rdparty
cd ~/3rdparty/eigen-3.3.0
mkdir build && cd build
cmake --build .
sudo cmake --install .

2 安装 Intel® RealSense™ SDK 2.0

参考文档: Link

如果不安装 librealsense2,运行 ./build.sh 后不会生成 stereo_inertial_realsense_D435i 等与 RealSense 有关的可执行文件。

2.1 测试设备

使用 D435i 相机,设备信息如下:

  • firmware version: 5.15.1
  • librealsense2 version: v2.54.2

下面有两种安装方式: 编译源码进行安装和利用预编译包进行安装,二选一即可,我这里用的是编译源码的方式。

2.2 编译源码安装 (Recommend)

  1. 安装依赖
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
sudo apt-get install libssl-dev libusb-1.0-0-dev libudev-dev pkg-config libgtk-3-dev
sudo apt-get install git wget cmake build-essential
sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev at
  1. 下载源码以及准备工作
  • 下载 librealsense master 分支: Link
unzip librealsense-master.zip -d ~/3rdparty
  • 设置 udev 规则
cd ~/3rdparty/librealsense-master
./scripts/setup_udev_rules.sh
  • 查询系统内核版本
uname -r

在这里插入图片描述

如果是 Ubuntu 20/22 (focal/jammy) with LTS kernel 5.13, 5.15,则

./scripts/patch-realsense-ubuntu-lts-hwe.sh

如果是 Ubuntu 18/20 with LTS kernel (< 5.13),则

./scripts/patch-realsense-ubuntu-lts.sh
  1. 编译安装
cd ~/3rdparty/librealsense-master
mkdir build && cd build
cmake ../ -DBUILD_EXAMPLES=true
sudo make uninstall && make clean && make && sudo make install
  1. 测试
realsense-viewer

在这里插入图片描述

2.3 预编译包安装

参考文档: Link

  1. 安装
# Register the server's public key
sudo mkdir -p /etc/apt/keyrings
curl -sSf https://librealsense.intel.com/Debian/librealsense.pgp | sudo tee /etc/apt/keyrings/librealsense.pgp > /dev/null# Make sure apt HTTPS support is installed
sudo apt-get install apt-transport-https# Add the server to the list of repositories
echo "deb [signed-by=/etc/apt/keyrings/librealsense.pgp] https://librealsense.intel.com/Debian/apt-repo `lsb_release -cs` main" | \
sudo tee /etc/apt/sources.list.d/librealsense.list
sudo apt-get update# Deploy librealsense2 udev rules, build and activate kernel modules, runtime library and executable demos and tools
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils# Install the developer and debug packages
sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg
  1. 测试
realsense-viewer

3 编译 ORB-SLAM3 (非 ROS)

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3
chmod +x build.sh
./build.sh

完成后,将会在 lib 文件夹中创建 libORB_SLAM3.so,并在 Examples 和 Examples_old 文件夹中创建可执行文件。

4 使用 D435i 运行 ORB-SLAM3

4.1 运行

先校准相机,并写入校准文件 your_camera.yaml,但我这里直接用现成的。

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

4.2 运行时遇到的 Bug

4.2.1 terminate called after throwing an instance of ‘rs2::invalid_value_error’

报错如下:

在这里插入图片描述

解决方法:

参考 issue: Link

将 D435i 相关的 .cc 文件中这两行内容注释掉: RS2_OPTION_AUTO_EXPOSURE_LIMITRS2_OPTION_ENABLE_AUTO_EXPOSURE,然后重新编译 ./build.sh

在这里插入图片描述

4.2.2 Segmentation fault (core dumped)

报错如下:

在这里插入图片描述

解决方法:

参考 issue: Link

System.cc 文件中这一行内容注释掉: cout << (*settings_) << endl,然后重新编译 ./build.sh

在这里插入图片描述

5 编译 ORB-SLAM3 (ROS)

5.1 编译

  1. 将 Examples_old/ROS/ORB_SLAM3 添加到 ROS_PACKAGE_PATH 环境变量中。
gedit ~/.bashrc
# Replace PATH by the folder where you cloned ORB_SLAM3
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples_old/ROS
  1. build_ros.sh 文件中的路径存在问题,修改如下:
echo "Building ROS nodes"cd Examples_old/ROS/ORB_SLAM3
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j
  1. 运行脚本
chmod +x build_ros.sh
./build_ros.sh

5.2 编译时遇到的问题

下面提到的 CMakeLists.txt 文件是 ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt

5.2.1 OpenCV > 2.4.3 not found

报错如下:

在这里插入图片描述

解决方法:

删掉 CMakeLists.txt 文件中 find_package(OpenCV 3.0 QUIET) 的指定版本。

在这里插入图片描述

5.2.2 fatal error: sophus/se3.hpp: No such file or directory

报错如下:

在这里插入图片描述

解决方法:

在 CMakeLists.txt 文件中的 include_directories() 加入 ${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus

在这里插入图片描述

5.2.3 About AR

报错如下:

/home/polaris/workspace/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:405:53: error: no matching function for call to ‘std::vector<cv::Mat>::push_back(Eigen::Vector3f)’405 |                 vPoints.push_back(pMP->GetWorldPos());

在这里插入图片描述

/home/polaris/workspace/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:530:42: error: conversion from ‘Eigen::Vector3f’ {aka ‘Eigen::Matrix<float, 3, 1>’} to non-scalar type ‘cv::Mat’ requested530 |             cv::Mat Xw = pMP->GetWorldPos();

在这里插入图片描述

/home/polaris/workspace/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc:151:41: error: conversion from ‘Sophus::SE3f’ {aka ‘Sophus::SE3<float>’} to non-scalar type ‘cv::Mat’ requested151 |     cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());

在这里插入图片描述

解决方法:

参考 issue: Link

我用不到 AR 的相关函数,所以选择将 CMakeLists.txt 文件中 AR 相关的编译部分注释掉。

在这里插入图片描述

6 使用 EuRoC 和 TUM-VI 运行 ORB-SLAM3

6.1 Notes

  • GitHub README 中提到的 euroc_examples.shtum_vi_examples.sh 在历史提交中可以找到: Link
  • 如果运行时,没有可视化 GUI 出现,请检查对应 .cc 文件的这一行,其中最后一个参数如果为 false,改为 true 即可
ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, false);

6.2 EuRoC

  1. 下载数据: Link

在这里插入图片描述

  1. Stereo 为例,运行测试
roscore

每个 .cc 文件都会对其生成的可执行文件的所需命令行参数进行说明,以 ros_stereo.cc 为例:

在这里插入图片描述

rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples_old/Stereo/EuRoC.yaml true

播放 bag 时要对话题名进行映射,所需的话题名在对应的 .cc 文件中可以找到,以 ros_stereo.cc 为例:

在这里插入图片描述

rosbag play --clock V1_03_difficult.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw

6.3 TUM-VI

  1. 下载数据: Link

在这里插入图片描述

  1. stereo_inertial 为例,运行测试

stereo_inertial_tum_vi.cc 文件中可以找到,其生成的可执行文件所需的命令行参数,如下图:

在这里插入图片描述

./Examples/Stereo-Inertial/stereo_inertial_tum_vi Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/TUM-VI.yaml ~/Datasets/TUM-VI/dataset-corridor1_512_16/mav0/cam0/data ~/Datasets/TUM-VI/dataset-corridor1_512_16/mav0/cam1/data Examples/Stereo-Inertial/TUM_TimeStamps/dataset-corridor1_512.txt Examples/Stereo-Inertial/TUM_IMU/dataset-corridor1_512.txt dataset-corridor1_512_stereoi

结束后,如下图:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1026670.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[密码学] 密码学基础

目录 一 为什么要加密? 二 常见的密码算法 三 密钥 四 密码学常识 五 密码信息威胁 六 凯撒密码 一 为什么要加密? 在互联网的通信中&#xff0c;数据是通过很多计算机或者通信设备相互转发&#xff0c;才能够到达目的地,所以在这个转发的过程中&#xff0c;如果通信包…

常见的三种办公室租赁方式各自优缺点

商业办公的租赁市场。找商业办公地点&#xff0c;跟找住宅租房有点像&#xff0c;但目的和要求不同。主要也是三种方式&#xff1a;直接找房东租、接手别人的转租&#xff0c;或者找中介帮忙。每种方式都有它的小窍门和注意事项。 直租 直租商业办公&#xff0c;就是直接和办公…

GPT提示词分享 —— 代码释义者

提示词&#x1f447; 我希望你能充当代码解释者&#xff0c;阐明代码的语法和语义。 3.5版本&#x1f447; free2gpt 4.0版本&#x1f447; gpt4

互联网医院APP开发攻略:搭建智能医疗平台

互联网医院APP为患者提供了便捷的就医途径&#xff0c;还为医生和医院提供了更加高效的服务和管理手段。接下来&#xff0c;小编将我们本文将就互联网医院APP的开发攻略&#xff0c;以及如何搭建智能医疗平台进行探讨。 1.确定需求和目标 这包括确定服务对象&#xff08;患者、…

鸿蒙HarmonyOS应用开发之C/C++标准库机制概述

OpenHarmony NDK提供业界标准库 libc标准库、 C标准库 &#xff0c;本文用于介绍C/C标准库在OpenHarmony中的机制&#xff0c;开发者了解这些机制有助于在NDK开发过程中避免相关问题。 1. C兼容性 在OpenHarmony系统中&#xff0c;系统库与应用Native库都在使用C标准库&#…

基于springboot实现房屋租赁管理系统项目【项目源码+论文说明】

基于springboot实现房屋租赁系统演示 摘要 房屋是人类生活栖息的重要场所&#xff0c;随着城市中的流动人口的增多&#xff0c;人们对房屋租赁需求越来越高&#xff0c;为满足用户查询房屋、预约看房、房屋租赁的需求&#xff0c;特开发了本基于Spring Boot的房屋租赁系统。 …

Sublime for Mac 使用插件Terminus

1. 快捷键打开命令面板 commandshiftp2. 选择 Package Control: Install Package&#xff0c;然后会出现安装包的列表 3. 在安装终端插件前&#xff0c;我们先装个汉化包&#xff0c;ChineseLocallization&#xff0c;安装完重启 4. 输入 terminus&#xff0c;选择第一个&am…

瑞吉外卖实战学习--登录功能的开发

登录功能的开发 前端1、创建实体类Employee和employee表进行映射,可以直接导入资料中提供的实体类1.1、字段名称对应上&#xff0c;有下划线的使用驼峰对应&#xff0c;因为在配置文件中进行了配置1.2、employee 文件 2、创建Controller、Service、Mapper2.1、Mapper文件2.2、定…

利用机器学习打造反电信诈骗系统

利用机器学习打造反电信诈骗系统 技术与功能数据集与模型可视化分析与词云结语 随着互联网的普及&#xff0c;电信诈骗日益猖獗&#xff0c;给人们的生活和财产安全带来了巨大的威胁。为了有效应对这一挑战&#xff0c;我们开发了一款基于机器学习的反电信诈骗系统&#xff0c;…

从后端到前端

原文地址&#xff1a;从后端到前端 - Pleasure的博客 下面是正文内容&#xff1a; 前言 在前面几章中主要介绍了系统开发的后端部分&#xff0c;但是验证接口的适用性只能通过专门的软件&#xff08;Apifox&#xff0c;Postman等&#xff09;来进行测试。那从现在开始&#xf…

mysql公用表表达式CTE

公用表达式是MySQL8.0的新特性&#xff0c;它是一个命名的临时结果集&#xff0c;作用范围是当前语句。 可以理解成为当前sql语句定义了一个视图&#xff0c;sql语句的任何地方都可以使用这个视图&#xff0c;如果被多次使用就体现出了公用表达式的特点公用。 依据语法结构和执…

【Linux】进程>环境变量地址空间进程调度

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.环境变量 1.1 基本概念 1.2 常见环境变量 1.3 查看环境变量方法 1.4 和环境变量相关的命令 1.5 环境变量的组织方式 1.6 通…

Sodinokibi勒索病毒,BTC钱包地址被曝光

Sodinokibi勒索病毒在国内首次被发现于2019年4月份&#xff0c;2019年5月24日首次在意大利被发现&#xff0c;在意大利被发现使用RDP攻击的方式进行传播感染&#xff0c;这款病毒被称为GandCrab勒索病毒的接班人&#xff0c;从样本逆向分析的角度&#xff0c;可以看到Sodinokib…

发展规划--IM系统

1、时代背景 5G应用&#xff0c;多终端应用&#xff0c;物联网应用&#xff0c;小程序&#xff0c;工业互联&#xff0c;大数据应用等等大前端时代的到来&#xff0c;程序员不能只关注crud&#xff0c;因为以后的服务并发量只会越来越多。 高并发架构师、大数据架构师或者说j…

【Git篇】复习git

文章目录 &#x1f354;什么是git⭐git和svn的区别 &#x1f354;搭建本地仓库&#x1f354;克隆远程仓库&#x1f6f8;git常用命令 &#x1f354;什么是git Git是一种分布式版本控制系统&#xff0c;它可以追踪文件的变化、协调多人在同一个项目上的工作、恢复文件的旧版本等…

椋鸟数据结构笔记#2:复杂度

萌新的学习笔记&#xff0c;写错了恳请斧正。 目录 复杂度 时间复杂度 空间复杂度 通过复杂度衡量算法好坏 复杂度 复杂度是衡量算法好坏的一种方式。一般分为时间复杂度和空间复杂度&#xff0c;分别用于衡量一个算法在运行时间长短和占据内存空间多少两方面的优劣。 一…

elasticsearch 6.8.x 索引别名、动态索引扩展、滚动索引

文章目录 引言索引别名&#xff08;alias&#xff09;创建索引别名查询索引别名删除索引别名重命名索引别名 动态索引&#xff08;index template&#xff0c;动态匹配生成索引&#xff09;新建索引模板新建索引并插入数据索引sys-log-202402索引sys-log-202403索引sys-log-202…

C语言例4-3:复合语句,输出a,b的值

代码如下&#xff1a; //复合语句&#xff0c;输出a,b的值 #include<stdio.h> int main(void) {int a 10;printf("a %d\n",a);{int b20; //复合语句printf("b %d\n",b); //复合语句中的数据定义语句放在其他语句的前面}return …

uniapp实现单选组件覆盖选中样式

uniapp实现单选组件覆盖选中样式 完整代码&#xff1a; <!-- 是否选择组件: trueOfFalseChooseBtn --> <template><view class"is-true-body"><view class"btn-con" :class"isTrue ? btn-con-active : " click"clic…

42 ajax 下载文件未配置 responseType blob 导致的文件异常

前言 这是一个最近的关于文件下载碰到的一个问题 主要的情况是, 基于 xhr 发送请求, 获取下载的文件 然后 之后 xhr 这边拿到 字节序列之后, 封装 blob 来进行下载 然后 最开始我们这边没有配置 responseType 为 blob, arraybuffer, 然后 导致下载出来的 文件大小超过了…