⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 navcode.txt

📁 导航解算
💻 TXT
📖 第 1 页 / 共 2 页
字号:
%          end


%        V_en_n_c(i+1,1)=V_en_n_c(i,1)+(f_n_c(i,1)-(V_en_n_c(i,2)*sec(Lat_c(i))/R(i)+2*omega_ie_e(3))*sin(Lat_c(i))*V_en_n_c(i,2)+V_en_n_c(i,1)/R(i)*V_en_n_c(i,3))*delta_t;
%        V_en_n_c(i+1,2)=V_en_n_c(i,2)+(f_n_c(i,2)+(V_en_n_c(i,2)*sec(Lat_c(i))/R(i)+2*omega_ie_e(3))*(sin(Lat_c(i))*V_en_n_c(i,1)+cos(Lat_c(i))*V_en_n_c(i,3)))*delta_t;
%        V_en_n_c(i+1,3)=V_en_n_c(i,3)+(f_n_c(i,3)-V_en_n_c(i,1)/R(i)*V_en_n_c(i,1)-(V_en_n_c(i,2)*sec(Lat_c(i))/R(i)+2*omega_ie_e(3))*cos(Lat_c(i))*V_en_n_c(i,2)+g_c)*delta_t;
         
%       if i<length(t)
%               tspan=t(i:i+1);
%                if i<4
%                    q(i+1,:)=euler2quat([gama(i+1), theta(i+1),cesi(i+1)]);
%                
%                else
%                    options=odeset('RelTol',1e-7);
%                    [tpoint qq]=ode45(@(tpoint,q) difq(tpoint,q,omega_nb_b_c(i,:),t(1:i)),tspan,q(i,:),options);
%                    q(i+1,:)=qq(end,:);
%                end
%               
%           else tspan=[t(i)  t(i)+delta_t]';
%                options=odeset('RelTol',1e-7);
%               [tpoint qq]=ode45(@(tpoint,q) difq(tpoint,q,omega_nb_b_c(i,:),t(1:i)),tspan,q(i,:),options);%对于常微分方程形式:y'=f(t,y),f可以有其他参数,但头两个输入变量必须为时间t和在该时间的状态y
%               q(i+1,:)=qq(end,:);%  对于四元数微分方程来说,q指的是由参考系转向动系这个转动所代表的四元数,方程中的角速度代表的也是动系相对于参考系的角速度
%           end

%   if i==1 
%          q(i+1,:)=euler2quat([gama(i+1), theta(i+1),cesi(i+1)]);
%   elseif i<length(t)
%                      oomega_ib_b_c=interp1([t(i) ;t(i+1)],[omega_meas(1,:,i); omega_meas(1,:,i+1)],'linear','pp');                        
%                      a=omega_nb_b_c(i,:); 
%                      b=oomega_ib_b_c.coefs(:,1)';%这里a,b为对角速度omega_ib_b_c的捏线性拟和系数,均设为行向量                    
%                      h=delta_t;               %pp中,域coefs的系数是按自变量的将幂排列的,也就是说:coefs(:,1)为自变量最高次幂的系数
%                      delta_theta(i,:)=a.*h+b.*h^2./2+cross(a,b).*h^3./12;  %此处是对omega_nb_b_c做一次线性拟合求得的旋转矢量delta_theta;    
            
%                omega_nb_b_sim=[tt(:,i) omega_meas(i:i+nmb,:)-repmat(omega_in_b(i,:),nmb+1,1)];
%                sim('rotvecmdl');

%                delta_theta_span=(omega_meas(:,:,i)-repmat(omega_in_b_c(i,:),nmb,1)).*(delta_t/nmb);                 
%                delta_theta(i,:)=delta_theta_span(1,:)+delta_theta_span(2,:)+delta_theta_span(3,:)+delta_theta_span(4,:)+(cross(delta_theta_span(1,:),delta_theta_span(2,:))+cross(delta_theta_span(3,:),delta_theta_span(4,:))).*214./315 ...
%                +(cross(delta_theta_span(1,:),delta_theta_span(3,:))+cross(delta_theta_span(2,:),delta_theta_span(4,:))).*46./105+cross(delta_theta_span(1,:),delta_theta_span(4,:)).*54./105+cross(delta_theta_span(2,:),delta_theta_span(3,:)).*214./315;
% 
%              delta_theta0=norm(delta_theta(end,:));
%              u=normr(delta_theta(end,:));
%              q_h=[cos(delta_theta0/2) sin(delta_theta0/2)*u(1) sin(delta_theta0/2)*u(2) sin(delta_theta0/2)*u(3)];
%              q(i+1,:)=quatmultiply(q(i,:),q_h);
%              q(i+1,:)=quatnormalize(q(i+1,:));
%   else      q(i+1,:)=q(i,:);
%   end

