Kalman滤波

文章目录

  • 一、公式推导
  • 二、扩展卡尔曼滤波

卡尔曼滤波是一种最优化递归数据处理算法。(Optimal Recursive Data Processing Algorithm)
Kalman滤波是时域滤波,采用状态空间描述系统,运用递推形式是计算简单,数据存储量小,应用广泛。
广泛应用于惯性导航、制导系统、全球定位系统、目标跟踪、通信与信号处理、金融等。
Kalman滤波器的广泛应用是因为我们的生活中存在大量不确定性。
在我们描述一个系统时,不确定性主要体现在3个方面:

  • 不存在完美的数学模型
  • 系统的扰动不可控,也很难建模
  • 测量传感器本身存在误差

一、公式推导

状态空间方程:
x k = A x k − 1 + B u k − 1 + w k − 1 (1) x_k=Ax_{k-1}+Bu_{k-1}+w_{k-1} \tag{1} xk=Axk1+Buk1+wk1(1)
z k = H x k + v k (2) z_k=Hx_k+v_k \tag{2} zk=Hxk+vk(2)

  • w k − 1 w_{k-1} wk1为过程噪声,不可测,但我们可以假设其符合正态分布 P ( w ) ∼ ( 0 , Q ) P(w)\sim(0,Q) P(w)(0,Q),0为期望,Q为协方差矩阵。 Q = E [ w w T ] Q=E[ww^T] Q=E[wwT]
  • v k v_k vk为测量噪声。 P ( v ) ∼ ( 0 , R ) P(v)\sim(0,R) P(v)(0,R), R = E [ v v T ] R=E[vv^T] R=E[vvT]
  • 在实际建模过程中, w k − 1 w_{k-1} wk1 v k v_k vk项是无法建模的,只知道前面的项,所以只能有估计值。

x ^ k − = A x k − 1 + B u k − 1 (3) \hat x_k^-=Ax_{k-1}+Bu_{k-1}\tag{3} x^k=Axk1+Buk1(3)

  • x ^ k − \hat x_k^- x^k为先验估计,通过状态空间方程去掉过程噪声得到的式子,是计算出来的。

z k = H x k z_k=Hx_k zk=Hxk可得 x ^ k M E A = H − 1 z k (4) \hat x_{k_{MEA}}=H^{-1}z_k\tag{4} x^kMEA=H1zk(4)

  • 测量结果 z k z_k zk已知, x ^ k M E A \hat x_{k_{MEA}} x^kMEA是测出来的。

无论是算出来的 x ^ k − \hat x_k^- x^k还是测出来的 x ^ k M E A \hat x_{k_{MEA}} x^kMEA,都不具备噪声项,利用数据融合可得
x ^ k = x ^ k − + G ( H − 1 z k − x k − ) , G = K k H \hat x_k=\hat x_k^-+G(H^{-1}z_k-x_k^-),G=K_kH x^k=x^k+G(H1zkxk),G=KkH

  • G = 0 G=0 G=0时, x ^ k = x ^ k − \hat x_k=\hat x_k^- x^k=x^k
  • G = 1 G=1 G=1时, x ^ k = H − 1 z k \hat x_k=H^{-1}z_k x^k=H1zk

x ^ k = x ^ k − + K k ( z k − H x k − ) (5) \hat x_k=\hat x_k^-+K_k(z_k-Hx_k^-)\tag{5} x^k=x^k+Kk(zkHxk)(5)

  • K k = 0 K_k=0 Kk=0时, x ^ k = x ^ k − \hat x_k=\hat x_k^- x^k=x^k
  • K k = H − K_k=H^- Kk=H时, x ^ k = H − 1 z k \hat x_k=H^{-1}z_k x^k=H1zk

目标:寻找 K k K_k Kk使得 x ^ k → x k \hat x_k\to x_k x^kxk, x k x_k xk为实际值。
引入 e k = x k − x ^ k (6) e_k=x_k-\hat x_k\tag{6} ek=xkx^k(6)

  • P ( e k ) ∼ ( 0 , P ) P(e_k)\sim(0,P) P(ek)(0,P)
    P = E [ e e T ] = [ σ e 1 2 σ e 1 σ e 2 σ e 2 σ e 1 σ e 2 2 ] (7) P=E[ee^T]=\begin{bmatrix}\sigma e_1^2 & \sigma e_1\sigma e_2 \\ \sigma e_2\sigma e_1 & \sigma e_2^2 \end{bmatrix} \tag{7} P=E[eeT]=[σe12σe2σe1σe1σe2σe22](7)

  • t r ( P ) = σ e 1 2 + σ e 2 2 tr(P)=\sigma e_1^2+\sigma e_2^2 tr(P)=σe12+σe22,目标即为使得 t r ( P ) tr(P) tr(P)最小

