SLAM十四讲笔记1

本文深入浅出地介绍了视觉SLAM技术,覆盖经典框架、数学表述、三维空间刚体运动、李群李代数、相机模型与图像处理、非线性优化及视觉里程计等内容。通过解析视觉里程计、特征点匹配、PnP问题等关键环节,揭示了SLAM在估计相机运动、地图构建中的核心算法与优化策略。

文章目录

ch02 初识SLAM

ch02-01 经典视觉SLAM框架

在这里插入图片描述

视觉SLAM流程包括以下步骤:

  1. 传感器信息读取: 在视觉SLAM中主要为相机图像信息的读取和预处理.如果是在机器人中,还可能有码盘、惯性传感器等信息的读取和同步.
  2. 视觉里程计(Visual Odometry,VO): 视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子.VO又称为前端(Front End).

视觉里程计不可避免地会出现累积漂移(Accumulating Drift)问题.

  1. 后端优化 (Optimization): 后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图.由于接在VO之后,又称为后端(Back End).

在视觉 SLAM中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法.

  1. 回环检测 (Loop Closing): 回环检测判断机器人是否到达过先前的位置.如果检测到回环,它会把信息提供给后端进行处理.
  2. 建图 (Mapping): 它根据估计的轨迹,建立与任务要求对应的地图.

地图的形式包括度量地图(精确表示地图物体的位置关系)与拓扑地图(更强调地图元素之间的关系)两种.

ch02-02 SLAM问题的数学表述

“小萝卜携带着传感器在环境中运动”,由如下两件事情描述:

  • 1.什么是运动 ?我们要考虑从k − 1时刻到 k 时刻,小萝卜的位置 x 是如何变化的.

运动方程:

x k = f ( x k − 1 , u k , w k ) x_k = f(x_{k-1},u_k,w_k) xk=f(xk1,uk,wk)

x_k, x_{k-1} 表 示 小 罗 卜 在 k 和 k − 1 时 刻 的 位 置 , 表示小罗卜在k和 k-1 时刻的位置, kk1u_k 表示运动传感器的读数(有时也叫输入) , w k w_k wk 表示运动噪声

  • 2.什么是观测 ?假设小萝卜在 k k k时刻于 x_k处探测到了某一个路标y_j,我们要考虑这件事情是如何用数学语言来描述的.

观测方程:
z k , j = h ( y j , x k , v k , j ) z_{k,j} = h(y_{j},x_k,v_{k,j}) zk,j=h(yj,xk,vk,j)

z k , j z_{k,j} zk,j表示小萝卜在 x k x_k xk位置上看到路标点 x k x_k xk,产生的观测数据; y j y_j yj表示第 j个路标点 ; v k , j ) v_{k,j}) vk,j)表示观测噪声

这两个方程描述了最基本的SLAM问题:当知道运动测量的读数u ,以及传感器的读数z 时,如何求解定位问题(估计x )和建图问题(估计 y).这时,我们就把SLAM问题建模成了一个状态估计问题:如何通过带有噪声的测量数据,估计内部的、隐藏着的状态变量?

ch03 三维空间刚体运动

ch03.01 旋转矩阵:点和向量,坐标系

01 向量a在线性空间的基 [ e 1 , e 2 , e 3 ] [e_1,e_2,e_3] [e1,e2,e3]下的坐标为 [ a 1 , a 2 , a 3 ] T [a_1,a_2,a_3]^T [a1,a2,a3]T.

