【视觉SLAM入门】2.旋转--李群与李代数

news2024/9/20 23:35:50

"川泽纳污"

注意:

  • Λ \boldsymbol {^\Lambda} Λ 记做“向量拉伸成矩阵”,(见外积)
  • V \boldsymbol {^V} V 记做“矩阵坍缩成向量”

0. 一个例子

今天所做的一切都是为了求解下边这个问题展开的! \textcolor{blue}{今天所做的一切都是为了求解下边这个问题展开的!} 今天所做的一切都是为了求解下边这个问题展开的!

\qquad 机器人位姿    T \;T T ,观察到世界坐标系中的点    p \;p p,产生观测数据    z , 误差为 w 或 e \;z, 误差为w或e z,误差为we
z = T p + w \qquad\qquad\qquad\qquad\qquad\qquad z = Tp +w z=Tp+w
\qquad 共有N个这样的观测数据和路标,我们的任务是寻找最优的T,使误差最小化
min ⁡ T J ( T ) = ∑ i = 1 N ∣ ∣ z i − T p i ∣ ∣ 2 2 \qquad\qquad\qquad\qquad\qquad\qquad \min\limits_TJ(\boldsymbol{T})=\sum\limits_{i=1}\limits^N||\boldsymbol{z_i-Tpi}||^2_2 TminJ(T)=i=1N∣∣ziTpi22

  • 最终要求解的是目标函数 J \boldsymbol{J} J关于变换矩阵 T \boldsymbol T T的导数
  • 我们经常会构建与位姿有关的函数,然后讨论该函数关于位姿的导数,以调整当前的估计值

1. 群和李群

  • 特殊正交群与特殊欧式群:
    S O ( 3 ) \qquad \qquad \qquad SO(3) SO(3) = { R ∈ R 3 x 3 ∣ R R T = I , d e t ( R ) = 1 R \in \R^{3x3} | RR^T=I, det(R)=1 RR3x3RRT=I,det(R)=1}

S E ( 3 ) \quad \qquad \qquad SE(3) SE(3) = { T = [ R t 0 T 1 ] ∈ R 4 x 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 T= \begin{bmatrix} \quad R&t&\\\quad0^T&1 \end{bmatrix} \in \R^{4x4} | R \in SO(3), t \in \R^3 T=[R0Tt1]R4x4RSO(3),tR3}

不难发现, R 和 T R和T RT 对加法不封闭,即 R 1 + R 2 ∉ S O ( 3 ) R_1+R_2 \notin SO(3) R1+R2/SO(3)


群: 只有一个运算的集合,即一种集合( 记作    A 记作\; A 记作A )+ 一种代数结构( 记作 . 记作 . 记作.)。
群有四个性质,分别是 “封闭性、结合律、幺元、逆”
在这里插入图片描述常见的群:一般线性群    G L ( n ) \;GL(n) GL(n)(对乘法), 特殊正交群    S O ( n ) \; SO(n) SO(n) ,特殊欧式群    S E ( n ) \;SE(n) SE(n)


李群 S O ( 3 ) SO(3) SO(3)对乘法封闭,表示旋转,且连续,因为在实数空间物体的旋转是连续的。所以它是一种李群。 严谨地,李群是指具有连续(光滑)性质的群。

  • 由于 S O ( 3 ) SO(3) SO(3) S E ( 3 ) SE(3) SE(3)这两个李群对SLAM较为重要,主要讨论着两个李群。

2. 李代数

2.1 推导和性质

R R R为正交阵且 R R T = I RR^T=I RRT=I开始推导,如下(笔记潦草,勿怪):

在这里插入图片描述 \qquad\qquad\qquad 这里,可以知道 R ( t ) R ( t ) T = ϕ ( t ) R(t)R(t)^T=\phi(t) R(t)R(t)T=ϕ(t)^为反对称矩阵,上边记得 ^ 和v,分别表示把向量张成反对称矩阵(参考外积)和它的反向操作,接着对 R R R的导数进行研究

