www.gusucode.com > 惯性导航系统仿真程序 SIMULINK环境-SIMULINK源码程序 > code/compass_init.m
clear all; format long g; disp( 'initializing... '); tic global R2D f re wie g0 gg eps global Vn Vu Ve cbn Q CC cnb global lati0 longi0 h0 Lati Longi global vepp0 veppa0 global qa0 q0 global eulera0 global LINGPIAN PIAOYI %双子样参数 global CNA Q sampt0 global r0 Lati0 Longi0 Lati Longi eeee Alti %陀螺常值漂移1度/小时 PIAOYI=[0 0 0]*(pi/180)/3600; %加速度零偏1e-4g LINGPIAN=[0 0 0]*1e-4*9.8; sampt0=0.01; %标准参数 R2D=180/pi; f=1/298.257; re=6378140; wie=7.292115e-5; g0=9.8; gg=5.2884e-3; eps=1.0e-10; g=9.8; %初始位置 % (度 米) lati0=30; longi0=110; h0=0; % (弧度 米) lati0=lati0/R2D; lati0 = 0.49252506110179; longi0=longi0/R2D; Longi0 =1.9720639894; h0=h0; Lati = lati0; Longi = longi0; %主惯导初始速度veppa0(米/秒) v0=0; vepp0(1)=0;%v0*cos(yaw0); vepp0(2)=0; vepp0(3)=0;%-v0*sin(yaw0); veppa0=vepp0; %主惯导初始姿态角(弧度) % yawa0=10*pi/180; %%定义初始偏航角 % pitcha0=0.1;%%%%%%%%%%%%%%lianzi030304 定义初始俯仰角 % rolla0=0.2;%%%%%%%%%%%%%%lianzi030304 定义初始滚转角 yawa0 = 0; pitcha0 = 0; rolla0 = 0; eulera0=[rolla0,yawa0,pitcha0]; %初始化主惯导四元数qa0 pitch=pitcha0; yaw=yawa0; roll=rolla0; cnb=[cos(yaw)*cos(pitch), sin(pitch), -sin(yaw)*cos(pitch); sin(yaw)*sin(roll)-cos(yaw)*sin(pitch)*cos(roll), cos(pitch)*cos(roll),cos(yaw)*sin(roll)+sin(yaw)*sin(pitch)*cos(roll); sin(yaw)*cos(roll)+cos(yaw)*sin(pitch)*sin(roll),-cos(pitch)*sin(roll),cos(yaw)*cos(roll)-sin(yaw)*sin(pitch)*sin(roll)]; q0(1)=sqrt(1+cnb(1,1)+cnb(2,2)+cnb(3,3))/2; q0(2)=-(cnb(3,2)-cnb(2,3))/(4*q0(1)); q0(3)=-(cnb(1,3)-cnb(3,1))/(4*q0(1)); q0(4)=-(cnb(2,1)-cnb(1,2))/(4*q0(1)); temp=sqrt(q0(1)*q0(1)+q0(2)*q0(2)+q0(3)*q0(3)+q0(4)*q0(4)); q0(1)=q0(1)/temp; q0(2)=q0(2)/temp; q0(3)=q0(3)/temp; q0(4)=q0(4)/temp; %%%%%%%%%%%%%%lianzi030304 cnb=[1 0 0;0 1 0;0 0 1]; q0=[1 0 0 0]; %%%%%%%%%%%%%%%%%%%%%%%%%%% cna=cnb; qa0=q0; %双子样初值 CNA=cna*1; Q=qa0*1; %%初始对准的参数设置 k1=0.1; k2=50; k3=0.06; k4=0.3; kz=8; %%外测偏航角 yawa00=0*pi/180; %粗对准参数 k=0.6; %粗对准和精对准的转换时间 t=150; D2R=180/pi; %%弧度转换为角度函数 Adtx0=0; %% Adty0=0; delta_x0=0; delta_y0=0; Alpha0=300/60*R2D; Beta0=300/60*R2D; Gamma0=10*R2D; global Sg dCbg bg Ng global Sa dCba ba da Na global I t Ka Kg global C % gama-表示绕x轴旋转,phi-表示绕y轴旋转,theta-表示绕z轴旋转 gama = 0; phi = 0 ; theta = 90 ; phi = phi*pi/180;theta = theta * pi/180; gama = gama*pi/180; C11 = cos(phi)*cos(theta); C12 = sin(theta); C13 = -sin(phi)*cos(theta); C21 = -cos(phi)*sin(theta)*cos(gama)+sin(phi)*sin(gama); C22 = cos(theta)*cos(gama); C23 = sin(phi)*sin(theta)*cos(gama)+cos(phi)*sin(gama); C31 = cos(phi)*sin(theta)*sin(gama)+sin(phi)*cos(gama); C32 = -sin(gama)*cos(theta); C33 = -sin(phi)*sin(theta)*sin(gama)+cos(phi)*cos(gama); C = [C11 C12 C13;C21 C22 C23;C31 C32 C33]; I = eye(3); t = 0; % ba = [100 100 100]'; % ug % ba = ba.*1e-6*g; % Na = [5 5 5]'; % white noise, ug % Na = Na.*1e-6*g; % % bg = [1 1 1]'; % deg/h % bg = bg.*pi/180/3600; % Ng = [0.1 0.1 0.1]'; % white noise deg/h % Ng = Ng.*pi/180/3600; Ka = 10000; ba = [50 50 50]'*1; % ug Sa = diag([50 50 50]')*1; % ppm dCba = [0 5 -5;-5 0 5;5 -5 0]*1; % 加表安装误差 角分 da = diag([5 5 5]); % 加表二次项系数 e-5*s2/m Na = [5 5 5]'*1; % ug; Kg = 10000; bg = [0.1 0.1 0.1]'*10; % 陀螺零偏 deg/h Sg = diag([50 50 50]')*1 ; % 陀螺刻度因子 ppm dCbg = [0 5 -5;-5 0 5;5 -5 0]*1; %陀螺安装误差 1/60deg(角分) Ng = [0.02 0.02 0.02]'*10; % 陀螺白噪声 deg/h ba = ba.*1e-6*g; % m/s2 Sa = Sa.*1e-6; dCba = dCba.*pi/180/60; da = da.*1e-5; Na = Na.*1e-6*g; bg = bg.*pi/180/3600; Sg = Sg.*1e-6; dCbg = dCbg.*pi/180/60; Ng = Ng.*pi/180/3600; % rad/s disp( 'OK! '); %初始化完成 disp( 'initialize OK!... '); clc; global frame wie frame sampt0 % global r0 Lati0 Longi0 Lati Longi eeee Alti % global Vn Vu Ve cbn Q CC cnb global X A B K P Fn d_e d_v ang_1 ang_2 vel_1 vel_2 global d_roll d_yaw d_pitch navi_resul d_roll = 0; d_yaw = 0; d_pitch = 0; navi_resul = zeros(1,8); CC = zeros(2,10); frame = 0.0; eeee = 0.00669438000426; sampt0 = 0.01; r0 = 6378137.0; Vn = 0; Vu = 0;Ve = 0; Alti = 0; d_e=zeros(3,1); d_v=zeros(2,1); ang_1 = zeros(3,1); ang_2 = zeros(3,1); vel_1 = zeros(3,1); vel_2 = zeros(3,1); Lati0 = 0.49252506110179; Longi0 =1.9720639894; Lati = Lati0; Longi = Longi0; roll = 0*pi/180; yaw = 0*pi/180; pitch = 0*pi/180; cnb=[cos(yaw)*cos(pitch), sin(pitch), -sin(yaw)*cos(pitch); sin(yaw)*sin(roll)-cos(yaw)*sin(pitch)*cos(roll), cos(pitch)*cos(roll),cos(yaw)*sin(roll)+sin(yaw)*sin(pitch)*cos(roll); sin(yaw)*cos(roll)+cos(yaw)*sin(pitch)*sin(roll),-cos(pitch)*sin(roll),cos(yaw)*cos(roll)-sin(yaw)*sin(pitch)*sin(roll)]; cbn = cnb'; q0(1)=sqrt(1+cnb(1,1)+cnb(2,2)+cnb(3,3))/2; q0(2)=-(cnb(3,2)-cnb(2,3))/(4*q0(1)); q0(3)=-(cnb(1,3)-cnb(3,1))/(4*q0(1)); q0(4)=-(cnb(2,1)-cnb(1,2))/(4*q0(1)); temp=sqrt(q0(1)*q0(1)+q0(2)*q0(2)+q0(3)*q0(3)+q0(4)*q0(4)); q0(1)=q0(1)/temp; q0(2)=q0(2)/temp; q0(3)=q0(3)/temp; q0(4)=q0(4)/temp; Q = q0';