020静态惯性器件捷联惯导仿真(2)

019静态惯性器件捷联惯导仿真(1)

021静态惯性器件捷联惯导仿真(3)


接着前面的内容进行更新。


9、捷联惯导更新算法

% 捷联惯导更新算法
% 参考 (4.1-23)、(4.1-50)、(4.1-57)、(4.1-60)和4.1.1节
% eth.gcc 有害加速度

function [ qnb, vn, pos, eth ] = insupdate( qnb, vn, pos, wm, vm, ts )

nn = size(wm, 1);
nts = nn * ts;
[phim, dvbm] = cnscl(wm, vm); % 补偿后旋转矢量phim,补偿后速度增量dvbm
eth = earth(pos, vn);         % 地球相关参数计算

vn1 = vn + rv2m(-eth.wnin *nts /2) *qmulv(qnb, dvbm) +eth.gcc *nts; % 速度更新
vn = (vn +vn1) /2;
pos = pos + [vn(2) /eth.RMh;  vn(1) /eth.clRNh;  vn(3)] *nts;       % 位置更新
vn = vn1;

qnb = qmul(rv2q(-eth.wnin *nts), qmul(qnb, rv2q(phim)) ); % 姿态更新
qnb = qnormlz(qnb);                                       % 四元数归一化,保证仍为归一化四元数

end
(1)速度更新

参考(4.1-23)和(4.1-50),与(4.1-50)对应关系:
r v 2 m ( − e t h . w n i n ∗ n t s / 2 ) → I − T 2 ( ω i n ( m − 1 / 2 ) n × ) d v b m → Δ v m + Δ v r o t ( m ) b ( m − 1 ) + Δ v s c u l ( m ) b ( m − 1 ) \begin{matrix} rv2m(-eth.wnin *nts /2) \xrightarrow{} I-\frac{T}{2}(\omega ^n _{in(m-1/2)} \times) \\ \\ dvbm \xrightarrow {} \Delta v_m + \Delta v ^{b(m-1) } _{rot(m)} + \Delta v ^{b(m-1) } _{scul(m)} \end{matrix} rv2m(eth.wninnts/2) I2T(ωin(m1/2)n×)dvbm Δvm+Δvrot(m)b(m1)+Δvscul(m)b(m1)
另外,如果对rv2m(-eth.wnin *nts /2)不理解,可用eye(3)-nts/2*askew(eth.wnin)代替。

(2)位置更新

参考(4.1-57)、(4.1-60)。

(3)姿态更新

参考4.1.1小节。


10、圆锥/划船误差补偿

% 圆锥/划船误差补偿
% 参考(2.3-36)、(4.1-36)、(4.1-44)和表2.6-2

function [ phim, dvbm ] = cnscl( wm, vm )

cs = [
    [2, 0, 0, 0, 0] /3
    [9, 27, 0, 0, 0] /20
    [54, 92, 214, 0, 0] /105
    [250, 525, 650, 1375, 0] /504
    [2315, 4558, 7296, 7834, 15797] /4620];   % 2-6子样补偿系数

wmm = sum(wm, 1);         % 将wm的每一行相加,每个采样时间段的角度增量
vmm = sum(vm, 1);         % 将vm的每一行相加,每个采样时间段的速度增量
dphim = zeros(1, 3);
scullm = zeros(1, 3);

n = size(wm, 1);                                         % 每个采样时间段的子样数
if n>1
    csw = cs(n-1, 1:n-1) *wm(1:n-1,:);
    csv = cs(n-1, 1:n-1) *vm(1:n-1,:);
    dphim = cross(csw, wm(n,:));                         % 圆锥补偿量
    scullm = cross(csw, vm(n,:)) +cross(csv, wm(n,:));   % 划船补偿量
end
phim = (wmm +dphim)';                         % 圆锥补偿后的旋转矢量
dvbm = (vmm +0.5*cross(wmm, vmm) +scullm)';   % 旋转和划船补偿后的速度增量

end

如果该函数在理解上比较困难,也就是if之后的内容了。

(1)圆锥补偿
csw = cs(n-1, 1:n-1) *wm(1:n-1,:);
dphim = cross(csw, wm(n,:)); 
phim = (wmm +dphim)';

上面的程序二子样下的圆锥补偿,虽然公式(2.6-36)是在四子样算法下得到的,但我们也可以轻易地将其转化为二子样计算公式:
ϕ ( T ) = Δ θ m + δ ϕ ^ ( T ) = [ Δ θ m ( 1 ) + Δ θ m ( 2 ) ] + k 1 Δ θ m ( 1 ) × Δ θ m ( 2 ) \phi(T)= \Delta \theta_m + \delta \hat{\phi}(T)= [ \Delta \theta_m(1) + \Delta \theta_m(2)]+ k_1 \Delta \theta_m (1) \times \Delta \theta_m(2) ϕ(T)=Δθm+δϕ^(T)=[Δθm(1)+Δθm(2)]+k1Δθm(1)×Δθm(2)
整理一下程序与公式的对应关系
c s ( n − 1 , 1 : n − 1 ) → k 1 w m ( 1 : n − 1 , : ) → Δ θ m ( 1 ) w m ( n , : ) → Δ θ m ( 2 ) w m m → Δ θ m ( 1 ) + Δ θ m ( 2 ) \begin{matrix} cs(n-1, 1:n-1) \xrightarrow{} k_1\\ \\ wm(1:n-1,:) \xrightarrow{} \Delta \theta_m (1)\\ \\ wm(n,:) \xrightarrow{} \Delta \theta_m (2)\\ \\ wmm \xrightarrow{} \Delta \theta_m(1) + \Delta \theta_m(2) \end{matrix} cs(n1,1:n1) k1wm(1:n1,:) Δθm(1)wm(n,:) Δθm(2)wmm Δθm(1)+Δθm(2)

