SLAM专题(5) -- 变换矩阵、旋转矩阵、欧拉角与四元数
目录
坐标变换基础知识
外积
欧氏变换
旋转矩阵
旋转向量
欧拉角
四元数
坐标变换基础知识
外积
外积大小为 ,可以表示两个向量张成四边形的有向面积,引入符号,定义a^表示为一个反对称矩阵,这样就把向量的外积变换成了矩阵和向量的乘法。
同时外积可以表示向量的旋转,在右手法则下,用右手的四个指头从a转到 b,其大拇指所指向的方向就是旋转向量的方向,旋转向量的大小为 a与 b的夹角。
欧氏变换
在机器人的运动中,通常先固定一个坐标系,称为世界坐标系,如图中的 定义的坐标系;同时相机也是一个坐标系,如图中的定义的坐标系。在相机视野中的某个向量P坐标为Pc,在世界坐标系下坐标则为Pw。相机运动时,两个坐标之间的转换关系由变换矩阵 T来表示。
因为相机可以看作刚体,刚体运动时能保证同一个向量在各个坐标系下的长度和夹角不会发生变化,这种变换称作欧氏变换,一个欧式变换由一个旋转和一个平移两部分组成。
旋转矩阵
首先看旋转,设单位正交基 经过一次旋转变成了 ,对于同一个向量a ,它在两个坐标系下的的坐标分别为和 ,则有:
为了描述两个坐标之间的关系,对等式左右同乘 ,左式系数即变为单位矩阵,右式系数则变成由两组标准正交基的内积组成的矩阵:
称右式矩阵R 为旋转矩阵,旋转矩阵作用于向量 a的坐标得到向量 a`旋转后的坐标。
仔细观察旋转矩阵 R,可以发现旋转矩阵为一个行列式为1的正交矩阵。反之,行列式为1的正交矩阵也是一个旋转矩阵R。这条性质在计算增量坐标变化时常用作一条约束条件来计算新的旋转矩阵。
由于R 为正交矩阵,由正交矩阵性质知旋转矩阵R的转置和其逆矩阵等价,所以 可以描述一个相反的旋转过程:
欧式变换除了旋转还有平移,平移就简单多了,直接在旋转后的向量坐标上加一个平移向量 t就可以,把旋转和平移合在一起有:
通过旋转矩阵R和平移向量 t 可以完整描述一个欧氏变换。
变换矩阵和齐次坐标
虽然上式可以完整描述一个欧氏变换,但是这里的变换不是一个线性关系,当做两次变换时有:
那么用 a 表述 c时则有:
可以想象在n多次变换后式子会变得多么复杂,为了简化形式,引入了齐次坐标和变换矩阵:
给三维向量加一维变成四维向量,称为齐次坐标;把旋转和平移写在同一个矩阵里,称为变换矩阵。
首先介绍齐次坐标:
- 通过添加最后一维,用四个数表示一个三维向量,这样就多了一个自由度,多了一个自由度就可以写出线性的形式。
- 齐次坐标的每一个分量同时乘一个非零常数仍然表示同一个点,所以一个点的齐次坐标不唯一。
- 用齐次坐标运算得到的也是齐次坐标,将齐次坐标转换为非齐次坐标的方法为把所有坐标除以最后一项,强制最后一项为1,然后忽略最后一项即可得到欧氏空间中的非齐次坐标。
然后介绍变换矩阵:
- 变换矩阵左上角为旋转矩阵,右上角为平移向量,左下角为 0向量,右下角为1.
- 变换矩阵的逆也表示一个反向的变换
通过引入齐次坐标和旋转矩阵,就大大简化了欧氏变换的表示:
旋转向量
- 旋转矩阵R用9个量来表示三个自由度的旋转,变换矩阵T用16个量来表示6个自由度的欧式变换,这样会有数据冗余。
- 旋转矩阵具有约束:之前讲过,旋转矩阵必须是一个行列式det(R)为1的正交矩阵,这使得估计或优化一个旋转矩阵时会使得求解变得困难。
其实最开始提到的外积就可以表示向量的旋转。坐标系的旋转可以由一个旋转轴和一个旋转角来刻画,我们选择方向与旋转轴相同、长度等于旋转角的向量,来描述旋转,称为旋转向量。易知旋转向量用三个量来表示三个自由度的旋转。
反之也可得出从旋转矩阵到旋转向量的公式:
由于旋转轴上的向量在旋转后不发生改变,所以有:
因此转轴 n 是旋转矩阵 R 特征值为1对应的特征向量,所以求解方程
det(λI - R) = 1可得旋转轴。
欧拉角
除了旋转矩阵和旋转向量,还可以用欧拉角来直观的表式旋转。
欧拉角使用三个分离的转角来表述旋转,分别为:
1. 绕物体的 Z 轴旋转,得到偏航角 yaw;
2. 绕旋转之后的 Y 轴旋转,得到俯仰角 pitch;
3. 绕旋转之后的 X 轴旋转,得到滚转角 roll。
这样我们就可以通过这样一个三维向量来描述任意旋转。
但是使用欧拉角会遇到著名的万向锁问题:当俯仰角 时,第三次旋转与第一次旋转将会使用同一个轴,这样会使系统丢失一个自由度,称为奇异性问题。所以欧拉角不适用于插值和迭代,也很少用于SLAM程序,往往只用于人机交互中,方便直观理解。
四元数
旋转矩阵冗余,欧拉角奇异。事实上我们找不到不带奇异性的三维向量描述方式。比如,当使用两个坐标来表示地球表面时,如经纬度,当纬度为 时,经度没有意义。
回忆刚学过的复数,我们可以用复数集 C 来表示复平面上的向量,乘上 i相当于把复向量旋转90度。那么类似的,在表达三维空间的旋转时,也有一种类似于复数的代数:四元数。四元数是一种扩展复数,在表示旋转时具有紧凑性,缺点是运算时比较复杂。
一个四元数q具有一个实部和三个虚部:
,
其中 为三个虚部,且满足以下关系式:
有时也通过一个标量和一个向量来表达四元数:
s称为实部, v称为虚部。当虚部为0时称为实四元数,实部为0时称为虚四元数,虚四元数可以表示三维空间中的一个点。
为了满足 的关系,定义乘上一个虚部对应旋转180度。
四元数和旋转向量之间的转换关系为:
和
第一个式子中当 θ加上2π 时,易得旋转没有改变,但是得到的四元数 q却变成了 -q 。因此两个互为相反数的四元数表示着同一个旋转。
用四元数表示点的旋转时,设空间中一点 ;
若要表示点n绕转轴旋转 θ ,由上式得 ;
旋转后的 ,可验证得 p`也是纯虚数,表示三维空间中的点。
最后给出四元数到旋转矩阵的转换公式,设四元数 ,则有:
反之有:
SLAM专题(5) -- 变换矩阵、旋转矩阵、欧拉角与四元数相关推荐
- 旋转矩阵、欧拉角、四元数理论及其转换关系
旋转矩阵.欧拉角.四元数理论及其转换关系 author@jason_ql(lql0716) http://blog.csdn.net/lql0716 1.概述 旋转矩阵.欧拉角.四元数主要用于表示坐标 ...
- 视觉SLAM十四讲学习笔记-第三讲-旋转向量、欧拉角、四元数
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...
- 旋转矩阵、欧拉角、四元数、轴/角之间的转换
在机器人学中,表示旋转的有四种方式.不同的人可能习惯于用不同的方法,现将四种方式之间的转换整理出来如下. 旋转矩阵 旋转矩阵R表示坐标系`O-x'y'z'`中的向量坐标变换为同一向量在坐标系`O-xy ...
- 3D 中的方位与角位移(旋转矩阵、欧拉角、四元数)
文章目录 一.3D 中的方位与角位移 1. 欧拉角 (Euler angles) 2. 四元数的相关知识 2.1 复数 2.2 欧拉旋转定理 2.3 三维空间旋转的拆分 3. 四元数 (Quatern ...
- 旋转矩阵、欧拉角、四元数比较
旋转矩阵.欧拉角.四元数主要用于:向量的旋转.坐标系之间的转换.角位移计算.方位的平滑插值计算. 不同的方位表示方法适用于不同的情况.下面是我们对合理选择格式的一些建议: l 欧拉角最容易使用.当需 ...
- 【自动驾驶】30.c++实现基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换(附代码)
矩阵的使用可参考系列博客:点击此处 原文链接:基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换. 也可以参考另一篇博客:eigen 中四元数.欧拉角.旋转矩阵.旋转向量. ...
- 旋转矩阵、欧拉角、四元数、旋转向量(旋转角)
参考:http://www.cppblog.com/Tongy0/archive/2012/09/10/190126.html 转载自:http://blog.csdn.net/shenxiaolu1 ...
- 方向向量转欧拉角_【姿态表示】旋转向量、旋转矩阵、欧拉角、四元数
1. 旋转矩阵与旋转向量旋转矩阵(Rotation Matrix)用 9 个量描述旋转的3个自由度,有冗余: 9 个量是有约束的:必须是正交矩阵,且行列式为 1 旋转向量(Rotation Vecto ...
- 刚体运动中的坐标变换-旋转矩阵、旋转向量、欧拉角及四元数
坐标变换及其方法 1.转化关系图 2 换算关系 3.1 旋转矩阵换算至其他 3.2 四元数换算至其他 3.3 旋转向量转换至旋转矩阵与四元数 3.3 欧拉角转换到旋转矩阵和四元数 3 坐标变换 4 坐 ...
- 车辆姿态表达:旋转矩阵、欧拉角、四元数的转换以及eigen、matlab、pathon方法实现
目录 1 概述 2 原理 2.1 旋转矩阵 2.1.1 绕x轴旋转 2.1.2 绕y轴旋转 2.1.3 绕z轴旋转 2.2 欧拉角 2.2.1 基本思想 2.2.2 欧拉角的缺点 2.3 四元数 2. ...
最新文章
- 自动化运维系列之Cobbler (资源)
- GridView控件添加鼠标移入移出时背景行变色的效果
- 《AlwaysRun团队》第三次作业:团队项目的原型设计
- 产品经理必备知识之网页设计系列(三)-移动端适配无障碍设计及测试
- MySQL存储引擎比较
- wuhan2020新型冠状病毒防疫信息收集平台社区版非正式发布
- step3 . day8数据结构之算法
- mailto发送邮件
- 【报告分享】2020-2021虎嗅洞察报告:聚焦私域流量,洞察增长变局.pdf(附下载链接)...
- 织梦文章页模板使用php语法,织梦文章页面模板顶一下踩一下调用教程
- .NET :在Visual Studio的不同Tab之间切换
- 根据android版本号,增加兼容性处理
- 2016山东教师教育网- 一师一优课
- centos7基于k8s安装部署prometheus(普罗米修斯)
- 在分析仪中创建用户自定义的TRL校准件【以RS矢量网络分析仪为例】
- ZBrush坐标轴控制
- 解压缩软件RAR Extractor Mac
- 思途cms php文件说明,思途旅游CMS系统二次开发说明文档(v5.0).pdf
- [CTSC2016]时空旅行(斜率优化+线段树分治)
- mac 卸载java7_mac卸载jdk
热门文章
- 计算机辅助翻译工具的未来,21世纪的计算机辅助翻译工具.pdf
- cocos creator shader 方形头像变为圆形头像
- 大逃杀计算机内存不足,绝地求生大逃杀虚拟内存不足怎么办 内存不足解决方法...
- 2018.7.8学习笔记
- java微服务占用内存过大怎么办
- 女孩叫你一声“老公”意味着什么你知道吗?
- 中国版steam平台来了!定名“蒸汽平台”,首批仅40款游戏?
- springboot cron定时器
- 力扣:383. 赎金信
- 最强黑马《哪吒》中我学到的 2 条人生潜规则