从 pcl::PointCloud<pcl::PointXYZ> 转换为 pcl::PCLPointCloud2 ros 旋律

问题描述 投票:0回答:1

我尝试从

pcl::PointCloud<pcl::PointXYZ>
转换为
pcl::PCLPointCloud2
但转换返回一个空的点云。 这是我的代码:

pcl::PCLPointCloud2 cloud_inliers_pcl2;
pcl::toPCLPointCloud2(cloud_inliers, cloud_inliers_pcl2);

我可以打印出云“cloud_inliers”,它位于

pcl::PointCloud<pcl::PointXYZ>

但是

pcl::PCLPointCloud2
返回空字段

c++ ros point-cloud-library point-clouds
1个回答
0
投票

这有点晚了,但搜索同一主题的其他人可能会发现这很有用。

要在 PCLPointCloud2 和 PointT 类型之间进行转换,您可以使用:

//从PCLPointCloud2转换为PointT pcl::fromPCLPointCloud2(*pc2_cloud_ptr, *xyzrgb_cloud_ptr);

///从PointT转换为PCLPointCloud2 pcl::toPCLPointCloud2(*xyzrgb_cloud_ptr, *pc2_cloud_ptr);

我指向点云的指针定义为:

pcl::PCLPointCloud2::Ptr pc2_cloud_ptr(新 pcl::PCLPointCloud2);

pcl::PointCloudpcl::PointXYZRGB::Ptr xyzrgb_cloud_ptr(新 pcl::PointCloudpcl::PointXYZRGB);

请记住包括: #包括

但请注意,如果您使用点云库 (PCL) 而不是机器人操作系统 (ROS) 库,则无需转换而只需使用 PointT 类型(例如 pcl::PointCloudpcl::PointXYZRGB::指针)。 PCL 教程中的一些示例使用 PCLPointCloud2 类型,但我发现 PointT 类型也可以正常工作,无需在类型之间进行转换。我猜这些教程适用于旧版本的 PCL。下采样教程就是一个很好的例子:https://pcl.readthedocs.io/projects/tutorials/en/latest/voxel_grid.html 我使用了 PointT 类型而不是教程中使用的 PCLPointCloud2 类型,它在 PCL 1.11 中运行良好。

注意:我最近开始学习使用点云库来完成我的硕士论文。很高兴了解有关 PCL 中数据结构之间转换的更多信息。文档似乎不够充分,需要反复试验才能理解数据结构。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.