位置、方向、座標変換
座標フレームは剛体に取り付けられ、剛体間の相対的な姿勢(位置と方向)を表します。次に、これら 2 つの座標フレーム間の幾何学的関係が指定されます。
位置
あるフレームの別のフレームに対する原点の位置は translation vector (3x1) で表すことができます。
方向
別のフレームに対する 1 つの座標フレームの方向は、 rotation matrix (3x3) で記述できます。
ポーズ
homogeneous transformation matrix (4x4) は、別の座標フレームに対する 1 つの座標フレームの位置と方向を同時に表します。
ロール・ピッチ・ヨー
A rigid body possesses at most three rotational degrees of freedom. In other words, only three independent quantities are sufficient to describe an arbitrary rigid body orientation. One such minimal representation of orientation is the roll-pitch-yaw representation, defined by roll (\(\phi\)), pitch (\(\theta\)), and yaw (\(\psi\)) angles:
ロール・ピッチ・ヨー表現の利点は、必要な値が 3 つだけであることです。これらの値は、他の表現と比較して幾何学的にも理解しやすいものです。欠点は次のとおりです。
値は連続していません。
最終的な方向は以下によって決まります。
回転を適用する順序。
移動軸(固有回転)または固定軸(外部回転)を中心とした回転の適用。
ロール・ピッチ・ヨー表現はロボットベンダー間で一般的です。ただし、すべてのロボットベンダーが同じ規則を前提としているわけではありません。ロール・ピッチ・ヨー角を他の表現に変換するには、規則、つまり回転の順序とそれらが固有回転であるか外部回転であるかを理解する必要があります。
軸角度 / 回転ベクトル
Axis-angle 表現では次のことが説明されます。
回転方向の軸を示す単位ベクトル( \(\boldsymbol{u}\) )による回転。
軸を中心とした回転の大きさを表す角度( \(\theta\) )。
パラメータは全部で 4 つあります。単位ベクトルの各要素に角度を乗算することは、パラメータの数を最小限に抑えるための一般的な方法であり、その結果が回転ベクトル( \(\boldsymbol{r}\) )になります。
ロール・ピッチ・ヨー角に対する軸角度表現の利点は、連続性や回転順序の問題がないことです。ただし、物理的な方向と回転ベクトルの数値を一致させるのは困難です。もう 1 つの欠点は、3D ポイントに回転を直接適用できないことです。これには、別の表現への変換が必要です。
単位四元数
Unit quaternions は、4 つのパラメータを使用して軸角度表現をエンコードするためのシンプルかつ堅牢な方法を表します。
単位四元数は、回転行列よりもコンパクトで数値的に安定しており、効率的であるため、2 つの座標フレーム間の方向を表す最良の方法と考えられています。ロール・ピッチ・ヨー表現と比較して、単位四元数はジンバルロック(方向を一意に表現することが不可能)の影響を受けません。また、軸角度表現とは異なり、単位四元数を 3D ポイントに直接適用することができます。
注釈
一般的な方向表現間の変換 もご参照ください。
座標変換
3D 空間における剛体の座標変換は、回転と並進によって記述できます。例えば、ある座標系( \(b\) )から別の座標系( \(a\) )へ点(または点群)を変換することが可能です。これは 回転行列 と 並進ベクトル を用いて実行できます。
同じことは、2 つのフレーム間の姿勢を記述する同次の 変換行列 を使用しても実行できます。
ここで \(\widetilde{p}^{a}\) および \(\widetilde{p}^{b}\) は、それぞれベクトル \(p^{a}\) および \(p^{b}\) の同次表現です。
上記の式における同次変換行列 \(\boldsymbol{H}^{a}_{b}\) は以下を表します。
座標系 \(b\) 内の点 \(p^{b}\) を座標系 \(a\) 内の点 \(p^{a}\) に変換する操作(座標変換行列)
座標系 \(b\) に対して定義された点 \(p^{b}\) を、座標系 \(a\) に対して定義されたように表現する操作(座標変換行列)
フレーム \(b\) のフレーム \(a\) に対する姿勢(位置と方向)
フレーム \(a\) からフレーム \(b\) への変換(位置と方向)を同次変換行列として表したもの
コードサンプルでは、この変換行列に対して次の表記法を使用します: a_to_b_transform または b_pose_in_a_frame 。