对线性代数库Eigen3中eulerAngles函数的理解

2023-11-17

编写程序时有时会遇到在四元数、旋转矩阵、欧拉角之间进行转换的操作,使用eulerAngles函数从旋转矩阵中获得欧拉角,了解其使用方法才能保证转换时不出错。

头文件<Eigen/Geometry>

使用这个函数只需#include<Eigen/Geometry>即可,源代码位置为/usr/include/eigen3/Eigen/src/Geometry/EulerAngles.h,源代码已上传,地址为https://download.csdn.net/download/qingtian11112/12292259,方便查看。

CMakeLists.txt
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIRS})

函数原型

template<typename Derived>
inline Matrix<typename MatrixBase<Derived>::Scalar,3,1>
MatrixBase<Derived>::eulerAngles(Index a0, Index a1, Index a2) const

使用方法

从函数原型上,可以看出其有三个参数,a0、a1、a2的取值为{0,1,2},分别表示X轴,Y轴和Z轴。
例如

Vector3f ea = mat.eulerAngles(2, 0, 2);

等价于

mat == AngleAxisf(ea[0], Vector3f::UnitZ())
     * AngleAxisf(ea[1], Vector3f::UnitX())
     * AngleAxisf(ea[2], Vector3f::UnitZ());

mat为按照参数中相应的顺序右乘得到。
如果已知
A = R x [ ϕ ] R y [ θ ] R z [ ψ ] A=R_x[\phi]R_y[\theta]R_z[\psi] A=Rx[ϕ]Ry[θ]Rz[ψ]
可以使用

Vector3f ea = R.eulerAngles(0, 1, 2);


