图优化简单案例

提示


前言

理解图优化理论第一步,搞清楚三要素:误差项、优化变量、协方差,当然开局讲这三个概念有点复杂,所以先借鉴三个简单例子讲基本概念。本例在现有博客基础上进行了案例扩充,由浅入深,便于初学者理解。


提示:以下是本篇文章正文内容,下面案例可供参考

一、SLAM图优化

图是由节点和边构成的一种结构。
在机器人SLAM中,机器人位姿是节点,表示机器人状态量 p i p_i pi(位置、姿态),用以下形式表示
p i = [ x , y , z , q x , q y , q z , q w ] p_i=[x,y,z,q_x,q_y,q_z,q_w] pi=[x,y,z,qx,qy,qz,qw]
前三项为机器人位置,后四项为机器人姿态的四元数表示。
各个位姿之间的变换关系构成边(旋转R、平移t)
T i j = [ R t 0 1 ] T_{ij}=\begin{bmatrix} R&t\\ 0&1\end{bmatrix} Tij=[R0t1]
构建误差项,已有当前观测 x i x_i xi,再通过 T i j T_{ij} Tij x j x_j xj变换至 x i x_i xi,理论上若无误差,则变换后的值应与 x i x_i xi相等,但实际上存在误差,因此作差后得到误差项,构建最小二乘问题,使得整个图的边误差最小
min ⁡ R , t E = ∑ i j ∥ x i − T i j x j ∥ 2 \min_{R,t}E=\sum_{ij}\lVert {x}_i - T_{ij}x_j \rVert^2 R,tminE=ijxiTijxj2

二、相机位姿图优化案例

与上述不同的是,相机位姿图优化中,通常采用机器人对路标点的观测来构建边
如下图所示案例,假设机器人在初始位置 x 0 x_0 x0处,此时观测到路标 l 0 l_0 l0在前方2m处,通过轮式里程计观测到机器人向前移动1m后,这时再看路标点 l 0 l_0 l0在前方0.8m处,此时机器人最优位姿和路标最优位姿如何计算。
在这里插入图片描述
在这个案例中,我们将路标作为顶点:
x 0 = 0 ( 初 始 点 在 0 处 ) x_0=0(初始点在0处) x0=00
l 0 = x 0 + 2 ( 路 标 点 在 前 方 2 m 处 ) l_0=x_0+2(路标点在前方2m处) l0=x0+22m
x 1 = x 0 + 1 ( 轮 式 里 程 计 测 得 前 进 1 m ) x_1=x_0+1(轮式里程计测得前进1m) x1=x0+11m
l 0 = x 1 + 0.8 ( 路 标 点 在 前 方 0.8 m 处 ) l_0=x_1+0.8(路标点在前方0.8m处) l0=x1+0.80.8m
用图表示如下
在这里插入图片描述
对上式移项构建误差项得
f 0 = x 0 − 0 ( 初 始 点 在 0 处 ) f_0=x_0-0(初始点在0处) f0=x000
f 1 = l 0 − x 0 − 2 ( 路 标 点 在 前 方 2 m 处 ) f_1=l_0-x_0-2(路标点在前方2m处) f1=l0x022m
f 2 = x 1 − x 0 − 1 ( 轮 式 里 程 计 测 得 前 进 1 m ) f_2=x_1-x_0-1(轮式里程计测得前进1m) f2=x1x011m
f 3 = l 0 − x 1 − 0.8 ( 路 标 点 在 前 方 0.8 m 处 ) f_3=l_0-x_1-0.8(路标点在前方0.8m处) f3=l0x10.80.8m

误差平方和函数如下
F = ∑ i ​ f i 2 = ​ f 0 2 ​ + ​ f 1 2 ​ + ​ f 2 2 ​ + ​ f 3 2 ​ = ( x 0 − 0 ) 2 + ( l 0 − x 0 − 2 ) 2 + ( x 1 − x 0 − 1 ) 2 + ( l 0 − x 1 − 0.8 ) 2 F=\sum_{i} ​f_i^2 = ​f_0^2​ + ​f_1^2​ + ​f_2^2​ + ​f_3^2​ \\ =(x_0-0)^2+(l_0-x_0-2)^2+(x_1-x_0-1)^2+(l_0-x_1-0.8)^2 F=ifi2=f02+f12+f22+f32=(x00)2+(l0x02)2+(x1x01)2+(l0x10.8)2
求误差平方和最小,将上式对每个变量进行求偏导,令偏导为0,即为函数极值点
∂ F ∂ x 0 = 2 x 0 − 2 ( l 0 − x 0 − 2 ) − 2 ( x 1 − x 0 − 1 ) = 0 ⇒ 3 x 0 − x 1 + l 0 = − 3 \frac{ \partial F }{ \partial x_0 }=2x_0-2(l_0-x_0-2)-2(x_1-x_0-1)=0 \\ \Rightarrow 3x_0-x_1+l_0=-3 x0F=2x02(l0x02)2(x1x01)=03x0x1+l0=3
∂ F ∂ x 1 = 2 ( x 1 − x 0 − 1 ) − 2 ( l 0 − x 1 − 0.8 ) = 0 ⇒ − x 0 + 2 x 1 − l 0 = 0.2 \frac{ \partial F }{ \partial x_1 }=2(x_1-x_0-1)-2(l_0-x_1-0.8)=0 \\ \Rightarrow -x_0+2x_1-l_0=0.2 x1F=2(x1x01)2(l0x10.8)=0x0+2x1l0=0.2
∂ F ∂ l 0 = 2 ( l 0 − x 0 − 2 ) + 2 ( l 0 − x 1 − 0.8 ) = 0 ⇒ − x 0 − x 1 + 2 l 0 = 2.8 \frac{ \partial F }{ \partial l_0 }=2(l_0-x_0-2)+2(l_0-x_1-0.8)=0 \\ \Rightarrow -x_0-x_1+2l_0=2.8 l0F=2(l0x02)+2(l0x10.8)=0x0x1+2l0=2.8
将上面三式写成矩阵形式得
[ 3 − 1 1 − 1 2 − 1 − 1 − 1 2 ] [ x 0 x 1 l 0 ] = [ − 3 0.2 2.8 ] \begin{bmatrix} 3 & -1 & 1 \\ -1 & 2 & -1 \\ -1 & -1 & 2 \end{bmatrix} \begin{bmatrix} x_0 \\ x_1 \\ l_0 \end{bmatrix}=\begin{bmatrix} -3 \\ 0.2 \\ 2.8 \end{bmatrix} 311121112x0x1l0=30.22.8
求解线性方程组,相当于调整后满足这些边得条件,路标点和机器人得位置为
[ x 0 x 1 l 0 ] = [ 0 1.07 1.93 ] \begin{bmatrix} x_0 \\ x_1 \\ l_0 \end{bmatrix}=\begin{bmatrix} 0 \\ 1.07 \\ 1.93 \end{bmatrix} x0x1l0=01.071.93

