ENU>NED帧转换使用四元数

2024-05-15 14:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我要找的是:

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

如果能用python提供一个解决方案,我将不胜感激,但对我来说,这更多的是关于技术诀窍。在

我想我已经知道的

如果我在简体中文里有这个向量

v_xyz_ENU = [5,2,1] 

翻译成

^{pr2}$

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,开始使用四元数。 我在简体中文中有这个四元数,它代表着相同的绕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's data order = [w,x,y,z]

现在,我验证一下,一旦我将Q峎n转换为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型


Tags: 方法方式解决方案向量技术我会xyzpq