ORB-SLAM2的布置(五)使用 intel D435i 构建SLAM点云地图

2023-05-16

Intel RealSense SDK 2.0 是跨平台的开发套装,包含了基本的相机使用工具如 realsense-viewer,也为二次开发提供了丰富的接口,包括 ROS,python , Matlab, node.js, LabVIEW, OpenCV, PCL, .NET 等。

这次使用的摄像头是D435i
它可以提供深度和 RGB 图像,而且带有 IMU
本次流程就是想使用D435i摄像头进行SLAM的点云建图

进行安装Intel RealSense SDK,查看摄像头的数据
Linux/Ubuntu - 实感 SDK 2.0 构建指南

安装完成后,查看相机的深度和 RGB 图像

realsense-viewer

在这里插入图片描述

然后这里下载驱动 intel 的各个摄像头的 ROS 框架的驱动功能包
适用于英特尔®实感™设备的 ROS 封装器


当安装完成后便可以启动看看摄像头的数据

我们这里继续配置SMAL
在启动相机之前,我们需要设置一下 realsense2_camera rospack 中的 rs_camera.launch 的文件
在这里插入图片描述


前者是让不同传感器数据(depth, RGB, IMU)实现时间同步,即具有相同的 timestamp;
后者会增加若干 rostopic,其中我们比较关心的是/camera/aligned_depth_to_color/image_raw,这里的 depth 图像与 RGB 图像是对齐的

  <arg name="enable_sync"               default="true"/>
  <arg name="align_depth"               default="true"/>

在这里插入图片描述


完成后,就可以用如下命令启动相机

roslaunch realsense2_camera rs_camera.launch

其中关键的是 /camera/color/image_raw /camera/aligned_depth_to_color/image_raw
分别对应 RGB 图像和深度图像


然后在Examples/RGB-D中,新建一个名为RealSense.yaml的参数文件,
在这里插入图片描述


然后进行编辑

#--------------------------------------------------------------------------------------------
# Camera calibration and distortion parameters (OpenCV)
Camera.fx: 909.3504638671875
Camera.fy: 908.5739135742188
Camera.cx: 645.5443725585938
Camera.cy: 369.3554992675781

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

Camera.width: 1280
Camera.height: 720

#Camera frames per second
Camera.fps: 30.0

#IR projector baseline times fx (aprox.)
Camera.bf: 46.01

#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,将深度像素值转化为实际距离,原来单位是 mm,转化成 m
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


其中,里面包含了相机内参,可以通过以下获取,每个相机的参数可能会有差别

rostopic echo /camera/color/camera_info

在这里插入图片描述

这里主要在yaml中注意的是

# 相机标定和畸变参数(OpenCV)

要根据话题【/camera/color/camera_info】的数据进行修改
参数可以对照网址查看具体的各参数信息
http://docs.ros.org/en/melodic/api/sensor_msgs/html/msg/CameraInfo.html

也就是以下的参数

Camera.fx: 909.3504638671875
Camera.fy: 908.5739135742188
Camera.cx: 645.5443725585938
Camera.cy: 369.3554992675781

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

Camera.width: 1280
Camera.height: 720

在这里插入图片描述


完成后保存并退出

然后修改src/pointcloudmapping.cc文件

1.第128行附近

	voxel.setLeafSize (0.02f, 0.02f, 0.02f); 		//Modified place 1 调节点云密度

在这里插入图片描述

2,第75行左右

            p.y = ( m - kf->cy) * p.z / kf->fy;
           // p.y = - ( m - kf->cy) * p.z / kf->fy;   //Modified place2 与原先添加了负号,将原本颠倒的点云地图上下翻转,方便观察 
           //【后续测试显示的pcd完全无法使用。不进行上下翻转】
            
	    	p.r = color.ptr<uchar>(m)[n*3];         //Modified place3 修改颜色显示
            p.g = color.ptr<uchar>(m)[n*3+1];
            p.b = color.ptr<uchar>(m)[n*3+2];

#########2023年04月17日 08:54:17 UTC+8:00#########
#########由于原先的截图有歧义,更换新的图片#########
在这里插入图片描述


然后编译ORB_SLAM2_modified

./build.sh
./build_ros.sh

在这里插入图片描述

完成编译后进行测试

