Stellen Sie sich vor, Sie programmieren einen 3-Rad-Fußballroboter. Welche Art von Controller würden Sie zum Drehen verwenden? P? PID?
Das Ziel für diese Steuerung ist, dass der Roboter in einem definierten Winkel (0 Grad) steht und zurückgedreht wird, wenn er von Hand oder einem anderen Roboter gedreht wird.
Ich verwende Schrittmotoren für meinen Roboter und keine Servos, daher muss ich dies in meiner Software implementieren!
Ich habe bereits ein Beispiel für einen P-Regler geschrieben und die Bewegung ist ziemlich gut. Aber ich würde es gerne besser machen, wenn es möglich ist. Der Code lautet wie folgt:
void spinSpeed(int devidedValue, int addedValue, int correction) {
if(degree<correction && degree>-correction) {
motorSpeed = 0;
} else {
if(degree > 0) {
motorSpeed = ((degree)/(devidedValue) + (addedValue));
} else {
motorSpeed = ((degree)/(devidedValue) - (addedValue));
}
}
}
correction
ist ein Bereich, in dem der Roboter keine Bewegung hat.
degree
ist eine Zahl zwischen -127 und 128, die vom Kompass zurückgegeben wird.
motorSpeed
ist eine Zahl zwischen 0 und 255, die auf die PWM angewendet wird.
degree
?Antworten:
Das Wichtige an einem PID- Regelkreis ist, dass jeder Term die Steuerung zu unterschiedlichen Zeitpunkten während einer Bewegung dominieren soll.
Der proportionale Term soll dominieren und ein größeres Drehmoment (oder in Ihrem Fall die Geschwindigkeit) liefern, je weiter Sie von Ihrer Zielposition entfernt sind.
Der abgeleitete Begriff soll während der "Kreuzfahrt" -Phase Ihrer typischen Trapezbewegung dominieren. Es hilft, einen sehr hohen Proportionalitätswert zurückzusetzen und die Beschleunigung durch Ausreißer zu begrenzen, wenn Sie weit von Ihrem Ziel entfernt sind. Es kann jedoch auch dazu beitragen, die Geschwindigkeit zu erhöhen, mit der Sie sich Ihrem Ziel annähern, wenn Sie sich diesem nähern, und der Proportionalitätswert trägt viel weniger bei .
Wenn Sie einen Geschwindigkeitsregler anstelle eines Drehmomentreglers verwenden, ist der abgeleitete Term möglicherweise in Ihrem Geschwindigkeitsregler verborgen und für Ihren PID-Regelkreis nicht direkt zugänglich. Dies kann die Steuerung vereinfachen (normalerweise beschleunigt sie nur so schnell wie möglich auf die gewünschte Geschwindigkeit oder die Höchstgeschwindigkeit, je nachdem, welche niedriger ist), kann sie jedoch auch weniger vorhersehbar machen. Oft kann ein zu aggressiver D- (oder P-) Term dazu führen, dass ein Grenzzyklus erreicht wird (oft fälschlicherweise Resonanz oder Oszillation genannt, weil die Motoren in diesem Zustand brummen oder sogar schreien), obwohl der Grenzzyklus eine viel genauere Beschreibung darstellt ).
Der ganzzahlige Term dient zur Korrektur des verbleibenden stationären Fehlers , dh es besteht ein anhaltender, langfristiger Unterschied zwischen dem Ort, zu dem Sie aufgefordert werden, und dem Ort, an dem Sie sich tatsächlich befinden. Ihr aktueller
correction
Wert (wirklich nur Toleranz) funktioniert wie das Gegenteil eines ganzzahligen Ausdrucks. Er schneidet den Motor vollständig ab, wenn Sie sich innerhalb einer Totzone um die gewünschte Position befinden.Aufgrund dieser Faktoren profitieren Sie nur wenig von der Implementierung eines vollständigen PID-Regelkreises, wenn Sie auch ein Geschwindigkeitsprofil mit unterschiedlichen Beschleunigungs-, Fahrt- und Verzögerungsphasen einplanen.
Bedenken Sie auch, dass das Totband und das Fehlen des I-Terms bedeuten, dass die endgültige Position immer etwas zufällig ist und sich höchstwahrscheinlich unterscheidet, je nachdem, in welche Richtung Sie sich der gewünschten Position nähern. Daher ist Ihre bidirektionale Wiederholbarkeit möglicherweise viel schlechter als die Standardwiederholbarkeit.
Weitere Informationen zum Unterschied zwischen Genauigkeit, Wiederholbarkeit und Auflösung finden Sie in dieser hervorragenden Beschreibung . In Ihrem Fall ist Ihre Auflösung Ihr Kompasssensor, während sowohl die Genauigkeit als auch die Wiederholbarkeit höchstwahrscheinlich durch Ihren
correction
Wert begrenzt sind. Wenn dercorrection
Wert größer als Ihre Kompassauflösung ist, werfen Sie im Gegenzug einen Teil Ihrer Positionsgenauigkeit weg, um in der Lage zu sein Schalten Sie Ihren Motor aus, wenn Sie in der Nähe sind.quelle
Ein PID-Regler ist am besten geeignet. Wenn Sie einen Kompass verwenden, ist es relativ einfach, die Peilung Ihres Roboters zu ermitteln und mit der Peilung zu vergleichen, die Sie erzielen möchten, und einige PID-Tuning-Techniken zu verwenden, um eine reibungslose Drehbewegung zu erzielen Ihre gewünschte Überschrift. Dieser Ansatz kann auch angewendet werden, um sich genau um einen gegebenen Betrag zu drehen.
Ich habe bereits einige Robotik in diesem Bereich getan, das ist das, was wir in unserem Roboter verwendet wird , eine nicht allzu unähnlich Aufgabe zu Ihnen zu tun ...
quelle