利用Realsense-ros订阅topic获取D435i深度值

利用Realsense-ros订阅topic获取D435i深度值

利用Realsense-ros订阅相关话题获取与RGB图对齐的深度图及任意指定一点的深度值的代码请移步:
链接: https://blog.csdn.net/weixin_44350238/article/details/103565100.

本文针对上述链接中的代码的一些问题作补充。

需要包含的头文件

原作者老哥没有给出需要包含的头文件 。#include <cv_bridge/cv_bridge.h>是用于Ros图像与Opencv图像的相互转换的,有兴趣的可以参考文章: https://blog.csdn.net/qq_27050183/article/details/51141998#include <opencv2/highgui.hpp>OpenCV可视化,链接文章中的代码不需要,因为我想要写出深度图像,所以需要包含这个头文件;#include <ros/ros.h>ROS订阅发布必备,不用多说。

#include <cv_bridge/cv_bridge.h>
#include <opencv2/highgui.hpp>
#include <ros/ros.h>

深度值异常

我在使用链接中代码获取一点深度值的时候需要一个问题:深度值要么特别大,要么就是0,如图所示
在这里插入图片描述
写出的图像酱婶儿的:
0和特别大大大
像素值基本上就是0255(超过255的都是255)。什么原因呢?找了半天发现是回调函数void DepthCallback中ros_Img转cv_img出现了问题:

  data =
     // cv_bridge::toCvCopy(depth_img, sensor_msgs::image_encodings::TYPE_32FC1)
      cv_bridge::toCvCopy(depth_img, sensor_msgs::image_encodings::TYPE_16UC1)
          ->image;
  std::cout << "image data: " << data.at<uint16_t>(240, 320) << std::endl;//表示获取图像坐标为240,320的深度值,单位是毫米
  cv::imwrite("testdepth.jpg", data);

注释部分是原作者老哥的代码,下面是我的代码。很明显,是图像数据结构的问题。上面转换用的是TYPE_32FC132位浮点型,下面在打印深度值时用的uint16_t16位整型,所以直接将转换图像的数据类型改为对应的TYPE_16UC116位整型就OK了。另外…D435i相机输出深度图好像没有浮点型吧?(我也不太清楚,望指正)

图像像素“归255化”处理

D435i相机的有效深度量测范围是0.1m~10m,直接获取的深度值单位是mm,很明显,当深度值超过0.255m时,输出的深度图非常具有f国特色(今日不辱f!)一片白。所以需要把这些深度值都约束到0~255这个范围内,代码很简单:

   cv::imwrite("/home/ggh/1_ggh_workdir/gazebo_offb/catkin_drone/data/depth.jpg", (depth/32767)*255);
   std::cout << "image data: " << depth.at<uint16_t>(360, 640) * 0.001 << std::endl; 

TYPE_16UC1的数值范围是-32768~32767,深度值不会为负值,所以除以32767再乘以255就OK了。下面我想打以米为单位的深度,就乘以0.001。最后结果如图:
在这里插入图片描述
这里的0是错误测量值。
在这里插入图片描述

大家有什么问题请在评论区留言交流,文章中有不正确的地方望大佬们斧正。

realsense-ros安装包是用于将Intel RealSense系列深度相机与ROS(机器人操作系统)集成的软件包。它提供了ROS节点和驱动程序,可以用于访问和操作RealSense相机的各种传感器数据。 要安装realsense-ros安装包,首先需要确保在计算机上安装了ROS。安装ROS的方法可以在ROS官方网站上找到详细的说明。 安装完ROS后,可以通过以下步骤安装realsense-ros安装包: 1. 打开终端,并使用cd命令将工作目录切换到catkin工作空间的src文件夹。例如: ``` cd catkin_ws/src ``` 2. 使用git命令从GitHub上克隆realsense-ros源代码仓库。运行以下命令: ``` git clone https://github.com/IntelRealSense/realsense-ros.git ``` 3. 返回到catkin工作空间根目录,并运行catkin_make命令进行编译: ``` cd .. catkin_make ``` 4. 编译完成后,如果没有错误,可以激活工作空间: ``` source devel/setup.bash ``` 5. 现在可以启动realsense-ros节点进行测试。运行以下命令: ``` roslaunch realsense2_camera rs_camera.launch ``` 这将启动realsense-ros节点,并开始发布深度、彩色和红外图像的主题。您可以使用图像查看器或其他ROS节点来订阅这些主题并处理相机数据。 总而言之,realsense-ros安装包可以帮助将Intel RealSense系列深度相机与ROS集成,为机器人和计算机视觉应用提供强大的感知和交互功能。通过按照上述步骤安装并运行realsense-ros节点,您可以开始利用RealSense相机的功能并进行ROS开发。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值