如何仅使用2个欧拉角将源矢量旋转到目标(至最近的矢量)

时间:2019-03-23 12:14:58

标签: matrix vector geometry coordinates robotics

我只需要绕两个轴YZ旋转就可以将源3D矢量旋转到目标矢量。

我有一个机制,其中有2个电机绕Y旋转,然后绕Z旋转。我将随机源矢量附加到该机制。

我认为不能仅使用2个角度将源矢量旋转为随机目标3D矢量,而我需要将其旋转至最接近目标矢量。

我只需要对齐方向,而不是坐标即可。

使用旋转矩阵,四元数等的最佳方法是什么?

我可以计算从源向量到目标的shortestArcQuat。然后将目标向量乘以该quat的倒数。然后从旋转矩阵中得到YZ角,并将上一个运算的结果作为Z向量,但是我认为这是错误的。

解决方案应该是分析性的。

1 个答案:

答案 0 :(得分:0)

为清楚起见,让我定义单位矢量

E1 = (1,0,0)
E2 = (0,1,0)
E3 = (0,0,1)

鉴于旋转矩阵R,目标是将其分解为两个旋转矩阵,分别围绕轴E2旋转角度“ a”和围绕轴E3旋转角度“ b”:

R = exp(a E2) exp(b E3)

将两边都乘以E3

R E3 = exp(a E2) exp(b E3) E3

我们得到:

W = exp(a E2) E3

其中W是向量E3旋转R:W = R E3

a = atan2( W • E1, W • E3)

其中(•)是点积。

现在将R转置,我们得到:

R^T = exp(b E3)^T exp(a E2)^T

将两边都乘以E2:

R^T E2 = exp(b E3)^T exp(a E2)^T E2

R^T E2 = exp(-b E3) exp(-a E2) E2

S = exp(-b E3) E2

其中S是由R ^ T旋转的向量E2:S = R ^ T E2

b = - atan2( S • E1, S • E2)

我刚刚导出了这些方程式,因此未经测试,可能会出错。照原样。