a = [ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = a 1 e 1 + a 2 e 2 + a 3 e 3 a = [e_1,e_2,e_3] \left[ { a_1\\ a_2\\ a_3 } \right]=a_1e_1+a_2e_2+a_3e_3 a=[e1,e2,e3][a1a2a3]=a1e1+a2e2+a3e3

02 向量的内积与外积

2.1 向量的内积: 描述向量间的投影关系
a ⋅ b = a T b = Σ i − 1 3 a 1 b i = ∣ a ∣ ∣ b ∣ c o s < a , b > a\cdot b = a^Tb= \displaystyle \Sigma^3_{i-1}a_1b_i=|a||b|cos<a,b> ab=aTb=Σi13a1bi=abcos<a,b>

2.2 向量的外积: 描述向量的旋转

其中

ch03.02 坐标系间的欧氏变换

01:欧式变换:

在欧式变换前后的两个坐标系下,同一个向量的模长和方向不发生改变,是为欧式变换. 一个欧式变换由一个旋转和一个平移组成.

02:旋转矩阵 R R R 的推导 :

设单位正交基 [ e 1 , e 2 , e 3 ] [e_1,e_2,e_3] [e1,e2,e3] 经过一次旋转变成了 [ e 1 ’ , e 2 ’ , e 3 ’ ] [e^{’}_1,e^{’}_2,e^{’}_3] [e1,e2,e3] 对于同一个向量a,在两个坐标系下的坐标分别为 [ a 1 , a 2 , a 3 ] [a_1,a_2,a_3] [a1,a2,a3] [ a 1 , a 2 , a 3 ] T [a_1,a_2,a_3]^T [a1,a2,a3]T. 根据坐标的定义:
[ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = [ e 1 ’ , e 2 ’ , e 3 ’ ] [ a 1 ’ a 2 ’ a 3 ’ ] [e_1,e_2,e_3]\left[\begin{matrix} a_1\\ a_2\\ a_3\end{matrix} \right] =[e^{’}_1,e^{’}_2,e^{’}_3]\left[\begin{matrix} a^{’}_1\\ a^{’}_2\\ a^{’}_3\end{matrix} \right ] [e1,e2,e3]a1a2a3=[e1,e2,e3]a1a2a3
等式左右两边同时左乘 [ e 1 T , e 2 T , e 3 T ] [e^{T}_1,e^{T}_2,e^{T}_3] [e1T,e2T,e3T], 得到
[ a 1 a 2 a 3 ] = [ e 1 T e 1 ’ e 1 T e 2 ’ e 1 T e 3 ’ e 2 T e 1 ’ e 2 T e 2 ’ e 2 T e 3 ’ e 3 T e 1 ’ e 3 T e 2 ’ e 3 T e 3 ’ ] [ a 1 ’ a 2 ’ a 3 ’ ] ≜ R a ′ \left[\begin{matrix} a_1\\ a_2\\ a_3\end{matrix} \right] = \left[\begin{matrix} e^{T}_1e^{’}_1 &e^{T}_1e^{’}_2 &e^{T}_1e^{’}_3 \\ e^{T}_2e^{’}_1 &e^{T}_2e^{’}_2 &e^{T}_2e^{’}_3\\ e^{T}_3e^{’}_1 &e^{T}_3e^{’}_2 &e^{T}_3e^{’}_3 \end{matrix} \right] \left[\begin{matrix} a^{’}_1\\ a^{’}_2\\ a^{’}_3 \end{matrix} \right] \triangleq Ra^{'} a1a2a3=e1Te1e2Te1e3Te1e1Te2e2Te2e3Te2e1Te3e2Te3e3Te3a1a2a3Ra

矩阵$ R$描述了旋转,称为旋转矩阵.

03 旋转矩阵 R R R 的性质

旋转矩阵是**行列式为1的正交矩阵,**任何行列式为1的正交矩阵也是一个旋转矩阵.所有旋转矩阵构成特殊正交群 S O SO SO:
S O ( n ) = { R ∈ R n x n ∣ R R T = I , d e t ( R ) = I } SO(n) = \{ R\in \mathbb{R}^{nxn}|RR^{T} = I, det(R) = I \} SO(n)={RRnxnRRT=I,det(R)=I}
旋转矩阵是正交矩阵(其转置等于其逆),旋转矩阵的逆 R − 1 R^{-1} R1 (即转置 R T R^{T} RT )描述了一个相反的旋转.

04 欧式变换的向量表示:

世界坐标系中的向量a,经过一次旋转(用旋转矩阵 R R R描述)和一次平移(用平移向量 t t t描述)后,得到了 a ’ a^{’} a
a ’ = R a + t a^{’} = Ra+t a=Ra+t

ch03.03 变换矩阵与齐次坐标

01变换矩阵 T T T:

在三维向量的末尾添加1,构成的四维向量称为齐次坐标.将旋转和平移写入变换矩阵 T T T中,得到:
[ a ’ 1 ] = [ R t 0 1 ] ≜ T [ a 1 ] \left[\begin{matrix} a^{’} \\ 1\end{matrix} \right] = \left[\begin{matrix} R &t \\0 &1\end{matrix} \right] \triangleq T \left[\begin{matrix} a \\ 1\end{matrix} \right] [a1]=[R0t1]T[a1]
齐次坐标的意义在于
将欧式变换表示为线性关系**.

02变换矩阵 T 的性质:

变换矩阵 T T T构成特殊欧式群 S E SE SE
S E ( 3 ) = { T = [ R t 0 1 ] ∈ R 4 x 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } SE(3) =\{ T =\left[\begin{matrix} R &t \\0 &1\end{matrix} \right] \in \mathbb{R}^{4x4}|R\in \mathbb SO(3),t\in \mathbb{R}^{3}\} SE(3)={T=[R0t1]R4x4RSO(3),tR3}

变换矩阵的逆表示一个反向的欧式变换
T − 1 = [ R T − R T t 0 1 ] T^{-1} = \left[\begin{matrix} R^{T} &-R^{T}t \\0 &1\end{matrix} \right] T1=[RT0RTt1]

ch03.04 齐次坐标(Homogeneous Coordinate)的优势

优势1:方便判断是否在直线或平面上

若点 p = { x , y } p=\{ x,y\} p={x,y},在直线 l = ( a , b , c ) l = (a,b,c) l=(a,b,c)上,则有:
a x + b y + c = [ a , b , c ] T ⋅ [ x , y , 1 ] = l T ⋅ p ’ = 0 ax+by+c = [a,b,c]^{T}\cdot [x,y,1] = l^T \cdot p^{’} = 0 ax+by+c=[a,b,c]T[x,y,1]=lTp=0
若点 p = { x , y , z } p=\{ x,y,z\} p={x,y,z},在平面 A = ( a , b , c , d ) A = (a,b,c,d) A=(a,b,c,d)上,则有:
a x + b y + c z + d = [ a , b , c , d ] T ⋅ [ x , y , z , 1 ] = A T ⋅ p ’ = 0 ax+by+cz+d = [a,b,c,d]^{T}\cdot [x,y,z,1] = A^T \cdot p^{’} = 0 ax+by+cz+d=[a,b,c,d]T[x,y,z,1]=ATp=0

优势2:方便表示线线交点和点点共线

在齐次坐标下,

可以用两个点 p , q p,q p,q的齐次坐标叉乘结果表示它们的共线l
可以用两条直线 l , m l,m l,m 的齐次坐标叉乘结果表示它们的交点 x
在这里插入图片描述

这里利用叉乘的性质: 叉乘结果与两个运算向量都垂直:

性质1的证明:
l T ⋅ p = ( p × q ) ⋅ p = 0 l T ⋅ q = ( p × q ) ⋅ q = 0 l^T \cdot p ={(p \times q) \cdot p}= 0 \\ l^T \cdot q ={(p \times q) \cdot q}= 0 lTp=(p×q)p=0lTq=(p×q)q=0
性质2的证明:
l T ⋅ p = l T ⋅ ( l × m ) = 0 m T ⋅ p = m T ⋅ ( l × m ) = 0 l^T \cdot p ={l^T \cdot(l \times m)}= 0 \\ m^T \cdot p ={m^T \cdot(l \times m)}= 0 lTp=lT(l×m)=0mTp=mT(l×m)=0

优势3:能够区分向量和点

( x , y , z ) (x,y,z) (x,y,z)的齐次坐标为 ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1)
向量 ( x , y , z ) (x,y,z) (x,y,z)的齐次坐标为 ( x , y , z , 0 ) (x,y,z,0) (x,y,z,0)

优势4:能够表达无穷远点

对于平行直线 l = ( a , b , c ) l = (a,b,c) l=(a,b,c) m = ( a , b , d ) m=(a,b,d) m=(a,b,d),求取其交点的齐次坐标 x = l × m = ( k b , − k a , 0 ) x=l \times m =(kb,-ka,0) x=l×m=(kb,ka,0),将其转为非齐次坐标,得到 x = ( k b / 0 , − k a / 0 ) = ( i n f , − i n f ) x=(kb/0,-ka/0) = (inf,-inf) x=(kb/0,ka/0)=(inf,inf),这表示无穷远点.

优势5:能够简洁的表示变换

使用齐次坐标,可以将加法运算转化为乘法运算.
在这里插入图片描述

ch03.05 旋转向量和欧拉角

01 旋转向量

旋转矩阵的缺点:

  1. 旋转矩阵有9个量,但一次旋转只有3个自由度,这种表达方式是冗余的.
  2. 旋转矩阵自带约束(必须是行列式为1的正交矩阵),这些约束会给估计和优化带来困难.

旋转向量: 任意旋转都可以用一个旋转轴和一个旋转角 来刻画.于是,我们可以使用一个向量,其方向表示旋转轴而长度表示旋转角.这种向量称为旋转向量(或轴角,Axis-Angle).

假设有一个旋转轴为$ n$,角度为 θ \theta θ的旋转,其对应的旋转向量为 θ n \theta n θn
旋转向量和旋转矩阵之间的转换:罗德里格斯公式

设旋转向量R表示一个绕单位向量n,角度为θ的旋转.

旋转向量到旋转矩阵:
R = c o s θ I + ( 1 − c o s θ ) n n T + s i n θ n ∧ R = cos \theta I + (1-cos\theta)nn^{T} + sin\theta n^{\wedge} R=cosθI+(1cosθ)nnT+sinθn
旋转矩阵到旋转向量:

旋转角 θ = a r c c o s ( ( t r ( R ) − 1 ) / 2 ) \theta =arccos((tr(R)- 1)/2) θ=arccos((tr(R)1)/2)

旋转轴n是矩阵R RR特征值1对应的特征向量

ch03.06 欧拉角

欧拉角将一次旋转分解成3个分离的转角.常用的一种ZYX转角将任意旋转分解成以下3个轴上的转角:

绕物体的Z轴旋转,得到偏航角yaw
绕旋转之后的Y轴旋转,得到俯仰角pitch
绕旋转之后的X轴旋转,得到滚转角roll

  • 欧拉角的一个重大缺点是万向锁问题(奇异性问题): 在俯仰角为$\pm$90° 时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由3次旋转变成了2次旋转).

ch03.07 四元数

为什么需要四元数: 对于三维旋转,找不到不带奇异性的三维向量描述方式.因此引入四元数.四元数是一种扩展的复数,既是紧凑的,也没有奇异性.

01 四元数的定义

1.四元数的定义

一个四元数q qq拥有一个实部和三个虚部
q = q 0 + q 1 i + q 2 j + q 3 k q = q_0 +q_1 i + q_2 j + q_3 k q=q0+q1i+q2j+q3k

其中 i , j , k i,j,k i,j,k,为四元数的3个虚部,它们满足以下关系式(自己和自己的运算像复数,自己和别人的运算像叉乘):
i 2 = j 2 = k 2 = − 1 i j = k , j i = − k j k = i , k j = − i k i = j , i k = − j \begin{array}{rcl} i^2 =j^2 =k^2 = -1 \\ ij =k,ji=-k\\ jk=i,kj=-i \\ ki=j,ik=-j \end{array} i2=j2=k2=1ij=k,ji=kjk=i,kj=iki=j,ik=j

也可以用一个标量和一个向量来表达四元数:
q = [ s , v ] , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 x 3 q = [s,v],s =q_0\in \mathbb{R} ,v = [q_1,q_2,q_3]^{T}\in \mathbb{R^{3x3}} q=[s,v],s=q0R,v=[q1,q2,q3]TR3x3
s为四元数的实部,v 为四元数的虚部.有实四元数和虚四元数的概念.
2.四元数与旋转角度的关系:

在二维情况下,任意一个旋转都可以用单位复数来描述,乘i ii就是绕i ii轴旋转90°.
在三维情况下,任意一个旋转都可以用单位四元数来描述,乘i ii就是绕i ii轴旋转180°.

3.单位四元数和旋转向量之间的转换:

设单位四元数q 表示一个绕单位向量$ n=[n_x,n_y,n_z]^T$,角度为 θ的旋转.

3.1 从旋转向量到单位四元数:
q = [ c o s ( θ / 2 ) , n s i n ( θ / 2 ) ] T = [ c o s ( θ 2 ) , n x s i n ( θ 2 ) , n y s i n ( θ 2 ) , n z s i n ( θ 2 ) ] T q =[cos(\theta/2),nsin(\theta/2)]^T = [cos(\frac{\theta}{2}),n_xsin(\frac{\theta}{2}),n_ysin(\frac{\theta}{2}),n_zsin(\frac{\theta}{2})]^T q=[cos(θ/2),nsin(θ/2)]T=[cos(2θ),nxsin(2θ),nysin(2θ),nzsin(2θ)]T
3.2 从单位四元数到旋转向量
{ θ = 2 a r c cos ⁡ ( q 0 ) [ n x , n y , n z ] = [ q 1 , q 2 , q 3 ] T / s i n ( θ 2 ) \left\{ \begin{aligned} \theta & = 2arc\cos(q_0) \\ \left[n_x,n_y,n_z\right] & = [q_1,q_2,q_3]^T/sin(\frac{\theta}{2}) \\ \end{aligned} \right. θ[nx,ny,nz]=2arccos(q0)=[q1,q2,q3]T/sin(2θ)

02 用单位四元数表示旋转

给定一个空间三维点$p= [ x , y , z ] ∈ R3 ,p=[x,y,z ] R^3, p=[x,y,z]∈R ^3 $,以及一个由轴角n,θ指定的旋转,三维点p 经过旋转后变为p′.如何使用单位四元数q 表达旋转?

  1. 把三维空间点用一个虚四元数p 表示:

p = [ 0 , x , y , z ] = [ 0 , v ] p =[0,x,y,z] = [0,v] p=[0,x,y,z]=[0,v]

  1. 把旋转用单位四元数q qq表示:
    q = [ c o s ( θ 2 ) , n s i n ( θ 2 ) q = [cos(\frac{\theta}{2}),nsin(\frac{\theta}{2}) q=[cos(2θ),nsin(2θ)

  2. 旋转后的点 p′ 可表示为:
    p ’ = q p q − 1 p^{’} = qpq^{-1} p=qpq1
    这样得到的点p’ 仍为一个纯虚四元数,其虚部的3个分量表示旋转后3D点的坐标.
    只有单位四元数才能表示旋转,因此在程序中创建四元数后,要记得调用normalize()以将其单位化

ch04 李群与李代数

ch04-01 李群与李代数基础

旋转矩阵构成特殊正交群SO(3),变换矩阵构成了特殊欧氏群 SE(3).

1. 群的定义

群(Group)是一种集合加上一种运算的代数结构.把集合记作A AA,运算记作⋅ \cdot⋅ ,那么群可以记作G = ( A , ⋅ ) G =(A,\cdot)G=(A,⋅).群要求这个运算满足如下条件(封结幺逆):

  1. 封闭性 $ ∀a_1,a_2∈A,a_1⋅a_2∈A. $

  2. 结合律 $ ∀ a_1,a_2,a_3∈A,(a_1⋅a_2)⋅a_3=a_1⋅(a_2⋅a_3) $

  3. 幺元 $ ∃ a_0∈A,s.t.∀ a∈A, a_0⋅a=a⋅a_0=a $

  4. 逆:$ ∀ a∈A,∃ a^{−1}∈ A ,s.t.a⋅a{−1}=a{0}$

    李群是指具有连续(光滑)性质的群SO(3)和SE(3)都是李群

2. 李代数的定义

每个李群都有与之对应的李代数,李代数描述了李群的局部性质.

通用的李代数的定义如下:
李代数由一个集合V,一个数域 F 和一个二元运算[ , ] 组成.如果它们满足以下几条性质,则称 ( V , F , [ , ] ) (V, F, [, ]) (V,F,[,])为一个李代数,记作$ g $.

  1. 封闭性: $ ∀ X,Y∈V,[X,Y]∈V. $

  2. 双线性: $ \forall X,Y,Z \in V, a,b \in F $
    [ a X + b Y , Z ] = a [ X , Z ] + b [ Y , Z ] , [ Z , a X + b Y ] = a [ Z , X ] + b [ Z , Y ] [aX+bY,Z]=a[X,Z]+b[Y,Z],[Z,aX+bY]=a[Z,X]+b[Z,Y] [aX+bY,Z]=a[X,Z]+b[Y,Z],[Z,aX+bY]=a[Z,X]+b[Z,Y]

  3. 自反性: $ ∀X,∈V,[X,X]=0. $

  4. 雅可比等价$ ∀ X,Y,Z∈V,[X,[Y,Z]]+[Z,[X,Y]]+[Y,[Z,X]]=0 . 其 中 的 二 元 运 算 . 其中的二元运算 .[ , ]$ [,][,]被称为李括号.例如三维向量空间 R 3 \mathbb{R^3} R3 上定义的叉积× \times×是一种李括号.

3. 李代数so(3)

3.1 李群SO(3)对应的李代数so(3)是定义在$ \mathbb{R^3}$ 上的向量,记作 ϕ \phi ϕ.
s o ( 3 ) = { ϕ ∈ R 3 , Φ = ϕ ∧ = a ∧ = [ 0 − ϕ 3 ϕ 2 ϕ 3 0 − ϕ 1 − ϕ 2 ϕ 1 0 ] ∈ R 3 x 3 } so(3)=\{ \phi \in \mathbb R^{3},\Phi=\phi^∧ = {a}^∧ =\left[\begin{matrix} &0 & -\phi_3 &\phi_2 \\ &\phi_3 &0 &-\phi_1 \\ &-\phi_2 & \phi_1 &0\end{matrix} \right] \in \mathbb R^{3x3} \} so(3)={ϕR3,Φ=ϕ=a=0ϕ3ϕ2ϕ30ϕ1ϕ2ϕ10R3x3}

3.2 李代数so(3)的李括号为
[ ϕ 1 , ϕ 2 ] = ( Φ 1 Φ 2 − Φ 2 Φ 1 ) ∨ [\phi_1,\phi_2] = (\Phi_1\Phi_2-\Phi_2\Phi_1)^∨ [ϕ1,ϕ2]=(Φ1Φ2Φ2Φ1)
其中 ∨ 是 ^ 的逆运算,表示将反对称矩阵还原为向量
3.3 so(3)和SO(3)间的映射关系为

  • 李群 R = e x p ( ϕ ∧ ) = e x p ( Φ ) R=exp(ϕ^∧)=exp(Φ) R=exp(ϕ)=exp(Φ)
  • 李代数 ϕ = l n ( R ) ∨ ϕ=ln(R)^∨ ϕ=ln(R)

3.4 李代数se(3)

类似地,李群SE(3)的李代数se(3)是定义在 R 6 \mathbb{R^6} R6上上的向量.记作 ξ \xi ξ:
s e ( 3 ) = { ξ = [ ρ , ϕ ] ∈ R 6 , ρ ∈ R 3 , ξ ∧ = [ 0 − ϕ 3 ϕ 2 ϕ 3 0 − ϕ 1 − ϕ 2 ϕ 1 0 ] ∈ R 4 x 4 } se(3)=\{ \xi =\left[{\rho \\, \phi } \right] \in \mathbb R^6,\rho \in \mathbb R^3,\xi ^∧ =\left[\begin{matrix} &0 & -\phi_3 &\phi_2 \\ &\phi_3 &0 &-\phi_1 \\ &-\phi_2 & \phi_1 &0\end{matrix} \right] \in \mathbb R^{4x4} \} se(3)={ξ=[ρ,ϕ]R6,ρR3,ξ=0ϕ3ϕ2ϕ30ϕ1ϕ2ϕ10R4x4}

se(3)中的每个元素 ξ \xi ξ,是一个六维向量.前三维 ρ \rho ρ表示平移;后三维 ϕ \phi ϕ表示旋转,本质上是so(3)元素.

在这里同样使用^符号将六维向量扩展成为四维矩阵,但不再表示反对称
KaTeX parse error: Expected '}', got '&' at position 41: …atrix}{\phi^ ∧ &̲\rho \\ 0^T ,& …
李代数se(3)的李括号和so(3)类似:
[ ξ 1 , ξ 2 ] = ( ξ 1 ∧ ξ 2 ∧ − ξ 2 ∧ ξ 1 ∧ ) ∨ [\xi_1,\xi_2] = (\xi_1^{∧}\xi_2^{∧}-\xi_2^{∧}\xi_1^{∧})^∨ [ξ1,ξ2]=(ξ1ξ2ξ2ξ1)
se(3)和SE(3)间映射关系为
李群 $ T=exp(ξ∧) $

李代数 $\xi = ln(T) ^{∨} $

ch04-02 李群与李代数的转换关系:指数映射和对数映射

1. SO(3)和so(3)间的转换关系

将三维向量ϕ 分解为其模长θ和方向向量$ \alpha$,即ϕ = θ α .则从so(3)到SO(3)的指数映射可表示为:
R = e x p ( ϕ ) = e x p ( θ α ∧ ) = c o s θ I + ( 1 − c o s θ ) α α T + s i n θ α ∧ R=exp(ϕ)=exp(θα ∧ )=cosθI+(1−cosθ)αα T +sinθα ∧ R=exp(ϕ)=exp(θα)=cosθI+(1cosθ)ααT+sinθα
上式即为旋转向量到旋转矩阵的罗德里格斯公式,可见so(3)本质上是旋转向量组成的空间.

从SO(3)到so(3)的对数映射可表示为:
ϕ = l n ( R ) V \phi = ln(R)^{V} ϕ=ln(R)V
实际计算时可以通过迹的性质分别求出转角θ和转轴α
θ = a r c c o s t r ( R ) − 1 2 , R α = α θ=arccos \frac{tr(R)−1}{2},Rα=α θ=arccos2tr(R)1,Rα=α

2.SE(3)和se(3)间的转换关系

从se(3)到SE(3)的指数映射可表示为:
T = e x p ( ξ ∧ ) = [ R J ρ 0 T , 1 ] T =exp(\xi ^{∧}) =\left[ \begin{matrix} R&J\rho \\ 0^T ,& 1 \end{matrix} \right] T=exp(ξ)=[R0T,Jρ1]
J = s i n θ t h e t a I + ( 1 − s i n θ θ α α T ) + ( 1 − c o s θ θ α ∧ ) J =\frac{sin\theta}{theta}I + (1 - \frac{sin\theta}{\theta}\alpha\alpha^{T}) + (1 - \frac{cos\theta}{\theta}\alpha^{∧}) J=thetasinθI+(1θsinθααT)+(1θcosθα)
可以看到,平移部分经过指数映射之后,发生了一次以J 为系数矩阵的线性变换.

3. 从SE(3)到se(3)的对数映射可表示为:

ξ = l n ( T ) ∨ \xi =ln(T)^{∨} ξ=ln(T)

实际计算时ϕ 可以由SO(3)到so(3)的映射得到,ρ 可以由t = J ρ计算得到.

在这里插入图片描述

ch04-03 李代数求导: 引入李代数的一大动机就是方便求导优化

1. 群乘法与李代数加法的关系

BCH公式及其近似形式

  1. 很遗憾地,李群乘积和李代数加法并不等价,即:
    R 1 R 2 = e x p ( ϕ 1 ∧ ) e x p ( ϕ 2 ∧ ) ≠ e x p ( ( ϕ 1 ​ + ϕ 2 ​ ) ∧ ) R_1R_2 =exp(\phi_1^{∧})exp(\phi_2^{∧})\neq exp((ϕ 1​ +ϕ 2​ ) ∧ ) R1R2=exp(ϕ1)exp(ϕ2)=exp((ϕ1+ϕ2))
    李群乘积与李代数运算的对应关系由BCH公式给出:
    l n ( e x p ( A ) e x p ( B ) ) = A + B + 21 ​ [ A , B ] + 121 ​ [ A , [ A , B ] ] − 121 ​ [ B , [ A , B ] ] + . . . ln(exp(A)exp(B))=A+B+ 2 1 ​ [A,B]+ 12 1 ​ [A,[A,B]]− 12 1 ​ [B,[A,B]]+... ln(exp(A)exp(B))=A+B+21[A,B]+121[A,[A,B]]121[B,[A,B]]+...
    上式中[ , ] [,][,]表示李括号运算.

  2. ϕ 1 \phi_1 ϕ1 或ϕ 2 为小量时,可以对BCH公式进行线性近似,得到李群乘积对应的李代数的表达式:

    R1⋅R2对应的李代数
    = l n ( e x p ( ϕ 1 ∧ ) e x p ( ϕ 1 ∧ ) ) ∨ ≈ J l ( ϕ 2 ) − 1 ϕ 1 + ϕ 2 ( i f ϕ 1 − > m i n ) ≈ J l ( ϕ 1 ) − 1 ϕ 2 + ϕ 1 ( i f ϕ 2 − > m i n ) =ln(exp(ϕ_1^{∧})exp(ϕ_1^{∧}))^{∨} \\\approx {J_l(\phi_2)^{−1}\phi_1+ϕ_2}( if \phi_1->min) \\\approx {J_l(\phi_1)^{−1}\phi_2+ϕ_1}( if \phi_2->min) =ln(exp(ϕ1)exp(ϕ1))Jl(ϕ2)1ϕ1+ϕ2(ifϕ1>min)Jl(ϕ1)1ϕ2+ϕ1(ifϕ2>min)
    $$
    其中左乘雅可比矩阵 J l J_l Jl,即为从SE(3)到se(3)对数映射中的雅可比矩阵

J l = s i n θ θ I + ( 1 − s i n θ θ α α T + 1 − c o s θ θ α ∧ ) J_l = \frac{sin\theta}{\theta}I + (1- \frac{sin\theta}{\theta} \alpha \alpha^{T} +\frac{1-cos\theta}{\theta}\alpha^{∧}) Jl=θsinθI+1θsinθααT+θ1cosθα

其逆为
J l − 1 = θ 2 c o t θ 2 I + ( I − θ 2 c o t θ 2 ) α α T + θ 2 α ∧ J_l^{-1} = \frac{\theta}{2}cot\frac{\theta}{2}I+(I-\frac{\theta}{2}cot\frac{\theta}{2})\alpha \alpha^{T} + \frac{\theta}{2}\alpha^{∧} Jl1=2θcot2θI+(I2θcot2θ)ααT+2θα
右乘雅可比矩阵只需对自变量取负号即可
J r ( ϕ ) = J r ( − ϕ ) J_r(\phi) = J_r(-\phi) Jr(ϕ)=Jr(ϕ)
3. 李群SO(3)乘法与李代数so(3)加法的关系:

对旋转R (李代数为ϕ)左乘一个微小旋转ΔR(李代数为Δϕ),得到的旋转李群ΔR⋅R对应的李代数为:
= l n ( e x p ( Δ ϕ ∧ ) e x p ( Δ ϕ ∧ ) ) = ϕ + J l − 1 ( ϕ ) Δ ϕ =ln(exp(\Delta\phi^{∧})exp(\Delta\phi^{∧})) = \phi+J_l^{-1}(\phi)\Delta \phi =ln(exp(Δϕ)exp(Δϕ))=ϕ+Jl1(ϕ)Δϕ
反之,李代数加法(ϕ+Δϕ)对应的李群元素可表示为:
e x p ( ( ϕ + Δ ϕ ) ∧ ) ) = e x p ( ( J l Δ ϕ ) ∧ ) e x p ( ϕ ) ∧ ) ) = e x p (   ϕ ) ∧ e x p ( ( J r Δ ϕ ) ∧ ) exp((\phi+\Delta\phi)^{∧})) =exp(( J_l\Delta \phi)^{∧})exp( \phi)^{∧})) = exp(\ \phi)^{∧}exp((J_r\Delta\phi)^{∧}) exp((ϕ+Δϕ)))=exp((JlΔϕ))exp(ϕ)))=exp( ϕ)exp((JrΔϕ))
4. 同理,李群SE(3)乘法与李代数se(3)加法的关系:
5.