在这里插入图片描述以上可以看出,每次求导,仅需要左乘一个    ϕ ( t ) \; \phi(t) ϕ(t)^ 即可。
将R(t)进行泰勒展开:

R ( t ) ≈ R ( t 0 ) + R ˙ ( t 0 ) ( t − t 0 ) = I + ϕ ( t 0 ) \qquad\qquad\qquad\qquad\qquad R(t) \approx R(t_0)+\dot{R}(t_0)(t-t_0) = I + \phi(t_0) R(t)R(t0)+R˙(t0)(tt0)=I+ϕ(t0)^ ( t ) (t) (t)

观察可得,这里 ϕ \phi ϕ实际反应的导数的性质。

  • 特别地,研究初始时刻    t 0 = 0 \;t_0=0 t0=0    R ( 0 ) = I \;R(0)=I R(0)=I:

R ˙ ( t ) = ϕ ( t 0 ) \qquad\qquad\qquad\qquad \dot{R}(t) = \phi(t_0) R˙(t)=ϕ(t0)^ R ( t ) = ϕ 0 R(t)=\phi_0 R(t)=ϕ0^ R ( t ) R(t) R(t)

解这个(一阶常线性)微分方程得 R ( t ) = e x p ( ϕ 0 \qquad R(t) = exp(\phi_0 R(t)=exp(ϕ0^ t ) t) t)

  • 至此, ϕ \phi ϕ就正是对应    S O ( 3 ) \;SO(3) SO(3) 上的李代数    s o ( 3 ) \; \mathscr{so(3)} so(3)。旋转矩阵R与李代数 ϕ 0 \phi_0 ϕ0 通过指数关系发生了联系,反映了R在局部的导数关系。

李代数: 记作    g \;\mathscr {g} g 描述了李群的局部性质,通用李代数定义和性质如下。定义中的二元运算被称为李括号。如,三维向量 R 3 R_3 R3上定义的叉积就是一种李代数    g = ( R 3 , R , \; \mathscr{g} = (\R^3,\R, g=(R3,R,X ) ) )

李代数定义和性质

2.2 s o ( 3 ) \mathscr{so(3)} so(3) s e ( 3 ) \mathscr{se(3)} se(3)

so(3):三维

\qquad 因为    ϕ \;\phi ϕ 本来代表向量,但是每个R都可以生成一个矩阵,它们关系紧密,后文不区分它是v后的矩阵,还是^后的向量,择适者用。
\qquad s o ( 3 ) \mathscr{so(3)} so(3) 表示一个由三维向量组成的集合,每个向量对应到一个反对称矩阵,可以表达旋转矩阵的导数。它与 SO(3) 的关系由指数映射给定:
如下
R = e x p ( ϕ \qquad\qquad\qquad\qquad\qquad R=exp(\phi R=exp(ϕ^ ) ) )

它的李括号运算: [ ϕ 1 , ϕ 2 ] = ( Φ 1 Φ 2 − Φ 2 Φ 1 ) V [\phi_1,\phi_2] = (\Phi_1\Phi_2 - \Phi_2\Phi_1)^V [ϕ1,ϕ2]=(Φ1Φ2Φ2Φ1)V

se(3):六维

也表示类似局部导数的性质,但是下文的v和^仅仅指代向量和矩阵的互换,与反对称无关。
定义如下:
在这里插入图片描述

李括号运算:
在这里插入图片描述

2.3 计算李代数的幂    e x p ( ϕ \;exp(\phi exp(ϕ^ ) ) )

so(3)的映射:
\qquad 这里称计算    e x p ( ϕ \;exp(\phi exp(ϕ^ ) ) ) 的步骤为指数映射(Exponential Map)
矩阵指数映射的计算公式: e x p ( ϕ ) = ∑ n = 0 ∞ 1 n ! ( ϕ ) n \quad exp(\phi) = \sum\limits_{n=0}\limits^\infty{\frac{1}{n!}(\phi)^n} exp(ϕ)=n=0n!1(ϕ)n