x k − x ^ k = 【代入 ( 5 ) 】 x k − ( x ^ k − + K k ( z k − H x k − ) ) = x k − x k − − K k z k + K k H x k − = 【代入 ( 2 ) 】 x k − x k − − K k ( H x k + v k ) + K k H x k − = ( I − K k H ) ( x k − x k − ) − K k v k = ( I − K k H ) e k − − K k v k \begin{aligned} \color{green}x_k-\hat x_k&=【代入(5)】x_k-(\hat x_k^-+K_k(z_k-Hx_k^-)) \\&=x_k-x_k^--K_kz_k+K_kHx_k^- \\&=【代入(2)】x_k-x_k^--K_k(Hx_k+v_k)+K_kHx_k^- \\&=(I-K_kH)(x_k-x_k^-)-K_kv_k \\&= \color{green}(I-K_kH)e_k^--K_kv_k \end{aligned} xkx^k=【代入(5)xk(x^k+Kk(zkHxk))=xkxkKkzk+KkHxk=【代入(2)xkxkKk(Hxk+vk)+KkHxk=(IKkH)(xkxk)Kkvk=(IKkH)ekKkvk

E [ ( I − K k H ) e k − v k T K k T ] = ( I − K k H ) E ( e k − v k T ) K k T = ( I − K k H ) E ( e k − ) E ( v k T ) K k T    【 E ( e k − ) = 0 , E ( v k T ) = 0 】 = 0 \begin{aligned}\color{blue}E[(I-K_kH)e_k^-v_k^TK_k^T]&=(I-K_kH)E(e_k^-v_k^T)K_k^T \\&=(I-K_kH)E(e_k^-)E(v_k^T)K_k^T \ \ \ 【E(e_k^-)=0,E(v_k^T)=0】 \\&=\color{blue}0 \end{aligned} E[(IKkH)ekvkTKkT]=(IKkH)E(ekvkT)KkT=(IKkH)E(ek)E(vkT)KkT   E(ek)=0E(vkT)=0=0

E [ K k v k e k − T ( I − K k H ) T ] = 0 【理由同上】 \color{blue}E[K_kv_ke_k^{-T}(I-K_kH)^T]=\color{blue}0【理由同上】 E[KkvkekT(IKkH)T]=0【理由同上】

