我从坐标系 Y=up、X=right 和 Z=backs.Mine 的传感器数据中得到一个四元数。我的是 X=forward、Y=right、Z=up。
所以 OX=Y、OY=Z 和 OZ=-X。
我有一个可以将四元数转换为 4by4 矩阵的函数,但不知道从哪里开始。任何帮助将不胜感激。
我从坐标系 Y=up、X=right 和 Z=backs.Mine 的传感器数据中得到一个四元数。我的是 X=forward、Y=right、Z=up。
所以 OX=Y、OY=Z 和 OZ=-X。
我有一个可以将四元数转换为 4by4 矩阵的函数,但不知道从哪里开始。任何帮助将不胜感激。
[X, Y, Z, W] 形式的四元数等价于轴角旋转,其中 W 仅取决于旋转角度(而不是轴),X、Y、Z 是旋转轴乘以罪(角度/ 2)。由于 X、Y、Z 具有此属性,因此您可以像在它们之间转换 3D 坐标一样交换和否定它们。要将传感器的坐标系转换为您的坐标系,您只需执行以下操作:
MyQuat.X = -SensorQuat.Z MyQuat.Y = SensorQuat.X MyQuat.Z = SensorQuat.Y MyQuat.W = SensorQuat.W
假设您有两个坐标系 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 是四元数,那么你很高兴。
你只需要将它乘以 q,它是将点从 Coord2 转换为 Coord1 等价的四元数。解释:
q2 * point2 * (q2)^(-1) = (q1 * (q^(-1))) * point2 * (q1 * (q^(-1)))^(-1)
= q1 * (q^(-1)) * point2 * q * (q1^(-1)) = q1 * ((q^(-1)) * point2 * q) * (q1^(-1))
= q1 * point1_equivalent * (q1^(-1))