当前位置: 首页 > 编程日记 > 正文

RealSenseD435与ORB-SLAM2实现稠密建图

一、RealSenseD435介绍

RealSenseD435是一款结构光相机,使用左右目相机和红外光实现测距。有效测距范围为0.2~10m
在这里插入图片描述

二、ORBSLAM2_with_pointcloud_map的安装

git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git

clone代码,无法下载的话,可以直接去https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map下载

  • 解压orbslam2_modified.zip文件,将这个文件夹下的ORB_SLAM2_modified文件夹拖出来覆盖到根目录下的ORB_SLAM2_modified,把这个文件夹下的g2o_with_orbslam2文件夹也拖到根目录,之后这个文件夹内就没东西了,删了吧,如下:

在这里插入图片描述

  • 原包ROS不友好,可以下载另外一个包,替换原包中的ORB_SLAM2_modified文件夹下的所有文件
git clone https://github.com/wylnii/ORBSLAM2_with_pointcloud_map.git
准备所需的库,具体要求可以参考
https://blog.csdn.net/subiluo/article/details/88975979

需要注意的是,Eigen库最好使用3.2.10,OPENCV博主使用的是3.4.5。
电脑中的版本可以使以下命令查看
pkg-config --modversion opencv
如果不想重装Eigen库的话,后面博主会介绍另一种方法

  • 编译g2o_with_orbslam2包
cd g2o_with_orbslam2
mkdir build
cmake ..
make 
sudo make install
  • 准备编译ORB_SLAM2_modified
cd ORB_SLAM2_modified/
rm -rf Thirdparty/DBoW2/build/
rm -rf Thirdparty/g2o/build/
  • 下载ORBvoc.txt.tar.gz,将其放置于Vocabulary文件夹下
https://github.com/raulmur/ORB_SLAM2/tree/master/Vocabulary
  • 保证opencv版本的一致,修改ORB_SLAM2_modified下以及ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2目录下的CMakeLists.txt,这里统一修改为你电脑里的opencv版本

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

  • 进入ORB_SLAM2_modified目录,运行
chmod +x build.sh
./build.sh
  • 修改ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2/文件夹下的cmakelist,注意你电脑里应该安装了pcl库,如果没有请自行安装,-lboost_system一句加上