P k = E [ e e T ] = E [ ( x k − x ^ k ) ( x k − x ^ k ) T ] = E [ [ ( I − K k H ) e k − − K k v k ] [ ( I − K k H ) e k − − K k v k ] T ] = E [ [ ( I − K k H ) e k − − K k v k ] [ e k − T ( I − K k H ) T − v k T K k T ] ] = E [ ( I − K k H ) e k − e k − T ( I − K k H ) T − ( I − K k H ) e k − v k T K k T − K k v k e k − T ( I − K k H ) T + K k v k v k T K k T ] = E [ ( I − K k H ) e k − e k − T ( I − K k H ) T ] − E [ ( I − K k H ) e k − v k T K k T ] − E [ K k v k e k − T ( I − K k H ) T ] + E [ K k v k v k T K k T ] = ( I − K k H ) E ( e k − e k − T ) ( I − K k H ) T + K k E ( v k v k T ) K k T = 【 E ( e k − e k − T ) = P k − , E ( v k v k T ) = R 】( P k − − K k H P k − ) ( I − K k H ) T + K k R K k T = P k − − K k H P k − − P k − H T K k T + K k H P k − H T K k T + K k R K k T \begin{aligned} P_k & =E[ee^T] \\ &=E[({\color{green}x_k-\hat x_k})({\color{green}x_k-\hat x_k})^T] \\ &=E[[(I-K_kH)e_k^--K_kv_k][(I-K_kH)e_k^--K_kv_k]^T] \\ &=E[[(I-K_kH)e_k^--K_kv_k][e_k^{-T}(I-K_kH)^T-v_k^TK_k^T]] \\ &=E[(I-K_kH)e_k^-e_k^{-T}(I-K_kH)^T-(I-K_kH)e_k^-v_k^TK_k^T-K_kv_ke_k^{-T}(I-K_kH)^T+K_kv_kv_k^TK_k^T] \\ &=E[(I-K_kH)e_k^-e_k^{-T}(I-K_kH)^T]-{\color{blue}E[(I-K_kH)e_k^-v_k^TK_k^T]}-{\color{blue}E[K_kv_ke_k^{-T}(I-K_kH)^T]}+E[K_kv_kv_k^TK_k^T] \\ &=(I-K_kH)E(e_k^-e_k^{-T})(I-K_kH)^T+K_kE(v_kv_k^T)K_k^T \\ &=【E(e_k^-e_k^{-T})=P_k^-,E(v_kv_k^T)=R】(P_k^--K_kHP_k^-)(I-K_kH)^T+K_kRK_k^T \\ &=P_k^--{\color{purple}K_kHP_k^-}-{\color{red}P_k^-H^TK_k^T}+K_kHP_k^-H^TK_k^T+K_kRK_k^T \end{aligned} Pk=E[eeT]=E[(xkx^k)(xkx^k)T]=E[[(IKkH)ekKkvk][(IKkH)ekKkvk]T]=E[[(IKkH)ekKkvk][ekT(IKkH)TvkTKkT]]=E[(IKkH)ekekT(IKkH)T(IKkH)ekvkTKkTKkvkekT(IKkH)T+KkvkvkTKkT]=E[(IKkH)ekekT(IKkH)T]E[(IKkH)ekvkTKkT]E[KkvkekT(IKkH)T]+E[KkvkvkTKkT]=(IKkH)E(ekekT)(IKkH)T+KkE(vkvkT)KkT=E(ekekT)=PkE(vkvkT)=R】(PkKkHPk(IKkH)T+KkRKkT=PkKkHPkPkHTKkT+KkHPkHTKkT+KkRKkT

( P k − H T K k T ) T = K k ( P k − H T ) T = K k H P k − 【故这两项的迹相等】 \begin{aligned}({\color{red}P_k^-H^TK_k^T})^T&=K_k(P_k^-H^T)^T \\&={\color{purple}K_kHP_k^-} 【故这两项的迹相等】 \end{aligned} (PkHTKkT)T=Kk(PkHT)T=KkHPk【故这两项的迹相等】

t r ( P k ) = t r ( P k − ) − 2 t r ( K k H P k − ) + t r ( K k H P k − H T K k T ) + t r ( K k R K k T ) tr(P_k)=tr(P_k^-)-2tr(K_kHP_k^-)+tr(K_kHP_k^-H^TK_k^T)+tr(K_kRK_k^T) tr(Pk)=tr(Pk)2tr(KkHPk)+tr(KkHPkHTKkT)+tr(KkRKkT)

d t r ( P k ) d K k = 0 − 2 ( H P k − ) T + 2 K k H P k − H T + 2 K k R \frac{dtr(P_k)}{dK_k}=0-2(HP_k^-)^T+2K_kHP_k^-H^T+2K_kR dKkdtr(Pk)=02(HPk)T+2KkHPkHT+2KkR

d t r ( P k ) d K k = 0 \frac{dtr(P_k)}{dK_k}=0 dKkdtr(Pk)=0
− 2 ( H P k − ) T + 2 K k H P k − H T + 2 K k R = 0 -2(HP_k^-)^T+2K_kHP_k^-H^T+2K_kR=0 2(HPk)T+2KkHPkHT+2KkR=0
− P k − T H T + K k H P k − H T + K k R = 0 -P_k^{-T}H^T+K_kHP_k^-H^T+K_kR=0 PkTHT+KkHPkHT+KkR=0
【协方差矩阵的转置等于其本身】 【协方差矩阵的转置等于其本身】 【协方差矩阵的转置等于其本身】
− P k − H T + K k H P k − H T + K k R = 0 -P_k^-H^T+K_kHP_k^-H^T+K_kR=0 PkHT+KkHPkHT+KkR=0
K k ( H P k − H T + R ) = P k − H T K_k(HP_k^-H^T+R)=P_k^-H^T Kk(HPkHT+R)=PkHT
K k = P k − H T H P k − H T + R K_k=\frac{P_k^-H^T}{HP_k^-H^T+R} Kk=HPkHT+RPkHT

  • R较大时, K k → 0 , x ^ k = x ^ k − K_k \to 0,\hat x_k=\hat x_k^- Kk0,x^k=x^k
  • R较小时, K k = H − , x ^ k = H − 1 z k K_k=H^-,\hat x_k=H^{-1}z_k Kk=Hx^k=H1zk

e k − = x k − x ^ k − = A x k − 1 + B u k − 1 + w k − 1 − A x ^ k − 1 − B u k − 1 = A ( x k − 1 − x ^ k − 1 ) + w k − 1 = A e k − 1 + w k − 1 \begin{aligned}{\color{brown}e_k^-}&=x_k-\hat x_k^- \\ &=Ax_{k-1}+Bu_{k-1}+w_{k-1}-A\hat x_{k-1}-Bu_{k-1} \\ &=A(x_{k-1}-\hat x_{k-1})+w_{k-1} \\ &=\color{brown}Ae_{k-1}+w_{k-1} \end{aligned} ek=xkx^k=Axk1+Buk1+wk1Ax^k1Buk1=A(xk1x^k1)+wk1=Aek1+wk1

E [ A e k − 1 w k − 1 T ] = 【相互独立】 A E [ e k − 1 ] E [ w k − 1 T ] = 【 E [ e k − 1 ] = 0 , E [ w k − 1 T = 0 】 A ⋅ 0 ⋅ 0 = 0 \begin{aligned}{\color{fuchsia}E[Ae_{k-1}w_{k-1}^T]}&=【相互独立】AE[e_{k-1}]E[w_{k-1}^T] \\&=【E[e_{k-1}]=0,E[w_{k-1}^T=0】A\cdot0\cdot0 \\&=\color{fuchsia}0 \end{aligned} E[Aek1wk1T]=【相互独立】AE[ek1]E[wk1T]=E[ek1]=0E[wk1T=0A00=0

E [ w k − 1 e k − 1 T A T ] = 0 【理由同上】 \color{fuchsia}E[w_{k-1}e_{k-1}^TA^T]=0【理由同上】 E[wk1ek1TAT]=0【理由同上】

P k − = E [ e k − e k − T ] = E [ ( A e k − 1 + w k − 1 ) ( A e k − 1 + w k − 1 ) T ] = E [ A e k − 1 e k − 1 T A T + A e k − 1 w k − 1 T + w k − 1 e k − 1 T A T + w k − 1 w k − 1 ) T ] = E [ A e k − 1 e k − 1 T A T ] + E [ A e k − 1 w k − 1 T ] + E [ w k − 1 e k − 1 T A T ] + E [ w k − 1 w k − 1 ) T ] = E [ A e k − 1 e k − 1 T A T ] + E [ w k − 1 w k − 1 ) T ] = A E [ e k − 1 e k − 1 T ] A T + E [ w k − 1 w k − 1 ) T ] = A P k − 1 A T + Q \begin{aligned}P_k^- &=E[{\color{brown}e_k^-}e_k^{-T}] \\&=E[(Ae_{k-1}+w_{k-1})(Ae_{k-1}+w_{k-1})^T] \\&=E[Ae_{k-1}e_{k-1}^TA^T+Ae_{k-1}w_{k-1}^T+w_{k-1}e_{k-1}^TA^T+w_{k-1}w_{k-1})^T] \\&=E[Ae_{k-1}e_{k-1}^TA^T]+{\color{fuchsia}E[Ae_{k-1}w_{k-1}^T]}+{\color{fuchsia}E[w_{k-1}e_{k-1}^TA^T]}+E[w_{k-1}w_{k-1})^T] \\&=E[Ae_{k-1}e_{k-1}^TA^T]+E[w_{k-1}w_{k-1})^T] \\&=AE[e_{k-1}e_{k-1}^T]A^T+E[w_{k-1}w_{k-1})^T] \\&=AP_{k-1}A^T+Q \end{aligned} Pk=E[ekekT]=E[(Aek1+wk1)(Aek1+wk1)T]=E[Aek1ek1TAT+Aek1wk1T+wk1ek1TAT+wk1wk1)T]=E[Aek1ek1TAT]+E[Aek1wk1T]+E[wk1ek1TAT]+E[wk1wk1)T]=E[Aek1ek1TAT]+E[wk1wk1)T]=AE[ek1ek1T]AT+E[wk1wk1)T]=APk1AT+Q

