Датчики на какой чувствительности работают?
Задержка в цикле 10мсек сильно нужна?
			
		|  | roboforum.ruТехнический форум по робототехнике. |  | 


SkyStorm писал(а):Датчики на какой чувствительности работают?
Задержка в цикле 10мсек сильно нужна?







float lastError=0;
float integral=0;
float updatePID(float current, float target){
   float dt=millis()-lastTime;
  
   float error=target-current;
        if(error>0.01){
        integral+=error*dt/1000;
        }
        integral=constrain(integral,-255,255);
   float derivative = (error - lastError)*1000/dt;
   float output=coeffP*error+coeffI*integral+coeffD*derivative;
   lastError=error;
   return constrain(coeffPID*output, -255, 255);
}

Spin7ion писал(а):Скажите, а код pid вообще правильный?
- Код: Выделить всё • Развернуть
float lastError=0;
float integral=0;
float updatePID(float current, float target){
float dt=millis()-lastTime;
float error=target-current;
if(error>0.01){
integral+=error*dt/1000;
}
integral=constrain(integral,-255,255);
float derivative = (error - lastError)*1000/dt;
float output=coeffP*error+coeffI*integral+coeffD*derivative;
lastError=error;
return constrain(coeffPID*output, -255, 255);
}

vvk писал(а):Тут должно быть два ПИД-регулятора: один для удержания равновесия, другой для удержания робота в заданной точке (что бы не укатывался). Результаты обоих ПИД суммируются. Разумеется, на колесах должны быть энкодеры.

vvk писал(а):Тут должно быть два ПИД-регулятора: один для удержания равновесия, другой для удержания робота в заданной точке (что бы не укатывался). Результаты обоих ПИД суммируются. Разумеется, на колесах должны быть энкодеры.




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