1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4
 5 #include <Eigen/Core>
 6 // Eigen 几何模块
 7 #include <Eigen/Geometry>
 8
 9
10 int main ( int argc, char** argv )
11 {
12
13     //旋转矩阵R
14     //3X3的旋转矩阵可以用Matrix3d,也Matrix3f
15     Eigen::Matrix3d R=Eigen::Matrix3d::Identity();//将其赋值为单位矩阵
16 //    Eigen::Matrix3d R;
17 //    R.setIdentity();  //也是将旋转矩阵赋值为单位矩阵,与上面效果一样
18     cout<<"R= \n"<<R<<endl;
19
20     //旋转向量v(轴角)
21     //旋转向量使用AngleAxisd(f),底层不直接是Matrix,但因为重载了运算符,运算可以当作矩阵
22     Eigen::AngleAxisd v(M_PI/4,Eigen::Vector3d(0,0,1));//沿z轴旋转了45度
23     cout << "rotation vector: Angle is: " << v.angle() * (180 / M_PI)<<endl//旋转角
24          << "  Axis is: " << v.axis().transpose() << endl<<endl;//旋转轴
25     //将旋转向量转换为旋转矩阵
26     //方式一:用matrix()
27 //    R=v.matrix();
28     //方式二:用toRotationMatrix()
29     R=v.toRotationMatrix();
30     cout<<"R=\n"<<R<<endl<<endl;
31     //将旋转向量转化为四元数q
32     Eigen::Quaterniond q = Eigen::Quaterniond(v);
33     cout<<"q=\n"<<q.coeffs()<<endl<<endl;//coeffs的顺序:(x,y,z,w)
34     cout<<"q=\n"<<q.x()<<endl<<q.y()<<endl<<q.z()<<endl<<q.w()<<endl<<endl;//四元数的另一种输出方式
35
36
37     //将旋转矩阵转化为四元数
38     q = Eigen::Quaterniond(R);
39      cout<<"q=\n"<<q.coeffs()<<endl<<endl;
40     //将旋转矩阵转化为欧拉角
41      Eigen::Vector3d euler_angles=R.eulerAngles(2,1,0);
42      cout<<"yaw(Z) pitch(Y) roll(X)=\n"<<euler_angles.transpose()<<endl<<endl;
43
44
45      //将四元数转化为旋转矩阵
46      R=Eigen::Matrix3d(q);
47      cout<<"R=\n"<<R<<endl<<endl;
48
49      //将四元数转化为旋转向量
50      v=Eigen::AngleAxisd(q);
51      cout<<v.matrix()<<endl<<endl;
52         return 0;
53 }

运行结果:R=
1 0 0
0 1 0
0 0 1
rotation vector: Angle is: 45
  Axis is: 0 0 1

R=
 0.707107 -0.707107         0
 0.707107  0.707107         0
        0         0         1

q=
       0
       0
0.382683
 0.92388

q=
0
0
0.382683
0.92388

q=
       0
       0
0.382683
 0.92388

yaw(Z) pitch(Y) roll(X)=
0.785398       -0        0

R=
 0.707107 -0.707107         0
 0.707107  0.707107         0
        0         0         1

0.707107 -0.707107         0
 0.707107  0.707107         0
        0         0         1

转载于:https://www.cnblogs.com/cc111/p/9354924.html

