我正在为我的四轴编程飞行控制器。到目前为止,它在速率模式下效果很好,所以我决定添加角度模式。这需要我的加速度计和陀螺仪数据的融合,以获得四维空间的真实位置。所以我能够从陀螺仪的度/秒集成到一个角度,并获得从所述加速度的角度,如下所示:STM32F103互补过滤器溢出
微控制器:STM32F103
PS:所有变量都是结构{双X,Y中,Z; },dt是一个uint64_t
//getting angle from gyro rate
gyroAngle.x += gyroRate.x * dt/1000;
gyroAngle.y += gyroRate.y * dt/1000;
gyroAngle.z += gyroRate.z * dt/1000;
//getting angle from accel
accelAngle.x = atan2(accel.y, sqrt(pow(accel.x,2) + pow(accel.z,2))) * (180/M_PI);
accelAngle.y = -atan2(accel.x, sqrt(pow(accel.y,2) + pow(accel.z,2))) * (180/M_PI);
//combines the two into true rotational position
angle.x = .85 * (angle.x + gyroAngle.x * (dt/1000)) + (.15 * accelAngle.x);
angle.y = .85 * (angle.y + gyroAngle.y * (dt/1000)) + (.15 * accelAngle.y);
问题:我有一个250hz的循环。不幸的是,在一两分钟后gyroAngle开始返回乱码(我认为它溢出了),因此角度也会返回gabage,因为它使用了gyroAngle。 accelAngle没有给我任何麻烦。
这是串行监控一些输出:
angle: -1 3 /*
angle: -1 3 */normal until here
-----------------------------------------------------------
angle: -98 406 /*
angle: -338 582 *
angle: -710 646 *
angle: -1113 716 * starts giving me garbage
angle: -1616 849 *
angle: -2327 1016 *
angle: -3047 1377 */
我完全不解,为什么出现这种情况。任何帮助是极大的赞赏。