看到有人说互补滤波跟卡尔曼滤波效果差不多,我是不相信的。不过单我自己说不行,要有结果,后来我就用下面的代码进行测试,结果如下图 <ignore_js_op> 结果:果然两滤波结果几乎相同。黑色曲线是互补滤波结果,黄色曲线是卡尔曼滤波结果。两者非常相似,所以需要把线条加粗才行
- //每10ms执行一次
- if((millis() - time) >= 10)
- {
- digitalWrite(14, HIGH);//用于测试程序运行时间
-
- time = millis();
-
- //读传感器数据
- mpu_get_data();
-
- digitalWrite(13, HIGH);
- //互补滤波
- angle_hb = (0.98) * (angle_hb - mpu_data.y_gyro_f * 0.01) + (0.02)*(mpu_data.x_accel_f);
- //卡尔曼滤波
- Kalman_Filter(mpu_data.x_accel_f, -mpu_data.y_gyro_f);
- digitalWrite(13, LOW);
-
- //串口发送数据
- Serial3.print(-mpu_data.y_gyro_f);
- Serial3.print(",");
- Serial3.print(mpu_data.x_accel_f);
- Serial3.print(",");
- Serial3.print(angle_hb);
- Serial3.print(",");
- Serial3.print(angle);
- Serial3.println("");
-
- digitalWrite(14, LOW);
- }
复制代码
|