四元数,欧拉角和旋转矩阵相互转换

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

#include <iostream>
#include <Eigen/Dense>
#include <pcl/pcl_macros.h>
using namespace Eigen;
using namespace std;
int main()
{
    Eigen::Matrix<float, 4, 4> transformation = Eigen::Matrix<float, 4, 4>::Identity();
    Eigen::Quaterniond quaternion;

    //1,从弧度(欧拉角)转四元数
    float yaw = M_PI / 4; // 弧度角
    //float pitch = M_PI / 4; // 弧度角
    //float roll = M_PI / 4; // 弧度角
    float pitch = 0; // 弧度角
    float roll = 0; // 弧度角
    quaternion =    Eigen::AngleAxisd(yaw, Eigen::Vector3d::UnitZ()) *
                    Eigen::AngleAxisd(pitch, Eigen::Vector3d::UnitY()) *
                    Eigen::AngleAxisd(roll, Eigen::Vector3d::UnitX());
    cout << "4元数w:" << endl << quaternion.w() << endl;
    cout << "4元数x:" << endl << quaternion.x() << endl;
    cout << "4元数y:" << endl << quaternion.y() << endl;
    cout << "4元数z:" << endl << quaternion.z() << endl;
    cout << "4元数:" << endl << quaternion.matrix() << endl;
    Eigen::Isometry3d iso = Eigen::Translation3d(1,2,3) * quaternion;
    Eigen::Matrix4d res = iso.matrix();
    cout << "等距映射:" << endl << res << endl;


    // 2,从旋转矩阵构造四元数
    Eigen::Matrix<double, 3, 3> rot;
    rot = quaternion.matrix();
    Eigen::Quaterniond qua(rot);
    cout << "qua4元数w:" << endl << qua.w() << endl;
    cout << "qua4元数x:" << endl << qua.x() << endl;
    cout << "qua4元数y:" << endl << qua.y() << endl;
    cout << "qua4元数z:" << endl << qua.z() << endl;

    // 3,从四元数转换为旋转矩阵
    Eigen::Matrix<double, 3, 3> rotation = qua.toRotationMatrix();
    cout << "旋转矩阵:" << endl << rotation << endl;

    // 4,从四元数转换为欧拉角
    Eigen::Vector3d euler = qua.toRotationMatrix().eulerAngles(2, 1, 0);
    cout << "欧拉角:" << endl << euler << endl;  //弧度单位

    // 5,从欧拉角转换为旋转矩阵(先转四元数, 再转旋转矩阵)
    //Eigen::Quaterniond quaternion_1 =   Eigen::AngleAxisd(yaw, Eigen::Vector3d::UnitZ()) *
    //                                    Eigen::AngleAxisd(pitch, Eigen::Vector3d::UnitY()) *
    //                                    Eigen::AngleAxisd(roll, Eigen::Vector3d::UnitX());
    Eigen::Quaterniond quaternion_1 =   Eigen::AngleAxisd(euler(0), Eigen::Vector3d::UnitZ()) *
                                        Eigen::AngleAxisd(euler(1), Eigen::Vector3d::UnitY()) *
                                        Eigen::AngleAxisd(euler(2), Eigen::Vector3d::UnitX());
    Eigen::Matrix3d rotation_2 = quaternion_1.toRotationMatrix();
    cout << "旋转矩阵:" << endl << rotation_2 << endl;  //弧度单位
    return 0;
}

打印输出:

4元数w:
0.844623
4元数x:
0.191342
4元数y:
0.46194
4元数z:
0.191342
4元数:
      0.5 -0.146447  0.853553
      0.5  0.853553 -0.146447
-0.707107       0.5       0.5
等距映射:
      0.5 -0.146447  0.853553         1
      0.5  0.853553 -0.146447         2
-0.707107       0.5       0.5         3
        0         0         0         1
qua4元数w:
0.844623
qua4元数x:
0.191342
qua4元数y:
0.46194
qua4元数z:
0.191342
旋转矩阵:
      0.5 -0.146447  0.853553
      0.5  0.853553 -0.146447
-0.707107       0.5       0.5
欧拉角:
0.785398
0.785398
0.785398
旋转矩阵:
      0.5 -0.146447  0.853553
      0.5  0.853553 -0.146447
-0.707107       0.5       0.5

E:\c++\dianyun_3\x64\Debug\dianyun_1.exe (进程 81544)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

四元数 在线转化,矩阵,线性代数
在线转换网站:1、三维在线旋转变换网站 https://www.andre-gaschler.com/rotationconverter/
2、 Rotation Conversion Tool https://danceswithcode.net/engineeringnotes/quaternions/conversion_tool.html
3、角度、弧度在线转换工具 https://www.osgeo.cn/app/sc210

参考链接:https://www.jianshu.com/p/4fda4c34b829
https://blog.csdn.net/hw140701/article/details/106255294文章来源地址https://www.toymoban.com/news/detail-626461.html

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

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

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

相关文章

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

    在slam中经常用到的四种描述机器人orientation的变量,他们之间可以相互转化,使用Eigen库可以很容易的做到这一点, 需要特别关注的是:欧拉角与其余量之间的转换关系 : 1)首先要明确的是, 必须要明确欧拉角的旋转次序 ,你可以选择RPY、YPR等方式,在相同的orientation下,

    2024年01月18日
    浏览(35)
  • 持之以恒(一)位姿转换:姿态 / 四元数 / 旋转矩阵 / 欧拉角 及 位姿矩阵

    姿态的几种表示形式, 姿态角 、 四元数 、 欧拉角 、 旋转矩阵 、 位姿矩阵 。 姿态 说明 表示形式 Eigen 姿态角 指的是机体坐标系与地理坐标系的夹角,即旋转向量 rx,ry,rz Eigen::Vector3f(Degrees) 四元数 四元素不存在万向节死锁问题、利用球面插值可以获得均匀的转速 w,x,y,z

    2024年02月15日
    浏览(42)
  • 车辆姿态表达:旋转矩阵、欧拉角、四元数的转换以及eigen、matlab、pathon方法实现

    旋转矩阵、欧拉角、四元数主要用于表示坐标系中的旋转关系,通过三者之间的转换可以减小一些算法的复杂度。 本文主要概述旋转矩阵、欧拉角、四元数的基本理论、三者之间的转换关系以及三者转换在eigen、matlab和pathon上的方法实现。 对于两个三维点 p1 、 p2 : p 1 ( x

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

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

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

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

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

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

    2024年02月06日
    浏览(37)
  • 四元数,旋转矩阵,欧拉角互转(python)

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

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

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

    2024年01月17日
    浏览(32)
  • 欧拉角,四元数和旋转矩阵互转代码【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日
    浏览(42)
  • 欧拉角和旋转矩阵之间的转换

    在3D 空间中,表示物体的旋转可以由三个欧拉角来表示:  pitch围绕X轴旋转,叫俯仰角。  yaw围绕Y轴旋转,叫偏航角。  roll围绕Z轴旋转,叫翻滚角。  这三个角的顺序对旋转结果有影响。     此处得到结论: 自旋转的“先转的放前面”  将旋转矩阵表示如下:    则可以

    2024年02月13日
    浏览(22)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包