Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

Ihrem Roboter die Mobilitätssteuerung eines echten Mars Rover geben: Teil 1

Roboter, insbesondere die Variante mit Rädern, können in zwei Klassen eingeteilt werden: solche, die ausschließlich durch Erkennung navigieren und Hindernissen aus dem Weg gehen, und solche, die sich entlang eines vorgezeichneten Wegs bewegen und eine interne elektronische Karte dafür verwenden. Die meisten mobilen „Hobby“-Roboter neigen dazu, nur eine Hinderniserkennung zu verwenden. Das ist eine grob vereinfachende Sicht der Dinge und beruht auf der Idee, dass die Bewegung mit dem Vermeiden von Hindernissen einfacher zu programmieren ist und mehr Spaß macht als die genaue Bewegung auf einem vorgezeichneten Kurs.

Mobilitätssteuerung

Ein „professioneller“ Roboter, zum Beispiel der Mars-Rover Curiosity muss präzise navigieren und gleichzeitig größeren Steinen und kleinen Kratern aus dem Weg gehen.

Mars_rover1_6cf614bb787b064157b411df30c3f60a33383cde.jpg

Um eine Vorstellung zu entwickeln, wie komplex eine Mobilitäts-Hardware/-Software werden kann, sollten Sie einen Blick auf das folgende Dokument zum Mobilitätssystem der Vorgänger von Curiosity werfen, das mit Mars Exploration Rovers Opportunity und Spirit betitelt ist. Abbildung 2 auf Seite 3 dieses Dokuments beschreibt das grundlegende Navigationssystem. Dieser Artikel und der folgende beschreiben, was in jenem Block mit der Kennzeichnung MOT vor sich geht und wie (und warum) die Funktionalität auf Basis des PID-Algorithmus auch auf einem weniger exotischen Roboter auf dem Planeten Erde implementiert werden kann.

PID-Steuerung

Das Grundprinzip der PID-Steuerung ist sehr leicht zu verstehen und kann auf ein beliebiges System angewendet werden, das über ein elektromechanisches Stellglied (zum Beispiel einen Motor) verfügt und das mit einer bestimmten Geschwindigkeit gefahren oder an eine exakte Position bewegt werden muss. Die zusätzlich benötigte Hardware besteht aus einem Sensor, der Daten über die tatsächliche Geschwindigkeit oder Position des Stellglieds bereitstellt, und aus einer Prozessoreinheit zur Ausführung des Steuerungsalgorithmus. Der Prozessor vergleicht den gewünschten mechanischen Ausgangswert (Sollwert) mit dem gemessenen Istwert und generiert ein geändertes Steuersignal, um den Unterschied (Fehler) auszugleichen. Dieser Algorithmus ist jedoch nicht auf bewegliche Systeme beschränkt. Er kann gleichermaßen wirksam sicherstellen, dass ein bestimmter Prozess bei einer exakten Temperatur aufrechterhalten oder die Flüssigkeit in einem Tank stets auf einer bestimmten Stufe gehalten wird. Ich bleibe hier bei der Motorsteuerung.

Warum benötigt mein kleiner Roboter Mobilitätssteuerung?

Hobby-Roboter haben oft das „Buggy“-Format mit zwei getrennt voneinander angesteuerten Rädern, auf jeder Seite des Chassis eines, und mit einem Rollrad an einen Ende oder an beiden Enden. Denken Sie einmal an das grundlegendste Erfordernis: dass ein solcher Roboter eine festgelegte Strecke in gerader Linie zurücklegen soll. Hört sich ziemlich einfach an, oder? Leider sind aber zwei Dinge notwendig, damit das überhaupt passieren kann:

  1. Beide Räder müssen sich mit genau der gleichen Geschwindigkeit drehen und
  2. es muss an beiden Rädern einen Sensor geben, der Aufschluss über die zurückgelegte Strecke geben kann.