%     if i==1 
%          q(i+1,:)=euler2quat([gama(i+1), theta(i+1),cesi(i+1)]);
%     else        
%            alfa=delta_t.*omega_nb_b_c(i,:);
%            omega_nb_b_crct=cross(alfa,omega_nb_b_c(i,:))./2+omega_nb_b_c(i,:);
%            delta_theta0=norm(omega_nb_b_crct)*delta_t;
%            M_delta_theta0=delta_t.*[           0            -omega_nb_b_crct(1)   -omega_nb_b_crct(2)       -omega_nb_b_crct(3)
%                                     omega_nb_b_crct(1)                0            omega_nb_b_crct(3)       -omega_nb_b_crct(2)   
%                                     omega_nb_b_crct(2)      -omega_nb_b_crct(3)           0                  omega_nb_b_crct(1)       
%                                     omega_nb_b_crct(3)       omega_nb_b_crct(2)   -omega_nb_b_crct(1)              0          ];
          
%            delta_theta0=norm(omega_nb_b_c(i,:))*delta_t;
%            M_delta_theta0=delta_t.*[           0             -omega_nb_b_c(i,1)    -omega_nb_b_c(i,2)      -omega_nb_b_c(i,3)
%                                       omega_nb_b_c(i,1)         0                   omega_nb_b_c(i,3)      -omega_nb_b_c(i,2)
%                                       omega_nb_b_c(i,2)      -omega_nb_b_c(i,3)             0               omega_nb_b_c(i,1)  
%                                       omega_nb_b_c(i,3)       omega_nb_b_c(i,2)    -omega_nb_b_c(i,1)              0   ];
%           q(i+1,:)=q(i,:)*(cos(delta_theta0/2).*eye(4)+(sin(delta_theta0/2)/delta_theta0).*M_delta_theta0)';
%           q(i+1,:)=quatnormalize(q(i+1,:));       
%      end


     C_nb_c{i+1}=quat2dcm(q(i+1,:));
     [cesi_c(i+1) theta_c(i+1) gama_c(i+1)]=dcm2angle(C_nb_c{i+1});%计算姿态角

     R_sim(i,:)=[t(i) R(i)];%R_sim为errormodel中的输入参数,需要加上时间信息
    
     delta_Ven_n_c(i,:)=V_en_n_c(i,:)-Ven_n(i,:);
end

%计算平台偏差角fi
% for j=1:length(t)
%     q_ture(j,:)=dcm2quat(C_nb{j});
%     delta_q(j,:)=quatmultiply(q_ture(j,:),quatconj(q(j,:)));
%     fi=2.*delta_q(j,2:4);
%     delta_fi(j,:)=fi;
% end

