背景:一直在使用模板、自动化求导,对于背后雅可比推导只剩一个基本概念,有必要好好梳理巩固一下。本人水平有限,若推导过程有误,欢迎评论区提出。
假设一个二维slam问题,使用欧式距离观测模型,即观测量 x k x{_k} xk是机器人到特征点之间的距离。
问题设定
- 机器人状态 x i x{_i} xi = ( x i , y i , θ i x{_i},y{_i},\theta{_i} xi,yi,θi),其中( x i , y i x{_i},y{_i} xi,yi)是机器人在时刻 i i i的位置, θ i \theta{_i} θi是机器人的朝向。
- 地图中特征点 m j m{_j} mj = ( m x j , m y j m{_x{_j}},m{_y{_j}} mxj,myj)表示特征点。
- 观测模型假设机器人可以通过传感器(如激光雷达)观测与特征点之间的欧式距离
一、观测模型
机器人从位置( x i , y j x{_i},y{_j} xi,yj)观测到特征点 m j m{_j} mj = ( m x j , m y j ) (m{_x{_j}},m{_y{_j}}) (mxj,myj)的距离。则观测模型可表示为:
h ( x i , m j ) h(x{_i},m{_j}) h(xi,mj) = ( m x j − x i ) 2 + ( m y j − y i ) 2 \sqrt{(m{_x{_j}} - x{_i})^2 + (m{_y{_j}} - y{_i})^2} (mxj−xi)2+(myj−yi)2
二、残差函数
残差函数 e k ( x i , m j ) e{_k}(x{_i},m{_j}) ek(xi,mj)表示观测值与预测值之间的误差,表示为:
e ( x i , m j ) = h ( x i , m j ) − z k e(x{_i}, m{_j})=h(x{_i},m{_j})-z{_k} e(xi,mj)=h(xi,mj)−zk
其中, z k z{_k} zk是传感器观测到的实际距离。
三、雅可比矩阵推导
需要计算的残差 e k ( x i , m j ) e{_k}(x{_i},m{_j}) ek(xi,mj)对机器人状态 x i x{_i} xi和地图中特征点 m j m{_j} mj的偏导数,依次获取雅可比矩阵。
3.1 计算 e k e{_k} ek对机器人状态 x i = ( x i , y i , θ i ) x{_i}=(x{_i},y{_i},\theta{_i}) xi=(xi,yi,θi)的偏导数
残差函数:
e k ( x i , m j ) = ( m x j − x i ) 2 + ( m y j − y i ) 2 − z k e{_k}(x{_i},m{_j})=\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}-z{_k} ek(xi,mj)=(mxj−xi)2+(myj−yi)2−zk
首先, e k e{_k} ek对 x i x{_i} xi和 y i y{_i} yi进行求偏导。根据该式子, θ i \theta{_i} θi在该观测模型并不参与。因此,只需要进行对 x i x{_i} xi和 y i y{_i} yi求偏导数。当然,根据残差函数,对 θ i \theta{_i} θi进行求导数:
∂ e k ∂ θ i = 0 \frac {\partial e{_k}}{\partial \theta{_i}}=0 ∂θi∂ek=0
3.1.1对 x i x{_i} xi求偏导
∂ e k ∂ x i = ∂ ( ( m x j − x i ) 2 + ( m y j − y i ) 2 ) ∂ x i \frac {\partial e{_k}}{\partial x{_i}}=\frac{\partial(\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2})}{\partial x{_i}} ∂xi∂ek=∂xi∂((mxj−xi)2+(myj−yi)2)
利用链式法则和平方根的导数公式:
∂ e k ∂ x i = 1 2 ∗ ( m x j − x i ) 2 + ( m y j − y i ) 2 ∗ 2 ∗ ( x i − m x j ) \frac {\partial e{_k}}{\partial x{_i}}=\frac{1}{2*\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}*2*(x{_i}-m{_x{_j}}) ∂xi∂ek=2∗(mxj−xi)2+(myj−yi)21∗2∗(xi−mxj)
化简得:
∂ e k ∂ x i = x i − m x j ( m x j − x i ) 2 + ( m y j − y i ) 2 \frac {\partial e{_k}}{\partial x{_i}}=\frac{x{_i}-m{_x{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}} ∂xi∂ek=(mxj−xi)2+(myj−yi)2xi−mxj
3.1.2 对 y i y{_i} yi求偏导
∂ e k ∂ y i = 1 2 ∗ ( m x j − x i ) 2 + ( m y j − y i ) 2 ∗ 2 ∗ ( y i − m y j ) \frac {\partial e{_k}}{\partial y{_i}}=\frac{1}{2*\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}*2*(y{_i}-m{_y{_j}}) ∂yi∂ek=2∗(mxj−xi)2+(myj−yi)21∗2∗(yi−myj)
化简得:
∂ e k ∂ y i = y i − m y j ( m x j − x i ) 2 + ( m y j − y i ) 2 \frac {\partial e{_k}}{\partial y{_i}}=\frac{y{_i}-m{_y{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}} ∂yi∂ek=(mxj−xi)2+(myj−yi)2yi−myj
综合,残差对 x i x{_i} xi的雅可比矩阵 J e k , x i J{_e{_k},{_x{_i}}} Jek,xi矩阵为:
J e k , x i = [ x i − m x j ( m x j − x i ) 2 + ( m y j − y i ) 2 , y i − m y j ( m x j − x i ) 2 + ( m y j − y i ) 2 ] J{_e{_k},{_x{_i}}}=[\frac{x{_i}-m{_x{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}},\frac{y{_i}-m{_y{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}] Jek,xi=[(mxj−xi)2+(myj−yi)2xi−mxj,(mxj−xi)2+(myj−yi)2yi−myj]
3.2 计算 e k e{_k} ek关于地图中特征点 m j = ( m x j , m y j ) m{_j}=(m{_x{_j}},m{_y{_j}}) mj=(mxj,myj)的偏导数
3.2.1 对 m x j m{_x{_j}} mxj求导
∂ e k ∂ m x j = ∂ ( ( m x j − x i ) 2 + ( m y j − y i ) 2 ) ∂ m x j \frac {\partial e{_k}}{\partial m{_x{_j}}}=\frac{\partial(\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2})}{\partial m{_x{_j}}} ∂mxj∂ek=∂mxj∂((mxj−xi)2+(myj−yi)2)
使用链式法则
∂ e k ∂ m x j = 1 2 ∗ ( m x j − x i ) 2 + ( m y j − y i ) 2 ∗ 2 ∗ ( m x j − x i ) \frac {\partial e{_k}}{\partial m{_x{_j}}}=\frac{1}{2*\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}*2*(m{_x{_j}}-x{_i}) ∂mxj∂ek=2∗(mxj−xi)2+(myj−yi)21∗2∗(mxj−xi)
化简得:
∂ e k ∂ m x j = m x j − x i ( m x j − x i ) 2 + ( m y j − y i ) 2 \frac {\partial e{_k}}{\partial m{_x{_j}}}=\frac{m{_x{_j}}-x{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}} ∂mxj∂ek=(mxj−xi)2+(myj−yi)2mxj−xi
3.2.2 对 m y j m{_y{_j}} myj求偏导
类似计算 ∂ e k ∂ m y j \frac {\partial e{_k}}{\partial m{_y{_j}}} ∂myj∂ek:
∂ e k ∂ m y j = 1 2 ∗ ( m x j − x i ) 2 + ( m y j − y i ) 2 ∗ 2 ∗ ( m y j − y i ) \frac {\partial e{_k}}{\partial m{_y{_j}}}=\frac{1}{2*\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}*2*(m{_y{_j}}-y{_i}) ∂myj∂ek=2∗(mxj−xi)2+(myj−yi)21∗2∗(myj−yi)
化简得:
∂ e k ∂ m y j = m y j − y i ( m x j − x i ) 2 + ( m y j − y i ) 2 \frac {\partial e{_k}}{\partial m{_y{_j}}}=\frac{m{_y{_j}}-y{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}} ∂myj∂ek=(mxj−xi)2+(myj−yi)2myj−yi
因此,残差 e k e{_k} ek对特征点 m j m{_j} mj的雅可比矩阵 J e k , m j J{_e{_k},_m{_j}} Jek,mj为:
J e k , m j = [ m x j − x i ( m x j − x i ) 2 + ( m y j − y i ) 2 , m y j − y i ( m x j − x i ) 2 + ( m y j − y i ) 2 ] J{_e{_k},_m{_j}}=[\frac{m{_x{_j}}-x{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}},\frac{m{_y{_j}}-y{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}] Jek,mj=[(mxj−xi)2+(myj−yi)2mxj−xi,(mxj−xi)2+(myj−yi)2myj−yi]
四、雅可比矩阵小结
雅可比矩阵 J e k J{_e{_k}} Jek由两部分组成,一个是对机器人状态 x i x{_i} xi的求偏导,另为一部分是对地图特征点 m j m{_j} mj的求偏导:
J e k = [ J e k , x i , J e k , m j ] J{_e{_k}}=[J{_e{_k},{_x{_i}}},J{_e{_k}},_m{_j}] Jek=[Jek,xi,Jek,mj]
其中:
J e k , x i = [ x i − m x j ( m x j − x i ) 2 + ( m y j − y i ) 2 , y i − m y j ( m x j − x i ) 2 + ( m y j − y i ) 2 ] J{_e{_k},{_x{_i}}}=[\frac{x{_i}-m{_x{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}},\frac{y{_i}-m{_y{_j}}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}] Jek,xi=[(mxj−xi)2+(myj−yi)2xi−mxj,(mxj−xi)2+(myj−yi)2yi−myj]
和
J e k , m j = [ m x j − x i ( m x j − x i ) 2 + ( m y j − y i ) 2 , m y j − y i ( m x j − x i ) 2 + ( m y j − y i ) 2 ] J{_e{_k},_m{_j}}=[\frac{m{_x{_j}}-x{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}},\frac{m{_y{_j}}-y{_i}}{\sqrt{(m{_x{_j}-x{_i}})^2+(m{_y{_j}}-y{_i})^2}}] Jek,mj=[(mxj−xi)2+(myj−yi)2mxj−xi,(mxj−xi)2+(myj−yi)2myj−yi]
至此,样例手推雅可比完毕
公式编辑器参考
###################
好记性不如烂笔头
积跬步期千里
觉得不错的话,记得点赞收藏