搜索
bottom↓
回复: 28

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

[复制链接]

出0入0汤圆

发表于 2014-3-22 10:34:44 | 显示全部楼层 |阅读模式
给小车安装上电池后,可能是整体重心不在零度,造成无法稳定在平衡位置,后来加上了一根碳管,用来微调重心,不论怎么调节都无法稳定在零度,总是在一个小范围内来回晃动,晃动频率不大,近似于前后等幅值晃动。。。。。
请问各位又遇到锅这类问题没有?
求点拨一二。。。。

出0入0汤圆

发表于 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);
}




或者试试,

出0入0汤圆

发表于 2014-3-22 12:43:20 | 显示全部楼层
引入平衡点自适应的方法吧。

出0入0汤圆

 楼主| 发表于 2014-3-22 14:05:58 | 显示全部楼层
pww999 发表于 2014-3-22 11:42
if(ROutput>3)//右电机--------或者取0
{
    digitalWrite(TN3,LOW);

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

出0入0汤圆

 楼主| 发表于 2014-3-22 14:06:42 | 显示全部楼层
lologame 发表于 2014-3-22 12:43
引入平衡点自适应的方法吧。

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

出0入0汤圆

发表于 2014-3-22 14:43:52 | 显示全部楼层
lc125253647 发表于 2014-3-22 14:06
太高大上的算法 ,搞不定啊。。施主!!!

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

 楼主| 发表于 2014-3-22 21:42:13 | 显示全部楼层
lologame 发表于 2014-3-22 15:16
我也感觉你用的是位置式,你有没有引入积分抗饱和?

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

出0入0汤圆

 楼主| 发表于 2014-3-22 21:43:18 | 显示全部楼层
lologame 发表于 2014-3-22 15:16
我也感觉你用的是位置式,你有没有引入积分抗饱和?

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

出0入0汤圆

发表于 2014-3-23 08:28:08 | 显示全部楼层
楼主,我在做平衡小车,来回晃两下然后向一个方向突然一个加速就倒了,网上有人说是滤波没做好,你用的什么传感器,怎么滤波的。还有我想请教下怎么样才算是滤波做好了

出0入0汤圆

发表于 2014-3-23 12:12:34 来自手机 | 显示全部楼层
我也正在研究这个,学习中~

出0入0汤圆

发表于 2014-3-23 12:25:10 | 显示全部楼层
加油,顶你~

出0入0汤圆

 楼主| 发表于 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是当前采样值,不知道这叫什么滤波。。。
角度融合用的互补算法(一阶的)效果还行,可以站立起来;

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

出0入0汤圆

发表于 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不一样啊。小车站立情况比原来好,我也不知道改的对不对

出0入0汤圆

 楼主| 发表于 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[2][2] = {{ 1, 0 },
                        { 0, 1 }
                                };//       
static float Pdot[4] ={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[0]=Q_angle - P[0][1] - P[1][0];// Pk-' ?è?é1à???ó2?D-·?2?μ??¢·?
        Pdot[1]=- P[1][1];
        Pdot[2]=- P[1][1];
        Pdot[3]=Q_gyro;
       
        P[0][0] += Pdot[0] * dt;// ??
        P[0][1] += Pdot[1] * dt;
        P[1][0] += Pdot[2] * dt;
        P[1][1] += Pdot[3] * dt;
       
       
        angle_err = angle_m - angle;//角度偏差
       
       
        PCt_0 = C_0 * P[0][0];
        PCt_1 = C_0 * P[1][0];
       
        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[0][1];

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

出0入0汤圆

发表于 2014-3-24 10:22:22 | 显示全部楼层
lc125253647 发表于 2014-3-24 09:18
//kalman filter

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

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

出0入0汤圆

 楼主| 发表于 2014-3-24 19:14:34 | 显示全部楼层
qrytian 发表于 2014-3-24 10:22
就是这个dt,你的车现在怎么样了?我打算加入速度环试试

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-3-25 16:52:17 | 显示全部楼层
PID没有调节好吧

出0入0汤圆

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

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

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2014-4-7 19:05:16 | 显示全部楼层
dengchengmi 发表于 2014-3-28 11:08
我的车子刚开始也是这样,后来不断调微分参数,现在基本上一点也不抖了

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

出0入0汤圆

发表于 2014-4-8 09:32:57 | 显示全部楼层
直接用pd就可以站起来了?那车子底部应该够重的。加入积分那项吧,没编码盘的话用角度累加或是pwm输出累加。

出0入0汤圆

发表于 2014-4-17 17:05:09 来自手机 | 显示全部楼层
lc125253647 发表于 2014-3-24 19:14
我的编码器坏了一个,只能用一个凑合着。。。因为370电机尾端没有伸出轴,所以只有将编码器安装在车轮轴 ...

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

出0入4汤圆

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

出0入0汤圆

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

谢谢,我已经用第一种方法解决了,虽然无法完全消除,但是比我预期的好多了。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 21:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表