零基础读懂“扩展卡尔曼滤波”——下篇

https://mp.weixin.qq.com/s/__Lok-rPNz9eP7pKkR2nvQ

14. 一个简单的传感器融合实例

为了更好的理解传感器融合,我们将系统的状态限制为一个。为了进一步简化,假设我们不知道系统的状态转换模型A,我们只知道传感器的值,假如使用两种不同的温度计测量室外的温度,缺少状态转换模型,我们假定温度计的当前状态与前一个状态是一样的,所以我们将状态转换矩阵设置为 1:

\hat x_k=A\hat x_{k-1}=1\times \hat x_{k-1}=\hat x_{k-1}

对于传感器融合,我们需要在观测向量中包含多个传感器,当然对于我们的例子,我们可以使用两个温度计的当前读数值,并且假定两个温度计对系统温度的贡献是一样的,那么我们就可以将观测矩阵C设置为两个1:

z_k=Cx_k+v_k= \left[ \begin{matrix} 1\\ 1 \end{matrix} \right] x_k+v_k

现在我们已经有了三个矩阵ACR中的两个AC,那么如何得到R呢?

回想一下在单个传感器中,我们将r定义为观测噪声v_k的方差,也就是在其平均值上下的变化量。那么对于一个多传感器的系统,R很显然应该是一个矩阵,包含每对传感器之间协方差的矩阵,这个矩阵对角线上的元素应该是每个传感器的r值,即传感器自身的方差。对角线之外的元素应该表示两个传感器之间的噪声之间的关系,在许多实际例子中,两个不同的传感器之间的影响一般都设为 0,此处也一样,两个不同的温度计之间的噪声关系也应该为 0。

假设我们在恒温条件下观察了两个温度计,观察到它们的平均波动为 0.8°,也就是其读数标准差为 0.8,方差为0.8\times 0.8=0.64 。因此我们得出矩阵R$为:

\left[ \begin{matrix} 0.64 & 0 \\ 0 & 0.64 \end{matrix} \right]

现在我们看一下为什么P_kG_k也应该是矩阵。P_kk时刻估计过程的协方差,正如传感器的协方差矩阵R一样,P_k也应该是一个矩阵,由于G_k是每一步与这些矩阵相关的增益,因此G_k也应该是一个矩阵,它应该包含这些矩阵中每个协方差的增益值。当然这些矩阵的尺寸应该取决于P_kG_k所表示的内容。在我们当前的系统中,P_k是一个 1x1 的矩阵,即它是一个单一的值,因为它只包含了x_k 的协方差。增益值G_k 是一个 1x2 的矩阵,因为它涉及到状态x_k的两个观测值z_k,因为是两个传感器。

有了传感器融合的基本感念,我们再一次回到飞机飞行的例子中,我们的预测和更新方程如下,如前所示噪声的协方差还是定义在 0 到 200 之间。

预测:

\hat x_k=A\hat x_{k-1}=1*\hat x_{k-1}=\hat x_{k-1}
P_{k}=AP_{k-1}A^T=1*P_{k-1}*1=P_{k-1}

更新:

G_k=P_kC^T(CP_kC^T+R)^{-1}=P_k \left[ \begin{matrix} 1 & 1 \end{matrix} \right] \left( \left[ \begin{matrix} 1 \\ 1 \end{matrix} \right] P_k \left[ \begin{matrix} 1 & 1 \end{matrix} \right] +\left[ \begin{matrix} 200 & 0 \\ 0 &180 \end{matrix} \right] \right) ^{-1}

\hat x_k\gets\hat x_k+G_k(z_k-C\hat x_k)=\hat x_k+G_k(z_k- \left[ \begin{matrix} 1 \\ 1 \end{matrix} \right] \hat x_k )

P_k=(I-G_kC)P_k= \left(1-G_k \left[ \begin{matrix} 1 \\ 1 \end{matrix} \right]\right) P_k

回想一下在单变量系统中,我们的状态转换模型:

x_k=ax_{k-1}+w_k

w_k为k时刻的过程噪声,将a变换为矩阵:

x_k=Ax_{k-1}+w_k

事实上我们的预测更新模型中依然没有加入过程噪声,我们使用R表示测量噪声v_k的协方差,使用Q表示过程噪声w_k的协方差,那么P_k可以写为:

P_k=AP_{k-1}A^T+Q

值得一提的是,Q矩阵即使很小的一个元素值,也有助于保持我们对状态的跟随。

下面所示是一个小型的传感器融合的例子,可适当的调整RQ,也可以改变偏差,包括两个传感器的精度或噪声平均值,可以看到,当两个传感器在不同的方向上有偏差时,传感器融合能够提供一个更接近系统真实状态的一个近似。

image

15. 非线性处理

标准卡尔曼滤波前提条件之一就是高斯分布的x_k预测后仍服从高斯分布,高斯分布的x_k变换到观测空间后仍服从高斯分布,因此标准卡尔曼滤波只适合线性系统的处理。

但是现实世界中,很少有线性的。我们看到的树木、飞鸟、行云等都是弯曲的。由于传感器、电机等都是由物理材料制做的,因此他们同样呈现出一定的非线性。我们学过函数f(x)=ax^2+bx+c、或者f(x)=sin(x)、或者log(x),这些都是典型的非线性函数。

大家都知道,任何平滑的曲线都是可微的,可通过一系列连续的更小的线段来精确的表示这个曲线。
看一个例子f(x)=x^2\Delta x=10的时候的细分:

