草庐IT

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

卑微小熊 2023-04-22 原文

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];


然后编译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摄像头建图的启动指令优化流程结束

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

  1. 工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码) - 2

    博主的合并代码git@github.com:huashu996/VINS-FUSION-ESDFmap.git一、D435i深度相机配置1.1SDK+ROS参考我之前的博客,步骤和所遇见的问题已经写的很详细了https://blog.csdn.net/HUASHUDEYANJING/article/details/129323834?spm=1001.2014.3001.55011.2相机标定参数1、相机内参通过rostopic的camera/info获取header:标准消息头seq:序列ID,连续递增的ID号stamp:两个时间戳frame_id:与此数据相关联的帧IDheight:图像尺

  2. Ubuntu 18.04 Intel RealSense D435i 相机标定教程 - 2

    1、D435i相机简介        RealSenseD435i 是一款立体视觉深度相机,如下图所示,其集成了两个红外传感器(IRStereoCamera)、一个红外激光发射器(IRProjector)和一个彩色相机(ColorCamera)。立体深度相机系统主要包括两部分:视觉处理器D4和深度模块。主机处理器连接USB2.0/USB3.1Gen1、视觉处理器D4位于主处理器主板上,RGB颜色传感器数据通过主处理器主板和D4板上的彩色图像信号处理器(ISP)发送到视觉处理器D4。IntelRealSenseD435i提供了完整的深度相机模块,集成了视觉处理器、立体深度模块、RGB传感器以及彩

  3. SLAM算法总结——经典SLAM算法框架总结 - 2

    SLAM算法总结——经典SLAM算法框架总结SLAM算法总结——经典SLAM算法框架总结SLAM算法总结——经典SLAM算法框架总结从研究生接触SLAM算法到现在也有两三年了,期间学习了很多经典的SLAM算法框架并写了一些相关的博客,本篇博客主要目的是想将这些博客进行一个简单总结用于查漏补缺。首先,按照我的理解,我梳理了如下一个思维导图,如果读者发现有什么需要补充或者纠正的欢迎随时交流:按照分类,我们先来讲讲视觉SLAM,视觉SLAM算法相对于激光SLAM算法的特点是信息更加丰富,由于是在二维提取特征点,因此通常可以达到更高的频率,但也正是因为信息丰富,因此更容易引入噪声,加上缺乏三维信息,导

  4. 视觉SLAM14讲——相机与图像 - 2

    前面我们已经说过了视觉SLAM的运动方程和观测方程。在以相机为主的视觉SLAM中,观测主要是指相机成像的过程。1、相机模型 常见的针孔相机模型如上图,在空间中有一点P,点P坐标为,点P经过光心O投影之后落在了物理成像平面O'-x'-y'上,成像点为P',坐标为,设物理成像平面到小孔的距离为f(焦距)。根据相似三角形可以得出: 公式中的负号表示所成的像是倒立的。由于相机输出的图像并不是倒像,而且为了便于操作,我们可以等价的将成像平面对称的放在相机前方,和三维空间点一同放在相机的同一侧。如下图所示: 这样我们就可以将公式中的负号去掉: 将X',Y'放在等式左侧得: 上式描述了点P和它的像之间的空间

  5. SLAM评估工具-EVO从安装到使用 - 2

    1、安装evopipinstallevo--upgrade--no-binaryevo--user即可直接安装成功如果说需要更新则更新即可/usr/local/bin/python3.7-mpipinstall--upgradepip2、测试evo_trajeuroc2.txt--plot报错:[ERROR]EuRoCformatgroundtruthmusthaveatleast8entriesperrowandnotrailingdelimiterattheendoftherows(comma)出现这个问题的原因是生成的原始文件中偶尔存在空格等不是完全规范的tum结果文件解决办法:运行如下

  6. SLAM算法评测工具——开源工具EVO(以VINS为例) - 2

    EVO库是一个很方便的开源库(PythonpackagefortheevaluationofodometryandSLAM),evo是一个很好的测评工具,它可以根据时间戳将轨迹进行对齐,同时可以将不同尺度的轨迹按照你指定的标准轨迹进行拉伸对齐,并可以算出均方差等评定参数,用于测评slam算法性能。下载:github链接:https://github.com/MichaelGrupp/evo与其他公共基准测试工具相比,evo有几个优势:不同格式的通用工具用于单目SLAM等的关联、对齐、比例调整的算法选项。灵活的输出、绘图或导出选项(例如LaTeX绘图或Excel表格)一个强大的、可配置的CLI,

  7. SLAM学习笔记----坐标关系梳理及PnP算法详解 - 2

    一,重要的坐标关系的解析四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。世界坐标系:机器人或相机运动过程中,肯定需要知道它的位置,因此需要设定世界坐标系,认定固定不动,作为参考坐标系,描述世界中的任何一点P(Xw,Yw,Zw)。相机坐标系:相机或机器人运动的一个坐标系,通过世界坐标系的变换(旋转R,平移T)计算得到。因此主要是将世界坐标系描述的点坐标P(Xw,Yw,Zw)转换成相机坐标系下描述P(Xc,Yc,Zc),方便计算得到在成像坐标系的坐标。图像(成像)坐标系:描述点在图像坐标系的成像点位置。像素坐标:在相机中得到的是一个像素,因此主要将图像坐标系的点转换成像素坐标系下。1.

  8. Ubuntu 18.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM2+SLAM相关库的安装 - 2

    文章目录一、换源二、安装三方库2.1安装必要的依赖项2.2安装Pangolin2.3安装OpenCV32.4安装Eigen3三、安装ORB-SLAM2四、安装ORB-SLAM34.1安装OpenCV44.2安装ORB-SLAM3五、安装ROSMelodic六、ROS安装摄像头驱动七、ROS实时运行ORB-SLAM27.1相机标定7.2编译ORB_SLAM2ROS例子7.3实时运行ORB-SLAM2八、安装SLAM测评工具evo8.1安装evo8.2测试evo九、安装PCL和Octomap十、安装优化库:G2O、GTSAM和Ceres十一、安装Sophus在新安装的Ubuntu18.04系统中配

  9. Gazebo仿真记录 Turtlebot3 + D435i - 2

    在Gazebo环境中在Turtlebot3上添加深度相机D435和IMU。步骤1.准备工作创建ROS工作空间,下载turtlebot3相关代码和realsense2_description模型文件放到工作空间下。Turtlebot3:主要是turtlebot3、turtlebot3_simulations、turtlebot3_msgsrealsense2_description:存放Realsense相关型号的相机模型文件及xacro文件。这里的相机型号包括d415、d345、r410、r430和t265。可以用view_d415_model.launch等在Gazebo中打开查看。2.添加

  10. Ubuntu18.04跑通ORB_SLAM3(实时USB单目摄像头&本地视频.mp4&官方数据集) - 2

    本人小白,寒假期间学习了一些ROS知识,试着在虚拟机搭建ORB_SLAM3环境并跑通数据集和摄像头,作本文以记录学习过程。所有用到的资源(软件安装包,镜像文件,库的源码文件都会放在最后百度网盘链接里)目录0.somethingyoushouldknow1.安装VMwareWorkstationPro和Ubuntu18.042.安装ROS3.安装ORB_SLAM3所需的各种库和依赖4.编译ORB_SLAM3并在非ROS环境下跑通数据集&跑自己录制的Video5.编译ORB_SLAM3ROS接口实时跑USB单目摄像头0.somethingyoushouldknow#你需要知道什么是终端,怎么唤起终

随机推荐