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

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

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

相关文章

postman调用接口报{“detail“:“Method \“DELETE\“ not allowed.“}错误, 解决记录

项目是python代码开发, urls.py 路由中访问路径代码如下: urlpatterns [path(reportmanagement/<int:pk>/, views.ReportManagementDetail.as_view(), namereport-management-detail),] 对应view视图中代码如下: class ReportManagementDetail(GenericAPIView):"…

μC/OS-II---Task管理2(os_task.c)

目录 改变Task优先级Task挂起Task恢复Task信息获取Task调度器上锁&#xff08;os_core.c&#xff09;Task调度器开锁&#xff08;os_core.c&#xff09; 改变Task优先级 #if OS_TASK_CHANGE_PRIO_EN > 0u INT8U OSTaskChangePrio (INT8U oldprio,INT8U newprio) { #if (…

多商家签到打卡奖励免单霸王餐小程序开发

多商家签到打卡奖励免单霸王餐小程序开发 用户注册和登录&#xff1a;提供用户注册和登录功能&#xff0c;以便用户能够参与签到打卡活动。 商家入驻&#xff1a;商家可申请入驻平台&#xff0c;提交相关资料并等待平台审核&#xff0c;审核通过后即可发布活动和奖励。 签到打…

【SSH】SSH异常处理思路

1.介绍 SSH&#xff08;Secure Shell&#xff09;是一种加密的网络协议&#xff0c;用于安全地远程连接到服务器或其他计算设备。它提供了加密的通信信道&#xff0c;以防止敏感信息被窃听或篡改。SSH支持多种身份验证方法&#xff0c;其中之一是密码身份验证。 密码登录是最常…

.one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复

导言&#xff1a; 随着科技的不断发展&#xff0c;网络犯罪也在不断进化&#xff0c;.one4-V-XXXXXXXX勒索病毒作为其中的一种威胁&#xff0c;对个人和企业的数据安全构成了巨大的风险。本文将深入介绍.one4-V-XXXXXXXX勒索病毒的特点、详细的数据恢复方法&#xff0c;以及全…

Mysql 8.0 实现分组后获取组内极值算法 broup by

Mysql 8 中无法用低版本的 二次子查询实现&#xff0c;把数据集升序排列后&#xff0c;再外层做group By分组&#xff0c;取出第一条的方式。 因此引入了一个新函数&#xff0c;自动生成行序列&#xff0c;并且行序列按照指定字段分组后再根据自定字段进行排列原理如下 goupb…

相机通用类之LMI激光三角相机(3D),软触发硬触发(飞拍),并输出halcon格式对象

//在此之前可以先浏览我编写的通用上位机类&#xff0c;更方便理解 https://blog.csdn.net/m0_51559565/article/details/134403745最近完成一个关于LMI激光三角&#xff08;3D相机&#xff09;采图的demo&#xff0c;记录并说明用法。 先上代码。 using Lmi3d.GoSdk; using L…

使用FFmpeg转封装为hls(m3u8)流

​ 改造ffmpeg/doc/examples/remuxing.c&#xff0c;支持将输入流转封装为hls协议对应的github地址&#xff1a;GitHub - yagerfgcs/FFmpeg at examples/remuxing_support_hls修改点&#xff1a;增加设置hls头 // example:https://www.ffmpeg.org/ffmpeg-all.html#hls-2 // f…

c语言数据结构---三叉树

#include<stdio.h> #include<stdlib.h> #include<stack> using namespace std; typedef struct node{struct node*lchild;struct node*rchild;struct node*parent;char data; }Node,*Bit;Bit creat(){//先序创建 char b; int t; scanf("%c",&…

(个人实测保熟)记录Tecnomatix Process Simulate 16.1.2官方安装包及授权许可配置教程(Win10环境)

Tecnomatix Process Simulate 16是一款由西门子公司推出的一款工艺仿真解决方案,是虚拟制造仿真领域的领先解决方案,可帮助您数字化制造以及将创新思想和原材料转变为变革性产品的过程。在网上找了一些盗版的安装包&#xff0c;就很离谱。直接提示本"无法打开此安装程序包…

c语言数据结构---十字链表

#include<stdio.h> #include<stdlib.h> typedef struct node{//十字链表 输入三元组返回矩阵 int row,col,val;struct node *down,*right; }JD,*J; typedef struct {J *rhead,*chead;int mu,nu,tu;//行列非0元 }CS; CS creat(CS M){int m,n,t;;int k,j,e;JD *p,*q…

Elasticsearch和sboot整合

Elasticsearch是一个开源的、高性能的分布式搜索引擎&#xff0c;可以实现全文搜索、分析和存储等功能。Spring Boot是一个开源的Java框架&#xff0c;可以用于快速开发和部署应用程序。 将Elasticsearch和Spring Boot整合可以使得我们更加方便地使用Elasticsearch进行搜索和数…

Ajax实现步骤和原理

Ajax实现步骤和原理 一、什么是Ajax? Ajax 异步 JavaScript 和XML。   Ajax是一种用于创建快速动态网页的技术。   通过在后台与服务器进行少量数据交换&#xff0c;Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下&#xff0c;对网页的某部分进…

Java并发面试题知识点总结(下篇)

大家好&#xff0c;我是栗筝i&#xff0c;从 2022 年 10 月份开始&#xff0c;我便开始致力于对 Java 技术栈进行全面而细致的梳理。这一过程&#xff0c;不仅是对我个人学习历程的回顾和总结&#xff0c;更是希望能够为各位提供一份参考。因此得到了很多读者的正面反馈。 而在…

Day01_《MySQL索引与性能优化》摘要

一、资料 视频&#xff1a;《尚硅谷MySQL数据库高级&#xff0c;mysql优化&#xff0c;数据库优化》—周阳 其他博主的完整笔记&#xff1a;MySQL 我的笔记&#xff1a;我的笔记只总结了视频p14-p46部分&#xff0c;因为只有这部分是讲解了MySQL的索引与explain语句分析优化…

【ruoyi】微服务关闭登录验证码

登录本地的nacos服务&#xff0c;修改&#xff1a;配置管理-配置列表-ruoyi-gateway-dev.yml 将验证码的enabled设置成false&#xff0c;即可

530.二叉搜索树的最小绝对

原题链接&#xff1a;530.二叉搜索树的最小绝对差 思路&#xff1a; 因为是二叉搜索树&#xff0c;根据他的特性&#xff0c;直接递归中序遍历获取所有元素&#xff0c;成为一个有序数组 然后在有序数值内进行双指针递归遍历即可获得最小差值 因为是有序数组&#xff0c;所以其…

深度学习之基于YoloV5的目标检测和双目测距系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 双目测距系统利用两个相机的图像来计算目标到相机的距离。通过对左右相机图像进行立体匹配&#xff0c;可以获得目标…

Ubuntu安装Qt出现bash: ./qt-unified-linux-x64-4.6.1-online.run: 权限不够的问题解决

在Ubuntu安装qt&#xff0c;在官网下载了linux的版本下载后为类似qt-unified-linux-version.run的文件&#xff08;比如我这里是qt-unified-linux-x64-4.6.1-online.run&#xff09;的文件&#xff0c;直接在终端运行【这里的version注意改为文件的原有的名字】&#xff1a; .…