关于陀螺仪互补滤波的如下代码片段中,一阶互补算法中下面语句中参数Com_angle的初始值应该怎么设置?在这句之前并未对Com_angle的赋值。没看明白,请高手赐教
Com_angle = A * (Com_angle + omega * dt) + (1-A) * angleA;
#include
#define Acc 0x1D
#define Gyr 0x69
#define Mag 0x1E
#define Gry_offset -13 // 陀螺仪偏移量
#define Gyr_Gain 0.07 // 满量程2000dps时灵敏度(dps/digital)
#define pi 3.14159
float Com_angle;
float y1, Com2_angle;
float Klm_angle;
#define Q_angle 0.01 // 角度数据置信度
#define Q_omega 0.0003 // 角速度数据置信度
#define R_angle 0.01 // 方差噪声
float bias = 0;
float P_00 = 0, P_01 = 0, P_10 = 0, P_11 = 0;
float angleG;
long timer = 0; // 采样时间
void setup() {
sensor_init(); // 配置传感器
Serial.begin(19200); // 开启串口以便监视数据
delay(1000);
}
void loop() {
long o_timer = timer; // 上一次采样时间(ms)
float Y_Accelerometer = gDat(Acc, 1); // 获取向前的加速度
float Z_Accelerometer = gDat(Acc, 2); // 获取向下的加速度
float angleA = atan(Y_Accelerometer / Z_Accelerometer) * 180 / pi;
// 根据加速度分量得到的角度(degree)
timer = millis(); // 当前时间(ms)
float omega = Gyr_Gain * (gDat(Gyr, 0) + Gry_offset);
float dt = (timer - o_timer) / 1000.0; // 微分时间(s)
angleG = angleG + omega * dt; // 对角速度积分得到的角度(degree)
// 一阶互补算法
float K;
K = 0.075; // 对加速度计取值的权重
float A = K / (K + dt);
Com_angle = A * (Com_angle + omega * dt) + (1-A) * angleA;
....
}