滤波算法与SLAM:预备知识及SLAM基础八股文

滤波算法与SLAM

第一章:预备知识(均来自视觉SLAM十四讲的三、四讲)
本系列并不面向0基础SLAM小白,默认读者拥有一定的slam和机器人开发经验
至少跑过了基础开源代码如FAST_LIO或ORB-SLAM,理解坐标系变换等基本知识



前言

本章内容包含SLAM基础数学知识,包括旋转矩阵、李群、李代数等
如需要进一步公式推导或更细致的内容,推荐阅读《视觉SLAM十四讲》第三讲和第四讲


一、状态方程与观测方程

定义机器人在 k k k时刻的状态为 x k x_k xk,输入为 u k u_k uk,状态噪声为 ω k \omega_k ωk,则状态传递满足:
x k + 1 = f ( x k , u k , ω k ) x_{k+1} = f(x_k,u_k,\omega_k) xk+1=f(xk,uk,ωk)设机器人在 k k k时刻观测到环境中第 j j j个路标 y y y,观测噪声为 ν k , j \nu_{k,j} νk,j,则观测方程定义为: z k , j = h ( y j , x k , ν k , j ) z_{k,j} = h(y_j, x_k, \nu_{k,j}) zk,j=h(yj,xk,νk,j)这里的路标在代码中的表现形式取决于传感器的信息维度。如果是相机,则 y j y_j yj实际上代表一个特征点的坐标,如果是雷达,则是三维点。不管如何,其代表的意义都是:真实世界中某一点在传感器坐标系中的投影。

二、齐次坐标

定义三维点 p = [ x , y , z ] T ∈ R 3 p=[x,y,z]^T \in\mathbb R^3 p=[x,y,z]TR3,则其具有唯一的齐次坐标 p ~ = [ x , y , z , 1 ] T ∈ R 4 \tilde{p}=[x,y,z,1]^T \in \mathbb R^4 p~=[x,y,z,1]TR4

三、刚体变换、相似变换

变换矩阵一般记为 T T T,按照《视觉SLAM十四讲》的习惯,记 T 21 T_{21} T21为坐标系1到坐标系2的变换矩阵。
例如:在通用的场景下,设 p 1 ~ , p 2 ~ \tilde{p_1},\tilde{p_2} p1~,p2~两个点,则有 p 2 ~ = T 21 p 2 ~ \tilde{p_2} = T_{21}\tilde{p_2} p2~=T21p2~
在多传感器融合的场景下, T L C T_{LC} TLC也可代表相机到雷达的外参矩阵
在先验地图定位的场景下, T k 0 T_{k0} Tk0也可代表k时刻机器人在地图中的位姿,虽然一般这种情况论文中会记为 T 0 k T_0^k T0k
具体地, T T T一般可以写为
T = [ R t 0 1 ] ∈ S E ( 3 ) T=\begin{bmatrix} R&t\\ 0&1\\ \end{bmatrix}\in SE(3) T=[R0t1]SE(3)
其中 R , t R,t R,t分别代表旋转矩阵和平移向量,满足 R ∈ S O ( 3 ) , t ∈ R 3 R\in SO(3), t\in \mathbb R^3 RSO(3),tR3
则对于 p 2 ~ = T 21 p 2 ~ \tilde{p_2} = T_{21}\tilde{p_2} p2~=T21p2~也可以写为 p 2 = R p 1 + t p_2=Rp_1+t p2=Rp1+t
相似变换一般记为 S S S,写为
S = [ s R t 0 1 ] ∈ S i m ( 3 ) S=\begin{bmatrix} sR&t\\ 0&1\\ \end{bmatrix}\in Sim(3) S=[sR0t1]Sim(3)
在单目视觉SLAM中会常用到,这里不展开

四、升维&降维符号

