Технический форум по робототехнике.
Spin7ion писал(а):Скажите, а код pid вообще правильный?
Spin7ion писал(а):if(error>0.01){
integral+=error*dt/1000;
}
Spin7ion писал(а):Скорость регулируется PID регулятором, зависит от отклонения от положения равновесия. Разве не так надо?
balanceAt = updatePID(last_speed, speedAt);
pid=updatePID(actualAngle,balanceAt);
lMotorSpeed=-pid;
rMotorSpeed=-pid;
last_speed=-pid;
float coeffP=80,coeffI=30,coeffD=8;
float prevError=0;
float prevError2=0;
float lastPid=0;
float updatePID(float current, float target){
// float dt=millis()-lastTime;
float error=target-current;
float ret=lastPid+coeffP*(error-prevError)+coeffI*(error+prevError)/2+coeffD*(error-2*prevError+prevError2);
ret=constrain(ret, -255, 255);
lastPid=ret;
prevError2=prevError;
prevError=error;
return ret;
}