|  | roboforum.ruТехнический форум по робототехнике. |  | 



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;
}


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0