启动主节点

roscore

启动摄像头

roslaunch realsense2_camera rs_camera.launch

在这里插入图片描述


进行建图,发现报错

rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.bin Examples/RGB-D/RealSense.yaml /camera/rgb/image_raw:=/camera/color/image_raw /camera/depth_registered/image_raw:=/camera/aligned_depth_to_color/image_raw

在这里插入图片描述


经过查找可能是yaml文件还需要修改
opencv4.0读取yaml文件错误 error: (-49:Unknown error code -49) Input file is empty in function ‘open’

需要在yaml文件顶端添添加

%YAML:1.0

在这里插入图片描述

重新运行

rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.bin Examples/RGB-D/RealSense.yaml /camera/rgb/image_raw:=/camera/color/image_raw /camera/depth_registered/image_raw:=/camera/aligned_depth_to_color/image_raw

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当CTRL+C后,可以看到输出的pcd文件

查看保存的pcd文件

pcl_viewer vslam.pcd

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

至此,基于深度相机 Intel RealSense D435i 实现 ORB SLAM 2 的流程成功

不过由于启动SLAM的指令有点复杂,使用roslauch进行优化
首先是离线包的启动

当启动的命令没有输全的时候,终端会输出使用的用法

Usage: rosrun ORB_SLAM2 RGBD path_to_vocabulary path_to_settings

在这里插入图片描述

首先建立一个功能包,命名为 slam

cd ~/catkin_ws/src
catkin_create_pkg slam std_msgs rospy roscpp

在这里插入图片描述

然后在这个功能包中创建launch文件,我命名为rgbd.launch
进行编辑

<launch>
    <!--定义全局参数-->
    <arg name="rgb_image" default="/camera/rgb/image_raw"/>
    <arg name="path_to_vacabulary" default="/home/heying/ORB_SLAM2_modified/Vocabulary/ORBvoc.bin"/>
    <arg name="path_to_settings" default="/home/heying/ORB_SLAM2_modified/Examples/RGB-D/TUM1_ROS.yaml"/>


    <!--播放离线包-->
    <!-- 注意这里bag文件的路径必须为绝对路径-->
    <node pkg="rosbag" type="play" name="player" output="screen"
         args=" /home/heying/ORB_SLAM2_modified/Examples/datasets/rgbd_dataset_freiburg1_xyz.bag">
         <remap from="/camera/rgb/image_color" to="/camera/rgb/image_raw" />
	 <remap from="/camera/depth/image" to="/camera/depth_registered/image_raw" />

    </node>

    <!--启动ORB-SLAM2 RGBD-->
    <node name ="RGBD" pkg="ORB_SLAM2" type="RGBD"
        args="$(arg path_to_vacabulary) $(arg path_to_settings)" respawn="true" output="screen">
        <!--remap from="/camera/image_raw" to="$(arg rgb_image)"/-->
    </node>
</launch>

在这里插入图片描述


完成后测试

roslaunch slam rgbd.launch

在这里插入图片描述


正常启动
在这里插入图片描述


实时摄像头

再新建一个launch文件,用于摄像头的启动于建图

touch  camera.launch
gedit camera.launch

在这里插入图片描述

然后进行编写

首先是全局参数,先不要打全指令,可以看到输出了使用方法,出来的path_to_vocabularypath_to_settings便是需要设置的全局参数

rosrun ORB_SLAM2 RGBD

在这里插入图片描述

<launch>

<!--定义全局参数-->
  <arg name = "path_to_vocabulary" default = "/home/heying/ORB_SLAM2_modified/Vocabulary/ORBvoc.bin"/>
  <arg name = "path_to_settings" default = "/home/heying/ORB_SLAM2_modified/Examples/RGB-D/RealSense.yaml"/>


  <!--include file="$(find realsense2_camera)/launch/rs_camera.launch"/-->


<!--启动ORB-SLAM2 RGBD-->
  <node pkg = "ORB_SLAM2" type ="RGBD" name = "RGBD_camera" args="$(arg path_to_vocabulary) $(arg path_to_settings)" respawn="true" output="screen">
        <remap from="/camera/rgb/image_raw" to="/camera/color/image_raw" />
	 	<remap from="/camera/depth_registered/image_raw" to="/camera/aligned_depth_to_color/image_raw" />
  </node>