利用卡尔曼滤波器估计状态变量的值
在这里插入图片描述

二、扩展卡尔曼滤波

对于非线性系统:
x k = f ( x k − 1 , u k − 1 , w k − 1 ) x_k=f(x_{k-1},u_{k-1},w_{k-1}) xk=f(xk1,uk1wk1)
z k = h ( x k , v k ) z_k=h(x_k,v_k) zk=h(xk,vk)
由于正态分布的随机变量通过非线性系统后就不再是正态的了,所以如果想使用Kalman滤波,就需要对其线性化。使用Tylor Series(泰勒级数)展开。 f ( x ) = f ( x 0 ) + ∂ f ∂ x ( x − x 0 ) f(x)=f(x_0)+\frac{\partial f}{\partial x}(x-x_0) f(x)=f(x0)+xf(xx0)
在这里插入图片描述
系统有误差,无法在真实点线性化。
f ( x k ) f(x_k) f(xk) x ^ k − 1 \hat x_{k-1} x^k1( k − 1 k-1 k1时的后验估计)处线性化
x k = f ( x ^ k − 1 , u k − 1 , w k − 1 ) + A ( x k − x ^ k − 1 ) + w k w k − 1 x_k={\color{red}f(\hat x_{k-1},u_{k-1},w_{k-1})}+{\color{green}A(x_k-\hat x_{k-1})}+{\color{blue}w_kw_{k-1}} xk=f(x^k1,uk1,wk1)+A(xkx^k1)+wkwk1

  • f ( x ^ k − 1 , u k − 1 , w k − 1 ) = f ( x ^ k − 1 , u k − 1 , 0 ) = x ~ k \color{red}f(\hat x_{k-1},u_{k-1},w_{k-1})=f(\hat x_{k-1},u_{k-1},0)=\tilde x_k f(x^k1,uk1,wk1)=f(x^k1,uk1,0)=x~k
  • A 为雅可比矩阵, A = ∂ f ∂ x ∣ x ^ k − 1 , u k − 1 \color{green}A为雅可比矩阵,A=\frac{\partial f}{\partial x}_{|\hat x_{k-1},u_{k-1}} A为雅可比矩阵,A=xfx^k1,uk1
  • w k = ∂ f ∂ w ∣ x ^ k − 1 , u k − 1 \color{blue}w_k=\frac{\partial f}{\partial w}_{|\hat x_{k-1},u_{k-1}} wk=wfx^k1,uk1