find_package(Pangolin REQUIRED)
find_package(PCL 1.8 REQUIRED)include_directories(${PROJECT_SOURCE_DIR}${PROJECT_SOURCE_DIR}/../../../${PROJECT_SOURCE_DIR}/../../../include${Pangolin_INCLUDE_DIRS}${PCL_INCLUDE_DIRS}${EIGEN3_INCLUDE_DIR}
)
#message(FATAL_ERROR ${OpenCV_LIBS})add_definitions(${PCL_DEFINITIONS})
link_directories(${PCL_LIBRARY_DIRS})set(LIBS${OpenCV_LIBS}${EIGEN3_LIBS}${Pangolin_LIBRARIES}${PCL_LIBRARIES}${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so-lboost_system       # opencv_core3 #手动添加# opencv_imgproc3# opencv_highgui3)
  • 修改ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc文件,把rgb_topic和depth_topic订阅话题修改为
 "/camera/color/image_raw";"/camera/aligned_depth_to_color/image_raw";
  • 回到ORB_SLAM2_modified,修改ROS_PACKAGE_PATH
gedit ~/.bashrc
# 添加一下命令,如果以前配置过ORB_SLAM2的ROS的话,需要将以前的配置注释掉
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/你的目录/ORB_SLAM2_modified/Examples/ROS

在这里插入图片描述

  • 开始编译ros节点
chmod +x build_ros.sh
./build_ros.sh
  • 安装RealSense的SDK,参考以下网站的3\4部分
https://blog.csdn.net/weixin_43828675/article/details/115312472?spm=1001.2014.3001.5501
  • 安装RealSense的ROS功能包。
mkdir realsense
cd realsense
mkdir src
cd src
git clone https://github.com/intel-ros/realsense.git
cd ..
catkin_make
source devel/setup.bash

需要注意的是,SDK和ROS功能包的版本要对应,否则会报错
在这里插入图片描述
此时可以使用删除命令后,重新进行安装

dpkg -l | grep "realsense" | cut -d " " -f 3 | xargs sudo dpkg --purge
  • 回到ORB_SLAM2_modified文件夹下,运行ORB_SLAM2,实现稠密建图
roslaunch realsense2_camera rs_rgbd.launch
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.bin Examples/RGB-D/TUM1.yaml

在这里插入图片描述

三、最后一步运行时的错误

3.1 段错误(核心已转储)

原因是Eigen库的问题,建议使用Eigen3.2.10
首先去Eigen官网上下载Eigen3.2.10,随后按照以下网站的教程进行修改。我建议将所有的CMakeLisr.txt都进行修改。指明使用的Eigen库的路径。

https://blog.csdn.net/weixin_44457020/article/details/114778641

3.2 realsense相机的自校准

realsense提供的realsense_viewer可以对实现深度测量的左右目相近进行自校准,校准流程参考

https://www.bilibili.com/video/av757604103

3.3建图效果很差

修改相机参数的yaml文件中的DepthMapFactor参数,博主使用的1000

3.4获得rgb相机的内参

在这里插入图片描述
rostopic输出的好像是相机出厂时,给定的相机参数。如果想获得更加准确的话,需要进行标定。

相关文章:

使用appium做自动化测试时,send_keyss只能输入字母数字,无法输入中文

解决方案: driver中增加以下2行配置: "unicodeKeyboard":True, #unicode编码输入 "resetKeyboard":True #隐藏软键盘 转载于:https://www.cnblogs.com/Inbreeze/p/9828568.html

centos8安装KVM/QEUM虚拟化

centos8安装KVM/QEUM。安装虚拟化主机组。启动libvirtd服务。 yum groupinstall "Virtualization Host" systemctl enable libvirtd systemctl start libvirtd 谁可以使用虚拟化呢&#xff1f;加入libvirt组即可。 usermod -aG libvirt <username> 安装Vir…

病毒的灵魂拷问(绝对原创)

哈哈哈&#xff0c;我敢说&#xff0c;这篇博客绝不会有重复的&#xff0c;因为它是我上课的走神之作&#xff0c;哈哈哈&#xff01; 不废话&#xff0c;上代码&#xff1a; import java.util.Scanner; import java.util.*; public class Test {public static void main(Str…

js:深入prototype(下:原型重写)

//当属性和方法特别多时&#xff0c;编写起来不是非常方便&#xff0c;能够通过json的格式来编写 //因为原型重写。并且没有通过Person.prototype来指定&#xff0c;此时的constructor不会再指向Person而是指向Object //假设constructor真的比較重要&#xff0c;能够在json中说…

全国所有省市县地理坐标Json格式

https://www.cnblogs.com/yzbubble/p/7707129.html转载于:https://www.cnblogs.com/loveMis/p/9829217.html

ubuntu设置不同的eigen版本

下载Eigen并进行编译 下载eigen库&#xff0c;创建build文件夹进行编译 设置安装路径 这里会设置make install的路径 随后进行make install 移动到usr/include路径下 找到第二步中安装的位置&#xff0c;移动到usr/include路径下 这样&#xff0c;需要用那个版本的eige…

MySQL01-安装mysql数据库

MySQL 可以从 YUM 源直接安装 rpm 包&#xff0c;但是这样的定制化程度低&#xff0c;不利于后期维护升级。因此&#xff0c;今天记录一种更灵活的二进制安装方式。参考 MySQL 5.7 官方文档 2.2 章节&#xff0c;具体做法和官方文档略有出入。 1、配置防火墙规则 firewall-cm…

SVO学习笔记(一)

SVO学习笔记&#xff08;一&#xff09;这篇文章FrameFeaturedetectionFeatrue_matcher三角测量求深度特征匹配非线性优化寻找匹配特征极线搜索匹配特征总结这篇文章 一个很年轻的叔叔踩进了SLAM的坑&#xff0c;现在正在学习视觉SLAM中的SVO系统。本着好记性不如烂笔头的思想&…

如何用eclipse操作MySQL数据库进行增删改查?

我们首先需要在Navicat Premium上创建一个数据库实例&#xff08;test&#xff09;&#xff0c;然后创建一个stu_info表&#xff08;id&#xff0c;name&#xff0c;mobile&#xff0c;address&#xff09; 接着创建一个Test类进行操作&#xff1a; 在这之前需要导一个包&#…

机房测试10.22

wzz的观察 简单的递推。 \(f[i][j]\)表示以\((i,j)\)这个点为右下角时最大的正方形大小。 如果这个格子为0&#xff0c;\(f[i][j]0\) 否则\(f[i][j]min(f[i-1][j],f[i][j-1],f[i-1][j-1])1\) 或者可以二分答案&#xff0c;每一次\(O(n*m)\)进行check。 递推代码&#xff1a; #i…

$.when()方法翻译

地址&#xff1a;http://api.jquery.com/jQuery.when/ jQuery.when( deferreds )&#xff0c;returns Promise 正文 Description: Provides a way to execute callback functions based on zero or more Thenable objects, usually Deferred objects that represent asynchrono…

Anaconda3 离线安装 Django-3.2.7 及依赖项setuptools、sqlparse 、asgiref、typing_extensions等模块

目录 一、背景 二、离线安装 setuptools、sqlparse 、asgiref、typing_extensions等依赖模块 三、离线安装django 一、背景 因为信息安全管理的规定&#xff0c;这台服务器不能连接互联网&#xff0c;只能离线安装 django。anaconda3 安装完成以后&#xff0c;从默认虚拟环…

倍增LCA NOIP2013 货车运输

货车运输 题目描述 A 国有 n 座城市&#xff0c;编号从 1 到 n&#xff0c;城市之间有 m 条双向道路。每一条道路对车辆都有重量限制&#xff0c;简称限重。现在有 q 辆货车在运输货物&#xff0c; 司机们想知道每辆车在不超过车辆限重的情况下&#xff0c;最多能运多重的货物。…

SVO学习笔记(二)

SVO学习笔记&#xff08;二&#xff09;这篇文章稀疏图像对齐地图点投影(地图与当前帧间的关系)reprojectMapreprojectPointreprojectCell特征点对齐中的非线性优化结尾这篇文章 这次仍是关于SVO系统的学习记录&#xff08;冲冲冲&#xff01;&#xff09;。这次的主要内容是sp…

用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)

首先需要用Navicat Premium创建一个student表 用Java连接好MySQL数据库&#xff08;需要copy一个mysql-connector-java-5.1.44-bin.jar包&#xff0c;该包可在网上找到&#xff09;后&#xff0c;我们开始用Java写一个学生管理系统&#xff1a; 我们首选需要定义好添加、删除、…

tensorflow在训练和验证时监视不同的summary的操作

如果想在训练和验证时监视不同的summary&#xff0c;将train summary ops和val summary ops放进不同的集合中即可。 train_writer tf.summary.FileWriter(log_dir /train, sess.graph) val_writer tf.summary.FileWriter(log_dir /val, sess.graph)# 假设train_loss和val_l…

Anaconda3 离线安装和配置 Django-3.2.7 使用 MySQL-5.7 数据库

Django文档 Settings / Core Settings / DATABASES 一节阐述了django与数据库交互配置的内容。 先在 MySQL 5.7 版本数据库中创建一个名为 learning_log_db 的数据库&#xff0c;和名为 myuser 的用户&#xff0c;并分配权限。 create databases learning_log_db; create use…

用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)