</launch>

在这里插入图片描述


测试
开启主节点

roscore

然后检查摄像头的硬件连接

启动摄像头

roslaunch realsense2_camera rs_camera.launch

在这里插入图片描述


启动建图

roslaunch slam camera.launch

在这里插入图片描述
启动正常,效果简直完美
在这里插入图片描述
在程序CTRL+C后会生成pcd文件
在这里插入图片描述

查看效果

pcl_viewer vslam.pcd

在这里插入图片描述

效果良好
在这里插入图片描述

至此,使用 intel D435i 构建SLAM点云地图与slam摄像头建图的启动指令优化流程结束

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORB-SLAM2的布置(五)使用 intel D435i 构建SLAM点云地图 的相关文章

  • 树莓派---wiringPi串口使用(win10+树莓派3+usb转串口)

    参考 wiringPi使用手册wiringPi安装wiringPi串口的配置 准备 串口调试助手串口线驱动 在树莓派上用Qt写串口发送数据的程序 serialTEST pro QT 43 61 core QT 61 gui TARGET 6
  • Ubuntu下QT creator查看pixhawk工程

    打开Terminal span class hljs built in cd span src Firmware mkdir Firmware build span class hljs built in cd span Firmware
  • Ubuntu+DroneKit Python配置

    安装 sudo apt span class hljs attribute get span install python span class hljs attribute py span python span class hljs a
  • DroneKit示例分析1---状态的获取与设置

    能获取大部分无人机的状态信息 xff0c 但只有以下几个可以设置 Vehicle span class hljs preprocessor home span location Vehicle span class hljs preproc
  • Python+OpenCV感兴趣区域ROI提取

    Python 43 OpenCV感兴趣区域ROI提取 方法一 xff1a 使用轮廓 步骤1 span class hljs string 34 34 34 src为原图 34 34 34 span ROI 61 np zeros src s
  • 机器学习——数据标注工具使用

    LabelImg 源码编译教程 LabelImg github Windows Linux打包软件 使用方法 Steps Click Change default saved annotation folder in Menu File C
  • TensorFlow——训练自己的数据(一)数据处理

    参考 xff1a Tensorflow教程 猫狗大战数据集 贴一张自己画的思维导图 数据集准备 kaggle猫狗大战数据集 xff08 训练 xff09 xff0c 微软的不需要翻墙 12500张cat12500张dog 生成图片路径和标签
  • TensorFlow——训练自己的数据(三)模型训练

    参考 xff1a Tensorflow教程 猫狗大战数据集 文件training py 导入文件 span class hljs import span class hljs keyword import span os span span
  • TensorFlow——训练自己的数据(四)模型测试

    参考 xff1a Tensorflow教程 猫狗大战数据集 测试一张图片 获取一张图片 函数 xff1a def get one image train 输入参数 xff1a train 训练图片的路径返回参数 xff1a image xf
  • linux BST树算法实现

    简介 BST就是二叉搜索树 Binary Search Tree 的简称 xff0c 因此毫无疑问BST也是二叉树 xff0c 对于二叉树而言 xff0c 和线性表的实现一样 xff0c 我们也必须设计其数据节点 xff0c 而且也必须设计
  • TensorFlow——训练自己的数据——CIFAR10(一)数据准备

    参考教程 Tensorflow教程 xff1a 深度学习 图像分类 CIFAR10数据集 Reading Data 所用函数 span class hljs function span class hljs keyword def span
  • TensorFlow:Object_Detection_API在Windows10上的配置

    安装 假设已配置完tensorflow xff0c 并安装好Anaconda3 4 2 0 xff08 此版本为python3 5 xff09 从github下载models tensorflow models Protobuf 编译 pr
  • TensorFlow Object Detection API 在Windows10和Ubuntu上的配置

    前言 好久没用博客了 xff0c 因为服务器原因重装了好几次 xff0c tensorflow也一直跟着重装 xff0c 这篇博文相比上一篇会更完善点 xff0c 用的版本也会新一些 主要记录在win10和ubuntu上配置Tensorfl
  • 那一年读过的技术经典书

    转载请注明 xff1a http blog csdn net xinzhangyanxiang article details 10199757 大学刚毕业 xff0c 总结起来读过的书并不算多 xff0c 而且主要集中在大四的时期读的 x
  • Bert: 双向预训练+微调

    最近要开始使用Transformer去做一些事情了 xff0c 特地把与此相关的知识点记录下来 xff0c 构建相关的 完整的知识结构体系 以下是要写的文章 xff0c 文章大部分都发布在公众号 雨石记 上 xff0c 欢迎关注公众号获取最
  • Federated Learning: 问题与优化算法

    工作原因 xff0c 听到和使用Federated Learning框架很多 xff0c 但是对框架内的算法和架构了解不够细致 xff0c 特读论文以记之 这个系列计划要写的文章包括 xff1a Federated Learning 问题与
  • DIN: 阿里点击率预估之深度兴趣网络

    广告推荐算法系列文章 xff1a 莫比乌斯 百度的下一代query ad匹配算法百度凤巢分布式层次GPU参数服务器架构DIN 阿里点击率预估之深度兴趣网络DIEN 阿里点击率预估之深度兴趣进化网络 本文的知识点来源于参考文献 1 xff0c
  • DIEN: 阿里点击率预估之深度兴趣进化网络

    广告推荐算法系列文章 xff1a 莫比乌斯 百度的下一代query ad匹配算法百度凤巢分布式层次GPU参数服务器架构DIN 阿里点击率预估之深度兴趣网络基于Delaunay图的快速最大内积搜索算法DIEN 阿里点击率预估之深度兴趣进化网络
  • 概率矩阵分解模型 PMF

    本文是论文 一种结合推荐对象间关联关系的社会化推荐算法 的笔记 xff08 上 xff09 因为对其中的概率矩阵分解 Probabilistic Matrix Factorization PMF 不够了解 xff0c 因而我先去脑补了PMF
  • 卷积神经网络

    卷积神经网络 转载请注明 xff1a http blog csdn net stdcoutzyx article details 41596663 自今年七月份以来 xff0c 一直在实验室负责卷积神经网络 xff08 Convolutio

