2016-08-28 258 views
2

我需要将流四元数数据偏移一定的量。要做到这一点,我打算得到2之间的差异,然后第一个抵消第一个。找到两个四元数之间的旋转差异来校准两个坐标系

我无法找到2

Using this converter之间的差异。

我运行这段代码:

public void convertQuat180() 
{ 
    Quaternion q = new Quaternion(0.65328f, 0.2706f, 0.65328f, -0.2706f); //45,180,0 

    Quaternion q180 = new Quaternion(0.70711f, 0, 0.70711f, 0); // 0,90,0 

    Quaternion result = q180 * Quaternion.Inverse(q); 

    Console.WriteLine(result); 
} 

我希望result是:

(euler) diff = 45, 90 , 0 

而是我得到:

135,-180,0 

我要去哪里错了吗?

+1

我不确定使用欧拉角来想象这是否合理。差异旋转最有可能不具有两个源旋转的差异的角度。无论如何,用上面的公式,你会得到一个旋转,例如'result * q = q180'。这不是你想要的吗? –

+0

好的,也许我应该坚持quats测试。我对他们来说是新的,想象欧盟的时候更容易!上述代码是否有效找到差异?然后,我会如何将这个差异应用于原始的四元组? – anti

+1

欧拉角的问题是轴不能彼此独立。坚持四元数或旋转矩阵似乎是这种情况下更好的选择。你用简单的乘法来更新由四元数表示的旋转(参见我的第一条评论)。但是,当然,这会让你回到起点。 –

回答

3

你想要的是坐标系的变换。您有一个由传感器RS测量的旋转和相机的旋转RC。两者都是由一个常数相关的(姑且称之为)偏移RO

RS = RC * RO 

或可替代

RC = RS * RO^-1 

在你的校准过程中,你获得RSRC。然后,你可以计算偏移量为:

RO = RC^-1 * RS 
RO^-1 = RS^-1 * RC 

只是计算(因为你想从传感器旋转摄像头的旋转可能RO^-1),您将使用更多的往往是一个。

+0

谢谢! '^'是''的力量,是吗?这在代码中会是什么样子? (再次请原谅我的数学无知) – anti

+0

符号'^ -1'是相反的。 –

+0

啊我明白了。所以,你上面的公式是: 'RO = Quaternion.Inverse(RC)* RS;' 然后我可以简单地使用'Quaternion.Inverse(RO);'来获得我想要的值? – anti

相关问题