找到两个四元数之间的旋转差异以校准两个坐标系
Find the rotational difference between two quaternions to calibrate two coordinate systems
我需要将流式四元数数据偏移特定数量。为此,我计划求出两者之间的差值,然后用第二个抵消第一个。
我找不到两者之间的区别。
我是运行这个代码:
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
我哪里错了?
你要的是坐标系的变换。您有一个由传感器 RS
测量的旋转和一个相机的旋转 RC
。两者都由一个常量(我们称之为)偏移相关 RO
:
RS = RC * RO
或者
RC = RS * RO^-1
在校准过程中,您获得了 RS
和 RC
。然后,您可以将偏移量计算为:
RO = RC^-1 * RS
RO^-1 = RS^-1 * RC
只计算你会更频繁使用的那个(可能RO^-1
因为你想从传感器旋转中获取相机旋转)。
我需要将流式四元数数据偏移特定数量。为此,我计划求出两者之间的差值,然后用第二个抵消第一个。
我找不到两者之间的区别。
我是运行这个代码:
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
我哪里错了?
你要的是坐标系的变换。您有一个由传感器 RS
测量的旋转和一个相机的旋转 RC
。两者都由一个常量(我们称之为)偏移相关 RO
:
RS = RC * RO
或者
RC = RS * RO^-1
在校准过程中,您获得了 RS
和 RC
。然后,您可以将偏移量计算为:
RO = RC^-1 * RS
RO^-1 = RS^-1 * RC
只计算你会更频繁使用的那个(可能RO^-1
因为你想从传感器旋转中获取相机旋转)。