【问题标题】:What does Intel Lidar L515 ROS depth message mean?英特尔激光雷达 L515 ROS 深度消息是什么意思?
【发布时间】:2021-03-05 00:46:30
【问题描述】:

我有一个Intel Lidar L515,并在 Windows 上使用默认设置通过 realsense-viewer 录制了一条 ROS 消息。

我对深度消息感兴趣:/device_0/sensor_0/Depth_0/image/data。

我已订阅 C++ 中的 ROS sensor_msg::Image 主题,并正在使用 cv_bridge 转换为 opencv 图像。我正在尝试将 opencv at 函数与 char 一起使用,并且得到了很多 7,以及 168-190 之间的许多值。我把注意力集中在中间的浅绿色方块上,它在 1.28 米处。当我的鼠标在 realsense-viewer 中移到它上面时,最常见的十六进制值是 0x1410。

specs 表示图像数据为 Z16,数据表示与传感器的距离。我有一个 1.28 米的物体,传感器的范围是 9 米,但我认为我的值不会超过 2.5,因为我在一个相对较小的房间里。

我正在做的代码示例是:

void callback( const sensor_msgs::ImageConstPtr &depthImage, cv::Point upperLeft, cv::Point lowerRight )
{
  cv::Mat depthImage_cv = ( cv_bridge::toCvCopy( depthImage, depthImage->encoding ) )->image;
  for(int row = upperLeft.x; row <= lowerRight.x; row++)
  {
     for(int column = upperLeft.y; column <= lowerRight.y; column++)
     {
        float depth = depthImage_cv.at<uchar>(row,column);           
        ROS_INFO_STREAM("Depth char value: " << depth);
     }
  }
}

这是 realsense-viewer 中的示例图像,显示 0-4 比例:

我知道我的对象的距离。我想知道如果它准确地检测到该对象,它应该是什么像素值。 感谢您提供任何帮助或见解!

【问题讨论】:

    标签: c++ opencv ros lidar realsense


    【解决方案1】:

    这里是我发现的东西,以防它帮助别人,虽然我仍然无法使用 opencv 的 at 函数来产生结果,所以如果有人能回答我会接受他们的回答。

    • 使用 L500 深度传感器选项卡下的 realsense-viewer,您可以在录制之前为您的设备选择某些内容。深度单位的默认值为 0.000250。我仍然没有它和像素之间的精确映射,因为到 256 没有明确的等式。

    • 我尝试使用不同的包文件查看深度图像中的特定小方块,我知道以下所有格式的返回值和返回的所有值都是 0,但是当我将鼠标移动到实际的相同数据上时-查看器告诉我我知道物体的距离,所以数据就在那里:

        cv::Scalar depth = depthImage_cv.at<uchar>(row,column);
        float d1 = depthImage_cv.at<uchar>(row,column);
        int16_t d2 = depthImage_cv.at<uchar>(row,column);
        uint16_t d3 = depthImage_cv.at<uchar>(row,column);
        float d4 = depthImage_cv.at<char>(row,column);
        int16_t d5 = depthImage_cv.at<char>(row,column);
        uint16_t d6 = depthImage_cv.at<char>(row,column);
        float d7 = depthImage_cv.at<float>(row,column);
        int16_t d8 = depthImage_cv.at<float>(row,column);
        uint16_t d9 = depthImage_cv.at<float>(row,column);
        float d10 = depthImage_cv.at<ushort>(row,column);
        int16_t d11 = depthImage_cv.at<ushort>(row,column);
        uint16_t d12 = depthImage_cv.at<ushort>(row,column);
      

    最后,我去了 librealsense git 库。我发现following file 可用于读取文件并使用一些 librealsense 的序列化方式来解释深度,但最终能够以编程方式获得我需要的深度。 Here 是我的实现,它主要是来自 librealsense 库的示例,并进行了一些调整,因此我从文件而不是设备中获取数据。希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多