扩展卡尔曼滤波EKF,与LKF区别。IMU and GPS Fusion for Inertial Navigation,MATLAB实例学习。

MATLAB:Sensor Fusion and Tracking Toolbox

实例一:IMU and GPS Fusion for Inertial Navigation

 一、IMUandGPSFusionExample.m

1、IMU的加速度计、陀螺仪的采样频率很高。Conversely,磁力计与GPS的采样频率较低。

2、数据:

        IMU:

                Orientation ,磁力计 ,用四元数表示

                AngularVelocity,陀螺仪

                Acceleration,加速度计

        GPS:

                Position

                Velocity

3、代码目标

        总体目标:将来自IMU的数据、与来自GPS的数据,通过EKF算法融合新的Position、Orientation。

        具体步骤:

        (1)读入真实的数据。

       (2)利用imu、gps模型(噪声参数自己设置),仿真得到IMU、GPS传感器的测量数据。

[accel, gyro, mag] = imu(trajAcc(fcnt,:), trajAngVel(fcnt, :), trajOrient(fcnt));

[lla, gpsvel] = gps( trajPos(fcnt,:), trajVel(fcnt,:) );

      (3)通过IMU的 acc 、gyro数据,用predict函数去预测 Position and Orientation。

predict(fusionfilt, accel, gyro);

      (4)通过GPS的position数据,用fusegps函数去做Position的更新。通过IMU的magn数据,用fusemag函数去做Orientation的更新。

fusegps(fusionfilt, lla, Rpos, gpsvel, Rvel);
fusemag(fusionfilt, mag, Rmag);

   

二、核心代码 MARGGPSFuserBase.m文件

        1、 AccelerometerNoise = [1e-4 1e-4 1e-4];加速度计噪声的协方差

        2、AccelerometerBiasNoise = [1e-4 1e-4 1e-4];是加速度计bias协方差。

                这里IMU的噪声模型参考这篇文章:IMU误差模型与校准 - 修禅 - 博客园

                ①、noise是高斯噪声

                ②、bias是随机游走噪声、bias指零偏。

        3、% Multiplicative Process Noises

                乘法噪声

        4、% Additive Process Noises

                加法噪声

        5、预测过程

% Extended Kalman Filter predict algorithm

xk:k时刻的状态
dang:角度变化
dvel:速度变化
dt:delat T

Xnext:K+1时刻的状态
P:协方差
           
xnext = obj.stateTransFcn(xk, dang, dvel, dt);  %相当于A
dfdx = obj.stateTransJacobianFcn(xk, dang, dvel, dt);   %计算一阶雅克比           
dwdx = obj.processNoiseJacobianFcn(xk, multNoise);  %计算乘法噪声的一阶雅克比
Pnext = dfdx * P * (dfdx.') + dwdx  + addProcNoise; % 代替 APA+Q
xk = xnext;
P = Pnext;

        6、更新过程

% Basic EKF correct

xk = obj.State;
h = measFcn(obj, xk);  % measFcn:观测方程 ,h是xk的观测值,相当于H*xk
innov = z - h;  % z:观测值,innov是观测误差 xest = xk + K*innov
dhdx = measJacobianFcn(obj, xk);
P = obj.StateCovariance;
[xest, P] = correctEqn(obj, xk, P, h, dhdx, z, measNoise);
obj.StateCovariance = P;
obj.State = xest;

       function [x, P] = correctEqn(obj, x, P, h, H, z, R)
            S = H*P*(H.') + R;
            W = P*(H.') / S;
            
            x = x + W*(z-h);
            P = P - W*H*P;
        end 

        7、EKF扩展卡尔曼滤波与LKF线性卡尔曼滤波区别

                ①线性卡尔曼滤波流程

                    ②、EKF体现:

                        1)在预测过程中:

                                状态估计:用obj.stateTransFcn 代替 A.*

                                计算P:用 Pnext = dfdx * P * (dfdx.') + dwdx  + addProcNoise 代替 APA+Q

                        3)在更新过程:

                                用 dhdx 代替 H。

        8、补充

                卡尔曼滤波主要是如何确定P的初值,只要不为0,对于初值不敏感(没有试过)。

                                

                                    

                                

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Matlab是一种功能强大的计算机软件,用于数学建模、数据分析和算法开发等领域。IMU(惯性测量单元)和GPS(全球定位系统)融合可以用于惯性导航的纯惯性误差计算。 惯性导航是一种使用惯性传感器(如加速度计和陀螺仪)测量物体运动状态的技术。然而,由于惯性传感器存在漂移和噪声等问题,惯性导航系统会随着时间的推移产生误差。为了纠正这些误差,可以使用GPS获得位置信息,并将IMUGPS数据进行融合。 在Matlab中,可以使用滤波算法(如卡尔滤波器)将IMUGPS数据进行融合。该算法可以根据IMUGPS提供的信息进行状态估计和误差补偿,从而改善惯性导航的准确性。 通过IMUGPS融合,可以计算出纯惯性误差。纯惯性误差是指仅由IMU测量引起的误差,不考虑GPS的补偿效果。通常,纯惯性误差可以通过比较惯性导航系统的输出和真实位置来获得。 在Matlab中,可以通过建立数学模型和使用滤波算法来估计纯惯性误差。通过对IMUGPS数据进行融合,我们可以比较融合后的位置估计与真实位置,以评估纯惯性误差的大小。 总结起来,Matlab可以用于IMUGPS融合,以计算纯惯性误差。通过滤波算法,可以将IMUGPS数据进行融合,减小惯性导航系统的误差。通过比较融合后的位置与真实位置,可以获得纯惯性误差的估计。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值