IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 学习卡尔曼滤波(二) -> 正文阅读

[数据结构与算法]学习卡尔曼滤波(二)

参考资料

文章大部分内容是根据参考资料整理所得,旨在于更方便学习记忆查找,不作其他用途。

上一篇整理总结了基本的卡尔曼滤波后,这一章来学习扩展卡尔曼滤波(EKF),由于许多符号在上一篇中已经说明,所以本篇讲解中不再赘述。

1. 基本概念

如下式,当状态转移矩阵(过程模型)和观测矩阵(观测模型)为非线性时,基础的卡尔曼滤波就无法发挥用处了,由此引入了扩展卡尔曼滤波。

x k = g ( u k , x k ? 1 ) + ω k x_k=g(u_k, x_{k-1})+\omega_k xk?=g(uk?,xk?1?)+ωk?

z k = h ( x k ) + v k z_k=h(x_k)+v_k zk?=h(xk?)+vk?

对以上非线性函数进行泰勒展开,可化为线性形式。所以,扩展卡尔曼滤波算法只比原始卡尔曼滤波算法多了一步线性化的工作。具体流程如下图:

在这里插入图片描述
可以发现,他与线性的卡尔曼滤波差别不大:

在这里插入图片描述

1.1 线性化过程——雅可比矩阵

在向量微积分中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式

雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。因此,雅可比矩阵类似于多元函数的导数。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1.2 预测

故原本状态方程和观测方程中的 A , H A,H A,H矩阵(或者用 F , H F,H F,H符号表示,本文主要使用 F , H F,H F,H表示,如果图片中出现了 A , H A,H A,H,意思是一样的),在非线性系统中用雅可比矩阵代替

在这里插入图片描述所以预测阶段的公式变为:

在这里插入图片描述

1.3 更新

更新方程相对于KF而言,主要变动如下:

y ^ k = z k ? h ( x ^ k ∣ k ? 1 , 0 ) S k = J H P k ∣ k ? 1 J H T + R k K k = P k ∣ k ? 1 J H T S k ? 1 x ^ k ∣ k = x ^ k ∣ k ? 1 + K k y ^ k P k ∣ k = ( I ? K k J H ) P k ∣ k ? 1 \begin{aligned} &\hat{y}_{k}=z_{k}-h\left(\hat{x}_{k \mid k-1}, 0\right) \\ &S_{k}=J_{H} P_{k \mid k-1} J_{H}^{T}+R_{k} \\ &K_{k}=P_{k \mid k-1} J_{H}^{T} S_{k}^{-1} \\ &\hat{x}_{k \mid k}=\hat{x}_{k \mid k-1}+K_{k} \hat{y}_k \\ &P_{k \mid k}=\left(I-K_{k} J_{H}\right) P_{k \mid k-1} \end{aligned} ?y^?k?=zk??h(x^kk?1?,0)Sk?=JH?Pkk?1?JHT?+Rk?Kk?=Pkk?1?JHT?Sk?1?x^kk?=x^kk?1?+Kk?y^?k?Pkk?=(I?Kk?JH?)Pkk?1??

2. 移动机器人应用

本节内容主要来自博客

