《视觉SLAM-非线性优化与g2o-高翔》笔记
本文是观看视频《视觉SLAM-非线性优化与g2o-高翔》整理的笔记。
1. 从滤波到优化
1.1 模型
状态变量 x x x: x = [ x 1 , x 2 , . . . , x N , y 1 , y 2 , . . . , y M ] x=[x_1, x_2, ..., x_N, \; y_1, y_2, ..., y_M] x=[x1,x2,...,xN,y1,y2,...,yM]
运动模型 f f f: x k = f ( x k − 1 , u k ) + v k x_k = f(x_{k-1}, u_k) + v_k xk=f(xk−1,uk)+vk
观测模型 g g g: z k , j = g ( x k , y j ) + n k , j z_{k,j} = g(x_k,y_j) + n_{k,j} zk,j=g(xk,yj)+nk,j
其中, x i x_i xi为位姿, y i y_i yi为路标坐标,都是未知量。 u u u为运动输入量, z z z为观测值,都是测量值。
1.2 传统EKF方法
在工作点附近计算雅可比矩阵(一阶偏导) F F F 和 G G G。
F = : δ f δ x k ∣ x ^ k − 1 v k ∼ N ( 0 , Q k ) G = : δ g δ x k ∣ x ^ k n k , j ∼ N ( 0 , R k ) F=: \frac{\delta f}{\delta x_{k}}|\hat x_{k-1} \qquad v_k \sim N(0, Q_k)\\ G=: \frac{\delta g}{\delta x_k}|\hat x_k \;\qquad n_{k,j} \sim N(0, R_k) F=:δxkδf∣x^k−1vk∼N(0,Qk)G=:δxkδg∣x^knk,j∼N(0,Rk)
step1. 预测:估计先验的均值和协方差矩阵
x ˘ k = f ( x ^ k − 1 , u k ) P ˘ k + 1 = F k P ^ k F k T + Q k \breve x_k = f(\hat x_{k-1}, u_k) \qquad \breve P_{k+1} = F_k \hat P_k F_k^T + Q_k x˘k=f(x^k−1,uk)P˘k+1=FkP^kFkT+Qk
step2. 更新:计算卡尔曼增益,并用观测模型纠正先验模型,得到后验估计
K k = P ˘ k G k T ( G k P ˘ k G k T + R k ) − 1 x ^ k = x ˘ k + K k ( z − z ^ ) P ^ k = ( i − K G k ) P ˘ k K_k = \breve P_k G_k^T (G_k \breve P_k G_k^T + R_k)^{-1} \\ \hat x_k = \breve x_k + K_k (z-\hat z) \qquad \hat P_k = (i - KG_k) \breve P_k Kk=P˘kGkT(GkP˘kGkT+Rk)−1x^k=x˘k+Kk(z−z^)P^k=(i−KGk)P˘k
EKF的问题:
线性化误差,无迭代,噪声非高斯,需要维护一个大的协方差矩阵(平方级别复杂度)。
解决思路=>使用非线性优化
1.3 非线性优化思路
| 思路 | 问题 |
|---|---|
| 1. 设定目标函数,选定初值 状态向量: x = [ x 1 , x 2 , . . . , x N , y 1 , y 2 , . . . , y M ] x=[x_1, x_2, ..., x_N, y_1, y_2, ..., y_M] x=[x1,x2,...,xN,y1,y2,...,yM] |
目标函数是什么? |
| 2. 寻找梯度,使目标函数下降 | 梯度如何计算? |
| 3. 梯度下降,迭代直到收敛 | 梯度只是局部下降,如何保证目标函数下降? |
1.4 目标函数
在视觉和激光SLAM中,运动模型差别较小,观测模型则有所差异。这里我们以观测模型为例。
观测模型: z k , j = g ( x k , y j ) + n k , j n k , j ∼ N ( 0 , Σ ) z_{k,j} = g(x_k,y_j) + n_{k,j} \qquad n_{k,j} \sim N(0, \Sigma) zk,j=g(xk,yj)+nk,jnk,j∼N(0,Σ)
误差分布: z k , j ∼ N ( g ( x k , y j ) , Σ ) z_{k,j} \sim N(g(x_k,y_j), \Sigma) zk,j∼N(g(xk,yj),Σ)
以Bayers方式理解,优化的目标是:在已知观测值 z z z的条件下,求能使 P ( x , y ∣ z ) P(x,y|z) P(x,y∣z)概率大最的 x y xy xy。即求:
( x , y ) ∗ = arg max x , y P ( x , y ∣ z ) (x,y)^*= \underset{x,y}{\arg\max} P(x,y|z) (x,y)∗=x,yargmaxP(x,y∣z)
根据贝叶斯方程,后验与似然×先验成正比。 P ( x , y ∣ z ) ∝ P ( z ∣ x , y ) P ( x , y ) P(x,y|z) \propto P(z|x,y) P(x,y) P(x,y∣z)∝P(z∣x,y)P(x,y)
则有两种方式求解 x y xy xy:
- 最大似然(MLE): ( x , y ) ∗ = arg max x , y P ( z ∣ x , y ) (x,y)^*= \underset{x,y}{\arg\max} P(z|x,y) (x,y)∗=x,yargmaxP(z∣x,y)
- 最大后验(MAP): ( x , y ) ∗ = arg max x , y P ( z ∣ x , y ) P ( x , y ) (x,y)^*= \underset{x,y}{\arg\max} P(z|x,y)P(x,y) (x,y)∗=x,yargmaxP(z∣x,y)P(x,y)
一般不知道路标的先验位置,所以用MLE多一些。
怎么求MLE呢?
我们会使用负对数简化目标函数。
这么做是因为,高斯分布函数有如下性质:取负对数后,可以分为两部分,前一部分与 z z z无关,求极值时可以不考虑;而后一部分的结构比变换之前简单了很多。
P ( z ) = − l n { 1 ( 2 π ) N d e t Σ exp [ 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ] } = 1 2 l n [ ( 2 π ) N d e t Σ ] + 1 2 [ ( x − μ ) T Σ − 1 ( x − μ ) ] P(z) = -ln \{ \; \frac{1}{ {(2\pi)}^N det\Sigma} \exp[\frac{1}{2}(x-\mu)^T \Sigma^{-1} (x-\mu) ] \; \} \\ =\frac{1}{2} ln[{(2\pi)}^N det\Sigma] + \frac{1}{2} [(x-\mu)^T \Sigma^{-1} (x-\mu)] P(z)=−ln{ (2π)NdetΣ1exp[21(x−μ)TΣ−1(x−μ)]}=21ln[(2π)NdetΣ]+21[(x−μ)TΣ−1(x−μ)]
对变量求极大值,相当于求负对数的极小值。则求下式即可达到最大似然:
arg max x , y P ( z ∣ x , y ) = arg min x , y − l n ( P ( z ∣ x , y ) ) = arg min x , y ( z − μ ) T Σ − 1 ( z − μ ) \begin{aligned} \underset{x,y}{\arg\max} P(z|x,y) &= \underset{x,y}{\arg\min} -ln(P(z|x,y)) \\ &= \underset{x,y}{\arg\min} (z-\mu)^T \Sigma^{-1} (z-\mu) \end{aligned} x,yargmaxP(z∣x,y)=x,yargmin−ln(P(z∣x,y))=x,yargmin(z−μ)TΣ−1(z−μ)
我们知道 z k , j ∼ N ( g ( x k , y j ) , Σ ) z_{k,j} \sim N(g(x_k,y_j), \Sigma) zk,j∼N(g(xk,yj

本文是《视觉SLAM-非线性优化与g2o-高翔》笔记,主要讨论从滤波到优化的转换,介绍了非线性优化思路,目标函数的构建,以及计算梯度的方法。详细讲解了如何计算雅可比矩阵,并探讨了稀疏性在优化中的应用,特别提到了G2O库在图优化中的作用和使用方法。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



