Was ist der richtige Ansatz, um den Spin-Controller für einen Fußballroboter zu schreiben?


14

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));  
        }
    }
}

correctionist ein Bereich, in dem der Roboter keine Bewegung hat. degreeist eine Zahl zwischen -127 und 128, die vom Kompass zurückgegeben wird. motorSpeedist eine Zahl zwischen 0 und 255, die auf die PWM angewendet wird.


Vermutlich wird diese Routine jedes Mal ausgeführt, wenn der Kompass einen neuen Wert für degree?
Mark Booth

@MarkBooth Ich habe meinen Code in einer Weile (1), so dass er in jedem Zyklus den Wert vom Kompass erhält, der ihn an die Funktion weitergibt, und dann das Ergebnis auf die Motoren anwendet.
Miro Markaravanes

Ich würde untersuchen, welche Art von Controller ein Servo verwendet, da Sie versuchen, das Servoverhalten in der Software zu duplizieren.
Chris Laplante

Ich benutze keine Servos. Ich benutze Schrittmotoren, damit sich der Motor noch nicht so verhält.
Miro Markaravanes

2
Hallo Miro, beim Stapelaustausch ist es besser, Ihre Frage als Antwort auf Fragen in Kommentaren zu bearbeiten, so dass die Kommentare aufgeräumt (gelöscht) werden können, damit sie nicht von der Frage selbst ablenken.
Mark Booth

Antworten:


7

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 correctionWert (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 correctionWert begrenzt sind. Wenn der correctionWert 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.


8

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 ...


1
Danke für deine Antwort. Ich wollte die Antwort akzeptieren, aber ich würde gerne mehr Antworten sehen, also werde ich akzeptieren, wenn es mehr Antworten gibt;)
Miro Markaravanes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.