旋转矩阵、旋转向量(轴角)、四元数、欧拉角之间相互转换的代码实现(利用Eigen实现)...相关推荐

  1. 【自动驾驶】30.c++实现基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换(附代码)

    矩阵的使用可参考系列博客:点击此处 原文链接:基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换. 也可以参考另一篇博客:eigen 中四元数.欧拉角.旋转矩阵.旋转向量. ...

  2. 一、旋转矩阵,旋转向量,单位四元数的相互转换总结

    文章目录 前言 一.要点 1. 旋转矩阵 2. 旋转向量 3. 单位四元数 二.旋转向量--->旋转矩阵(罗德里格斯公式) 三.旋转矩阵--->旋转向量 四.单位四元数--->旋转矩 ...

  3. 三维旋转四元数系列(2.三维旋转之轴角与罗德里格斯公式推导)

    序:上两节我们介绍了复数的基本概念与性质,以及复数与二维旋转的关系. 三维旋转四元数系列(0.复数基本介绍)https://blog.csdn.net/SKANK911/article/details ...

  4. 三维坐标变换(旋转矩阵旋转向量)

    矩阵运算显然是计算机三维坐标变换最简单方便的计算方法,因此在 opencv.opengl.工业机器人等开发中,提到位姿旋转变换,多半用的是旋转矩阵.然而,用矩阵来表示一个旋转关系有两个缺点: 首先,通 ...

  5. python二郎成长笔记(三)(matlab标定工具箱详解,旋转矩阵旋转向量,matlab标定数据传入opencv)

    这一章由来:二郎之前研究matlab的双目立体视觉,已经得到了需要的信息,可是,二郎想要对代码进行修改使其更适宜自己的应用目的. 修改:标定不用修改--matlab内置的已经很强大了,而且没有必要用p ...

  6. 刚体运动中的坐标变换-旋转矩阵、旋转向量、欧拉角及四元数

    坐标变换及其方法 1.转化关系图 2 换算关系 3.1 旋转矩阵换算至其他 3.2 四元数换算至其他 3.3 旋转向量转换至旋转矩阵与四元数 3.3 欧拉角转换到旋转矩阵和四元数 3 坐标变换 4 坐 ...

  7. eigen 编译_头条 | 使用eigen实现四元数、欧拉角、旋转矩阵、旋转向量间的转换...

    点击上方蓝字,关注本公众号,获得更多资源上一篇文章介绍了四元数.欧拉角.旋转矩阵.轴角如何相互转换,本篇文章介绍如何用eigen来实现. 旋转向量 1,初始化旋转向量:旋转角为alpha,旋转轴为(x ...

  8. 一文详解四元数、欧拉角、旋转矩阵、轴角如何相互转换

    一文详解四元数.欧拉角.旋转矩阵.轴角如何相互转换 简介 欧拉角与旋转矩阵 欧拉角---->旋转矩阵 旋转矩阵---->欧拉角 四元数与旋转矩阵 四元数---->旋转矩阵 旋转矩阵- ...

  9. 视觉SLAM十四讲学习笔记-第三讲-旋转向量、欧拉角、四元数

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

最新文章

  1. 机器学习中的数学 人工智能深度学习技术丛书
  2. scatter 基本用法 python matplotlib
  3. url采集工具_大数据关键技术浅谈之大数据采集
  4. 如何在内部 Stash 服务器上添加 hook
  5. java2048设计说明,Html5中的本地存储设计理念
  6. ubuntu下jmxtrans 安装
  7. LeetCode-两数之和(Java) 记录下刷题的第一天以及近期迷茫感受
  8. 如何定义用户模型(persona)
  9. 数据可视化平台-智慧安防可视化管理系统-解决楼宇监控管理难题
  10. 实现左侧菜单二级下拉菜单,
  11. 软件调试修炼之道之——山重水复疑无路
  12. Par.ici法语听写练习A1 -L13
  13. 关于vue2高德地图使用
  14. android gps 火星坐标,高德地图GCJ-02火星坐标系与GPS的WGS-84坐标系转换公式(安卓)...
  15. Java——entity(实体类)的写法规范
  16. 硬盘格式化数据恢复(图文教程)
  17. GitHub 忘记SSH密钥
  18. CPP头文件中不应包含using声明
  19. 模块上微系统(SOM)行业调研报告 - 市场现状分析与发展前景预测
  20. javascript学习笔记下篇--浏览器对象

热门文章

  1. linux7ip路由,Centos7源地址访问路由(双IP双网关配置)
  2. centos8对外开发指定接口
  3. el-table click事件多次触发_JavaScript从零开始——DOM事件编程(1)
  4. java开发面试中经常问到的问题(2019年5月)
  5. xmlhttp status各类Http请求状态(status)及其含义
  6. String.GetEnumerator 方法的C#例子
  7. 修改JEECG项目浏览器标题
  8. cocos2d-x 通过JNI实现c/c++和Android的java层函数互调 .
  9. java窗口小程序atm_简单的小程序实现ATM机操作
  10. android+JPEG+编码,Android_解析:android 如何从JPEG生成BufferedImage,如下所示:复制代码 代码如下 - phpStudy...