Die Erfüllung der Anforderung (1) ist nicht einfach, da sich zwei scheinbar identische Motoren mit demselben Input wahrscheinlich trotzdem mit unterschiedlichen Geschwindigkeiten drehen. Wenn das aber der Fall ist, bewegt sich Ihr Roboter in einem Bogen statt geradeaus. Deshalb brauchen wir die Rückmeldung eines Sensors für die Drehung des Rades, der in einem geschlossenen Rückführungskreis arbeitet. In Bezug auf unseren Buggy wird eine eigener Rückführungskreis für jedes Rad gebraucht. Glücklicherweise können die an den Rädern angebrachten Sensoren auch gleich Daten liefern, mit denen die von jedem Rad zurückgelegte Strecke berechnet werden kann. Damit wird auch Anforderung (2) berücksichtigt.

PID-Steuerung in der Theorie

PID steht für „Proportional-Integral-Differential“. Damit werden die drei mathematischen Prozesse beschrieben, die in einem Closed-Loop-Steuerungssystem auf ein Fehlerrückmeldungssignal angewendet werden und einen Faktor liefern, der auf die Korrektur dieses Fehlers abzielt. Sehen wir uns diesen Algorithmus in all seiner Differential/Integral-Berechnungspracht an:

PID_blog_2_b76b5cf1bf8d4f3fe24b3cf187f54756dadf95e0.png

Dabei ist der erste Term die Komponente für die Proportional-Rückmeldung, der zweite für die Integral- und der dritte für die Differential-Rückmeldung. e(t) ist die Differenz zwischen dem gewünschten Ausgangswert (Sollwert) und dem tatsächlichen Ausgangswert. c(t) ist der aktualisierte Steuerausgang für das Stellglied.

Ein Closed-Loop-Steuersystem, das auf alle drei Terme zurückgreift, sieht folgendermaßen aus (Abb. 1):

PID_blog_11_32080f6d05e05ec5ab9d7d53fe229585b8fe0934.png

Für mein Beispiel eines mobilen Roboters ist das Stellglied ein sich beständig drehender Servomotor und der Sensor ist ein reflektierter Infrarotstrahler, der mit Schlitzen im Laufrad arbeitet. Diese Art Sensor wird häufig als Tachometer bezeichnet und leitet die Daten zur tatsächlichen Rotationsgeschwindigkeit des Rads als Impulsfolge mit variabler Rate weiter: Je höher die Geschwindigkeit, desto schneller die Pulsfrequenz. Der Code des Steuerprogramms vergleicht diese tatsächliche Geschwindigkeit mit dem gewünschten Wert („Sollwert“) und die Differenz beschreibt den Fehlereingang e(t) für den PID-Algorithmus. Das Ergebnis ist ein Steuerausgang c(t), der den Motor mit einem Wert ansteuert, mit dem der Fehler (im Endeffekt) auf Null reduziert wird. Für die drei Konstanten KP, KI und KD werden in der Regel zunächst geschätzte (geratene) Werte vorgegeben, bevor sie in einem Simulationsprogramm oder durch die eigentliche Systemhardware optimiert werden. Der entsprechende Prozess wird als „Tuning“ bezeichnet.

PID-Steuerung in der Praxis

Also, ich möchte wetten, dass Sie sich nicht gerade auf das Codieren von Integration und Differenzierung für den Echtzeitbetrieb freuen. Glücklicherweise gibt es keinen Grund zur Panik, denn die oben aufgeführte Formel ist für Dauerbetrieb vorgesehen, aber weil es sich um eine „digitale“ Anwendung handelt, arbeiten wir mit Daten, die in diskreten Intervallen erfasst werden. Besser noch: Je nach „Straffheit“ der erforderlichen Steuerung kann es möglich sein, auf einen oder beide Terme, I und D, zu verzichten. Um eine Entscheidung darüber zu treffen, wie viel vom kompletten PID-Algorithmus für eine bestimmte Aufgabe notwendig ist, muss der Beitrag jedes Terms verstanden werden.

Der proportionale (oder Zunahme-)Term

