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

时间:2016-12-02 09:22:51

标签: c# math rotation orientation quaternions

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

如果传感器的方向为 q_t ,则在给定时间 t 如何检查 q_t q_target之间的相关性

即。如何告知正在旋转传感器的用户,旋转多少以及向哪个方向旋转。

我已经做了什么?

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

1 个答案:

答案 0 :(得分:1)

您可以按如下方式制定问题:

您希望将轮换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转换为任何其他表示形式,无论用户最友好。