【问题标题】:PCL: X and Y values are changed when pcd file is loaded by PCL libraryPCL:当 PCL 库加载 pcd 文件时,X 和 Y 值会发生变化
【发布时间】:2019-10-08 17:16:35
【问题描述】:

我想使用 PCL 加载点云数据。我可以正确加载教程上的示例数据,但是当我尝试使用我的数据时,pcd 文件的值被更改为非常小的值。

终端输出图片

实际值类似于 3603538.71629,但当 PCL 读取此文件时,它会变成非常小的值。 这是我的 pcd 文件。

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z cluster
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 14937
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 14937
DATA binary
# POINT_X;POINT_Y;Count;Cluster
3603538.71629;5794698.05946;1;4
3605159.73611;5792213.47052;1;20
3605158.44424;5792230.86339;1;20
3605158.97718;5792221.85844;1;20
3605152.30217;5792232.17992;1;20
3604558.82308;5793345.02318;1;55
3604944.90684;5794341.30959;1;56

这是我的 pcd_read.cpp

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

int
main (int argc, char** argv)
{
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

  if (pcl::io::loadPCDFile<pcl::PointXYZ> ("xyzc-Cloud.pcd", *cloud) == -1) //* load the file
  {
    PCL_ERROR ("Couldn't read file xyzc-Cloud.pcd \n");
    return (-1);
  }
  std::cout << "Loaded "
            << cloud->width * cloud->height
            << " data points from xyzc-Cloud.pcd with the following fields: "
            << std::endl;

  for (size_t i = 0; i < 10; ++i)  
    std::cout << "    " << cloud->points[i].x
              << " "    << cloud->points[i].y
              << " "    << cloud->points[i].z << std::endl;

  return (0);
}
'''

环境: macOS 版本 10.14.16

【问题讨论】:

    标签: c++ point-cloud-library


    【解决方案1】:

    我认为由于坐标数据格式不正确,您看到了损坏。这些字段应该是空格或制表符分隔,而你有一个字符;

    引用自docs

    以简单的 ascii 格式存储点云数据,每个点在一行上,空格或制表符分隔,上面没有任何其他字符,以及二进制转储格式,允许我们两全其美:简单和速度,取决于底层应用程序。

    这可以通过查看reader source 来确认,其中使用以下内容分割行。您的分号将导致无效拆分和随后的浮点提取。该函数不会因格式不正确而返回错误,这就是您的代码仍然有效的原因,尽管不正确。

    boost::split (st, line, boost::is_any_of ("\t\r "), boost::token_compress_on);
    

    因此,答案是使用空格分隔符格式化您的 .pcd 正文数据。


    同样作为@UlrichtEckhardt cmets,您正在混合和匹配预期的输出格式:

    替换

    DATA binary
    

    DATA ascii
    

    【讨论】:

    • 另外,我想问DATA binary 后面跟文本元组表示是否有意义。
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 2014-02-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多