在机器人学中的定义和其它领域中的定义有时候会有不同,长时间不用也会记混淆。这里记录一下便于回头翻阅。

参考《A Mathematical Introduction to Robotic Manipulation》p31-32

The ZYX Euler angles are also referred to as the yaw, pitch, and roll angles, with RabR_{ab}Rab​ defined by rotating about the x-axis in the body frame (roll), then the y-axis in the body frame (pitch), and finally the z-axis in the body frame (yaw).

参考《机器人技术基础》熊有伦 1996. p24-25,值得注意的是,这本书里的roll,pitch,yaw的定义与飞行器,航船一样,但是与机器人学中常用绕z轴旋转的是yaw不同,故不采纳。还是以上述李的版本为准。

z-y-x欧拉角,这种描述法中的各次转动都是相对于运动坐标系(注: body frame)的某轴进行的,而不是相对于固定的参考系(注:fixed frame)。由于所有的转动都是相对于运动坐标系进行的,根据“从左向右”的原则来安排各次旋转对应的矩阵,从而得到表达式
BARzyx(α,β,γ)=R(z,α)R(y,β)R(x,γ)^{A}_{B}R_{zyx}(\alpha, \beta, \gamma) = R(z, \alpha)R(y, \beta)R(x, \gamma) BA​Rzyx​(α,β,γ)=R(z,α)R(y,β)R(x,γ)
这一结果与绕固定轴x-y-z旋转的结果完全相同(注:相对于固定轴A,按照“从右向左”的原则,得到),先将B绕xAx_AxA​转γ\gammaγ角,再绕yAy_AyA​转β\betaβ角,绕zAz_AzA​转α\alphaα角,
BARxyz(γ,β,α)=R(zA,α)R(yA,β)R(xA,γ)^{A}_{B}R_{xyz}(\gamma, \beta, \alpha) = R(z_A, \alpha)R(y_A, \beta)R(x_A, \gamma) BA​Rxyz​(γ,β,α)=R(zA​,α)R(yA​,β)R(xA​,γ)

当涉及到机器人学中的RPY转换时,一定要采用KDL的转换形式

inline double sqr(double arg) { return arg*arg;}
void GetRPY( Eigen::Matrix3d&data, double& roll,double& pitch,double& yaw)
{double epsilon=1E-12;pitch = atan2(-data(2,0), sqrt( sqr(data(0,0))) +sqr(data(1 ,0))  );if ( fabs(pitch) > (M_PI_2-epsilon) ) {yaw = atan2(    -data(0,1), data(1 ,1) );roll  = 0.0 ;} else {roll  = atan2(data(2, 1), data(2,2));yaw   = atan2(data(1 ,0), data(0,0));}
}

Eigen自带的都不对,为什么不对,等待笔记todo

  std::cout<<"angle = "<<m.eulerAngles(2, 1, 0)*180.0/M_PI<<std::endl;std::cout<<"angle = "<<m.eulerAngles(0, 1, 2)*180.0/M_PI<<std::endl;

原因参考https://answers.ros.org/question/323102/getting-eigen3-matrix3feulerangles-values-similar-to-tf2-matrix3x3fgetrpy-roll-pitch-yaw/

This behaviour is similar to bug reported on eigen http://eigen.tuxfamily.org/bz/show_bu… . As a feature request to switch to tait-bryan angles which apparently start in range [-pi: pi]. currently the eigen implementation works in [0:pi]. This gives errors if assuming a ZYX rotation order as the output yaw is [0:pi]

