多传感器融合定位六-惯性导航原理及误差分析

news2024/11/16 7:49:10

多传感器融合定位六-惯性导航原理及误差分析

  • 1. 惯性技术简介
    • 1.1 惯性技术发展历史
    • 1.2 惯性器件
      • 1.2.1 机械陀螺(几乎没人用了)
      • 1.2.2 激光陀螺
      • 1.2.3 光纤陀螺
      • 1.2.4 MEMS陀螺(常用)
      • 1.2.5 加速度计
  • 2. 惯性器件误差分析
    • 2.1 信号误差组成
    • 2.2 Allan方差分析
  • 3. 惯性器件内参标定
    • 3.1 惯性器件内参误差模型
      • 3.1.1 零偏
      • 3.1.2 刻度系数误差
      • 3.1.3 安装误差
      • 3.1.4 惯性器件内参误差模型
    • 3.2 惯性器件内参误差标定
      • 3.2.1 标定方法概述
      • 3.2.2 基于转台的标定
        • 3.2.2.1 加速度计标定
          • 3.2.2.1.1 解析法:
          • 3.2.2.1.2 最小二乘法:
        • 3.2.2.2 陀螺仪标定:
          • 3.2.2.2.1 方法思想
          • 3.2.2.2.2 解析法
      • 3.2.3 不需要转台的标定
        • 3.2.3.1 整体思路
        • 3.2.3.2 内参模型
        • 3.2.3.3 优化模型--估计加速度计内参
        • 3.2.3.4 优化模型--估计陀螺仪内参
        • 3.2.3.4 标定方法比较
  • 4. 惯性器件温补
    • 4.1 物理模型辨识
    • 4.2 参数辨识
    • 4.3 其他改进方法
    • 4.4 关于温补的讨论

前面几章讲了怎样用单个传感器把图建出来然后再做定位。接下来就进入了融合的环节,即怎样把图和定位建的更好。

1. 惯性技术简介

1.1 惯性技术发展历史

1687年,伟大的英国科学家牛顿提出力学三大定律,为惯性导航技术奠定了理论基础。
在这里插入图片描述自20世纪60年代起,出现了挠性陀螺仪和动力谐调陀螺仪,同时平台式惯导系统发展迅速,并大量装备各种飞机、舰船、导弹和航天飞行器。
在这里插入图片描述

1.2 惯性器件

1.2.1 机械陀螺(几乎没人用了)

  • 定轴性: 当陀螺转子以高速旋转时,在没有任何外力矩作用在陀螺仪上时,陀螺仪的自转轴在惯性空间中的指向保持稳定不变,即指向一个固定的方向;同时反抗任何改变转子轴向的力量。
  • 进动性: 当转子高速旋转时,若外力矩作用于外环轴,陀螺仪将绕内环轴转动;若外力矩作用于内环轴,陀螺仪将绕外环轴转动。其转动角速度方向与外力矩作用方向互相垂直。
    在这里插入图片描述

1.2.2 激光陀螺

Sagnac效应由法国物理学家 Sagnac 于 1913 年发现,其原理是干涉仪相对惯性空间静止时,光路 A 和 B 的光程相等,当有角速度时,光程不相等,便会产生干涉。
在这里插入图片描述

1.2.3 光纤陀螺

同样基于Sagnac效应,传播介质改成了光纤。(相比激光陀螺,成本低很多)
在这里插入图片描述

1.2.4 MEMS陀螺(常用)

科里奥利力(Coriolis force,简称为科氏力),是对旋转体系(比如自传的地球,旋转的圆盘等)中进行直线运动的质点由于惯性相对于旋转体系产生的直线运动的偏移的一种描述。
如左图所示有一个圆盘,圆盘静止的时候,有一个球从里往外去运动的时候,画出来肯定是一条直线。现在假设这个圆盘它旋转了一下,旋转以后这个球画出来的就不是一条直线了,它是一个弧线。也就是说一个东西往前运动,旋转它的载体时,这个运动的东西会受到一个力,往另一个方向走。
右图有一个摆动器械,它在一个微机械的器械内来回摆动,在静态不动的时候,它就沿直线运动。但是当它有旋转的时候,因为科里奥利力的存在,它的摆动就会画弧线而不是走直线了。这时,支撑着这个摆的四个构件,就会检测到一个扭动的力,这个扭动力量的大小,就反应了当前角速度的大小。通过这种方式来测量角速度。
核心就是惯性-------即保持原来的运动状态不变。进动性----不想改变转轴,我要反抗这个旋转。
在这里插入图片描述

1.2.5 加速度计

