当前位置: 首页 > news >正文

卡尔曼滤波学习笔记

Kalman Filter

  • Ⅰ、直观理解
    • 1、描述
    • 2、例子
  • Ⅱ、适用范围
    • 1、线性系统
    • 2、噪声服从高斯分布
  • Ⅲ、相关公式
    • 1、原始公式
    • 2、预测公式
    • 3、更新公式
    • 4、初值赋予
    • 5、总结
  • Ⅳ、应用例子
  • Ⅴ、代码实现
  • Ⅵ、公式理解
    • 1、协方差矩阵的理解
      • 1.1 协方差
      • 1.2 协方差矩阵
      • 1.3、相关数学公式
    • 2、状态方程的理解

Ⅰ、直观理解

1、描述

从直观上来看,卡尔曼滤波是把两个存在误差的结果融合在一起,得到一个从数学上可以得到证明的最优估计值
而这两个存在误差的结果,一个是从理论上推导出来的,称之为先验估计值;一个是用传感器测量出来的,称之为测量值。它们之所以存在误差,是因为前者的理论模型存在现实干扰,后者的测量仪器存在不可避免的精度问题。
图片的具体解释比较复杂,此处可以且看且过。

图片解释:以上三个颜色都符合正太分布,其中橙色部分的期望是先验估计值,绿色部分的期望是测量值,蓝色部分的期望便是融合绿色和橙色之后的最优估计值。
Q1:为什么它们都呈现出正太分布呢?
图中橙色部分和绿色部分之所以呈现出正太分布,是因为前者存在过程噪声,后者存在测量噪声的缘故。而这两个噪声被假定为符合正太分布。至于蓝色部分,解释起来就复杂许多,下文再说了。
Q2:噪声从哪里来?
过程噪声正式前文提到的:“理论模型存在现实干扰” 中的现实干扰。测量噪声则是:“测量仪器存在不可避免的精度问题” 中的精度误差。也就是说,以上这个图是在理论之上考虑了现实干扰和仪器误差的图。
Q3:为什么噪声会符合正太分布?
事实上,噪声不可能完美的符合正太分布,只是自然界大多数噪声,甚至许多统计学的例子,都可以被近似为正太分布。比如世界上人的身高、智商、体重等的分布情况,大体上是符合正太分布的。
Q4:过程噪声和测量噪声的方差如何知道?
这是通过工程实际,试出来的,并非理论推导。想PID算法一样,P、I、D这三个量得试出来。这些无法确定的量,被称为超参数

2、例子

前提:现已知小车当下的位置、速度、加速,并有一卫星实施监测小车的位置。
目标:求小车下一时刻的位置。
分析:从由于存在阻力,人为因素等原因。我们所知道的小车当前位置、速度、加速度存在一定程度的误差。所以利用这些条件求得的小车下一时刻的位置存在偏差。而由于卫星精度的问题,仅仅靠卫星也无法得到小车下一时刻的准确位置。
解决:卡尔曼认为,可以取长补短,综合考虑理论上得出的结果和卫星的测量结果,得出最优解。比如理论上得出的小车下一时刻的位置是10m,卫星得出的是11m。那我们大致可以推断真实的小车位置大概介于10m和11m之间,至于最优解到底因该是多少m,这是卡尔曼滤波要解决的问题,。

Ⅱ、适用范围

1、线性系统

线性系统要求系统同时满足齐次性可加性
齐次性:输入扩大N倍,其输出也扩大N倍。

齐次性的数学表达: 如果: y 1 ( t ) = M { f 1 ( t ) } f 2 ( t ) = a f 1 ( t ) 则: y 2 ( t ) = M { f 2 ( t ) } = a y 1 ( t ) \begin{array}{l} 如果:\\{y_1}(t) = M\{ {f_1}(t)\} \\ {f_2}(t) = a{f_1}(t)\\ 则:\\{y_2}(t) = M\{ {f_2}(t)\} = a{y_1}(t) \end{array} 如果:y1(t)=M{f1(t)}f2(t)=af1(t)则:y2(t)=M{f2(t)}=ay1(t)

可加性:N个输入,输出等于N个输入独立的输出之和。

