PID-Steuerung mit TurtleSim
Zusammenfassung
Move Turtle ist ein einfaches ROS-Python-Skript, das die Schildkröte in ROS’s TurtleSim zu bestimmten Koordinaten (Punkten) bewegt. Dieses Projekt begann als Klassenprojekt für CSCI473 an der Colorado School of Mines (CSOM) und entwickelte sich später zu einem Projekt, das mir half, zu lernen, wie geschlossene Regelkreise erstellt werden können, dessen Wissen mir bei meiner Arbeit im Human Centered Robotics (HCR) Lab von CSOM half.
Kontext
Zur Hintergrundinformation steht ROS für Robot Operating Systems. ROS ist eine Open-Source-Roboter-Middleware, die normalerweise mit dem Ubuntu Betriebssystem kombiniert wird und verwendet wird, um die Softwarekomponenten/Cluster eines Robotersystems besser zu verwalten. Sie können mehr darüber erfahren, wie man ROS verwendet, indem Sie das offizielle Wiki von ROS besuchen. Der Code, den Sie in ROS schreiben, ist entweder in C++ oder Python.
TurtleSim ist ein einfacher 2D-Robotersimulator, der als Einführung in ROS und ROS-Pakete für neue Benutzer von ROS dient. Alles, was TurtleSim tut, ist, ein einfaches 2D-Display mit einer Schildkröte zu öffnen. Diese Schildkröte fungiert als “Roboter” und Sie können Nachrichten an diesen “Roboter” senden, um ihn zu bewegen und/oder zu drehen. Beim Bewegen erzeugt TurtleSim jedoch einige zufällige Fehler, um die Physik der realen Welt auf einfache Weise zu simulieren.
Da ich wusste, was ROS und TurtleSim sind, warum habe ich sie verwendet? Nun, im Frühling 2020 besuchte ich einen Kurs mit dem Titel “Human Centered Robotics” an der Colorado School of Mines im Rahmen meines Bachelor-Studiums der Informatik. Der Kurs wurde von Dr. Hao Zhang geleitet. Der Kurs bestand aus drei Projekten, und das erste Projekt bestand darin, ROS einzurichten, zu lernen, wie man ROS verwendet, und entweder einen offenen oder geschlossenen Regelalgorithmus zu implementieren, der die Schildkröte in TurtleSim ein M zeichnen lässt. Die ursprüngliche Projektbeschreibung kann HIER eingesehen werden.
Als ich den Kurs belegte, schloss ich dieses Projekt ab, indem ich einen offenen Regelalgorithmus implementierte. Diese Lösung funktionierte, war aber wirklich schlecht und zeichnete ein A, das “gut genug” war, aber bei weitem nicht “großartig”. Nachdem ich das Projekt Mitte Februar 2020 eingereicht hatte, vergaß ich es bis ein Jahr später, etwa im Februar 2021.
Herausforderung
Im Februar 2021 wurde ich als Forschungsassistent im Human Centered Robotics (HCR) Lab an der Colorado School of Mines eingestellt, wo ich unter Dr. Hao Zhang arbeitete. Das Ziel des Labors ist es, Forschung zu “lebenslanger kollaborativer Autonomie” zu betreiben, mit dem Ziel, Robotern zu ermöglichen, über lange Zeiträume hinweg zu operieren und sich anzupassen. Am 1. September 2022 ist das Labor von der Colorado School of Mines zur University of Massachusetts Amherst umgezogen. Aber als ich dort arbeitete, waren sie noch in Colorado ansässig.
Im HCR-Labor wurde ich beauftragt, am Triton-Projekt zu arbeiten. Das Triton-Projekt bestand aus mehreren Dutzend Robotern, die Tritons genannt wurden. Tritons waren dreieckige Omni-Räder Bodenroboter, die so aussahen:
Zusammen mit den Tritons waren acht IR-Kameras von OptiTrack in einer “Achtform” angeordnet, einige Fuß über dem Boden. Mit diesen Kameras, der Motive Software von Optitrack, einem PC mit Windows 10 und ROS wurde ein Raum von 2 Metern mal 2 Metern mal 2 Metern (x, y, z) geschaffen, in dem die genaue reale Position von Objekten mit Bewegungserfassungsmarkern bestimmt werden kann.
Meine erste Aufgabe im Triton-Projekt war es, Skripte zu erstellen, die den Triton-Roboter zu einer bestimmten realen Position bewegen. Zu diesem Zeitpunkt war ich mir nicht sicher, wie ich dies erreichen sollte, aber ich erinnerte mich an das erste Projekt aus CSCI473, bei dem mir die Idee eines geschlossenen Regelkreises vorgestellt wurde, also begann ich, wirklich über geschlossene Regelkreise und damit verbundene Rückmeldesysteme zu recherchieren.
Forschung
Während meiner Forschung entdeckte ich dieses großartige Video von AerospaceControlsLab:
In diesem Video wurde mir die Idee eines PID-Systems gezeigt und erklärt. Ein PID-System ist ein geschlossener Regelkreis, der spezifische Ausgaben basierend auf Daten aus der realen Welt erzeugt. In einfachen Worten ist es ein Rückmeldesystem, das seine Ausgabe basierend auf der Differenz zwischen dem gewünschten Wert und dem gemessenen Wert anpasst. Dies ist die Formel für einen PID-Regler:
$$ u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} $$
- $u(t)$ ist das Steuersignal.
- $K_p$, $K_i$, $K_d$ sind die proportionalen, integralen und differentiellen Verstärkungen.
- $e(t)$ ist das Fehlersignal (die Differenz zwischen der gewünschten und der tatsächlichen Ausgabe).
- $\int e(t) dt$ ist das Integral des Fehlers über die Zeit.
- $\frac{de(t)}{dt}$ ist die Ableitung des Fehlers.
Um mehr darüber zu erfahren, schauen Sie sich das Video von AerospaceControlsLab oder diesen erstaunlichen Wikipedia-Artikel an, aus dem diese Formel stammt.
Nachdem ich meine Forschung durchgeführt und einige Hilfe von meinen klugen Freunden und Professoren erhalten hatte, stellte ich fest, dass die Verwendung eines proportionalen Reglers, P-Regler, am besten geeignet wäre, um dem Triton zu helfen, eine bestimmte Koordinate zu erreichen.
Da der Triton ein Bodenroboter ist, muss ich mich nur um die X- und Y-Koordinaten kümmern. In Anbetracht dessen musste ich dann bestimmen, welche gewünschten Werte und gemessenen Werte innerhalb des P-Reglers gemessen und verarbeitet werden sollten. In meiner Forschung fand ich diesen erstaunlichen Beitrag im ROS-Wiki mit dem Titel Go to Goal, in dem sie sich auf die folgenden Fehler konzentrierten:
- Distanzfehler: Die Differenz in der Entfernung zwischen dem gewünschten Standort (X, Y) und dem aktuellen Standort (X, Y).
- Theta-Fehler: Die Differenz zwischen der gewünschten Orientierung und der aktuellen Orientierung.
Vorgeschlagene Lösung
All dies wissend, besteht die Lösung, um den Triton zu einer bestimmten realen Koordinate zu bewegen, darin, einen proportionalen Regler für den Distanzfehler und den Theta-Fehler des Tritons in Bezug auf die Zielkoordinate und die aktuelle Koordinate des Tritons zu verwenden. Aber bevor ich dies in ein physisches System implementierte, wollte ich die Idee in einer Simulation testen und dachte damals, dass die Verwendung von TurtleSim als Simulation die beste Wahl wäre.
Testen in der Simulation
Mit der theoretischen Lösung skizziert, entschied ich mich zunächst, sie durch Simulation zu validieren, anstatt in einem realen Szenario. Die reale Welt ist oft mit Geräuschen überladen, die die Effektivität der Lösung beeinträchtigen und zu irrelevanten Problemen führen könnten. In Anbetracht dessen besuchte ich mein Projekt aus CSCI473 erneut und passte es als Testumgebung für diese theoretische Lösung an.
Nachdem ich den alten Code von ROS Melodic auf ROS Noetic aktualisiert und mit einigen iterativen Verfeinerungen gearbeitet hatte, gelang es mir, die vorgeschlagene Lösung in TurtleSim zum Laufen zu bringen. Demonstrationen seiner Funktionalität, mit einigen coolen Zielkoordinatenpfaden, finden Sie am Ende dieses Blogbeitrags. Der Code für all dies kann HIER eingesehen werden.
Fazit
Zusammenfassend lässt sich sagen, dass die Schildkröte in TurtleSim durch dieses Projekt effektiv zu festgelegten Koordinaten navigiert, indem sie das geschlossene Regelkreissystem verwendet, das meine ursprüngliche offene Regelung aus 2020 erheblich übertrifft. Erfolgreich getestet, implementierte ich diese Lösung mit den Triton-Robotern. Aber die Geräusche der realen Welt führten zu unerwarteten Problemen, die Wochen des Debuggens und der Tests in der realen Welt erforderten. Nach diesen Wochen gelang es mir letztendlich, den Triton zu spezifischen realen Koordinaten zu bringen, indem ich letztendlich die Lösung verwendete, die ich in TurtleSim getestet hatte. Hier ist eine Demo des Tritons, der sich zu spezifischen realen Koordinaten bewegt, unter Verwendung der Methode, die in TurtleSim getestet wurde:
Im Rückblick wünschte ich, ich hätte eine Simulation verwendet, die die Physik der realen Welt besser simuliert. TurtleSim ist großartig zum Lernen, aber nicht großartig zum Testen von Ideen in der realen Robotik. Damals dachte ich, es wäre gut genug für meinen einfachen Anwendungsfall, aber das stellte sich später als nicht der Fall heraus.
Das Hauptziel dieses Blogbeitrags war es, die Erstellung eines geschlossenen Regelkreissystems zu skizzieren, das es der Schildkröte in TurtleSim und anschließend den Triton-Robotern ermöglicht, präzise zu festgelegten Zielpositionen (X, Y) zu navigieren. Ich glaube, dieses Ziel wurde erreicht, aber es könnte einige Interessen an meiner Arbeit im HCR-Labor geweckt haben. In Anbetracht dessen habe ich Pläne, weitere Blogbeiträge über meine Arbeitserfahrungen im HCR-Labor zu erstellen…
Bewegende Schildkröte (TurtleSim) Demos
Dieses Video enthält die folgenden Demos:
- Cayley Nodal: Ein einfaches Cayley Nodal Design
- Kreise: Ein spinnennetzartiges Design
- Innere Kreise: Ein “Kreise innerhalb von Kreisen” Design
- M: Ein sehr einfaches M-Design