卡尔曼滤波与组合导航原理(十三)无迹卡尔曼滤波UKF

news2024/12/26 11:39:18

一、蒙特卡洛仿真

蒙特卡洛仿真的基本原理是通过生成大量的随机样本,以近似地估计实际事件的概率和预测结果。 它是以蒙特卡洛赌场命名的,因为它使用随机数和概率统计的方法来模拟现实世界中的各种情况和结果,就像在赌场中抛骰子或发牌一样。

缺点:收敛精度 ε ∝ 1 n \varepsilon \propto \frac{1}{\sqrt{n}} εn 1, 收敛速度慢!

优点:和问题的维数无关,只要边界可以描述,就都可以求。

###【例1】圆周率计算

我们都知道, 单位圆围成的面积为 π \pi π, 若以圆心为原点 建立平面直角坐标系, 则它在第一象限内的面积为 π / 4 \pi / 4 π/4, 即有:
∫ 0 1 ∫ 0 1 − y 2 1   d x   d y = π / 4 \int_{0}^{1} \int_{0}^{\sqrt{1-y^{2}}} 1 \mathrm{~d} x \mathrm{~d} y=\pi / 4 0101y2 1 dx dy=π/4
在这里插入图片描述

Matlab仿真

n = 1000000;				% 十万个点
p = unifrnd(0,1,2,n);		 % 在 0~1 区间均匀随机分布,生成二维点
PI = 4*sum(sum(p.^2)<1)/n     % 求出在四分之一圆内的比例,再乘 4

结果:PI = 3.141092 ,前三个数字是准确的。计算机仿真,可以实现均匀分布,如果是现实仿真,保证不了均匀分布,效果会更差。

【例2】体积计算

在单位球体内偏离中心 0.25 的位置挖去一个半径为 0.25 的柱体 (参见图), 试求该球体剩余部分的体积。

在这里插入图片描述

用一个立方体,包住这个球,生成均匀分布的随机点,

Matlab仿真

n = 100000;
p = unifrnd(-1,1,3,n);
V = 2^3*sum(sum(p.^2)<1&(p(1,:).^2 + (p(2,:)-0.25).^2)>0.25^2)/n

结果:V = 3.812905

【例3】二维随机向量的非线性变换/概论传播

已知 x x x 的分布,求 2 x 2x 2x 的分布比较简单,因为属于线性变换。如果是求 x 2 + 2 x + e x x^2+2x+e^x x2+2x+ex 就比较难了。用仿真的方法求结果的分布函数也比较难,但如果只追求对其粗略的了解,比如均值、方差,可以实现。

