使用D435i深度相机运行ORB-SLAM3

news2025/3/1 11:28:20

下载安装链接

下载ORB-SLAM3地址: git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

eigen3多版本安装:https://blog.csdn.net/weixin_41756645/article/details/129570141

ORB-SLAM2中eigen3版本为:3.2.10版本
ORB-SLAM3中eigen3版本为:3.3.9版本
参考文档:https://blog.csdn.net/weixin_41756645/article/details/129570141

安装fmt 8.1.1版本:https://github.com/fmtlib/fmt/tags
安装Sophus 1.22.4版本:参考文档:地址

数据包地址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

下载ORB-SLAM3

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

修改ORB-SLAM3源文件

ORB_SLAM3下CMakeLists.txt

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall   -O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3")
set(CMAKE_CXX_STANDARD 14)
find_package(OpenCV 4.0 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 4.2 not found.")
   endif()
endif()
find_package(Eigen3 REQUIRED)

在这里插入图片描述
在这里插入图片描述

DBoW2下CMakeLists.txt

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3  ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall  -O3 ")

find_package(OpenCV 4.0 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 4.2 not found.")
   endif()
endif()

在这里插入图片描述

g2o下CMakeLists.txt

SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 ")
FIND_PACKAGE(Eigen3  REQUIRED)

在这里插入图片描述

將Examples_old中的ROS移動到Examples中

在这里插入图片描述

修改 Examples下CMakeLists.txt

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3  ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall  -O3 ")
set(CMAKE_CXX_STANDARD 14)
find_package(OpenCV 4.0 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 4.2 not found.")
   endif()
endif()
find_package(Eigen3  REQUIRED)
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
add_definitions(-DBOOST_SYSTEM_NO_DEPRECATED)
set(Boost_NO_BOOST_CMAKE ON)
set(BOOST_ROOT "/usr/include")

在这里插入图片描述
在这里插入图片描述

在编译ros版本时候需要初始化ROS,在**~/.bashrc的最后一行加入以下代码,一定要添加到最後一行,否則報錯

sudo gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/youzhu/ROS/catkin_modi/src/ORB_SLAM3/Examples/ROS
#保存退出
source ~/.bashrc

编译

编译ORB-SLAM3

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

在ORB_SLAM3中创建dataset

在这里插入图片描述

下载数据包放到dataset文件中:

下载数据包地址:http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/

wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.bag

在这里插入图片描述

查看是否编译成功。运行命令

roscore
rosbag play --pause ./dataset/MH_01_easy.bag /cam0/image_raw:=/camera/image_raw /imu0:=/imu
rosrun ORB_SLAM3 Mono_Inertial Vocabulary/ORBvoc.txt Examples/Monocular-Inertial/EuRoC.yaml true

在这里插入图片描述

编译ROS下ORB-SLAM3

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

编辑过程中报错:ros版本编译,提示找不到sophus库,及 Sophus::SE3f, cv::MAT,Eigen::Vector3f类型转换报错 #442

1:首先查看是否安装了Sophus 没有安装的话的现进行安装,安装前查看fmt是否安装,没有的话现安装fmt

安装成功后再进行编译

./build_ros.sh

2:/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc文件中cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()); 报错:

解决:

cv::Mat Tcw;
Sophus::SE3f Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();

在这里插入图片描述

3:文件:/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc文件中:error: ‘eigen2cv’ is not a member of ‘cv’报错:

解决

#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
#include <opencv2/opencv.hpp>

在这里插入图片描述

4:在/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc文件中:vPoints.push_back(pMP->GetWorldPos()); 报错

cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);

在这里插入图片描述

5:在/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc文件cv::Mat Xw = pMP->GetWorldPos();报错

在这里插入图片描述

6:在/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc文件error: ‘eigen2cv’ is not a member of ‘cv’报错:

在这里插入图片描述

参考·链接:https://blog.csdn.net/m0_54539677/article/details/123480828

再进行编译

./build_ros.sh

使用D435i深度相机进行测试

在/home/youzhu/ROS/catkin_modi/src/ORB_SLAM3/Examples/ROS/ORB_SLAM3文件中创建:MyD435i.yaml

%YAML:1.0

#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
Camera.type: "PinHole"

 
# Camera calibration and distortion parameters (OpenCV) 
Camera.fx: 905.8228759765625
Camera.fy: 905.6454467773438
Camera.cx: 640.6072998046875
Camera.cy: 364.5034484863281

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.p3: 0.0

Camera.width: 720
Camera.height: 1280
# Camera frames per second 
Camera.fps: 30.0

# IR projector baseline times fx (aprox.)
# bf = baseline (in meters) * fx, D435i的 baseline = 50 mm 
Camera.bf: 50.0
 
# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1
 
# Close/Far threshold. Baseline times.
ThDepth: 40.0
 
# Deptmap values factor
DepthMapFactor: 1000.0
 
#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------
 
# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000
 
# ORB Extractor: Scale factor between levels in the scale pyramid 	
ORBextractor.scaleFactor: 1.2
 
# ORB Extractor: Number of levels in the scale pyramid	
ORBextractor.nLevels: 8
 
# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast			
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7
 
#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500
 
PointCloudMapping.Resolution: 0.01
meank: 50
thresh: 2.0

修改ros接口

启动RealSense的ROS节点
realsense的ROS接口可以理解为一个读取数据并发布topic的节点,自己写ROS程序的时候订阅这个节点发出的topic即可

roslaunch realsense2_camera rs_camera.launch

查看这些节点

rostopic list

在这里插入图片描述

使用rqt_image_view订阅这些节点

也可以使用rqt_image_view订阅这些节点

在这里插入图片描述

修改rs_camera.launch,我的rs_camera.launch文件在:/home/youzhu/catkin_ws/src/realsense-ros/realsense2_camera/launch目录中有的人是在:/opt/ros/noetic/share/realsense2_camera/launch中

在这里插入图片描述

在这里插入图片描述

再使用rqt_image_view订阅这些节点:

在这里插入图片描述

修改ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_mono.cc文件的订阅消息

    message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/camera/infra1/image_rect_raw", 1);
    message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "/camera/infra2/image_rect_raw", 1);

