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

下载安装链接

下载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  

在这里插入图片描述

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

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

相关文章

【分布式】一致性哈希和哈希槽

当我们拥有了多台存储服务器之后&#xff0c;现在有多个key&#xff0c;希望可以将这些个key均匀的缓存到这些服务器上&#xff0c;可以使用哪些方案呢&#xff1f; 1. 普通哈希取模法 1.1 直接哈希取模 这是一种最容易想到的方法&#xff0c;使用取模算法hash&#xff08;k…

AI绘图实战(七):室内设计线稿渲染、景观设计手绘稿改动、建筑照片转线稿|Stable Diffusion成为设计师生产力工具

S&#xff1a;AI能取代设计师么&#xff1f; I &#xff1a;至少在设计行业&#xff0c;目前AI扮演的主要角色还是超级工具&#xff0c;要顶替&#xff1f;除非甲方对设计效果无所畏惧~~ 预先学习&#xff1a; 安装及其问题解决参考&#xff1a;《Windows安装Stable Diffusion …

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

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

流程图拖拽视觉编程-流程编辑器

目录 一、简介 二、流程编辑器-视图实现 三、参考资料 一、简介 前期文章&#xff1a; 流程图拖拽视觉编程--概述_Jason~shen的博客-CSDN博客 本期内容&#xff1a; 本期将介绍流程编辑器模块的实现方法&#xff0c;效果图如下所示。该模块基于QT Graphics/View实现&…

使用FFMPEG库封装264视频和acc音频数据到MP4文件中

准备 ffmepeg 4.4 一段H264的视频文件 一段acc格式的音频文件 封装流程 1.使用avformat_open_input分别打开视频和音频文件&#xff0c;初始化其AVFormatContext&#xff0c;使用avformat_find_stream_info获取编码器基本信息 2.使用avformat_alloc_output_context2初始化…

solidity 安全 如何阻止重入攻击

什么是可重入攻击&#xff1f; 我们使用合约的过程中&#xff0c;经常会遇到这种情况&#xff0c;智能合约能够调用外部的合约&#xff1b;这些外部合约又可以回调到调用他们的智能合约&#xff1b;在这种情况下&#xff0c;我们说智能合约被重新输入&#xff0c;这种情况被称为…

Hive ---- Hive 安装

Hive ---- Hive 安装 1. Hive安装地址2. Hive安装部署1. 安装Hive2. 启动并使用Hive 3. MySQL安装1. 安装MySQL2. 配置MySQL3. 卸载MySQL说明 4. 配置Hive元数据存储到MySQL1. 配置元数据到MySQL2. 验证元数据是否配置成功3. 查看MySQL中的元数据 5. Hive服务部署1. hiveserver…

图像处理:均值滤波算法

目录 前言 概念介绍 基本原理 Opencv实现中值滤波 Python手写实现均值滤波 参考文章 前言 在此之前&#xff0c;我曾在此篇中推导过图像处理&#xff1a;推导五种滤波算法&#xff08;均值、中值、高斯、双边、引导&#xff09;。这在此基础上&#xff0c;我想更深入地研…

wvp开发环境搭建

代码下载地址 代码下载地址 https://gitee.com/pan648540858/wvp-GB28181-pro.git 开发工具 采用jetbrain idea 利用开发工具下载代码 文件-新建-来自版本控制的项目 url是上面的代码下载链接&#xff0c;点击克隆即可 下图是已经克隆并打开的代码 安装依赖环境 安装redi…

d2l Transformer

终于到变形金刚了&#xff0c;他的主要特征在于多头自注意力的使用&#xff0c;以及摒弃了rnn的操作。 目录 1.原理 2.多头注意力 3.逐位前馈网络FFN 4.层归一化 5.残差连接 6.Encoder 7.Decoder 8.训练 9.预测 1.原理 主要贡献&#xff1a;1.纯使用attention的Enco…

计算机网络学习03(OSI、TCP/IP网络分层模型详解))

1、OSI 七层模型 OSI 七层模型 是国际标准化组织提出一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都需要使用下一层提供的功能比如传输层需要使用网络层提供的路由和寻址功能&#xff0…