定义 ϕ = θ a , a \phi=\theta a, a ϕ=θa,a是方向向量,模长1。推导可得:

在这里插入图片描述

和罗德里格斯公式一模一样,侧面反映了李代数 ≈ \approx 旋转向量,而李群是旋转矩阵。用迹则可以求    θ \;\theta θ    a \; a a,在    θ ∈ [ − π , π ] \;\theta \in [-\pi, \pi] θ[π,π] 内,是一一对应的。

se(3)的映射:
\quad 由上述内容,和so(3)推导一致可得
ξ Λ = [ ϕ Λ ρ 0 T 1 ] 故 e x p ( ξ Λ ) = [ R J ρ 0 T 1 ] \xi^\Lambda = \begin{bmatrix} \phi^\Lambda & \rho \\0^T &1 \end{bmatrix} \qquad故\qquad exp(\xi^\Lambda) = \begin{bmatrix} R & J\rho \\0^T &1 \end{bmatrix} ξΛ=[ϕΛ0Tρ1]exp(ξΛ)=[R0TJρ1]
\qquad 注意:旋转部分指数映射同 s o ( 3 ) \boldsymbol {so(3)} so(3),(不同才搞笑了)平移部分在做指数映射后多了一项系数矩阵    J \;\boldsymbol {J} J ,也有点像罗德里格斯公式(仍然设    ϕ = θ a \;\phi = \theta a ϕ=θa):

在这里插入图片描述
最后上一张所有推导的总结(图源《视觉SLAM14讲》)
指数映射和对数映射

2.4 李代数乘法

SO(3):
\qquad 李群乘法即李代数加法,但是矩阵的指数映射不满足常数的 e a ⋅ e b = e ( a + b ) e^a \cdot e^b = e^{(a+b)} eaeb=e(a+b)
\qquad 求解李代数指数映射乘积还得看BCH公式(Baker-Campbell-Hausdorff),如下:

l n ( e A ⋅ e B ) = A + B + 1 2 [ A , B ] + 1 12 [ A , [ A , B ] ] − 1 12 [ B , [ A , B ] ] + . . . . . . \qquad\qquad\qquad ln(e^A\cdot e^B)=A+B+\frac{1}{2}[A,B]+\frac{1}{12}[A,[A,B]]-\frac{1}{12}[B,[A,B]]+...... ln(eAeB)=A+B+21[A,B]+121[A,[A,B]]121[B,[A,B]]+......

其中的 [ ] 表示李括号,当A或B为极小量的时候,BCH的线性近似表达如下:

在这里插入图片描述- 直观的理解上式:李群的R1和R2左乘近似(R1小)或右乘近似(R2小)而已。其实就是 Δ R ⋅ R \Delta R \cdot R ΔRR   R ⋅ Δ R \ R \cdot \Delta R  RΔR。一个微小位移。
\qquad 我们以左乘为例计算一下    J l − 1 \;J_l^{-1} Jl1

  1. 首先左乘的标注形式为:
    J l = J = sin ⁡ θ θ I + ( 1 − sin ⁡ θ θ ) a a T + 1 − cos ⁡ θ θ a Λ \qquad\qquad\qquad J_l = J=\frac {\sin \theta}{\theta}I + (1-\frac {\sin \theta}{\theta})aa^T + \frac {1-\cos \theta}{\theta}a^\Lambda Jl=J=θsinθI+(1θsinθ)aaT+θ1cosθaΛ
  2. 计算它的逆矩阵
    J l − 1 = θ 2 cot ⁡ θ 2 ⋅ I + ( 1 − θ 2 cot ⁡ θ 2 ) a a T + θ 2 a Λ \qquad\qquad\qquad J_l^{-1}=\frac {\theta}{2}\cot \frac {\theta}{2} \cdot I+ (1-\frac {\theta}{2}\cot \frac {\theta}{2})aa^T + \frac {\theta}{2}a^\Lambda Jl1=2θcot2θI+(12θcot2θ)aaT+2θaΛ
  3. 则右乘雅克比仅对自变量取负号即可:
    J r ( ϕ ) = J l ( − ϕ ) \qquad\qquad\qquad\qquad\qquad\qquad J_r(\phi)=J_l(-\phi) Jr(ϕ)=Jl(ϕ)

