【SLAM数学基础】旋转的三种数学描述及其转换

这篇具有很好参考价值的文章主要介绍了【SLAM数学基础】旋转的三种数学描述及其转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 旋转矩阵

所有的三维旋转矩阵组成了特殊正交群(Special Orthogonal Group)SO(3),它是一个3x3的实数矩阵,满足:

  • 旋转矩阵为正交矩阵: R ⋅ R T = I ,   R − 1 = R T ; R\cdot R^T = I,~ R^{-1} = R^T; RRT=I, R1=RT;
  • 旋转矩阵的行列式为1: det ⁡ ( R ) = 1 \det(R)=1 det(R)=1.

同时,一个旋转矩阵也可以转换为四元数或旋转矢量来描述,下面会进行详细介绍。

2. 旋转矢量与旋转矩阵之间的相互转换

旋转矢量也称为角轴(Angle Axis),本身也是SO(3)对应的李代数 s o ( 3 ) \mathfrak{so}(3) so(3)由于 s o ( 3 ) \mathfrak{so}(3) so(3) 是SO(3)的切空间,所以旋转矢量也可以用于表达角速度

假设一个旋转矢量为 w ∈ R 3 \bm{w} \in R^3 wR3,且可以按照方向和大小分解为 w = θ n \bm{w} =\theta\bm{n} w=θn,那么从旋转矢量到旋转矩阵之间的转换关系,可以由罗德里格斯公式(Rodrigues’ Formula)或者SO(3)上的指数映射(Exponential Map)来描述:
R = cos ⁡ θ ⋅ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ ⋅ n ∧ = exp ⁡ ( w ∧ ) R=\cos\theta \cdot \bm{I} + (1-\cos \theta) \bm{n}\bm{n}^T + \sin\theta\cdot \bm{n}^{\wedge} = \exp(\bm{w}^{\wedge}) R=cosθI+(1cosθ)nnT+sinθn=exp(w)
此处的 exp ⁡ \exp exp也可以由泰勒展开化简后得到左侧公式。为了简化符号,通常可以记大写的 Exp \text{Exp} Exp为:
Exp ( w ) = exp ⁡ ( w ∧ ) \text{Exp}(\bm{w}) = \exp(\bm{w}^{\wedge}) Exp(w)=exp(w)

反过来,从旋转矩阵到旋转矢量之间的关系可以由对数映射描述:
w = log ⁡ ( R ) ∨ = Log ( R ) \bm{w} = \log(R)^{\vee} = \text{Log}(R) w=log(R)=Log(R)
其角轴的角度 θ \theta θ 计算方法为:
θ = arccos ⁡ ( t r ( R ) − 1 2 ) \theta = \arccos\left(\frac{tr(R) - 1}{2}\right) θ=arccos(2tr(R)1)
而其转轴 n \bm{n} n 则是矩阵 R R R 特征值1对应的单位特征向量:
R n = n R\bm{n} = \bm{n} Rn=n
求解此方程,再归一化就得到了旋转转轴。

3. 四元数

三维旋转也可以由单位四元数来描述。四元数是一种扩展的复数,由一个实部和三个虚部构成。它既是紧凑的,也没有奇异性,只需要存储4个数,因此在SLAM的工程代码实践中经常使用四元数来表示三维旋转。

Hamilton四元数是一种最常用、最直观的定义方式:
q = q 0 + q 1 i + q 2 j + q 3 k \bm{q}=q_0 +q_1 i + q_2 j + q_3 k q=q0+q1i+q2j+q3k
其中 q 0 q_0 q0为实部, q 1 ,   q 2 ,   q 3 q_1,~q_2,~q_3 q1, q2, q3为虚部。为了简化符号,可以把三个虚部元素记为虚部的矢量,那么四元数可以有标量部分 s s s 加矢量部分 v \bm{v} v 构成:
q = [ s , v ] T \bm{q}=[s, \bm{v}]^T q=[s,v]T

3.1 四元数的基本性质

四元数的基本性质包括加法、乘法、模长、共轭、逆、数乘等,这部分内容在网上的教程较多,在这里就不赘述,推荐一个博客:四元数的定义与属性。

3.2 四元数描述旋转

