如何检查刚体的方向是否接近目标方向

How to check whether an orientation of a rigid body has approached a target orientation

我有一个 IMU 传感器,它使用四元数输出其方向。我首先将它平放在一个表面上并检索四元数 (q_rest)。然后我开始随机旋转它。我想知道它何时绕 y 轴达到 90 度。所以我有一个 q_target 等于 (cos(pi/4) 0 sin(pi/4) 0)

在给定时间 t 如果我的传感器的方向是 q_t 我如何检查 [= =21=]q_t和q_target

即我如何告诉用户谁在旋转传感器,还要旋转多少以及朝哪个方向旋转。

我都做了什么?

我计算了旋转矢量 q_targetq_t 的矢量 q_rest。然后我检查了这两个向量之间的角度。但似乎这不起作用,我相信我对四元数旋转矢量的理解是错误的。我该如何解决这个问题?

你可以将问题表述如下:

您想对当前方向应用旋转 q_diff,以便到达 q_target:

q_t * q_diff = q_target

根据你想q_diff在本地系统还是全局系统中表达,你也可以使用q_diff * q_t

那么,显然:

q_diff = q_t^(-1) * q_target

q_diff 基本上就是到目标旋转的距离。使用角度分量来确定它有多远,并使用轴分量来确定您必须旋转的方向。

当然,您可以将 q_diff 转换为任何其他表示形式,只要对用户最友好即可。