e x p ( Δ ξ ∧ ) e x p ( ξ ∧ ) ≈ e x p ( ( J l − 1 Δ ξ + ξ ) ∧ ) e x p ( ξ ∧ ) e x p ( Δ ξ ∧ ) ≈ e x p ( ( J r − 1 Δ ξ + ξ ) ∧ ) exp(\Delta \xi^{∧})exp( \xi^{∧}) \approx exp((J_l^{-1}\Delta \xi+\xi)^{∧}) \\ exp( \xi^{∧}) exp(\Delta \xi^{∧})\approx exp((J_r^{-1}\Delta \xi+\xi)^{∧}) exp(Δξ)exp(ξ)exp((Jl1Δξ+ξ))exp(ξ)exp(Δξ)exp((Jr1Δξ+ξ))

2. SO(3)上的李代数求导

对空间点p进行旋转,得到Rp,旋转之后点的坐标对旋转的导数可表示为:
φ ( R p ) φ ( R ) \frac{\varphi(Rp)}{\varphi(R)} φ(R)φ(Rp)
对于上式的求导,有两种方式:

1.用李代数ϕ表示姿态R,然后根据李代数加法对ϕ 求导.

2.用李代数φ 表示微小扰动∂ R ,然后根据李群左乘对φ 求导.
其中扰动模型表达式简单,更为实用.

