标签:Eigen Vector3d 旋转 AngleAxisd 相乘 rotation PI 欧拉角
在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 私信 关注标签:Eigen,Vector3d,旋转,AngleAxisd,相乘,rotation,PI,欧拉角 来源: https://blog.csdn.net/qq_40081208/article/details/104184149
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。