这里遵循《视觉SLAM十四讲》中对" ∧ \land "符号的定义,对向量 a = [ a 1 , a 2 , a 3 ] T a=[a_1,a_2,a_3]^T a=[a1,a2,a3]T
a ∧ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] = A a^\land = \begin{bmatrix} 0&-a_3&a_2\\ a_3&0&-a_1\\ -a_2&a_1&0\\ \end{bmatrix} =A a= 0a3a2a30a1a2a10 =A
同理的,对“ ∨ \vee ”满足: A ∨ = a A^\vee=a A=a
这一变换为了方便记住,本文称" ∧ \land "为升维,将 3 ∗ 1 3*1 31的向量升维到 3 ∗ 3 3*3 33矩阵,“ ∨ \vee ”则为降维符号

五、其他的旋转表示方法

1)欧拉角:用XYZ三轴上的旋转角度表示一次旋转,roll-pitch-yaw分别对应X-Y-Z轴上的旋转,存在万向锁的问题,一般不用;
2)旋转向量:用一个单位向量 n ⃗ \vec{n} n 和一个旋转角 θ \theta θ表示一次旋转,使用罗德里格旋转公式和旋转矩阵转换:
R = c o s θ ⋅ I + ( 1 − c o s θ ) n ⃗ ⋅ n ⃗ T + s i n θ ⋅ n ⃗ ∧ θ = a r c c o s t r ( R ) − 1 2 \begin{matrix} R=cos\theta\cdot I+(1-cos\theta)\vec{n}\cdot\vec{n}^T+sin\theta\cdot\vec{n}^\land\\ \\ \theta=arccos\frac{tr(R)-1}{2} \end{matrix} R=cosθI+(1cosθ)n n T+sinθn θ=arccos2tr(R)1
3)四元数:一般记为 q = [ w , x , y , z ] T q=[w,x,y,z]^T q=[w,x,y,z]T,代表一次旋转,亦记为 q = [ s , v ⃗ ] T q=[s,\vec{v}]^T q=[s,v ]T。设 q 21 q_{21} q21代表 R 21 R_{21} R21对应的四元数,那么 p 2 , p 1 p_2,p_1 p2,p1满足:
p 2 = R 21 p 1 = q 21 p 1 q 21 − 1 p_2=R_{21}p_1=q_{21}p_1q_{21}^{-1} p2=R21p1=q21p1q211
由四元数计算旋转矩阵通过以下公式:
R = v ⃗ v ⃗ T + s 2 ⋅ I + 2 s ⋅ v ⃗ ∧ + ( v ⃗ ∧ ) 2 R=\vec{v}\vec{v}^T+s^2\cdot I+2s\cdot \vec{v}^\land +(\vec{v}^\land)^2 R=v v T+s2I+2sv +(v )2

六、李群&李代数

终于到这里了,最麻烦的内容,简单过一下面试能答点就行
李群的定义可以简单理解为:只对一种运算封闭的集合,叫做李群(但是作为普通SLAM玩家不需要管这些)
对于旋转矩阵 R R R,属于李群 S O ( 3 ) SO(3) SO(3),满足: R 1 R 2 ∈ S O ( 3 ) R_1R_2\in SO(3) R1R2SO(3),但是 R 1 + R 2 ∉ S O ( 3 ) R_1+R_2\notin SO(3) R1+R2/SO(3),同理变换矩阵 T T T属于李群 S E ( 3 ) SE(3) SE(3)
对于旋转矩阵,定义李代数 ϕ ∈ R 3 \phi\in\mathbb R^3 ϕR3,那么有 R = exp ⁡ ( ϕ ∧ ) R=\exp(\phi^\land) R=exp(ϕ)这一公式也叫指数变换:已知李代数,求李群
同理有对数变换:已知李群,求李代数
理解起来可能有点乱,代入正常的指数函数就好理解了,知道x,求exp(x)就是对x进行指数变换
就像已知李代数,要对李代数进行指数变换才能得到李群,即:李群=exp(李代数)
李代数的表示类似李群,即: R ∈ S O ( 3 ) , ϕ ∈ s o ( 3 ) R\in SO(3), \phi\in so(3) RSO(3),ϕso(3) T ∈ S E ( 3 ) , ξ ∈ s e ( 3 ) T\in SE(3), \xi \in se(3) TSE(3),ξse(3)
李括号用于表示两个李代数的差异性,如果是自身与自身的李括号,则为0(因为没有差别嘛)