SE(3)类似:
在这里插入图片描述

2.5 从李代数乘法到导数:

\qquad 参考前边的例子:我们知道,最终要求解的是目标函数 J \boldsymbol{J} J关于变换矩阵 T \boldsymbol T T的导数。从上边所有的铺垫到现在,有两种方法求解导数,分别介绍:

2.5.1 直接求导

对SO(3)
空间点p经过旋转
\qquad 便于理解的记法,设 R R R对应的李代数为 ϕ \phi ϕ
∂ ( R p ) ∂ R = ∂ ( e x p ( ϕ Λ ) p ) ∂ ϕ ⟹   − ( R p ) Λ J l \frac {\partial(Rp)} {\partial R} =\frac {\partial(exp(\phi^{\Lambda})p)} {\partial \phi} \\ \quad \\ \Longrightarrow\ -(Rp)^\Lambda J_l R(Rp)=ϕ(exp(ϕΛ)p) (Rp)ΛJl

  • 第二行中省略了很多推导步骤,包括导数定义展开、BCH线性近似、泰勒展开舍去高阶项近似、将反对称符号看做叉积,交换后变号。

2.5.2 扰动模型求导(常用)

对SO(3)
空间点p的旋转可以看成一次左扰动
\qquad 扰动记作    Δ R \;\Delta R ΔR,李代数为    φ \; \varphi φ,则
∂ ( R p ) ∂ φ = lim ⁡ φ → 0 e x p ( φ Λ ) e x p ( ϕ Λ ) p − e x p ( ϕ Λ ) p φ ⟹   − ( R p ) Λ \frac {\partial(Rp)} {\partial \varphi} =\lim_{\varphi \to 0} \frac {exp(\varphi^{\Lambda})exp(\phi^{\Lambda})p - exp(\phi^{\Lambda})p} {\varphi} \\ \quad \\ \Longrightarrow\ -(Rp)^\Lambda φ(Rp)=φ0limφexp(φΛ)exp(ϕΛ)pexp(ϕΛ)p (Rp)Λ

  • 常用,简单,在位姿估计中有重要意义

对SE(3)
直接上扰动    Δ T = e x p ( δ ξ Λ ) \;\Delta \boldsymbol T = exp(\delta \xi ^\Lambda) ΔT=exp(δξΛ),它的李代数    δ ξ = [ δ ρ , δ ϕ ] T \;\delta\boldsymbol \xi = [\delta \boldsymbol \rho, \delta \phi]^T δξ=[δρ,δϕ]T
直接上结果

∂ ( T p ) ∂ δ ξ = [ I − ( R p + t ) Λ 0 T 0 T ] = △ ( T p ) ⊙ \frac {\partial (Tp)}{\partial \delta \xi } = \begin{bmatrix} I&-(Rp+t)^\Lambda \\0^T & 0^T \end{bmatrix} =^{\triangle} (Tp)^\odot δξ(Tp)=[I0T(Rp+t)Λ0T]=(Tp)

其中 ⊙ \odot 表示,一个齐次坐标展开成4X6的矩阵

3. S i m ( 3 ) Sim(3) Sim(3)与李代数

\qquad 相似变换群( S i m Sim Sim),用于解决单目SLAM中的尺度问题,在这种情况下会显式表示出尺度    s \;s s,此时相机坐标系下的点经过相似变换(不是欧式变换):
描述该过程如下:

p ′ = [ s R t 0 T 1 ] p = s R p + t p' = \begin{bmatrix} \boldsymbol{sR}&t \\0^T&1 \end{bmatrix}p = s\boldsymbol{Rp+t} p=[sR0Tt1]p=sRp+t

S i m ( 3 ) Sim(3) Sim(3)如下:

S i m ( 3 ) = { [ S = s R t 0 T 1 ] ∈ R 4 × 4 } Sim(3) =\begin{Bmatrix} \begin{bmatrix}\boldsymbol S= \begin{matrix} \boldsymbol{sR}&t \\0^T&1 \end{matrix} \end{bmatrix}\in \R^{4\times4}\end{Bmatrix} Sim(3)={[S=sR0Tt1]R4×4}

  • 同样的,尽管多了一个维度,它仍然具有李代数(7维),指数映射,对数映射, J J J , 导数(扰动模型),以后做单目我再自行了解吧 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/729392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100天精通Golang(基础入门篇)——第14天:深入解析Go语言函数->从概念到实践,助您精通基础知识!(基础)

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

第11章:C语言数据结构与算法初阶之排序

系列文章目录 文章目录 系列文章目录前言排序的概念及其运用排序的概念常见的排序算法 常见排序算法的实现1.直接插入排序2. 希尔排序(缩小增量排序)3. 直接选择排序4. 堆排序5. 冒泡排序6. 快速排序将区间按照基准值划分为左右两半部分的常见方式&#…

使用selenium爬取猫眼电影榜单数据

文章目录 前言导入所需的库&#xff1a;设置ChromeDriver的路径&#xff0c;并创建一个Chrome浏览器实例&#xff1a;打开目标网页&#xff0c;这里以猫眼电影榜单页面为例&#xff1a;使用XPath定位电影信息。通过查看网页源代码&#xff0c;发现电影信息所在的<dd>标签…

深度学习之目标检测Faster RCNN模型算法流程详解说明(超详细理论篇)

1.Faster RCNN论文背景 2. Faster-RCNN算法流程 &#xff08;1&#xff09;Fast-RCNN算法流程 &#xff08;2&#xff09;特征提取conv layers &#xff08;3&#xff09;Region Proposal Networks(RPN) &#xff08;4&#xff09;ROI Pooling作用 &#xff08;5&#xff09;Cl…

Spring定时器调度实现的原理

1、使用Spring定时器任务实现 package com.suyun.modules.vehicle.timetask;import com.alibaba.schedulerx.worker.domain.JobContext; import com.alibaba.schedulerx.worker.processor.JavaProcessor; import com.alibaba.schedulerx.worker.processor.ProcessResult; impo…

arm学习cortex-A7中断按键控制led灯亮灭

main.c #include "key.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int main() {//rcc初始化 RCC->MP_AHB4ENSETR | (0x3 << 4);//初始化按键GPIOF模式为输入模式…

cyclo(-D-Ala-Val),15136-27-3,可以通过肽筛选发现的多肽

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ 为大家介绍&#xff08;CAS&#xff1a;15136-27-3&#xff09;,试剂仅用于科学研究&#xff0c;不可用于人类&#xff0c;非药用&#xff0c;非食用。 英文名称&#xff1a…

从刷题到解决问题再到研究创新

题记&#xff1a;死的知识学再多也没大用。 明明自觉学会了不少知识&#xff0c;可真正开始做题时&#xff0c;却还是出现了“一支笔&#xff0c;一双手&#xff0c;一道力扣&#xff08;Leetcode&#xff09;做一宿”的窘境&#xff1f;你是否也有过这样的经历&#xff0c;题…

移动端H5页面引入高德地图的一些问题记录

web端显示 移动端显示 移动端和web端显示的地图范围一样大&#xff0c;并且在移动端地图的zoom和web端一致 这个问题是在公司开发邀请函的时候碰到的&#xff0c;因为要在移动端显示的范围足够大&#xff0c;使用zoom并不能满足需求了&#xff0c;例如如下代码 amap new AMa…

Sqlserver 中nchar(n)、varchar(n)、nvarchar(n)和nvarchar(max)的区别

nchar(n): 固定大小字符串数据。 n 用于定义字符串大小&#xff08;以双字节为单位&#xff09;&#xff0c;并且它必须是 1 到 4,000 之间的值。 存储大小为 n 字节的两倍。 varchar(n): 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间…

