激光点云数据处理小记

本文主要是讲述对于点云数据的理解

实际上点云也是一种数据,在rviz中显示点云,很显然,应该知道每个点云数据的坐标,也就是三维坐标。同时,点云显示还会有各种颜色来表示远近或者材质,那么,颜色信息也应该包含在点云数据当中。另外,有时候也需要知道显示对象是什么,那么就需要包含强度信息,通过强度信息能够知道点云显示的物体是什么类型的物体。

综上,点云数据可以包含:坐标、颜色、强度。这样就好理解,点云数据是如何显示的了。

那么,如何从传感器获得的数据变成点云显示呢?

接下来就是关于点云的处理

传感器的数据首先是因传感器不同而不同的,我们需要清楚传感器得到的数据是什么样子的,这些往往是在传感器的说明书里会讲或者设计的时候就应该知道。
举个例子,传感器发过来的数据为10000,这个数据来自于环境中的10米的物体。通过这个10000,我们要将其转化为10米的表示。意思就是,我们得清楚传感器的数据到环境转化的规则。可以通过测试,实验,来调试好这个规则。当然,传感器对一个位置的数据描述肯定不仅仅会是一个数值而已,上文已经说了,表示一个物体的信息,往往除了位置信息,还有类型信息等等。

明白,传感器到点云数据处理的大致流程。还需要注意的是,数据往往是以数据包的形式发送和获取的。

这就需要我们清楚,数据包是如何存储数据的,每一个点的数据,由几个数据构成。需要我们进行裁切和reshape。显然,所谓的数据传输,当然是一个一个数字发送,传递的,无论是点云的数据,还是图像的数据,都是由数字构成的,只不过传输的时候,会将这些数据变成一行,一个一个数字的传输。所以才有上述说的,裁切和reshape处理,形成标准的数据形式。

再补充一点,通过一些列的操作,我们已经知道点云数据的形式和内容。但要在rviz以PointCloud2的类型去表示。原理上是一样的,我们还是要将原始的点云数据转化为或者赋值为PointCloud2的数据类型,也就是我们还需要清楚PointCloud2数据是需要什么样子的信息,定义一个msg作为PointCloud2类的实例。然后,在通过订阅发布机制,把msg信息发布出去,rviz订阅即可。
如下:

msg = sensor.PointCloud2()
msg.height = 1
msg.width = self.Img[idx].shape[0]
msg.fields = [
    sensor.PointField(
        "x", 0, sensor.PointField.FLOAT32, 1
    ),
    sensor.PointField(
        "y", 4, sensor.PointField.FLOAT32, 1
    ),
    sensor.PointField(
        "z", 8, sensor.PointField.FLOAT32, 1
    ),
    sensor.PointField(
        "w", 12, sensor.PointField.FLOAT32, 1
    ),
]
msg.is_bigendian = False
msg.point_step = 16
msg.is_dense = False
self.sensor_data[seq_id] = msg
frame_id = "map"
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值