本文上接用JDBC写一个学生管理系统&#xff08;添加、删除、修改、查询学生信息&#xff09; 这次主要是对上一文中的查询方法做一下调整&#xff0c;用创建内部类的方法来实现学生信息的查询。 我们先要定义一个接口IRowMapper&#xff1a; import java.sql.ResultSet;public…

(原)ubuntu中使用conda安装tensorflow-gpu

转载请注明出处&#xff1a; https://www.cnblogs.com/darkknightzh/p/9834567.html 参考网址&#xff1a; https://www.anaconda.com/blog/developer-blog/tensorflow-in-anaconda/ 之前的一篇&#xff0c;直接安装tensorflow的&#xff1a; https://www.cnblogs.com/darkknig…

SVO中 Inverse Compositional Image Alignment方法的学习笔记

SVO中 Inverse Compositional Image Alignment方法的学习笔记这篇文章光流法简介逆向光流法结尾这篇文章 在SVO系统中的"Relaxation Through Feature Alignment"部分使用的是一种特别的LK光流法&#xff1a;the inverse compositional Lucas-Kanade algorithm&#x…

Head First设计模式之目录

只有沉淀、积累&#xff0c;才能远航&#xff1b;沉沉浮浮&#xff0c;脚踏实地。 这本书已经闲置了好久&#xff0c;心血来潮&#xff0c;决定写个目录&#xff0c;让自己坚持看完这本书 创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖…

