lc125253647 发表于 2014-3-22 10:34:44

平衡小车总是在平衡位置来回晃动?求点拨。。

给小车安装上电池后,可能是整体重心不在零度,造成无法稳定在平衡位置,后来加上了一根碳管,用来微调重心,不论怎么调节都无法稳定在零度,总是在一个小范围内来回晃动,晃动频率不大,近似于前后等幅值晃动。。。。。
请问各位又遇到锅这类问题没有?
求点拨一二。。。。

pww999 发表于 2014-3-22 11:42:36

本帖最后由 pww999 于 2014-3-22 11:45 编辑

if(ROutput>3)//右电机--------或者取0
{
    digitalWrite(TN3,LOW);
    digitalWrite(TN4,HIGH);
analogWrite(ENB,min(255,abs(ROutput)));
}
else if(ROutput<-3)//-------或者取0
{
    digitalWrite(TN3,HIGH);
    digitalWrite(TN4,LOW);
         analogWrite(ENB,min(255,abs(ROutput)));
}
else   //在这大于3或者小于3时才发动电机,
{
    digitalWrite(TN3, LOW);
    digitalWrite(TN4, LOW);
    analogWrite(ENB,0);
}




或者试试,

lologame 发表于 2014-3-22 12:43:20

引入平衡点自适应的方法吧。

lc125253647 发表于 2014-3-22 14:05:58

pww999 发表于 2014-3-22 11:42
if(ROutput>3)//右电机--------或者取0
{
    digitalWrite(TN3,LOW);


施主的意思是 做个判断 :若是角度在3度(或其他小角度范围)之内就不启动电机,否则启动。。?是么?

lc125253647 发表于 2014-3-22 14:06:42

lologame 发表于 2014-3-22 12:43
引入平衡点自适应的方法吧。

太高大上的算法 ,搞不定啊。。施主!!!

lologame 发表于 2014-3-22 14:43:52

lc125253647 发表于 2014-3-22 14:06
太高大上的算法 ,搞不定啊。。施主!!!

如果真的是重心问题,可以在代码里面自行对重心进行调整。
你有没有用PID?如果用了的话,是用的位置式还是增量式?
你说来回等幅震荡,我怎么有点感觉是PID参数的问题。。。

lc125253647 发表于 2014-3-22 15:09:12

lologame 发表于 2014-3-22 14:43
如果真的是重心问题,可以在代码里面自行对重心进行调整。
你有没有用PID?如果用了的话,是用的位置式还 ...

我用的位置式PID算法 ,只有陀螺仪部分的角度环,木有引入编码器部分的速度环。。。

lologame 发表于 2014-3-22 15:16:55

lc125253647 发表于 2014-3-22 15:09
我用的位置式PID算法 ,只有陀螺仪部分的角度环,木有引入编码器部分的速度环。。。 ...

我也感觉你用的是位置式,你有没有引入积分抗饱和?

pww999 发表于 2014-3-22 15:37:49

lc125253647 发表于 2014-3-22 14:05
施主的意思是 做个判断 :若是角度在3度(或其他小角度范围)之内就不启动电机,否则启动。。?是么?
...

如果你车子前后重量一样的话,这是减少前后摆动最简单有效的方法

lc125253647 发表于 2014-3-22 21:42:13

lologame 发表于 2014-3-22 15:16
我也感觉你用的是位置式,你有没有引入积分抗饱和?

直立部分只用了PD 没有用到I。。。。

lc125253647 发表于 2014-3-22 21:43:18

lologame 发表于 2014-3-22 15:16
我也感觉你用的是位置式,你有没有引入积分抗饱和?

角度环只用了PD,没有用到I。。。影响不大吧?

qrytian 发表于 2014-3-23 08:28:08

楼主,我在做平衡小车,来回晃两下然后向一个方向突然一个加速就倒了,网上有人说是滤波没做好,你用的什么传感器,怎么滤波的。还有我想请教下怎么样才算是滤波做好了

denjackson 发表于 2014-3-23 12:12:34

我也正在研究这个,学习中~

鼻儿眼睛花 发表于 2014-3-23 12:25:10

加油,顶你~

lc125253647 发表于 2014-3-23 19:29:21

qrytian 发表于 2014-3-23 08:28
楼主,我在做平衡小车,来回晃两下然后向一个方向突然一个加速就倒了,网上有人说是滤波没做好,你用的什么 ...

传感器用的6050,坛子里面6050用的比较多,资料也很多;
滤波之前的做法是加速度用FIR滤波或者均值滤波,角速度用了这样的语句:gyro=0.7*gyro_test+0.3*gyro;//gyro_test是当前采样值,不知道这叫什么滤波。。。
角度融合用的互补算法(一阶的)效果还行,可以站立起来;

后来改用了卡尔曼滤波加融合算法,效果比起互补好多了,用卡尔曼算法 输入的加速度和角速度没有滤波,输出来的角度值和角速度都是滤波后的。。。

qrytian 发表于 2014-3-23 21:49:34

lc125253647 发表于 2014-3-23 19:29
传感器用的6050,坛子里面6050用的比较多,资料也很多;
滤波之前的做法是加速度用FIR滤波或者均值滤波, ...

我看有人在计算车轮速度的时候和你的      gyro=0.7*gyro_test+0.3*gyro;    这种滤波一样的,没想明白这是怎么滤波的。
我用卡尔曼,时间还是10ms,但我把dt改为了0.007,滤波效果没看出有什么变化,但是小车能立起来了。有人说dt为时间乘以角度与实际角度的系数,但那是模拟传感器根据比例算的角度,与6050不一样啊。小车站立情况比原来好,我也不知道改的对不对

lc125253647 发表于 2014-3-24 09:18:37

qrytian 发表于 2014-3-23 21:49
我看有人在计算车轮速度的时候和你的      gyro=0.7*gyro_test+0.3*gyro;    这种滤波一样的,没想明白这 ...

//kalman filter

static float angle, angle_dot;                 //角度 角速度
static float Q_angle=0.001, Q_gyro=0.003, R_angle=0.5, dt=0.01;   //固定参数
static float P = {{ 1, 0 },
                        { 0, 1 }
                                };//       
static float Pdot ={0,0,0,0};
static char C_0 = 1;
static 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;//你说的dt 就是这个吧,我直接理解成采样时间,我采样时2ms,所以就是0.002
       
        Pdot=Q_angle - P - P;// Pk-' ?è?é1à???ó2?D-·?2?μ??¢·?
        Pdot=- P;
        Pdot=- P;
        Pdot=Q_gyro;
       
        P += Pdot * dt;// ??
        P += Pdot * dt;
        P += Pdot * dt;
        P += Pdot * dt;
       
       
        angle_err = angle_m - angle;//角度偏差
       
       
        PCt_0 = C_0 * P;
        PCt_1 = C_0 * P;
       
        E = R_angle + C_0 * PCt_0;
       
        K_0 = PCt_0 / E;//Kk
        K_1 = PCt_1 / E;
       
        t_0 = PCt_0;
        t_1 = C_0 * P;

        P -= K_0 * t_0;//???
        P -= K_0 * t_1;
        P -= K_1 * t_0;
        P -= K_1 * t_1;
       
       
        angle        += K_0 * angle_err;//滤波后的角度值
        q_bias        += K_1 * angle_err;//??
        angle_dot = gyro_m-q_bias;//滤波后的角速度
}

qrytian 发表于 2014-3-24 10:22:22

lc125253647 发表于 2014-3-24 09:18
//kalman filter

static float angle, angle_dot;                 //角度 角速度


就是这个dt,你的车现在怎么样了?我打算加入速度环试试

lc125253647 发表于 2014-3-24 19:14:34

qrytian 发表于 2014-3-24 10:22
就是这个dt,你的车现在怎么样了?我打算加入速度环试试

