2016-08-28 9 views
2

ストリーミング四元数データを特定の量だけオフセットする必要があります。これを行うには、私は2の間の違いを得ることを計画し、その後、最初の2番目のオフセット。2つの座標系を較正するために2つの四元数の回転差を求める

私はトラブル2.

Using this converterの違いを見つけるのを持っています。

私はこのコードを実行している:私はresultがあることを期待する

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); 
} 

(euler) diff = 45, 90 , 0 

しかし、その代わりに、私は得る:

135,-180,0 
私はここで間違っているつもりです

+1

オイラー角を使ってこれを想像しても分かりません。差回転は、2つの回転元回転の差である角度をもっていない可能性が高いです。とにかく、上の公式で、あなたは 'result * q = q180'のような回転を得ます。これはあなたが望むものではありませんか? –

+0

ok、おそらく私はテストするためにクワットに固執すべきです。私は彼らには新しいし、ユーラーを想像するのにははるかに簡単な時間を持っています!上記のコードは違いを見つけるのに有効ですか?そして、この違いを元のクオートにどのように適用すればよいですか? – anti

+1

オイラー角の問題は、軸を互いに独立して見ることができないことです。このシナリオでは、四元数または回転行列を守る方が良い方法のようです。クォータニオンによって表される回転を簡単な乗算によって更新します(私の最初のコメントを参照)。もちろん、これで出発点に戻ります。 –

答えて

3

あなたが望むのは、座標系の変換です。センサーRSによって回転が測定され、カメラの回転がRCになりました。どちらがROをオフセット(さんがそれを呼びましょう)定数によって関連している:あなたの較正手順中

RS = RC * RO 

または代わり

RC = RS * RO^-1 

、あなたはRSRCを獲得します。ただ、(あなたがセンサー回転からカメラの回転を取得したいので、おそらくRO^-1を)あなたがより頻繁に使用するものを計算する

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

:次に、あなたはとオフセットを計算することができます。

+0

ありがとう! '^'は '力の'です、そうですか?これはコード内でどのように見えますか? (もう一度、私の数学の無知を許してください) – anti

+0

表記「^ -1」は逆です。 –

+0

ああそうです。したがって、上の方程式は次のようになります: RO = Quaternion.Inverse(RC)* RS; そして、私は単純に 'Quaternion.Inverse(RO);'を使って私が望む値を得ることができますか? – anti

関連する問題