将表示旋转的四元数从一个坐标系转换为另一个坐标系

Cra*_*ncy 11 system quaternions coordinate

我从坐标系Y = up,X = right,Z = backwards的传感器数据得到四元数.Mine是X =正向,Y =正确,Z =向上.

所以OX = Y,OY = Z且OZ = -X.

我有一个函数可以将四元数转换为4by4矩阵,但不知道从哪里开始.任何帮助将不胜感激.

mki*_*all 12

[X,Y,Z,W]形式的四元数相当于轴角旋转,其中W仅取决于旋转角度(但不取决于轴),X,Y,Z是旋转轴线乘以罪(角度/ 2).由于X,Y,Z具有此属性,因此您可以像交换三维坐标一样交换和否定它们.要从传感器的坐标系转换为您的坐标系,您只需执行以下操作:

MyQuat.X = -SensorQuat.Z
MyQuat.Y = SensorQuat.X
MyQuat.Z = SensorQuat.Y
MyQuat.W = SensorQuat.W

  • 我注意到你正在从右手系统转换为左手系统.在这种情况下,您可能想要否定XYZ旋转.所以MyQuat.X = SensorQuat.Z MyQuat.Y = -SensorQuat.X MyQuat.Z = -SensorQuat.Y MyQuat.W = SensorQuat.W (3认同)
  • 如果我的 2 个坐标轴相距不是 90 度,而是复杂旋转相距,该怎么办?(所以不像只是交换和否定那么简单)在这种情况下的一般规则是什么? (3认同)
  • 你可以链接任何解释这种数学属性的来源吗? (2认同)

Shi*_*hah 5

假设您有两个坐标系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
Run Code Online (Sandbox Code Playgroud)

然后,

q_f2 = qo_f2 * q_f1 * qo_f2.inverse()
Run Code Online (Sandbox Code Playgroud)

说明

要通过四元数q旋转任何东西,您只需执行q*p*q.inverse()。如果p是一个向量,则可以通过将w = 0和x,y,z设置为向量,将其首先转换为“伪”四元数。如果p是四元数,那么您很好。

  • 这是迄今为止我见过的最好的解释。您能详细说明如何计算“qo_f2”吗?例如,我有一个 IMU 与身体不对齐。它有自己的参考系(可能基于北向和重力)。我想要一个参考系,其中第三轴位于重力方向(假设我有重力矢量),其他两个方向并不重要。 (3认同)