如何反转四元数的两个轴

How do I invert two axes of a quaternion

我必须从我正在使用的两个不同的 API 转换姿势(坐标 + 四元数用于旋转)。更具体地说,我得到了物体相对于相机本地位置的坐标。

我的检测库(用于检测那些对象)具有相机坐标系,其中 Z 指向相机的观察方向,X 指向相机右侧,Y 指向相机下方(如果你看从相机本身的角度来看)。我将在这里使用 ACII Art 来说明我的意思:

Symbols:

+------+
|      | = camera from the back
+------+

+--+
|  +-+
|    |   = camera from the right side (imagine the front part as the lens)
|  +-+
+--+

Detection Coordinate System from the back of the camera

+--------> x
|
|      +------+
|      |      |
V y    +------+
Detection Coordinate System from the right side of the camera

+--------> z
|     +--+
|     |  +-+
|     |    |
V y   |  +-+
      +--+

然而,我使用对象姿势的库中的 X 方向相同,但 Y 和 Z 都倒置了。所以 Z 指向与相机观察方向相反的方向,Y 指向正上方。更多 ASCII 草图:

Usage Coordinate System from the back of the camera

^ y    +------+
|      |      |
|      +------+
|
+--------> x
Usage Coordinate System from the right side of the camera

+--+
|  +-+         ^ y
|    |         |
|  +-+         |
+--+           |
    z <--------+

所以现在我在检测坐标系中获得了物体姿态(包括旋转),但想在使用坐标系中使用它们。我知道我可以通过反转 y 和 z 的值来转换坐标,但是如何转换四元数以进行旋转?我尝试了一些组合,但 none 似乎有效。

在这种情况下,您的基础变化只是轴的排列,因此要从一个轴转换为另一个轴,您只需在四元数的虚向量中复制相同的排列即可。

即如果你的四元数是 (w,x,y,z) 并且基本排列是 (z,y,x) 你的新四元数是 (w,z,y,x).