使用四元数为加速度增加重力

问题描述

我是这个平台的新手,所以如果我做错了什么,请在报告之前告诉我!另外,我已经搜索过类似的问题,但找不到我要找的答案。

我有这个问题,我需要将重力分量“添加”到我的线性加速度向量中,我知道这可以用四元数来完成。我的向量:

accelerations = [Xacc,Yacc,Zacc]

以及代表我当前方向的四元数:

q = [w,x,y,z]

假设我从这个位置开始:

q = [1,0]

当然,如果我移动例如我的智能手表,我会在我的加速度向量中获得一些值,在我的四元数中获得一些值,对吗?

我考虑将我的加速度向量转换为四元数形式:

AccQuat = [0,z]

然后通过我的 q 的相反旋转这个四元数,这样我就可以将我的加速度四元数“转换”到地球参考系 q = [1,0],将它转换回向量形式,添加重力向量:

g = [0,-9.81]

完成后,将带有重力的“新”矢量重新添加为四元数形式,将其旋转到其原始位置,然后将其转换回他的矢量形式。

这有点棘手,但我认为可以通过这种方式完成。这是做我想做的事情的正确方法吗?因为除了表示我的位置的已经归一化的四元数和线性加速度向量之外,我没有其他信息。

要乘以四元数,我必须应用:

qOut = q*P*q^-1

通过做 2 个四元数乘法对吗? 例如,如果我有一个四元数表示在我的 Z 轴上旋转 90 度:

q = [0.71,0.71]

如果我想“旋转回”我的加速度四元数,我需要制作

qOut = q*P*q^-1

但是作为 q 我需要使用我的“反向”四元数:

qReverse = [0.71,-0.71]

对吗?

我正在使用 C++ 使代码工作,但我现在的问题是心理过程而不是编码。 谢谢大家的帮助!

========== 编辑 ==================

更多信息: 我有一个名为 World (0,0) 的固定坐标系,它总是与我的地板平行,我的四元数旋转是针对一个名为“0”的系统,它指的是这个 World,它们在 (0,0) 中有相同的中心)。 也许这可以更好地解释:

enter image description here

世界是黑色的,0 是蓝色的 1。

让我们假设我的蓝色轴是我在加速度向量中的 3 个分量。 我想通过简单地添加一个常数 = 0 作为 w 将它们转换为四元数,然后用四元数公式旋转它们(其中 q 是我从数据中得到的四元数的反转):

f = q*P*q^-1

因此它们可以与黑色系统重合。 由此将重力分量从 Z 轴原样 // 添加到地板,然后使用相同的公式将我的“新加速度四元数”旋转到他的原始位置,但反转 q。最后,我想获得我的 accelerations 向量,并添加了重力。我认为可以用四元数来完成。希望这能更好地解释,如果我重复同样的事情,但我对这个论点也是新手,请原谅我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)