我的编码器坏了一个,只能用一个凑合着。。。因为370电机尾端没有伸出轴,所以只有将编码器安装在车轮轴上,100ms 采集 到数据只有20左右,加了速度环好像也没有多大改善。。。在平衡位置来回轻微晃动的现象还是有,试着加大P,可以看到来回晃动的幅度明显减小,但是又带来了车轮换向时的剧烈抖动,以为是D过大了,但是减小D 发现小车来回晃动的幅度又变大了,加大D 卧槽 小车又剧烈抖动加强了。。。。真心 被伤了。。。。求点拨 施主

qrytian 发表于 2014-3-24 20:51:33

lc125253647 发表于 2014-3-24 19:14
我的编码器坏了一个,只能用一个凑合着。。。因为370电机尾端没有伸出轴,所以只有将编码器安装在车轮轴 ...

兄弟啊,我的车现在刚刚能立十几秒钟就倒,我买了一个电机,结果忘了联轴器。等联轴器呢。我感觉已经不是PID的问题了,原来做飞控PID非常好调的,不需要太细致,我怀疑是滤波或者电机响应不够

lc125253647 发表于 2014-3-24 21:54:55

qrytian 发表于 2014-3-24 20:51
兄弟啊,我的车现在刚刚能立十几秒钟就倒,我买了一个电机,结果忘了联轴器。等联轴器呢。我感觉已经不是 ...

你买的啥子电机哟?我没有找到尾部带有轴的...我之前也做过四轴,看来都是通道中人啊 。。。

木君之上 发表于 2014-3-25 16:52:17

PID没有调节好吧

qrytian 发表于 2014-3-25 17:02:51

lc125253647 发表于 2014-3-24 21:54
你买的啥子电机哟?我没有找到尾部带有轴的...我之前也做过四轴,看来都是通道中人啊 。。。 ...

淘宝上买的75元一个,这个,(声明不是做广告啊),http://item.taobao.com/item.htm?id=36580670590。

dengchengmi 发表于 2014-3-28 11:08:21

我的车子刚开始也是这样,后来不断调微分参数,现在基本上一点也不抖了

lc125253647 发表于 2014-4-7 19:05:16

dengchengmi 发表于 2014-3-28 11:08
我的车子刚开始也是这样,后来不断调微分参数,现在基本上一点也不抖了

你用的是什么电机?多少电压?转速?还有转矩? 给个参照?

990998945 发表于 2014-4-8 09:32:57

直接用pd就可以站起来了?那车子底部应该够重的。加入积分那项吧,没编码盘的话用角度累加或是pwm输出累加。

木君之上 发表于 2014-4-17 17:05:09

lc125253647 发表于 2014-3-24 19:14
我的编码器坏了一个,只能用一个凑合着。。。因为370电机尾端没有伸出轴,所以只有将编码器安装在车轮轴 ...

我现在也这样,要么晃,要么抖,唉,

oner 发表于 2014-4-17 17:26:59

你的问题是:车子在平衡位置来回晃动,有什么解决方法?
以下是我的一己之见,供你参考:
以下状态,基于你已经调好机械重心的情况下,
1、你所用到的是直流减速电机,减速箱里的齿轮会存在一定的间隙,不排除因这种机械间隙引发的晃动。
解决办法之一是:在程序中适当增加PWM输出死区,可以消除这类晃动。
2、PID没调好。
解决方法之一是:重调角度环PD,和速度环PI。
当然还有其他的可能,但是上面两种比较常见,可以先试试,不行再想办法。{:lol:}{:loveliness:}

lc125253647 发表于 2014-4-17 18:45:40

oner 发表于 2014-4-17 17:26
你的问题是:车子在平衡位置来回晃动,有什么解决方法?
以下是我的一己之见,供你参考:
以下状态,基于你 ...

谢谢,我已经用第一种方法解决了,虽然无法完全消除,但是比我预期的好多了。。。{:smile:} {:smile:} {:smile:}
页: [1]
查看完整版本: 平衡小车总是在平衡位置来回晃动?求点拨。。