Der P-Term ist wesentlich und am einfachsten zu verstehen und zu implementieren: Sein Beitrag für das Steuersignal ist ein Proportionalwert, der von KP bestimmt wird: vom gemessenen Fehler. Deshalb: KP < 1. Warum aber nicht KP = 1 setzen und den gesamten Fehler auf einmal eliminieren? Das Problem ist, dass die Elektronik ein Fehlersignal viel schneller in ein neu überarbeitetes Steuersignal ummünzen kann, als das mechanische System in der Lage ist, auf die Änderung zu reagieren. Das Ergebnis kann ein beständiges Pendeln sein, bei dem der Motor beschleunigt und wieder abbremst, über und unter dem Sollwert. Deshalb wird in jedem Intervall nur ein Teil des Fehlers zurückgespeist und die Geschwindigkeit langsam zum Sollwert reguliert. Andererseits: Wenn die Rückgabe zu klein ist, dauert es sehr lange, bevor die erforderliche Geschwindigkeit nach dem Aktivieren erreicht wird. Für das zeitdiskrete System deshalb:

CP(n) = KP x E(n)

Beachten Sie, dass das Steuersignal gleichzeitig mit dem Fehler auf Null absinkt, was irgendwie unsinnig ist. Es gibt zwei Möglichkeiten um das Problem herum. Erstens besteht die Möglichkeit herauszufinden, welcher Steuereingang für die gewünschte vorgegebene Geschwindigkeit erforderlich ist, indem die Hardware im „Open-Loop“-Verfahren betrieben und anschließend dieser „Referenzwert“ als Konstante in die oben aufgeführte Gleichung mit einbezogen wird. Die zweite Möglichkeit besteht darin, den unten beschriebenen Integral-Term hinzuzufügen, der für die automatische Annäherung an den Zielwert sorgt.

Der Integral (oder Reset-)Term

Die Integration des Fehlersignals liefert einen Wert für den kumulierten Fehler über das Zeitintervall t. Wenn kein Steuerreferenzeingang wie oben beschrieben vorhanden ist, sollte der Wert vom Beginn an steigen, bis der Sollwert erreicht ist. Normalerweise ist es die Funktion des Terms, einen festen Fehler (Offset) in der Sensormessung auszugleichen. Wenn KI zu groß ist, kann dies zu Instabilität führen. Im zeitdiskreten System reduziert sich die Mathematik auf eine einfache Addition bzw. eine Akkumulation:

A(n) = A(n-1) + E(n)     wobei A(n) = akkumulierter Fehler

CI(n) = KI x A(n)

Der Differential- (oder Raten-)Term

Jetzt haben wir da eine vollständig optionale Komponente, die die Leistung erhöht, indem die transiente Oszillation bzw. das „Klingeln“ reduziert wird, das bei hohen Werten von KP und/oder KIauftritt. Dieser Term misst die Änderungsrate des Ausgangs und reduziert das Steuersignal, wenn der erstgenannte Wert in der Nähe des Sollwerts kommt. Mit genau dem richtigen Wert von KD schießt der Ausgang nicht über das Ziel hinaus und verursacht keine übermäßige Korrektur. Daher erhalten wir eine zunächst stärkere Steuerreaktion bei plötzlichen Änderungen, die allmählich nachlässt, wenn der Fehler sich dem Nullwert nähert. Der D-Term kann zum Beispiel die Reaktion eines Systems auf krasse Änderungen des Sollwerts verbessern, allerdings können sich aufgrund der Störempfindlichkeit im Rückkopplungssignal Probleme ergeben. In der Praxis stellt sich der unangenehm aussehende Differential-Term als einfache Subtraktion des aktuellen Fehlerwerts vom vorherigen Fehlerwert dar:

CD(n) = KD x (E(n-1) – E(n))

Mit anderen Worten: Diese Steuerkomponente ist positiv, wenn sich der Fehler bessert, wodurch die Wirkung des P- und des I-Terms verstärkt wird. Sollte der erfasste Ausgang den Sollwert überschreiten, wird der D-Term negativ, wodurch der Gesamtsteuereingang verringert wird, bis der Fehler erneut abnimmt.

Die verschiedenen Permutationen von P, I und D

Der PID-Steueralgorithmus muss nicht unbedingt in seiner Gesamtheit verwendet werden. Welche Permutation der drei Terme für eine bestimmte Anwendung verwendet wird, muss vom Konstrukteur abhängig von den Eigenschaften des zu steuernden Systems bestimmt werden. Zwei Dinge sind zu berücksichtigen:

  1. Wie schnell muss das System zum Beispiel auf eine plötzliche Erhöhung des Fehlers beim Start und bei Änderung des Sollwerts mit einem Lenkbefehl reagieren? Das ist die „kurzzeitige“ Reaktion.
  2. Wie dicht muss der Sollwert erreicht werden? Das ist die „konstante“ Reaktion.