2.1 移动机器人运动学模型(过程模型)

  • 连续运动学模型:
    { x ˙ = v cos ? ( ? ) y ˙ = v sin ? ( ? ) ? ˙ = ω } (1) \tag{1} \left\{\begin{array}{c} \dot{x}=v \cos (\phi) \\ \dot{y}=v \sin (\phi) \\ \dot{\phi}=\omega \end{array}\right\} ????x˙=vcos(?)y˙?=vsin(?)?˙?=ω?????(1)

  • 离散化后模型:
    { x t = x t ? 1 + d t v cos ? ( ? ) y t = y t ? 1 + d t v sin ? ( ? ) ? t = ? t ? 1 + d t ω t } (2) \tag{2} \left\{\begin{array}{c} x_{t}=x_{t-1}+d_{t} v \cos (\phi) \\ y_{t}=y_{t-1}+d_{t} v \sin (\phi) \\ \phi_{t}=\phi_{t-1}+d_{t} \omega_{t} \end{array}\right\} ????xt?=xt?1?+dt?vcos(?)yt?=yt?1?+dt?vsin(?)?t?=?t?1?+dt?ωt??????(2)

    设移动机器人在时间 t t t 时刻的状态为四维向量 x t \mathbf{x}_t xt? ?:

    x t = [ x t , y t , ? t , v t ] T \mathbf{x}_t=[x_t, y_t, \phi_t,v_t]^T xt?=[xt?,yt?,?t?,vt?]T

    • x t x_t xt?为二维笛卡尔坐标系的X轴坐标值;
    • y t y_t yt??为二维笛卡尔坐标系的Y轴坐标值;
    • ? t \phi_t ?t?为移动机器人的航向角;
    • v t v_t vt?为移动机器人的行驶线速度。

    设状态转移噪声方差为 R R R,观测噪声方差为 Q Q Q

    移动机器人装载有速度传感器与陀螺仪,可分别测量时刻 t t t的速度与角速度为:
    u t = [ v t , ω t ] T \mathbf{u}_t=[v_t, \omega_t]^T ut?=[vt?,ωt?]T

  • 状态向量为 x t = [ x t , y t , ? t , v t ] T \mathbf{x}_{t}=\left[x_{t}, y_{t}, \phi_{t}, v_{t}\right]^{T} xt?=[xt?,yt?,?t?,vt?]T ,输入控制量为 u t = [ v t , ω t ] T \mathbf{u}_{t}=\left[v_{t}, \omega_{t}\right]^T ut?=[vt?,ωt?]T ,可得状态转移函数为:
    x t = F x t ? 1 + B u t \mathbf{x}_{t}=F \mathbf{x}_{t-1}+B \mathbf{u}_{t} xt?=Fxt?1?+But?
    F = [ 1.0 0 0 0 0 1.0 0 0 0 0 1.0 0 0 0 0 0 ] F=\left[\begin{array}{cccc} 1.0 & 0 & 0 & 0 \\ 0 & 1.0 & 0 & 0 \\ 0 & 0 & 1.0 & 0 \\ 0 & 0 & 0 & 0 \end{array}\right] F=?????1.0000?01.000?001.00?0000??????
    B = [ d t cos ? ( ? t ) 0 d t sin ? ( ? t ) 0 0 d t 1.0 0 ] B=\left[\begin{array}{cc} d_{t} \cos \left(\phi_{t}\right) & 0 \\ d_{t} \sin \left(\phi_{t}\right) & 0 \\ 0 & d_{t} \\ 1.0 & 0 \end{array}\right] B=?????dt?cos(?t?)dt?sin(?t?)01.0?00dt?0??????

2.2 雅可比矩阵

由于控制向量的系数矩阵 B B B 中包含状态量 ? t \phi_{t} ?t? ,所以上面的状态转移函数为非线性。利用式 (2),我们可以得到状态函数的Jacobian矩 阵 J F J_{F} JF? :
J F = [ d x d x d x d y d x d ? d x d v d y d x d y d y d y d ? d y d v d ? d x d ? d y d ? d ? d ? d v d v d x d v d y d v d ? d v d v ] = [ 1 0 ? v sin ? ( ? ) d t cos ? ( ? ) d t 0 1 v cos ? ( ? ) d t sin ? ( ? ) d t 0 0 1 0 0 0 0 1 ] J_{F}=\left[\begin{array}{llll} \frac{d x}{d x} & \frac{d x}{d y} & \frac{d x}{d \phi} & \frac{d x}{d v} \\ \frac{d y}{d x} & \frac{d y}{d y} & \frac{d y}{d \phi} & \frac{d y}{d v} \\ \frac{d \phi}{d x} & \frac{d \phi}{d y} & \frac{d \phi}{d \phi} & \frac{d \phi}{d v} \\ \frac{d v}{d x} & \frac{d v}{d y} & \frac{d v}{d \phi} & \frac{d v}{d v} \end{array}\right] =\left[\begin{array}{cccc} 1 & 0 & -v \sin (\phi) d t & \cos (\phi) d t \\ 0 & 1 & v \cos (\phi) d t & \sin (\phi) d t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right] JF?=??????dxdx?dxdy?dxd??dxdv??dydx?dydy?dyd??dydv??d?dx?d?dy?d?d??d?dv??dvdx?dvdy?dvd??dvdv????????=?????1000?0100??vsin(?)dtvcos(?)dt10?cos(?)dtsin(?)dt01??????

2.3 观测模型

假定移动机器人装载有GNSS(卫星导航定位)传感器,可以实时获得自身的位置作为自身的观测向量 z t \mathbf{z}_t zt? ?

z t = [ x t , y t ] T \mathbf{z}_t=[x_t, y_t]^T zt?=[xt?,yt?]T

使用矩阵表示即
z t = H x t H = [ 1.0 0 0 0 0 1.0 0 0 ] \begin{gathered} \mathbf{z}_{t}=H \mathbf{x}_{t} \\ H=\left[\begin{array}{cccc} 1.0 & 0 & 0 & 0 \\ 0 & 1.0 & 0 & 0 \end{array}\right] \end{gathered} zt?=Hxt?H=[1.00?01.0?00?00?]?

2.4 PYTHON代码实现

该部分见于github仓库

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:20:57  更:2022-05-08 08:22:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:52:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码