• 【VIO】第1讲 IMU 传感器


    1.旋转运动学

    速度合成公式:
    v i = v i b i + w i b i × r i + R i b v b v^i = v_{ib}^i + w_{ib}^i \times r^i +R_{ib}v^b vi=vibi+wibi×ri+Ribvb
    加速度合成公式:
    a i = w ˙ i b i × r i ⏟ 欧拉力 + w i b i × ( w i b i × r i ) ⏟ 离心力 + 2 w i b i × v i ⏟ 科氏力 + R i b a b a^i = \underbrace{\dot{w}_{ib}^i \times r^i}_{欧拉力} + \underbrace{w_{ib}^i \times (w_{ib}^i \times r^i)}_{离心力} + \underbrace{2w_{ib}^i \times v^i}_{科氏力} + R_{ib}a^b ai=欧拉力 w˙ibi×ri+离心力 wibi×(wibi×ri)+科氏力 2wibi×vi+Ribab

    2.IMU 测量模型及运动模型

    ​ 1)加速度计

    ​ 2)陀螺仪

    3.IMU 误差模型

    ​ 1)确定性误差

    ​ 零偏(Bias):IMU传感器在完全静止状态下存在的非零输出值

    ​ 尺度因子(Scale): IMU传感器自身尺度不准引起的测量误差

    ​ 不垂直度(Nonorothogonality):IMU传感器中由于各轴安装不垂直引起的误差

    ​ 2)随机误差

    ​ 高斯白噪声:均值为 0 ,方差为 σ \sigma σ 的独立高斯过程
    n ( t ) ∼ ( 0 , σ ) n(t) \sim (0, \sigma) n(t)(0,σ)
    ​ bias随机游走

    ​ 3)高斯白噪声的离散积分

    ​ 离散状态下的高斯白噪声 n ( t ) n(t) n(t) 服从如下分布:
    n d ( k ) ∼ N ( 0 , σ 2 Δ t ) n_d(k)\sim N(0, \frac{\sigma^2}{\Delta t}) nd(k)N(0,Δtσ2)
    ​ 离散方差 σ d \sigma_d σd
    σ d = σ Δ t \sigma_d = \frac{\sigma}{\sqrt{\Delta t}} σd=Δt σ
    ​ 高斯白噪声的连续时间到离散时间之间差 1 Δ t \frac{1}{\sqrt{\Delta t}} Δt 1, 其中 Δ t \Delta t Δt 为传感器的采样时间

    ​ 4)零偏的离散积分

    ​ 已知:
    b ( t ) ˙ = n ( t ) = σ b w ( t ) \dot{b(t)} = n(t) = \sigma_b w(t) b(t)˙=n(t)=σbw(t)
    ​ 所以可以得到离散状态下零偏符合分布:
    b d ( k ) ∼ N ( b d ( k − 1 ) , Δ t σ b 2 ) b_d(k) \sim N(b_d(k-1), \Delta t \sigma_b^2) bd(k)N(bd(k1),Δtσb2)

    ​ bias 随机游走的噪声方差从连续时间到连续时间之间需要乘以 Δ t \sqrt{\Delta t} Δt

    4.IMU 随机误差标定

    ​ Allan 方差标定

    5.加速度计与陀螺仪误差模型

    (1)加速度计

    ​ 导航系G为东北天, g G = ( 0 , 0 , − 9.81 ) T g^G = (0, 0, -9.81)^T gG=(0,0,9.81)T

    ​ 理论测量值:
    a m B = R B G ( a G − g G ) a_m^B = R_{BG}(a^G-g^G) amB=RBG(aGgG)
    ​ 考虑高斯白噪声,bias,以及尺度因子
    a m B = S a R B G ( a G − g G ) + n a + b a a_m^B = S_aR_{BG}(a^G-g^G) + n_a + b_a amB=SaRBG(aGgG)+na+ba
    (2)陀螺仪

    ​ 考虑高斯白噪声,bias,以及尺度因子
    w m B = S g w B + n g + b g w_m^B = S_gw^B + n_g+b_g wmB=SgwB+ng+bg

    6.VIO中的IMU模型

    忽略scale,只考虑白噪声和bias随机游走:
    w ~ b = w b + b g + n g \widetilde{w}^b = w^b+b^g+n^g w b=wb+bg+ng

    a ~ b = q b w ( a w + g w ) + b a + n a \widetilde{a}^b = q_{bw}(a^w+g^w)+b^a+n^a a b=qbw(aw+gw)+ba+na

    上标g表示陀螺仪,a表示加速度计,w表示世界坐标系,b表示IMU机体坐标系。IMU真实值 w , a w,a w,a, 测量值 w ~ \widetilde{w} w , a ~ \widetilde{a} a

    7.运动模型的离散积分

    (1)欧拉法
    a = q w b k ( a b k − b k a ) − g w a = q_{wb_k} (a^{b_k} - b^a_k ) -g^w a=qwbk(abkbka)gw

    w = w b k − b k g w=w^{b_k} - b_k^g w=wbkbkg

    (2)中值法
    a = 1 2 [ q w b k ( a b k − b k a ) − g w + q w b k + 1 ( a b k + 1 − b k a ) − g w ] a= \frac{1}{2} [q_{wb_k}(a^{b_k} - b^a_k ) - g^w + q_{wb_{k+1}}(a^{b_{k+1}} - b^a_k ) - g^w] a=21[qwbk(abkbka)gw+qwbk+1(abk+1bka)gw]

    w = 1 2 [ ( w b k − b k g ) + ( w b k + 1 − b k g ) ] w = \frac{1}{2} [(w^{b_k} - b_k^g) + (w^{b_{k+1}} - b_k^g)] w=21[(wbkbkg)+(wbk+1bkg)]

    // imu 动力学模型 欧拉积分
    
    Eigen::Vector3d acc_w = Qwb * (imupose.imu_acc) + gw;  // aw = Rwb * ( acc_body - acc_bias ) + gw
    Qwb = Qwb * dq;
    Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;
    Vw = Vw + acc_w * dt;
    
    // 中值积分
    Eigen::Vector3d acc_w = Qwb * (imupose.imu_acc) + gw;
    Qwb = Qwb * dq;
    Eigen::Vector3d acc_w1 = Qwb * (imupose.imu_acc) + gw;
    acc_w = 0.5 * (acc_w + acc_w1);
    
    Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;
    Vw = Vw + acc_w * dt;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    深度学习数据集最常见的6大问题
    Trino 387 JVM 配置详解
    【Linux】进程控制-进程程序替换
    最直观的就是通过 performance 与 lighthouse 来评判
    上周热点回顾(5.6-5.12)
    含文档+PPT+源码等]精品基于PHP实现的网上买卖管理系统[包运行成功]计算机PHP毕业设计项目源码
    谁在滋养你,谁在消耗你
    R: 阿尔法α多样性计算和箱图制作,以及差异分析
    生成指定位数强Lucas校验伪素数-Arnault1995构造法
    夏季太热 MacBook 如何监控CPU温度和风扇转速?如何判断风扇是否工作?
  • 原文地址:https://blog.csdn.net/ASUNAchan/article/details/127125333