z k z_k zk x ~ k \tilde x_k x~k线性化
z k = h ( x ~ k , v k ) + H ( x k − x ~ k ) + V v k z_k=h(\tilde x_k,v_k)+H(x_k-\tilde x_k)+Vv_k zk=h(x~k,vk)+H(xkx~k)+Vvk
在这里插入图片描述

参考:
卡尔曼滤波DR_CAN

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TSINGSEE视频汇聚管理与AI算法视频质量检测方案

一、建设背景 随着互联网视频技术的发展,视频监管在辅助安全生产、管理等方面发挥了不可替代的作用。但是,在监管场景中,仍然存在视频掉线、视频人为遮挡、视频录像存储时长不足等问题,对企业的日常管理和运转存在较大的安全隐患…

A. Weird Sum

题目链接 : Problem - 1648A - Codeforces 题面 : 题意 : 输入 n m (1≤n*m≤1e5) 和 n 行 m 列的矩阵 a,元素范围 [1,1e5]。 对于矩阵中的所有相同元素对,即满足 a[x1][y1] a[x2][y2] 的元素对 (a[x1][y1], a[x2][y2]),把 abs(x1-x2)…

P3371 【模板】单源最短路径(弱化版)

【模板】单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779。 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路…

代码随想录Day45 动态规划13 LeetCode T1143最长公共子序列 T1135 不相交的线 T53最大子数组和

LeetCode T1143 最长公共子序列 题目链接:1143. 最长公共子序列 - 力扣(LeetCode) 题目思路: 动规五部曲分析 1.确定dp数组的含义 这里dp数组的含义是结尾分别为i-1,j-1的text1和text2的最长公共子序列长度 至于为什么是i-1,j-1我之前已经说过了,这里再…

ABZ正交编码 - 异步电机常用的位置信息确定方式

什么是正交编码? ab正交编码器(又名双通道增量式编码器),用于将线性移位转换为脉冲信号。通过监控脉冲的数目和两个信号的相对相位,用户可以跟踪旋转位置、旋转方向和速度。另外,第三个通道称为索引信号&am…