(2)划船补偿
csv = cs(n-1, 1:n-1) *vm(1:n-1,:);
scullm = cross(csw, vm(n,:)) +cross(csv, wm(n,:)); 
dvbm = (vmm +0.5*cross(wmm, vmm) +scullm)';

参考公式(4.1-36)和(4.1-44)。这里不过多介绍,仅罗列一下对应关系:
v m ( 1 : n − 1 , : ) → Δ v m 1 v m ( n , : ) → Δ v m 2 w m ( n , : ) → Δ θ m 2 0.5 ∗ c r o s s ( w m m , v m m ) → 1 2 Δ θ m × Δ v m \begin{matrix} vm(1:n-1,:) \xrightarrow{} \Delta v_{m1}\\ \\ vm(n,:) \xrightarrow{} \Delta v_{m2}\\ \\ wm(n,:) \xrightarrow{} \Delta \theta_{m2}\\ \\ 0.5*cross(wmm, vmm) \xrightarrow{} \frac{1}{2} \Delta \theta_m \times \Delta v_m \end{matrix} vm(1:n1,:) Δvm1vm(n,:) Δvm2wm(n,:) Δθm20.5cross(wmm,vmm) 21Δθm×Δvm

其中,0.5*cross(wmm, vmm)表示速度的旋转误差补偿量。
我连下标都跟书上标的一样,圆锥数字用括号,划船数字用下标。


11、旋转矢量转换为变换矩阵

% 旋转矢量转换为变换矩阵
% 参考公式 (2.2-23)

function m = rv2m( rv )

nm2 = rv' *rv;                % 旋转矢量的模方 列向量
if nm2 < 1.0e-8               % 如果模方很小,则可用泰勒展开前几项求三角函数
    a = 1 - nm2 *(1/6  - nm2/120);
    b = 0.5 - nm2 *(1/24  - nm2/720);
else
    nm = sqrt(nm2);
    a = sin(nm) /nm;
    b = (1 -cos(nm)) /nm2;
end

VX = askew(rv);
m = eye(3) + a*VX + b*VX^2;   % eye(3) 三维单位矩阵

end

参考公式 (2.2-23)易得上述函数。其中函数函数如下。


12、三维向量的反对称阵

% 三维向量的反对称阵
% 参考公式(2.1-3)

function m = askew( v )

m = [0 , -v(3) , v(2);
    v(3) , 0 , -v(1);
    -v(2) , v(1) , 0;
    ];

end

13、四元数归一化

% 四元数归一化
% 参考公式(2.4-19)与(2.4-20)之间文字部分
function qnb = qnormlz( qnb )

nm = qnb' *qnb;
if nm < 1e-6
    qnb =[1; 0; 0; 0];   % 表示姿态的四元数,其模值应为1
else
    qnb = qnb /sqrt(nm);
end

end

14、四元数转换为姿态角

% 四元数转换为姿态角

function att = q2att( qnb )

att = m2att(q2mat(qnb));

end

函数没m2attq2mat如下。


15、姿态阵转换为姿态角

% 姿态阵转换为姿态角
% 参考公式(B-7)
function att = m2att( Cnb )

if abs(Cnb(3,2)) <= 0.999999
    att = [ asin(Cnb(3,2)); -atan2(Cnb(3,1),Cnb(3,3)); -atan2(Cnb(1,2),Cnb(2,2))];
else
    att = [ asin(Cnb(3,2)); atan2(Cnb(1,3),Cnb(1,1)); 0];

end

16、四元数转换为姿态阵

% 四元数转换为姿态阵
% 公式详见 (2.4-23) P23

function Cnb = q2mat( qnb )

q11 = qnb(1)*qnb(1); q12 = qnb(1)*qnb(2); q13 = qnb(1)*qnb(3); q14 = qnb(1)*qnb(4); 
q22 = qnb(2)*qnb(2); q23 = qnb(2)*qnb(3); q24 = qnb(2)*qnb(4); 
q33 = qnb(3)*qnb(3); q34 = qnb(3)*qnb(4); 
q44 = qnb(4)*qnb(4); 

Cnb = [
    q11+q22-q33-q44, 2*(q23-q14),     2*(q24+q13);
    2*(q23+q14),     q11-q22+q33-q44, 2*(q34-q12);
    2*(q24-q13),     2*(q34+q12),     q11-q22-q33+q44
];
end

17、辅助函数—作图

% 辅助函数---作图
function mysubplot( mnp, x, y, xstr, ystr )

if mod(mnp, 10) == 1
    figure;
end                        % 如果是第一幅小图,则新建一个figure
subplot(mnp);
plot(x, y);
grid on;

if nargin == 4
    ystr = xstr;
    xstr = 't/s';
end
xlabel(xstr);
ylabel(ystr);

end

18、辅助函数—求位置增量

% 辅助函数---求位置增量
function dpos = deltapos( pos )

dpos = [[(pos(:,1) - pos(1,1)), (pos(:,2) - pos(1,2)) .*cos(pos(:,1))] *6378137, pos(:,3) - pos(1,3)];

end

主函数在下一篇再写,因为打算画一个流程图,把思绪理清楚!GOGOGO!

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值