七、BCH近似

引入李代数和李群,一个原因是旋转矩阵不满足加减法,只能乘除,李代数则有加减法
如果是简单的指数函数 e x e^x ex x y = e x + y xy=e^{x+y} xy=ex+y是显而易见的
但是对旋转矩阵是否也满足这个,答案是否定的,所以引入BCH近似,用于表示李群乘法在李代数上的表现
设旋转矩阵 R R R对应李代数 ϕ \phi ϕ,增加一旋转 Δ R \Delta R ΔR,对应李代数 Δ ϕ \Delta \phi Δϕ
那么对于旋转 Δ R ⋅ R \Delta R\cdot R ΔRR,设其对应的李代数为 ϕ g t \phi_{gt} ϕgt
则用BCH近似可得 ϕ g t = J l − 1 ( ϕ ) Δ ϕ + ϕ \phi_{gt}=J_l^{-1}(\phi)\Delta \phi+\phi ϕgt=Jl1(ϕ)Δϕ+ϕ这里的雅可比矩阵与指数映射过程有关

八、李代数求导

R R R是对点 p p p的一次旋转,得到结果 R p Rp Rp,求其对旋转的偏导数,而旋转矩阵并无加减法计算,无法求导,所以转为对李代数求导
回想导数的定义: d f ( x + Δ x ) d ( Δ x ) = lim ⁡ Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x \frac{df(x+\Delta x)}{d(\Delta x)}=\lim_{\Delta x\rightarrow 0 }\frac{f(x+\Delta x)-f(x)}{\Delta x} d(Δx)df(x+Δx)=Δx0limΔxf(x+Δx)f(x)
而《视觉SLAM十四讲》中提到的左扰动模型,是对旋转左乘一个微小扰动 Δ R \Delta R ΔR,对应的李代数为 Δ ϕ \Delta \phi Δϕ,那么有 ∂ R p ∂ Δ ϕ = lim ⁡ Δ ϕ → 0 Δ R ⋅ R p − Δ R p Δ ϕ = lim ⁡ Δ ϕ → 0 e x p ( Δ ϕ ∧ ) e x p ( ϕ ∧ ) p − e x p ( Δ ϕ ∧ ) p Δ ϕ \frac{\partial Rp}{\partial\Delta\phi}=\lim_{\Delta \phi\rightarrow 0 }\frac{\Delta R\cdot Rp-\Delta Rp}{\Delta \phi}=\lim_{\Delta \phi\rightarrow 0 }\frac{exp(\Delta\phi^\land)exp(\phi^\land)p-exp(\Delta\phi^\land)p}{\Delta \phi} ΔϕRp=Δϕ0limΔϕΔRRpΔRp=Δϕ0limΔϕexp(Δϕ)exp(ϕ)pexp(Δϕ)p计算过程不复杂,最后结果为 ∂ R p ∂ Δ ϕ = − ( R p ) ∧ \frac{\partial Rp}{\partial\Delta\phi}=-(Rp)^\land ΔϕRp=(Rp)
相比直接求导省去一个雅可比矩阵的计算,同样的,对变换矩阵也有:
∂ T p ∂ Δ ξ = [ I − ( R p + t ) ∧ 0 T 0 T ] \frac{\partial Tp}{\partial\Delta\xi}=\begin{bmatrix} I&-(Rp+t)^\land\\ 0^T&0^T\\ \end{bmatrix} ΔξTp=[I0T(Rp+t)0T]


  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值