当运载体相对惯性空间做加速度运动时,仪表壳体也随之做相对运动,质量块保持惯性,朝着与加速度方向相反的方向产生位移(拉伸或压缩弹簧)。当位移量达到一定值时,弹簧给出的力使质量块以同一加速度相对惯性空间做加速运动,加速度的大小与方向影响质量块相对位移的方向及拉伸量。(在静止不动时,这个东西自己是不摆的,但在给它一个加速度的时候,由于惯性的作用,会产生一个反向的摆动。通过检测摆动的大小,就知道了加速度的大小。
在这里插入图片描述

2. 惯性器件误差分析

2.1 信号误差组成

  1. 量化噪声
    一切量化操作所固有的噪声,是数字传感器必然出现的噪声;
    产生原因:通过AD采集把连续时间信号采集成离散信号的过程中,精度会损失,精度损失的大小和AD转换的步长有关,步长越小,量化噪声越小。(AD:模拟信号,这个比较好理解,连续信号采集成离散信号,比较采集是有频率的)
    在这里插入图片描述

  2. 角度随机游走
    宽带角速率白噪声:陀螺输出角速率是含噪声的,该噪声中的白噪声成分;
    产生原因:计算姿态的本质是对角速率做积分,这必然会对噪声也做了积分。白噪声的积分并不是白噪声,而是一个马尔可夫过程,即当前时刻的误差是在上一时刻误差的基础上累加一个随机白噪声得到的。
    角度误差中所含的马尔可夫性质的误差,称为角度随机游走。(测量出的角速率是有一个白噪声的,因为我们要利用角速率解算,积分成角度,这时的白噪声也包含在积分里面了,那不就算的不准了)

  3. 角速率随机游走
    与角度随机游走类似,角速率误差中所含的马尔可夫性质的误差,称为角速率随机游走。而这个马尔可夫性质的误差是由宽带角加速率白噪声累积的结果。(角加速率里面也是有一个白噪声的)

  4. 零偏不稳定性噪声
    零偏:即常说的bias,一般不是一个固定参数,而是在一定范围内缓慢随机飘移。
    零偏不稳定性:零偏随时间缓慢变化,其变化值无法预估,需要假定一个概率区间描述它有多大的可能性落在这个区间内。时间越长,区间越大
    (这玩意好像不是很好描述,但是在工程上,我们需要给它一个近似的模型)

  5. 速率斜坡
    该误差是趋势性误差,而不是随机误差。
    随机误差,是指你无法用确定性模型去拟合并消除它,最多只能用概率模型去描述它,这样得到的预测结果也是概率性质的。
    趋势性误差,是可以直接拟合消除的,在陀螺里产生这种误差最常见的原因是温度引起零位变化,可以通过温补来消除。
    (一个角速度,在不考虑之前说的那些随机误差的影响下,那误差就是一个稳定的白噪声。现在它随着时间变化,会有一个趋势性,也就是误差也在飘,但是这个误差是趋势性的。理论上讲这个误差不能叫完全的随机误差,因为趋势性很多时候是有些确定性的模型来影响的,比如说温补------随着温度的升高,误差会变大,这个模型是可以拟合的。但是在随机信号分析的时候,温补的误差是可以分析出来的。)

  6. 零偏重复性
    多次启动时,零偏不相等,因此会有一个重复性误差。在实际使用中,需要每次上电都重新估计一次。(意思是,不同次启动时,零偏会发生多大的变化。与前面的所有误差是有区别的,前五项一次充电采集很多信号就可以分析出来。而零偏重复性就需要反复上电断电上电断电,统计一下每次上电断电,这个bias发生了多少变化)
    Allan方差分析时,不包含对零偏重复性的分析。(即Allan方差只能分析前五项,不能分析第六项)

2.2 Allan方差分析

随机信号Allan方差的物理意义及应用在本质上来源于它与功率谱之间的关系。
功率谱(功率谱密度函数):单位频带内的信号功率,它表示信号功率随着频率的变化情况,即信号功率在频域的分布状况。

假设把随机过程 X α X_\alpha Xα 的功率谱表示为: PSD ⁡ [ X α ] = h α f α \operatorname{PSD}\left[X_\alpha\right]=h_\alpha f^\alpha PSD[Xα]=hαfα 其中 f α f^\alpha fα 是频率, h n h_n hn 为相应的系数。(频率和功率之间的关系)

若多个随机过程相互独立,则其满足线性相加性质,即 X = ∑ X a X=\sum X_a X=Xa 此时,其功率谱也同样可以线性相加 PSD ⁡ [ X ] = ∑ PSD ⁡ [ X α ] \operatorname{PSD}[X]=\sum \operatorname{PSD}\left[X_\alpha\right] PSD[X]=PSD[Xα](多个功率谱是可以叠加的)

  • Allan方差分析方法的基本思路
    在惯性器件随机误差分析中,以上提到的5种误差相互独立,且 α \alpha α 值不同,因此若绘制“时间间隔-方差双对数曲线”(时间间隔是频率的倒数,方差是功率谱的积分),则得到的曲线斜率必不相同。

    根据曲线斜率识别出各项误差,并计算出对应的误差强度。

(公式知道就行了,这时信号分析的东西,不属于融合范畴)
量化噪声 Q Q Q 满足下式
log ⁡ 10 σ Q N ( τ ) = log ⁡ 10 ( 3 Q ) − log ⁡ 10 τ \log _{10} \sigma_{Q N}(\tau)=\log _{10}(\sqrt{3} Q)-\log _{10} \tau log10σQN(τ)=log10(3 Q)log10τ角度随机游走 N N N 满足下式
log ⁡ 10 σ A R W ( τ ) = log ⁡ 10 N − 1 / 2 ∗ log ⁡ 10 τ \log _{10} \sigma_{A R W}(\tau)=\log _{10} N-1 / 2 * \log _{10} \tau log10σARW(τ)=log10N1/2log10τ角速率游走 K K K 满足下式
log ⁡ 10 σ R R W ( τ ) = log ⁡ 10 ( K / 3 ) + 1 / 2 ∗ log ⁡ 10 τ \log _{10} \sigma_{R R W}(\tau)=\log _{10}(K / \sqrt{3})+1 / 2 * \log _{10} \tau log10σRRW(τ)=log10(K/3 )+1/2log10τ零偏不稳定性 B B B 满足下式
log ⁡ 10 σ B I ( τ ) = log ⁡ 10 ( 2 B / 3 ) \log _{10} \sigma_{B I}(\tau)=\log _{10}(2 B / 3) log10σBI(τ)=log10(2B/3)速率斜坡 R R R 满足下式
log ⁡ 10 σ R R ( τ ) = log ⁡ 10 ( R / 2 ) + log ⁡ 10 τ \log _{10} \sigma_{R R}(\tau)=\log _{10}(R / \sqrt{2})+\log _{10} \tau log10σRR(τ)=log10(R/2 )+log10τ以上公式中, τ \tau τ 为时间间隔

根据以上公式分析,可知曲线的形状如下:
在这里插入图片描述
即各随机噪声对应的斜率分别为 -1, -1/2, 0, 1/2, 1(即上面的 − log ⁡ 10 τ -\log _{10} \tau log10τ − 1 / 2 ∗ log ⁡ 10 τ -1 / 2 *\log _{10} \tau 1/2log10τ),找到曲线后,方程就可以求出来了(也就是𝑄、𝑁、𝐾、𝐵、𝑅)

同时,令 τ = 1 \tau=1 τ=1 ,则 log ⁡ 10 ( τ ) = 0 \log _{10}(\tau)=0 log10(τ)=0
其含义是求曲线与 τ = 1 \tau=1 τ=1 的交点,此时有:

噪声类型 τ \tau τ 的交点
量化噪声 3 Q \sqrt{3}Q 3 Q
角度随机游走 N N N
角速率游走 K / 3 K/\sqrt{3} K/3
零偏不稳定性 2 B / 3 2B/3 2B/3
速率斜坡 R / 2 R/\sqrt{2} R/2

此时可容易地求出 𝑄、𝑁、𝐾、𝐵、𝑅

现在来说说怎么使用这些误差:
开源代码:https://github.com/gaowenliang/imu_utils

  • P1:五个误差全用么?
    不全用,这五个误差更多的是,再生产器件时,知道以哪几个误差为主,来改进生产。但假如是用户,我现在的主要目标是做融合,那么再实际过程中五项误差不全是需要关心的了。
    主要关心的有以下两个:

    用法(以陀螺仪为例):

    1. 角度随机游走,在融合时作为陀螺仪的噪声使用。(有时也以零偏不稳定性当做噪声,因为很多手册里面都不提供角度随机游走,而零偏不稳定性是必须会给的),对应的是卡尔曼滤波里面的 Q Q Q
    2. 角速度随机游走,作为陀螺仪微分项中的噪声。(详细内容在介绍融合时介绍)

注意:
1)其他误差项,仅起到了解器件精度水平的作用;
2)实际融合时,Allan分析的结果,只是作为初值使用,需要在此基础上调参。
在这里插入图片描述

