原文链接:https://blog.csdn.net/shenxiaolu1984/article/details/50639298
原文链接:https://blog.csdn.net/lql0716/article/details/72597719

三维空间刚体旋转有两种方式:

  • (1) 任何一个旋转可以表示为依次绕着三个旋转轴旋三个角度的组合。这三个角度称为欧拉角。
  • (2) 三维空间的任意旋转,都可以用绕三维空间的某个轴旋转过某个角度来表示。

绕坐标轴的多次旋转可以等效为绕某一轴旋转一定角度,我感觉这就是四元数最直观的几何意义了。不管是RPY还是欧拉角,都可以利用四元数来代替表达。可以参考下面这篇博文:
https://www.cnblogs.com/21207-iHome/p/6894128.html


1.欧拉角的物理意义:

任何一个旋转可以表示为依次绕着三个旋转轴旋三个角度的组合。这三个角度称为欧拉角。
三个轴可以指固定的世界坐标系轴,也可以指被旋转的物体坐标系的轴。三个旋转轴次序不同,会导致结果不同。
本文中提到的欧拉角指:绕着世界坐标系的x,y,z轴,依次旋转的结果。其取值范围如下:


欧拉角→旋转矩阵
单独绕一个轴旋转θ角度的旋转矩阵为:

如果依次绕x轴、y轴、z轴旋转,该变换的旋转矩阵为:


2.四元数的物理意义:

旋转向量

三维空间的任意旋转,都可以用绕三维空间的某个轴旋转过某个角度来表示,即所谓的Axis-Angle(轴角)表示方法。轴角,就是绕一个旋转某个角度,来表示一个旋转。

这种表示方法里,Axis(轴)可用一个三维向量(x,y,z)来表示,θ可以用一个角度值来表示。

直观来讲,一个四维向量(θ,x,y,z)就可以表示出三维空间任意的旋转。注意,这里的三维向量(x,y,z)只是用来表示axis(轴)的方向朝向,因此更紧凑的表示方式是用一个单位向量来表示方向axis(轴),而用该三维向量的长度来表示角度值θ

这样以来,可以用一个三维向量(θ∗x,θ∗y,θ∗z)就可以表示出三维空间任意的旋转,前提是其中(x,y,z)单位向量,即 x2+y2+z2=1\color{red}x^2 + y^2 + z^2 = 1x2+y2+z2=1。这就是旋转向量(Rotation Vector)的表示方式,OpenCV里大量使用的就是这种表示方法来表示旋转(见OpenCV相机标定部分的rvec)。

四元数

前面的旋转向量中的单位向量(x,y,z)旋转θ角度后的四元数:

对于三维坐标的旋转,可以通过四元数乘法直接操作,与旋转矩阵操作可以等价,但是表示方式更加紧凑,计算量也可以小一些。

需要注意,单位向量(x,y,z)指的是这个向量长度为1,即x2+y2+z2=1\color{red}x^2 + y^2 + z^2 = 1x2+y2+z2=1,这个向量是表示的这个的位置,表述某个向量时,一般会把这个向量用单位向量表示,下面的(w1,w2,w3)就是单位向量(x,y,z),写法不一致而已。

四元数的是四元数到原点的距离。如果某个四元数(q0, q1, q2, q3)的模长为1,即满足 q02+q12+q22+q32=1\sqrt {q_0^2 + q_1^2 + q_2^2 + q_3^2}=1q02​+q12​+q22​+q32​​=1。但并不是说所有四元数的模都为1。只有表示旋转的四元数的模才为1,所以上面旋转向量的模才为1。不要混淆了。

注意,上面的w1,w2,w3不是i,j,k, 不要搞混了。[w1,w2,w3]是通过原点的某个轴上的单位长度(长度为1)的点,即w12+w22+w32=1w_1^2+ w_2^2 + w_3^2 =1w12​+w22​+w32​=1。
[w1,w2,w3]是个三维坐标点,设为点P,则OP就是这个旋转轴,w1,w2,w3分别为距离坐标系原点O的三个方向的距离。


欧拉角的缺点:

  • 1、 欧拉角的表示方式不唯一。给定某个起始朝向和目标朝向,即使给定yaw、pitch、roll的顺序,也可以通过不同的yaw/pitch/roll的角度组合来表示所需的旋转。这其实主要是由于万向锁(Gimbal Lock)引起的;
  • 2、欧拉角的插值比较难;
  • 3、计算旋转变换时,一般需要转换成旋转矩阵,这时候需要计算很多sin, cos,计算量较大;

