文章目录

  • 惯性器件误差模拟与分析
    • 误差模拟与注入
    • 误差分析

惯性器件误差模拟与分析

误差模拟与注入

通常惯性器件误差包含漂移的常值零偏、一阶马尔可夫过程、随机游走、比例因数误差、不正交/安装误差角、加表的比例因数二阶非线性、加表内杆臂、陀螺与加表之间时间不同步等
imuerrset:设置IMU的各种误差参数,见下图;
imuadderr:IMU注入误差。
imuerrset代码如下:

function imuerr = imuerrset(eb, db, web, wdb, sqrtR0G, TauG, sqrtR0A, TauA, dKGii, dKAii, dKGij, dKAij, KA2, rxyz, dtGA)
% SIMU errors setting, including gyro & acc bias, noise and installation errors, etc.
%
% Prototype: imuerr = imuerrset(eb, db, web, wdb, sqrtR0G, TauG, sqrtR0A, TauA, dKGii, dKAii, dKGij, dKAij, KA2, rxyz, dtGA)
% Inputs: including information as follows
%     eb - gyro constant bias (deg/h)
%     db - acc constant bias (ug)
%     web - angular random walk (deg/sqrt(h))
%     wdb - velocity random walk (ug/sqrt(Hz))
%     sqrtR0G,TauG - gyro correlated bias, sqrtR0G in deg/h and TauG in s
%     sqrtR0A,TauA - acc correlated bias, sqrtR0A in ug and TauA in s
%     dKGii - gyro scale factor error (ppm)
%     dKAii - acc scale factor error (ppm)
%     dKGij - gyro installation error (arcsec)
%     dKAij - acc installation error (arcsec)
%     KA2 - acc quadratic coefficient (ug/g^2)
%       where,
%               |dKGii(1) dKGij(4) dKGij(5)|         |dKAii(1) 0        0       |
%         dKg = |dKGij(1) dKGii(2) dKGij(6)| , dKa = |dKAij(1) dKAii(2) 0       |
%               |dKGij(2) dKGij(3) dKGii(3)|         |dKAij(2) dKAij(3) dKAii(3)|
%     rxyz - acc inner-lever-arm, =[rx;ry;rz] (cm)
%     dtGA - time-asynchrony between gyro & acc, dtGA=Tacc_later-Tgyro_early>0 (ms)
% Output: imuerr - SIMU error structure array
%
% Example:
%     For inertial grade SIMU, typical errors are:
%       eb=0.01dph, db=50ug, web=0.001dpsh, wdb=10ugpsHz
%       scale factor error=10ppm, askew installation error=10arcsec
%       sqrtR0G=0.001dph, taug=1000s, sqrtR0A=10ug, taug=1000s
%    then call this funcion by
%       imuerr = imuerrset(0.01,100,0.001,10, 0.001,1000,10,1000, 10,10,10,10, 10, 10, 10);
%
% See also  imuadderr, gabias, avperrset, insinit, kfinit.% Copyright(c) 2009-2014, by Gongmin Yan, All rights reserved.
% Northwestern Polytechnical University, Xi An, P.R.China
% 11/09/2013, 06/03/2014, 15/02/2015, 22/08/2015, 17/08/2016, 24/07/2020
global glvif nargin==1  % for specific defined case switch ebcase 1,  imuerr = imuerrset(0.01, 100, 0.001, 10);case 2,  imuerr = imuerrset(0.01,100,0.001,10, 0.001,300,10,300, 10,10,10,10, 10, 2, 1);endreturn;endo31 = zeros(3,1); o33 = zeros(3);imuerr = struct('eb',o31, 'db',o31, 'web',o31, 'wdb',o31,...'sqg',o31, 'taug',inf(3,1), 'sqa',o31, 'taua',inf(3,1), 'dKg',o33, 'dKa',o33, 'dKga',zeros(15,1),'KA2',o31); %% constant bias & random walkif ~exist('web', 'var'), web=0; endif ~exist('wdb', 'var'), wdb=0; endimuerr.eb(1:3) = eb*glv.dph;   imuerr.web(1:3) = web*glv.dpsh;imuerr.db(1:3) = db*glv.ug;    imuerr.wdb(1:3) = wdb*glv.ugpsHz;%% correlated biasif exist('sqrtR0G', 'var')if TauG(1)==inf, imuerr.sqg(1:3) = sqrtR0G*glv.dphpsh;   % algular rate random walk !!!elseif TauG(1)>0, imuerr.sqg(1:3) = sqrtR0G*glv.dph.*sqrt(2./TauG); imuerr.taug(1:3) = TauG; % Markov processendendif exist('sqrtR0A', 'var')if TauA(1)==inf, imuerr.sqa(1:3) = sqrtR0A*glv.ugpsh;   % specific force random walk !!!elseif TauA(1)>0, imuerr.sqa(1:3) = sqrtR0A*glv.ug.*sqrt(2./TauA); imuerr.taua(1:3) = TauA; % Markov processendend%% scale factor errorif exist('dKGii', 'var')imuerr.dKg = setdiag(imuerr.dKg, dKGii*glv.ppm);endif exist('dKAii', 'var')imuerr.dKa = setdiag(imuerr.dKa, dKAii*glv.ppm);end%% installation angle errorif exist('dKGij', 'var')dKGij = ones(6,1).*dKGij*glv.sec;imuerr.dKg(2,1) = dKGij(1); imuerr.dKg(3,1) = dKGij(2); imuerr.dKg(3,2) = dKGij(3); imuerr.dKg(1,2) = dKGij(4); imuerr.dKg(1,3) = dKGij(5); imuerr.dKg(2,3) = dKGij(6);endif exist('dKAij', 'var')dKAij = ones(3,1).*dKAij*glv.sec;imuerr.dKa(2,1) = dKAij(1); imuerr.dKa(3,1) = dKAij(2); imuerr.dKa(3,2) = dKAij(3); endimuerr.dKga = [imuerr.dKg(:,1); imuerr.dKg(:,2);   imuerr.dKg(:,3);imuerr.dKa(:,1); imuerr.dKa(2:3,2); imuerr.dKa(3,3)];%% acc 2nd scale factor errorif exist('KA2', 'var')imuerr.KA2(1:3) = KA2*glv.ugpg2; end%% acc inner-lever-arm errorif exist('rxyz', 'var')if length(rxyz)==1, rxyz(1:6)=rxyz; endif length(rxyz)==6, rxyz(7:9)=[0;0;0]; end imuerr.rx = rxyz(1:3)/100; imuerr.ry = rxyz(4:6)/100; imuerr.rz = rxyz(7:9)/100;end%% time-asynchrony between gyro & accif exist('dtGA', 'var')imuerr.dtGA = dtGA/1000; end

