【Eigen库使用】角轴、旋转矩阵、欧拉角、四元数转换

这篇具有很好参考价值的文章主要介绍了【Eigen库使用】角轴、旋转矩阵、欧拉角、四元数转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

零、前言

在slam中经常用到的四种描述机器人orientation的变量,他们之间可以相互转化,使用Eigen库可以很容易的做到这一点,需要特别关注的是:欧拉角与其余量之间的转换关系

1)首先要明确的是,必须要明确欧拉角的旋转次序,你可以选择RPY、YPR等方式,在相同的orientation下,旋转次序会影响欧拉角三分量的数值,也会影响欧拉角与其他旋转表示的转换关系,但是不会影响转换结果;也就是说,旋转次序是你自己根据习惯选择的,在把欧拉角转换为其他形式时,也要根据选择的次序使用对应的转换关系

2)欧拉角转换为其他表示,一般使用旋转向量(角轴)作为过渡,即,首先将欧拉角三个分量变成角轴,再将三个角轴乘在一起(乘的顺序要和旋转次序相匹配)得到角轴,使用角轴可以很方便的过渡到旋转矩阵或四元数;

3)其他表示转换为欧拉角,使用的是eulerAngles(0,1,2)方法,其中012表示转换得到的欧拉角向量的旋转次序是XYZ即RPY,如果想得到YPR格式的欧拉角,使用eulerAngles(2,1,0);即可。

一、旋转向量

1.1 初始化旋转向量
旋转角为alpha(顺时针),旋转轴为(x,y,z)

Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z))
Eigen::AngleAxisd yawAngle(alpha,Vector3d::UnitZ());

1.2 旋转向量转旋转矩阵
Eigen::Matrix3d rotation_matrix;
rotation_matrix=rotation_vector.matrix();
Eigen::Matrix3d rotation_matrix;
rotation_matrix=rotation_vector.toRotationMatrix();

1.3 旋转向量转欧拉角(xyz,即RPY)
Eigen::Vector3d eulerAngle=rotation_vector.matrix().eulerAngles(0,1,2);

1.4 旋转向量转四元数
Eigen::Quaterniond quaternion(rotation_vector);
Eigen::Quaterniond quaternion;
Quaterniond quaternion;

Eigen::Quaterniond quaternion;
quaternion=rotation_vector;

二、旋转矩阵

2.1 初始化旋转矩阵
Eigen::Matrix3d rotation_matrix;
rotation_matrix<<x_00,x_01,x_02,x_10,x_11,x_12,x_20,x_21,x_22;

2.2 旋转矩阵转旋转向量
Eigen::AngleAxisd rotation_vector(rotation_matrix);
Eigen::AngleAxisd rotation_vector;
rotation_vector=rotation_matrix;

Eigen::AngleAxisd rotation_vector;
rotation_vector.fromRotationMatrix(rotation_matrix);

2.3 旋转矩阵转欧拉角(xyz,即RPY)
Eigen::Vector3d eulerAngle=rotation_matrix.eulerAngles(0,1,2);

2.4 旋转矩阵转四元数
Eigen::Quaterniond quaternion(rotation_matrix);
Eigen::Quaterniond quaternion;
quaternion=rotation_matrix;

三、欧拉角

3.1 初始化欧拉角(xyz,即RPY)
Eigen::Vector3d eulerAngle(roll,pitch,yaw);

3.2 欧拉角转旋转向量
Eigen::AngleAxisd rollAngle(AngleAxisd(eulerAngle(0),Vector3d::UnitX()));
Eigen::AngleAxisd pitchAngle(AngleAxisd(eulerAngle(1),Vector3d::UnitY()));
Eigen::AngleAxisd yawAngle(AngleAxisd(eulerAngle(2),Vector3d::UnitZ()));

Eigen::AngleAxisd rotation_vector;
rotation_vector=yawAnglepitchAnglerollAngle;

3.3 欧拉角转旋转矩阵
Eigen::AngleAxisd rollAngle(AngleAxisd(eulerAngle(0),Vector3d::UnitX()));
Eigen::AngleAxisd pitchAngle(AngleAxisd(eulerAngle(1),Vector3d::UnitY()));
Eigen::AngleAxisd yawAngle(AngleAxisd(eulerAngle(2),Vector3d::UnitZ()));

Eigen::Matrix3d rotation_matrix;
rotation_matrix=yawAnglepitchAnglerollAngle;

3.4 欧拉角转四元数
Eigen::AngleAxisd rollAngle(AngleAxisd(eulerAngle(0),Vector3d::UnitX()));
Eigen::AngleAxisd pitchAngle(AngleAxisd(eulerAngle(1),Vector3d::UnitY()));
Eigen::AngleAxisd yawAngle(AngleAxisd(eulerAngle(2),Vector3d::UnitZ()));

Eigen::Quaterniond quaternion;
quaternion=yawAnglepitchAnglerollAngle;

四、四元数

4.1 初始化四元数
Eigen::Quaterniond quaternion(w,x,y,z);

