2012-05-22 11 views
5

Ich arbeite an einer Fahrzeugsteuerung und verwende einen 9DOF Sensor (Beschleunigungsmesser, Magnetometer und Gyroskop). Für den Gierwinkel habe ich ein Diskontinuitätsproblem bei pi rad. (180 Grad). Ich kontrolliere das Fahrzeug mit einem PID-Regler und wenn das Fahrzeug mehr als 180 Grad dreht, ändert sich das Zeichen plötzlich (von 180 bis -180) und das macht den Controller seltsam. Das gleiche Problem tritt auf, wenn es sich um mehr als -180 Grad dreht.Wie man mit der Diskontinuität des Gierwinkels bei 180 Grad umgehen kann

Als Methode verwende ich eine Richtungskosinus-Matrix, um Euler-Winkel zu berechnen. (empfohlene Methode für den Sparkfun-Sensor.)

Meine Frage ist, welche Art von Ansatz sollte ich verwenden? Wie man mit dieser Diskontinuität im Falle der Verwendung eines PID-Reglers zur Steuerung des Gierwinkels umgeht.

+1

Ist diese Frage wirklich darüber, wie 360 ​​hinzufügen? – Eiko

Antwort

0

hatte ich das gleiche Problem und ich tue das folgende:

#define MOD(a) ((a > 180.0) ? (a - 360.0) : ((a < -180.0) ? (a + 360.0) : a)) 

Die Differenz von 2 Winkel einfach wieder verwendet werden kann/+ 180d mit einer solchen Formel -180d.

+0

Für den Bereich -180/+ 180 °, wann gilt diese Bedingung? (a> 180,0). Der Winkel wird nie größer als 180. Habe ich Unrecht? – tarik

0

Ist das Ihr Problem?

After desired angle changes it's sign(ie. 180->-180) 
then suddenly control input(ie. P * error) becomes bigger. 

Zum Beispiel.

-------------------------------- 
| desired | real | error | 
|-----------|--------|---------| 
| 170 | 160 | 10 | 
| -170 | 160 | -330 | 
-------------------------------- 

Wenn Ihr Problem das gleiche ist wie ich verstanden habe, wie wäre es damit? Bevor wir gehen, beachten Sie, dass Es wird angenommen, dass alle Winkelwerte im Bereich von [-pi, pi] sind.

error = desired - real; 
if(error > 180) 
    error = error - 360; 
else if(error < -180) 
    error = error + 360; 
else 
    error = error;//do nothing 

Diese Methode wählt immer eine Richtung, so dass Steuereingang kleiner wird. (Sie wissen, gibt es zwei Möglichkeiten für die Richtung)