我正在使用一个简单的编码和解码应用程序来使用 TCP 将点云数据作为流发送。实际上,只需使用以下链接中的代码即可重现我的问题:
https://pcl.readthedocs.io/en/latest/compression.html
在编码之前,我检查输入:
std::cout << "Input time (us) = " << cloud->header.stamp << std::endl;
在解码部分之后,我添加:
std::cout << "Output time (us) = " << output->header.stamp << std::endl;
我没有对传入的点云使用 openNI,而是使用 Ouster tof635 激光雷达传感器并将这些点放入点云指针中以在回调中使用。我对这部分没有任何问题。
我在回调中得到了云的有效整数值,但解码后的输出时间始终为零。我的怀疑是解码只从流中复制实际的点云数据,根本不复制标头数据。
我的问题是:
“PCL 中是否已经存在一个函数,它提供了一种从编码流中获取头的方法(如果头被编码),或者我可能需要编写自己的反序列化算法来拉时间来自编码点云的标头的戳记?”
我编写的代码实际上并没有问题,但我更多的是寻找有关如何使用 PCL OctreePointCloudCompression 类的一些见解的答案。我在 OctreePointCloudCompression 文件中看到,有一个受保护的读写帧头类成员。这会让我相信这些应该捕获标题。是因为“cloudOut”是一个新的点云,只有点数据被复制到它吗?