解决Rstudio server is taking longer than usual.

经常用Rstudio server访问服务器&#xff0c;但长时间使用未清理缓存时出现了以下界面&#xff1a; 点任何一个键都无法解决&#xff0c;查询了一下原因是由于当使用RStudio Server处理占内存极大的数据后&#xff0c;长时间不清理内存&#xff0c;当再次打开rstudio&#xff0…

IPC-核间通讯

1. IPC通讯是AUTOSAR体系结构中的核心组成部分&#xff0c;它使得不同的软件组件可以相互通信、协同工作&#xff0c;从而实现整车系统的功能。IPC可以理解为核间通讯&#xff0c;就是一个芯片有多个核&#xff0c;现在想让多核之间通信&#xff0c;达到下面几个目的&#xff1…

Docker自学记录笔记

安装联系Docker命令 1. 搜索镜像 docker search nagin 2. 下载镜像 3. 启动nginx 强调文本 强调文本 加粗文本 加粗文本 标记文本 删除文本 引用文本 H2O is是液体。 210 运算结果是 1024. 插入链接与图片 链接: link. 图片: 带尺寸的图片: 居中的图片: 居中并…

初识win32

很多人都说windows编程凉了&#xff0c;实则不然&#xff0c;因为微软不倒&#xff0c;我们还在使用微软提供的winddows操作系统&#xff0c;windows编程就不会消亡&#xff0c;MFC也是一样&#xff0c;不可否认其他编程语言的方便&#xff0c;强大&#xff0c;但是windows编程…

深入理解linux物理内存

目录 物理内存热插拔 从 CPU 角度看物理内存架构 内核如何管理 NUMA 节点 NUMA 节点物理内存区域的划分 NUMA 节点的状态 node_states 物理内存区域中的水位线 物理内存区域中的冷热页 内核如何描述物理内存页 匿名页的反向映射 物理内存热插拔 物理热插拔阶段&#xff…

『赠书活动 | 第十四期』《Spring Cloud Alibaba核心技术与实战案例》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第十四期』 本期书籍&#xff1a;《Spring Cloud Alibaba核心技术与实战案例》 公众号赠书&#xff1a;第五期 参与方式&#xff1a;关注公…

【Linux 驱动篇(四)】设备树

文章目录 一、什么是设备树二、DTS、 DTB 和 DTC三、DTS 语法1. .dtsi 头文件2. 设备节点3. 标准属性3.1 compatible 属性3.2 model 属性3.3 status 属性3.4 #address-cells 和#size-cells 属性3.5 reg 属性 ...... 一、什么是设备树 设备树(Device Tree)&#xff0c;将这个词分…

为什么不建议企业用薪资系统来跟踪项目时间?

身处在一个每分钟都很重要的世界里&#xff0c;企业必须勤于管理时间和工资。 虽然使用薪资系统进行时间跟踪似乎是一个实用的解决方案&#xff0c;但这种方法可能导致许多问题。 本文将讨论专用的时间跟踪软件对任何组织都必不可少的原因&#xff0c;以及依靠薪资系统进行时…

推特、微博对手Threads软件的下载、注册、使用最新超详细教程

经过马斯克不断折腾&#xff0c;推特面临用户大量流失的风险&#xff0c;尤其近期限制推文阅读量&#xff0c;更是导致大量用户出走。 于是乎&#xff0c;Meta公司7月6日正式发布对标推特的新社交平台 Threads&#xff0c;当前Threads只能在 iOS、Android 平台上安装 APP 使用&…

【JAVA】爱心代码--java特供(可直接复制,亲测有效)

个人主页&#xff1a;【&#x1f60a;个人主页】 文章目录 前言爱心的数学原理爱心代码基本版本带二种 前言 回看过去我发现我的第一篇博客竟然是一篇关于C语言爱心代码的博客&#xff08;真是个奇怪的开始&#xff09;&#xff0c;不过这么长时间过去了&#xff0c;我的编程语…