1

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

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

它的文档很差

这是 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 LiDAR 中的高度等于 1?我预计是64。

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

4

1 回答 1

4

也许我有点晚了,但对于任何有同样问题的人:

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

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

  2. 和 3.:fields.datatype 和 fields.count:看这个

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

  4. row_step:看你自己的链接,所以是“每行的点数 * point_step”

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

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

于 2019-09-12T11:08:43.767 回答