可以用四元数描述对一个点的旋转。
假设有一个空间三维点 p = [ x , y , z ] ∈ R 3 \bm{p} = [x,y,z] \in R^3 p=[x,y,z]R3,以及一个由单位四元数 q \bm{q} q指定的旋转,三维点经过旋转之后变为 p ′ \bm{p}' p,如果使用矩阵描述,则有
p ′ = R p \bm{p}' = R \bm{p} p=Rp

下面介绍如何使用四元数描述这个旋转关系。

用一个虚四元数来描述三维空间点:
p = [ 0 , x , y , z ] T = [ 0 , v ] T \bm{p} = [0, x, y, z]^T = [0, \bm{v}]^T p=[0,x,y,z]T=[0,v]T
相当于把四元数的三个虚部与空间的3个轴相对应。那么旋转后的点 p ′ \bm{p}' p即可表示为:
p ′ = q p q − 1 \bm{p}' = \bm{q} \bm{p} \bm{q}^{-1} p=qpq1
这里的乘法均为四元数乘法,结果也是四元数,最后把 p ′ \bm{p}' p 的虚部去除,即得到旋转之后的坐标。

4. 四元数与旋转矩阵、旋转矢量之间的变换

由于本篇博客主要是为了便于后续使用的时候查阅,所以下面的过程都跳过数学推导而直接给出结论。

4.1 四元数与旋转矢量之间的相互变换

设四元数为 q = [ s , v ] T \bm{q}=[s, \bm{v}]^T q=[s,v]T,对应的旋转矢量为 w = θ ⋅ n = θ ⋅ [ n x , n y , n z ] T \bm{w} =\theta\cdot \bm{n} = \theta\cdot[n_x, n_y, n_z]^T w=θn=θ[nx,ny,nz]T,则从四元数到旋转矢量之间的变换关系

θ = 2 arccos ⁡ s [ n x , n y , n z ] T = v T sin ⁡ θ 2 \theta = 2 \arccos s \\ [n_x, n_y, n_z]^T = \frac{\bm{v}^T}{\sin\frac{\theta}{2}} θ=2arccoss[nx,ny,nz]T=sin2θvT

反之,从旋转矢量到四元数之间的变换关系
s = cos ⁡ θ 2 v = n ⋅ sin ⁡ θ 2 s = \cos\frac{\theta}{2} \\ \bm{v} = \bm{n} \cdot \sin\frac{\theta}{2} s=cos2θv=nsin2θ

4.2 四元数到旋转矩阵之间的相互变换

设四元数为 q = [ s , v ] T \bm{q}=[s, \bm{v}]^T q=[s,v]T,则从四元数到旋转矩阵之间的变换关系

R = v v T + s 2 I + 2 s v ∧ + ( v ∧ ) 2 R = \bm{v} \bm{v}^T + s^2 \bm{I} + 2s \bm{v}^{\wedge} + (\bm{v}^{\wedge})^2 R=vvT+s2I+2sv+(v)2

反之,从旋转矩阵到四元数之间的变换关系可以先参考第2节将旋转矩阵 R R R 转化为旋转矢量 w = θ ⋅ n \bm{w} =\theta\cdot \bm{n} w=θn,再参考4.1节将旋转矢量转换为四元数 q = [ s , v ] T \bm{q}=[s, \bm{v}]^T q=[s,v]T

R ⇒ w = θ ⋅ n ⇒ s = cos ⁡ θ 2 ,   v = n ⋅ sin ⁡ θ 2 R\quad \Rightarrow \quad \bm{w} =\theta\cdot \bm{n} \quad \Rightarrow \quad s = \cos\frac{\theta}{2}, ~\bm{v} = \bm{n}\cdot\sin\frac{\theta}{2} Rw=θns=cos2θ, v=nsin2θ文章来源地址https://www.toymoban.com/news/detail-729841.html

参考教程

  1. 自动驾驶与机器人中的SLAM技术:从理论到实践/高翔著. —北京:电子工业出版社,2023.8
  2. 视觉SLAM十四讲:从理论到实践/高翔等著.— 2版. —北京:电子工业出版社,2019.9
  3. 四元数的定义与属性

