智能车制作

标题: 平衡车卡尔曼滤波反向尖峰 [打印本页]

作者: juiojoi    时间: 2014-12-7 16:04
标题: 平衡车卡尔曼滤波反向尖峰


我的陀螺仪只向负角度的方向偏,但是却出现了向相反方向的尖峰,为什么啊?该怎么把这个尖峰去掉

白色是滤波后的角度,红色是加计三角函数换算后的角度;
黄色是角加速度


[attach]72316[/attach]

作者: juiojoi    时间: 2014-12-7 16:05
//-------------------------------------------------------
float angle, angle_dot;                 //外部需要引用的变量
//-------------------------------------------------------
const float Q_angle=0.001, Q_gyro=0.003, R_angle=0.2;
                        //注意:dt的取值为kalman滤波器采样时间;
float Pk[2][2] = { {1, 0 }, {0, 1 }};
        
float Pdot[4] ={0,0,0,0};

const char C_0 = 1;
float q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;
//-------------------------------------------------------
void Kalman_Filter(float angle_m,float gyro_m)                        //gyro_m:gyro_measure
{
        angle+=(gyro_m-q_bias) * dt;
        
        Pdot[0]=Q_angle - Pk[0][1] - Pk[1][0];
        Pdot[1]=- Pk[1][1];
        Pdot[2]=- Pk[1][1];
        Pdot[3]=Q_gyro;
        
        Pk[0][0] += Pdot[0] * dt;
        Pk[0][1] += Pdot[1] * dt;
        Pk[1][0] += Pdot[2] * dt;
        Pk[1][1] += Pdot[3] * dt;
        
        
        angle_err = angle_m - angle;
        
        
        PCt_0 = C_0 * Pk[0][0];
        PCt_1 = C_0 * Pk[1][0];
        
        E = R_angle + C_0 * PCt_0;
        
        K_0 = PCt_0 / E;
        K_1 = PCt_1 / E;
        
        t_0 = PCt_0;
        t_1 = C_0 * Pk[0][1];

        Pk[0][0] -= K_0 * t_0;
        Pk[0][1] -= K_0 * t_1;
        Pk[1][0] -= K_1 * t_0;
        Pk[1][1] -= K_1 * t_1;
        
        
        angle        += K_0 * angle_err;
        q_bias        += K_1 * angle_err;
        angle_dot = gyro_m-q_bias;
        ///angle_dot = gyro_m;
}
                    
     这是我用的,在网上找的代码
作者: 热血青年    时间: 2014-12-7 16:47
滤波前要做归一化   在那一块把陀螺仪输入极性取反就行了
作者: MicroJIA    时间: 2014-12-7 17:28
如果是ENC03你把输出引脚的串的电容短掉应该可以解决
作者: 南宇    时间: 2014-12-7 21:11
:):)
作者: 1013956044    时间: 2014-12-8 03:52
用这个软件是什么的啊,那些过冲还是陀螺仪与加速度的拟合又是什么 请教请教
作者: BYu    时间: 2014-12-8 10:13
请问一下,黄色的应该是陀螺仪的变化吧?那不应该是叫速度吗?还有蓝色的是什么呢?
作者: 没有道理!    时间: 2014-12-12 18:17
juiojoi 发表于 2014-12-7 16:05
//-------------------------------------------------------
float angle, angle_dot;                  ...

卡尔曼前面定义的那几个比例是什么意思你知道 吗 求指导 啊  我没有理解
作者: 霸天虎    时间: 2015-4-6 21:40
热血青年 发表于 2014-12-7 16:47
滤波前要做归一化   在那一块把陀螺仪输入极性取反就行了

输入极性取反是什么意思?





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2