其中,常见的四个误差参数为eb, db, web, wdb,分别代表陀螺随机常值漂移、加速度计随机常值漂移、陀螺的角随机游走、加速度计的速度随机游走。

误差分析

这里的误差分析主要指陀螺静态漂移(加表零漂用时域平滑图即可imumeanplot),其它误差在标定中介绍。误差分析有时间序列、功率谱、小波分析等方法,但最好的方法还是Allan方差分析法,它比较全面,能给出除逐次启动零偏之外的大部分误差,作图直观。
avar:针对一只陀螺作Allan方差分析;
avars:同时分析多只陀螺的Allan方差。

陀螺漂移稳定性误差分析是对陀螺漂移做的最主要的误差分析

Allan方差分析法,只能分析一次漂移的稳定性;逐次启动,上次和本次漂移之间的常值误差,是分析不出来的。

其代码如下:

function [sigma, tau, Err] = avar(y0, tau0, str, isfig)
% Calculate Allan variance.
%
% Prototype: [sigma, tau, Err] = avar(y0, tau0, str, isfig)
% Inputs: y0 - data (gyro in deg/hur; acc in g)
%         tau0 - sampling interval
%         str - string for ylabel
%         isfig - figure flag
% Outputs: sigma - Allan variance
%          tau - Allan variance correlated time
%          Err - Allan variance error boundary
%
% Example:
%     y = randn(100000,1) + 0.00001*[1:100000]';
%     [sigma, tau, Err] = avar(y, 0.1, 2);
%
% See also  avarsimu, avarfit, avar2, avars, oavar, meann, sumn.% Copyright(c) 2009-2014, by Gongmin Yan, All rights reserved.
% Northwestern Polytechnical University, Xi An, P.R.China
% 22/08/2012, 16/12/2019, 30/5/2021N = length(y0);y = y0; NL = N;for k = 1:log2(N)sigma(k,1) = sqrt(1/(2*(NL-1))*sum((y(2:NL)-y(1:NL-1)).^2)); % diff&stdtau(k,1) = 2^(k-1)*tau0;      % correlated timeErr(k,1) = 1/sqrt(2*(NL-1));  % error boundaryNL = floor(NL/2);if NL<3break;endy = 1/2*(y(1:2:2*NL) + y(2:2:2*NL));  % mean & half data lengthendif nargin<4, isfig=1; endif nargin<3, str=[]; endif isnumeric(str), isfig=str; str=[]; end  % avar(y0, tau0, 1)if isfigfigure('Color','White');if isempty(str), str = '\itx \rm/ ( (\circ) / h )'; endsubplot(211), plot(tau0*(1:N)', y0); gridxlabel('\itt \rm/ s'); ylabel(str); title(sprintf('Mean: %.6f', mean(y0)));subplot(212), loglog(tau, sigma, '-+', tau, [sigma.*(1+Err),sigma.*(1-Err)], 'r--'); grididx = strfind(str,'/');if ~isempty(idx),   str = str(idx(1):end);else                str = [];endstr = strcat('\it\sigma_A\rm( \tau ) \rm',str);xlabel('\it\tau \rm/ s'); ylabel(str);endif isfig==2  % re-plot subplot(211)my0 = mean(y0(1:fix(length(y0)/100)));ang = cumsum(y0-my0)*tau0/3600;subplot(211); [ax,h1,h2] = plotyy(tau0*(1:N)', y0, tau0*(1:N)', ang); grid on;xlabel('\itt \rm/ s'); ylabel(ax(1), '\it\omega \rm/ ( (\circ) / h )');  ylabel(ax(2), '\Delta\it\theta \rm/ (\circ)');title(sprintf('Mean: %.6f ( (\\circ) / h )', my0));end

可以使用如下语句进行分析:

avar(A2(:,1:3),0.01,2);

A2(:,1:3)表示imu的前三列,即陀螺输出;0.01表示采样间隔

PSINS惯性器件误差模拟与分析相关推荐

  1. 如何读懂MEMS惯性器件的精度指标

    由于生产MEMS芯片和模块的厂家多数是做集成电路芯片出身的企业,因此很多惯性器件的精度指标都是沿用了集成电路领域的术语(尤其是模拟集成电路),而未采用惯导行业的专业术语.因此阅读起来有个"翻 ...

  2. INS/GNSS组合导航(十二)如何读懂MEMS惯性器件精度?

    系列1跟大家解释了惯性器件中几种不同的陀螺零偏指标以及如何正确地对比器件性能.本系列我们以一款典型MEMS IMU模块为例来带着大家过一遍MEMS的常见精度指标,希望能对大家正确理解和选用MEMS惯性 ...

  3. INS/GNSS组合导航(六)-惯性器件的主要误差

    在SINS的各种误差源中,影响最大的是惯性传感器误差,这其中又包括加速度计和陀螺仪的误差.从误差的性质上可以分为系统误差和随机误差,而从误差源上又可以分为零偏误差.尺度因子误差.安装误差.非线性误差以 ...

  4. 如何区分惯性器件的零偏误差?

    最近二十年来MEMS惯性器件蓬勃发展,尤其是随着2010年开始MEMS陀螺芯片用于智能手机,使得MEMS IMU芯片出货量猛增,性能越来越好,价格越来越便宜,基本上是以超越摩尔定律的速度在发展.那么, ...

  5. PSINS运动轨迹与惯性器件信息生成仿真

    文章目录 运动轨迹与惯性器件信息生成仿真 纯数值仿真 trjsegment()函数 trjsimu()函数 基于实测轨迹的惯性器件生成仿真 运动轨迹与惯性器件信息生成仿真 纯数值仿真 trjsegme ...

  6. 第一章 MEMS惯性器件-加速度计误差分析

    系列文章目录 常用MEMS传感器参数分析和应用介绍系列,分十二个章节讨论相关问题: Outline: 第一章 MEMS惯性器件-加速度计误差分析 第二章 MEMS惯性器件-陀螺仪误差分析 第三章 国内 ...

  7. 惯性导航和惯性器件(二)

    惯性器件的误差 加速度计和陀螺仪的理论输出 Question: 三轴加计 ​ 输出比力 f ⃗ = a ⃗ − g ⃗ \vec f = \vec a - \vec g f ​=a −g ​ 静置在水 ...

  8. 惯性导航和惯性器件(一)

    惯性导航和惯性器件(一) 惯性传感器 加速度计及输出 加速度计输出为比力,而非刚体直接的运动加速度. 比力方程推导: F 弹 ⃗ + m g ⃗ = m a ⃗ \vec{F_弹} + m\vec{g ...

  9. 混频器IP3的测量以及测试误差的来源分析

    混频器线性度一直是射频系统设计面临的一个关键问题.混频器的非线性会产生不需要的.不可滤的杂散.互调和非线性失真.例如,非线性混频可能导致不希望的杂散,例如2fRF✕2fLO 或2fRF✕fLO 频率分 ...

最新文章

  1. ubuntu vasp 安裝_VASP安装过程(64位)
  2. 蓝桥杯:基础练习 回文数
  3. Django-Ajax
  4. 小工匠聊架构-写给研发工程师的全链路压测
  5. 案例 | 铅酸蓄电池精细维护
  6. 我的Android进阶之旅------gt;Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题...
  7. 贪心/动态规划 - 摆动序列
  8. Ubuntu使用技巧(二)
  9. QT中VideoProbe的简介和实现
  10. [css] 怎么让body高度自适应屏幕?为什么?
  11. (二叉树的动态创建与bfs)树的层次遍历
  12. Spring框架中IoC(控制反转)的原理
  13. elastic-job动态任务配置
  14. MySQL中查某一字段包含某一字符的个数
  15. Vue之不常注意的点
  16. Linux命令之进程的管理
  17. YII框架截取字符串长度
  18. 人脸验证(四)--CenterLoss
  19. CentOS-6.3安装配置Nginx
  20. 尚硅谷springSecurity笔记

热门文章

  1. mac系统如何进入系统偏好设置_技巧:5 种迅速定位 Mac「系统偏好设置」选项的方法...
  2. java ee7权威指南 卷1,JavaEE7权威指南,卷1(原书第5版)中文pdf
  3. [转载]100本名著浓缩成的100句话
  4. 辽宁省大连市谷歌高清卫星地图下载
  5. 初识MIMO(三):天线分集技术及其仿真
  6. 单片机断电记忆方法C语言,怎样使单片机程序断电保留上次的数据?
  7. ABAP里OO ALV选中或container alv里的选中方法
  8. c++最佳情侣身高差(来测一测)
  9. zoj2587 Marlon's String
  10. 英读廊——拔了电源插头为什么要等三十秒再重插?