视觉SLAM中的数学基础 第二篇 四元数
来源:互联网 发布:pc蛋蛋规律新算法 编辑:程序博客网 时间:2024/05/21 07:03
转自:http://www.cnblogs.com/gaoxiang12/p/5120175.html
致敬原作者,请移步原作者博文详细浏览
什么是四元数
相比欧拉角,四元数(Quaternion)则是一种紧凑、易于迭代、又不会出现奇异值的表示方法。它在程序中广为使用,例如ROS和几个著名的SLAM公开数据集、g2o等程序都使用四元数记录机器人的姿态。因此,理解四元数的含义与用法,对学习SLAM来说是必须的。本节我们就来讲讲四元数。
首先,请读者不要对四元数有什么神秘的感觉。四元数仅是3D姿态的一种表达方式,我们用一个单位四元数表达原本用旋转矩阵表示的三维旋转。这样做一个直接的好处是省空间。一个旋转阵有9个分量,但只有三个自由度。那么,能不能用三个数来描述呢?可以是可以的,但不可避免会出现奇异的情况,欧拉角就是一个例子。而四元数,比三维向量多了一个分量,从而可以无奇异地表示各种姿态。下面我们来详细讲讲四元数。
四元数是Hamilton找到的一种扩展的复数。一个四元数拥有一个实部和三个虚部(故事上说他原先找了很久带两个虚部的,结果怎么也找不到,最后豁然开朗找到了三虚部的四元数):
其中
由于它的这种特殊表示形式,有时人们也用一个标量和一个向量来表达四元数:
这里,标量
四元数可以表示三维空间中任意一个旋转。与旋转矩阵中类似,我们仍假设某个旋转是绕单位向量
事实上,这还是一个模长为1的四元数,称为单位四元数。反之,我们亦可通过任意一个长度为1的四元数,计算对应旋转轴与夹角:
若某个四元数长度不为1,我们可以通过归一化将它转换为一个模长为1的四元数。
对式
四元数的运算
四元数和通常复数一样,可以进行一系列的运算。常见的有四则运算、内积、求逆、共轭、求指数/对数等等。表示姿态时,它还可以进行插值。下面我们分别介绍。
现有两个四元数
- 加法和减法
四元数
- 乘法
乘法是把
虽然稍为复杂,但形式上也是整齐有序的。如果写成向量形式并利用内外积运算,该表达会更加简洁:
这里我们就不帮读者复习什么叫外积了。在该乘法定义下,两个实的四元数乘积仍是实的,这与复数也是一致的。然而,注意到,由于最后一项外积的存在,该乘法通常是不可交换的,除非
- 共轭
四元数的共轭为:
即把虚部取成相反数。四元数共轭与自己本身相乘,会得到一个实四元数,其实部为模长的平方:
- 模长
四元数的模长定义为:
可以验证,两个四元数乘积的模即为模的乘积。这保证单位四元数相乘后仍是单位四元数。
- 逆
一个四元数的逆为:
按此定义,四元数和自己的逆的乘积为实四元数的1:
同时,乘积的逆有和矩阵相似的性质:
对于单位四元数,即
- 数乘与点乘
和向量相似,四元数可以与数相乘:
点乘是指两个四元数每个位置上的数值分别相乘:
用四元数表示旋转
在复数域
首先,我们把三维空间点用一个虚四元数来描述:
然后,参照式
那么,旋转后的点
可以验证,计算结果的实部为
四元数到旋转矩阵的转换
由于任意单位四元数都可表示为一个3D旋转,即
设四元数
反之,由旋转矩阵到四元数的转换如下。假设矩阵为
值得一提的是,由于
其他几种变换
3D空间中的变换,除了欧氏变换之外,还存在其他几种变换(事实上欧氏变换是最简单的)。它们有一部分和测量几何有关,我们之后的讲解中会提到,在此先罗列出来。
- 相似变换
相似变换比欧氏变换多了一个自由度,它允许物体进行自由地缩放。
注意到旋转部分多了一个缩放因子
- 仿射变换
仿射变换的矩阵形式如下:
与欧氏变换不同的是,仿射变换只要求
- 射影变换
射影变换是最一般的变换,它的矩阵形式为:
它左上角为可逆矩阵
下表总结了目前讲到的几种变换的性质。注意在“不变性质”中,从上到下是有包含关系的。例如,欧氏变换除了保体积之外,也具有保平行、相交等性质。
- 视觉SLAM中的数学基础 第二篇 四元数
- 视觉SLAM中的数学基础 第二篇 四元数
- 视觉SLAM中的数学基础 第二篇 四元数
- 视觉SLAM中的数学基础 第三篇 李群与李代数
- 视觉SLAM中的数学基础 第四篇 李群与李代数(2)
- 视觉SLAM中的数学基础 第三篇 李群与李代数
- SLAM第二篇:视觉里程计
- 视觉SLAM中的数学基础 第一篇 3D空间的位置表示
- 视觉SLAM中的数学基础 第一篇 3D空间的位置表示
- 视觉SLAM中的数学基础 第一篇 3D空间的位置表示
- 视觉SLAM整理(2)数学篇
- 视觉SLAM中的李群&李代数基础
- SLAM数学基础
- 视觉SLAM的数学基础 第一篇 3D空间的位置表示
- 计算机视觉数学基础
- SLAM第二篇:视觉里程计 | ExBot易科机器人实验室(高翔博士,Exbot)
- 视觉SLAM
- 视觉SLAM
- Spring IOC 详解
- SPOJ STC02 - Antisymmetry [Manacher]【思维】
- leetcode 26. Remove Duplicates from Sorted Array
- 杨辉三角算法(C语言实现)
- 【LeetCode】 423. Reconstruct Original Digits from English
- 视觉SLAM中的数学基础 第二篇 四元数
- YOLO9000( YOLO v2 ), a state of the art, real time object detection system
- 2014新浪校招笔试题:取水果(17年第一篇让人懵逼的面试题)
- Linux的安装和熟悉
- 使用Visual Studio 2015开发Android 程序
- jQuery_创建节点及插入节点
- 程序员的绩效之谜
- 代码敲累了就来看看《PPT制作经验分享-发布版PPT》
- mac下mysql terminal设置以及常规用法