请求从 A 型到非标量类型 B 的 PCL 转换



我收到以下示例代码的编译器错误,该错误来自 pcl 教程

pcl::PointCloud<pcl::PointXYZ> cloud;
std::vector<pcl::PointXYZ> data = cloud.points;

http://pointclouds.org/documentation/tutorials/basic_structures.php

完整的编译错误是

> error: conversion from ‘std::vector<pcl::PointXYZ,
> Eigen::aligned_allocator<pcl::PointXYZ> >’ to non-scalar type
> ‘std::vector<pcl::PointXYZ>’ requested

我目前的 pcl 版本是 pcl 1.6,它是在我安装 ROS groovy 时安装的,所以我不确定这是否是问题所在。

问题是你不能这样做:

std::vector<pcl::PointXYZ> data ;

因为 PointXYZ 类型是大小为 3 (x,y,z) 的向量,所以你需要一个矩阵来保存一堆 o 点XYZ。

但是如果你想保存点,你可以使用一个for循环。

for (int i=0; i < cloud.size()); i++)
{
    vector[0] = cloud.points[i].x;
    vector[1] = cloud.points[i].y;
    vector[2] = cloud.points[i].z;
}

如果要定义一个点并为其分配值,请执行以下操作:

pcl::PointXYZ point;

因为定义是:

pcl::PointXYZ::PointXYZ (   
float   _x,
float   _y,
float   _z   
)       

编译器无法将点云转换为点向量。我认为你必须自己做:

pcl::PointCloud<pcl::PointXYZ> cloud;
std::vector<pcl::PointXYZ> data ;
//initialize your cloud here
if (!cloud.empty())
for (int i=0;i<cloud.size();i++)
    data[0]=cloud.points[0];

希望对您有所帮助!

最新更新