%计算状态误差
%给误差状态方程传递参数
for j=1:length(t)
delta_omega_ib_n(j,:)=[t(j) (omega_meas(1,:,j)-omega_ib_b(j,:))*C_nb_c{j}+omega_meas(1,:,j)*(C_nb_c{j}-C_nb{j})];%(omega_meas(1,:,j)-omega_ib_b(j,:))*C_nb_c{j}+omega_meas(1,:,j)*(C_nb_c{j}-C_nb{j})
delta_omega_in_n(j,:)=[t(j) omega_in_n_c(j,:)-omega_in_n(j,:)];
delta_f_n(j,:)=[t(j) (Ameas(1,:,j)-f_b(j,:))*C_nb_c{j}];
delta_omega_ie_n(j,:)=[t(j) omega_ie_n_c(j,:)-omega_ie_n(j,:)];
omega_nb_n_sim(j,:)=[t(j),omega_nb_n_c(j,:)];
end;
omega_in_n_sim=[t omega_in_n_c];
omega_ie_n_sim=[t omega_ie_n_c];
Ven_n_sim=[t V_en_n_c];
f_n_sim=[t f_n_c];
Lat_sim=[t Lat_c(1:length(t))'./(2*pi)];

sim('errormodel',t)
save navsim

%设地速初值为0,则位置速率初值也为0



figure,
subplot(3,1,1),plot([delta_fi(:,1) fi_sim(:,1)]);xlabel('time/s');ylabel('北向平台误差角 deg');grid on;
subplot(3,1,2),plot([delta_fi(:,2) fi_sim(:,2)]);xlabel('time/s');ylabel('东向平台误差角 deg');grid on;
subplot(3,1,3),plot([delta_fi(:,3) fi_sim(:,3)]);xlabel('time/s');ylabel('地向平台误差角 deg');grid on;

figure,
plot([(V_en_n_c(1:length(t),1)-Ven_n(:,1)) delta_Ven_n(:,1)]);xlabel('time/s');ylabel('北向速度偏差 m/s');grid on;
figure,
plot([(V_en_n_c(1:length(t),2)-Ven_n(:,2)) delta_Ven_n(:,2)]);xlabel('time/s');ylabel('东向速度偏差 m/s');grid on;
figure,
plot([(V_en_n_c(1:length(t),3)-Ven_n(:,3)) delta_Ven_n(:,3)]);xlabel('time/s');ylabel('地向速度偏差 m/s');grid on;
% figure,
% plot((omega_en_n_c(:,1)-omega_en_n(:,1)));xlabel('time/s');ylabel('北向位置角速率偏差 rad/s');grid on;
% figure,
% plot((omega_en_n_c(:,2)-omega_en_n(:,2)));xlabel('time/s');ylabel('东向位置角速率偏差 rad/s');grid on;
% figure,
% plot((omega_en_n_c(:,3)-omega_en_n(:,3)));xlabel('time/s');ylabel('地向位置角速率偏差 rad/s');grid on;

% figure,
% subplot(1,2,1),plot(Lat.*180./pi);xlabel('time/s');ylabel('真实纬度');subplot(1,2,2),plot(Lat_c.*180./pi);xlabel('time/s');ylabel('解算纬度');
% figure,
% subplot(1,2,1),plot(Lon.*180./pi);xlabel('time/s');ylabel('真实经度');subplot(1,2,2),plot(Lon_c.*180./pi);xlabel('time/s');ylabel('解算经度');
% figure,
% subplot(1,2,1),plot(h_a);xlabel('time/s');ylabel('高度');subplot(1,2,2),plot(h_c);xlabel('time/s');ylabel('解算高度');

figure,
subplot(1,2,1),plot([(Lat_c(1:length(t))'-Lat).*180./pi delta_Lat]);xlabel('time/s');ylabel('纬度偏差 degree');grid on;
subplot(1,2,2),plot([(Lon_c(1:length(t))'-Lon).*180./pi delta_Lon]);xlabel('time/s');ylabel('经度偏差 degree');grid on;

% figure,
%  subplot(1,2,1),plot(cesi.*180./pi), xlabel('time/s');ylabel('航向角cesi');subplot(1,2,2),plot(cesi_c.*180./pi),xlabel('time/s');ylabel('解算航向角cesi');
%  figure,
%  subplot(1,2,1),plot(theta.*180./pi), xlabel('time/s');ylabel('俯仰角theta');subplot(1,2,2),plot(theta_c.*180./pi),xlabel('time/s');ylabel('解算俯仰角theta');
%  figure,
%  subplot(1,2,1),plot(gama.*180./pi),xlabel('time/s');ylabel('滚动角gama'); subplot(1,2,2),plot(gama_c.*180./pi),xlabel('time/s');ylabel('解算滚动角gama');

figure,
subplot(3,1,1),plot(cesi_c(1:length(t))'-cesi);xlabel('time/s');ylabel('航向角偏差');grid on;
subplot(3,1,2),plot(theta_c(1:length(t))'-theta);xlabel('time/s');ylabel('俯仰角偏差');grid on;
subplot(3,1,3),plot(gama_c(1:length(t))'-gama);xlabel('time/s');ylabel('滚动角偏差');grid on;

 figure,
 subplot(3,1,1),plot((S_c(1:length(t),1)-S(:,1)));xlabel('time/s');ylabel('航向偏差');grid on;
 subplot(3,1,2),plot((S_c(1:length(t),2)-S(:,2)));xlabel('time/s');ylabel('射程偏差');grid on;
 subplot(3,1,3),plot((S_c(1:length(t),3)-S(:,3)));xlabel('time/s');ylabel('高度偏差');grid on;

% figure,
% subplot(3,1,1),plot((P_i_c(1:length(t),1)-P_i(:,1)));xlabel('time/s');ylabel('航向偏差');grid on;
% subplot(3,1,2),plot((P_i_c(1:length(t),2)-P_i(:,2)));xlabel('time/s');ylabel('射程偏差');grid on;
% subplot(3,1,3),plot((P_i_c(1:length(t),3)-P_i(:,3)));xlabel('time/s');ylabel('高度偏差');grid on;

out{1}=fi_sim;out{2}=delta_Ven_n; out{3}=S_c-S;
save delta 'delta_Ven_n_c' 'delta_Ven_n' 'fi_sim' 'C_nb_c';

for i=1:length(t)
    delta_norm_f_n(i)=norm(f_n_c(i,:)-f_n(i,:));
end
figure,
plot(delta_norm_f_n);xlabel('time/s');ylabel('比力计算偏差');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -