捷联惯导数值更新算法-姿态更新+速度更新+位置更新

姿态更新

捷联惯导数值更新算法通常可划分为姿态、速度和位置更新三部分﹐姿态更新算法核心,其求解精度对整个捷联惯导的精度起着决定性的作用。目前主流的姿态更新求解方法是,先使用陀螺角增量的多子样采样计算等效旋转矢量,补偿转动不可交换误差,再使用等效旋转矢量计算姿态更新四元数。

地球自转角速度和牵连角速度

在考虑n系相对于i系的旋转时,一定要考虑这两部分:地球自转引起的n系旋转,以及惯导系统在地球表面附近移动因地球表面弯曲而引起的n系旋转
在这里插入图片描述

更新姿态

在这里插入图片描述
姿态更新可采用四元数连乘来实现
也可由严老师书中提到的方向余弦矩阵计算得到
在这里插入图片描述

速度更新

比力方程

比力方程是在地球表面附近进行惯性导航解算的基本方程
在这里插入图片描述
上式后两项可统称为有害加速度。比力方程式表明,只有在加速度计输出中扣除有害加速度后,才能获得运载体在导航系下的几何运动加速度,对加速度积分一次可得速度,再积分一次可得位置。因此,比力方程是惯导解算的基本方程。

PSINS源码

严老师在PSINS中也给出了相应的代码,计算了有害加速度

function eth = ethupdate(eth, pos, vn)
% Update the Earth related parameters, much faster than 'earth'.
%
% Prototype: eth = ethupdate(eth, pos, vn)
% Inputs: eth - input earth structure array
%         pos - geographic position [lat;lon;hgt]
%         vn - velocity
% Outputs: eth - parameter structure array
%
% See also  ethinit, earth.

% Copyright(c) 2009-2014, by Gongmin Yan, All rights reserved.
% Northwestern Polytechnical University, Xi An, P.R.China
% 23/05/2014
    if nargin==2,  vn = [0; 0; 0];  end
    eth.pos = pos;  eth.vn = vn;
    eth.sl = sin(pos(1));  eth.cl = cos(pos(1));  eth.tl = eth.sl/eth.cl; 
    eth.sl2 = eth.sl*eth.sl;  sl4 = eth.sl2*eth.sl2;
    sq = 1-eth.e2*eth.sl2;  RN = eth.Re/sqrt(sq); 
    eth.RNh = RN+pos(3);  eth.clRNh = eth.cl*eth.RNh;
    eth.RMh = RN*(1-eth.e2)/sq+pos(3);
%     eth.wnie = [0; eth.wie*eth.cl; eth.wie*eth.sl];
    eth.wnie(2) = eth.wie*eth.cl; eth.wnie(3) = eth.wie*eth.sl;
%     eth.wnen = [-vn(2)/eth.RMh; vn(1)/eth.RNh; vn(1)/eth.RNh*eth.tl];
    eth.wnen(1) = -vn(2)/eth.RMh; eth.wnen(2) = vn(1)/eth.RNh; eth.wnen(3) = eth.wnen(2)*eth.tl;
%     eth.wnin = eth.wnie + eth.wnen;
    eth.wnin(1) = eth.wnie(1) + eth.wnen(1); eth.wnin(2) = eth.wnie(2) + eth.wnen(2); eth.wnin(3) = eth.wnie(3) + eth.wnen(3); 
%     eth.wnien = eth.wnie + eth.wnin;
    eth.wnien(1) = eth.wnie(1) + eth.wnin(1); eth.wnien(2) = eth.wnie(2) + eth.wnin(2); eth.wnien(3) = eth.wnie(3) + eth.wnin(3);
%     eth.gn = [0;0;-eth.g];
    eth.g = eth.g0*(1+5.27094e-3*eth.sl2+2.32718e-5*sl4)-3.086e-6*pos(3); % grs80
    eth.gn(3) = -eth.g;
%     eth.gcc = eth.gn - cros(eth.wnien,vn); % Gravitational/Coriolis/Centripetal acceleration
%     eth.gcc =  [ eth.wnien(3)*vn(2)-eth.wnien(2)*vn(3);  % faster than previous line
%                  eth.wnien(1)*vn(3)-eth.wnien(3)*vn(1);
%                  eth.wnien(2)*vn(1)-eth.wnien(1)*vn(2)+eth.gn(3) ];
    eth.gcc(1) = eth.wnien(3)*vn(2)-eth.wnien(2)*vn(3);
    eth.gcc(2) = eth.wnien(1)*vn(3)-eth.wnien(3)*vn(1);
    eth.gcc(3) = eth.wnien(2)*vn(1)-eth.wnien(1)*vn(2)+eth.gn(3);

