📄 velocitymatchsimulation.m
字号:
clear all;
clc;
% fid=fopen('data.txt','w');
% data=load('dataxyx.txt','r');
g0=9.78049;
rad_deg=0.01745329;
wie=7.27220417e-5;
Re=6378393.0;
e=3.3670e-3;
Hn=0.1;
time=100;
%%%%%%%假设r是在子惯导载体坐标系中的投影————————————————%%%%%%%
%%%%%%%%%%%%%%%仿真时杆臂效应误差是在子惯导坐标系内计算的,把计算得到的杆臂效应误差项加到加速度计输出上,再转换到载体坐标系,
%%%%%%%%%%%%%%经过滤波后进行初始对准
%%%%%%%%%%本仿真假设载体坐标系重合,所以r在两个载体坐标系中的投影是相同的%%%%%%%%%%%%
r=[2 2 2]';
Kg=[0.0000 0 0
0 0.0000 0
0 0 0.0000];
Ka=[0.0000 0 0
0 0.0000 0
0 0 0.0000];
G_Drift=[0.01*rad_deg/3600
0.01*rad_deg/3600
0.01*rad_deg/3600];
A_Bias=[1e-4*g0
1e-4*g0
1e-4*g0];
Kg=eye(3)+Kg;
Ka=eye(3)+Ka;
%%%%%%
T_p=3;
T_r=5;
T_y=7;
%%%%%%
pitchm=3*rad_deg;
rollm=5*rad_deg;
yawm=7*rad_deg;
%%%%初始角%%
pitchk=0*rad_deg;
rollk=0*rad_deg;
yawk=30*rad_deg;
%%%%
% p_pitch=30*rad_deg;
% p_roll=30*rad_deg;
% p_yaw=30*rad_deg;
p_pitch=0*rad_deg;
p_roll=0*rad_deg;
p_yaw=0*rad_deg;
%%%初始误差角%%
pitch_error=1*rad_deg;
roll_error=1*rad_deg;
yaw_error=1*rad_deg;
%%
%%% n对应主惯导
lati=45.7796*rad_deg;
longi=126.6705*rad_deg;
wien=[0
wie*cos(lati)
wie*sin(lati)];
%%%p对子惯导
phi=45.7796*rad_deg;
lamda=126.6705*rad_deg;
wiep=[0
wie*cos(phi)
wie*sin(phi)];
g1=g0+0.051799*(sin(phi))^2;
%%%%%% 初始姿态角%%%%
pitch0=pitchm*sin(p_pitch)+pitchk;
roll0=rollm*sin(p_roll)+rollk;
yaw0=yawm*sin(p_yaw)+yawk;
%%%%%
sea_mile=1.852e3/3600;
a0=0;0.1*g0;%(7-4)*sea_mile/time;
aold=[a0*sin(yaw0);a0*cos(yaw0);0];
aold=[a0;0;0];
v0=[0.0*sea_mile*sin(yaw0);0.0*sea_mile*cos(yaw0);0.0];
v=v0;
a=aold;
Rxp=Re*(1+e*(sin(phi))^2);
Ryp=Re*(1-2*e+3*e*(sin(phi))^2);
wepp=[-v(2)/Ryp
v(1)/Rxp
v(1)*tan(phi)/Rxp];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
q=[1 0 0 0]';
%%%%%%建立 初始 捷 联阵
%%%%%%%%%
pitch00=pitch0;
roll00=roll0;
yaw00=yaw0;
Tbn=[cos(roll00)*cos(yaw00) + sin(roll00)*sin(pitch00)*sin(yaw00) cos(pitch00)*sin(yaw00) sin(roll00)*cos(yaw00) - cos(roll00)*sin(pitch00)*sin(yaw00)
-cos(roll00)*sin(yaw00) + sin(roll00)*sin(pitch00)*cos(yaw00) cos(pitch00)*cos(yaw00) -sin(roll00)*sin(yaw00) - cos(roll00)*sin(pitch00)*cos(yaw00)
-sin(roll00)*cos(pitch00) sin(pitch00) cos(roll00)*cos(pitch00)];
T(1,1) = cos(roll0+roll_error)*cos(yaw0+yaw_error) + sin(roll0+roll_error)*sin(pitch0+pitch_error)*sin(yaw0+yaw_error);
T(1,2) = cos(pitch0+pitch_error)*sin(yaw0+yaw_error);
T(1,3) = sin(roll0+roll_error)*cos(yaw0+yaw_error) - cos(roll0+roll_error)*sin(pitch0+pitch_error)*sin(yaw0+yaw_error);
T(2,1) = -cos(roll0+roll_error)*sin(yaw0+yaw_error) + sin(roll0+roll_error)*sin(pitch0+pitch_error)*cos(yaw0+yaw_error);
T(2,2) = cos(pitch0+pitch_error)*cos(yaw0+yaw_error);
T(2,3) = -sin(roll0+roll_error)*sin(yaw0+yaw_error) - cos(roll0+roll_error)*sin(pitch0+pitch_error)*cos(yaw0+yaw_error);
T(3,1) = -sin(roll0+roll_error)*cos(pitch0+pitch_error);
T(3,2) = sin(pitch0+pitch_error);
T(3,3) = cos(roll0+roll_error)*cos(pitch0+pitch_error);
TT=T*inv(Tbn)
dp=TT(2,3)/rad_deg*60
dr=TT(3,1)/rad_deg*60
dy=TT(1,2)/rad_deg*60
q(1) = sqrt(1+T(1,1)+T(2,2)+T(3,3))/2.0;
q(2) = (T(3,2)-T(2,3))/(4*q(1));
q(3) = (T(1,3)-T(3,1))/(4*q(1));
q(4) = (T(2,1)-T(1,2))/(4*q(1));
Tn=time/Hn;
X=[0;
0;
0;
0;
0;
0;
0;
0];
H=[1 0 0 0 0 0 0 0 ;
0 1 0 0 0 0 0 0];
P = zeros(8);
P(1,1) = 0.1^2;
P(2,2) = 0.1^2;
P(3,3) = 1*rad_deg^2;
P(4,4) = 1*rad_deg^2;
P(5,5) = 2*rad_deg^2;
P(6,6) = 0.01^2;
P(7,7) = 0.01^2;
P(8,8) = 0.01^2;
Q=zeros(8);
Q(1,1) = power(A_Bias(1),2);
Q(2,2) = power(A_Bias(2),2);
Q(3,3) = power(G_Drift(1),2);
Q(4,4) = power(G_Drift(2),2);
Q(5,5) = power(G_Drift(3),2);
R=zeros(2);
R(1,1) = power(0.001,2);
R(2,2) = power(0.001,2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k=1:Tn
for i=1:3
pitchT(i) = pitchm*sin(2*pi*(k-(3-i)/2)*Hn/T_p+p_pitch)+pitchk;
rollT(i) = rollm*sin(2*pi*(k-(3-i)/2)*Hn/T_r+p_roll)+rollk;
yawT(i) = yawm*sin(2*pi*(k-(3-i)/2)*Hn/T_y+p_yaw)+yawk;
wpT(i) = 2*pi/T_p*pitchm*cos(2*pi*(k-(3-i)/2)*Hn/T_p+p_pitch);
wrT(i) = 2*pi/T_r*rollm*cos(2*pi*(k-(3-i)/2)*Hn/T_r+p_roll);
wyT(i) = 2*pi/T_y*yawm*cos(2*pi*(k-(3-i)/2)*Hn/T_y+p_yaw);
wpT2(i)=((2*pi/T_p)^2)*pitchm*cos(2*pi*(k-(3-i)/2)*Hn/T_p+p_pitch);
wrT2(i)=((2*pi/T_r)^2)*rollm*cos(2*pi*(k-(3-i)/2)*Hn/T_r+p_roll);
wyT2(i)=((2*pi/T_y)^2)*yawm*cos(2*pi*(k-(3-i)/2)*Hn/T_y+p_yaw);
%%%%%%%%%%%%实际上无法知道角加速度
end
Tbn=[cos(rollT(3))*cos(yawT(3)) + sin(rollT(3))*sin(pitchT(3))*sin(yawT(3)) cos(pitchT(3))*sin(yawT(3)) sin(rollT(3))*cos(yawT(3)) - cos(rollT(3))*sin(pitchT(3))*sin(yawT(3))
-cos(rollT(3))*sin(yawT(3)) + sin(rollT(3))*sin(pitchT(3))*cos(yawT(3)) cos(pitchT(3))*cos(yawT(3)) -sin(rollT(3))*sin(yawT(3)) - cos(rollT(3))*sin(pitchT(3))*cos(yawT(3))
-sin(rollT(3))*cos(pitchT(3)) sin(pitchT(3)) cos(rollT(3))*cos(pitchT(3))];
for i=1:3
wnbb(1,i) = sin(rollT(i))*cos(pitchT(i))*wyT(i) + cos(rollT(i))*wpT(i);
wnbb(2,i) = -sin(pitchT(i))*wyT(i) + wrT(i);
wnbb(3,i) = -cos(rollT(i))*cos(pitchT(i))*wyT(i) + sin(rollT(i))*wpT(i);
end
wnbb1=[wnbb(1,1)
wnbb(2,1)
wnbb(3,1)];
wnbb2=[wnbb(1,2)
wnbb(2,2)
wnbb(3,2)];
wnbb3=[wnbb(1,3)
wnbb(2,3)
wnbb(3,3)];
%%%%%%%%%%%%%%%%%%%%%
Rxt = Re*(1+e*sin(lati)*sin(lati));
Ryt = Re*(1-2*e+3*e*sin(lati)*sin(lati));
%%%%%%%%%%%%%%%%%%%
v00=v0;
v0(1) = v0(1)+a(1)*Hn;
v0(2) = v0(2)+a(2)*Hn;
wenn(1,1) = -v0(2)/Ryt;
wenn(2,1) = v0(1)/Rxt;
wenn(3,1) = v0(1)*tan(lati)/Rxt;
%%%%%%%%%%%%
longi= longi+(v00(1)+v0(1))/2*Hn/(Rxt*cos(lati));
lati = lati+(v00(2)+v0(2))/2*Hn/Ryt;
wien=[0;
wie*cos(lati);
wie*sin(lati)];
winn=wien+wenn;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%555
for i=1:3
Tnb11(i) = cos(rollT(i))*cos(yawT(i)) + sin(rollT(i))*sin(pitchT(i))*sin(yawT(i));
Tnb12(i) = -cos(rollT(i))*sin(yawT(i)) + sin(rollT(i))*sin(pitchT(i))*cos(yawT(i));
Tnb13(i) = -sin(rollT(i))*cos(pitchT(i));
Tnb21(i) = cos(pitchT(i))*sin(yawT(i));
Tnb22(i) = cos(pitchT(i))*cos(yawT(i));
Tnb23(i) = sin(pitchT(i));
Tnb31(i) = sin(rollT(i))*cos(yawT(i)) - cos(rollT(i))*sin(pitchT(i))*sin(yawT(i));
Tnb32(i) = -sin(rollT(i))*sin(yawT(i)) - cos(rollT(i))*sin(pitchT(i))*cos(yawT(i));
Tnb33(i) = cos(rollT(i))*cos(pitchT(i));
end
%%%%%导航 坐标系到 载体坐标
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -