关键词不能为空

当前您在: 主页 > 英语 >

捷联惯导Matlab程序

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 18:32
tags:

-

2021年2月1日发(作者:tipping)


捷联惯导程序,依据加表和陀螺仪的输出数据来求解飞行器的姿态




clc;


clear;


format long;



%


设置数据精度为


15


位小数




Data=importdata(''); %


导入实验所采集的数据,以矩阵形式赋给


Data


变量,



必须与该


M


文件在同一个文件夹中



Px=Data(:,3);



% Px,Py,Pz


为陀螺仪的输出值



Py=Data(:,4);


Pz=Data(:,5);



Nx=Data(:,6);



% Nx,Ny



Nz


为加速度计的输出值



Ny=Data(:,7);


Nz=Data(:,8);


%


陀螺仪模型参数标定如下:



Sx



= -4.085903e-006 Sy



= -4.085647e-006 Sz



= -4.085170e-006


Mxy = 5.059527e-003



; Mxz = -1.031103e-003 Myx = -3.355451e-003


Myz = 3.508468e-003



; Mzx = -1.266671e-003 Mzy = -2.318244e-004


Dx



= -2.009710e-006 Dy



= 8.156346e-007



; Dz



= -5.749059e-007


GyroCali_A = [ 1 -Mxy -Mxz -Myx 1 -Myz -Mzx -Mzy 1 ];


%


加速度计模型参数标定如下:



Kx



= 9.272930e-004



; Ky



= 9.065544e-004



; Kz



= 9.443748e-004



;


Ixy = 6.533872e-003



; Ixz = 9.565992e-004



; Iyx = -6.319376e-003


Iyz = -6.902339e-004 Izx = -1.144549e-003 Izy = -3.857963e-004


Bx



= -3.400847e-002 By



= -8.916341e-003 Bz



= -9.947414e-003


AccCali_A = [1 -Ixy -Ixz -Iyx 1 -Iyz -Izx -Izy 1 ];



Delta_t = 0.05; %


采样时间为


0.05





Delta_Theta_x = 0;


Delta_Theta_y = 0;


Delta_Theta_z = 0;



%


定义陀螺仪输出的角度增量




Delta_Vx = 0;


Delta_Vy = 0;



Delta_Vz = 0;







%


定义加速度计输出的速度增量




L = zeros(1,12001);


L(1)= 45.7328*pi/180





%


纬度用


L


表示,纬度的初始值划为弧度形式,因为后面计算位


置矩阵更新



L(2)= 45.7328*pi/180





%


时需要用到前两次的


L


值来计算当前


L


值,所以 在此定义


2



初始

L




Lamda = 126.6287*pi/180 %


经度用


Lamda< /p>


表示,经度的初始值划为弧度形式



h = 136


















%


高度用


h


表示



V = [ 0 0 0 ];



%


导航坐标系中的东北天 初始速度都为


0


Vx = 0;














%


方便后面的速度计算与速度更新



Vy = 0;


Vz = 0;



Theta = 0;


Gama



= 0;




Fai




= 0;











%


初始姿态角(俯仰角


/


倾斜角


/


航向角)都为


0,


此处均 为弧度




Re = 6378254 ;



Rp = 6356803 ;%


定义地球的半长轴与半短轴



e



= (Re - Rp)/Re












%


定义旋转椭球扁率(椭球度)



Wie = 15.04107/180*pi








%


定义地球自转角速度,地球坐标系 相对于惯性坐标系的角


速度




Theta_Matrix = zeros(1,12000);





%


定义姿态角矩阵,供画图用



Gama_Matrix



= zeros(1,12000);


Fai_Matrix




= zeros(1,12000);


L_Matrix






=


zeros(1,12001);





%


定义经纬度矩阵,供画图用,


L


的特殊性决定了其数


据个数为

< p>
12001


L_Matrix(1)



= 45.7328;













Lamda_Matrix = zeros(1,12000);


Ve_Matrix





= zeros(1,12000);





%


定义速度矩阵,供画图用



Vn_Matrix





= zeros(1,12000);


Vu_Matrix





= zeros(1,12000);



%


以下计算捷联矩阵的初始值,捷联 矩阵的初始值仅仅由


Theta



Ga ma



Fai


的初始值决定

< p>



T


=


[


cos(Gama)*cos(Fai)-sin(Gam a)*sin(Theta)*sin(Fai)



-cos(Theta)*sin(Fai)



sin(Gama)*cos(Fai)+cos(Gama)*sin(Theta)*sin(F ai)












cos (Gama)*sin(Fai)+sin(Gama)*sin(Theta)*cos(Fai)




cos(Theta)*cos(Fai)



sin(Gama)*sin(Fai)-cos(Gama)*sin(Theta)*cos(Fa i)


















-sin(Gama)*cos(Theta)






























sin(Theta)



















cos(Gama)*cos(Theta)


















];






%


由捷联矩阵的初始值计算初始四元数值,为捷联矩阵的实时更新做 准备







if(T(3,2)-T(2,3)>0)











Q1 = 0.5*sqrt(1+T(1,1)-T(2,2)-T(3,3));






else if (T(3,2)-T(2,3)==0)










Q1 = 0;







else Q1 = -0.5*sqrt(1+T(1,1)-T(2,2)-T(3,3));










end













%


求解


Q1






end







if(T(1,3)-T(3,1)>0)











Q2 = 0.5*sqrt(1-T(1,1)+T(2,2)-T(3,3));






else if (T(1,3)-T(3,1)==0)









Q2 = 0;