对于三维坐标的旋转,可以通过四元数乘法直接操作,与旋转矩阵操作可以等价,但是表示方式更加紧凑,计算量也可以小一些。


万向锁

请参考原文:https://zhuanlan.zhihu.com/p/74040465

为了更好的理解这个现象,我们再用自己的手机做一个试验:

  • 把手机屏幕朝上,手机的长边为X轴,短边为Y轴,Z轴垂直屏幕向下。
  • 你先绕Z轴旋转一下手机,假设旋转30度;
  • 然后再把手机绕Y轴旋转90度,也就是把手机短边接触桌面,长边竖立起来;
  • 这时候你再绕手机的长边(X轴)旋转,你会发现手机的短边一直定在桌面上不可能脱离桌面,这就是万向锁现象。

下面这个说法,是从方向自由度来说明的:
需要注意的是XYZ轴的定义动态跟从手机的方向,例如Z轴永远是手机屏幕所示方向。
Z->Y->X的顺序来旋转手机,不过规定Y旋转的角度为90°。
这样做的时候你会发现无论你怎样选择Z和X的旋转角度,手机的短边都无法离开桌面。这意味着什么呢?这意味着虽然你看似有X、Z旋转的2向自由度,但是当Y被定为90的时候,这个系统实际上只有一向自由度,因为任何两向自由度的旋转一定可以使任一直线离开任一平面,而我们绕Z轴和x轴随便转却并不能将手机的短边移开桌面。

下面这个说法,是从绕X、Z轴分别旋转不同角度却能达到同样效果来说明:
首先旋转顺序就是Z-Y-X,绕完Y轴旋转后,只能绕X轴旋转了,不能再绕Z轴旋转了;
举例:

  • 转法1:你先绕Z正方向旋转30°,再绕Y正方向旋转90°,最后绕X轴旋转30°,见下图左;
  • 转法2:你先绕Z正方向旋转20°,再绕Y正方向旋转90°,最后绕X轴旋转40°,见下图右;
    实线是最开始没旋转的,虚线矩形是绕Z轴旋转后的,绕y轴旋转后的由于是竖直方向的,所以没画出来,箭头指向的那个虚线是绕X轴旋转的角度。下面两幅图最终都达到了同样的效果,角度都为60°。

你会发现两种转法的结果是一样的,所以说先绕Z旋转的度数和最后绕X的旋转度数,没啥区别了。最终的结果就是,你绕X轴旋转的角度,也可以通过旋转Z轴来达到同样;或者,你绕Z轴旋转的角度,也可以通过旋转X轴来达到同样效果。

数学解释:

一般情况下都是绕X轴旋转的是pitch俯仰角,绕Y轴旋转的是yaw偏航角,绕Z轴旋转的是roll翻滚角。

最后,再让我们用数据公式来解释一下万向锁现象产生的原因,我们来回顾一下旋转矩阵:

这说明你改变φ和ψ的值都是一个效果,而矩阵的第一行和最后一列始终是保持不变,这说明无论你怎么改变φ和ψ,你的旋转轴一直是Z轴不变,要想改变φ和ψ有不同的效果,你只能是去改变θ的值,以上就是用数学方法来解释为什么俯仰角在±90°时欧拉角出现万向锁的过程。