李代数求导

用李代数ϕ 表示姿态R,求导得到
φ ( R p ) φ ( R ) = φ ( e x p ( ϕ ) ∧ p φ ( ϕ ) \frac{\varphi(Rp)}{\varphi(R)} =\frac{\varphi(exp(\phi)^{∧ }p}{\varphi(\phi)} φ(R)φ(Rp)=φ(ϕ)φ(exp(ϕ)p

扰动模型(左乘)

另一种求导方式是对R进行一次左乘扰动∂R,设左乘扰动∂R对应的李代数为φ,对φ求导,得到
φ ( R p ) φ ( R ) = e x p ( ( ϕ + φ ) ∧ ) p − e x p ( ϕ ∧ ) p φ = − ( R p ) ∧ \frac{\varphi(Rp)}{\varphi(R)} =\frac{exp((\phi+\varphi)^{∧})p-exp(\phi^{∧})p}{\varphi} = -(Rp)^{∧} φ(R)φ(Rp)=φexp((ϕ+φ))pexp(ϕ)p=(Rp)

3. SE(3)上的李代数求导

类似地,空间点p经过变换T得到Tp,给T左乘一个扰动 Δ T = e x p ( δ ξ ∧ ) \Delta T =exp(\delta \xi^{ ∧ }) ΔT=exp(δξ),则有
KaTeX parse error: Undefined control sequence: \matrix at position 43: …(\xi)} =\left[ \̲m̲a̲t̲r̲i̲x̲{I&-(Rp+t)^{∧} …

ch05 相机与图像

img

ch05-01 针孔相机模型

O−x−y−z为相机坐标系,现实空间点 P 的相机坐标为$[X,Y,Z]^T , 投 影 到 O ′ − x ′ − y ′ 平 面 上 的 点 P ′ , 坐 标 为 ,投影到O ′ − x ′ − y ′ 平面上的点P' ,坐标为 ,OxyP,[X’,Y’,Z’]^T$.

将成像平面对称到相机前方,根据几何相似关系 Z f = X X ′ = Y Y ′ \frac{Z}{f}=\frac{X}{X^{'}}=\frac{Y}{Y^{'}} fZ=XX=YY ,整理得到投影点P ′ 在投影平面上的坐标 P ′ = [ X ′ , Y ′ ] P'=[X',Y'] P=[X,Y]

{ X ′ = f X Z Y ′ = f Y Z \left\{ \begin{aligned} X^{'}=f \frac{X}{Z} \\ Y^{'}=f \frac{Y}{Z} \\ \end{aligned} \right. X=fZXY=fZY
转换得到投影点P ′ 在像素平面上的像素坐标 P u , v = [ u , v ] T P_{u,v} = [u, v]^T Pu,v=[u,v]T
{ u = α X ′ + c x = f x X Z + c x v = β Y ′ + c y = f y Y Z + c y \left\{ \begin{aligned} u=\alpha X^{'}+c_{x}=f_x \frac{X}{Z}+c_{x} \\ v=\beta Y^{'}+c_{y}=f_y \frac{Y}{Z} +c_{y}\\ \end{aligned} \right. u=αX+cx=fxZX+cxv=βY+cy=fyZY+cy
其中, u , v , c x , c y , f x , f y u,v,c_x,c_y,f_x,f_y u,v,cx,cy,fx,fy的单位为像素, α , β \alpha, \beta α,β的单位为像素/米.

将上式写成矩阵形式,得到**现实空间点相机坐标P和投影点像素坐标 P u v ∗ ∗ P_{uv}** Puv之间的关系:
Z P u v = [ u v 1 ] [ x 0 c x 0 f y c y 0 0 1 ] ≜ K P ZP_{uv} = \left[ \begin{matrix} u\\ v \\1 \end{matrix} \right] \left[ \begin{matrix} _x & 0 &c_x\\0& f_y &c_y \\0 &0 &1 \end{matrix} \right]\triangleq KP ZPuv=uv1x000fy0cxcy1KP

其中矩阵K称为相机的内参数矩阵.

上式中的P 为现实空间点在相机坐标系下的相机坐标,将其转为世界坐标 p w p_w pw,有
Z P u v = K ( R P w + t ) = K T P w ZP_{uv}=K(RP_{w}+t) =KTP_{w} ZPuv=K(RPw+t)=KTPw
因此R ,t (或T )又称为相机的外参数.
将最后一维进行归一化处理,得到点P PP在归一化平面的归一化坐标 $P c = [ X / Z , Y / Z , 1 ] ^T $
P c = P Z = K − 1 P u v P_c =\frac{P}{Z}=K^{-1}P_{uv} Pc=ZP=K1Puv
img

参数矩阵有内参数K和外参数R,t,其中:

内参数矩阵K体现了归一化相机坐标到像素坐标的变换.

之所以是归一化坐标,这体现了投影性质:在某一条直线上的空间点,最终会投影到同一像素点上.

外参数矩阵R ,t (或T)体现了世界坐标到相机坐标的变换.

ch05-02 畸变模型

畸变包含两种: 径向畸变切向畸变.

  • 径向畸变: 由透镜形状引起,主要包括桶形畸变枕形畸变.

    可以看成坐标点沿着长度方向发生了变化,也就是其距离原点的长度发生了变化.
    x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_{distorted} =x(1+k_1 r^2 +k_2 r^ 4 + k_3 r^6)\\ y_{distorted} =y(1+k_1 r^2 +k_2 r^ 4 + k_3 r^6) xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)
    切向畸变: 由透镜和成像平面不严格平行引起.

    可以看成坐标点沿着切线方向发生了变化,也就是水平夹角发生了变化.

x d i s t o r t e d = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r t e d = y + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y x_{distorted} =x + 2p_1 xy+p_2(r^2 +2x^2)\\ y_{distorted} =y + p_1(r^2 +2y^2) +2p_2 xy xdistorted=x+2p1xy+p2(r2+2x2)ydistorted=y+p1(r2+2y2)+2p2xy

ch05-03 单目相机的成像过程

单目相机的成像过程:

    1. 世界坐标系下有一个固定的原点P,其世界坐标 P w P_w Pw
    1. 由于相机在运动,它的运动由R ,t 或变换矩阵 T ∈ S E ( 3 ) T\in SE(3) TSE(3)描述.原点P的相机坐标 P c ′ = R P w + t P_c^{'}=RP_w +t Pc=RPw+t
    1. 这时 P c ′ P_c^{'} Pc的分量为X,Y ,Z ,把它们投影到归一化平面Z =1上,得到P 的归一化相机坐标 P c ′ Z = [ X Z , Y Z , 1 ] \frac{P_c^{'}}{Z}=[\frac{X}{Z} ,\frac{Y}{Z},1] ZPc=[ZX,ZY,1]
    1. 有畸变时,根据畸变参数计算 P c P_c Pc发生畸变后的归一化相机坐标
    1. P的归一化相机坐标经过内参K后,对应到它的像素坐标 P u v = K P c P_{u v }= K P_c Puv=KPc

在讨论相机成像模型时,我们一共谈到了四种坐标: 世界坐标、相机坐标、归一化相机坐标和像素坐标.请读者厘清它们的关系,它反映了整个成像的过程.

ch06 非线性优化

ch06-01 状态估计问题

最大后验与最大似然

SLAM模型由状态方程和运动方程构成:
{ x k = f ( x k − 1 , u k , w k ) z k , j = h ( y j , x k , v k , j ) \left\{ \begin{aligned} x_{k} =f(x_{k-1},u_k,w_k) \\ z_{k,j} =h(y_j,x_k,v_{k,j})\\ \end{aligned} \right. {xk=f(xk1,uk,wk)zk,j=h(yj,xk,vk,j)
通常假设两个噪声项 w k , v k , j w_k , v_{k,j} wk,vk,j满足零均值的高斯分布:
w k ∼ N ( 0 , R k ) , v k , j ∼ N ( 0 , Q k , j ) w_k \sim N(0,R_k),v_{k,j}\sim N(0,Q_{k,j}) wkN(0,Rk),vk,jN(0,Qk,j)
对机器人的估计,本质上就是已知输入数据u 和观测数据z 的条件下,求机器人位姿x 和路标点y 的条件概率分布:
P ( x , y ∣ z , u ) P(x,y|z,u) P(x,yz,u)
利用贝叶斯法则,有:
P ( x , y ∣ z , u ) = P ( z , u ∣ x , y ) P ( z , u ) ∝ P ( z , u ∣ x , y ) P ( x , y ) P(x,y|z,u) = \frac{P(z,u|x,y)}{P(z,u)} \propto {P(z,u|x,y)}{P(x,y)} P(x,yz,u)=P(z,u)P(z,ux,y)P(z,ux,y)P(x,y)
其中,$P(x,y|z,u) $ 为后验概率 P ( z , u ∣ x , y ) {P(z,u|x,y)} P(z,ux,y)为似然 P ( x , y ) P(x,y) P(x,y)为先验,上式可表述为后验概 率 ∝ 似 然 ⋅ 先 验 后 直接求后验分布是困难的,但是求一个状态最优估计,使得在该状态下后验概率最大化则是可行的:
( x , y ) M L E ∗ = a r g m a x P ( x , y ∣ z , u ) (x,y) ^∗_{MLE}=argmaxP(x,y∣z,u) (x,y)MLE=argmaxP(x,yz,u)
最大似然估计的直观意义为:在什么样的状态下,最可能产生现在观测到的数据.

ch06-02 最小二乘

基于观测数据z zz的最小二乘

对于某一次观测
z k , j = h ( y j , x k ) + v k , j z_{k,j}=h(y_j,x_k)+v_{k,j} zk,j=h(yj,xk)+vk,j
由于假设噪声$v k , j ∼ N ( 0 , Q k , j ) 则 观 测 数 据 则观测数据 z_{j,k}$的似然为
P ( z j , k ∣ x k , y J ) = N ( h ( y j , x k ) , Q k , j ) P(z_{j,k}|x_k,y_J) =N(h(y_j,x_k),Q_{k,j}) P(zj,kxk,yJ)=N(h(yj,xk),Qk,j)
将上式代入高斯分布表达式中,并取负对数,得到
( x k , y j ) ∗ = a r g m a x N ( h ( y j , x k ) , Q k , j ) = a r g m i n ( z k , j − h ( x k , y j ) ) T Q k , j − 1 ( z k , j − h ( x k , y j ) ) (x_k,y_j) ^∗=argmaxN(h(y_j,x_k),Q_{k,j})\\ =arg min(z_{k,j}-h(x_k,y_j))^{T}Q^{-1}_{k,j}(z_{k,j}-h(x_k,y_j)) (xk,yj)=argmaxN(h(yj,xk),Qk,j)=argmin(zk,jh(xk,yj))TQk,j1(zk,jh(xk,yj))
上式等价于最小化噪声项(即误差)的一个二次型,其中 Q k , j − 1 Q^{-1}_{k,j} Qk,j1称为信息矩阵,即高斯分布协方差矩阵的逆.

基于观测数据z 和输入数据u 的最小二乘
因为观测z 和输入u 是独立的,因此可对z 和u 的联合似然进行因式分解:
P ( x , y ∣ z , u ) = ∏ k P ( u k ∣ x k − 1 , x k ) ∏ P ( z j , k ∣ x k , y j ) P(x,y|z,u) =\prod_{k}P(u_k|x_{k-1},x_k) \prod P(z_{j,k}|x_k,y_j) P(x,yz,u)=kP(ukxk1,xk)P(zj,kxk,yj)
定义输入和观测数据与模型之间的误差:
e u , k = x k − f ( x k − 1 , u k ) e z , j , k = z k , j − h ( x k , y j ) e_{u,k} =x_k -f(x_{k-1},u_k)\\ e_{z,j,k}=z_{k,j} -h(x_k,y_j) eu,k=xkf(xk1,uk)ez,j,k=zk,jh(xk,yj)
定义
J ( x , y ) = ∑ k e u , k T R k − 1 e u , k + ∑ k ∑ j e k , j T Q k , j − 1 e z , k , j J(x,y)=\sum_k e^{T}_{u,k}R^{-1}_{k}e_{u,k}+\sum_{k}\sum_{j}e^{T}_{k,j}Q^{-1}_{k,j}e_{z,k,j} J(x,y)=keu,kTRk1eu,k+kjek,jTQk,j1ez,k,j
则有
( x k , y j ) ∗ = a r g m i n J ( x , y ) (x_k,y_j) ^∗=argmin J(x,y) (xk,yj)=argminJ(x,y)

ch06-03 非线性最小二乘

对于非线性最小二乘问题:
m i n x F ( x ) = 1 2 ∣ ∣ f ( x ) ∣ ∣ 2 2 min_xF(x) =\frac{1}{2}||f(x)||_2^{2} minxF(x)=21f(x)22
求解该问题的具体步骤如下:

    1. 给定某个初始值 x 0 x_0 x0
    1. 对于第k次迭代,寻找一个增量 Δ x k \Delta x_k Δxk,使得 F ( x k + Δ x k ) F(x_k +\Delta x_k) F(xk+Δxk)达到极小值
    1. Δ x k \Delta x_k Δxk足够小,则停止
    1. 否则 ,令 x k + 1 = x k + Δ x k x_{k +1} =x_k +\Delta x_k xk+1=xk+Δxk,返回第2步 x k + 1 = x k + Δ x k x_{k+1}=x_k+Δx_k xk+1=xk+Δxk,返回第2步

这样,最小二乘问题被转化为一个不断寻找下降增量 Δ x k \Delta x_k Δxk的问题.,具体有以下方法

常见方法有 最速下降法,牛顿法,高斯牛顿法,LM法

1. 一阶梯度法(一阶梯度又称最速下降法)和二阶梯度法(牛顿法)

目标函数 F ( x ) F(x) F(x) x k x_k xk附近的Tayor展开
F ( x + Δ x k ) ≈ F ( x k ) + J ( x k ) T Δ x k + 1 2 Δ x k T H ( x k ) x k F(x+\Delta x_k) \thickapprox F(x_k)+J(x_k)^{T}\Delta x_k +\frac{1}{2} \Delta x_k^{T}H(x_k)x_k F(x+Δxk)F(xk)+J(xk)TΔxk+21ΔxkTH(xk)xk
其中 J ( x ) J(x) J(x)是F(x)关于x的一阶导数矩阵,H(x)是F(x)关于x 的二阶导数矩阵.

其中若 Δ x k \Delta x_k Δxk 取一阶导数,则
Δ x k ∗ = − J ( x k ) \Delta x_k ^{*} =-J(x_k) Δxk=J(xk)
其中若 Δ x k \Delta x_k Δxk 取2阶导数,则
Δ x k ∗ = a r g m i n ( F ( x k ) + J ( x k ) T Δ x k + 1 2 Δ x k T H ( x k ) x k ) \Delta x_k ^{*} =arg min(F(x_k)+J(x_k)^{T}\Delta x_k +\frac{1}{2} \Delta x_k^{T}H(x_k)x_k) Δxk=argmin(F(xk)+J(xk)TΔxk+21ΔxkTH(xk)xk)
令上市对 Δ x k \Delta x_k Δxk 导数为0,则求得
H Δ x k = − J H \Delta x_k =-J HΔxk=J

2. 高斯牛顿法

f ( x ) f(x) f(x) X k X_k Xk附近进行泰勒展开 得
f ( x k + Δ x k ) ≈ f ( x k ) + J ( x k ) Δ x k f(x_k +\Delta x_k)\thickapprox f(x_k) + J(x_k)\Delta x_k f(xk+Δxk)f(xk)+J(xk)Δxk

Δ x k ∗ = a r g m i n Δ x k 1 2 ∣ ∣ f ( x k ) + J ( x k ) T Δ x k ∣ ∣ 2 \Delta x_k ^{*} =arg min_\Delta x_k\frac{1}{2}||f(x_k) + J(x_k)^{T}\Delta x_k||^{2} Δxk=argminΔxk21f(xk)+J(xk)TΔxk2
令上式对 Δ x \Delta x Δx的导数为0,得到高斯牛顿方程
J ( x k ) f ( x k ) + J ( x k ) J ( x k ) T Δ x k = 0 J(x_k)f(x_k) +J(x_k)J(x_k)^{T}\Delta x_k=0 J(xk)f(xk)+J(xk)J(xk)TΔxk=0
H ( x ) = J ( x k ) J ( x k ) T , g ( x ) = − J ( x ) f ( x ) H(x)=J(x_k)J(x_k)^{T},g(x)=-J(x)f(x) H(x)=J(xk)J(xk)T,g(x)=J(x)f(x),则 Δ x k ∗ \Delta x_k ^{*} Δxk 可以取 H Δ x k = g H \Delta x_k =g HΔxk=g 的解 .

3.列文伯格-马夸尔特方法

泰勒展开只能在展开点附近才有较好的近似效果,因此应给 Δ x \Delta x Δx添加一个范围,称为信赖区域.

定义一个指标 ρ \rho ρ刻画这个近似的好坏程度,其分子为实际函数下降的值,分母是近似模型下降的值:
ρ = f ( x + Δ x ) − f ( x ) J ( x ) T Δ x \rho =\frac{f(x+\Delta x)-f(x)}{J(x)^{T} \Delta x} ρ=J(x)TΔxf(x+Δx)f(x)
通过调整 ρ \rho ρ来确定信赖区域:

ρ \rho ρ接近1,则近似是最好的.
ρ \rho ρ太小,说明实际下降的值远小于近似下降的值,则认为近似比较差,需要缩小近似范围.
ρ \rho ρ太大,说明实际下降的比预计的更大,我们可以放大近似范围.

列文伯格-马夸尔特方法算法步骤如下:

  • step 1:给定初始值 x 0 x_0 x0 ,以及初始优化半径 μ \mu μ

  • step 2:对于第k 次迭代,求解:
    m i n Δ x k 1 2 ∣ ∣ f ( x k ) + J ( x k ) T Δ x k ∣ ∣ 2 s.t. ∣ ∣ D Δ x k ∣ ∣ 2 ≤ μ min_{Δx_k} \frac{1}{2}||f(x_k) + J(x_k)^{T}\Delta x_k||^{2} \\ \quad \text{s.t.} ||D\Delta x_k||^2 \leq \mu minΔxk21f(xk)+J(xk)TΔxk2s.t.DΔxk2μ
    其中, μ \mu μ是信赖区域的半径,D 为系数矩阵

  • step 3: 计算ρ

  • step 4: ρ > 3 4 \rho > \frac{3}{4} ρ>43 ,则 μ = 2 μ \mu =2\mu μ=2μ

  • step 5: ρ < 1 4 \rho < \frac{1}{4} ρ<41 ,则 μ = 0.5 μ \mu =0.5\mu μ=0.5μ

  • step 6: 若ρ大于某阈值,则认为近似可行.令 x k + 1 = x k + Δ x k x_{k+1}=x_k +\Delta x_k xk+1=xk+Δxk

  • step 7:判断算法是否收敛.如不收敛则返回第2步,否则结束.

在step 2步中 Δ x k \Delta x_k Δxk的求解要使用拉格朗日乘数法:
L ( Δ x k , λ ) = 1 2 ∣ ∣ f ( x k ) + J ( x k ) T Δ x k ∣ ∣ 2 + λ 2 ( ∣ ∣ D Δ x k ∣ ∣ 2 − μ ) L(\Delta x_k,\lambda) = \frac{1}{2}||f(x_k) + J(x_k)^{T}\Delta x_k||^{2}+\frac{\lambda}{2}(||D \Delta x_k||^2 -\mu) L(Δxk,λ)=21f(xk)+J(xk)TΔxk2+2λ(DΔxk2μ)
令上式对 Δ x k \Delta x_k Δxk导数为0,得到
( H + λ D T D ) Δ x k = g (H+\lambda D^TD )\Delta x_k =g (H+λDTD)Δxk=g
考虑简化形式,即D=I,则相当于求解
( H + λ I ) Δ x k = g (H+\lambda I )\Delta x_k =g (H+λI)Δxk=g
当λ较小时,H占主要地位,这说明二次近似模型在该范围内是比较好的,列文伯格-马夸尔特方法更接近于高斯牛顿法.
当λ 比较大时, λ I \lambda I λI占据主要地位,这说明二次近似模型在该范围内不够好,列文伯格-马夸尔特方法更接近于一阶梯度下降法.

ch07 视觉里程计01

ch07 -01 特征点匹配

特征点:根据特征点匹配计算相机运动
根据特征点匹配计算相机运动.根据相机的成像原理不同,分为以下3种情况:

  • 当相机为单目时,我们只知道匹配点的像素坐标,是为2D-2D匹配,使用对极几何求解.以及弹幕初始化的过程。
  • 相机为双目或RGB-D时,我们就知道匹配点的像素坐标和深度坐标,是为3D-3D匹配,使用ICP求解.
  • 如果有3D点及其在相机的投影位置,也能估计相机的运动,是为3D-2D匹配,使用PnP求解.

ch07 -02 2D-2D匹配: 对极几何

对极几何 Epipolar Geometry

考虑从两张图像上观测到了同一个3D点,如图所示**。**我们希望可以求解相机两个时刻的运动 R , t R,t R,t

假设我们要求取两帧图像 I 1 , I 2 I_1,I_2 I1,I2之间的运动,设第一帧到第二帧的运动为R ,t,两个相机中心分别为 O 1 , O 2 O_1,O_2 O1,O2.考虑 I 1 I_1 I1中有一个特征点 p 1 p_1 p1,它在 I 2 I_2 I2中对应着特征点 p 2 p_2 p2.连线$\overrightarrow{O_1 p_1} 和 和 \overrightarrow{O_2 p_2}$ 在三维空间中交于点P,这时点 O 1 , O 2 , P O_1 ,O_2,P O1,O2,P三个点可以确定一个平面,为极平面. O 1 , O 2 O_1,O_2 O1,O2连线与像平面 I 1 , I 2 I_1,I_2 I1,I2的交点分别为 e 1 , e 2 e_1,e_2 e1,e2, e 1 , e 2 e_1,e_2 e1,e2称为极点, O 1 O 2 O_1O_2 O1O2称为基线,极平面与两个像平面 I 1 , I 2 I_1,I_2 I1,I2之间的相交线 l 1 , l 2 l_1,l_2 l1,l2称为极线.

P P P I 1 I_1 I1下的线号机坐标为 P = [ X , Y , Z ] T P=[X,Y,Z]^{T} P=[X,Y,Z]T,两个投影像素点 p 1 , p 2 p_1,p_2 p1,p2 的像素位置满足如下公式:
{ s 1 p 1 = K P s 2 p 2 = K ( R P + t ) \left\{ \begin{aligned}s_1p_1 =KP\\ s_2p_2=K(RP+t)\\ \end{aligned} \right. \\\\ {s1p1=KPs2p2=K(RP+t)
p 1 , p 2 p_1,p_2 p1,p2 的归一化坐标 { x 1 = K − 1 p 1 x 2 = K − 1 p 2 \left\{\begin{aligned} x_{1} =K^{-1}p_1\\ x_{2} =K^{-1}p_2\\ \end{aligned}\right. {x1=K1p1x2=K1p2

x 1 , x 2 x_1,x_2 x1,x2是两个像素归一化平面上的坐标。代入上式,得到 x 2 = R x 1 + t x_2=Rx_1 +t x2=Rx1+t

同时左乘 t ∧ t^{ ∧ } t可得:
t ∧ x 2 = t ∧ R x 1 t^{ ∧ }x_2=t^{ ∧ }Rx_1 tx2=tRx1
同时左乘 x 2 T x^{T}_2 x2T,可得
x 2 T t ∧ x 2 = x 2 T t ∧ R x 1 x^{T}_2t^{ ∧ }x_2=x^{T}_2t^{ ∧ }Rx_1 x2Ttx2=x2TtRx1
可得
x 2 T t ∧ R x 1 = 0 x^{T}_2t^{ ∧ }Rx_1=0 x2TtRx1=0
重新带入 p 1 , p 2 p_1,p_2 p1,p2,可得:
p 2 T K − T t ∧ R K − 1 p 1 = 0 p_2^{T}K^{-T}t^{ ∧ }RK^{-1}p_1=0 p2TKTtRK1p1=0
以上俩个式子称为对极约束,定义基础矩阵F和本质矩阵E,可以进一步简化对极约束:
E = t ∧ R F = K − T E K − 1 x 2 T E x 1 = p 2 T F p 1 = 0 E=t^{ ∧ }R \quad \quad \quad F=K^{-T}EK^{-1}\quad \quad \quad x^{T}_2Ex_1=p_2^{T}Fp_1=0 E=tRF=KTEK1x2TEx1=p2TFp1=0
本质矩阵E 的求解
考虑到E 的尺度等价性,可以用8对点来估计E,是为八点法.

对于一对匹配点,其归一化坐标 x 1 = [ u 1 , v 1 , 1 ] , x 2 = [ u 2 , v 2 , 1 ] x_1=[u_1,v_1,1],x_2=[u_2,v_2,1] x1=[u1,v1,1],x2=[u2,v2,1]根据对极约束,有
( u 1 , v 1 , 1 ) [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] [ u 2 v 2 1 ] = 0 (u_1,v_1,1)\left[ \begin{matrix} e_1 &e_2 &e_3\\e_4 &e_5 &e_6 \\e_7 &e_8 &e_9 \end{matrix} \right]\left[ \begin{matrix} u_2\\v_2\\1\end{matrix} \right]=0 (u1,v1,1)e1e4e7e2e5e8e3e6e9u2v21=0

把矩阵E展开为向量 [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] T \left[ \begin{matrix} e_1 &e_2 &e_3 &e_4 &e_5 &e_6 &e_7 &e_8 &e_9 \end{matrix} \right]^{T} [e1e2e3e4e5e6e7e8e9]T ,对极约束可以写成与e ee有关的线性形式:
[ u 1 u 2 , u 1 v 2 , u 1 , v 1 u 2 , v 1 v 2 , v 1 , u 2 , v 2 , 1 ] T . e = 0 [u_1u_2,u_1v_2,u_1,v_1u_2,v_1v_2,v_1,u_2,v_2,1]^{T}.e=0 [u1u2,u1v2,u1,v1u2,v1v2,v1,u2,v2,1]T.e=0
把八对点对应的 x 1 , x 2 x_1,x_2 x1,x2分别代入方程中,得到线性方程组:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K9n4lOEh-1629730544222)(../AppData/Roaming/Typora/typora-user-images/1629650165462.png)]

求得E后,对E进行SVD分解以求取R,t :设E的SVD分解为 E = U ∑ V T E=U \sum V^T E=UVT则对应的R ,t 分别为:
t ∧ = U R Z ( π 2 ) ∑ U T R = U R Z T ( π 2 ) ∑ V T t^{∧} =U R_Z(\frac{\pi}{2})\sum U^T \quad \quad R=U R^{T}_Z(\frac{\pi}{2})\sum V^T t=URZ(2π)UTR=URZT(2π)VT
其中 R Z ( π 2 ) R_Z(\frac{\pi}{2}) RZ(2π)表示沿Z轴旋转90°得到的旋转矩阵.

对极几何的讨论:

    1. 尺度不确定性: 2D图像不具有深度信息,这导致了单目视觉的尺度不确定性. 实践中设t 为单位1,计算相机运动和和特征点的3D位置,这被称为单目SLAM的初始化.

    2. 退化问题:当特征的共面或者相机发生纯旋转时,基础矩阵的自由度下降,就出现所谓的退化。实际中数据总是包含一些噪声,这时候继续使用八点法求解基础矩阵,基础矩阵多余出来的自由度将会主要由噪声决定。

      为了可以避免退化现象造成的影响,通常在估计基础矩阵F的同时会求解单应矩阵H,选择重投影误差比较小的那个作为最终的运动估计矩阵。

    3. 初始化的纯旋转问题: 若相机发生纯旋转,导致t 为零,得到的E也将为零,会导致我们无从求解R.因此单目初始化不能只有纯旋转,必须要有一定程度的平移.

    4. 多于8对点的情况:

      对于八点法,有 A e = 0 Ae=0 Ae=0,其中A为一个8×9的矩阵.

      若匹配点的个数多于8个,A的尺寸变化,上述方程不成立.因此转而求取最小化二次型
      m i n e ∣ ∣ A e ∣ ∣ 2 2 = m i n e e T A T A e min_e||Ae||^2_2=min_e e^TA^TAe mineAe22=mineeTATAe
      是为最小二乘意义下的E EE矩阵.

ch07 -03 3D-2D匹配: PnP(Perspective-n-Point)

2D-2D的对极几何方法需要8个或8个以上的点对(以八点法为例),且存在着初始化、纯旋转和尺度的问题。然而,如果两张图像中其中一张特征点的3D位置已知,那么最少只需3个点对(需要至少一个额外点验证结果)就可以估计相机运动。

在双目或RGB-D的视觉里程计中,我们可以直接使用PnP估计相机运动。而在单目视觉里程计中,必须先进行初始化,然后才能使用PnP。

PnP问题有多种解决方法:

  • 直接线性表变换(DLT): 先求解相机位姿,再求解空间点位置
  • P3P: 先求解空间点位置,再求解相机位姿
  • Bundle Adjustment: 最小化重投影误差,同时求解空间点位置和相机位姿
1. 直接线性变换(DLT): 先求解相机位姿,再求解空间点位置**

考虑某个空间点P的齐次世界坐标为 P = ( X , Y , Z , 1 ) P = ( X , Y , Z , 1 ) P=(X,Y,Z,1) .在图像 I 1 I_1 I1中投影到特征点的归一化像素坐标 x 1 = ( u 1 , v 1 , 1 ) x_1=(u_1,v_1,1) x1=(u1,v1,1).此时相机的位姿R ,t 是未知的,定义增广矩阵 [ R ∣ t ] [R|t] [Rt](不同于变换矩阵T TT)为一个3×4的矩阵,包含了旋转与平移信息,展开形式如下:
s ( u 1 v 1 1 ) = ( t 1 t 2 t 3 t 4 t 5 t 6 t 7 t 8 t 9 t 1 0 t 1 1 t 1 2 ) ( X Y Z 1 ) s\left( \begin{matrix} u_1\\v_1\\1\end{matrix} \right)=\left( \begin{matrix}t_1 &t_2 &t_3 &t_4\\t_5 &t_6 &t_7 &t_8\\t_9 &t_10 &t_11&t_12 \end{matrix} \right)\left(\begin{matrix} X\\Y\\Z\\1\end{matrix} \right) su1v11=t1t5t9t2t6t10t3t7t11t4t8t12XYZ1

用最后一行把s消去,得到两个约束:
{ t 1 T P − t 3 T P u 1 = 0 t 2 T P − t 3 T P v 1 = 0 \left\{ \begin{aligned} t^{T}_1P - t^{T}_3Pu_1=0 \\ t^{T}_2P - t^{T}_3Pv_1=0 \end{aligned} \right. \\\\ {t1TPt3TPu1=0t2TPt3TPv1=0
其中 t 1 = ( t 1 , t 2 , t 3 , t 4 ) t_1=(t_1 ,t_2 ,t_3 ,t_4) t1=(t1,t2,t3,t4), t 2 = ( t 5 , t 6 , t 7 , t 8 ) t_2=(t_5 ,t_6 ,t_7 ,t_8) t2=(t5,t6,t7,t8), t 3 = ( t 9 , t 1 0 , t 1 1 , t 1 2 ) t_3=(t_9 ,t_10 ,t_11 ,t_12) t3=(t9,t10,t11,t12). t 1 , t 2 , t 3 t_1,t_2,t_3 t1,t2,t3为待求量.

将N对匹配的特征点代入方程中,得到线性方程组:
( P 1 T 0 − U 1 P 1 T 0 P 1 T − U 1 P 1 T P N T 0 − U N P N T 0 P N T − U N P N T ) \left( \begin{matrix} P^{T}_1 &0 & -U_1P^{T}_1\\ 0 & P^{T}_1 & -U_1P^{T}_1 \\ P^{T}_N &0 & -U_NP^{T}_N\\ 0 & P^{T}_N &-U_NP^{T}_N\end{matrix} \right) P1T0PNT00P1T0PNTU1P1TU1P1TUNPNTUNPNT

只需6对匹配点即可求解增广矩阵[ R ∣ t ] ,若匹配点数多于6对时,可以求最小二乘解.对于求解出的旋转矩阵R,可以通过QR分解等手段将其投影到S E ( 3 ) 上.

2. P3P: 先求解空间点位置,再求解相机位姿

这里要说明的是在场景1中,我们通常输入的是物体在世界坐标系下的3D点以及这些3D点在图像上投影的2D点,因此求得的是相机(相机坐标系)相对于真实物体(世界坐标系)的位姿,如图所示:

img

而在场景2中,通常输入的是上一帧中的3D点(在上一帧的相机坐标系下表示的点)和这些3D点在当前帧中的投影得到的2D点,所以它求得的是当前帧相对于上一帧的位姿变换,如图所示:

img

两种情况本质上是相同的,都是基于已知3D点和对应的图像2D点求解相机运动的过程。下面详细探讨P3P的求解过程。

已知3对匹配点的世界坐标A ,B ,C 和投影坐标a ,b ,c ,根据三角形的余弦定理,有
{ O A 2 + O B 2 − 2 O A ⋅ O B ⋅ c o s < a , b > = A B 2 O B 2 + O C 2 − 2 O B ⋅ O C ⋅ c o s < b , c > = B C 2 O A 2 + O C 2 − 2 O A ⋅ O C ⋅ c o s < a , c > = A C 2 \left\{ \begin{aligned} OA^2+OB^2-2OA \cdot OB\cdot cos<a,b>=AB^2 \\ OB^2+OC^2-2OB \cdot OC\cdot cos<b,c>=BC^2 \\ OA^2+OC^2-2OA \cdot OC\cdot cos<a,c>=AC^2 \\ \end{aligned} \right. \\\\ OA2+OB22OAOBcos<a,b>=AB2OB2+OC22OBOCcos<b,c>=BC2OA2+OC22OAOCcos<a,c>=AC2
x = O A / O C , y = O B / O C , u = B C 2 / A B 2 , v = A C 2 / A B 2 x=OA/OC,y = OB / OC ,u = BC^2 / AB^2 ,v=AC^2/AB^2 x=OA/OC,y=OB/OC,u=BC2/AB2,v=AC2/AB2
{ ( 1 − u ) y 2 − u x 2 − c o s < b , c > y + 2 u x y c o s < a , b > + 1 = 0 ( 1 − w ) x 2 − w y 2 − c o s < a , c > y + 2 w x y c o s < a , b > + 1 = 0 \left\{ \begin{aligned} (1-u)y^2-ux^2-cos<b,c>y+2uxycos<a,b> + 1=0\\ (1-w)x^2-wy^2-cos<a,c>y+2wxycos<a,b> + 1=0\\ \end{aligned} \right. {(1u)y2ux2cos<b,c>y+2uxycos<a,b>+1=0(1w)x2wy2cos<a,c>y+2wxycos<a,b>+1=0
上式中,三个余弦角 cos ⁡ ⟨ a , b ⟩ , cos ⁡ ⟨ b , c ⟩ , cos ⁡ ⟨ a , c ⟩ \cos \langle a,b \rangle ,\cos \langle b,c \rangle,\cos \langle a,c \rangle cosa,b,cosb,c,cosa,c以及u uu,v vv是已知的,可以求解出x ,y 进而求解出A ,B ,C 三点的相机坐标.然后根据3D-3D的点对,计算相机的运动R ,t .

3. Bundle Adjustment: 最小化重投影误差,同时求解空间点位置和相机位姿

设相机位姿变换矩阵T ,某空间点的世界坐标 P i = [ X , Y , Z ] T P_i=[X,Y,Z]^T Pi=[X,Y,Z]T, 其投影的像素坐标为 u i = [ u i , v i ] T u_i=[u_i,v_i]^T ui=[ui,vi]T ,像素位置与空间点位置的关系如下:
s i u i = K T P i s_iu_i=KTP_i siui=KTPi
由于相机位姿未知及观测点的噪声,上式存在一个误差,称为重投影误差$ \displaystyle e=u_i-\frac{1}{s_i}KTP_i$因此我们对重投影误差求和,寻找最好的相机位姿和特征点的空间位置,最小化重投影误差:
T ∗ = a r g m i n T 1 2 ∑ i = 1 n ∣ ∣ u i − 1 s i K T P i ∣ ∣ 2 P i ∗ = a r g m i n P i 1 2 ∑ i = 1 n ∣ ∣ u i − 1 s i K T P i ∣ ∣ 2 T^*=\quad argmin_T \frac{1}{2}\sum^n_{i=1}||u_i-\frac{1}{s_i}KTP_i||^2\\ P_i^*=\quad argmin_{P_i} \frac{1}{2}\sum^n_{i=1}||u_i-\frac{1}{s_i}KTP_i||^2 T=argminT21i=1nuisi1KTPi2Pi=argminPi21i=1nuisi1KTPi2
使用最小二乘优化,要分别求e对T和P的导数:
e ( x + Δ x ) ≈ e ( x ) + J Δ x e(x + \Delta x) \approx e(x)+J\Delta x e(x+Δx)e(x)+JΔx

  • 求e 对T 的导数:当e为像素坐标误差(2维),x为相机位姿(6维)时,J将是一个2×6的矩阵.我们来推导J的形式:

    取中间变量 P ′ = ( T P ) 1 : 3 = [ X ′ , Y ′ , Z ′ ] T P' = (TP)_{1:3}=[X',Y',Z']^T P=(TP)1:3=[X,Y,Z]T使用李代数求导的扰动模型,对T左乘微小扰动 δ ξ \delta \xi δξ,求导得到:
    ∂ e ∂ δ ξ = l i m δ ξ = 0 e ( δ ξ ⊕ ξ ) − e ( ξ ) δ ξ = ∂ e ∂ P ‘ ∂ P ‘ ∂ δ ξ \displaystyle\frac{\partial e}{\partial \delta \xi} =lim_{\delta \xi=0} \frac{e(\delta \xi\oplus \xi)-e( \xi)}{\delta \xi} = \frac{\partial e}{\partial {P^{‘}}}\frac{\partial {P^{‘}}}{\partial \delta \xi} δξe=limδξ=0δξe(δξξ)e(ξ)=PeδξP
    其中,$\oplus $ 表示李代数的左乘扰动 ,其中 第一项 $ \displaystyle \frac{\partial e}{\partial P^{‘}}$:

    误差表示误差关于投影点的导数:
    ∂ e ∂ P ‘ = − ( ∂ u ∂ X ‘ ∂ u ∂ Y ‘ ∂ u ∂ Z ‘ ∂ v ∂ X ‘ ∂ v ∂ Y ‘ ∂ v ∂ Z ‘ ) = − ( f x Z ‘ 0 − f x X ‘ Z ‘ 2 0 f y Z ‘ − f x Y ‘ Z ‘ 2 ) \frac{\partial e}{\partial P^{‘}}=-\left( \begin{matrix} \frac{\partial u}{\partial X^{‘}} & \frac{\partial u}{\partial Y^{‘} } &\frac{\partial u}{\partial Z^{‘}}\\ \frac{\partial v}{\partial X^{‘}} & \frac{\partial v}{\partial Y^{‘} } &\frac{\partial v}{\partial Z^{‘}} \end{matrix} \right)=-\left( \begin{matrix} \frac{f_x}{ Z^{‘}} & 0 &-\frac{f_xX^{‘}}{ Z^{‘2}} \\ 0 & \frac{f_y}{ Z^{‘}} &-\frac{f_xY^{‘}}{ Z^{‘2}} \end{matrix} \right) Pe=(XuXvYuYvZuZv)=(Zfx00ZfyZ2fxXZ2fxY)
    第二项 ∂ P ‘ ∂ δ ξ \displaystyle \frac{\partial {P^{‘}}}{\partial \delta \xi} δξP 为变换后的点关于李代数的导数:
    ∂ P ‘ ∂ δ ξ = T P ∂ δ ξ = ( T P ) ⨀ = ∂ e ∂ P ‘ = − ( I − P 0 T 0 T ) \displaystyle \frac{\partial {P^{‘}}}{\partial \delta \xi}=\frac{TP}{\partial \delta \xi} =(TP)^{\bigodot} = \frac{\partial e}{\partial P^{‘}}=-\left( \begin{matrix} I &-P \\ 0^T &0^T \end{matrix} \right) δξP=δξTP=(TP)=Pe=(I0TP0T)
    而在 P ′ P^{'} P的定义中,取出前3维,于是得到: ∂ P ‘ ∂ δ ξ = T P ∂ δ ξ = ( T P ) ⨀ = [ I , − P ] \displaystyle \frac{\partial {P^{‘}}}{\partial \delta \xi}=\frac{TP}{\partial \delta \xi} =(TP)^{\bigodot} =[I,-P] δξP=δξTP=(TP)=[I,P]


    ( ) \left( \begin{matrix} \end{matrix} \right) ()
    P ′ ∧ = ( 0 Z ′ − Y ′ − Z ′ 0 X ′ Y ′ − X ′ 0 ) P^{'\wedge}= \left( \begin{matrix} 0 &Z^{'} &-Y^{'}\\ -Z^{'} &0 &X^{'}\\ Y^{'} &-X^{'} &0 \end{matrix} \right) P=0ZYZ0XYX0

    将两项相乘,得到了2×6的雅可比矩阵 J T \displaystyle J^T JT,求e 对P的导数可得结果如下:
    J T = ∂ e ∂ δ ξ = ( f x Z ‘ 0 − f x X ‘ Z ‘ 2 − f x X ‘ Y ‘ Z ‘ 2 f x + f x X ‘ 2 Z ‘ 2 − f x Y ‘ Z ‘ 0 f Y Z ‘ − f y Y ‘ Z ‘ 2 − f y − f y Y X ‘ 2 Z ‘ 2 f y Y ‘ X ‘ Z ‘ 2 f y X ‘ Z ‘ ) J^T=\frac{\partial e}{\partial \delta \xi} =\displaystyle \left( \begin{matrix} \frac{f_x}{ Z^{‘}} & 0 &-\frac{f_xX^{‘}}{ Z^{‘2}} &-\frac{f_xX^{‘}Y^{‘}}{ Z^{‘2}} & f_x+\frac{f_xX^{‘2}}{ Z^{‘2}} &-\frac{f_xY^{‘}}{ Z^{‘}} \\ 0 &\frac{f_Y}{ Z^{‘}} &-\frac{f_yY^{‘}}{ Z^{‘2}} &-f_y-\frac{f_yYX^{‘2}}{ Z^{‘2}} &\frac{f_yY^{‘}X^{‘}}{ Z^{‘2}} &\frac{f_yX^{‘}}{ Z^{‘}} \end{matrix} \right) JT=δξe=(Zfx00ZfYZ2fxXZ2fyYZ2fxXYfyZ2fyYX2fx+Z2fxX2Z2fyYXZfxYZfyX)

    **该Jocabi矩阵描述了,重投影误差关于相机位姿李代数的一阶变化关系。**前面有负号的原因是 该误差由观测值减预测值得到。

    特征点位置的优化,需要求解e对空间点P的导数,由链式法则可得:
    ∂ e ∂ P = ∂ e ∂ P ‘ ∂ P ‘ ∂ P \frac{\partial e}{\partial P}=\frac{\partial e}{\partial P^{‘}} \frac{\partial P^{‘}}{\partial P} Pe=PePP
    第一项误差关于投影点的导数已经得到,关于第二项 ∂ P ‘ ∂ P \displaystyle\frac{\partial P^{‘}}{\partial P} PP,按照定义

P ‘ = e x p ( ξ ∧ ) P = R P + t P^{‘} =exp(\xi^{\wedge})P=RP+t P=exp(ξ)P=RP+t

求导后为可得:
P ‘ = R P^{‘} =R P=R
所所以 ∂ e ∂ P \displaystyle \frac{\partial e}{\partial P} Pe为:
∂ e ∂ P = − ( f x Z ‘ 0 − f x X ‘ Z ‘ 2 0 f y Z ‘ − f x Y ‘ Z ‘ 2 ) \displaystyle \frac{\partial e}{\partial P} = -\left( \begin{matrix} \frac{f_x}{ Z^{‘}} & 0 &-\frac{f_xX^{‘}}{ Z^{‘2}} \\ 0 & \frac{f_y}{ Z^{‘}} &-\frac{f_xY^{‘}}{ Z^{‘2}} \end{matrix} \right) Pe=(Zfx00ZfyZ2fxXZ2fxY)

小姐:

由以上两个大的步骤我们推导得到 观测相机方程关于相机位姿与特征点的两个导数矩阵

4.EPnP求解位姿

详细见OPenCV提供的EPnP求PnP问题,然后通过G2O优化求解,见十四讲P165.

ch07 -04 3D-3D匹配: ICP

对于一组已配对好的3D点:
P = p 1 , ⋯ , p n , P ′ = p 1 ′ , ⋯ , p n ′ P={p_1,⋯,p_n},P′={p_1′,⋯,p_n′} P=p1,,pn,P=p1,,pn
现在,想要找一个欧氏变换R ,t ,使得:
∀ i , p i = R p i ′ + t ∀ i,p_i=Rp_i′+t i,pi=Rpi+t
ICP问题的求解包含两种方式:

  1. 利用线性代数的求解(主要是SVD)
  2. 利用非线性优化方式的求解(类似于Bundle Adjustment)
1. SVD方法

定义第 i对点的误差项为 e i = p i − ( R p i ′ + t ) e_i = p_i - (R p'_i + t) ei=pi(Rpi+t),定义两组点的质心 p = 1 n ∑ i = 1 n ( p i ) , p ′ = 1 n ∑ i = 1 n ( p i ′ ) p = \frac{1}{n} \sum_{i=1}^n (p_i),p' = \frac{1}{n} \sum_{i=1}^n (p'_i) p=n1i=1n(pi),p=n1i=1n(pi)

构建最小二乘问题,求取最合适的 R, t.
m i n R , t J = 1 2 ∣ ∣ ( p i − ( ( R p i ′ + t ) ) ) ∣ ∣ 2 2 = 1 2 ∣ ∣ ( p i − p − R ( p i ′ − p ′ ) ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 min_{R,t}J=\frac{1}{2}||(p_i-((R p'_i + t)))||_2^2\\ = \frac{1}{2}||(p_i-p-R (p'_i - p')||^2+||p-Rp'-t||^2 minR,tJ=21(pi((Rpi+t)))22=21(pipR(pip)2+pRpt2
左边只和旋转矩阵R相关,而右边既有 R也有t,但只和质心相关.因此令左边取最小值解出R,代入到右边令式子等于0求出t.

定义去质心坐标 q i = p i − p , q i ′ = p i ′ − p ′ q i = p i − p , \quad \quad q'_i=p'_i-p' qi=pip,qi=pip 则优化目标可写成:
R ∗ = m i n R ∑ i = 1 n ∣ ∣ ( p i − p − R ( p i ′ − p ′ ) ∣ ∣ 2 = m i n R ∑ i = 1 n − q i T R q i ′ = − t r ( R ∑ i = 1 n q i ′ q i T ) R^* =min_R \sum ^n_{i=1}||(p_i-p-R (p'_i - p')||^2 \\ =min_R \sum ^n_{i=1}-q_i^TRq_i' \\ =-tr(R \sum ^n_{i=1}q_i'q_i^T) R=minRi=1n(pipR(pip)2=minRi=1nqiTRqi=tr(Ri=1nqiqiT)
省略数学证明,定义矩阵:
W = ∑ i = 1 n q i q i ′ T W =\sum ^n_{i=1}q_iq_i^{'T} W=i=1nqiqiT
对矩阵W WW进行SVD分解得到:
W = U Σ V T W=UΣVT W=UΣVT
可求解
R = U V T R=UV^T R=UVT

2. 非线性优化方法

使用李代数表达表达位姿,目标函数可以写成
m i n ξ = 1 2 ∑ i − 1 n ∣ ∣ ( p i − e x p ( ξ ∧ ) p ′ ) ∣ ∣ 2 2 min_\xi =\frac{1}{2}\sum^n_{i-1} ||(p_i-exp(\xi^{\wedge})p')||^2_2 minξ=21i1n(piexp(ξ)p)22
误差项关于位姿的导数可以用李代数求导的扰动模型,计算导数得到:
∂ P ∂ δ ξ = − ( e x p ( ξ ∧ ) p i ′ ) ⨀ \displaystyle \frac{\partial {P^{}}}{\partial \delta \xi} =-(exp(\xi^{\wedge})p'_i)^{\bigodot} δξP=(exp(ξ)pi)

对于一组已配对好的3D点:
P = p 1 , ⋯ , p n , P ′ = p 1 ′ , ⋯ , p n ′ P={p_1,⋯,p_n},P′={p_1′,⋯,p_n′} P=p1,,pn,P=p1,,pn
现在,想要找一个欧氏变换R ,t ,使得:
∀ i , p i = R p i ′ + t ∀ i,p_i=Rp_i′+t i,pi=Rpi+t
ICP问题的求解包含两种方式:

  1. 利用线性代数的求解(主要是SVD)
  2. 利用非线性优化方式的求解(类似于Bundle Adjustment)
3. SVD方法求解

定义第 i对点的误差项为 e i = p i − ( R p i ′ + t ) e_i = p_i - (R p'_i + t) ei=pi(Rpi+t),定义两组点的质心 p = 1 n ∑ i = 1 n ( p i ) , p ′ = 1 n ∑ i = 1 n ( p i ′ ) p = \frac{1}{n} \sum_{i=1}^n (p_i),p' = \frac{1}{n} \sum_{i=1}^n (p'_i) p=n1i=1n(pi),p=n1i=1n(pi)

构建最小二乘问题,求取最合适的 R, t.
m i n R , t J = 1 2 ∣ ∣ ( p i − ( ( R p i ′ + t ) ) ) ∣ ∣ 2 2 = 1 2 ∣ ∣ ( p i − p − R ( p i ′ − p ′ ) ∣ ∣ 2 + ∣ ∣ p − R p ′ − t ∣ ∣ 2 min_{R,t}J=\frac{1}{2}||(p_i-((R p'_i + t)))||_2^2\\ = \frac{1}{2}||(p_i-p-R (p'_i - p')||^2+||p-Rp'-t||^2 minR,tJ=21(pi((Rpi+t)))22=21(pipR(pip)2+pRpt2
左边只和旋转矩阵R相关,而右边既有 R也有t,但只和质心相关.因此令左边取最小值解出R,代入到右边令式子等于0求出t.

定义去质心坐标 q i = p i − p , q i ′ = p i ′ − p ′ q i = p i − p , \quad \quad q'_i=p'_i-p' qi=pip,qi=pip 则优化目标可写成:
R ∗ = m i n R ∑ i = 1 n ∣ ∣ ( p i − p − R ( p i ′ − p ′ ) ∣ ∣ 2 = m i n R ∑ i = 1 n − q i T R q i ′ = − t r ( R ∑ i = 1 n q i ′ q i T ) R^* =min_R \sum ^n_{i=1}||(p_i-p-R (p'_i - p')||^2 \\ =min_R \sum ^n_{i=1}-q_i^TRq_i' \\ =-tr(R \sum ^n_{i=1}q_i'q_i^T) R=minRi=1n(pipR(pip)2=minRi=1nqiTRqi=tr(Ri=1nqiqiT)
省略数学证明,定义矩阵:
W = ∑ i = 1 n q i q i ′ T W =\sum ^n_{i=1}q_iq_i^{'T} W=i=1nqiqiT
对矩阵W WW进行SVD分解得到:
W = U Σ V T W=UΣVT W=UΣVT
可求解
R = U V T R=UV^T R=UVT

4. 非线性优化方法求解

使用李代数表达表达位姿,目标函数可以写成
m i n ξ = 1 2 ∑ i − 1 n ∣ ∣ ( p i − e x p ( ξ ∧ ) p ′ ) ∣ ∣ 2 2 min_\xi =\frac{1}{2}\sum^n_{i-1} ||(p_i-exp(\xi^{\wedge})p')||^2_2 minξ=21i1n(piexp(ξ)p)22
误差项关于位姿的导数可以用李代数求导的扰动模型,计算导数得到:
∂ P ∂ δ ξ = − ( e x p ( ξ ∧ ) p i ′ ) ⨀ \displaystyle \frac{\partial {P^{}}}{\partial \delta \xi} =-(exp(\xi^{\wedge})p'_i)^{\bigodot} δξP=(exp(ξ)pi)
可以直接使用最小二乘优化方法求解位姿.

在《视觉SLAM十四》中,章节安排如下: 1. 数学基础部分:介绍这本书的基本信息,包括自测题。概述SLAM系统的组成和各模块的工作。介绍三维空间运动、李群和李代数、针孔相机模型以及非线性优化。完成一个曲线拟合的实验。 2. SLAM技术部分:解特征点法的视觉里程计,包括特征点的提取与匹配、对极几何约束的计算、PnP和ICP等方法。学习直接法的视觉里程计,包括光流和直接法的原理,并使用g2o实现一个简单的RGB-D直接法。构建一个视觉里程计框架,解决优化和关键帧选择的问题。深入讨论后端优化,包括Bundle Adjustment和位姿图的优化。介绍回环检测和地图构建的方法。最后,介绍当前的开源SLAM项目和未来的发展方向。 另外,对于四元数的学习,可以先了解复平面的概念。复平面是一个用来描述复数的平面,其中实部和虚部分别对应平面的横坐标和纵坐标。了解复平面后,可以开始学习四元数的概念和应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [视觉SLAM十四笔记](https://blog.youkuaiyun.com/dada19980122/article/details/111404967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【视觉SLAM十四笔记【逐行代码带你解析】【适合纯小白 ps:因为我就是】(持续更新中)](https://blog.youkuaiyun.com/R_ichun/article/details/131964588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大江东去浪淘尽千古风流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值