{ e a [ 0 ] = ϕ e a [ 1 ] = θ e a [ 2 ] = ψ \begin{cases} ea[0]=\phi \\ ea[1]=\theta \\ ea[2]=\psi \end{cases} ea[0]=ϕea[1]=θea[2]=ψ

存在的问题

这个函数转换出来的欧拉角可能不稳定,如下图所示:
欧拉角数值不稳定
形成这个现象的原因在四元数和欧拉角互相转换这篇知乎回答中有解释,其中也给出了解决办法,但要注意这个解法是针对左手旋转的,要使用的话需要根据情况进行修改。也可参考这篇英文维基Conversion between quaternions and Euler angles

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对线性代数库Eigen3中eulerAngles函数的理解 的相关文章

随机推荐

  • 小程序获取用户信息实现一键登录

    文章目录 旧版获取用户信息实现登录流程 login页面代码 个人中心页面代码 全局app vue代码 下面是小程序获取用户信息最新调整的方式 温馨提示 以下小程序登录方式只适用于2 27 1版本库以下使用 详情请看微信官方文档调整 旧版获取
  • python中的连续比较是什么_在python中提取连续行之间的差异

    你的例子表明你想要在一对线之间进行比较 这与将其定义为line n 1 line n 不同 后者将给出5个结果 而不是3个 在 结果也取决于你认为的差异 它是位置性的 还是仅仅基于奇数行中缺失的字母 还是两者的差异都适用 例如 boat t
  • 优酷 YouTube Twitter及JustinTV视频网站架构设计笔记

    本文是整理的关于优酷 YouTube Twitter及JustinTV几个视频网站的架构或笔记 对于不管是视频网站 门户网站或者其它的网站 在架构上都有一定的参考意义 毕竟成功者的背后总有值得学习的地方 虽然有些文章的发表时间有点久了 但是
  • 将第三方库改为我自己想要的

    将第三方库改为我自己想要的 方法 比较常用的 给出一些例子 React组合方法 高阶组件方法 方法 修改第三方库以适应自己的需求可以通过多种方法实现 下面是一些常见的策略 继承 通过创建继承自第三方库组件或类的子类 你可以重写或扩展其方法
  • Keil警告和错误语句与消除方法笔记

    遇到的keil相关错误 警告内容在这里进行更新 Warning 1 D last line of file ends without a newline 文件最后一行不是新行 解决 保证文件最后一行什么符号也没有 167 D argumen
  • MySQL索引原理B+树

    B 树索引是B 树在数据库中的一种实现 是最常见也是数据库中使用最为频繁的一种索引 B 树中的B代表平衡 balance 而不是二叉 binary 因为B 树是从最早的平衡二叉树演化而来的 在讲B 树之前必须先了解二叉查找树 平衡二叉树 A
  • shader学习笔记(二)纹理采样

    资料参照 Unity Shader入门精要 冯乐乐 第7章 基础纹理 技术美术百人计划 图形 1 3 纹理的秘密 庄懂的技术美术入门课 美术向 直播录屏 第9课 Unity Shader 入门到改行4 最简纹理采样 1 纹理是什么 1 宏观
  • 程序员面试智力题集锦

    1 你让工人为你工作7天 给工人的回报是一根金条 金条平分成相连的7段 你必须在每天结束时给他们一段金条 如果只许你两次把金条弄断 你如何给你 的工人付费 参考答案 day1 给1 段 day2 让工人把1 段归还给2 段 day3 给1
  • 数据挖掘基础一

    一 数据挖掘 又称为数据库中知识发现 Knowledge Discovery from Database 简称KDD 它是一个从大量数据中抽取挖掘出未知的 有价值的模式或规律等知识的复杂过程 数据挖掘的定义过程描述如下图所示 从图中可以看出
  • Hessian4.0.7反序列化BigDecimal类型Bug

    Hessian虽好 bug也不少 今天遇到hessian反序列化bigdecimal类型 传入参数为121 但经序列化后却为0 问题在BigDecimal类型的应该使用BigDecimalDeserializer 在basic没有BigDe
  • 【Qt串口调试助手】1.8 - 修改Qt应用图标和窗口图标

    修改Qt应用图标和窗口图标 GitHub源码 Qt串口调试助手下载 修改应用图标 首先选择一张喜欢的图片 来作为应用图标 图片格式必须为 ico easyicon net 有很多可供下载的资源 下载好后 将其放入工程目录 之后添加到 Qt的
  • X509证书结构解析

    X509证书是采用DER编码的ASN1结构数据 Certificate SEQUENCE tbsCertificate TBSCertificate signatureAlgorithm AlgorithmIdentifier signat
  • 【技术干货】数字电路电平标准

    信号的逻辑电平经历了从单端信号到差分信号 从低速信号到高速信号的发展过程 最基本的单端信号逻辑电平为CMOS TTL 在此基础上随着电压摆幅的降低 出现LVCMOS LVTTL等逻辑电平 随着信号速率的提升又出现ECL PECL LVPEC
  • Qt 实现 360 安全卫士

    作者 一去 二三里 QQ 技术交流群 242790253 个人微信 iwaleon 加我微信 邀请入 500 人微信群 微信公众号 高效程序员 回想起来 这也算是一个有故事的代码 虽然时间比较久远 但还是记忆犹新 那就简单说说吧 也不枉费当
  • codevs代码分类总结

    由于要参加华为软件精英挑战赛 所以需要把以前做过的有关图论的问题翻出来复习一遍 但是关于图论也有很多分类 所以干脆就做一个总结 先对图论的相关题目过一遍 以后如果有时间 把其他分类的题目也过一遍 图论 也不是每个章节都做了题目 Floyd
  • Elasticsearch全文搜索与TF/IDF

    转载 https my oschina net stanleysun blog 1594220 一 TF IDF 1 TF TF Term Frequency 即词频 它表示一个词在内容 如某文章 中出现的次数 为了消除文档本身大小的影响
  • vue如何使用ueditor富文本插件

    UEditor 是由百度 FEX前端研发团队 开发的所见即所得富文本web编辑器 具有轻量 可定制 注重用户体验等特点 开源基于MIT协议 允许自由使用和修改代码 话不多说看流程 一 显示效果如下 二 首先 下载 ueditor npm i
  • Mastercam软件安装包分享(附安装教程)

    目录 一 软件简介 二 软件下载 一 软件简介 Mastercam是一款广泛应用于机械加工领域的计算机辅助设计与计算机辅助制造 CAD CAM 软件 它由美国CNC软件公司开发 旨在帮助制造商设计和制造高精度的零部件 以下是Masterca
  • java Fileread用法及注意事项

    关于其创建 还有注意事项 package IOtest test1 import org junit Test import java io File import java io FileReader import java io IOE
  • 对线性代数库Eigen3中eulerAngles函数的理解

    编写程序时有时会遇到在四元数 旋转矩阵 欧拉角之间进行转换的操作 使用eulerAngles函数从旋转矩阵中获得欧拉角 了解其使用方法才能保证转换时不出错 头文件