【自动驾驶】24.欧拉角、旋转向量、四元数、万向锁相关推荐

  1. 三维空间坐标的旋转算法详解_视觉slam | 三维空间刚体运动的五种表达:旋转矩阵 变化矩阵 欧拉角 旋转向量 四元数及互相转换...

    原po:高翔slam十四讲-刚体运动 1.旋转矩阵 考虑一次旋转 Before: 坐标系(e1,e2,e3), 向量(a1,a2,a3) After: 坐标系(e1',e2',e3'), 向量(a1' ...

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

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

  3. 【自动驾驶】欧拉角和旋转矩阵之间的转换

    欧拉角和旋转矩阵之间的转换 在使用Eigen时,经常会遇到旋转矩阵,旋转向量,四元数,欧拉角之间的两两相互转换.这里最常见.最容易出错的是欧拉角和旋转矩阵之间的相互转换.下面就欧拉角和旋转矩阵之间的转 ...

  4. 罗德里格斯公式推导(轴角与旋转矩阵的关系)以及四元数与旋转向量、旋转矩阵、欧拉角之间的转换关系

    罗德里格斯公式推导(轴角与旋转矩阵的关系) 意义:罗德里格斯公式表示旋转向量到旋转矩阵之间爱你的转换关系 旋转向量:一个向量,方向与旋转轴一致,长度等于旋转角度 空间中任意旋转都可以用一个旋转轴和一个 ...

  5. 三维重建3:旋转矩阵-病态矩阵、欧拉角-万向锁、四元数

    摘抄部分有意思的链接,如有不适,请移步原文. 参考知乎上的文章链接:如何形象地理解四元数?  :一个详尽的可作为教程的翻译:理解四元数的中文翻译... : 英文原文:http://www.3dgep. ...

  6. Unity 旋转欧拉角及万向锁问题

    先说明unity 3D欧拉角的旋转顺序(父子关系)是y-x-z.即旋转y轴x和z轴都变,旋转x轴只有z轴变化,旋转z轴其它轴不变. 模型坐标系 又称物体坐标系. 与特定的物体关联,每个物体都有自己特定 ...

  7. 盘点中美自动驾驶卡车领域公司, 先进的技术和落地的场景

    雷锋网(公众号:雷锋网)新智驾按:相比起自动驾驶乘用车,自动驾驶卡车是更容易落地的场景,也是更容易商业化的场景.美国卡车运输行业是美国经济的重要组成部分,目前规模约为7000亿美元.数字反映出巨大的经 ...

  8. 2023,滴滴“摸着自动驾驶过河”

    在"滴滴=网约车"的出行领域,出行网络和数据量级是滴滴自动驾驶的优势.但就自动驾驶技术本身来看,滴滴仍然需要展示更多的肌肉. 作者|斗斗 出品|产业家 滴滴自动驾驶有了新动作. 一 ...

  9. 欧拉角与万向锁—深度解读万向锁

    文章目录 问题描述: Z轴不生效(轴向重合) 轴向为什么会重合 初态 二次变换 总结: 解决办法: 相信很多人听说过欧拉角与万向锁,主要问题是欧拉角为什么会产生万向锁? 有矩阵解读法,但是不够直观,而 ...

  10. Mobileye 自动驾驶策略(二)

    Mobileye 自动驾驶策略(二) 与多方都成功进行了合作,其中比较大型的合作包括法雷奥.百度和中国 ITS. 法雷奥是最近的的 Tier 1 合作伙伴,法雷奥和 Mobileye 签署协议,表示未 ...

最新文章

  1. android串口补位,Rust多线程中的消息传递机制
  2. 1.3. PostgreSQL 官方 YUM 源安装
  3. html设置flash满屏,在网页中实现flash全屏的几种方法
  4. linux gcc出错,编译arm-linux-gcc出错
  5. PAT1130. Infix Expression (25) 中序遍历
  6. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
  7. 【C#】多线程解决UI界面卡死的问题
  8. LockSupport HotSpot里park/unpark的实现
  9. 如何快速分享CAD图纸?CAD图纸怎么加密?
  10. python矢量图_使用python制作矢量图
  11. Django 国际化翻译中的 gettext 和 gettext_lazy
  12. Linux--1 初识
  13. 多样加密功能全面升级细数猖獗作恶“五宗罪”
  14. 淮师计算机网络题库,淮阴师范学院(淮师)计算机基础一至六章习题
  15. 微信浏览器内打开App Store链接,并跳转到App指定安装页面
  16. 电脑如何分盘、合盘?关于硬盘的分盘,你所不知道的那些事情
  17. 关于ListView的删除刷新列表
  18. MarkDown高阶语法手册
  19. 将电脑网络通过USB共享给Android 设备
  20. 更安全的https https的问题

热门文章

  1. 一文读懂HTTP/2 及 HTTP/3特性
  2. jackson使用示例
  3. xss攻击汇总--转
  4. 项目经理原则(转载)
  5. Lesson 12.5 softmax回归建模实验
  6. 大数据分析:财务报表公开数据
  7. vue-element-admin台前端解决方案: 基于 vue 和 element-ui实现
  8. FinTech-Blockchain区块链
  9. TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅
  10. Spring Session - 使用Spring Session从零到一构建分布式session