image

那么,这种细分表示的方式又是如何帮助我们处理卡尔曼滤波中的非线性关系呢?假如我们有一个简单的滤波器,它的传感器符合以下线性方程:

z_k=3x_k+2

这个观测方程说明,传感器的读数总是等于状态值得3倍加上2,它是典型的线性关系。我们再看一个非线性传感器的方程:

z_k=log_2(x_k)

这就是一个典型的非线性关系,遇到这种情况我们可以计算非线性函数的一阶导数,即在每个给定点上函数的最佳线性近似。

知道了非线性函数的一阶导数,我们用非线性函数代替我们的观测方程中的Cx_k,它的一阶导数为C_k

模型:

x_k=Ax_{k-1}+Bu_k
z_k=h(x_k)+v_k

预测:

\hat x_k=A\hat x_{k-1}+Bu_k
P_k=AP_{k-1}A^T

更新:

G_k=P_kC_k(C_kP_kC_k+R)^{-1}
\hat x_k\gets\hat x_k+G_k(z_k-h(\hat x_k))
P_k\gets(I-G_kC_k)P_k

16. 扩展卡尔曼滤波

到这里我们已经对「EKF」有了初步认识,但是还需要了解下面一些内容:

  1. 如何在不知道其基本函数的情况下计算实际信号的一阶倒数

  2. 如何将单值非线性状态观测模型推广到多值系统

一阶倒数是这么定义的,当函数f(x)的自变量x在一点x_0上产生一个增量\Delta x时,函数输出值的增量与自变量增量的比值在趋于0时的极限如果存在,这个极限值即为函数f(x)x_0处的导数,用公式表示:

f'(x)=lim_{\Delta x\to 0}\frac{f(x+\Delta x)-f(x)}{\Delta x}

在实际计算时,一阶导数可以这样近似代替:

\frac{y_{k+1}-y_k}{timestep}

在我们的实际系统中观测函数z_k往往是状态函数x_k的函数,此时就可以用连续差分的方法求一阶导数

\frac{z_{k+1}-z_k}{x_{k+1}-x_k}

现在看第二个问题,如何将单值非线性状态观测模型推广到多值系统,

状态观测方程:

z_k=Cx_k

对于一个有两个状态值和三个传感器的系统,我们可以将方程写为:

z_k= \left[ \begin{matrix} c_{11} & c_{12} \\ c_{21} & c_{22} \\ c_{31} & c_{32} \end{matrix} \right] \left[ \begin{matrix} x_{k1} \\ x_{k2} \end{matrix} \right]= \left[ \begin{matrix} c_{11}x_{k1}+c_{12}x_{k2} \\ c_{21}x_{k1}+c_{22}x_{k2} \\ c_{31}x_{k1}+c_{32}x_{k2} \end{matrix} \right]

传感器的个数就是C矩阵的行数,列数等于状态量的数目,C矩阵的元素值正好等于状态函数的一阶导数,这就是典型的雅克比矩阵。

之前的线性模型:

x_k=Ax_{k-1}+w_k

将会变为:

x_k=f(x_{k-1})+w_k

这里的A被状态转换函数f的雅克比矩阵代替,事实上我们使用F_k表示状态转换函数的雅克比矩阵,使用H_k表示传感器函数h的雅克比矩阵,将控制信号添加到状态转换函数中,我们得到扩展卡尔曼滤波的全部公式:

模型:

x_k=f(x_{k-1}, u_k)+w_k
z_k=h(x_k)+v_k

预测:

\hat x_k=f(\hat x_{k-1}, u_k)
P_k=F_{k-1}P_{k-1}F^T_{k-1}+Q_{k-1}

更新:

G_k=P_kH^T_k(H_kP_kH^T_k+R)^{-1}
\hat x_k\gets\hat x_k+G_k(z_k-h(\hat x_k))
P_k\gets(I-G_kH_k)P_k

17. LiDAR和RADAR在汽车驾驶中的融合

最后看一个关于使用扩展卡尔曼滤波进行多传感器数据融合的例子,作者是 Junsheng Fu,他的个人主页 https://junshengfu.github.io/

image

「RADAR」 (无线电波雷达)的测量往往比 「LiDAR」 (激光雷达)的测量更嘈杂,利用「LiDAR」 和 「RADAR」 的两种测量使用扩展卡尔曼滤波对两种传感器数据进行融合,可以减少传感器测量带来的误差,并提供被跟踪对象位置的鲁棒估计。

「LiDAR」 测量分析:

image

汽车驾驶中的激光雷达一般是多线激光雷达,它的测量结果将直接提供三维空间的p_x p_y p_z,但是对于汽车驾驶的情况,我们可以将被跟踪对象的姿态简化为p_x p_y来表示位置,以及一个旋转来表示方向。如果是道路很陡的情况下,也必须要考虑z轴。

「RADAR」 测量分析

image

融合流程:

image

限于篇幅,关于多传感器数据融合部分的详细讲解,后续会专门写一篇文章分析,水平有限,欢迎交流指正。

参考

  1. 「an Application of the Extended Kalman Filter to the Attitude control of a Quadrotor」

  2. https://home.wlu.edu/~levys/kalman_tutorial/

3.「Fundamentals of Kalman Filtering A Practical Approach」

4.「A New Approach to Linear Filtering and Prediction Problems」

5.「https://github.com/JunshengFu/tracking-with-Extended-Kalman-Filter

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容