Angel71 писал(а):вам не приходило в голову, что кроме вас никто не знает, что там за схема и какой код? гиро/аксель есть? мотором управляется с шим или без? а скорость регулируется? и т.д. или вы считаете, что все с отличием закончили курсы гадалок и на бис вам сейчас подскажут где чего как минимум в коде поменять?
Да, конечно вы не очень-то хорошо угадываете, как мы заметили
. Все же настройка pid регулятора вроде имеет закономерности. Как я уже говорил, я добился некоторой стабилизации, но робот сильно осциллирует.
Может код, относящийся к пид и вправду поможет:
- Код: Выделить всё • Развернуть
double balanceAt=1.31;//radians
float coeffP=5,coeffI=1,coeffD=2,coeffPID=10;
float lastError=0;
float integral=0;
void loop() {
readAverangeAcc();
double actualAngle=comp_filter(getAccAngle(),readAverangeGyroYRate());
long pid=updatePID(actualAngle,balanceAt);
lMotorSpeed=-pid;
rMotorSpeed=-pid;
updateMotors();
lastTime=millis();
delay(10);
}
float updatePID(float current, float target){
float dt=millis()-lastTime;
float error=target-current;
integral+=error*dt;
integral=constrain(integral,-10,10);
float derivative = (error - lastError)*1000/dt;
Serial.print("D:");
Serial.println(derivative);
float output=coeffP*error+coeffI*integral+coeffD*derivative;
lastError=error;
return constrain(coeffPID*output, -255, 255);
}
Заранее спасибо