现在有如下的函数,输入 x 1 x_1 x1 x 2 x_2 x2 ,转化到 y 1 y_1 y1 y 2 y_2 y2 都是非线性函数, 二维方差是一个对称正定阵,分布是一个椭圆,椭圆就是一个长轴一个短轴,总可以分解得到。
{ y 1 = ( x 1 − 1 ) ⋅ ( x 2 − 0.2 ) y 2 = − ( x 1 − 1 ) 2 E [ x x T ] = [ 1 0.42 0.42 2 ] \left\{\begin{array}{l} y_{1}=\left(x_{1}-1\right) \cdot\left(x_{2}-0.2\right) \\ y_{2}=-\left(x_{1}-1\right)^{2} \end{array}\quad \quad \quad E\left[x x^{\mathrm{T}}\right]=\left[\begin{array}{cc} 1 & 0.42 \\ 0.42 & 2 \end{array}\right]\right. {y1=(x11)(x20.2)y2=(x11)2E[xxT]=[10.420.422]
可以画出下面的图。左边每个绿点代表一个向量,共500个点,满足蓝色的方差椭圆分布。经过上面的非线性函数得到右边的点,可由点的分布统计得右边的均值、方差。无穷个点得到的真实的方差椭圆是图中的实线,统计出来的是十字线,统计值和真实值算比较接近的了。

用5个红点也能变换过去,也能统计均值和方差,画出误差椭圆是叉线,与500个绿点得到的十字线几乎重合。

在这里插入图片描述

二、UT变换

1、线性系统的UT变换

假设随机向量的线性变换关系 y = F x \boldsymbol{y}=\boldsymbol{F} \boldsymbol{x} y=Fx
{ x ‾ = E [ x ] P x = E [ ( x − x ‾ ) ( x − x ‾ ) T ] ⟹ { y ‾ = F x ‾ P y = F P x F T P x y = P x F T \left\{\begin{array} { l } { \overline { \boldsymbol { x } } = E [ \boldsymbol { x } ] } \\ { \boldsymbol { P } _ { x } = E [ ( \boldsymbol { x } - \overline { \boldsymbol { x } } ) ( \boldsymbol { x } - \overline { \boldsymbol { x } } ) ^ { \mathrm { T } } ] } \end{array} \Longrightarrow \left\{\begin{array}{l} \overline{\boldsymbol{y}}=\boldsymbol{F} \overline{\boldsymbol{x}} \\ \boldsymbol{P}_{y}=\boldsymbol{F} \boldsymbol{P}_{x} \boldsymbol{F}^{\mathrm{T}} \\ \boldsymbol{P}_{x y}=\boldsymbol{P}_{x} \boldsymbol{F}^{\mathrm{T}} \end{array}\right.\right. x=E[x]Px=E[(xx)(xx)T] y=FxPy=FPxFTPxy=PxFT

1.方差阵的Cholesky分解

P x = A A T \boldsymbol{P}_{x}=\boldsymbol{A} \boldsymbol{A}^{\mathrm{T}} \quad Px=AAT P x = A [ 1 2 2 13 ] = [ 1 0 2 3 ] \sqrt{\boldsymbol{P}_{x}}=\boldsymbol{A} \quad\left[\begin{array}{cc}1 & 2 \\ 2 & 13\end{array}\right]=\left[\begin{array}{lll}1 & 0 \\ 2 & 3\end{array}\right] Px =A[12213]=[1203]

如此,P 就可以写成: P x = P x P x T = ∑ i = 1 n ( P x ) i ( P x ) i T \boldsymbol{P}_{x}=\sqrt{\boldsymbol{P}_{x}}{\sqrt{\boldsymbol{P}_{x}}}^{\mathrm{T}}=\sum_{i=1}^{n}\left(\sqrt{\boldsymbol{P}_{x}}\right)_{i}\left(\sqrt{\boldsymbol{P}_{x}}\right)_{i}^{\mathrm{T}} Px=Px Px T=i=1n(Px )i(Px )iT ,向量累加和的形式。

[ 1 2 2 13 ] = [ 1 0 2 3 ] [ 1 2 0 3 ] = [ 1 2 ] [ 1 2 ] + [ 0 3 ] [ 0 3 ] \begin{array}{l}{\left[\begin{array}{cc}1 & 2 \\ 2 & 13\end{array}\right]=\left[\begin{array}{cc}1 & 0 \\ 2 & 3\end{array}\right]\left[\begin{array}{ll}1 & 2 \\ 0 & 3\end{array}\right]} =\left[\begin{array}{l}1 \\ 2\end{array}\right]\left[\begin{array}{ll}1 & 2\end{array}\right]+\left[\begin{array}{l}0 \\ 3\end{array}\right]\left[\begin{array}{ll}0 & 3\end{array}\right]\end{array} [12213]=[1203][1023]=[12][12]+[03][03]

向量就是图上的点, p p p 如果是高维的, P \sqrt{\boldsymbol{P}} P 里的每一列就代表其中一个点。

2.输入近似成有限个(n个)Sigma点的估计形式

{ x ‾ = lim ⁡ k → ∞ 1 k ∑ i = 1 k χ i ≈ 1 n ∑ i = 1 n χ i P x = lim ⁡ k → ∞ 1 k ∑ i = 1 k ( χ i − x ˉ ) ( χ i − x ‾ ) T ≈ 1 n ∑ i = 1 n ( χ i − x ‾ ) ( χ i − x ‾ ) T \left\{\begin{array}{l} \overline{\boldsymbol{x}}=\lim \limits_{k \rightarrow \infty} \frac{1}{k} \sum_{i=1}^{k} \chi_{i} \approx \frac{1}{n} \sum_{i=1}^{n} \chi_{i} \\ \boldsymbol{P}_{x}=\lim \limits_{k \rightarrow \infty} \frac{1}{k} \sum_{i=1}^{k}\left(\chi_{i}-\bar{x}\right)\left(\chi_{i}-\overline{\boldsymbol{x}}\right)^{\mathrm{T}} \approx \frac{1}{n} \sum_{i=1}^{n}\left(\chi_{i}-\overline{\boldsymbol{x}}\right)\left(\chi_{i}-\overline{\boldsymbol{x}}\right)^{\mathrm{T}} \end{array}\right. x=klimk1i=1kχin1i=1nχiPx=klimk1i=1k(χixˉ)(χix)Tn1i=1n(χix)(χix)T

式中的 P x P_x Px 与上面 P x = ∑ i = 1 n ( P x ) i ( P x ) i T \boldsymbol{P}_{x}=\sum_{i=1}^{n}\left(\sqrt{\boldsymbol{P}_{x}}\right)_{i}\left(\sqrt{\boldsymbol{P}_{x}}\right)_{i}^{\mathrm{T}} Px=i=1n(Px )i(Px )iT 的形式对应,比较, 可得 1 n ( χ i − x ‾ ) = ± ( P x ) i \frac{1}{\sqrt{n}}\left(\boldsymbol{\chi}_{i}-\overline{\boldsymbol{x}}\right)= \pm\left(\sqrt{\boldsymbol{P}_{x}}\right)_{i} n 1(χix)=±(Px )i ,即 χ i = x ‾ ± ( n P x ) i \chi_{i}=\overline{\boldsymbol{x}} \pm\left(\sqrt{n \boldsymbol{P}_{x}}\right)_{i} χi=x±(nPx )i ,sigma点就是在均值的地方加减 ( n P x ) i \left(\sqrt{n \boldsymbol{P}_{x}}\right)_{i} (nPx )i

3.输入近似成有限个(2n个)Sigma点的估计形式

输入取上一步求得的sigma点,带入线性函数中,得:
{ x ‾ = 1 2 n ∑ i = 1 2 n χ i P x = 1 2 n ∑ i = 1 2 n ( χ i − x ‾ ) ( χ i − x ‾ ) T \left\{\begin{array}{l} \overline{\boldsymbol{x}}=\frac{1}{2 n} \sum_{i=1}^{2 n} \chi_{i} \\ \boldsymbol{P}_{x}=\frac{1}{2 n} \sum_{i=1}^{2 n}\left(\chi_{i}-\overline{\boldsymbol{x}}\right)\left(\chi_{i}-\overline{\boldsymbol{x}}\right)^{\mathrm{T}} \end{array}\right. {x=2n1i=12nχiPx=2n1i=12n(χix)(χix)T
记Sigma点组成的输入矩阵: χ = [ [ x ‾ ] n + n P x [ x ‾ ] n − n P x ] \chi=\left[[\overline{\boldsymbol{x}}]_{n}+\sqrt{n \boldsymbol{P}_{x}}\quad[\overline{\boldsymbol{x}}]_{n}-\sqrt{n \boldsymbol{P}_{x}}\right] χ=[[x]n+nPx [x]nnPx ] ,n*2n矩阵

得Sigma点组成的输出矩阵: η = [ [ F x ‾ ] n + F n P x [ F x ‾ ] n − F n P x ] \boldsymbol{\eta}=\left[[\boldsymbol{F} \overline{\boldsymbol{x}}]_{n}+\boldsymbol{F} \sqrt{n \boldsymbol{P}_{x}} \quad[\boldsymbol{F}\overline{\boldsymbol{x}}]_{n}-\boldsymbol{F} \sqrt{n \boldsymbol{P}_{x}}\right] η=[[Fx]n+FnPx [Fx]nFnPx ]

4.由输入输出Sigma点计算传播统计特征

{ y ‾ = 1 2 n ∑ i = 1 2 n η i = 1 2 n ∑ i = 1 2 n F x ‾ = F x ‾ P y = 1 2 n ∑ i = 1 2 n ( η i − y ‾ ) ( η i − y ‾ ) T = 1 2 n ∑ i = 1 2 n ( F n P x ) ( F n P x ) T = F x F T P x y = 1 2 n ∑ i = 1 2 n ( x i − x ‾ ) ( η i − y ‾ ) T = 1 2 n ∑ i = 1 2 n ( n P x ) ( F n P x ) T = P x F T \left\{\begin{array}{l} \overline{\boldsymbol{y}}=\frac{1}{2 n} \sum_{i=1}^{2 n} \boldsymbol{\eta}_{i}=\frac{1}{2 n} \sum_{i=1}^{2 n} \boldsymbol{F} \overline{\boldsymbol{x}}=\boldsymbol{F} \overline{\boldsymbol{x}} \\ \boldsymbol{P}_{y}=\frac{1}{2 n} \sum_{i=1}^{2 n}\left(\boldsymbol{\eta}_{i}-\overline{\boldsymbol{y}}\right)\left(\boldsymbol{\eta}_{i}-\overline{\boldsymbol{y}}\right)^{\mathrm{T}}=\frac{1}{2 n} \sum_{i=1}^{2 n}\left(\boldsymbol{F} \sqrt{n \boldsymbol{P}_{x}}\right)\left(\boldsymbol{F} \sqrt{n \boldsymbol{P}_{x}}\right)^{\mathrm{T}}=\boldsymbol{F}_{x} \boldsymbol{F}^{\mathrm{T}} \\ \boldsymbol{P}_{x y}=\frac{1}{2 n} \sum_{i=1}^{2 n}\left(\boldsymbol{x}_{i}-\overline{\boldsymbol{x}}\right)\left(\boldsymbol{\eta}_{i}-\overline{\boldsymbol{y}}\right)^{\mathrm{T}}=\frac{1}{2 n} \sum_{i=1}^{2 n}\left(\sqrt{n \boldsymbol{P}_{x}}\right)\left(\boldsymbol{F} \sqrt{n \boldsymbol{P}_{x}}\right)^{\mathrm{T}}=\boldsymbol{P}_{x} \boldsymbol{F}^{\mathrm{T}} \end{array}\right. y=2n1i=12nηi=2n1i=12nFx=FxPy=2n1i=12n(ηiy)(ηiy)T=2n1i=12n(FnPx )(FnPx )T=FxFTPxy=2n1i=12n(xix)(ηiy)T=2n1i=12n(nPx )(FnPx )T=PxFT

与理论结果一致,精确地捕获了输出的一、二阶矩。

2、非线性函数的UT变换

将这种操作放到非线性函数 y = f ( x ) y=f(x) y=f(x) 中:只是输入的Sigma点要带到非线性函数中算,输出的操作和线性的一致,只是符号变为约等于号。
{ χ = [ [ x ‾ ] n + n P x [ x ‾ ] n − n P x ] η i = f ( χ i ) y ‾ ≈ 1 / ( 2 n ) ⋅ ∑ i = 1 2 n η i P y ≈ 1 / ( 2 n ) ⋅ ∑ i = 1 2 n ( η i − y ‾ ) ( η i − y ‾ ) T P x y ≈ 1 / ( 2 n ) ⋅ ∑ i = 1 2 n ( χ i − x ‾ ) ( η i − y ‾ ) T \left\{\begin{array}{l}\boldsymbol{\chi}=\left[[\overline{\boldsymbol{x}}]_{n}+\sqrt{n \boldsymbol{P}_{x}} \quad[\overline{\boldsymbol{x}}]_{n}-\sqrt{n \boldsymbol{P}_{x}}\right] \\ \boldsymbol{\eta}_{i}=\boldsymbol{f}\left(\chi_{i}\right) \\ \overline{\boldsymbol{y}} \approx 1 /(2 n) \cdot \sum_{i=1}^{2 n} \boldsymbol{\eta}_{i} \\ \boldsymbol{P}_{y} \approx 1 /(2 n) \cdot \sum_{i=1}^{2 n}\left(\boldsymbol{\eta}_{i}-\overline{\boldsymbol{y}}\right)\left(\boldsymbol{\eta}_{i}-\overline{\boldsymbol{y}}\right)^{\mathrm{T}} \\ \boldsymbol{P}_{x y} \approx 1 /(2 n) \cdot \sum_{i=1}^{2 n}\left(\chi_{i}-\overline{\boldsymbol{x}}\right)\left(\boldsymbol{\eta}_{i}-\overline{\boldsymbol{y}}\right)^{\mathrm{T}}\end{array}\right. χ=[[x]n+nPx [x]nnPx ]ηi=f(χi)y1/(2n)i=12nηiPy1/(2n)i=12n(ηiy)(ηiy)TPxy1/(2n)i=12n(χix)(ηiy)T
可以改成更一般的形式:

在这里插入图片描述

其中:

在这里插入图片描述

非线性如果比较严重, α \alpha α 就应该取的比较小,使展开的点集中上次均值的附近。

EKF需要泰勒级数展开;UKF不需要,只要表达式能知道能运算就行了,点总可以运算得到结果,总可以进行统计

3、UT变换图示

在这里插入图片描述

三、UKF滤波

系统模型
{ x k = f ( x k − 1 ) + B k − 1 w k − 1 y k = h ( x k ) + v k \left\{\begin{array}{l}\boldsymbol{x}_{k}=\boldsymbol{f}\left(\boldsymbol{x}_{k-1}\right)+\boldsymbol{B}_{k-1} \boldsymbol{w}_{k-1} \\ \boldsymbol{y}_{k}=\boldsymbol{h}\left(\boldsymbol{x}_{k}\right)+\boldsymbol{v}_{k}\end{array}\right. {xk=f(xk1)+Bk1wk1yk=h(xk)+vk
滤波框架
{ K k = P x y , k / k − 1 P y , k / k − 1 − 1 x ^ k = x ^ k / k − 1 + K k ( y k − y ^ k / k − 1 ) P x , k = P x , k / k − 1 − K k P y , k / k − 1 K k T \left\{\begin{array}{l}\boldsymbol{K}_{k}=\boldsymbol{P}_{x y, k / k-1} \boldsymbol{P}_{y, k / k-1}^{-1} \\ \hat{\boldsymbol{x}}_{k}=\hat{\boldsymbol{x}}_{k / k-1}+\boldsymbol{K}_{k}\left(\boldsymbol{y}_{k}-\hat{\boldsymbol{y}}_{k / k-1}\right) \\ \boldsymbol{P}_{x, k}=\boldsymbol{P}_{x, k / k-1}-\boldsymbol{K}_{k} \boldsymbol{P}_{y, k / k-1} \boldsymbol{K}_{k}^{\mathrm{T}}\end{array}\right. Kk=Pxy,k/k1Py,k/k11x^k=x^k/k1+Kk(yky^k/k1)Px,k=Px,k/k1KkPy,k/k1KkT
状态预测UT变换
{ χ k − 1 = [ x ^ k − 1 [ x ^ k − 1 ] n + γ P x , k − 1 [ x ^ k − 1 ] n − γ P x , k − 1 ] χ i , k / k − 1 ∗ = f ( χ i , k − 1 ) x ^ k / k − 1 = ∑ i = 0 2 n W i m χ i , k / k − 1 ∗ P x , k / k − 1 = ∑ i = 0 2 n W i c ( χ i , k / k − 1 ∗ − x ^ k / k − 1 ) ( χ i , k / k − 1 ∗ − x ^ k / k − 1 ) T + B k − 1 Q k − 1 B k − 1 T \left\{\begin{array}{l}\boldsymbol{\chi}_{k-1}=\left[\begin{array}{lll}\hat{\boldsymbol{x}}_{k-1} & {\left[\hat{\boldsymbol{x}}_{k-1}\right]_{n}+\gamma \sqrt{\boldsymbol{P}_{x, k-1}}} & {\left[\hat{\boldsymbol{x}}_{k-1}\right]_{n}-\gamma \sqrt{\boldsymbol{P}_{x, k-1}}}\end{array}\right] \\ \chi_{i, k / k-1}^{*}=\boldsymbol{f}\left(\boldsymbol{\chi}_{i, k-1}\right) \\ \hat{\boldsymbol{x}}_{k / k-1}=\sum_{i=0}^{2 n} W_{i}^{m} \chi_{i, k / k-1}^{*} \\ \boldsymbol{P}_{x, k / k-1}=\sum_{i=0}^{2 n} W_{i}^{c}\left(\chi_{i, k / k-1}^{*}-\hat{\boldsymbol{x}}_{k / k-1}\right)\left(\chi_{i, k / k-1}^{*}-\hat{\boldsymbol{x}}_{k / k-1}\right)^{\mathrm{T}}+\boldsymbol{B}_{k-1} \boldsymbol{Q}_{k-1} \boldsymbol{B}_{k-1}^{\mathrm{T}}\end{array}\right. χk1=[x^k1[x^k1]n+γPx,k1 [x^k1]nγPx,k1 ]χi,k/k1=f(χi,k1)x^k/k1=i=02nWimχi,k/k1Px,k/k1=i=02nWic(χi,k/k1x^k/k1)(χi,k/k1x^k/k1)T+Bk1Qk1Bk1T
量测预测UT变换
{ χ k / k − 1 = [ x ^ k / k − 1 [ x ^ k / k − 1 ] n + γ P x , k / k − 1 [ x ^ k / k − 1 ] n − γ P x , k / k − 1 ] η i , k / k − 1 = h ( χ i , k / k − 1 ) y ^ k / k − 1 = ∑ i = 0 2 n W i m η i , k / k − 1 P y , k / k − 1 = ∑ i = 0 2 n W i c ( η i , k / k − 1 − y ^ k / k − 1 ) ( η i , k / k − 1 − y ^ k / k − 1 ) T + R k P x y , k / k − 1 = ∑ i = 0 2 n W i c ( χ i , k / k − 1 − x ^ k / k − 1 ) ( η i , k / k − 1 − y ^ k / k − 1 ) T \left\{\begin{array}{l}\boldsymbol{\chi}_{k / k-1}=\left[\begin{array}{lll}\hat{\boldsymbol{x}}_{k / k-1} & {\left[\hat{\boldsymbol{x}}_{k / k-1}\right]_{n}+\gamma \sqrt{\boldsymbol{P}_{x, k / k-1}}} & {\left[\hat{\boldsymbol{x}}_{k / k-1}\right]_{n}-\gamma \sqrt{\boldsymbol{P}_{x, k / k-1}}}\end{array}\right] \\ \boldsymbol{\eta}_{i, k / k-1}=\boldsymbol{h}\left(\chi_{i, k / k-1}\right) \\ \hat{\boldsymbol{y}}_{k / k-1}=\sum_{i=0}^{2 n} W_{i}^{m} \boldsymbol{\eta}_{i, k / k-1} \\ \boldsymbol{P}_{y, k / k-1}=\sum_{i=0}^{2 n} W_{i}^{c}\left(\boldsymbol{\eta}_{i, k / k-1}-\hat{\boldsymbol{y}}_{k / k-1}\right)\left(\boldsymbol{\eta}_{i, k / k-1}-\hat{\boldsymbol{y}}_{k / k-1}\right)^{\mathrm{T}}+\boldsymbol{R}_{k} \\ \boldsymbol{P}_{x y, k / k-1}=\sum_{i=0}^{2 n} W_{i}^{c}\left(\boldsymbol{\chi}_{i, k / k-1}-\hat{\boldsymbol{x}}_{k / k-1}\right)\left(\boldsymbol{\eta}_{i, k / k-1}-\hat{\boldsymbol{y}}_{k / k-1}\right)^{\mathrm{T}}\end{array}\right. χk/k1=[x^k/k1[x^k/k1]n+γPx,k/k1 [x^k/k1]nγPx,k/k1 ]ηi,k/k1=h(χi,k/k1)y^k/k1=i=02nWimηi,k/k1Py,k/k1=i=02nWic(ηi,k/k1y^k/k1)(ηi,k/k1y^k/k1)T+RkPxy,k/k1=i=02nWic(χi,k/k1x^k/k1)(ηi,k/k1y^k/k1)T
每个都实现,带到框架里,完成UKF时间更新、量测更新

【例1】一维非线性随机系统

{ x k = sin ⁡ ( x k − 1 ) + w k − 1 y k = { x k + v k x k > 0 2 x k + v k x k ≤ 0 w k ∼ W N ( 0 , 0. 1 2 ) v k ∼ W N ( 0 , 0. 3 2 ) \left\{\begin{array}{l} x_{k}=\sin \left(x_{k-1}\right)+w_{k-1} \\ y_{k}=\left\{\begin{array}{ll} x_{k}+v_{k} & x_{k}>0 \\ 2 x_{k}+v_{k} & x_{k} \leq 0 \end{array} \quad w_{k} \sim W N\left(0,0.1^{2}\right) \quad v_{k} \sim W N\left(0,0.3^{2}\right)\right. \end{array}\right. xk=sin(xk1)+wk1yk={xk+vk2xk+vkxk>0xk0wkWN(0,0.12)vkWN(0,0.32)

仿真结果:滤波效果与初值的选择关系密切

在这里插入图片描述

【例2】针对非常复杂的非线性系统模型

近似非线性概率传播 比近似非线性函数(泰勒展开线性化)更简单,此时UKF滤波比EKF滤波更具优势。

比如惯导大失准角误差模型
{ α ˙ = C ω − 1 [ ( I − C n n ′ ) ω i n n − ε n ′ ] δ v ˙ n = [ I − ( C n n ′ ) T ] f ~ s f n ′ + ( C n n ′ ) T ∇ n ′ \left\{\begin{array}{l}\dot{\boldsymbol{\alpha}}=\boldsymbol{C}_{\omega}^{-1}\left[\left(\boldsymbol{I}-\boldsymbol{C}_{n}^{n^{\prime}}\right) \boldsymbol{\omega}_{i n}^{n}-\boldsymbol{\varepsilon}^{n^{\prime}}\right] \\ \delta \dot{\boldsymbol{v}}^{n}=\left[\boldsymbol{I}-\left(\boldsymbol{C}_{n}^{n^{\prime}}\right)^{\mathrm{T}}\right] \tilde{\boldsymbol{f}}_{s f}^{n^{\prime}}+\left(\boldsymbol{C}_{n}^{n^{\prime}}\right)^{\mathrm{T}} \nabla^{n^{\prime}}\end{array}\right. α˙=Cω1[(ICnn)ωinnεn]δv˙n=[I(Cnn)T]f~sfn+(Cnn)Tn
其中:
C ω − 1 = 1 c α x [ c α y c α x 0 s α y c α x s α y s α x c α x − c α y s α x − s α y 0 c α y ] \boldsymbol{C}_{\omega}^{-1}=\frac{1}{c \alpha_{x}}\left[\begin{array}{ccc}c \alpha_{y} c \alpha_{x} & 0 & s \alpha_{y} c \alpha_{x} \\ s \alpha_{y} s \alpha_{x} & c \alpha_{x} & -c \alpha_{y} s \alpha_{x} \\ -s \alpha_{y} & 0 & c \alpha_{y}\end{array}\right] Cω1=cαx1 cαycαxsαysαxsαy0cαx0sαycαxcαysαxcαy

C n n ′ = [ c α y c α z − s α y s α x s α z c α y s α z + s α y s α x c α z − s α y c α x − c α x s α z c α x c α z s α x s α y c α z + c α y s α x s α z s α y s α z − c α y s α x c α z c α y c α x ] \boldsymbol{C}_{n}^{n^{\prime}}=\left[\begin{array}{ccc}c \alpha_{y} c \alpha_{z}-s \alpha_{y} s \alpha_{x} s \alpha_{z} & c \alpha_{y} s \alpha_{z}+s \alpha_{y} s \alpha_{x} c \alpha_{z} & -s \alpha_{y} c \alpha_{x} \\ -c \alpha_{x} s \alpha_{z} & c \alpha_{x} c \alpha_{z} & s \alpha_{x} \\ s \alpha_{y} c \alpha_{z}+c \alpha_{y} s \alpha_{x} s \alpha_{z} & s \alpha_{y} s \alpha_{z}-c \alpha_{y} s \alpha_{x} c \alpha_{z} & c \alpha_{y} c \alpha_{x}\end{array}\right] Cnn= cαycαzsαysαxsαzcαxsαzsαycαz+cαysαxsαzcαysαz+sαysαxcαzcαxcαzsαysαzcαysαxcαzsαycαxsαxcαycαx

方程如此复杂,想进行泰勒级数展开很困难,可以用UKF。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/630676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode_Day6 | 有效的字母异位词、两个数组的交集、快乐数、两数之和!

LeetCode_哈希表 242.有效的字母异位词1.题目描述2.题解 349.两个数组的交集1.题目描述2.题解 202.快乐数1.题目描述2.题解思路(官方题解啊&#xff01;看了好几遍真难) 3.算法4.代码实现5.复杂度分析 1.两数之和1.题目描述2.哈希表法3.代码实现 242.有效的字母异位词 1.题目描…

《三》TypeScript 中函数的类型

TypeScript 允许指定函数的参数和返回值的类型。 函数声明的类型定义&#xff1a;function 函数名(形参: 形参类型, 形参: 形参类型, ...): 返回值类型 {} function sum(x: number, y: number): number {return x y } sum(1, 2) // 正确 sum(1, 2, 3) // 错误。输入多余的或者…

CAN总线竞争与仲裁机制分析

1、CAN总线的接口 (1)CAN总线是串行、差分信号、异步总线&#xff0c;传输数据用两根信号线组成的差分信号线&#xff1b; (2)CANH和CANL是一组双绞线&#xff0c;两根线的电平差值表示逻辑1和0&#xff1b; 2、CAN总线显性、隐形电平 显性电平代表逻辑0&#xff0c;隐形电平代…

【Prometheus】mysqld_exporter+Grafana+AlertManager预警

环境 prometheus-2.44.0 mysqld_exporter-0.14.0 grafana-enterprise-9.1.2-1.x86_64.rpm alertmanager-0.25.0. 简介 mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的&#xff0c;mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署&#xff0c;…

08.JavaWeb-SpringMVC

2.SpringMVC Spring框架是一个开源的轻量级框架&#xff0c;SpringMVC是Spring的一个子框架 2.1SpringMVC工作机制 2.1.1 DispatcherServlet前端控制器 【不需要程序员开发】 作用&#xff1a;作为接受请求&#xff0c;响应结果&#xff0c;相当于转发器&#xff0c;中央处理…

『Jenkins』最新版Jenkins安装与Git集成—CentOS 7安装的详细教程

&#x1f4e3;读完这篇文章里你能收获到 图文形式安装Jenkins在Jenkins集成Git并进行的配置感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录 一、准备工作1. 安装Java Development Kit (JDK 11) 二、安装Jenkins1. 下载和安装最新版的Jenkins2. 启动Jenkins服务3. 将Jenkin…

【线性代数】

求解线性方程组 右乘向量/矩阵 把左边的矩阵拆成一个个列向量&#xff0c;右边的向量表示对左边列向量组的线性组合。 [ c o l 1 c o l 2 c o l 3 ] [ 3 4 5 ] [ 3 c o l 1 4 c o l 2 5 c o l 3 ] \left[\begin{array}{c} col_{1} & col_{2} & col_{3} \end{array}\…

类的三大特性——>封装

目录 理论知识 数据抽象&#xff1a; 封装&#xff1a; 细节知识 访问控制与封装 访问控制 STL使用封装 理论知识 类的基本思想是数据抽象、和封装。 数据抽象&#xff1a; 是一种依赖接口和实现分离的一种编程技术&#xff1a; 接口&#xff1a;包括用户所能执行的操…

点燃创作灵感:Prompt 实践指南揭秘!让 ChatGPT 更智能的六种策略(上)

在和 ChatGPT 对话中&#xff0c;Prompt 提示词的选择&#xff0c;如果遵循以下六种策略&#xff0c;我们将获得更好、更符合要求的回答。 这些策略&#xff0c;后几种更适合在编程调用 ChatGPT API 时使用&#xff0c;不过也适用直接和 ChatGPT 对话&#xff0c;让它更好的理解…

【LeetCode】HOT 100(7)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

C语言之基于链表实现排序

题目&#xff1a;通过链表实现从小到大进行排序 代码&#xff1a; #include <stdio.h> #include <stdlib.h> #define N 9//通过链表实现从小到大排序 typedef struct node {int data;struct node *next; } NODE;//fun函数实现是将头结点的单向链表节点…

chatgpt赋能python:Python怎么倒序输出中文字典?

Python怎么倒序输出中文字典&#xff1f; 作为一门高效、易上手的编程语言&#xff0c;Python在数据处理、科学计算、机器学习等领域都有广泛应用。而对于SEO工程师来说&#xff0c;Python也是一款非常实用的工具。那么今天&#xff0c;我们就来探讨一下Python怎么倒序输出中文…

Sqlite 比较,安装,使用,个人总结

文章目录 什么是sqlite&#xff0c;和别的数据库有什么差别&#xff1f;sqlite介绍什么是边缘存储&#xff1f; sqlite存储上限sqlite和别的数据库的区别 Sqlite本地安装sqlite 在C# .net webapi 软件中的使用 什么是sqlite&#xff0c;和别的数据库有什么差别&#xff1f; sq…

【JavaSE】Java(五十七):核心要点总结

文章目录 1. HashMap 的实现原理2. Set 有哪些实现类3. HashSet 的实现原理4. 如何实现数组和List之间的转换5. Java中的迭代器 1. HashMap 的实现原理 HashMap 是一种基于哈希表的数据结构&#xff0c;它的实现原理简单来说就是将键值对存储在一个数组中&#xff0c;并通过哈希…

深入理解深度学习——注意力机制(Attention Mechanism):自注意力(Self-attention)

分类目录&#xff1a;《深入理解深度学习》总目录 相关文章&#xff1a; 注意力机制&#xff08;AttentionMechanism&#xff09;&#xff1a;基础知识 注意力机制&#xff08;AttentionMechanism&#xff09;&#xff1a;注意力汇聚与Nadaraya-Watson核回归 注意力机制&#…

强化服务器安全!CentOS 7如何使用fail2ban防范SSH暴力破解攻击?

前言 本文主要讲解centos7操作系统下&#xff0c;如何使用fail2ban防范SSH暴力破解。 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是沐风晓月&#xff0c;阿里云社区博客专家 &#x1f609;&#x1f609; &#x1…

如何使用Python生成跑马灯视频

在这篇博客中&#xff0c;我将向您展示如何使用Python语言生成一个简单的跑马灯视频。我们将使用OpenCV和Pillow两个库来实现这个功能。 安装依赖库 首先&#xff0c;我们需要安装opencv-python和Pillow两个库。您可以使用以下命令来安装它们&#xff1a; pip install opencv…

Navicat 设置PostgreSQL数据库的表主键ID自增

文章目录 1 新建序列1.1 手动新建1.2 SQL语句新建 2 设置主键自增 1 新建序列 1.1 手动新建 选择 其他->序列 选择一个模式&#xff08;例如public&#xff09;&#xff0c;然后选择新增序列。 设置序列参数 刷新序列列表即可看到新建的序列 注意&#xff1a; 序列的最大…

C语言实现2048小游戏

大部分同学学习C语言编程以后不知道能通过什么样的项目才可以锻炼自己的思维功力&#xff0c;2048相信大家都应该熟悉&#xff0c;不管是手机上还是网页版的相信大家都玩过,这个简单的控制台版本的游戏是我曾经在伟易达上班时一个嵌入式应用游戏部门的大佬设计的&#xff0c;适…

简单使用gateway,以及gateway所需要的依赖

先声明&#xff0c;使用gateway需要有一定的SpringCloud的基础&#xff0c;再来使用时会看的很明白&#xff0c;使用前需要先开nacos服务&#xff0c;&#xff0c;确定无误。 下面直接开始 首先我们需要两个原来通信的模块&#xff0c;这里分别是service-const与service-provid…