SO3,SE3,旋转,欧拉角与四元数笔记相关推荐

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

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

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

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

  3. 旋转矩阵、欧拉角、旋转矢量及四元数的介绍和工程应用

    本篇文章首发于微信公众号:无人机开发.更多无人机技术相关文章请关注此公众号,有问题也可在公众号底部添加个人微信进行交流. 1.前言 从事导航.制导或者控制时,经常需要将各个物理矢量从A坐标系转换至B坐 ...

  4. 欧拉角、四元数与旋转

    欧拉角 使用三个角度来保存方位,如(0, 50, 0). X和Z沿自身坐标系旋转,Y沿世界坐标系旋转. 获取物体欧拉角:Vector3 eulerAngle = transform.eulerAngl ...

  5. 方向向量转欧拉角_【姿态表示】旋转向量、旋转矩阵、欧拉角、四元数

    1. 旋转矩阵与旋转向量旋转矩阵(Rotation Matrix)用 9 个量描述旋转的3个自由度,有冗余: 9 个量是有约束的:必须是正交矩阵,且行列式为 1 旋转向量(Rotation Vecto ...

  6. 第3讲 旋转向量、欧拉角、四元数

    旋转向量 从上一篇中已经知道,旋转可以用旋转矩阵来表示,变换可以用变换矩阵来表示,那么为什么还需要旋转向量呢? 仔细想一下,矩阵表示方式至少有以下几个缺点: 的旋转矩阵有9个量,但是一次旋转只有3个自 ...

  7. creator中关于旋转所使用的欧拉角和四元数

    概念 四元数,欧拉角,变换矩阵,这三者是可以相互转化的,但并不是说变换矩阵等于欧拉角或者变换矩阵等于四元数,欧拉角或者说四元数他们只是旋转数据,而一个矩阵是一个空间坐标系,旋转的数据只是构造的它的一部 ...

  8. 第六章 相机及其应用 6.3欧拉角、旋转矩形、四元数、应用于Eigen的示例

    欧拉角 ** ** 一.顺规定义 ** 欧拉角也可以描述三维刚体旋转,它将刚体绕过原点的轴(i,j,k)旋转θ,分解成三步(蓝色是起始坐标系,而红色的是旋转之后的坐标系.). 绕z轴旋转α,使x轴与N ...

  9. OpenGL相机自由移动旋转缩放,四元数,欧拉角,LookAt

    OpenGL相机自由移动旋转缩放,四元数,欧拉角,LookAt 定义相机 摄像机位置 右轴 上轴 Look At 自由移动相机 左右移动 移动速度 视角移动 欧拉角 通过欧拉角计算实际的方向向量 缩放 ...

最新文章

  1. 书籍:Python机器学习蓝图第2版 Python Machine Learning Blueprints 2nd - 2019.pdf
  2. vector、map 内存释放
  3. 编译安装 PHP 扩展 - 含 swoole 扩展安装和升级
  4. 终于发现为什么SQL没有释放句柄,原来是保存句柄的变量被覆盖了,丢失了原来的句柄...
  5. c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...
  6. html网页无法刷新,网页不能自动刷新怎么办
  7. Android 数字格式化
  8. c++——block_type_is_valid怎么解决
  9. 计算机控制系统a卷-答案,微型计算机控制技术试卷附标准答案A
  10. 韩顺平 php大牛班课程,2016泰牛程序员韩顺平PHP大牛班HTML课程完整笔记资料.doc...
  11. 普通学校,非科班,从电脑小白到大厂offer的自学之路
  12. android GPS开发
  13. 加息对银行股影响|加息是对银行股的利好
  14. 【Turtle绘图系列】超火皮卡丘大全,可爱到爆炸~
  15. smbclient访问海康威视H90个人网盘
  16. 学蓝桥Chapter6:矩阵键盘KBD练习
  17. pgSQL查询语句ERROR: relation “XXX“ does not exist
  18. 【Linux】Linux编程基础(vi、gcc、gdb)
  19. python计算圆面积(十种方法)
  20. 达梦数据库删除用户_达梦数据库实例、服务的创建和删除

热门文章

  1. GCC生成静态库和动态库
  2. 高德地图jsAPI,定位和选择位置
  3. Tensorflow tflearn
  4. 从“及其所之既倦”到“吾生也有涯,而知也无涯”
  5. 安装app提示解析包错误解决办法
  6. postgre 笔记
  7. EDIUS中的GPU转场该怎么设置
  8. ArcGIS使用字段计算器python脚本整理三规合一图斑
  9. 选基必备:基金数据下载工具推荐(python)
  10. Java毕设|课设项目-蛋糕店商城管理系统