else Q2 = -0.5*sqrt(1-T(1,1)+T(2,2)-T(3,3));










end













%


求解


Q2






end







if(T(2,1)-T(1,2)>0)











Q3 = 0.5*sqrt(1-T(1,1)-T(2,2)+T(3,3));







else if (T(2,1)-T(1,2)==0)









Q3 = 0;










else Q3 = -0.5*sqrt(1-T(1,1)-T(2,2)+T(3,3));











end












%


求解


Q3






end















Q0 = 0.5*sqrt(1-Q1*Q1-Q2*Q2-Q3*Q3);




%


求解


Q0






Q = [Q0 Q1 Q2 Q3];



%


四元数初始值







Q = Q / sqrt(Q0*Q0+Q1*Q1+Q2*Q2+Q3*Q3); %


四元数的初始归一化,为得到最小漂移


误差

< br>










%


以下求位置矩阵的初始值,通过位 置矩阵更新后,反过来算运载体所在的经纬度







%


位置矩阵仅仅与经纬度有关系,


Ce2n


表 示把地球坐标系转换为导航坐标系的转换矩阵







Ce2n = [






-sin(Lamda)














cos(Lamda)

















0















-sin( L(1) )*cos(Lamda)





-sin(L(1))*sin(Lamda)







cos( L(1) );


















cos( L(1) )*cos(Lamda)




cos( L(1) )*sin(Lamda)




sin( L(1) )






];



%


大循环,共执行

< br>12000


次,实时更新捷联矩阵,速度矩阵,位置矩阵,保存作图所需数据



for k = 1:12000;











GyroCali_B = [Sx*Px(k)-Dx*Delta_t Sy*Py(k)-Dy*Delta_t Sz*Pz(k)-Dz*Delta_t ];






Delta_Theta = GyroCali_A * GyroCali_B %


计算陀螺仪输出的角度增量







Delta_Theta_x = Delta_Theta(1);







Delta_Theta_y = Delta_Theta(2);






Delta_Theta_z = Delta_Theta(3);






Delta_Theta_Module


=


sqrt(


Delta_Theta_x


*


Delta_Theta_x


+


Delta_Theta_y


*


Delta_Theta_y + Delta_Theta_z * Delta_Theta_z );







AccCali_B = [Kx*Nx(k)-Bx*Delta_t Ky*Ny(k)-By*Delta_t Kz*Nz(k)-Bz*Delta_t ];






Delta_V = AccCali_A * AccCali_B








%


计算加速度计输出的速度增量







Delta_Vx = Delta_V(1);






Delta_Vy = Delta_V(2);






Delta_Vz = Delta_V(3);






Delta_V_Module


=


sqrt(


Delta_Vx


*


Delta_Vx


+


Delta_Vy


*


Delta_Vy


+


Delta_Vz


*


Delta_Vz );







%


使用毕卡法求解四元数更新矩阵,即捷联矩阵







Bika = zeros(4);






Bika(1,1) = cos(0.5 * Delta_Theta_Module);






Bika(1,2) = -Delta_Theta_x / Delta_Theta_Module * sin(0.5 * Delta_Theta_Module);






Bika(1,3) = -Delta_Theta_y / Delta_Theta_Module * sin(0.5 * Delta_Theta_Module);






Bika(1,4) = -Delta_Theta_z / Delta_Theta_Module * sin(0.5 * Delta_Theta_Module);






Bika(2,1) = -Bika(1,2);






Bika(2,2) =



Bika(1,1);






Bika(2,3) = -Bika(1,4);






Bika(2,4) =



Bika(1,3);






Bika(3,1) = -Bika(1,3);






Bika(3,2) = -Bika(2,3);






Bika(3,3) =



Bika(1,1);






Bika(3,4) = -Bika(1,2);






Bika(4,1) = -Bika(1,4);






Bika(4,2) = -Bika(2,4);






Bika(4,3) = -Bika(3,4);






Bika(4,4) =



Bika(1,1);






Q = Bika * Q;





% < /p>


每循环一次,更新一次四元素


Q


值,为求 捷联矩阵







Q = Q / sqrt(Q0*Q0+Q1*Q1+Q2*Q2+Q3*Q3);



%


四元数的归一化,


为得到最小漂移误差







Q0 = Q(1);






Q1 = Q(2);






Q2 = Q(3);






Q3 = Q(4);











%


捷联矩阵的四元数表达式







T


=


[


Q0*Q0+Q1*Q1-Q2*Q2-Q3*Q3







2*(Q1*Q2-Q0*Q3)








2*(Q1*Q3+Q0*Q2)















2*(Q1*Q2+Q0*Q3)








Q0*Q0-Q1*Q1+Q2*Q2-Q3*Q3





2*(Q2*Q3-Q0*Q1)
















2*(Q1*Q3-Q0*Q2)








2*(Q2*Q3+Q0*Q1)






Q0*Q0-Q1*Q1-Q2*Q2+Q3*Q3 ];






%** ************************************************** *****************






%************** ******


求三个姿态角


Theta



Gama




Fai ********************






%** ************************************************** *****************






Theta_Main = asin( T(3,2) );






Gama_Main = atan( -T(3,1) / T(3,3));






Fai_Main



= atan( -T(1,2) / T(2,2));






Theta = Theta_Main;












if (T(3,3)>0)










Gama = Gama_Main






else if (T(3,3)<0 && Gama_Main > 0)














Gama = Gama_Main + pi;

-


-


-


-


-


-


-


-



本文更新与2021-02-01 18:32,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/594463.html

捷联惯导Matlab程序的相关文章