平衡小车总是在平衡位置来回晃动?求点拨。。
给小车安装上电池后,可能是整体重心不在零度,造成无法稳定在平衡位置,后来加上了一根碳管,用来微调重心,不论怎么调节都无法稳定在零度,总是在一个小范围内来回晃动,晃动频率不大,近似于前后等幅值晃动。。。。。请问各位又遇到锅这类问题没有?
求点拨一二。。。。 本帖最后由 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);
}
或者试试, 引入平衡点自适应的方法吧。 pww999 发表于 2014-3-22 11:42
if(ROutput>3)//右电机--------或者取0
{
digitalWrite(TN3,LOW);
施主的意思是 做个判断 :若是角度在3度(或其他小角度范围)之内就不启动电机,否则启动。。?是么?
lologame 发表于 2014-3-22 12:43
引入平衡点自适应的方法吧。
太高大上的算法 ,搞不定啊。。施主!!! lc125253647 发表于 2014-3-22 14:06
太高大上的算法 ,搞不定啊。。施主!!!
如果真的是重心问题,可以在代码里面自行对重心进行调整。
你有没有用PID?如果用了的话,是用的位置式还是增量式?
你说来回等幅震荡,我怎么有点感觉是PID参数的问题。。。 lologame 发表于 2014-3-22 14:43
如果真的是重心问题,可以在代码里面自行对重心进行调整。
你有没有用PID?如果用了的话,是用的位置式还 ...
我用的位置式PID算法 ,只有陀螺仪部分的角度环,木有引入编码器部分的速度环。。。 lc125253647 发表于 2014-3-22 15:09
我用的位置式PID算法 ,只有陀螺仪部分的角度环,木有引入编码器部分的速度环。。。 ...
我也感觉你用的是位置式,你有没有引入积分抗饱和? lc125253647 发表于 2014-3-22 14:05
施主的意思是 做个判断 :若是角度在3度(或其他小角度范围)之内就不启动电机,否则启动。。?是么?
...
如果你车子前后重量一样的话,这是减少前后摆动最简单有效的方法 lologame 发表于 2014-3-22 15:16
我也感觉你用的是位置式,你有没有引入积分抗饱和?
直立部分只用了PD 没有用到I。。。。 lologame 发表于 2014-3-22 15:16
我也感觉你用的是位置式,你有没有引入积分抗饱和?
角度环只用了PD,没有用到I。。。影响不大吧? 楼主,我在做平衡小车,来回晃两下然后向一个方向突然一个加速就倒了,网上有人说是滤波没做好,你用的什么传感器,怎么滤波的。还有我想请教下怎么样才算是滤波做好了 我也正在研究这个,学习中~ 加油,顶你~ qrytian 发表于 2014-3-23 08:28
楼主,我在做平衡小车,来回晃两下然后向一个方向突然一个加速就倒了,网上有人说是滤波没做好,你用的什么 ...
传感器用的6050,坛子里面6050用的比较多,资料也很多;
滤波之前的做法是加速度用FIR滤波或者均值滤波,角速度用了这样的语句:gyro=0.7*gyro_test+0.3*gyro;//gyro_test是当前采样值,不知道这叫什么滤波。。。
角度融合用的互补算法(一阶的)效果还行,可以站立起来;
后来改用了卡尔曼滤波加融合算法,效果比起互补好多了,用卡尔曼算法 输入的加速度和角速度没有滤波,输出来的角度值和角速度都是滤波后的。。。
lc125253647 发表于 2014-3-23 19:29
传感器用的6050,坛子里面6050用的比较多,资料也很多;
滤波之前的做法是加速度用FIR滤波或者均值滤波, ...
我看有人在计算车轮速度的时候和你的 gyro=0.7*gyro_test+0.3*gyro; 这种滤波一样的,没想明白这是怎么滤波的。
我用卡尔曼,时间还是10ms,但我把dt改为了0.007,滤波效果没看出有什么变化,但是小车能立起来了。有人说dt为时间乘以角度与实际角度的系数,但那是模拟传感器根据比例算的角度,与6050不一样啊。小车站立情况比原来好,我也不知道改的对不对 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;//滤波后的角速度
} lc125253647 发表于 2014-3-24 09:18
//kalman filter
static float angle, angle_dot; //角度 角速度
就是这个dt,你的车现在怎么样了?我打算加入速度环试试 qrytian 发表于 2014-3-24 10:22
就是这个dt,你的车现在怎么样了?我打算加入速度环试试
我的编码器坏了一个,只能用一个凑合着。。。因为370电机尾端没有伸出轴,所以只有将编码器安装在车轮轴上,100ms 采集 到数据只有20左右,加了速度环好像也没有多大改善。。。在平衡位置来回轻微晃动的现象还是有,试着加大P,可以看到来回晃动的幅度明显减小,但是又带来了车轮换向时的剧烈抖动,以为是D过大了,但是减小D 发现小车来回晃动的幅度又变大了,加大D 卧槽 小车又剧烈抖动加强了。。。。真心 被伤了。。。。求点拨 施主 lc125253647 发表于 2014-3-24 19:14
我的编码器坏了一个,只能用一个凑合着。。。因为370电机尾端没有伸出轴,所以只有将编码器安装在车轮轴 ...
兄弟啊,我的车现在刚刚能立十几秒钟就倒,我买了一个电机,结果忘了联轴器。等联轴器呢。我感觉已经不是PID的问题了,原来做飞控PID非常好调的,不需要太细致,我怀疑是滤波或者电机响应不够 qrytian 发表于 2014-3-24 20:51
兄弟啊,我的车现在刚刚能立十几秒钟就倒,我买了一个电机,结果忘了联轴器。等联轴器呢。我感觉已经不是 ...
你买的啥子电机哟?我没有找到尾部带有轴的...我之前也做过四轴,看来都是通道中人啊 。。。 PID没有调节好吧 lc125253647 发表于 2014-3-24 21:54
你买的啥子电机哟?我没有找到尾部带有轴的...我之前也做过四轴,看来都是通道中人啊 。。。 ...
淘宝上买的75元一个,这个,(声明不是做广告啊),http://item.taobao.com/item.htm?id=36580670590。 我的车子刚开始也是这样,后来不断调微分参数,现在基本上一点也不抖了 dengchengmi 发表于 2014-3-28 11:08
我的车子刚开始也是这样,后来不断调微分参数,现在基本上一点也不抖了
你用的是什么电机?多少电压?转速?还有转矩? 给个参照? 直接用pd就可以站起来了?那车子底部应该够重的。加入积分那项吧,没编码盘的话用角度累加或是pwm输出累加。 lc125253647 发表于 2014-3-24 19:14
我的编码器坏了一个,只能用一个凑合着。。。因为370电机尾端没有伸出轴,所以只有将编码器安装在车轮轴 ...
我现在也这样,要么晃,要么抖,唉, 你的问题是:车子在平衡位置来回晃动,有什么解决方法?
以下是我的一己之见,供你参考:
以下状态,基于你已经调好机械重心的情况下,
1、你所用到的是直流减速电机,减速箱里的齿轮会存在一定的间隙,不排除因这种机械间隙引发的晃动。
解决办法之一是:在程序中适当增加PWM输出死区,可以消除这类晃动。
2、PID没调好。
解决方法之一是:重调角度环PD,和速度环PI。
当然还有其他的可能,但是上面两种比较常见,可以先试试,不行再想办法。{:lol:}{:loveliness:} oner 发表于 2014-4-17 17:26
你的问题是:车子在平衡位置来回晃动,有什么解决方法?
以下是我的一己之见,供你参考:
以下状态,基于你 ...
谢谢,我已经用第一种方法解决了,虽然无法完全消除,但是比我预期的好多了。。。{:smile:} {:smile:} {:smile:}
页:
[1]