Hi!
Also, wenn ich den Copter in einem Gestell habe, wo er sich nur um eine Achse drehen kann ist alles bestens.
Lässt sich gut steuern und bleibt stabil.
Wenn ich ihn jetzt frei fliegen lasse klappt es prinzipiell ganz gut.
Problem ist, dass er relativ stark in eine Richtung geneigt bleibt (Y Achse).
Wenn ich nun etwas zu viel Gas gebe, kippt er um.
Also, ich denke, ich muss die Parameter weiter einstellen.
Aber wie soll ich das am besten Machen, ohne viel zu viele Rotoren zu zerstören?
Ich habe die PID übrigens etwas unkonventionell gelöst, um Fließkommazahlen zu umgehen:
Code:
int16_t PID::Compute(int16_t error)
{
//errSum += (error); //Integralanteil
if ((errSum + error/prescaler) > Imax) //errsum begrenzen
errSum = Imax;
else if ((errSum + error/prescaler) < Imin)
errSum = Imin;
else
errSum += (error /prescaler);
float dErr = (error - lastErr); //Differentialanteil
lastErr = error;
return (int16_t)((error/kp) + (dErr / kd) + (errSum/ki));
}
Code:
pidX.SetParam(420,10000,10); //P, I, D
pidX.SetLimits(-5000,5000);
pidX.SetPrescaler(100);
zum Test war der I Anteil verschwindend gering, der war früher mal höher
Aber Prinzipiell spricht nicht gegen das Prinzip, oder?
mfg
Olaf
Lesezeichen