我从坐标系Y = up,X = right,Z = backwards的传感器数据得到一个四元数.Mine是X =正向,Y =正确,Z =向上。
因此OX = Y,OY = Z且OZ = -X。
我有一个可以将四元数转换为4by4矩阵的函数,但不知道从哪里开始。任何帮助将不胜感激。
答案 0 :(得分:10)
[X,Y,Z,W]形式的四元数相当于轴角旋转,其中W仅取决于旋转角度(但不取决于轴),X,Y,Z是轴的旋转角度旋转乘以sin(角度/ 2)。由于X,Y,Z具有此属性,因此您可以像交换三维坐标一样交换和否定它们。要将传感器的坐标系转换为您的坐标系,您只需执行以下操作:
MyQuat.X = -SensorQuat.Z MyQuat.Y = SensorQuat.X MyQuat.Z = SensorQuat.Y MyQuat.W = SensorQuat.W
答案 1 :(得分:4)
假设您有两个坐标系F1和F2。为简单起见,假定两者具有相同的来源。现在让我们
qo_f1 = orientation of frame F1 as seen from frame F2
qo_f2 = orientation of frame F2 is as seen from F1
q_f1 = some quaternion in F1 frame
q_f2 = q_f1 as seen from F2
然后
q_f2 = qo_f2 * q_f1 * qo_f2.inverse()
说明
要通过四元数q旋转任何东西,只需执行q*p*q.inverse()
。如果p是一个向量,则可以通过将w = 0和x,y,z设置为向量,将其首先转换为“伪”四元数。如果p是四元数,那你就走了。