我正在使用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);
原始云
转换后的云
我怀疑问题可能出在所使用的数据类型范围。
关于此的任何信息都会有所帮助。
答案 0 :(得分:0)
问题在于所使用的偏移范围。 pcl :: PointXYZ具有浮点数,因此,当提供此类偏移量超出范围时,它将舍入结果,这会导致精度损失。一种明显的解决方案是,如果可能的话,将范围标准化。另一种解决方案是在PCL中添加自定义点类型。 PCL提供了一个不错的document。
答案 1 :(得分:0)
您可以直接将 PCDWriter 类用于精确输入。
根据建议,在PCL中创建一个自定义点类型并保存为ASCII。仅ASCII格式具有此精度输入。不知道其他格式。
注意::对于此新的双重类型的自定义Pointcloud,由于PCL使用浮点,因此可用的PCL工具将无法使用。 有关更多信息:Link