可加性的数学表达: 如果 : y 1 ( t ) = M { f 1 ( t ) } y 2 ( t ) = M { f 2 ( t ) } 且 : f 3 ( t ) = f 1 ( t ) + f 2 ( t ) y 3 ( t ) = M { f 3 ( t ) } 则 : y 3 ( t ) = y 1 ( t ) + y 2 ( t ) \begin{array}{l} 如果:\\ {y_1}\left( t \right) = M\{ {f_1}\left( t \right)\} \\ {y_2}\left( t \right) = M\{ {f_2}\left( t \right)\} \\ 且:\\ {f_3}\left( t \right) = {f_1}\left( t \right) + {f_2}\left( t \right)\\ {y_3}\left( t \right) = M\left\{ {{f_3}\left( t \right)} \right\}\\ 则:\\ {y_3}\left( t \right) = {y_1}\left( t \right) + {y_2}\left( t \right) \end{array} 如果:y1(t)=M{f1(t)}y2(t)=M{f2(t)}:f3(t)=f1(t)+f2(t)y3(t)=M{f3(t)}:y3(t)=y1(t)+y2(t)

简而言之:线性系统满足”和的响应等于响应的和“。

2、噪声服从高斯分布

高斯分布又称正态分布,而前文提到自然界中许多噪声都可以近似为正态分布,所以在一般情况下这个条件是满足的。

一维正态分布表达式: P ( a ) − N ( u , ∂ 2 ) P(a) -N\left( {u,{\partial ^2}} \right) P(a)N(u,2)

二维正态分布表达式: P ( a ) − N ( u 1 , u 2 , ∂ 1 2 , ∂ 2 2 , ρ ) P(a)-N\left( {{u_1},{u_2},{\partial _1}^2,{\partial _2}^2,\rho } \right) P(a)N(u1,u2,12,22,ρ)

二维正态分布的另一种表达式: P ( A ) − N ( U , P ) P\left( A \right)-N\left( {U,P} \right) P(A)N(U,P)
其中A,U分别是一个2x1的系数矩阵,而P则是一个协方差矩阵。如图
在这里插入图片描述

Ⅲ、相关公式

1、原始公式

i : x k = A x k − 1 + B u k − 1 + w k − 1 i:{x_k} = A{x_{k - 1}} + B{u_{k - 1}} + {w_{k - 1}} i:xk=Axk1+Buk1+wk1
i i : z k = H x k − v k ii:{z_k} =H{x_k} - {v_k} ii:zk=Hxkvk

即:

i:本次实际值 = 上一次的实际值 + 控制量 + 过程扰动
ii:本次测量值 = 实际值 - 测量误差

如果不加上噪声,那将推导出存在误差的计算值(先验估计值)和测量值。

i : x ^ k − = A x ^ k − 1 + B u k − 1 i: {\hat x_k}^- = A{{\hat x}_{k - 1}} + B{u_{k - 1}} i:x^k=Ax^k1+Buk1
i i : x ^ k m e a = H − z k ii: {{\hat x}_{kmea}} =H^-{z_k} ii:x^kmea=Hzk

即:

i:本次计算值 = 上一此最优估计值+ 控制量
ii:本次测量值 = 转化关系 x 本次传感器测量值

x k {x_k} xk是实际的目标状态的值, x ^ k − {{\hat x}_k}^ - x^k表示先验估计值, x ^ k m e a {{\hat x}_{kmea}} x^kmea表示测量值。A表示状态转移矩阵, x ^ k − 1 {{\hat x}_{k - 1}} x^k1表示上一次的最优估计值,B表示控制矩阵, u k − 1 {u_{k - 1}} uk1表示控制变量(即输入), w k {w_{k}} wk表示过程噪音, z k {z_k} zk表示传感器的测量值,H表示 z k {z_k} zk x ^ m e a {{\hat x}_{mea}} x^mea之间的关系矩阵, v k {v_{k}} vk表示测量噪音。
注:之所以需要H,是因为传感器测量出来的值不一定就是目标值,比如某项任务中,传感器测量出来的是开尔文,但我们需要的是摄氏度之类的。

2、预测公式

