C++ PCL中ICP的累积矩阵变换

C++ PCL中ICP的累积矩阵变换,c++,matrix-multiplication,point-cloud-library,matrix-transform,C++,Matrix Multiplication,Point Cloud Library,Matrix Transform,我的目标是将3D点云与ICP对齐。不知怎的,我有一个错误,我相信这是因为累积矩阵变换 为了进行调试,我从二维点云开始创建。对于点云的创建,我创建了一个随机角度,并用cos()和sin()将它们标记为x和y值,因此我在圆上有随机点。然后,我使用一个平移和一个旋转,对每个新创建的图像进行迭代上升 我正在生成大约20个点云,并将它们存储在这些512*512图像中。然后我要加载图像,用它们创建点云,并将它们与ICP对齐 现在是累积矩阵变换。时间0处的图像将具有标识矩阵。但任何其他图像都会得到从ICP

我的目标是将3D点云与ICP对齐。不知怎的,我有一个错误,我相信这是因为累积矩阵变换

为了进行调试,我从二维点云开始创建。对于点云的创建,我创建了一个随机角度,并用cos()和sin()将它们标记为x和y值,因此我在圆上有随机点。然后,我使用一个平移和一个旋转,对每个新创建的图像进行迭代上升

我正在生成大约20个点云,并将它们存储在这些512*512图像中。然后我要加载图像,用它们创建点云,并将它们与ICP对齐

现在是累积矩阵变换。时间0处的图像将具有标识矩阵。但任何其他图像都会得到从ICP(M)收集的矩阵乘以变换矩阵的变换,从最后一个已知位置: Mi=M*Mi-1

我不确定这是否是写的方式,或者在应用完整转换之前是否必须转换回标识

我的结果是针对10点云:

在第一个图中,我们看到了没有ICP的聚集点云,在第二个图中,我们看到了有ICP的聚集点云。我以前只测试过翻译,效果非常好。然后我只用旋转来测试它,在那里我有办法得到高误差。可能是因为旋转太高,所以ICP将点对齐错误,然后找到错误的匹配

但是,如果我测试真实数据,即从Xbox Kinect相机采集的图像,它似乎存在与我的2D点云示例相同的错误

那么,我计算的累积矩阵变换是错误的吗?或者是有另一个我看不到的问题

我应该如何正确设置ICP?我仅使用以下设置:

icp.setTransformationEpsilon (1e-9);
还有没有其他方法可以正确测试它