单个IMU三个陀螺仪的Allan方差曲线

零偏重复性:之前的几个误差都被计算出来了,但是可以看到所有的模型都在估计一个bias。那么为什么需要估计一个bias出来而不能提前估计出来一直用呢?就是因为零偏重复性的问题,它在每一次上电的时候都不一样。假如我的器件,零偏不稳定性是5°/h,那么它的零偏重复性可能达到500°/h,也就是说bias上面有一个每小时500°的值,而这个值是事先测不出来的,这么大的误差,必然是需要在线估计的。(这概念挺重要)

3. 惯性器件内参标定

内参标定是惯性器件里面非常核心的一个环节,虽然大家在实践过程中可能不需要做这个东西,因为买一个IMU模块,大多数情况下都给标好了。但是这方面的技能还是需要掌握的。

3.1 惯性器件内参误差模型

3.1.1 零偏

误差解释: 陀螺仪或加速度计输出中的常值偏移,即常说的 bias。(注意陀螺仪和加速度计都有一个)
误差特性: 由于零偏存在不稳定性,因此零偏并不是固定不变的。
解决办法: 实际使用中,只能一段时间内近似为常值。
(在多数情况下可以认为是一个常值,在前面说误差分析时,说零偏有随机游走、每次上电还有零偏重复性这类的问题。但是不管怎样,在一次通电的很短的时间内,可以将它认为是一个常值来用,这样可以简化模型,不把模型搞得太复杂。)

加速度计的零偏表示为:
b a = [ b a x b a y b a z ] b_a=\left[\begin{array}{lll} b_{a x} & b_{a y} & b_{a z} \end{array}\right] ba=[baxbaybaz]陀螺仪的零偏表示为:
b g = [ b g x b g y b g z ] b_g=\left[\begin{array}{lll} b_{g x} & b_{g y} & b_{g z} \end{array}\right] bg=[bgxbgybgz]

3.1.2 刻度系数误差

误差解释: 器件的输出往往为脉冲值或模数转换得到的值,需要乘以一个刻度系数才能转换成角速度或加速度值,若该系数不准,便存在刻度系数误差。
误差特性: 不一定是常值,它会随着输入大小的不同而发生变化,这个就是标度因数的非线性。
解决办法: 如果非线性程度比较大,则需要在标定之前先拟合该非线性曲线,并补偿成线性再去做标定。
(假设有 x , y , z x, y, z x,y,z三个轴,绕 z z z轴旋转 10°/s,在实际测量的时候,会发现 z z z输出的角速度不是 10°/s,可能是 9.9°/s,也就是说上面有一个 0.1°/s 的误差。这时在旋转的时候,要在上面乘上一个比例因子,这个比例因子就是 K = 10 9.9 K=\frac{10}{9.9} K=9.910,最后补偿过的角速度才是真实的角速度结果。每个轴上都有一个这样比例系数的补偿因子,所以建成的是一个对角矩阵的形式,与 [ x y z ] \left[\begin{array}{lll} x \\ y \\ z \end{array}\right] xyz 相乘。)

关于拟合:输入 10°/s 时得到一个角速度输出,20°/s、30°/s 时都能得到一个角速度输出值。但是比例因子不一定是相同的,在 10°/s 时有一个数,在 20°/s 时可能就是另外一个数了。这里有两种方法处理:

  1. 10°/s、20°/s、30°/s 均得到一个点,拟合出一个二次曲线。这样是可以的,但是很多时候标定不是单参数的标定-----它与bias和安装误差都是耦合在一起的,也就是说拟合的结果里面有其他误差的耦合系数。
  2. 另一种办法是,仍然是拟合,但是拟合的时候只拟合它的趋势项,比如说它二次曲线的弯曲程度是什么样子的。相当于是补偿这个二次曲线后,变成一个一次。这个一次曲线和真实的一次曲线可能有一个偏移量的差异,这个没有关系。只有它变成了一次曲线,相当于是仍然变成了一个常值。也就是说,我们把二次曲线,先补偿一下变成一次曲线,然后我们再去标一次曲线的平移量就可以了。(工程中是比较复杂的,但实际中,经常就当一次曲线搞就行了。绝大多数情况还是一个线性的,如果出现非线性,再按照这个方法来)

加速度计的标度因数,表示如下
K a = [ K a x K a y K a z ] K_a=\left[\begin{array}{lll} K_{a x} & & \\ & K_{a y} & \\ & & K_{a z} \end{array}\right] Ka= KaxKayKaz 陀螺仪的标度因数,表示为
K g = [ K g x K g y K g z ] K_g=\left[\begin{array}{lll} K_{g x} & & \\ & K_{g y} & \\ & & K_{g z} \end{array}\right] Kg= KgxKgyKgz

3.1.3 安装误差

误差解释: 如下图所示,b坐标系是正交的imu坐标系,g坐标系的三个轴是分别对应三个陀螺仪。由于加工工艺原因,陀螺仪的三个轴并不正交,而且和b坐标系的轴不重合,二者之间的偏差即为安装误差
误差特性: 实际系统中,由于硬件结构受温度影响,安装误差也会随温度发生变化。
解决办法: 在不同温度下做标定,补偿温度变化量。
在这里插入图片描述(比方说绕 z z z轴旋转,理论上其他轴是没有角速度输出的。但是有一个问题,如果 x x x z z z轴不是正交的,比如正交是 90 ° 90° 90°,而它俩是 89.9 ° 89.9° 89.9°,会造成一个现象,即绕 z z z旋转的时候, x x x上就有了角速度输出了,因为它上面因为不完全垂直而有分量了。)

因为 z z z x x x y y y方向上有误差;因为 y y y x x x z z z方向上有误差;因为 x x x y y y z z z方向上有误差,总共有六个误差量。
陀螺仪的安装误差,表示如下
S g = [ 0 S g x y S g x z S g y x 0 S g y z S g z x S g z y 0 ] S_g=\left[\begin{array}{ccc} 0 & S_{g x y} & S_{g x z} \\ S_{g y x} & 0 & S_{g y z} \\ S_{g z x} & S_{g z y} & 0 \end{array}\right] Sg= 0SgyxSgzxSgxy0SgzySgxzSgyz0 加速度计的安装误差,表示为
S a = [ 0 S a x y S a x z S a y x 0 S a y z S a z x S a z y 0 ] S_a=\left[\begin{array}{ccc} 0 & S_{a x y} & S_{a x z} \\ S_{a y x} & 0 & S_{a y z} \\ S_{a z x} & S_{a z y} & 0 \end{array}\right] Sa= 0SayxSazxSaxy0SazySaxzSayz0