在这里插入图片描述

再进行编译

./build_ros.sh

使用D435i相机运行ORB-SLAM3

roscore
roslaunch realsense2_camera rs_camera.launch
true:
是正在将关键帧轨迹保存到KeyFrameTrajectory_TUM_Format.txt。。。
正在将相机轨迹保存到FrameTrajectory_TUM_Format.txt。。。
正在将相机轨迹保存到FrameTrajectory_KITTI_Format.txt。。
rosrun ORB_SLAM3 Stereo ../../../Vocabulary/ORBvoc.txt  MyD435i.yaml false  

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

文章目录 一、ViewModel LiveData DataBinding 核心要点1、ViewModel 使用要点2、LiveData 使用要点3、DataBinding 使用要点 二、ViewModel LiveData DataBinding 代码示例1、ViewModel LiveData 代码2、build.gradle 构建脚本 - 启用 DataBinding3、DataBinding 布局文件…

ChatGPT实战100例 - (10) 提前体验ChatGPT的多模态绘图功能

文章目录 ChatGPT实战100例 - (10) 提前体验ChatGPT的多模态绘图功能一、需求与思路二、基本调教三、开始秀四、 总结 ChatGPT实战100例 - (10) 提前体验ChatGPT的多模态绘图功能 这个绘图其实比较基础&#xff0c;只能说是能显示个图吧 真要出图&#xff0c;隔壁 文心一言 秒杀…

如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量

如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量 提高三维模型从OSGB格式转换为3DTILES格式的转换速度和数据质量&#xff0c;可以从以下几个方面进行优化&#xff1a; 1、选用高效的转换工具&#xff1a;选择高效的转换工具是提高转换速度和数据质量的关键。目前市…

.NET中比肩System.Text.Json序列化反序列化组件MessagePack

简介 官方定义&#xff1a;MessagePack是一种高效的二进制序列化格式。它允许您像JSON一样在多个语言之间交换数据。但是它更快并且更小。 MessagePack是一种开源的序列化反序列化组件&#xff0c;可支持JAVA&#xff0c;C#等主流语言。在 C# 中使用 MessagePack&#xff0c…

javaScript:cropperjs是一款非常强大却又简单的图片裁剪工具

cropperjs是一款非常强大却又简单的图片裁剪工具&#xff0c;它可以进行非常灵活的配置&#xff0c;支持手机端使用&#xff0c;支持包括IE9以上的现代浏览器。&#xff08;关键是使用方法简单&#xff0c;几行代码就可以搞定&#xff09; 官方github文档&#xff1a;GitHub -…

深入理解计算机系统--理解编译器编译的过程

前言 大家在学习C语言的时候&#xff0c;相信对编译器这个词并不会感到陌生。我们也会知道编译器编译的过程是&#xff1a;预处理-》编译-》汇编-》链接。这篇文章主要介绍这四个过程中&#xff0c;编译器究竟做了那些工作&#xff0c;它是如何让一份高级程序转换成机器语言的…

USB 转 4 串口芯片 CH9104

CH9104 是一款USB总线的转接芯片&#xff0c;支持最高6M波特率与硬件流控&#xff0c;支持USB配置功能&#xff0c;提供RS485方向控制与GPIO等信号引脚&#xff0c;可实现PC等平台扩展多串口或多个串口设备升级成USB口。CH9104实现 USB 转四个异步串口 UART0/1/2/3 功能&#x…

Docker 在Linux-CentOS上的安装使用

