2011-06-29 12 views
0

申し訳ありません - 私はこれを知っているべきですが、私はそうではありません。 私は、2つの異なる4x4アフィン変換行列を与える2つの異なるプロセスを通じて、基準参照フレーム(S0)に対する基準フレーム(S1)の位置を計算しました。私は2つの間のエラーを計算したいと思いますが、どのように回転コンポーネントを処理するか分からない。アドバイスが大好きです。2回転の間にエラーが発生しましたか?

ありがとうございました!

+0

です。興味があるものに応じて答えが大きく変わるので、これ以上詳しく説明できますか?あなたは回転*と*の両方の翻訳に対処したいと思うようですが、わかりません。 –

答えて

1

フレームS1からフレームS0への単軸の回転(またはその逆)を探しています。回転の軸は、ここではそれほど重要ではありません。回転角度が必要です。

R0とR1を4x4行列S0とS1の左上の3x3回転行列とします。今、E = R0 *転置(R1)を計算(または(R0)* R1を転置;。それは本当に問題でどのません)

今、私はいくつかの毛の詳細を(アウト残してきた

d(0) = E(1,2) - E(2,1) 
d(1) = E(2,0) - E(0,2) 
d(2) = E(0,1) - E(1,0) 

dmag = sqrt(d(0)*d(0) + d(1)*d(1) + d(2)*d(2)) 

phi = asin (dmag/2) 

を計算これらの詳細はあなたをかむことができます)。特に、非常に大きな誤差角度(誤差> 90度)では無効であり、大きな誤差角度(角度> 45度)では不正確です。

行列から単軸回転を抽出する汎用関数を使用している場合は、それを使用します。または、行列から四元数を抽出する汎用関数を使用している場合は、それを使用します。 (一軸回転と四元数は互いに非常に密接に関連しています)。

2

R0とR1が同じであると考えられる2つの回転行列である場合、R0 * R1 'は同一でなければなりません。 R0 * R1 'に対応する回転ベクトルの大きさは、同一性からの回転(典型的にはラジアン)である。回転行列を回転ベクトルに変換することは、Rodriguesの公式によって効率的に行われます。一般的なユースケースで、あなたの質問に答えるために

、PythonとOpenCVのは、エラーがそれはあなたがあなたのエラーがキャプチャしたいものに依存

r, _ = cv2.Rodrigues(R0.dot(R1.T)) 
rotation_error_from_identity = np.linalg.norm(r) 
関連する問題