到了这里,关于【SLAM数学基础】旋转的三种数学描述及其转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UnityShader(三)数学基础

    目录 前言 一、笛卡尔坐标系(Cartesian Coordinate System) 1.二维笛卡尔坐标系 2.三维笛卡尔坐标系 2.1.左手坐标系(left-handed coordinate space) 判断左手坐标系的方法: 判断左手坐标系的正向旋转(左手法则【left-hand rule】) 2.2.右手坐标系(right-handed coordinate space) 判断右手坐标

    2024年02月03日
    浏览(46)
  • 零基础学习数学建模——(一)什么是数学建模

    本篇博客将详细介绍什么是数学建模。 ​ 本人在本科阶段获得过国赛省一、mathorcup数学建模一等奖、五一杯数学建模一等奖、华数杯数学建模一等奖、亚太杯数学建模一等奖和两次美赛一等奖。自己在数学建模这条路上摸爬滚打了几年,现在想借助博客分享自己在数学建模

    2024年01月25日
    浏览(59)
  • python数学基础——单词统计

    这个练习使用的是英文的单词统计,使用split通过单词中间的空格来做区分,在遍历的过程中通过对【字典】类型进行【字典推导式】的处理来计算每个单词出现的频次。但是由于过程中我们通过re的正则表达式来替换掉了很多的符号,并没有替换成空,故而空的数量应该是最

    2024年02月06日
    浏览(47)
  • 机器学习的数学基础(上)

    []{#_Toc405731550 .anchor} 目录 机器学习的数学基础 1 高等数学 1 线性代数 9 概率论和数理统计 19 高等数学 1.导数定义: 导数和微分的概念 f ′ ( x 0 ) = lim ⁡ Δ x → 0   f ( x 0 + Δ x ) − f ( x 0 ) Δx f\\\'(x_{0}) = lim_{Delta x rightarrow 0},frac{f(x_{0} + Delta x) - f(x_{0})}{text{Δx}} f ′ ( x 0 ​

    2023年04月26日
    浏览(40)
  • 《3D 数学基础》12 几何图元

    目录 1. 直线、线段和射线 1.1 直线 1.2 射线 2. 球 3. AABB 4. 平面 5. 三角形 6. 多边形 经典定义  书中对射线定义做了修改:有向线段。  算法定义 p0是起始点,d是方向向量,单位向量。 自变量是t,可以很大超过1. p(0)=p0. p(2)=p0+2d; 算法实现  其中||p - c|| = r是球面公式,D=2r是直

    2024年02月13日
    浏览(39)
  • 人工智能的数学基础

    2023年09月13日
    浏览(71)
  • 【数学基础】直线点法式方程表达

    直线和坐标系可以画图为如图所示的形式: 直线 l l l 法线过原点,法线与直线相交于定点 P P P ,法线长度为 ρ ρ ρ ,法线方向矢量为 n n n ,法线和横轴夹角为 θ θ θ 。根据参考资料,直线的“点法式”表达式为: A ( X − X 0 ) + B ( Y − Y 0 ) = 0 A(X-X_0)+B(Y-Y_0)=0 A ( X − X 0 ​

    2024年02月07日
    浏览(54)
  • 线性代数 | 机器学习数学基础

    前言 线性代数 (linear algebra)是关于向量空间和线性映射的一个数学分支。它包括对线、面和子空间的研究,同时也涉及到所有的向量空间的一般性质。 本文主要介绍 机器学习 中所用到的线性代数 核心基础概念 ,供读者学习阶段查漏补缺或是 快速学习参考 。 线性代数

    2024年01月21日
    浏览(69)
  • 数学小课堂:数学与逻辑学的关系(逻辑是一切的基础)

    数学正是因为有内在的逻辑性,才避免了可能的自相矛盾之处。 人会身陷矛盾而不自知,是因为缺乏逻辑性。学习逻辑很好的方法,是学习好数学。 世界上任何一个个体都是独一无二的 数学上,要严格遵守同一律,概念定义得极为精确。 有同一律,才可以识别出每一个个体

    2024年02月06日
    浏览(44)
  • Unity基础1——3D数学

    ​ Math 是 C# 中封装好的用于数学计算的工具类 —— 位于 System 命名空间中 ​ Mathf 是 Unity 中封装好的用于数学计算的工具结构体 —— 位于 UnityEngine 命名空间中 ​ 他们都是提供来用于进行数学相关计算的 ​ Mathf 和 Math 中的相关方法几乎一样 ​ 但 Mathf 是 Unity 专门封装的,

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包