( 1 ) x ^ k − = A x ^ k − 1 + B u k − 1 (1){{\hat x}_k}^ - = A{{\hat x}_{k - 1}} + B{u_{k - 1}} 1x^k=Ax^k1+Buk1

( 2 ) P k − = A P k − 1 A T + Q (2){P_k}^ - =A{P_{k - 1}}{A^T} + Q 2Pk=APk1AT+Q

(2)中 P k − {P_k}^ - Pk表示( x k − x ^ k − {x_k} - {{\hat x}_k}^ - xkx^k)的协方差矩阵, P k {P_{k }} Pk表示( x k − x ^ k {x_k} - {{\hat x}_k} xkx^k)的协方差矩阵,Q表示噪音 w k {w_{k}} wk的协方差矩阵。

3、更新公式

( 3 ) K k = P k − H T H P k − H T + R (3){K_k} = \frac{{{P_k}^ - {H^T}}}{{H{P_k}^ - {H^T} + R}} 3Kk=HPkHT+RPkHT

( 4 ) x ^ k = x ^ k − + K k ( Z k − H x ^ k − ) (4){{\hat x}_k} = {{\hat x}_k}^ - + {K_k}\left( {{Z_k} - H{{\hat x}_k}^ - } \right) 4x^k=x^k+Kk(ZkHx^k)

( 5 ) P k = ( I − K k H ) P k − (5){P_k} = \left( {I - {K_k}H} \right){P_k}^ - 5Pk=(IKkH)Pk
其中的 K k ∈ [ 0 , H − ] {K_k} \in \left[ {0,{H^ - }} \right] Kk[0,H]{K_k}是卡尔曼增益系数, I I I为单位矩阵,R表示测量噪声 v k {v_{k}} vk的协方差矩阵, x ^ k {{\hat x}_k} x^k表示最优估计值。

4、初值赋予

一般只要 P 0 {P_0} P0不等与零即可,不妨设 x 0 {x_0} x0= 0, P 0 {P_0} P0 = 1

5、总结

(4)公式也正是卡尔曼滤波的核心公式,由 { x ^ k = x ^ k − + G ( x ^ k m e a − x ^ k − ) K k = G H , G ∈ ( 0 , 1 ) } \left\{ \begin{array}{l} {{\hat x}_k} = {{\hat x}_k}^ - + G\left( {{{\hat x}_{kmea}} - {{\hat x}_k}^ - } \right)\\ {K_k} = GH,G \in \left( {0,1} \right) \end{array} \right\} {x^k=x^k+G(x^kmeax^k)Kk=GH,G(0,1)}变化而来。
在(4)中,当 K k {K_k} Kk = H − {H^ - } H时, x ^ k {{\hat x}_k} x^k = x ^ k − {{\hat x}_k}^ - x^k,表示完全相信计算值(即预估值)。同理,当 K k {K_k} Kk = 0 时, x ^ k {{\hat x}_k} x^k = H − z k H^-{z_k} Hzk = x ^ m e a {{\hat x}_{mea}} x^mea,表示完全相信测量值。而卡尔曼滤波的核心便是寻找合适的 K k {K_k} Kk使得最优估计值 x ^ k {{\hat x}_k} x^k,它可以在计算值和测量值之间”取长补短“,使 x ^ k {{\hat x}_k} x^k最接近于真实值。
至于 K k {K_k} Kk如何求,公式(3)已经给出了。而通过公式(2)、(3)也b不难知道由于A、H、 P k {P_k} Pk 是已知的,所以 K k {K_k} Kk取值最终是多少取决于与超参数Q和R。在上文Ⅰ章节,已经对Q和R做出过解释了。

另外:本小结唐突的给出了卡尔曼滤波的五个公式,其原因是这五个公式背后的推导过于复杂,而且如果不具备相关的数学知识以及控制理论的知识,理解起来也十分费劲,所以不妨先囫囵吞枣的接受,希望接下来的应用举例能有更加直观的理解。

Ⅳ、应用例子

