下载安装链接

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

pcl找不到报错

查询pcl中的PCLConfig.cmake文件
locate PCLConfig.cmake

知道了pcl安装的地址:/usr/include/pcl-1.10/share/pcl-1.10/
修改CMakeLists.txt文件地址
set(PCL_DIR "/usr/include/pcl-1.10/share/pcl-1.10/")
find_package( PCL  REQUIRED COMPONENTS )

使用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.5034484863281Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.p3: 0.0Camera.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: 500PointCloudMapping.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

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

  1. d435i 深度相机运行踩坑大合集

    1.改运行launch文件 更改对象:rs_camera.launch [入坑ORB-SLAM3系列2]未标定的realsense D435i试运行ORB-SLAM3(手把手教学,含realsense ...

  2. Ubuntu18.04 + kinova joca2机械臂 + RealSense D435i深度相机进行eye to hand手眼标定

    文章目录 前言 一.前期准备 1. RealSense D435i安装 2. Kinova-ROS安装 二.手眼标定环境配置 1. visip 2. aruco_ros 3. easy_handeye ...

  3. BundleFusion使用Intel RealSense D435i深度相机实现

    BundleFusion是目前效果最好的实时稠密三维重建项目,它支持多种类别的深度相机,本次使用英特尔的RealSense D435i深度相机来采集颜色图和深度图,配置的方式如下: 一.环境与资源准备 ...

  4. ROS与深度相机入门教程:(1)Ubuntu16.04 在ROS中驱动Intel D435i深度相机

    Intel在Github上开源了支持所有RealSense系列相机的SDK,包括了D400.SR300系列深度相机和T265双目跟踪相机,支持Linux.Windows.Mac OS以及Android ...

  5. Intel RealSense D435i 深度相机介绍

    参考: https://www.sohu.com/a/340984033_715754 https://www.chiphell.com/thread-1945054-1-1.html https:/ ...

  6. Ubuntu下使用单目相机运行ORB SLAM2

    环境:Ubuntu16.04+ROS Kinetic+USB单目摄像头 虽然ORB SLAM2的官方说明中表示没有ROS也可以编译运行,但要实时的跑ORB SLAM2还是需要ROS平台的,所以之前没有 ...

  7. (已修正精度 1mm左右)Realsense d435i深度相机+Aruco+棋盘格+OpenCV手眼标定全过程记录

    文章目录 2023.5更新 ------------------下面为原文--------------------- 一.前期准备 1.1 手眼标定原理 1.2 Aruco返回位姿的原理 1.3 生成 ...

  8. 「完结撒花」使用intel realsense D435i深度相机获取信息,DOBOT MG400机械手实现动态实时抓取,并做了个GUI界面(python实现)

    GUI界面如下,丑是丑了点,但很好用,嘿嘿. GUI部分 1.GUI界面可以实现的功能 暂停・继续相机画面 显示彩色RGB图像・深度图像・开运算结果图・进行图像处理后的图片(右侧) 调节opencv轮 ...

  9. ROS与深度相机入门教程:(2) 在ROS中驱动Intel D435i深度相机采集数据(遇到的问题)

    在ROS环境下完成数据的安装,需要安装基于ROS使用RealSense的包(包含安装RealSense SDK和ROS Kinetic) 接上篇:https://blog.csdn.net/m0_37 ...

最新文章

  1. 面向对象一类与对象的概念与特性
  2. 【每日一题】6月30日 Growth
  3. 商务搜索引擎_2019年中国网民搜索引擎使用情况研究报告
  4. maven学习(1)
  5. mysql的请求分发,基于 gorilla/mux 实现路由匹配和请求分发:服务单页面应用
  6. 云计算的未来是什么?
  7. 10个提升职场人气de小方法
  8. [导入]基于D3D Effect的引擎模式探讨。
  9. 虚拟应用DemoApp功能演示详解
  10. php对接易宝支付实现真实交易
  11. FPGA测试方法以Mentor工具为例
  12. Mac系统最强虚拟机(支持Big Sur)
  13. Excel VBA 代码加密
  14. 常见的数据库有哪些?
  15. python发微信提醒天气冷了注意保暖_天气变冷了,用Python给父母制作一个天气提醒小助手~...
  16. 深度:戴尔中国十年之变
  17. 软件工程工程伦理案例分析_案例工具及其范围| 软件工程
  18. 字符串的截取爬虫的时候会用到(数组和列表的区别)
  19. 分布式调度框架Elastic-Job
  20. 计算机电路计算公式,计算器电路,computer circuits,音标,读音,翻译,英文例句,英语词典...

热门文章

  1. 【多式联运】基于matlab遗传算法求解多式联运运输问题(考虑碳交易)【含Matlab源码 1997期】
  2. Visual Paradigm使用技巧:Sweeper与Magnet的使用
  3. 影响企业的互联网2007
  4. Unity工程师知识储备
  5. 华为鸿蒙系统深圳,深圳华为鸿蒙系统
  6. 安装qtp10.0,激活后永久有效
  7. war3_WAR文件与带有嵌入式服务器的Java应用程序
  8. 用OpenCV进行视频截取
  9. 从零开始搭建一个GIS开发小框架(七)——GMap.Net组件WPF版本加载POI性能测试
  10. 哈夫曼树制作压缩软件 【此后无良辰】