3.1.4 惯性器件内参误差模型

利用下面公式(以陀螺仪为例),可以把各项误差综合在一起:
W = K g ( I + S g ) ω + b g ≈ ( K g + S g ) ω + b g W=K_g\left(I+S_g\right) \omega+b_g \approx\left(K_g+S_g\right) \omega+b_g W=Kg(I+Sg)ω+bg(Kg+Sg)ω+bg ω \omega ω为角速度输入,即想求得的理想角速度,真实输入; W W W是角速度的输出,也就是直接在器件上面测量出来的结果。可以看到 K g K_g Kg S g S_g Sg 乘在一起了,耦合在一起就很难解耦,这个模型标定的时候就很难标定了,所以要做一个化简,就得到了最右边的样子。核心原因在于 K g = I + Δ K g K_g=I+\Delta K_g Kg=I+ΔKg,而 Δ K g \Delta K_g ΔKg 是一个很小的量, ( I + Δ K g ) ( I + S g ) = I + Δ K g + S g + Δ K g S g (I+\Delta K_g)(I+S_g)=I+\Delta K_g+S_g+\Delta K_gS_g (I+ΔKg)(I+Sg)=I+ΔKg+Sg+ΔKgSg,因为 S g S_g Sg也是个小量, Δ K g S g \Delta K_gS_g ΔKgSg 可以被忽略。

陀螺仪的输出可以展开为:
[ W x W y W z ] = [ K g x S g x y S g x z S g y x K g y S g y z S g z x S g z y K g z ] [ ω x ω y ω z ] + [ b g x b g y b g z ] \left[\begin{array}{l} W_x \\ W_y \\ W_z \end{array}\right]=\left[\begin{array}{lll} K_{g x} & S_{g x y} & S_{g x z} \\ S_{g y x} & K_{g y} & S_{g y z} \\ S_{g z x} & S_{g z y} & K_{g z} \end{array}\right]\left[\begin{array}{c} \omega_x \\ \omega_y \\ \omega_z \end{array}\right]+\left[\begin{array}{l} b_{g x} \\ b_{g y} \\ b_{g z} \end{array}\right] WxWyWz = KgxSgyxSgzxSgxyKgySgzySgxzSgyzKgz ωxωyωz + bgxbgybgz 加速度计的输出可以展开为:
[ A x A y A z ] = [ K a x S a x y S a x z S a y x K a y S a y z S a z x S a z y K a z ] [ a x a y a z ] + [ b a x b a y b g z ] \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=\left[\begin{array}{lll} K_{a x} & S_{a x y} & S_{a x z} \\ S_{a y x} & K_{a y} & S_{a y z} \\ S_{a z x} & S_{a z y} & K_{a z} \end{array}\right]\left[\begin{array}{l} a_x \\ a_y \\ a_z \end{array}\right]+\left[\begin{array}{l} b_{a x} \\ b_{a y} \\ b_{g z} \end{array}\right] AxAyAz = KaxSayxSazxSaxyKaySazySaxzSayzKaz axayaz + baxbaybgz

3.2 惯性器件内参误差标定

3.2.1 标定方法概述

标定的本质是参数辨识,参数包括陀螺仪和加速度计各自的零偏、刻度系数误差、安装误差。
辨识方法包括:
1)解析法或最小二乘
2)迭代优化方法
3)滤波(Kalman等)
常见标定方法与上面辨识方法的对应关系为:

  1. 基于转台的标定: 解析法、最小二乘;
  2. 不需要转台的标定: 梯度下降迭代优化;
  3. 系统级标定:kalman滤波(该方法只适用于高精度惯导,而MEMS本身就属于精度不高的一类,这里不做讲解)。

3.2.2 基于转台的标定

在IMU的误差模型中,陀螺仪和加速度计的误差方程是互相独立的,可分别标定。

以加速度计为例,其误差模型方程为:
[ A x A y A z ] = [ K a x S a x y S a x z S a y x K a y S a y z S a z x S a z y K a z ] [ a x a y a z ] + [ b a x b a y b a z ] \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=\left[\begin{array}{lll} K_{a x} & S_{a x y} & S_{a x z} \\ S_{a y x} & K_{a y} & S_{a y z} \\ S_{a z x} & S_{a z y} & K_{a z} \end{array}\right]\left[\begin{array}{l} a_x \\ a_y \\ a_z \end{array}\right]+\left[\begin{array}{l} b_{a x} \\ b_{a y} \\ b_{a z} \end{array}\right] AxAyAz = KaxSayxSazxSaxyKaySazySaxzSayzKaz axayaz + baxbaybaz 左边 A x , A y , A z A_x, A_y, A_z Ax,Ay,Az是测量出来的,肯定是已知的; a x , a y , a z a_x, a_y, a_z ax,ay,az是输入,标定时也是已知的。误差模型方程是一个包含12个未知参数的方程组,显然方程组没有唯一解。此时,通过改变输入,获得多个不同方程 (大于12个),组成的方程组便可求解参数。

以上就是分立级标定方法的思路,具体求解方法包括解析法最小二乘法

该标定方法的核心:通过旋转IMU,改变其输入构造方程组,并且每个位置对应的加速度输入和角速度输入都必须是已知的

构建方程组时,不仅要方程组数量足够,而且要能够使误差参数可解,即系数矩阵可逆。

为了满足这一点,常见的转位方案有六位置、八位置、十二位置等。

在实际使用时,通过判断系数矩阵是否满秩便可判断,理论上,只要转位方案能满足这一条件,就可以使用。
在这里插入图片描述

3.2.2.1 加速度计标定

3.2.2.1.1 解析法:

当IMU水平向上放置时,得:
{ a x = 0 a y = 0 a z = g \left\{\begin{array}{l} a_x=0 \\ a_y=0 \\ a_z=g \end{array}\right. ax=0ay=0az=g其中, g \mathrm{g} g 为重力加速度。带入加速度计误差模型,
[ A x A y A z ] = [ K a x S a x y S a x z S a y x K a y S a y z S a z x S a z y K a z ] [ a x a y a z ] + [ b a x b a y b a z ] \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=\left[\begin{array}{lll} K_{a x} & S_{a x y} & S_{a x z} \\ S_{a y x} & K_{a y} & S_{a y z} \\ S_{a z x} & S_{a z y} & K_{a z} \end{array}\right]\left[\begin{array}{l} a_x \\ a_y \\ a_z \end{array}\right]+\left[\begin{array}{l} b_{a x} \\ b_{a y} \\ b_{a z} \end{array}\right] AxAyAz = KaxSayxSazxSaxyKaySazySaxzSayzKaz axayaz + baxbaybaz 可得:
{ A x = S a x z ∗ g + b a x A y = S a y z ∗ g + b a y A z = K a z ∗ g + b a z \left\{\begin{array}{l} A_x=S_{a x z} * g+b_{a x} \\ A_y=S_{a y z} * g+b_{a y} \\ A_z=K_{a z} * g+b_{a z} \end{array}\right. Ax=Saxzg+baxAy=Sayzg+bayAz=Kazg+baz同理,当IMU水平向下放置时,得:
{ A x ′ = − S a x z ∗ g + b a x A y ′ = − S a y z ∗ g + b a y A z ′ = − K a z ∗ g + b a z \left\{\begin{array}{l} A_x'=-S_{a x z} * g+b_{a x} \\ A_y'=-S_{a y z} * g+b_{a y} \\ A_z'=-K_{a z} * g+b_{a z} \end{array}\right. Ax=Saxzg+baxAy=Sayzg+bayAz=Kazg+baz联立这两个方程组,便可解出 6 个参数。随后,再次改变 IMU放置方式,可解其他参数。
并且,由此可以看出,转台需要调平。

3.2.2.1.2 最小二乘法:

加速度计误差模型:
[ A x A y A z ] = [ K a x S a x y S a x z S a y x K a y S a y z S a z x S a z y K a z ] [ a x a y a z ] + [ b a x b a y b a z ] \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=\left[\begin{array}{lll} K_{a x} & S_{a x y} & S_{a x z} \\ S_{a y x} & K_{a y} & S_{a y z} \\ S_{a z x} & S_{a z y} & K_{a z} \end{array}\right]\left[\begin{array}{l} a_x \\ a_y \\ a_z \end{array}\right]+\left[\begin{array}{l} b_{a x} \\ b_{a y} \\ b_{a z} \end{array}\right] AxAyAz = KaxSayxSazxSaxyKaySazySaxzSayzKaz axayaz + baxbaybaz 可得到:
[ A x A y A z ] = x [ K a x K a y K a z S a x y S a x z S a y x S a y z S a z x S a z y ∇ x ∇ y ∇ z ] → y = x θ \left[\begin{array}{c} A_x \\ A_y \\ A_z \end{array}\right]=x\left[\begin{array}{c} K_{a x} \\ K_{a y} \\ K_{a z} \\ S_{a x y} \\ S_{a x z} \\ S_{a y x} \\ S_{a y z} \\ S_{a z x} \\ S_{a z y} \\ \nabla_x \\ \nabla_y \\ \nabla_z \end{array}\right] \quad \rightarrow y=x \theta AxAyAz =x KaxKayKazSaxySaxzSayxSayzSazxSazyxyz y=xθ其中:
x = [ F I 3 × 3 ] F = [ a x 0 0 a y a z 0 0 0 0 0 a y 0 0 0 a x a z 0 0 0 0 a z 0 0 0 0 a x a y ] \begin{aligned} x & =\left[\begin{array}{ll} F & I_{3 \times 3} \end{array}\right] \\ F & =\left[\begin{array}{ccccccccc} a_x & 0 & 0 & a_y & a_z & 0 & 0 & 0 & 0 \\ 0 & a_y & 0 & 0 & 0 & a_x & a_z & 0 & 0 \\ 0 & 0 & a_z & 0 & 0 & 0 & 0 & a_x & a_y \end{array}\right] \end{aligned} xF=[FI3×3]= ax000ay000azay00az000ax00az000ax00ay 转台在每个位置都可以得到一个方程: y i = x i θ y_i=x_i \theta yi=xiθ

所有位置对应的方程联立可得: Y = X θ Y=X \theta Y=

其中 Y = [ y 0 T y 1 T … y n T ] T X = [ x 0 T x 1 T … x n T ] T Y=\left[\begin{array}{llll}y_0^T & y_1^T & \ldots & y_n^T\end{array}\right]^T \quad X=\left[\begin{array}{llll}x_0^T & x_1^T & \ldots & x_n^T\end{array}\right]^T Y=[y0Ty1TynT]TX=[x0Tx1TxnT]T

经过变形,标定问题变为线性拟合问题,当第 i i i次把IMU朝不同方向放置后,便得到一个方程组。

参数拟合问题等效为最小二乘问题,其解为: θ = ( X T X ) − 1 X T Y \theta=\left(X^T X\right)^{-1} X^T Y θ=(XTX)1XTY(最小二乘通解),由此便得到标定参数。

3.2.2.2 陀螺仪标定:

3.2.2.2.1 方法思想

转台一般角速度不如角度精度高,因此不是直接以角速度作为真值,而是以积分得到的角度作为真值

3.2.2.2.2 解析法

求解刻度系数和安装误差:
首先,计算输出与输入的关系(以绕IMU的 z z z逆时针旋转为例)
[ W x W y W z ] = [ K g x S g x y S g x z S g y x K g y S g y z S g z x S g z y K g z ] [ 0 0 ω ] + [ b g x b g y b g z ] \left[\begin{array}{l} W_x \\ W_y \\ W_z \end{array}\right]=\left[\begin{array}{lll} K_{g x} & S_{g x y} & S_{g x z} \\ S_{g y x} & K_{g y} & S_{g y z} \\ S_{g z x} & S_{g z y} & K_{g z} \end{array}\right]\left[\begin{array}{c} 0 \\ 0 \\ \omega \end{array}\right]+\left[\begin{array}{c} b_{g x} \\ b_{g y} \\ b_{g z} \end{array}\right] WxWyWz = KgxSgyxSgzxSgxyKgySgzySgxzSgyzKgz 00ω + bgxbgybgz 展开可得
{ W x = S g x z ∗ ω + b g x W y = S g y z ∗ ω + b g y W z = K g z ∗ ω + b g z \left\{\begin{array}{l} W_x=S_{g x z} * \omega+b_{g x} \\ W_y=S_{g y z} * \omega+b_{g y} \\ W_z=K_{g z} * \omega+b_{g z} \end{array}\right. Wx=Sgxzω+bgxWy=Sgyzω+bgyWz=Kgzω+bgz对等式两侧进行积分
{ θ W x = S g x z ∗ θ ω + θ b g x θ W y = S g y z ∗ θ ω + θ b g y θ W z = K g z ∗ θ ω + θ b g z \left\{\begin{array}{l} \theta_{W_x}=S_{g x z} * \theta_\omega+\theta_{b_{g x}} \\ \theta_{W_y}=S_{g y z} * \theta_\omega+\theta_{b_{g y}} \\ \theta_{W_z}=K_{g z} * \theta_\omega+\theta_{b_{g z}} \end{array}\right. θWx=Sgxzθω+θbgxθWy=Sgyzθω+θbgyθWz=Kgzθω+θbgz绕IMU的z轴顺时针旋转时,同样方法可得,
{ θ W x ′ = − S g x z ∗ θ ω + θ b g x θ W y ′ = − S g y z ∗ θ ω + θ b g y θ W z ′ = − K g z ∗ θ ω + θ b g z \left\{\begin{array}{l} \theta_{W_x}'=-S_{g x z} * \theta_\omega+\theta_{b_{g x}} \\ \theta_{W_y}'=-S_{g y z} * \theta_\omega+\theta_{b_{g y}} \\ \theta_{W_z}'=-K_{g z} * \theta_\omega+\theta_{b_{g z}} \end{array}\right. θWx=Sgxzθω+θbgxθWy=Sgyzθω+θbgyθWz=Kgzθω+θbgz
正逆时针的两式可以求解出 S g x z S g y z K q z S_{g x z} \quad S_{g y z} \quad K_{q z} SgxzSgyzKqz
此处不通过两式求解零偏,因为旋转所用时间偏短,零偏造成的角度输出太小。

求解零偏:
当转台静止时,可以简单认为陀螺仪输出只有零偏,即(单纯放置着静止不动即可):
[ W x W y W z ] = [ b g x b g y b g z ] \left[\begin{array}{l} W_x \\ W_y \\ W_z \end{array}\right]=\left[\begin{array}{l} b_{g x} \\ b_{g y} \\ b_{g z} \end{array}\right] WxWyWz = bgxbgybgz 此时采集一段时间内的数据,取平均值,即可得到零偏
需要强调的是:
a. 有时标定需要考虑地球自转角速度的影响,此时模型比较复杂,可自行参考《惯性仪器测试与数据分析》第 10 章。
b. mems 陀螺仪的零偏重复性极差,因此每次上电都要在线估计零偏,因此离线标定时,零偏标与不标区别不大

3.2.3 不需要转台的标定

使用转台的方法很好理解、精度也很高,但是问题在于转台很贵,有很多时候是没有转台的。这个时候输入是没有了的----没有很明确的三个轴的输入,但是还是有一个值可以用的,就是重力加速度。也就是说三个加速度计测量出的矢量的和的模,它的值必须和重力加速度值相等,这时候的加速度计才被认为是没有误差的,否则认为是有误差的。

3.2.3.1 整体思路

加速度输入(重力加速度)是已知的,已知值与测量值的差异作为残差,通过优化,估计内参。
参考资料:
论文:A Robust and Easy to Implement Method for IMU Calibration without External Equipments

在这里插入图片描述

3.2.3.2 内参模型

定义坐标系时,若令IMU坐标系的 X b X_b Xb 轴与加速度计的 X a X_a Xa 轴重合,且 X b O Y b X_b O Y_b XbOYb X a O Y a X_a O Y_a XaOYa 共面(如下图)(这里说的IMU坐标系是标准的坐标系意思?),则加速度计的安装误差只剩下三个参数。(按照定义方式不同,有些模型中会表示成上三角矩阵)
新的安装误差矩阵为 S a = [ 0 0 0 S a y x 0 0 S a z x S a z y 0 ] S_a=\left[\begin{array}{ccc}0 & 0 & 0 \\ S_{a y x} & 0 & 0 \\ S_{a z x} & S_{a z y} & 0\end{array}\right] Sa= 0SayxSazx00Sazy000
此时,加速度计内参的待估参数为
θ a c c = [ S a y x , S a z x , S a z y , K a x , K a y , K a z , b g x , b g y , b g z ] \boldsymbol{\theta}^{a c c}=\left[S_{a y x}, S_{a z x}, S_{a z y}, K_{a x}, K_{a y}, K_{a z}, b_{g x}, b_{g y}, b_{g z}\right] θacc=[Sayx,Sazx,Sazy,Kax,Kay,Kaz,bgx,bgy,bgz]陀螺仪的误差模型保持不变,但此处并没有估计陀螺仪零偏,因此陀螺仪内参的待估参数为(因为坐标系定的是和IMU坐标系一致,不能说再定义一个陀螺仪的)
θ g y r o = [ S g x y , S g x z , S g y x , S g y z , S g z x , S g z y , K g x , K g y , K g z ] \boldsymbol{\theta}^{g y r o}=\left[S_{g x y}, S_{g x z}, S_{g y x}, S_{g y z}, S_{g z x}, S_{g z y}, K_{g x}, K_{g y}, K_{g z}\right] θgyro=[Sgxy,Sgxz,Sgyx,Sgyz,Sgzx,Sgzy,Kgx,Kgy,Kgz]
在这里插入图片描述

3.2.3.3 优化模型–估计加速度计内参

按照内参定义,加速度计输出与输入的关系为
A = K a ( I + S a ) a + b a A=K_a\left(I+S_a\right) a+b_a A=Ka(I+Sa)a+ba即由测量值可以得到真实值为
a = ( I + S a ) − 1 K a − 1 ( A − b a ) a=\left(I+S_a\right)^{-1} K_a^{-1}\left(A-b_a\right) a=(I+Sa)1Ka1(Aba)在求解时,逆运算的存在使模型变得复杂,因此使用以 下方式进行简化
K a ′ = [ K a x ′ K a y ′ K a z ′ ] = K a − 1 = [ 1 K a x 1 K a y 1 K a z ] K_a^{\prime}=\left[\begin{array}{lll} K_{a x}^{\prime} & & \\ & K_{a y}^{\prime} & \\ & & K_{a z}^{\prime} \end{array}\right]=K_a^{-1}=\left[\begin{array}{ccc} \frac{1}{K_{a x}} & & \\ & \frac{1}{K_{a y}} & \\ & & \frac{1}{K_{a z}} \end{array}\right] Ka= KaxKayKaz =Ka1= Kax1Kay1Kaz1 ( I + S a ) − 1 ≈ I − S a a = ( I S a ) K a ′ ( Λ b a ) \begin{aligned} & \left(I+S_a\right)^{-1} \approx I-S_a \\ & a=\left(\begin{array}{ll} I & \left.S_a\right) \end{array} K_a^{\prime}\left(\begin{array}{ll} \Lambda & b_a \end{array}\right)\right. \end{aligned} (I+Sa)1ISaa=(ISa)Ka(Λba)当imu静止时,输入只有重力加速度。
把加速度计矢量定义为 g = [ 0 0 g 0 ] T \boldsymbol{g}=\left[\begin{array}{lll}0 & 0 & g_0\end{array}\right]^T g=[00g0]T ,其中 g 0 g_0 g0 为 当地重力大小。
当内参完全准确时,有 ∥ g ∥ 2 = ∥ a ∥ 2 \|\boldsymbol{g}\|^2=\|\boldsymbol{a}\|^2 g2=a2

当内参存在误差时,可写出残差函数为:
f ( θ a c c ) = ∥ g ∥ 2 − ∥ a ∥ 2 f\left(\theta^{a c c}\right)=\|\boldsymbol{g}\|^2-\|\boldsymbol{a}\|^2 f(θacc)=g2a2根据高斯牛顿的流程,有此残差函数便可以推导雅可比 (推导留作作业),通过优化求解出内参。

需要注意的是,一个静止位置的测量不能完全求解出参 数,需要按不同的姿态,在多个位置静止(如右图黑色曲 线所包含的时间段),所有位置的测量放在同一个优化任 务中,才能求解全部参数。
在这里插入图片描述

3.2.3.4 优化模型–估计陀螺仪内参

陀螺仪内参估计在加速度计标定完成后进行,因此认为此时加速度计无误差。
u a , k \boldsymbol{u}_{a, k} ua,k 代表在第 k \mathrm{k} k 个静止位置时,三个加速度计的输出构成的矢量在IMU坐标系下的表示,即
u a , k = R b k w g \boldsymbol{u}_{a, k}=R_{b_k w} \boldsymbol{g} ua,k=Rbkwg其中 R b k w R_{b_k w} Rbkw 表示从世界坐标系(w系,和水平面平行且不随IMU旋转而旋转的坐标系)到第 k \mathrm{k} k 个位置对应的IMU坐标系的转换矩阵。
注意: 并不需要已知 R b k w R_{b_k w} Rbkw ,因为 u a , k \boldsymbol{u}_{a, k} ua,k 是直接测量的。

在第 k + 1 k+1 k+1 个位置时,同样有
u a , k + 1 = R b k + 1 w g \boldsymbol{u}_{a, k+1}=R_{b_{k+1} w} \boldsymbol{g} ua,k+1=Rbk+1wg从第 k \mathrm{k} k 个位置,到第 k + 1 \mathrm{k}+1 k+1 个位置,可以根据陀螺仪测量计算出两个位置之间的相对旋转 R b k + 1 b k R_{b_{k+1}} b_k Rbk+1bk,根据该旋转可以算出一个第 k + 1 \mathrm{k}+1 k+1 位置加速度计输出矢量的推测值:
u g , k + 1 = R b k + 1 b k u a , k \boldsymbol{u}_{g, k+1}=R_{b_{k+1} b_k} \boldsymbol{u}_{a, k} ug,k+1=Rbk+1bkua,k可见,推测值的误差就体现了陀螺仪的误差,因此可以根据推测值与观测值构建残差函数:
f ( θ gyro  ) = u a , k + 1 − u g , k + 1 f\left(\theta^{\text {gyro }}\right)=\boldsymbol{u}_{a, k+1}-\boldsymbol{u}_{g, k+1} f(θgyro )=ua,k+1ug,k+1雅可比推导需要用到IMU解算知识,本章不作要求。

3.2.3.4 标定方法比较

  1. 基于转台的标定精度较高,但标定成本高;
  2. 不依赖转台的标定精度差,但成本低、效率高,对一般MEMS的标定需求已经足够。

4. 惯性器件温补

现在来说一说惯性器件的温补, 温补的影响很大,但是很多时候不需要自己做,因为厂商给做好了,买了厂商的东西,输出结果自然是给补偿好的。

温补的本质是系统辨识,既要找出合适的物理模型,又要识别物理模型的参数。(说白了就是不同温度能得到不同的bias,问题就在于,怎样得到这个bias)

理论上讲,对于MEMS,静止情况下,陀螺的输出本身就是bias,这里不做区分。只是说在高精度的情况下,静止情况下的输出还包含别的因素,所以它不等于bias,但是对于低精度来讲无所谓,可以当成bias来看待。

4.1 物理模型辨识

和温度相关的变量为 T T T Δ T \Delta T ΔT ,分别代表温度、变温率(表示温度变化的快慢)(注意,不仅和温度点相关,还跟温度变化的速度是相关的),温补要做的是识别出器件 bias(B)和这两者的关系:
B = f ( T , Δ T ) B=f(T, \Delta T) B=f(T,ΔT) f f f的具体表达多数是靠尝试。

常见的模型为
B = a ∗ T 3 + b ∗ T 2 + c ∗ T + e ∗ Δ T 2 + f ∗ Δ T + g ∗ T ∗ Δ T + h \begin{aligned} B= & a * T^3+b * T^2+c * T+ \\ & e * \Delta T^2+f * \Delta T+ \\ & g * T * \Delta T+h \end{aligned} B=aT3+bT2+cT+eΔT2+fΔT+gTΔT+h实际使用时,可根据情况在此基础上做减法,去掉一些高阶项。(曲线是二次三次四次都有可能)

4.2 参数辨识

在选定的物理模型基础上做最小二乘曲线拟合,与分立级标定时所用最小二乘原理相同。

4.3 其他改进方法

  1. 分段拟合
    bias随温度变化曲线多是不规则曲线,无法用一个完整的曲线模型做拟合。
    常见的方法是按照温度把曲线分成多个区间,每个区间单独拟合一个模型

  2. 基于神经网络
    温补最大的问题是物理模型未知,而神经网络不需要已知物理模型,理论上比较合理。
    但是实际使用中,由于很多处理器只是简单的嵌入式板子,运算能力有限,而且多项式方法已经能解决大部分问题,因此这种方法在实际使用中用的不多。(文献有,实际用的不多)

4.4 关于温补的讨论

  1. 温补在器件误差补偿中是最重要的,但也是最“没有技术含量”的
  2. 温变的本质是和器件整体温度场相关,而不只是和局部温度点相关,但温度传感器只能测量后者。
  3. 永远无法找到完全准确的温补模型,但是却能知道什么是够用的。自动控制领域有一句名言 “All models are wrong, but some are useful“。

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

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

相关文章

十六、状态管理——Vuex(1)

本章概要 简单的状态管理安装 Vuex基本用法 Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式。他采用集中式存储来管理应用程序中所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 Vuex 也被集成到了 Vue 官方调试工具 vue-devtools 中…

跨年夜,想请你看一场烟花秀!

代码分享地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Cu_lKYfAlMBDttSzhVXPuQ 提取码&#xff1a;2ocd 代码效果展示&#xff1a; 源代码分享如下&#xff1a; <!--* Author: Xiao Wang* Date: 2022-12-30 14:26* Description: --> <!DOCTYPE html …

剑指 Offer 20. 表示数值的字符串

题目 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。 数值&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 若干空格 一个 小数 或者 整数 &#xff08;可选&#xff09;一个 ‘e’ 或 ‘E’ &#xff0c;后面跟着一个…

canopen11-sdo-2b写入命令

源码 1、SDO介绍 就对象而言,主机要访问节点词典的数据,因此主机是client客户端,节点是server服务器。上传与下载是对服务器来说的(这点和常识有点不太一样)。因此,上传指的是服务器发送数据给客户端,下载是客户端给服务器数据。 我们这里要用主机访问节点服务器2000位…

Go 语言从入门到实战

《Go 语言从入门到实战》 的学习笔记&#xff0c;欢迎阅读斧正。感觉该专栏整体来说对有些后端编程经验的来说比无后端编程经验的人更友好。 数据类型 运算符 算数运算符 比较运算符 用 比较数组 相同维数切含有相同个数元素的数组才可以比较&#xff0c;每个元素都相同的才…

四旋翼无人机学习第18节--cadence的bom表、网表导出,PCB板创建,层叠设置

文章目录1 bom表导出2 网表导出3 PCB板创建4 PCB板文件重要设置5 层叠设置1 bom表导出 1、选择DSN文件&#xff0c;之后依次点击Tools&#xff0c;Bill of Materials。 2、当然&#xff0c;也可以点击图标进行bom导出。 3、下图标出的地方可以自行修改&#xff0c;最后点击O…

设计师必须知道的 5个设计灵感网站

设计没灵感&#xff0c;一定要上这5个网站&#xff0c;设计师每天必逛&#xff0c;建议收藏&#xff01; 设计素材免费下载&#xff1a; https://www.sucai999.com/?vNTYwNDUx 国内灵感网 1、设计之窗 http://www.333cn.com/ 设计之窗是一个设计师分享作品及备案的网站&…

【Ctfer训练计划】——命令执行的解题技巧(持续更新中)

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

什么是软考?软考有什么作用?

一、软考是什么&#xff1f; 1.软考介绍 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试是由国家人力资源和社会保障部、工业和信息化部领导的国家级考试&#xff0c;其目的是&#xff0c;科学、公正地对全国计算机与软件专业技术人员进行职业资格、专业技术…

保姆教程系列三、Redis高可用(Cluster集群模式)

系列文章目录 &#xff01;&#xff01;&#xff01;是的没错&#xff0c;胖友们&#xff0c;保姆教程系列又更新了&#xff01;&#xff01;&#xff01; 保姆教程系列一、Redis部署 so easy 保姆教程系列二、Redis高可用&#xff08;主从同步哨兵模式&#xff09; 保姆教程系…

java开发的医院体检预约系统

简介 体检项目预约网站&#xff0c;普通用户注册登录可以网上预约体检项目&#xff0c;经过后台人员审核后可以去体检。用户还可以记录自己的身体指标下载体检报个&#xff0c;查看医嘱等。医院后台可以进行权限管理&#xff0c;实现多角色管理后台的其他业务等&#xff0c;实…

前端—化繁为简

化繁为简 HTML5要的就是简单、避免不必要的复杂性。HTML5的口号是“简单至上&#xff0c;尽可能简化”。因此&#xff0c;HTML5做了以下改进&#xff1a; 以浏览器原生能力替代复杂的JavaScript代码。 新的简化的DOCTYPE。 新的简化的字符集声明。 简单而强大的HTML5API。 我…

【 shell 编程 】第2篇 判断

判断 文章目录判断一、条件测试二、流程控制1.单分支结构2.双分支结构3.多分支结构4.嵌套结构三、匹配模式一、条件测试 格式&#xff1a; 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] 格式3&#xff1a;[[ 条件表达式 ]] 注意&#xff1a;[] 中的条件…

电气器件系列三十五:开关电源选型实例

开关模式电源&#xff08;Switch Mode Power Supply&#xff0c;简称SMPS&#xff09;&#xff0c;又称交换式电源、开关变换器&#xff0c;是一种高频化电能转换装置&#xff0c;是电源供应器的一种。其功能是将一个位准的电压&#xff0c;透过不同形式的架构转换为用户端所需…

c++11 标准模板(STL)(std::deque)(三)

定义于头文件 <deque> std::deque 赋值给容器 std::deque<T,Allocator>::operator deque& operator( const deque& other ); (1) deque& operator( deque&& other ); (2)(C11 起) (C17 前) deque& operator( deque&& other ) no…

Docker的基本使用

文章目录1.初识Docker1.1 为什么会有docker出现&#xff1f;1.2 docker的理念1.3 Docker和虚拟机的区别1.4 Docker的基本组成(docker的三要素)1.4.1 镜像1.4.2 容器1.4.3 仓库1.5 Docker的架构2.Docker的安装3.常用命令3.1 帮助启动类命令3.2 镜像命令3.3 容器命令1.初识Docker…

使用Lua Script实现不同的限流算法

文章目录Redis中执行Lua ScriptRedis中Debug Lua Script固定窗口代码关键部分解释验证滑动窗口令牌桶漏桶参考资料Redis中执行Lua Script redis-cli --eval /tmp/script.lua mykey somekey , arg1 arg2特别注意&#xff1a;key和arg之间是空格逗号空格&#xff0c;否则脚本调用…

API网关在API安全性中的作用

从单一应用程序切换到微服务时&#xff0c;客户端的行为不能与客户端具有该应用程序的一个入口点的行为相同。简单来说就是微服务上的某一部分功能与单独实现该应用程序时存在不同。 目前在使用微服务时&#xff0c;客户端必须处理微服务体系结构带来的所有复杂性&#xff0c;…

一个月裂变50多万人?商城引流模式玩法——分享购

随着经济进入转型的关键期&#xff0c;零售行业的营销模式正在发生转变&#xff0c;以消费者为中心驱动营销数字化成为当下企业的共识。 新零售时代数字化的核心是数据能力的全面升级&#xff0c;企业通过数字化协同能力整合线上线下全域消费场景&#xff0c;赋能消费者深度洞…

JDK16及其以后的版本Maven打包成可运行的程序的方法

Java应用的分发一直是一个比较麻烦的问题。这是因为Java应用的运行需要虚拟机的支持&#xff0c;仅有Java应用打包的JAR文件是不够的&#xff0c;目标机器还需要安装版本匹配的JDK或JRE。随着云原生和容器化技术的流行&#xff0c;Java应用可以选择以容器镜像的形式来打包和分发…