欧拉角表示的旋转相乘计算

在Eigen中用欧拉角表示旋转时,单次旋转多个角度和多次旋转单个角度的结果是不同的。具体试验如下:

在VS2017中用Eigen分别初始化两个欧拉角旋转:

第一个:欧拉角旋转为(M_PI / 2, 0, M_PI / 4)

Eigen::Vector3d rotation_eulerAngle1(M_PI / 2, 0, M_PI / 4);    // 欧拉角	ZYX
Eigen::AngleAxisd rollAngle1(Eigen::AngleAxisd(rotation_eulerAngle1(2), Eigen::Vector3d::UnitX()));	// X
Eigen::AngleAxisd pitchAngle1(Eigen::AngleAxisd(rotation_eulerAngle1(1), Eigen::Vector3d::UnitY()));	// Y
Eigen::AngleAxisd yawAngle1(Eigen::AngleAxisd(rotation_eulerAngle1(0), Eigen::Vector3d::UnitZ()));	// Z

第二个:欧拉角旋转为(M_PI / 2, 0, 0)和(0, 0, M_PI / 4)相乘,相乘结果用旋转向量表示(这里无所谓,因为后面我要用到旋转向量)

Eigen::Vector3d rotation_eulerAngle1(M_PI / 2, 0, M_PI / 4);    // 欧拉角	ZYX
Eigen::AngleAxisd rollAngle1(Eigen::AngleAxisd(rotation_eulerAngle1(2), Eigen::Vector3d::UnitX()));	// X
Eigen::AngleAxisd pitchAngle1(Eigen::AngleAxisd(rotation_eulerAngle1(1), Eigen::Vector3d::UnitY()));	// Y
Eigen::AngleAxisd yawAngle1(Eigen::AngleAxisd(rotation_eulerAngle1(0), Eigen::Vector3d::UnitZ()));	// Z

Eigen::Vector3d rotation_eulerAngle2(0, 0, 0);    // 欧拉角	ZYX
Eigen::AngleAxisd rollAngle2(Eigen::AngleAxisd(rotation_eulerAngle2(2), Eigen::Vector3d::UnitX()));	// X
Eigen::AngleAxisd pitchAngle2(Eigen::AngleAxisd(rotation_eulerAngle2(1), Eigen::Vector3d::UnitY()));	// Y
Eigen::AngleAxisd yawAngle2(Eigen::AngleAxisd(rotation_eulerAngle2(0), Eigen::Vector3d::UnitZ()));	// Z

Eigen::Matrix3d rotation_mat1; 
rotation_mat1 = rollAngle1 * pitchAngle1 * yawAngle1;

Eigen::Matrix3d rotation_mat2;
rotation_mat2 = rollAngle2 * pitchAngle2 * yawAngle2;

Eigen::AngleAxisd vec;  // 旋转向量
vec = rotation_mat1 * rotation_mat2;

旋转结果使用opencv的aruco.hpp模块,首先将相机坐标系沿z轴平移1m,再分别经过上面两个旋转后使用cv::aruco::drawAxis()函数显示在图像中。

aruco模块的相机坐标系如图所示:

欧拉角表示的旋转相乘计算

在上述两种欧拉角下,相机坐标系的变换结果分别如下(其中红色是x轴,绿色是y轴,蓝色是z轴):

欧拉角表示的旋转相乘计算  欧拉角表示的旋转相乘计算

分析结果可以看出,

当欧拉角为(M_PI / 2, 0, M_PI / 4)时,旋转轴分别为相机坐标系的轴;

而当欧拉角为(M_PI / 2, 0, 0)和(0, 0, M_PI / 4)时,旋转轴分别是每次旋转之后的坐标系对应的轴。

欧拉角表示的旋转相乘计算欧拉角表示的旋转相乘计算 千羽QY 发布了17 篇原创文章 · 获赞 11 · 访问量 3721 私信 关注
上一篇:Visual Studio 2010+Oracle 10g +NHibernate配置


下一篇:直线段-两点线性插值及可视化