Die Leistungskurven einiger häufig verwendeter Kombinationen der P-, I- und D-Terme sind in Abb. 2 dargestellt. Die blaue Kurve zeigt in jedem Fall den tatsächlichen Ausgangsstatus (Geschwindigkeit, Position, Temperatur usw.) relativ zum gewünschten Sollwert (rot gepunktete Linie). Nehmen wir an, die Kurve stellt die Geschwindigkeit eines Motors im Vergleich mit der Zeit t dar, mit einer Aktivierung bei t = 0.

PID_blog_31_d1022596fd8b6254fefa6601287570e552980c51.png

(a) Nur Proportional mit einer festen Steuerreferenz. Die Referenz wird geschätzt oder ein Wert wird durch Experimentieren ermittelt. Ein großer KP-Faktor sorgt für einen schnellen Anstieg aus dem Ruhezustand, aber der Nachteil ist ein hohes Überschreiten des Sollwerts und viel „Klingeln“. Ein Fehler in der Referenzschätzung belässt auch die konstante Geschwindigkeit ein bisschen unter dem angeforderten Sollwert.

(b) Proportional und Integral. Der gleiche KP-Wert wird beibehalten, aber durch den Austausch der festen Referenz mit dem Integral-Term erreichen wir irgendwann den Sollwert, allerdings bei noch höheren Überschreitungen als beim ersten Mal.

(c) Proportional, Integral und Differential. In der Theorie geschieht angesichts des genau richtigen Werts für KD etwas „Magisches“: Das Klingeln wird fast vollständig eliminiert und Konstanz wird in sehr kurzer Zeit erreicht.

Tuning der Schleife

Die Mathematik ist einfach und ein einfacher Controller für einen mobilen Roboter kann auf einer preiswerten Mikrocontrollerplatine wie dem Arduino betrieben werden. Der schwierige Teil ist die Auswahl der Werte für die K-Faktoren. Erfahrung spielt eine große Rolle, wenn die „manuelle“ Abstimmung versucht wird. Manchmal kann das System als „Open-Loop“ ohne Berücksichtigung einer Rückkopplung betrieben werden, um einen Eindruck von den Eigenschaften zu bekommen. Simulationen können ausgeführt und Werte bestimmt werden, indem man Erfahrung und Ausprobieren kombiniert. Ausgefeilte Tuning-Programme sind ebenfalls erhältlich. In der Praxis werden für eine kleine Motorsteuerung wie diese zufriedenstellende Ergebnisse mit ein bisschen Spekulation und Probieren ohne Weiteres erzielt.

Das nächste Mal

Für die Zwecke dieser Artikel habe ich meinen treuen Parallax BoE-Bot mit Tachometern und einer dsPIC33-Prozessorplatine im Arduino Microchip-Format zugunsten der „Hirnleistung“ ausgestattet. Moderne MCUs wie die Prozessorplatine dsPIC umfassen spezielle Hardware für die Zwecke der Motorsteuerung und Messung, zum Beispiel die „Output Compare“-, „Input Capture“- und „Quadrature Encoder“-Elemente. Ich werde mich sowohl mit der Implementierung des PID-Algorithmus in meiner Version der Forth-Sprache (FORTHdsPIC) als auch mit den „Bare-Metal“-Assemblercode-Treibern für die Motorsteuerung und die Tachometersensoren beschäftigen.

Wenn Sie mögen, folgen Sie mir auf Twitter. Ich verweise auf interessante Artikel über neue Elektronik und verwandte Technologien, und leite von mir entdeckte Tweets über Roboter, Weltraumforschung und andere Themen weiter.

Engineer, PhD, lecturer, freelance technical writer, blogger & tweeter interested in robots, AI, planetary explorers and all things electronic. STEM ambassador. Designed, built and programmed my first microcomputer in 1976. Still learning, still building, still coding today.