转换PCL Pointcloud时精度会丢失

时间:2019-08-12 17:49:10

标签: matrix point-cloud-library coordinate-transformation lidar

我正在使用PCL中的this来转换我拥有的点云。基本上,我只是平移云而已。

问题是应用此转换后我失去了精度。在下图中更加清晰。

我看到只有当我的偏移量具有较大的值(> 6位数字)时,才会发生这种情况。

下面是使用pcl库的代码

 Eigen::Matrix4d translationMatrix = Eigen::Matrix4d::Identity();

 //translation
 translationMatrix(0,3) = 1000000;
 translationMatrix(1,3) = 1000000;

 pcl::PointCloud<pcl::PointXYZ>::Ptr translatedCloud;
 translatedCloud.reset(new pcl::PointCloud<pcl::PointXYZ>());

 pcl::transformPointCloud(*cloud,*translatedCloud,translationMatrix);

 pcl::io::savePCDFileASCII ("translatedCloud.pcd",*translatedCloud);

原始云

original cloud

转换后的云

transformed cloud

我怀疑问题可能出在所使用的数据类型范围。

关于此的任何信息都会有所帮助。

2 个答案:

答案 0 :(得分:0)

问题在于所使用的偏移范围。 pcl :: PointXYZ具有浮点数,因此,当提供此类偏移量超出范围时,它将舍入结果,这会导致精度损失。一种明显的解决方案是,如果可能的话,将范围标准化。另一种解决方案是在PCL中添加自定义点类型。 PCL提供了一个不错的document

答案 1 :(得分:0)

您可以直接将 PCDWriter 类用于精确输入。

根据建议,在PCL中创建一个自定义点类型并保存为ASCII。仅ASCII格式具有此精度输入。不知道其他格式。

注意::对于此新的双重类型的自定义Pointcloud,由于PCL使用浮点,因此可用的PCL工具将无法使用。 有关更多信息:Link