Eigenライブラリでピッチ、ヨー、ロールを使用して回転行列を作成するにはどうすればよいですか?
これを行う事前構築された関数を見つけることができなかったので、私はそれを作成しました。これは、将来誰かがこの質問を見つける場合のためにあります
Eigen::AngleAxisd rollAngle(roll, Eigen::Vector3d::UnitZ());
Eigen::AngleAxisd yawAngle(yaw, Eigen::Vector3d::UnitY());
Eigen::AngleAxisd pitchAngle(pitch, Eigen::Vector3d::UnitX());
Eigen::Quaternion<double> q = rollAngle * yawAngle * pitchAngle;
Eigen::Matrix3d rotationMatrix = q.matrix();
Eigenライブラリでピッチ、ヨー、ロールを使用して回転行列を作成するにはどうすればよいですか?
これを行うには48の方法があります。あなたはどれが欲しいですか?ここに要因があります:
シーザーの答えは問題ありませんが、David Hammenが言うように、それはアプリケーションによって異なります。私(水中または空中戦車フィールド)の勝者の組み合わせは次のとおりです。
Eigen::Quaterniond
euler2Quaternion( const double roll,
const double pitch,
const double yaw )
{
Eigen::AngleAxisd rollAngle(roll, Eigen::Vector3d::UnitX());
Eigen::AngleAxisd pitchAngle(pitch, Eigen::Vector3d::UnitY());
Eigen::AngleAxisd yawAngle(yaw, Eigen::Vector3d::UnitZ());
Eigen::Quaterniond q = yawAngle * pitchAngle * rollAngle;
return q;
}
回転行列を作成するために必要なのは、ピッチ、ヨー、ロール、および行列の乗算を実行する機能だけです。
まず、3つの回転行列を作成します。1つは回転軸ごとに1つ(つまり、ピッチ用、ヨー用、ロール用)です。これらの行列には次の値があります。
ピッチマトリックス:
1, 0, 0, 0,
0, cos(pitch), sin(pitch), 0,
0, -sin(pitch), cos(pitch), 0,
0, 0, 0, 1
ヨーマトリックス:
cos(yaw), 0, -sin(yaw), 0,
0, 1, 0, 0,
sin(yaw), 0, cos(yaw), 0,
0, 0, 0, 1
ロールマトリックス:
cos(roll), sin(roll), 0, 0,
-sin(roll), cos(roll), 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
次に、これらすべてを一緒に乗算します。ここでの順序は重要です。通常の回転の場合、最初にロールマトリックスとヨーマトリックスを乗算し、次に積にピッチマトリックスを乗算します。ただし、逆方向に移動して回転を「元に戻す」場合は、逆の順序で乗算を実行する必要があります(角度が反対の値に加えて)。