三、信息矩阵

实际定位中,传感器的精度是有差别的,因此我们会对传感器赋于不同的置信度,比如本例中,我们认为轮式里程计的精度很高,则将其权重赋值为10,对应误差项为 f 2 f_2 f2,则误差平方和函数如下
F = ∑ i ​ f i 2 = ​ f 0 2 ​ + ​ f 1 2 ​ + ​ 10 f 2 2 ​ + ​ f 3 2 ​ = ( x 0 − 0 ) 2 + ( l 0 − x 0 − 2 ) 2 + 10 ( x 1 − x 0 − 1 ) 2 + ( l 0 − x 1 − 0.8 ) 2 F=\sum_{i} ​f_i^2 = ​f_0^2​ + ​f_1^2​ + ​10f_2^2​ + ​f_3^2​ \\ =(x_0-0)^2+(l_0-x_0-2)^2+10(x_1-x_0-1)^2+(l_0-x_1-0.8)^2 F=ifi2=f02+f12+10f22+f32=(x00)2+(l0x02)2+10(x1x01)2+(l0x10.8)2
计算过程与上节一致,因此求得路标和机器人位置得
[ x 0 x 1 l 0 ] = [ 0 1.01 1.9 ] \begin{bmatrix} x_0 \\ x_1 \\ l_0 \end{bmatrix}=\begin{bmatrix} 0 \\ 1.01 \\ 1.9 \end{bmatrix} x0x1l0=01.011.9
该结果显示 x 1 x_1 x1的值接近1,因此更加相信轮式里程计的数据,这就是信息矩阵的作用。

四、相机观测

本节介绍开头所说的三要素。(顶点为优化变量,边为运动/观测约束)

1.高斯牛顿法

目标函数:
Δ x ∗ = arg min ⁡ x ∥ e ( x + Δ x ) ∥ p 2 \Delta x^*=\argmin_{x}\lVert {e(x+\Delta x)}\rVert^2_p Δx=xargmine(x+Δx)p2
p p p——协方差
误差项:
e ( x + Δ x ) ≈ e ( x ) + J ( x ) Δ x e(x+\Delta x) \approx e(x)+J(x)\Delta x e(x+Δx)e(x)+J(x)Δx
J ( x ) J(x) J(x)——Jacobian
令目标函数关于 Δ x \Delta x Δx的导数为0(类似上节中误差平方和函数导数为0),得到高斯牛顿方程,即增量方程
J T P − 1 J Δ x = − J T P − 1 e J^TP^{-1}J\Delta x = -J^TP^{-1}e JTP1JΔx=JTP1e
其中
J T P − 1 J = H J^TP^{-1}J=H JTP1J=H
− J T P − 1 e = b -J^TP^{-1}e=b JTP1e=b
因此增量方程可以写为
H Δ x = b H\Delta x=b HΔx=b
非线性优化的思想是从某个的初始值开始,不断地寻找下降方向 ∆x 来找到目标函数的最优解,即不断地求令以下目标函数值达到最小值中的增量 ∆x 。

例:一次观测
1.误差项:e为像素平面上的重投影误差(2x1)
2.优化变量:x为相机位姿 T 1 T_1 T1(6x1)、路标点 P 1 P_1 P1(3x1)
3.协方差:P为像素误差(2x2)
Jacobian矩阵如下:
J 2 ∗ 9 = ∂ e ∂ x = [ ∂ e ∂ T 1 ∂ e ∂ P 1 ] = [ J T 2 ∗ 6 J p 2 ∗ 6 ] J^{2*9}=\frac{ \partial e }{ \partial x }=\begin{bmatrix} \frac{ \partial e }{ \partial T_1} \frac{ \partial e }{ \partial P_1 } \end{bmatrix}=\begin{bmatrix}J_T^{2*6} J_p^{2*6} \end{bmatrix} J29=xe=[T1eP1e]=[JT26Jp26]


总结

简单的图优化实例,帮助理解概念。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值