1、前提条件:
条件一、小车在二维平面上以匀加速直线运动(系统满足线性)。
条件二、有一个卫星可以观测小车的位置,每 Δ t {\Delta t} Δt观测一次。
2、目的
每隔 Δ t {\Delta t} Δt时间,求一次小车的位置。
3、状态方程和测量方程的构建
在这里插入图片描述

其中p表示位置,v表示速度,a是加速度常数,然后下面的 p s a t e l l i t e _ k {p_{satellite\_k}} psatellite_k是卫星所测量得的数据。其他数据对照本文Ⅲ给出的公式。
以上这两个等式已经给出了A,B,H, u k 、 z k 、 x ^ k − {u_k}、{z_k}、{{\hat x}_k}^ - ukzkx^k等参数,接下来只需找到合适的Q和R,便可以带入本文Ⅲ的公式进行运算,完成卡尔曼滤波。

Ⅴ、代码实现

Ⅵ、公式理解

1、协方差矩阵的理解

1.1 协方差

协方差表示两个变量之间的关联程度,数学符号为cov()。在此不妨设有两个数a和b。当a增大时,b也增大。a减小时,b也减小。那么可以认为a和b正相关,其协方差cov(a,b)>0。反之a增大,b减小,那么a和b负相关,cov(a,b)<0。而若a的变化与b的变化毫无关系,则cov(a,b)=0。

协方差的相关性质:
1、cov(a,b)=E{(a-E(a))(b-E(b))}    //这是协方差的原始公式
2、cov(a,b)=E(ab)-E(a)E(b)
3、cov(a+C,b+D)=cov(a,b)   //其中C和D为常数,下同
4、cov(Ca,Db)=CDcov(a,b)
5、cov(a,b)=cov(b,a)

1.2 协方差矩阵

协方差矩阵用于描述多个变量之间的关程度,以及自身的方差。不妨设有三个变量a,b,c,其协方差矩阵为P。P的对角线分别是a,b,c三个变量的方差。其他则存放则三个变量之间的协方差。根据上文的协方差性质5可知,该矩阵为对称矩阵。
在这里插入图片描述
如果a,b,c三个变量没用任何关系,那么P矩阵便可以这样表达。
在这里插入图片描述
而再如果a,b,c的期望都为零,那么P矩阵可以进一步这样写。
在这里插入图片描述
值得注意的是,从宏观的角度来看,协方差矩阵只是在描述一个向量的内部各个变量自身的离散程度和各个变量之间的联系。

1.3、相关数学公式

1、方差公式: D ( a ) = E ( a 2 ) − E 2 ( a ) D\left( a \right) = E\left( {{a^2}} \right) - {E^2}\left( a \right) D(a)=E(a2)E2(a)
2、矩阵性质:
k ( a b c d e f g h y ) = ( k a k b k c k d k e k f k g k h k y ) k \left( \begin{matrix} a&b&c\\ d&e&f\\ g&h&y \end{matrix} \right)=\left( \begin{matrix} ka&kb&kc\\ kd&ke&kf\\ kg&kh&ky \end{matrix} \right) k adgbehcfy = kakdkgkbkekhkckfky
备注:之所以写这么一大堆,是因为卡尔曼滤波中的噪声通常是多个的,而这几个噪声一般被视为期望为零相互独立正态分布。所以以上的知识在推导卡尔曼滤波的数学公式中至关重要,但仅从应用的角度来说,其实不了解也罢

2、状态方程的理解

