ENU - >使用四元数进行NED帧转换

时间:2018-04-12 07:27:15

标签: python 3d rotation quaternions cartesian

我在寻找什么:

将矢量(X,Y,Z)从ENU旋转到NED的统一方式,反之亦然 将四元数从ENU旋转到NED的相同的统一方式,反之亦然

如果可以在python中给出解决方案,我将不胜感激,但更多的是关于我的技术诀窍。

我认为我已经知道

如果我在ENU中有这个载体

v_xyz_ENU = [5,2,1] 

转换为

v_xyz_NED = [2,5,-1]
  

ENU< - > NED
  X,Y,Z - , Y,X,-Z

如果我在包含RPY的矢量上使用这种技术(如果这是正确的方式),我会感到困惑。

v_rpy_ENU = [0,0,90] 

转换为

v_rpy_NED = [0,0,-90]

当我写下计算时,我更喜欢使用度数

这种旋转似乎不正确,因为我知道结果应为0°
ENU偏航0°应为NED偏航-90°
ENU偏航90°应为NED偏航0°
ENU偏航180°应为NED偏航-90°/ 270°
ENU偏航-90°应为NED偏航180°

到目前为止我尝试了什么

我确实试图围绕四元数。我在网上其他地方找到的关于使用四元数的旋转的解释和例子似乎很简单,但我似乎无法得出我理解的结果。

现在,我忘记了RPY并开始使用Quaternions。 我在ENU中有这个四元数代表绕Z的相同的90°旋转

Q_ENU = pq.Quaternion(axis=[0,0,1], degrees=90)

一个声称旋转可以与矢量旋转类似,但保持w分量不变。所以我试试:

Q_NED = pq.Quaternion(Q_ENU.q[0], Q_ENU.q[2], Q_ENU.q[1], -Q_ENU.q[3])
  

Quaternion.q的数据顺序= [w,x,y,z]

现在我确认一旦将Q_NED转换为RPY角度,我是否在NED中得到0°的偏航,但结果似乎是:

Q_ENU: 0.707 +0.000i +0.000j +0.707k
Q_NED: 0.707 +0.000i +0.000j -0.707k
rpy_NED: [0.0, 0.0, -89.99999999999999]
I expect rpy_NED [0.0, 0.0, 0.0]

现在,在我开始编写我尝试过的所有其他可能性之前,我认为通过不这样做可以节省自己和很多时间。我会非常感谢有关如何做到这一点的一些解释,或者至少是朝着正确的方向发展。

-T

0 个答案:

没有答案