1、角度和弧度之间的转换公式?
设角度为 angle,弧度为 radian
radian = angle * pi / 180;
angle = radian * 180 / pi;
所以在matlab中经常设置一个参数,用于角度与弧度之间的转换:deg_rad=0.01745329252e0;
2、注意下面角度Angint的表示方法:
Angint=[0,10,0]*deg_rad;
则:Angint(0) = 0;Angint(1) = 0.0175;Angint(2) = 0;
这种表示方法可以在四元数中应用:
例如:
q=[cos(Angint(3)/2)*sin(Angint(2)/2)*cos(Angint(1)/2)+sin(Angint(3)/2)*cos(Angint(2)/2)*sin(Angint(1)/2)
cos(Angint(3)/2)*cos(Angint(2)/2)*sin(Angint(1)/2)-sin(Angint(3)/2)*sin(Angint(2)/2)*cos(Angint(1)/2)
-sin(Angint(3)/2)*cos(Angint(2)/2)*cos(Angint(1)/2)+cos(Angint(3)/2)*sin(Angint(2)/2)*sin(Angint(1)/2)
cos(Angint(3)/2)*cos(Angint(2)/2)*cos(Angint(1)/2)+sin(Angint(3)/2)*sin(Angint(2)/2)*sin(Angint(1)/2)];
可以用q(0)、q(1)、q(2)、q(3)来代入公式计算三轴姿态角。
3、在滤波的过程中,要明确滤波时间和采样频率;
4、IMU数据仿真分析:
(1)先模拟加速度计和陀螺仪的真实输出:
[ Angle,Wibb,Fb ] = imu_true_out( tt,ynong,T );%tt=tt+TT;TT=1/f为时间间隔
注意:加速度计的输出要进行坐标转换: ao=Cnb*([0,0,g]’,
其中:Cnb
如果你要在加速度计的输出上添加一个随机干扰(可模拟非重力加速度干扰),可以使用函数awgn(); %Add white Gaussian noise to a signal.
ao=Cnb*([0,0,g]’+[0,awgn(0,ynong),0]’); %如果在指点的时间内添加这种干扰,可以加一个if函数
(2)模拟加速度计和陀螺仪的误差:
[Gyro_b,Gyro_r,Gyro_wg,Acc_r]=imu_err_random(tt,TT,Gyro_b,Gyro_r,Gyro_wg,Acc_r);
function [Gyro_b,Gyro_r,Gyro_wg,Acc_r]=imu_err_random(t,T,Gyro_b,Gyro_r,Gyro_wg,Acc_r) g=9.7803698; %重力加速度 (单位:米/秒/秒) Wie=7.292115147e-5; %地球自转角速度(单位:弧度/秒) deg_rad=0.01745329252e0;% Transfer from angle degree to rad Da_bias=[0.001; 0.001; 0.001]*g; %加速度零偏(应与非随机性误差中的加速度零偏保持一致) Ta=1800.0; %加速度一阶马尔可夫过程相关时间 Tg=3600.0; %陀螺一阶马尔可夫过程相关时间 %%%%%%%%%%%%%%%%%%随机性误差%%%%%%%%%%%%%%% if( t==0 ) Acc_r=Da_bias.*randn(3,1); %加速度一阶马尔可夫过程1.0e-4g Gyro_b=0.01*deg_rad/3600.0*randn(3,1); %随机常数0.1(deg/h) Gyro_r=0.01*deg_rad/3600.0*randn(3,1); %陀螺一阶马尔可夫过程0.1(deg/h) Gyro_wg=0.01*deg_rad/3600.0*randn(3,1);%陀螺白噪声0.1(deg/h) else Acc_wa=sqrt(2*T/Ta)*Da_bias.*randn(3,1);%加速度一阶马尔可夫过程白噪声 Acc_r=exp(-1.0*T/Ta)*Acc_r; %加速度一阶马尔可夫过程 Gyro_wr=0.01*sqrt(2*T/Tg)*deg_rad/3600.0*randn(3,1);%陀螺一阶马尔可夫过程白噪声0.1(deg/h) Gyro_r=exp(-1.0*T/Tg)*Gyro_r+Gyro_wr;%陀螺一阶马尔可夫过程0.1(deg/h) Gyro_wg=0.01*deg_rad/3600.0*randn(3,1);%陀螺白噪声0.1(deg/h) end