双子样假设

本篇博文以双子样算法为例,推导速度更新方程。
双子样假设:[tk-2,tk]时段内角速度观测量和比力观测量均随时间线性变化。如图2所示,在两个采样区间内,将实际的角速度和比力(黑色曲线)近似为随时间线性变化(曲线简化为直线,红色虚线,黑色曲线下的积分面积为惯性传感器实际输出的角增量或速度增量)。上式表明,线性假设的系数 a、b、c、d不但决定了角速度和比力的大小,同时还决定了其方向,也即线性假设也考虑了角速度向量和比力向量的方向变化。
在这里插入图片描述
如下是双子样假设下的角速度和比力随时间变化函数
在这里插入图片描述

速度更新算法

速度更新中,有两项积分非常重要,一个是比力积分项,另一个就是重力/哥式积分项
在这里插入图片描述
那么可推导出双子样速度更新公式:
在这里插入图片描述
对于中间时刻(前一时刻和当前时刻的中间时刻)的速度求解,可采用线性外推方法:
在这里插入图片描述
对位置也可进行如上外推。

划桨误差补偿算法

下式描述的运动与现实生活划船中的划桨运动状况非常相似:一方面桨绕船身的横轴做往复角运动,另一方面船身连带船桨沿纵轴做间歇性加速线运动。可见,划船过程中船桨同时存在周期性的角运动和线运动,因此形象地称下式所描述的运动为划桨运动(sculling motion)。
在这里插入图片描述
推导可得N子样划桨误差补偿算法:
在这里插入图片描述

PSINS源码

严老师同样在源码中给出了这个算法:

 if coneoptimal==0
                scullm = [0, 0, 0];
            else
                scullm = 1/12*(cros(glv.wm_st,vm)+cros(glv.vm_st,wm));  glv.wm_st = wm; glv.vm_st = vm;
            end
        else
            vmm = sum(vm,1);
            if coneoptimal==0
                sm = glv.cs(n-1,1:n-1)*vm(1:n-1,:);
                scullm = (cros(cm,vm(n,:))+cros(sm,wm(n,:)));
            else  % else: using polynomial fitting sculling compensation method
                scullm = scullpolyn(wm, vm);
            end
        end

其中

 sm = glv.cs(n-1,1:n-1)*vm(1:n-1,:);
 scullm = (cros(cm,vm(n,:))+cros(sm,wm(n,:)));

这一块代码,为N子样划桨误差补偿算法的实现

位置更新

计算公式

可采用严老师书中的公式计算
在这里插入图片描述
也可参考牛老师的讲义中的公式
在这里插入图片描述
但需要注意的是,不同的公式,对应的不同的b系得定义,严老师定义东北天为正,牛老师定位北东地为正

PSINS源码

严老师在源码中也给出了相应得矩阵形式

ins.Mpv = [0, 1/ins.eth.RMh, 0; 1/ins.eth.clRNh, 0, 0; 0, 0, 1];
ins.MpvCnb = ins.Mpv*ins.Cnb;  ins.Mpvvn = ins.Mpv*ins.vn; 
  • 7
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Matlab是一种用于科学计算和数据可视化的高级编程语言和环境。在航空航天领域,Matlab经常用于开发和实现惯性导航系统中的数值更新程序。惯性导航系统通过使用加速度计和陀螺仪等传感器获取机体的加速度和角速度信息,并通过数值计算获得航向、位置速度等导航参数。 Matlab提供了一系列的数值计算和矩阵操作函数,使得编写捷联惯导数值更新程序变得简单和高效。根据不同的数值更新算法,可以使用Matlab快速实现姿态矩阵更新位置速度的积分等常见的惯导数值计算操作。 编写Matlab捷联惯导数值更新程序的步骤如下: 1. 定义机体坐标系、地球坐标系和导航坐标系,确定坐标系之间的转换关系。 2. 根据载体的加速度和角速度数据,计算姿态矩阵更新。可以使用基于欧拉角的更新方法或基于四元数的更新方法。 3. 将机体坐标系中的加速度信息转换到导航坐标系,用于位置更新。 4. 根据导航坐标系中的加速度和重力加速度,进行位置速度的积分计算。可以使用数值积分方法,如欧拉积分或龙格-库塔方法。 5. 根据航迹航向和速度等参数的变化,进行导航参数的修正。 6. 对导航参数进行数据融合和滤波,提高导航精度。 以上是编写Matlab捷联惯导数值更新程序的一般步骤,具体实现还需要根据具体的惯导系统和算法进行调整和优化。Matlab提供了丰富的工具箱和函数,使得编写和调试数值更新程序变得更加方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八与她

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值