Датчики на какой чувствительности работают?
Задержка в цикле 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 писал(а):Тут должно быть два ПИД-регулятора: один для удержания равновесия, другой для удержания робота в заданной точке (что бы не укатывался). Результаты обоих ПИД суммируются. Разумеется, на колесах должны быть энкодеры.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25