【自动驾驶】24.欧拉角、旋转向量、四元数、万向锁
原文链接: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.欧拉角、旋转向量、四元数、万向锁相关推荐
- 三维空间坐标的旋转算法详解_视觉slam | 三维空间刚体运动的五种表达:旋转矩阵 变化矩阵 欧拉角 旋转向量 四元数及互相转换...
原po:高翔slam十四讲-刚体运动 1.旋转矩阵 考虑一次旋转 Before: 坐标系(e1,e2,e3), 向量(a1,a2,a3) After: 坐标系(e1',e2',e3'), 向量(a1' ...
- 【自动驾驶】30.c++实现基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换(附代码)
矩阵的使用可参考系列博客:点击此处 原文链接:基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换. 也可以参考另一篇博客:eigen 中四元数.欧拉角.旋转矩阵.旋转向量. ...
- 【自动驾驶】欧拉角和旋转矩阵之间的转换
欧拉角和旋转矩阵之间的转换 在使用Eigen时,经常会遇到旋转矩阵,旋转向量,四元数,欧拉角之间的两两相互转换.这里最常见.最容易出错的是欧拉角和旋转矩阵之间的相互转换.下面就欧拉角和旋转矩阵之间的转 ...
- 罗德里格斯公式推导(轴角与旋转矩阵的关系)以及四元数与旋转向量、旋转矩阵、欧拉角之间的转换关系
罗德里格斯公式推导(轴角与旋转矩阵的关系) 意义:罗德里格斯公式表示旋转向量到旋转矩阵之间爱你的转换关系 旋转向量:一个向量,方向与旋转轴一致,长度等于旋转角度 空间中任意旋转都可以用一个旋转轴和一个 ...
- 三维重建3:旋转矩阵-病态矩阵、欧拉角-万向锁、四元数
摘抄部分有意思的链接,如有不适,请移步原文. 参考知乎上的文章链接:如何形象地理解四元数? :一个详尽的可作为教程的翻译:理解四元数的中文翻译... : 英文原文:http://www.3dgep. ...
- Unity 旋转欧拉角及万向锁问题
先说明unity 3D欧拉角的旋转顺序(父子关系)是y-x-z.即旋转y轴x和z轴都变,旋转x轴只有z轴变化,旋转z轴其它轴不变. 模型坐标系 又称物体坐标系. 与特定的物体关联,每个物体都有自己特定 ...
- 盘点中美自动驾驶卡车领域公司, 先进的技术和落地的场景
雷锋网(公众号:雷锋网)新智驾按:相比起自动驾驶乘用车,自动驾驶卡车是更容易落地的场景,也是更容易商业化的场景.美国卡车运输行业是美国经济的重要组成部分,目前规模约为7000亿美元.数字反映出巨大的经 ...
- 2023,滴滴“摸着自动驾驶过河”
在"滴滴=网约车"的出行领域,出行网络和数据量级是滴滴自动驾驶的优势.但就自动驾驶技术本身来看,滴滴仍然需要展示更多的肌肉. 作者|斗斗 出品|产业家 滴滴自动驾驶有了新动作. 一 ...
- 欧拉角与万向锁—深度解读万向锁
文章目录 问题描述: Z轴不生效(轴向重合) 轴向为什么会重合 初态 二次变换 总结: 解决办法: 相信很多人听说过欧拉角与万向锁,主要问题是欧拉角为什么会产生万向锁? 有矩阵解读法,但是不够直观,而 ...
- Mobileye 自动驾驶策略(二)
Mobileye 自动驾驶策略(二) 与多方都成功进行了合作,其中比较大型的合作包括法雷奥.百度和中国 ITS. 法雷奥是最近的的 Tier 1 合作伙伴,法雷奥和 Mobileye 签署协议,表示未 ...
最新文章
- android串口补位,Rust多线程中的消息传递机制
- 1.3. PostgreSQL 官方 YUM 源安装
- html设置flash满屏,在网页中实现flash全屏的几种方法
- linux gcc出错,编译arm-linux-gcc出错
- PAT1130. Infix Expression (25) 中序遍历
- 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
- 【C#】多线程解决UI界面卡死的问题
- LockSupport HotSpot里park/unpark的实现
- 如何快速分享CAD图纸?CAD图纸怎么加密?
- python矢量图_使用python制作矢量图
- Django 国际化翻译中的 gettext 和 gettext_lazy
- Linux--1 初识
- 多样加密功能全面升级细数猖獗作恶“五宗罪”
- 淮师计算机网络题库,淮阴师范学院(淮师)计算机基础一至六章习题
- 微信浏览器内打开App Store链接,并跳转到App指定安装页面
- 电脑如何分盘、合盘?关于硬盘的分盘,你所不知道的那些事情
- 关于ListView的删除刷新列表
- MarkDown高阶语法手册
- 将电脑网络通过USB共享给Android 设备
- 更安全的https https的问题
热门文章
- 一文读懂HTTP/2 及 HTTP/3特性
- jackson使用示例
- xss攻击汇总--转
- 项目经理原则(转载)
- Lesson 12.5 softmax回归建模实验
- 大数据分析:财务报表公开数据
- vue-element-admin台前端解决方案: 基于 vue 和 element-ui实现
- FinTech-Blockchain区块链
- TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅
- Spring Session - 使用Spring Session从零到一构建分布式session