智能车制作

标题: 想死的心都有了,直立波形时好时坏,这样到底是怎么回事??? [打印本页]

作者: 冷技    时间: 2015-3-14 14:01
标题: 想死的心都有了,直立波形时好时坏,这样到底是怎么回事???
红色为加速度计减去零点的值,黄色为陀螺仪减去零点的值,蓝色和紫色分别为卡尔曼滤波后的角度和角速度,请问这是怎么回事?[attach]75059[/attach]
作者: 、痕迹    时间: 2015-3-14 14:01
冷技 发表于 2015-3-14 15:36
换互补有用吗。。。有没有可能是电路的干扰造成的?

反正....我用的很好..计算速度快..不会..我以前用卡尔曼滤波也是这个样子的

作者: 、痕迹    时间: 2015-3-14 14:16
那就换互补...
作者: 冷技    时间: 2015-3-14 15:36
、痕迹 发表于 2015-3-14 14:16
那就换互补...

换互补有用吗。。。有没有可能是电路的干扰造成的?

作者: 冷技    时间: 2015-3-14 17:56
、痕迹 发表于 2015-3-14 17:15
反正....我用的很好..计算速度快..不会..我以前用卡尔曼滤波也是这个样子的

你以前用卡尔曼的时候也会出现这种波形?然后一换互补滤波就行了?


作者: 冷技    时间: 2015-3-14 18:02
冷技 发表于 2015-3-14 17:56
你以前用卡尔曼的时候也会出现这种波形?然后一换互补滤波就行了?

你是128还是k60的,可否发一份互补滤波的程序给我?还有那些参数要怎么整定?

作者: 冷技    时间: 2015-3-14 18:12
[attach]75066[/attach][attach]75067[/attach]你好 ,可否再帮我看一下这两个波形可以用吗?感觉陀螺仪的值滤波后有点失真。(红色为加速度计减去零点的值,黄色为陀螺仪减去零点的值,蓝色和紫色分别为卡尔曼滤波后的角度和角速度)麻烦你了。

作者: 、痕迹    时间: 2015-3-14 18:12
k60



作者: 、痕迹    时间: 2015-3-14 18:13
float angle_com, angle_dot_com; //外部需要引用的变量
//-------------------------------------------------------
static float bias_cf = 0.2;
static  float Ang_dt = 0.002;
static  float ComFilter_t = 0.5;
//-------------------------------------------------------
void complement_filter(float angle_m_cf, float gyro_m_cf)
{
        float a, b;
        a = (ComFilter_t / (ComFilter_t + Ang_dt));
        b = (1.0 - a);
        /*bias_cf = bias_cf * 0.999; //陀螺仪零飘低通滤波;500次均值;0.998
        bias_cf = bias_cf + gyro_m_cf * 0.001; //0.002
        angle_dot_com = gyro_m_cf- bias_cf;*/
    angle_dot_com = gyro_m_cf;
        angle_com = (angle_com + angle_dot_com * Ang_dt) * a + angle_m_cf * b;
        //加速度低通滤波;20次均值;按100次每秒计算,低通5Hz;0.90 0.05
//        CarAngSpeed=angle_dot_com;
//        CarAngle=angle_com;
}

float K2 = 0.55; // 对加速度计取值的权重
float x1, x2, y1;

void complement2(float angle_m, float gyro_m)
{
        angle_dot_com = gyro_m;
        x1 = (angle_m - angle_com)*(1 - K2)*(1 - K2);
        y1 = y1 + x1*Ang_dt;
        x2 = y1 + 2 * (1 - K2)*(angle_m - angle_com) + angle_dot_com;
        angle_com = angle_com + x2*Ang_dt;
}

作者: 博雪儿    时间: 2015-3-14 18:36
、痕迹 发表于 2015-3-14 18:13
float angle_com, angle_dot_com; //外部需要引用的变量
//-------------------------------------------- ...

怎么又两个互补滤波函数?两个都要用么?

作者: 冷技    时间: 2015-3-14 18:37
、痕迹 发表于 2015-3-14 18:13
float angle_com, angle_dot_com; //外部需要引用的变量
//-------------------------------------------- ...

谢谢,还有一个问题可以解答一下吗

作者: 、痕迹    时间: 2015-3-15 00:34
博雪儿 发表于 2015-3-14 18:36
怎么又两个互补滤波函数?两个都要用么?

一个是一阶互补一个是二阶互补...

作者: 、痕迹    时间: 2015-3-15 00:36
Ang_dt 是你的陀螺仪采样时间...也就是你角度控制周期...我是2ms控制一次..所以是0.002

7L的图像可以立起来..但是不会很完美...跟踪有点缓慢..
作者: 、痕迹    时间: 2015-3-15 00:40
博雪儿 发表于 2015-3-14 18:36
怎么又两个互补滤波函数?两个都要用么?

一阶互补调整ComFilter_t  二阶互补调整k2

不过我用这个参数立得很完美..你只需要整定陀螺仪的比例因子..如果是数字陀螺仪就更好办了..直接看手册不用整定.

作者: 43380249    时间: 2015-3-15 01:33
留名
作者: 博雪儿    时间: 2015-3-15 13:01
冷技 发表于 2015-3-14 18:12
你好 ,可否再帮我看一下这两个波形可以用吗?感觉陀螺仪的值滤波后有点失真。(红色为加速度计减去零点的值 ...

我比较奇怪这个图纵坐标的值出现了几百甚至上千。。没有换算成角度吗?是加速度直接读出来的值么?

作者: pang576101312    时间: 2015-3-15 14:38
博雪儿 发表于 2015-3-15 13:01
我比较奇怪这个图纵坐标的值出现了几百甚至上千。。没有换算成角度吗?是加速度直接读出来的值么?

换成-90到90误差大死了。一共就180个数,如果你说你用浮点运算,那还不如放大十倍,-900到900.说到底那就是个参数

作者: 冷技    时间: 2015-3-15 19:22
、痕迹 发表于 2015-3-15 00:36
Ang_dt 是你的陀螺仪采样时间...也就是你角度控制周期...我是2ms控制一次..所以是0.002

7L的图像可以立起 ...

谢谢 有空去试一下

作者: 冷技    时间: 2015-3-15 19:25
博雪儿 发表于 2015-3-15 13:01
我比较奇怪这个图纵坐标的值出现了几百甚至上千。。没有换算成角度吗?是加速度直接读出来的值么?

直接读误差小

作者: zbc    时间: 2017-3-27 18:36
、痕迹 发表于 2015-3-14 18:13
float angle_com, angle_dot_com; //外部需要引用的变量
//-------------------------------------------- ...

请问一下两个函数的输入量分别是什么呢?谢谢





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