📄 simulation.m
字号:
clear all;
clc;
g0=9.78049;
rad_deg=0.01745329;
wie=7.27220417e-5;
Re=6378393.0;
e=3.3670e-3;
Hn=0.1;
time=10;
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];
%%%%%%
T_p=3;
T_r=3;
T_y=7;
%%%%%%
pitchm=10*rad_deg;
rollm=10*rad_deg;
yawm=0*rad_deg;
%%%%初始角%%
pitchk=0*rad_deg;
rollk=0*rad_deg;
yawk=0*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=30*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;
%%%p对子惯导
wiep=[0
wie*cos(lati)
wie*sin(lati)];
g1=g0+0.051799*(sin(lati))^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.1*g0;
aold=[a0*sin(yaw0);a0*cos(yaw0);0];
v0=[10.0*sea_mile*sin(yaw0);10.0*sea_mile*cos(yaw0);0.0];
v=v0;
a=aold;
Rxp=Re*(1+e*(sin(lati))^2);
Ryp=Re*(1-2*e+3*e*(sin(lati))^2);
wepp=[-v(2)/Ryp
v(1)/Rxp
v(1)*tan(lati)/Rxp];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
q=zeros(4,1);
%%%%%%建立 初始 捷 联阵
%%%%%%%%%
Tbn=[cos(roll0)*cos(yaw0) + sin(roll0)*sin(pitch0)*sin(yaw0) cos(pitch0)*sin(yaw0) sin(roll0)*cos(yaw0) - cos(roll0)*sin(pitch0)*sin(yaw0)
-cos(roll0)*sin(yaw0) + sin(roll0)*sin(pitch0)*cos(yaw0) cos(pitch0)*cos(yaw0) -sin(roll0)*sin(yaw0) - cos(roll0)*sin(pitch0)*cos(yaw0)
-sin(roll0)*cos(pitch0) sin(pitch0) cos(roll0)*cos(pitch0)];
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);
% Tsm=[1 -yaw_error roll_error;
% yaw_error 1 -pitch_error;
% -roll_error pitch_error 1];
% Tms=inv(Tsm);
% T=Tbn;
Tsm=inv(Tbn)*T;
Tms=inv(Tsm);
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
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0];
P = zeros(8);
P(1,1) = 0.1^2;
P(2,2) = 0.1^2;
P(3,3) = 0.1^2;
P(4,4) = 0.1^2;
P(5,5) = 0.2^2;
P(6,6) = 0.1^2;
P(7,7) = 0.1^2;
P(8,8) = 0.1^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);
Q(6,6) = power(G_Drift(1),2);
Q(7,7) = power(G_Drift(2),2);
Q(8,8) = power(G_Drift(3),2);
R=zeros(5);
% R(1,1) = power(0.0001,2);
% R(2,2) = power(0.0001,2);
% R(3,3) = power(0.03/60/180*3.14,2);
% R(4,4) = power(0.03/60/180*3.14,2);
% R(5,5) = power(0.03/60/180*3.14,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))];
delay_time(k)=rand/10;
delay_pitchT = pitchm*sin(2*pi/T_p*(k*Hn-delay_time(k))+p_pitch)+pitchk;
delay_rollT = rollm*sin(2*pi/T_r*(k*Hn-delay_time(k))+p_roll)+rollk;
delay_yawT = yawm*sin(2*pi/T_y*(k*Hn-delay_time(k))+p_yaw)+yawk;
Tbn=[cos(delay_rollT)*cos(delay_yawT) + sin(delay_rollT)*sin(delay_pitchT)*sin(delay_yawT) cos(delay_pitchT)*sin(delay_yawT) sin(delay_rollT)*cos(delay_yawT) - cos(delay_rollT)*sin(delay_pitchT)*sin(delay_yawT)
-cos(delay_rollT)*sin(delay_yawT) + sin(delay_rollT)*sin(delay_pitchT)*cos(delay_yawT) cos(delay_pitchT)*cos(delay_yawT) -sin(delay_rollT)*sin(delay_yawT) - cos(delay_rollT)*sin(delay_pitchT)*cos(delay_yawT)
-sin(delay_rollT)*cos(delay_pitchT) sin(delay_pitchT) cos(delay_rollT)*cos(delay_pitchT)];
tempp1(k)=pitchT(3);
tempp2(k)=delay_pitchT;
%%%%%%%%%%%%%加时间延迟不补偿运行上面屏蔽的程序
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
%%%%%导航 坐标系到 载体坐标
Tnb1=[Tnb11(1) Tnb12(1) Tnb13(1)
Tnb21(1) Tnb22(1) Tnb23(1)
Tnb31(1) Tnb32(1) Tnb33(1)];
Tnb2=[Tnb11(2) Tnb12(2) Tnb13(2)
Tnb21(2) Tnb22(2) Tnb23(2)
Tnb31(2) Tnb32(2) Tnb33(2)];
Tnb3=[Tnb11(3) Tnb12(3) Tnb13(3)
Tnb21(3) Tnb22(3) Tnb23(3)
Tnb31(3) Tnb32(3) Tnb33(3)];
winb1=Tnb1*winn;
winb2=Tnb2*winn;
winb3=Tnb3*winn;
wibb1=winb1+wnbb1;
wibb2=winb2+wnbb2;
wibb3=winb3+wnbb3;
%%%%%%%%%%%%%%%%%%%%%%
fn(1,1) = a(1) - (2*wien(3)+wenn(3))*v0(2);
fn(2,1) = a(2) + (2*wien(3)+wenn(3))*v0(1);
fn(3,1) = a(3) + (2*wien(1)+wenn(1))*v0(2) - (2*wien(2)+wenn(2))*v0(1) + g1;
%%%%%%%%%%%%%%%%
fbb3=Tnb3*fn;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%__________---------
%%%%%%%%%----
wib1=Tms*wibb1+G_Drift+0.1*G_Drift*randn(1);
wib2=Tms*wibb2+G_Drift+0.1*G_Drift*randn(1);
wib3=Tms*wibb3+G_Drift+0.1*G_Drift*randn(1);
fb3=Tms*fbb3+A_Bias+0.1*A_Bias*randn(1);
%%%%%%%%%%%%%%
q0 = q;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
wpbb1=wib1-inv(T)*(wepp+wiep);
wpbb2=wib2-inv(T)*(wepp+wiep);
wpbb3=wib3-inv(T)*(wepp+wiep);
omiga1=[0 -wpbb1(1) -wpbb1(2) -wpbb1(3)
wpbb1(1) 0 wpbb1(3) -wpbb1(2)
wpbb1(2) -wpbb1(3) 0 wpbb1(1)
wpbb1(3) wpbb1(2) -wpbb1(1) 0 ];
omiga2=[0 -wpbb2(1) -wpbb2(2) -wpbb2(3)
wpbb2(1) 0 wpbb2(3) -wpbb2(2)
wpbb2(2) -wpbb2(3) 0 wpbb2(1)
wpbb2(3) wpbb2(2) -wpbb2(1) 0 ];
omiga3=[0 -wpbb3(1) -wpbb3(2) -wpbb3(3)
wpbb3(1) 0 wpbb3(3) -wpbb3(2)
wpbb3(2) -wpbb3(3) 0 wpbb3(1)
wpbb3(3) wpbb3(2) -wpbb3(1) 0 ];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
k1 = 1/2*omiga1*q;
q=q0+k1*Hn/2;
k2=1/2*omiga2*q;
q=q0+k2*Hn/2;
k3=1/2*omiga2*q;
q=q0+k3*Hn;
k4=1/2*omiga3*q;
q=q0+(k1+2*k2+2*k3+k4)/6*Hn;
q=q/sqrt(q(1)^2+q(2)^2+q(3)^2+q(4)^2);
T=[q(1)^2+q(2)^2-q(3)^2-q(4)^2 2*(q(2)*q(3)-q(1)*q(4)) 2*(q(2)*q(4)+q(1)*q(3))
2*(q(2)*q(3)+q(1)*q(4)) q(1)^2-q(2)^2+q(3)^2-q(4)^2 2*(q(3)*q(4)-q(1)*q(2))
2*(q(2)*q(4)-q(1)*q(3)) 2*(q(3)*q(4)+q(1)*q(2)) q(1)^2-q(2)^2-q(3)^2+q(4)^2];
fp=T*fb3;
f_vx = fp(1) + (2*wiep(3)+wepp(3))*v(2);
f_vy = fp(2) - (2*wiep(3)+wepp(3))*v(1);
v(1) = v(1) + f_vx*Hn;
v(2) = v(2) + f_vy*Hn;
wepp = [-v(2)/Ryp;
v(1)/Rxp;
v(1)*tan(lati)/Rxp];
wiep = [0; wie*cos(lati); wie*sin(lati)];
g1 = g0+0.051799*sin(lati)*sin(lati);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A =[0 wiep(3)+wepp(3) T(1,3)*fb3(2)-T(1,2)*fb3(3) -T(1,3)*fb3(1)+T(1,1)*fb3(3) T(1,2)*fb3(1)-T(1,1)*fb3(3) -T(1,3)*fb3(2)+T(1,2)*fb3(3) T(1,3)*fb3(1)-T(1,1)*fb3(3) -T(1,2)*fb3(1)+T(1,1)*fb3(3)
-(wiep(3)+wepp(3)) 0 T(2,3)*fb3(2)-T(2,2)*fb3(3) -T(2,3)*fb3(1)+T(2,1)*fb3(3) T(2,2)*fb3(1)-T(2,1)*fb3(3) -T(2,3)*fb3(2)+T(2,2)*fb3(3) T(2,3)*fb3(1)-T(2,1)*fb3(3) -T(2,2)*fb3(1)+T(2,1)*fb3(3)
0 0 0 wpbb3(3) -wpbb3(2) 0 -wpbb3(3) wpbb3(2)
0 0 -wpbb3(3) 0 wpbb3(1) wpbb3(3) 0 -wpbb3(1)
0 0 wpbb3(2) -wpbb3(1) 0 -wpbb3(2) wpbb3(1) 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B=eye(8,8);
B(1,1)=T(1,1);
B(1,2)=T(1,2);
B(2,1)=T(2,1);
B(2,2)=T(2,2);
[F,G] = c2d(A,B,Hn);
FT = F';
GT = G';
HT=H';
delta_T=inv(T)*Tbn;
Z=[v(1)-v0(1)
v(2)-v0(2)
delta_T(2,3)
delta_T(3,1)
delta_T(1,2)];
temp1(k)=delta_T(2,3)/rad_deg*60;
temp2(k)=delta_T(3,1)/rad_deg*60;
temp3(k)=delta_T(1,2)/rad_deg*60;
Xk = F*X;
Zk = H*Xk;
Pk = F*P*FT + G*Q*GT;
K = Pk*HT*inv(H*Pk*HT+R);
P = (eye(8)-K*H)*Pk;
X = Xk + K*(Z-Zk);
datx1(k) = X(1);
datx2(k) = X(2);
datx3(k) = X(3)/rad_deg*60;
datx4(k) = X(4)/rad_deg*60;
datx5(k) = X(5)/rad_deg*60;
datx6(k) = X(6)/rad_deg*60;
datx7(k) = X(7)/rad_deg*60;
datx8(k) = X(8)/rad_deg*60;
dvx(k)=Z(1);
dvy(k)=Z(2);
end
j=1:length(datx1);
figure(1)
subplot(2,1,1)
plot(j,(datx1(j)))
subplot(2,1,2)
plot(j,(datx2(j)))
figure(2)
subplot(3,1,1)
plot(j,(datx3(j)))
subplot(3,1,2)
plot(j,(datx4(j)))
subplot(3,1,3)
plot(j,(datx5(j)))
figure(3)
subplot(3,1,1)
plot(j,temp1(j))
subplot(3,1,2)
plot(j,temp2(j))
subplot(3,1,3)
plot(j,temp3(j))
figure(4)
subplot(3,1,1)
plot(j,datx6(j))
subplot(3,1,2)
plot(j,datx7(j))
subplot(3,1,3)
plot(j,datx8(j))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -