申し訳ありません - 私はこれを知っているべきですが、私はそうではありません。 私は、2つの異なる4x4アフィン変換行列を与える2つの異なるプロセスを通じて、基準参照フレーム(S0)に対する基準フレーム(S1)の位置を計算しました。私は2つの間のエラーを計算したいと思いますが、どのように回転コンポーネントを処理するか分からない。アドバイスが大好きです。2回転の間にエラーが発生しましたか?
ありがとうございました!
申し訳ありません - 私はこれを知っているべきですが、私はそうではありません。 私は、2つの異なる4x4アフィン変換行列を与える2つの異なるプロセスを通じて、基準参照フレーム(S0)に対する基準フレーム(S1)の位置を計算しました。私は2つの間のエラーを計算したいと思いますが、どのように回転コンポーネントを処理するか分からない。アドバイスが大好きです。2回転の間にエラーが発生しましたか?
ありがとうございました!
フレーム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度)では不正確です。
行列から単軸回転を抽出する汎用関数を使用している場合は、それを使用します。または、行列から四元数を抽出する汎用関数を使用している場合は、それを使用します。 (一軸回転と四元数は互いに非常に密接に関連しています)。
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)
です。興味があるものに応じて答えが大きく変わるので、これ以上詳しく説明できますか?あなたは回転*と*の両方の翻訳に対処したいと思うようですが、わかりません。 –