HANA 数据库备份hang住的解决办法

今天遇到 HANA 数据库备份hang住的情况。经过查 SAP NOTE 解决&#xff0c;记录一下过程。两个NOTE如下&#xff1a; 2452735 - HANA Backup failing with "[447]: backup could not be completed: [110122] A data backup cannot be created because another data backu…

简单DP【p2642】双子序列最大和

Description 给定一个长度为n的整数序列&#xff0c;要求从中选出两个连续子序列&#xff0c;使得这两个连续子序列的序列和之和最大&#xff0c;最终只需输出最大和。一个连续子序列的和为该子序列中所有数之和。每个连续子序列的最小长度为1&#xff0c;并且两个连续子序列之…

JDBC工具类

本文主要是将JDBC最基础的增删改查的工具类的代码详细的罗列出来&#xff1a; 一、我们先来看一看项目结构: 二、配置JDBC工具类 1.我们先处理异常 我们知道几乎不可能一次性就写出完美的代码&#xff0c;都是要经过很多次的调试才行&#xff0c;那在调试过程中就难免会出现…

SVO 学习笔记(三)

SVO 学习笔记&#xff08;三&#xff09;这篇博客InitializationFrame_Handler_MonoprocessFirstFrameprocessSecondFrameprocessFramerelocalizeFrame结尾这篇博客 这篇博客将介绍SVO源代码中的frame_handler_mono、initialization两个文件的代码流程。前者是SVO系统类&#x…

CMAKE设置INSTALL工程,分别设置头文件、Lib和DLL的输出路径

使用CMAKE管理工程&#xff0c;可以设置工程中的INSTALL项目运行时安装的路径&#xff0c;使用命令&#xff1a;install。 可以简单的设置安装文件的路径和文件夹&#xff1a; set(head_files//要安装的头文件 ) install(TARGETS ${head_files} DESTINATION ${CMAKE_BINARY_DI…

2021年中国工业互联网安全大赛核能行业赛道writeup之hacker

附加题 hacker&#xff0c;题目描述&#xff1a;hacker&#xff0c;附件下载 hackerhttps://download.csdn.net/download/qpeity/33230528解压缩得到一个EXE文件 ARE_YOU_SDPD.exe&#xff0c;在一个文件夹下运行看一下。 用 IDA 反汇编一下&#xff0c;发现找不到程序入口&am…

利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签

当下人工智能是真心的火热呀&#xff0c;各种原来传统的业务也都在尝试用人工智能技术来处理&#xff0c;以此来节省人工成本&#xff0c;提高生产效率。既然有这么火的利器&#xff0c;那么我们就先来简单认识下什么是人工智能吧&#xff0c;人工智能是指利用语音识别、语义理…

动态环境下的SLAM:DynaSLAM 论文学习笔记

动态环境下的SLAM&#xff1a;DynaSLAM 论文学习笔记这篇文章论文摘要系统流程相关环节的实现方法神经网络检测图中动态物体&#xff08;Mask R-CNN&#xff09;Low-Cost Tracking使用多视图几何的方法检测图中动态物体&#xff08;Multi-view Geometry&#xff09;跟踪与建图&…

用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?

自己写的&#xff0c;感觉挺有成就感的&#xff0c;就展示出来吧&#xff01; 判断一个≥2的整型数是否存在于斐波那契数列中&#xff1f; 若存在&#xff0c;则返回第几项&#xff1b;若不在&#xff0c;则返回-1 #include <stdio.h> long generate(long n);//函数声…