Ich arbeite am Bau eines Linienfolger-Roboters und möchte seine Leistung optimieren. Es wurde vorgeschlagen, einen PID-Algorithmus zu verwenden. Ich habe viel über PID gelesen, bin aber etwas verwirrt in Bezug auf Folgendes:
Ich habe den error_value mit berechnet. Aber hinsichtlich der Änderung der Motordrehzahl bin ich verwirrt, was beim Vergleich die Differenz (dh Stromposition - Sollwert) oder der Fehlerwert zu verwenden ist. Das soll ich benutzen
if (difference > 0)
{ //code for changing appropriate motor's speed using error_value }
oder
if (error_value > 0)
{ //code for changing appropriate motor's speed using error_value }
es auch einen bestimmten Bereich für die Werte der Konstanten , und ? Ich benutze einen Differentialroboter für meinen Linienfolger.k i k d
Ich würde mich auch freuen, wenn mir jemand einen anderen erweiterten Optimierungsalgorithmus zur Verbesserung des Linienfolgerroboters vorschlagen würde.
quelle
Antworten:
Wenn Sie eine PID-Schleife zum Lenken mithilfe der Linienverfolgung verwenden, ist Ihr Sollwert immer der gleiche. Sie möchten immer, dass sich die Linie in Bezug auf den Roboter in derselben Position befindet, beispielsweise in der Mitte Ihres Sensors.
Wenn Ihr Leitungssensor also einen Wert von -1 bis 1 ausgibt, wobei 0 die Mitte des Sensors ist, möchten Sie, dass Ihr Sollwert Null ist (und das Zurücklesen des Sensors und die Differenz gleich sind). Wenn Ihr Liniensensor einen Wert von 0 bis 10 ausgibt, möchten Sie, dass Ihr Sollwert 5 beträgt (und Ihr Sensor zurückliest und die Differenz unterschiedlich ist).
Da Sie lenken, indem Sie die Räder so einstellen, dass sie sich mit unterschiedlichen Geschwindigkeiten drehen, und dann einer Linie mit konstanter Geschwindigkeit reibungslos folgen, möchten Sie wahrscheinlich die Geschwindigkeiten für beide Räder basierend auf dem Fehler anpassen. Wenn Sie beispielsweise nach links abbiegen müssen, um auf der Linie zu bleiben, verlangsamen Sie das linke Rad und beschleunigen das rechte Rad. Je mehr Sie drehen müssen, desto mehr müssen Sie das Innenrad verlangsamen und desto mehr müssen Sie das Außenrad beschleunigen.
Betrachten Sie die Situation, in der Sie radians nach links drehen müssen, um den Fehler zu korrigieren, und Ihre aktuelle Geschwindigkeit ist :e S 0θ e S0
Ihr linkes Rad muss also mit und Ihr rechtes Rad muss mit .S R = ( r + b ) θSL=rθ SR=(r+b)θ
Um die gleiche Gesamtgeschwindigkeit aufrechtzuerhalten , benötigen Sie , sodass das linke Rad mit während das rechte Rad fahren muss bei .S 0 = ( r + b / 2 ) θ S L = S 0 - ( b / 2 ) θ S R = S 0 + ( b / 2 ) θS0 S0=(r+b/2)θ SL=S0−(b/2)θ SR=S0+(b/2)θ
Wenn Ihr Fehler gegen Null geht, tendieren auch die Drehzahlen jedes Motors zueinander. Wenn der Fehler zunimmt, nehmen auch die Geschwindigkeitsunterschiede zu.
Möglicherweise muss sich Ihr Innenrad sogar rückwärts drehen, wenn Ihr Sensor Ihnen mitteilt, dass die Linie enger gekrümmt ist als der Abstand zwischen Ihren Rädern. Dies sind Komplikationen, die Sie Schritt für Schritt durcharbeiten können, wenn Ihre Steuerung jedoch komplexer wird.
Da Ihr Fehler sowohl positive als auch negative Werte hat (um das Kontinuum von außerhalb der Skala links ... zu weit links ... auf der Linie ... zu weit rechts ... außerhalb der Skala rechts darzustellen, sollten Sie dies tun Sie müssen nie fragen, ob
if
der Fehler positiv oder negativ ist. Sie sollten nur neue Werte basierend auf dem Fehlerwert berechnen, da ein positiver und ein negativer Wert entgegengesetzte und symmetrische Auswirkungen auf die Motoren haben sollten.Beachten Sie, dass Sie bei der Zeilenverfolgung möglicherweise nur mit dem Proportional-Gain-Term davonkommen können (dh die anderen Terme bei Null belassen). Durch die Implementierung eines Derivat-Terms können Sie den Proportional-Gain-Term möglicherweise höher anheben, um ein reaktionsfähigeres System zu erhalten. Ein integraler Term hilft jedoch wahrscheinlich nicht weiter. Die Tatsache, dass der Fehler größer wird, wenn Ihr Roboter in die falsche Richtung geht, bedeutet, dass die physischen Bewegungen Ihres Roboters ohnehin wie ein integraler Begriff wirken.
Die spezifischen Werte von P, D und I werden durch die Reaktionsfähigkeit Ihres Systems bestimmt. Allgemeine Hinweise zum Einstellen von PID-Parametern finden Sie in meiner und anderen Antworten zu Was sind gute Strategien zum Einstellen von PID-Schleifen?
quelle
Vielleicht möchten Sie diese Frage zum Einstellen von PIDs lesen .
Es hört sich so an, als würden Sie die Rolle
error
dieser Berechnung verwirren . Die PID-Gleichung nimmt die Fehlermessung (Istposition - gewünschte Position) und bestimmt, wie viel "Reaktion" im Regler befohlen werden soll (z. B. wie viel Kraft).Anstatt zu sagen
if (error_value > 0) { }
, sollten Sie so etwas sagenresponse = get_PID_calculation(error_value)
. Abhängig von der Konstruktion Ihres spezifischen Fahrzeugs wird diese Antwort als Drosselklappenbetrag, Lenkung als gewünschter Winkel oder eine andere Steuereingabe an den Antriebsmotor gesendet.quelle