状态方程和输出方程是描述一个系统的两个极为重要的方程,下面以连续型系统为例,讲解一下这两个方程。
请添加图片描述
Y ( s ) = 1 s ( F ( s ) − 2 Y ( S ) ) ⇒ Y ( s ) / F ( s ) = H ( s ) = 1 s + 2 Y\left( s \right) = \frac{1}{s}\left( {F\left( s \right) - 2Y\left( S \right)} \right) \Rightarrow Y\left( s \right)/F\left( s \right) = H\left( s \right) = \frac{1}{{s + 2}} Y(s)=s1(F(s)2Y(S))Y(s)/F(s)=H(s)=s+21
由于现实生活中时间是向前推进的,所以节点1和节点2之间采用的是积分算子 1 s \frac{1}{s} s1,因此可以知道节点2的导数正是节点1,故可以设节点1为 x ′ {x'} x,节点2为 x {x} x
如果在节点1建立方程便得到: x ′ = − 2 x + f ( t ) {x'} = - 2x + f\left( t \right) x=2x+f(t),这个方程正式这个系统的状态方程。
而输出方程则是: y ( t ) = x + 0 f ( t ) y\left( t \right) = x + 0f\left( t \right) y(t)=x+0f(t)
由此可以引出连续系统状态方程和输出方程的通用表达式:

x ′ ( t ) = A x ( t ) + B f ( t ) y ( t ) = C x ( t ) + D f ( t ) \begin{array}{l} x'\left( t \right) = Ax\left( t \right) + Bf\left( t \right)\\ y\left( t \right) = Cx\left( t \right) + Df\left( t \right) \end{array} x(t)=Ax(t)+Bf(t)y(t)=Cx(t)+Df(t)
推广到离散系统:
x k + 1 = A x k + B f k y k = C x k + D f k \begin{array}{l} {x_{k + 1}} = A{x_k} + B{f_k}\\ {y_k} = C{x_k} + D{f_k} \end{array} xk+1=Axk+Bfkyk=Cxk+Dfk

相关文章:

卡尔曼滤波学习笔记

Kalman Filter Ⅰ、直观理解1、描述2、例子 Ⅱ、适用范围1、线性系统2、噪声服从高斯分布 Ⅲ、相关公式1、原始公式2、预测公式3、更新公式4、初值赋予5、总结 Ⅳ、应用例子Ⅴ、代码实现Ⅵ、公式理解1、协方差矩阵的理解1.1 协方差1.2 协方差矩阵1.3、相关数学公式 2、状态方程…...

NLP预训练模型超大规模探索

总共从四方面来进行比较。 第一个方面&#xff0c;高层次方法&#xff08;自监督的预训练方法&#xff09;对比&#xff0c;总共三种方式。 语言模型式&#xff0c;就是 GPT-2 那种方式&#xff0c;从左到右预测&#xff1b;BERT-style 式&#xff0c;就是像 BERT 一样将一部…...

OpenCV实战系列总目录(更新中)

1、openCV实战-系列教程1&#xff1a;基本操作&#xff08;环境配置/图像读取打印/视频读取打印/图像裁剪/颜色通道提取/边界填充/数值计算&#xff09;、源码解读 openCV实战-系列教程1&#xff1a;基本操作&#xff08;环境配置/图像读取打印/视频读取打印/图像裁剪/颜色通道…...

《华为认证》6to4自动隧道

实验需求&#xff1a; 在NE1和NE3之间使用tunnel 口创建6to4自动隧道&#xff0c;实现PC1和PC2互访。 步骤1:配置ipv4地址&#xff0c;如图所示&#xff1a; 步骤2&#xff1a;配置NE1和NE3的ipv4路由&#xff0c;是两端的ipv4网络能够互访 R1: ip route-static 0.0.0.0 0…...

Java课题笔记~Element UI

Element&#xff1a;是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&#xff0c;用于快速构建网页。 Element 提供了很多组件&#xff08;组成网页的部件&#xff09;供我们使用。例如 超链接、按钮、图片、表格等等~ 如下图左边的是我们编写页面看到的按钮&#…...

[论文笔记]ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE

引言 这是论文ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE的阅读笔记。本篇论文提出了通过Pre-LN的方式可以省掉Warm-up环节,并且可以加快Transformer的训练速度。 通常训练Transformer需要一个仔细设计的学习率warm-up(预热)阶段:在训练开始阶段学习率需要设…...

h5逻辑_调用手机拨号功能

有时点击页面某个按钮&#xff0c;希望能掉起手机拨号页&#xff0c;实现步骤如下&#xff1a; [1] 在index.html中添加如下代码<meta name"format-detection" content"telephoneyes" />[2] 点击按钮调用函数callPhone (phoneNumber) {window.locat…...

字节一面:post为什么会发送两次请求?

前言 最近博主在字节面试中遇到这样一个面试题&#xff0c;这个问题也是前端面试的高频问题&#xff0c;因为在前端开发的日常开发中我们总是会与post请求打交道&#xff0c;一个小小的post请求也是牵扯到很多知识点的&#xff0c;博主在这给大家细细道来。 &#x1f680; 作者…...

ROS2 学习(五)接口,动作

接口 通信双方统一规定好接口。比如图像 img&#xff0c;控制运动的线速度和角速度…… 我们也不用了解具体实现&#xff0c;基本就是了解接口会去用就行。 $ ros2 interface list # 展示所有 interfaces $ ros2 interface show ... # 显示具体一个 interface $ ros2 package…...

Vue学习之Vue组件的核心概念

组件是什么 vue组件就是一个个独立的小型的ui模块&#xff0c;整个大型的系统就是由一个个小型的UI模块拼接而成的 vue组件就是vue实例&#xff0c;通过new Vue函数来创建的一个vue实例&#xff0c;不同的组件只不过是options的不同&#xff0c;我们基本百分之90的开发工作都…...

Web自动化测试-Selenium语法入门到精通

前言 说到自动化测试&#xff0c;就不得不提大名鼎鼎的Selenium。Selenium 是如今最常用的自动化测试工具之一&#xff0c;支持快速开发自动化测试框架&#xff0c;且支持在多种浏览器上执行测试。 Selenium学习难度小&#xff0c;开发周期短。对测试人员来说&#xff0c;如果…...

封装axios及简单应用举例

第一步&#xff1a;具体封装工具&#xff1a; 在项目根目录下创建utils目录&#xff0c;然后在其中创建文件http.js&#xff1a; // 二次封装axios import axios from axios// 全局配置 // 根据环境变量区分接口默认地址&#xff08;前缀&#xff09; switch (process.env.NO…...

Django(3)-创建第一个数据模型-ORM映射

数据库配置 根目录下settings.py 。这是个包含了 Django 项目设置的 Python 模块。 通常&#xff0c;这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库&#xff0c;或者只是想尝试下 Django&#xff0c;这是最简单的选择。Python 内置 SQLite&#xff0c;所以你无…...

C++ vector

前言&#xff1a; vector的部分源码&#xff1a; &#xff08;做过删除&#xff0c;留下关键信息&#xff09; vector的使用 构造函数&#xff1a; 1 无参构造 vector<int> v1; 2 构造并初始化n个val vector<int> v2(5,1);3 拷贝构造 vector<int> v3…...

Spring+redis集成redis缓存

1、引入maven依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.springframework.data</groupId><art…...

聊聊springboot的启动事件

序 本文主要研究一下springboot的启动事件 SpringApplicationEvent org/springframework/boot/context/event/SpringApplicationEvent.java public abstract class SpringApplicationEvent extends ApplicationEvent {private final String[] args;public SpringApplicatio…...

jmeter HTTP请求默认值

首先&#xff0c;打开JMeter并创建一个新的测试计划。 右键单击测试计划&#xff0c;选择"添加" > “配置元件” > “HTTP请求默认值”。 在HTTP请求默认值中&#xff0c;您可以设置全局的HTTP请求属性&#xff0c;例如&#xff1a; 服务器地址&#xff1a…...

CSS选择器-CSS3属性

CSS选择器-CSS3属性 持续更新… 1、CSS3的概念和优势 css3概念:是css的升级版本,新增加了一些模块 css3优点:完全向后兼容,可使用新的选择器和属性,能实现新的设计效果CSS3是CSS技术的升级版本&#xff0c;CSS3语言开发是朝着模块化发展的。以前的规范作为一个模块实在是太庞…...

线性代数的学习和整理8:行列式相关

目录 1 从2元一次方程组求解说起 1.1 直接用方程组消元法求解 1.2 有没有其他方法呢&#xff1f;有&#xff1a;比如2阶行列式方法 1.3 3阶行列式 2 行列式的定义 2.1 矩阵里的方阵 2.2 行列式定义&#xff1a;返回值为标量的一个函数 2.3 行列式的计算公式 2.4 克拉…...

java+springboot+mysql农业园区管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的农业园区管理系统&#xff0c;系统包含超级管理员、管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;用户管理&#xff1b;土地管理&#xff08;租赁&#xff09;&#x…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...