4.2 四元数转旋转向量
Eigen::AngleAxisd rotation_vector(quaternion);
Eigen::AngleAxisd rotation_vector;
rotation_vector=quaternion;

4.3 四元数转旋转矩阵
Eigen::Matrix3d rotation_matrix;
rotation_matrix=quaternion.matrix();

Eigen::Matrix3d rotation_matrix;
rotation_matrix=quaternion.toRotationMatrix();

4.4 四元数转欧拉角(xyz,即RPY)
Eigen::Vector3d eulerAngle=quaternion.matrix().eulerAngles(0,1,2);文章来源地址https://www.toymoban.com/news/detail-802485.html

到了这里,关于【Eigen库使用】角轴、旋转矩阵、欧拉角、四元数转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS系列——使用python的transforms3d、numpy库实现四元数、旋转矩阵、欧拉角、轴角等的相互转换

    pip3 install transforms3d 四元数模块在transforms3d.quaternions里,直接导入即可使用 2.1.1四元数转旋转矩阵 2.1.2 旋转矩阵转四元数 2.2.1 四元数转轴角 2.2.2 轴角转四元数 四元数模块在transforms3d.euler里,直接导入即可使用 3.1.1 固定轴欧拉角转四元数 3.1.2 四元数转固定轴欧拉角 3.2.1 固定

    2024年02月07日
    浏览(93)
  • 《动手学机器人学》7.2.4姿态之间的互相转换,Python&&C++支持四元数,欧拉角旋转矩阵、轴角

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。 上一节小鱼带你一起学习了四种姿态表示方式,这节课我们就利用相关的开源库,来完成姿态的不同表示方式之间的转

    2024年02月02日
    浏览(47)
  • 【数理知识】三维空间旋转矩阵的欧拉角表示法,四元数表示法,两者之间的转换,Matlab 代码实现

    序号 内容 1 【数理知识】自由度 degree of freedom 及自由度的计算方法 2 【数理知识】刚体 rigid body 及刚体的运动 3 【数理知识】刚体基本运动,平动,转动 4 【数理知识】向量数乘,内积,外积,matlab代码实现 5 【数理知识】最小二乘法,从线性回归出发,数值举例并用最小

    2024年02月12日
    浏览(50)
  • 数学概率 | 旋转矩阵、欧拉角、四元数

    目录 一,旋转矩阵 二维旋转矩阵 三维旋转矩阵 二,欧拉角 三,四元数 四,矩阵、欧拉角、四元数相互转换 四元数转矩阵 矩阵转四元数 欧拉角转矩阵 矩阵转欧拉角 欧拉角转四元数 四元数转欧拉角 二维旋转矩阵 R() =  推导,以二维平面为例旋转:  = cos( + ) = coscos - si

    2024年02月06日
    浏览(48)
  • 欧拉角,轴角,四元数与旋转矩阵详解

    入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、欧拉角 1、静态定义 2、欧拉角的表示  3、欧拉角表示的优缺点  4、欧拉角的万向节死锁(静态不存在万向锁的问题) 二、四元数 1、提出意义和定

    2024年01月17日
    浏览(46)
  • 四元数,旋转矩阵,欧拉角互转(python)

    运行代码之前需要安装pyquaternion和scipy。 pip install pyquaternion pip install scipy 代码之前放下面,main函数有使用的方式

    2024年02月12日
    浏览(46)
  • 欧拉角,四元数和旋转矩阵互转代码【python版】

    欧拉角以 Roll、Pitch、Yaw 的顺序表示 四元数以[ q w q_w q w ​ , q x q_x q x ​ , q y q_y q y ​ , q z q_z q z ​ ]的顺序表示 代码包括了 欧拉角与四元数互转 , 旋转矩阵与四元数互转 , 欧拉角与旋转矩阵互转 ,输入参数均为 np.array 形式 代码内置了角度制和弧度制😃😃 当时因为这块

    2023年04月22日
    浏览(53)
  • ABB机器人欧拉角与四元数的相互转化以及旋转矩阵的求法

    做项目时用到ABB机器人,直接通过ABB内置的函数可以轻松实现四元数读数与欧拉角的相互转化。但实际项目需要从示教器读出相关位置并自行计算,尤其需要计算旋转矩阵。 本文以 ABB IRB120机器人 (不确定其他机器人是否与ABB机器人一致)为例如下姿态为例来描述上述几个量

    2024年02月03日
    浏览(57)
  • 使用Matlab机器人工具箱完成四元数到旋转矩阵的转换,附程序

    在进行机械臂操作或写论文时,经常需要进行四元数、旋转矩阵、欧拉角等的转换。 此时,我们利用matlab里的机器人工具箱(Peter 开发)内置的函数就可完成,具体程序如下: 环境:Matlab2020b+robotics toolbox(安装方法在前几期文章里有) 此时运行matlab可得以下结果: 重要注

    2024年02月13日
    浏览(56)
  • eigen旋转矩阵与欧拉角的转换

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包