μC/OS-II---计时器管理2(os_tmr.c)

目录 获取计时器的名字获取计时器到期前剩余的时间查看计时器的状态 计时器是倒计时器,当计数器达到零时执行某个动作。用户通过回调函数提供这个动作。回调函数是用户声明的函数,在计时器到期时被调用。在回调函数中绝对不能进行阻塞调用(例…

软件测试基础1:认识软件及测试

功能测试能力:具备对所有软件的功能进行质量验证。 1什么是软件 分类 应用软件系统软件 软件:控制计算机硬件工作的工具。 2软件基本组成 3软件产生过程 4什么是软件测试 软件测试:使用技术手段验证软件是否满足使用需求。 5软件测试目的 减少软件…

使用matlab制作声音采样率转换、播放以及显示的界面

利用matlab做一个声音采样率转换、播放以及显示的界面 大抵流程: 图形界面创建:使用figure函数创建名为“声音采样率转换”的图形界面,并设置了其位置和大小。 按钮和文本框:使用uicontrol函数创建了选择音频文件的按钮、显示当前…

工业数据的“最后一公里”怎么走?

随着工业互联网的迅猛发展,工业数据已经成为推动制造业转型升级的重要动力。然而,面对海量的工业数据,如何高效、准确地走过数据的“最后一公里”,成为制约企业发展的关键问题。本文将探讨工业数据“最后一公里”所面临的挑战&…

魔兽服务器学习-笔记(服务器部署、地图管理、DB、日志模块、任务模块、战斗模块)

文章目录 一、环境准备1)依赖安装2)源码下载和编译 二、生成数据信息1)地图数据信息(客户端信息)2)数据库信息 三、启动服务器四、日志模块五、数据库模块六、场景模块1)地图管理2)A…

如何在微信内置浏览器内抓包

文章目录 使用环境&工具使用步骤1、手机USB连接上电脑,打开USB调试2、解压adb工具的压缩包,使用该工具连接上手机3、开启微信抓包4、电脑上打开chrome内核的浏览器或edge浏览器 使用环境&工具 windows电脑 安卓手机 adb工具 USB数据线 使用步骤…

【已解决】git push send-pack: unexpected disconnect while reading sideband packet

解决办法:修改缓存大小 打开项目所在路径下的git目录 找到config文件,用记事本打开编辑。 添加如下内容并保存即可 [http] postBuffer 1048576000

每日一练:Python中实现将阳历转换为农历

农历是中国传统的农业历法,与阳历(公历)有所不同。在Python中,我们可以使用第三方库 lunardate 来实现阳历到农历的转换。以下是一个简单的示例,演示如何在Python中执行这个转换过程。 1.安装 lunardate 库 首先&…

VR全景:打造虚拟政务服务,打通服务群众“最后一公里”

大家对政务大厅的工作效率可能已经司空见惯,办事窗口少,而需要办理的群众和业务却很多,很多去政务大厅办理业务的,排队几个小时也是常有的。并且在传统政务服务中,办事流程一般都较为复杂、耗时长,往往需要…

基于SSM的宠物领养系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

高频CSS面试题

给大家推荐一个实用面试题库 1、前端面试题库 (面试必备) 推荐:★★★★★ 地址:web前端面试题库 BFC 块级格式上下文(block format context)是页面一块独立的渲染区域,具有一套独立的渲染规则 内部的…

吊打Fast Request还免费? 这款插件真心好用!

今天给大家推荐一款IDEA插件:Apipost Helper,比Fast Request更好用并且完全免费!三大亮点功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试,;生成API目录树,双击即可快速…

[RK3568][Android12.0]--- 系统自带预置第三方APK方法

Platform: RK3568 OS: Android 12.0 Kernel: 4.19 Rockchip默认提供了机制来预置第三方APK, 方法很简单: 1. 在device/rockchip/rk3568创建preinstall目录(如果要可卸载,那就创建preinstall_del目录) 2. 将你要预安装的APK放进此目录即可 preinstall 不…

wind版本elasticdump执行报错 unexpected token ‘ in json at

输入的格式不对: 之前,json格式不对: elasticdump --inputhttp://***:9200/d_*_news, --output/home/zyyt/es_data_bak/0714.json --searchBody{"query":{"bool":{"must":[{"term":{"languag…

【算法练习Day48】回文子串最长回文子序列

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 回文子串最长回文子序列总结…