天天看點

捷聯慣導數值更新算法-姿态更新+速度更新+位置更新姿态更新速度更新位置更新

文章目錄

  • 姿态更新
    • 地球自轉角速度和牽連角速度
    • 更新姿态
  • 速度更新
    • 比力方程
    • PSINS源碼
    • 雙子樣假設
    • 速度更新算法
    • 劃槳誤差補償算法
    • PSINS源碼
  • 位置更新
    • 計算公式
    • PSINS源碼

姿态更新

捷聯慣導數值更新算法通常可劃分為姿态、速度和位置更新三部分﹐姿态更新算法是核心,其求解精度對整個捷聯慣導的精度起着決定性的作用。目前主流的姿态更新求解方法是,先使用陀螺角增量的多子樣采樣計算等效旋轉矢量,補償轉動不可交換誤差,再使用等效旋轉矢量計算姿态更新四元數。

地球自轉角速度和牽連角速度

在考慮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; 
           

繼續閱讀