PointCloud2的内容​​是什么?

What are the contents of PointCloud2?

PointCloud2的内容​​在ROS中是什么意思?

  1. fields.offset?
  2. fields.datatype?
  3. fields.count?
  4. point_step?
  5. row_step?

documentation

这是 Velodyne LiDAR 发布的 PointCloud2 消息:

header: 
  seq: 1071
  stamp: 
    secs: 1521699326
    nsecs: 676390000
  frame_id: "velodyne"
height: 1
width: 66811
fields: 
  - 
    name: "x"
    offset: 0
    datatype: 7
    count: 1
  - 
    name: "y"
    offset: 4
    datatype: 7
    count: 1
  - 
    name: "z"
    offset: 8
    datatype: 7
    count: 1
  - 
    name: "intensity"
    offset: 16
    datatype: 7
    count: 1
  - 
    name: "ring"
    offset: 20
    datatype: 4
    count: 1
is_bigendian: False
point_step: 32
row_step: 2137952
data: [235, 171, 54, 190, 53, 107, 250, ...

  1. 为什么Velodyne-HDL64e激光雷达的高度等于1?我预计它是 64.

  2. 最后,比如data中的171值是多少?是 Y 还是一个范围(针对哪个光束)?

也许我来晚了一点,但对于遇到同样问题的任何人:

对于问题1.-3。参见 this。另外你需要记住的是,数据存储为 uint8,但你的点应该在 float32 中,如果我没看错的话。因此,每个值(x、y、z、强度等)或 "field" 都存储为多个 uint8 字节。所以你需要4个数据条目来表示一个点的x值。一个字节的总长度存储为"point_step",回答你的第四个问题。

  1. Field Offset是从该点开始到开始存储该字段的字节的字节数。所以每个点都有 x 的前 4 个字节,然后以 4 的偏移量开始 y 等的字节。

  2. 和 3.:fields.datatype 和 fields.count:参见 this

  3. point.step是一个点的字节数或数据条目数

  4. row_step:看自己的link,所以是"number of points per row * point_step"

  5. 可能您的扫描仪逐行发布?我其实不太确定这个。

  6. 不是,前4个条目代表x值,所以235、171、190、53等于: 11101011 10101011 10111110 00110101 这表示一个 float32 值。 171 没有关于该点的 x、y 或 z 值的直接信息。