随机推荐

  • linux系统非线性结构的遍历算法

    介绍 非线性结构的二叉搜索树 xff08 BST xff09 可以进行各种不同方式的遍历 xff0c 所谓遍历 xff0c 就是环游树中的每一个节点 xff0c 然后根据我们的需要对这些节点做某种处理 树的遍历方式主要有以下几种 xff08
  • DeepID人脸识别算法之三代

    DeepID人脸识别算法之三代 转载请注明 xff1a http blog csdn net stdcoutzyx article details 42091205 DeepID xff0c 目前最强人脸识别算法 xff0c 已经三代 如今
  • 理解dropout

    理解dropout 开篇明义 xff0c dropout是指在深度学习网络的训练过程中 xff0c 对于神经网络单元 xff0c 按照一定的概率将其暂时从网络中丢弃 注意是暂时 xff0c 对于随机梯度下降来说 xff0c 由于是随机丢弃
  • 深度卷积对抗生成网络(DCGAN)

    本文是参考文献 1 的论文笔记 卷积神经网络在有监督学习中的各项任务上都有很好的表现 xff0c 但在无监督学习领域 xff0c 却比较少 本文介绍的算法将有监督学习中的CNN和无监督学习中的GAN结合到了一起 在非CNN条件下 xff0c
  • 看图说话——CNN和LSTM的联合应用

    看图说话是深度学习波及的领域之一 其基本思想是利用卷积神经网络来做图像的特征提取 xff0c 利用LSTM来生成描述 但这算是深度学习中热门的两大模型为数不多的联合应用了 本文是参考文献 1 的笔记 xff0c 论文是比较早的论文 xff0
  • 机器学习经典书籍小结

    机器学习经典书籍小结 转载本博客请注明链接 xff1a http blog csdn net xinzhangyanxiang article details 9069045 博客第一篇文章 1 是转载的 xff0c 也算是开始写博客不经意
  • Microsoft Media foundation概述(附实例)

    Microsoft Media Foundation是微软新一代多媒体开发平台 xff0c 用以取代原来的Directshow xff0c 为了满足现在多媒体播放的高清晰 xff0c 高品质 xff0c 颜色管理 xff0c 以及充分利用硬
  • Dockerfile中 使用pip镜像源加速下载

    用dockerfile文件制作镜像 xff0c 提高pip下载速度 1 安装pip3 xff0c python3 RUN apt get update RUN apt get install y python3 5 RUN apt get
  • NVIDIA Jetson Nano主机的autoware的学习与demo运行-第7章-Autoware源码安装

    Autoware源码安装 建立workspace mkdir p autoware ai src cd autoware ai 这个是下载了一个名为autoware ai repos的文件 xff0c 是为了方便管理多个git库而开发 43
  • NVIDIA Jetson Nano主机的autoware的学习与demo运行-第8章-Autoware官方demo运行

    Autoware官方demo 个人学习者很少拥有齐全的传感器以及工控机 xff0c 所以我们可以用autoware ai官网提供的一些录制好的rosbag包及个人笔记本来跑些有趣的demo 安装了 Autoware 之后 xff0c 就可以
  • NVIDIA Jetson AGX Xavier主机刷机与SSD安装

    任务逻辑 当有个新的AGX主机到手上后 xff0c 主机是启动的是eMMC xff0c 大约30G存储 这个安装了系统后到后面随便弄一下就不够存储了 xff0c 所以我是想要在主机上安装一个SSD xff0c 然后将系统直接放到SSD上 x
  • 自平衡linux红黑树

    简介 实际应用中的自平衡搜索二叉树 xff0c 除了AVL之外 xff0c 红黑树也是备受宠爱 他不仅是linux中非线性结构的标准算法 xff0c 而且是Java中TreeMap TreeSet机制 C 43 43 中的STL这些经典工具
  • yolov3的训练(一)下载与训练

    darknet框架简介 https blog csdn net mao hui fei article details 113820303 AlexeyAB大佬的关于darknet的详细文档信息 https github com Alexe
  • yolov3的训练(五)darknet的VOC测试集和训练集以及训练前准备

    VOC测试集和训练集 同学们 xff0c 这个系列的文件不要直接就跟着我操作了 xff0c 因为这个是踩坑的记录 xff0c 不是教程 xff0c 我只是将整个流程记录下来 xff0c 让后面的同学操作的时候能够避开这些坑 xff0c 希望
  • yolov3的训练(七)使用darknet_ros框架进行识别与模型导入

    同学们 xff0c 这个系列的文件不要直接就跟着我操作了 xff0c 因为这个是踩坑的记录 xff0c 不是教程 xff0c 我只是将整个流程记录下来 xff0c 让后面的同学操作的时候能够避开这些坑 xff0c 希望你能将整个系列的操作流
  • ORB-SLAM2的布置(一)Pangolin的安装

    参考文件 ORB SLAM 2在github的官方流程 https github com raulmur ORB SLAM2 然后就是安装Pangolin 在 ORB SLAM 2 中那些很炫酷的实时建图画面是通过 Pangolin 实现的
  • ORB-SLAM2的布置(二)ORB-SLAM2的安装

    当在上一节中 xff0c Pangolin 安装成功后 xff0c 便可进行ORB SLAM2的安装 这里的普通模式是指直接运行编译之后的可执行文件 xff0c ROS 模式是以ROS机器人框架的形式执行 首先从 github 下载源文件
  • ORB-SLAM2的布置(四)ORB-SLAM2构建点云

    提要 高博的工作是对基本 ORB SLAM2 的扩展 xff0c 基本思想是为每个关键帧构造相应的点云 xff0c 然后依据从 ORB SLAM2 中获取的关键帧位置信息将所有的点云拼接起来 xff0c 形成一个全局点云地图 https g
  • ORB-SLAM2的布置(三)ORB-SLAM2的测试使用

    目标 在上一节 xff0c 我们完成了ORB SLAM2的编译与测试 xff0c 这一节使用完整的数据集进行测试 普通模式 这里的普通模式直接运行编译之后的可执行文件 单目摄像头 首先是单目摄像头 这里我们使用TUM数据集进行离线测试 去到
  • ORB-SLAM2的布置(五)使用 intel D435i 构建SLAM点云地图

    Intel RealSense SDK 2 0 是跨平台的开发套装 xff0c 包含了基本的相机使用工具如 realsense viewer xff0c 也为二次开发提供了丰富的接口 xff0c 包括 ROS xff0c python Ma