PointCloud的标准姿势



我做了一个奇怪的观察,我在问自己是否有人有解释。

假设我们有PointCloud,例如一个完美的圆柱体。这个圆柱体是以某种方式在空间中放置和旋转的。现在,对于这个圆柱体,我们用主成分分析来计算它的质心和特征向量。

现在我可以把它的姿态描述为形式的仿射变换:

Eigen::Affine3d pose;
pose.translation << centroid[0], centroid[1], centroid[2];
pose.linear() = evecs;

现在让我们假设我想以明确、规范的姿势变换对象,然后我会做以下操作:

obj.transform(obj.getPose().inverse());

通过这个,我可以将物体转换到它的局部坐标系中,从而得到它的标准姿势。obj.getPose()将构造它的新姿态,在重新计算它的新特征向量和质心位置(然后应该在(0,0,0)中)之后。

然而,在我这样做之后,物体的新的、规范的姿势有时是这样的:

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

单位矩阵也是如此。我本以为会这样,但有时我会这样:

-1  0  0  0
 0 -1  0  0
 0  0  1  0
 0  0  0  1

我真的无法向自己解释这种行为,当我比较姿势时,这给我带来了问题。你知道为什么会发生这种事吗?

特征向量不是唯一定义的,如果v是特征向量,那么-v也是特征向量。这正是你观察到的。

此外,如果你有一个完全对称的圆柱体,那么两个特征值应该相等,并且两个各自的特征向量可以任意选择为与第三个特征向量(圆柱体的轴)正交的平面内的一对正交向量。

相关内容

  • 没有找到相关文章

最新更新