创建NAT模式KVM虚拟机

创建NAT模式KVM虚拟机 1 添加脚本执行权限&#xff08;上传脚本文件至root目录&#xff09;。 首先需要给脚本赋予执行权限。 # chmod x qemu-ifup-NAT 2 启动虚拟机。 通过命令启动虚拟机。(记得安装net-tools) # yum install net-tools -y # qemu-kvm -m 1024 -drive fi…

WSL怎么使用本机进行代理联网

文章目录 WSL怎么使用本机代理进行联网问题来源设置v2rayN设置wsl总结参考 WSL怎么使用本机代理进行联网 问题来源 使用WSL克隆github的代码网速很慢&#xff0c;无响应&#xff0c;导致项目无法下载&#xff0c;真的愁人。就想到为WSL设置xx上网&#xff0c;是否就会好很多。…

超级详细的华为OSPF实验及配置

什么是OSPF&#xff1f; 开放式最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09;是IETF组织开发的一个基于链路状态的内部网关协议&#xff08;Interior Gateway Protocol&#xff09;。 目前针对IPv4协议使用的是OSPF Version 2&#xff08;RFC2328&#x…

网络安全:通过445端口暴力破解植入木马。

网络安全&#xff1a;通过445端口暴力破解植入木马。 木马制作工具&#xff0c;如&#xff1a;灰鸽子等等 445端口是文件共享端口。可以进入对方文件硬盘进行植入木马&#xff1a; 使用文件共享进入对方磁盘&#xff1a; 在cmd输入net use \\x.x.x.x\ipc$ 之后会让你输入账号…

“数字中国·福启海丝”多屏互动光影艺术秀27日在福州举办

作为深化“数字海丝”的核心区、海上丝绸之路的枢纽城市&#xff0c;为喜迎第六届数字中国建设峰会盛大召开之际&#xff0c;福州市人民政府特此举办“数字中国福启海丝”多屏互动光影秀活动。本次光影秀活动是由福建省文化和旅游厅指导&#xff0c;福州市人民政府主办&#xf…

AutoGPT、AgentGPT、BabyAGI、HuggingGPT、CAMEL:各种基于GPT-4自治系统总结

ChatGPT和LLM技术的出现使得这些最先进的语言模型席卷了世界&#xff0c;不仅是AI的开发人员&#xff0c;爱好者和一些组织也在研究探索集成和构建这些模型的创新方法。各种平台如雨后春笋般涌现&#xff0c;集成并促进新应用程序的开发。 AutoGPT的火爆让我们看到越来越多的自…

机器学习实战:Python基于SVD奇异值分解进行矩阵分解(八)

文章目录 1 前言1.1 奇异值分解1.2 奇异值分解的应用 2 简单计算SVD2.1 NumPy 计算 SVD2.2 scikit-learn 计算截断 SVD2.3 scikit-learn 计算随机 SVD 3 demo数据演示3.1 导入函数3.2 导入数据3.3 计算SVD 4 讨论 1 前言 1.1 奇异值分解 奇异值分解&#xff08;Singular Valu…

【Python | 基础语法篇】02、标识符、运算符、字符串扩展及数据输入

目录 一、标识符 1.1 什么是标识符 1.2 标识符命名规则 1.2.1 标识符命名规则 - 内容限定 1.2.2 标识符命名规则 - 大小写敏感 1.2.3 标识符命名规则 - 不可使用关键字 1.3 案例演示 1.4 变量命名规范 1.4.1 变量命名规范 - 见名知意 ​1.4.2 变量命名规范 - 下划线…

MySQL——存储过程和函数从零基础到入门必学教程(涵盖基础实战)

文章目录 目录 文章目录 前言 一、创建存储过程 二、在存储过程中使用变量 1.定义变量 2.为变量赋值 三、光标的使用 1.打开光标 2.打开光标 3.使用光标 4.关闭光标 四、流程控制的作用 1.IF语句 2.CASE语句 3.LOOP语句 4.LEAVE语句 5.ITERATE语句 6.REPEAT语…