まず、並進ベクトルについて忘れてください。これは回転とは関係がないためです。並進は物を動かし、回転は向きを変えます。
ロドリゲス パラメータは、軸角度回転とも呼ばれます。それらは 4 つの数値[theta, x, y, z]
で形成されます。つまり、単位ベクトルで表される軸を中心に角度 "シータ" を回転させる必要がありますv=[x, y, z]
。cv::Rodrigues関数リファレンスを見ると、OpenCV は Rodrigues 表記の「コンパクトな」表現を 3 つの要素を持つベクトルとして使用しているようですrod2=[a, b, c]
。
- 回転する角度
theta
は、入力ベクトルのモジュールですtheta = sqrt(a^2 + b^2 + c^2)
- 回転軸
v
は、正規化された入力ベクトルです。v = rod2/theta = [a/theta, b/theta, c/theta]
そのため、solvePnP からのロドリゲス ベクトルは、X、Y、Z 軸の組み合わせを中心とした 3 つの連続した回転を表すオイラー角の表記法とは少しも関係がありません。
両方の回転を比較するには?これは良い質問です。オイラー表現とロドリゲス表現の両方に、特異点とその他の問題があります。たとえば、2 つのオイラー ターンまたは 2 つのロドリゲス パラメータを比較すると、まったく異なって見えるかもしれませんが、実際にはほぼ同じ回転を表しています。両方の回転が同じ (またはおおよそ) かどうかを確認する必要がある場合は、次のアプローチに従うことができます。
- 両方の回転を行列表記に変換します (クォータニオンも有効です)。
- 一方の回転を他方の回転から「減算」します。つまり、一方を他方の反転と連結します
- 回転行列を使用して、一方をもう一方の転置 (逆回転) で乗算します。ヌル回転は恒等行列です。
- クォータニオンを使用して、一方を他方の複素共役で乗算します (最後の 3 つのコンポーネントを無効にします)。
- 結果が null 回転に近いかどうかを確認します。
- Null 回転行列は恒等です。
- ヌル四元数の最初のコンポーネントに 1 または -1 があります