平衡车站起来但是很抖
我的平衡车用 Arduino UNO 做的,MPU6050,PID 卡尔曼滤波,可是站起来后很抖,我调小了K2 参数也没用,怎么破?
http://player.youku.com/player.php/sid/XMTU4NTA2MjEwOA==/v.swf 贴算法,我帮你用数学方法分析 本帖最后由 pig881 于 2016-5-27 23:27 编辑
GDHack 发表于 2016-5-26 23:15 static/image/common/back.gif
贴算法,我帮你用数学方法分析
void Kalman_Filter(double angle_m,double gyro_m)
{
angle+=(gyro_m-q_bias) * dtt;
Pdot=Q_angle - P - P;
Pdot=- P;
Pdot=- P;
Pdot=Q_gyro;
P += Pdot * dtt;
P += Pdot * dtt;
P += Pdot * dtt;
P += Pdot * dtt;
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;
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;//也许应该用last_angle-angle
}
void pwm_calculate()
{
unsigned longnow = millis(); // 当前时间(ms)
int Time = now - lastTime;
int range_error;
range+=(c1+c2)*0.5;
range*=0.9;
range_error=c1-c2;
range_error_all+=range_error;
wheel_speed=range-last_wheel;
last_wheel=range;
pwm=angle*k1+angle_dot*k2+range*k3+wheel_speed*k4; //use PID tho calculate the pwm
if(pwm>255) //Maximum Minimum Limitations
pwm=255;
if(pwm<-255)
pwm=-255;
c1 = 0;//clean
c2 = 0;
lastTime = now;
}
这个效果已经很不错了!收藏 pig881 发表于 2016-5-27 16:24 static/image/common/back.gif
void Kalman_Filter(double angle_m,double gyro_m)
{
angle+=(gyro_m-q_bias) * dtt;
只贴这两个函数恐怕不够。如果不方便把全部代码贴出来的话,建议你先整理一下算法,用公式或者伪代码表示也可以。 本帖最后由 pig881 于 2016-6-4 00:07 编辑
现在已经可以很稳的平衡了 学习学习学习学习 pig881 发表于 2016-5-28 12:13 static/image/common/back.gif
哦,我以为你只需要看算法,所以我就贴了这两个,全部代码如下:
OK,先研究一下,找到问题第一时间回复你。 估计是滤波的参数问题
PID 和卡尔曼。
算法方面早还给老师了,所以帮不上啥。
页:
[1]