Linux CentOS 虚拟机安装及与windows远程登录_XiaoGuaiSs的博客-CSDN博客 一、如果安装过程有兼容问题&#xff0c;执行更新 yum 包&#xff08;生产环境中此步操作需慎重&#xff09; 注意​ yum -y update&#xff1a;升级所有包同时也升级软件和系统内核&#xff1b;​ …

计讯物联智能虫情测报系统,保障粮食安全的守卫者

计讯物联农业虫情监测系统 夏天是粮食作物生长关键期&#xff0c;也是农作物病虫害高发期。因此&#xff0c;预防农作物病虫害在生产过程中是至关重要的环节。作为智慧农业的先行者&#xff0c;计讯物联以预防为主、综合防治为设计理念&#xff0c;利用先进的现代光、电、数控技…

Android、Android Studio 和 Gradle 是如何使用 Java 的

目录 Java平台JRE虚拟机JDKAndroid Studio 如何使用 JavaGradle 如何使用 JavaAndroid Gradle 插件从命令行执行 Gradle 构建Android 设备上是如何使用 Java 的 可以肯定地说&#xff0c;每个人都知道 Android 使用 Java。然而&#xff0c;“使用 Java ”的含义范围相当大。因此…

ROS学习8:ROS机器人平台设计

【Autolabor初级教程】ROS机器人入门 1. 电机与电机驱动板 1.1 直流减速电机 电机主体通过输入轴与减速箱相连接&#xff0c;通过减速箱的减速效果&#xff0c;最终外端的输出轴会按照比例 (取决于减速箱减速比) 降低电机输入轴的转速&#xff0c;当然速度降低之后&#xff0…

effective c++ item35-39

item35:考虑虚函数的替代方案 NVI----Non-Virtual Interface 不使用虚函数接口&#xff0c;子类也可以实现按需求更改实现&#xff1a; The Strategy Pattern via Function Pointers 也可以使用函数指针 或者使用stl::function The “Classic” Strategy Pattern item…

手术麻醉信息管理系统源码,生成规范麻醉文书,自动信息采集

C#手麻系统源码&#xff0c;C# .net 桌面软件 C/S版手术麻醉信息管理系统源码 手术麻醉信息管理系统源码是专门为麻醉科和手术室开发的围手术期临床信息管理系统&#xff0c;具备以下功能: 1.规范手术流程管理&#xff1a;系统整合了手术室、麻醉科的工作及管理流程&#xff…

一则“孔乙己文学”,刺痛了多少学子的心?

个人主页&#xff1a;【&#x1f60a;个人主页】 孔乙已是鲁迅笔下人物&#xff0c;穷困流倒还穿着象征读书人的长衫&#xff0c;迁腐、麻木。最近&#xff0c;大家自我调佩是“当代孔乙己”&#xff0c;学历成为思想负担&#xff0c;找工作时高不成低不就。 文章目录 前言对待…

【C++技能树】再也不怕没有对象了 --初识类

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 目录 0. 初识类1.类的引入**在一个结构体里可以定义函数了:**定义一个Struct的时候再也不用写Struct了. 2.类的定义类的两种定义方式:成员…

05 【Sass语法介绍-插值】

1.前言 在很多编程器语言中都有插值这个概念&#xff0c;在 Sass 样式表的任何地方几乎都可以使用插值&#xff0c;你可以将这些包裹在 #{} 中来使用&#xff0c;所以记住在 Sass 中使用插值的方式是 #{} &#xff0c;本节我们一起来看一下插值在 Sass 中的使用场景以及它的语…

Authing 入选《2022年度中国高科技高成长企业》榜单

​ 近日&#xff0c;Authing 入选【2022 年度中国高科技高成长企业系列榜单 】- 【云原生高成长企业榜】&#xff0c;该榜单由【第一新声】联合【天眼查】发起的“数字中国”系列之 2022 年度中国高科技高成长企业系列榜单发布&#xff0c;该榜单旨在发现和挖掘被资本市场关注&…

Sentinel介绍及搭建

分布式流量防护 服务雪崩 服务提供者不可用导致服务调用者也跟着不可用&#xff0c;以此类推引起整个链路中的所有微服务都不可用 分布式流量防护 在分布式系统中&#xff0c;服务之间的相互调用会生成分布式流量。如何通过组件进行流量防护&#xff0c;并有效控制流量&…

如何在 Mac 和 Windows 上恢复未保存或删除的 PDF

Adobe Acrobat PDF 是一种常用格式。我们可能会在不同的 PDF 编辑器中编辑和保存 PDF 文件。但是&#xff0c;如果不保存 PDF 文件或不小心将其删除&#xff0c;那将是一种令人不安的体验。 保持冷静&#xff01;首先&#xff0c;尽可能多地停止运行应用程序&#xff0c;这样它…

( 哈希表) 217. 存在重复元素 ——【Leetcode每日一题】

❓217. 存在重复元素 难度&#xff1a;简单 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true&#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true…