Bewege Schildkröte (TurtleSim)

Projekt auf GitLab & GitHub

Zusammenfassung

Move Turtle ist ein einfaches ROS‑Python‑Skript, das die Schildkröte in ROS’ TurtleSim zu angegebenen 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; das daraus gewonnene Wissen nutzte ich in meiner Arbeit im Human Center Robotics (HCR) Labor von CSOM.

Kontext

Zur Hintergrundinformation steht ROS für Robot Operating Systems. ROS ist ein Open‑Source‑Roboter‑Middleware, das meist zusammen mit dem Ubuntu Betriebssystem verwendet wird und dazu dient, die Software‑Komponenten/Cluster eines Robotersystems besser zu verwalten. Mehr darüber, wie man ROS verwendet, erfährst du im offiziellen Wiki von ROS. Der Code, den du in ROS schreibst, ist entweder in C++ oder Python.

TurtleSim ist ein einfacher 2‑D‑Robotersimulator, der als Einführung in ROS und ROS‑Pakete für neue ROS‑Nutzer dient. Alles, was TurtleSim tut, ist ein einfaches 2‑D‑Display mit einer Schildkröte zu öffnen. Diese Schildkröte fungiert als „Roboter“ und du kannst Nachrichten an diesen „Roboter“ senden, um ihn zu bewegen und/oder zu drehen. Beim Bewegen erzeugt TurtleSim zudem zufällige Fehler, um die Physik der realen Welt auf einfache Weise zu simulieren.

Wenn man weiß, was ROS und TurtleSim sind, warum habe ich sie verwendet? Nun, im Frühjahr 2020 belegte ich einen Kurs namens „Human Centered Robotics“ an der Colorado School of Mines im Rahmen meines grundständigen Informatikstudiums. 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 Open‑Loop‑ oder Closed‑Loop‑Algorithmus 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, setzte ich das Projekt mit einem Open‑Loop‑Algorithmus um. Diese Lösung funktionierte, war aber miserabel und zeichnete ein A, das „gut genug“ war, aber bei weitem nicht „großartig“. Nachdem ich das Projekt etwa Mitte Februar 2020 eingereicht hatte, vergaß ich es, bis ein Jahr später, etwa im Februar 2021, wieder daran dachte.

Herausforderung

Im Februar 2021 wurde ich als Forschungsassistent im Human Centered Robotics (HCR) Labor an der Colorado School of Mines eingestellt, wo ich unter Dr. Hao Zhang arbeitete. Das Ziel des Labors ist die Forschung zu „lebenslanger kollaborativer Autonomie, mit dem Ziel, Robotern zu ermöglichen, über lange Zeiträume zu operieren und sich anzupassen“. Zum 1. September 2022 (1. September 2022) zog das Labor von der Colorado School of Mines zur University of Massachusetts Amherst um. Aber als ich dort arbeitete, befand es sich noch in Colorado.

Im HCR‑Labor wurde ich beauftragt, am Triton‑Projekt zu arbeiten. Das Triton‑Projekt bestand aus mehreren Dutzenden von Robotern, die Tritons genannt wurden. Tritons waren dreieckige Omni‑Wheel Boden‑Roboter, die so aussahen:

Zusammen mit den Tritons befanden sich acht IR‑Kameras von OptiTrack in einer „Acht‑Eck‑Anordnung“ ein paar Fuß über dem Boden. Mit diesen Kameras, der Motive‑Software von OptiTrack, einem PC mit Windows 10 und ROS wurde ein Raum von 2 m × 2 m × 2 m (x, y, z) geschaffen, in dem die exakte reale Position von Objekten mit Motion‑Capture‑Markern 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 das erreichen sollte, erinnerte mich aber an das erste Projekt aus CSCI473, bei dem mir das Konzept eines geschlossenen Regelkreises vorgestellt wurde, sodass ich begann, geschlossene Regelkreise und damit Feedback‑Systeme intensiv zu recherchieren.

Forschung

Während meiner Recherche stieß ich auf dieses großartige Video von AerospaceControlsLab:

In diesem Video wurde mir das Konzept eines PID‑Systems gezeigt und erklärt. Ein PID‑System ist ein geschlossener Regelkreis, der basierend auf Daten aus der realen Welt spezifische Ausgaben erzeugt. In einfachen Worten ist es ein Feedback‑System, das seine Ausgabe anpasst, basierend auf dem Unterschied zwischen dem gewünschten Wert und dem gemessenen Wert. 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 bzw. differentiellen Verstärkungen.
  • $e(t)$ ist das Fehlersignal (der Unterschied zwischen gewünschtem und tatsächlichem Ausgang).
  • $\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, sieh dir das Video von AerospaceControlsLab oder diesen erstaunlichen Wikipedia‑Artikel an, aus dem die Formel stammt.

Nachdem ich meine Recherche abgeschlossen und Hilfe von meinen klugen Freunden und Professoren erhalten hatte, kam ich zu dem Schluss, dass die Verwendung eines Proportional‑Reglers (P‑Regler) am besten geeignet wäre, um den Triton zu einer bestimmten Koordinate zu führen.

Da der Triton ein Boden‑Roboter ist, muss ich mich nur um die X‑ und Y‑Koordinaten kümmern. In diesem Wissen musste ich bestimmen, welche Soll‑ und Ist‑Werte im P‑Regler gemessen und verarbeitet werden sollen. In meiner Recherche fand ich diesen großartigen Beitrag im ROS‑Wiki namens Go to Goal, wo sie sich auf die folgenden Fehler konzentrierten:

  • Distanzfehler: Der Unterschied in der Entfernung zwischen dem gewünschten Ort (X, Y) und dem aktuellen Ort (X, Y).
  • Theta‑Fehler: Der Unterschied zwischen der gewünschten Orientierung und der aktuellen Orientierung.

Vorgeschlagene Lösung

Unter Berücksichtigung all dessen besteht die Lösung, den Triton zu einer bestimmten realen Koordinate zu bewegen, darin, einen Proportional‑Regler für den Distanzfehler und den Theta‑Fehler des Tritons in Bezug auf die Zielkoordinate und die aktuelle Koordinate des Tritons zu verwenden. Bevor ich dies jedoch in ein physisches System implementierte, wollte ich die Idee in einer Simulation testen und dachte zu diesem Zeitpunkt, dass die Verwendung von TurtleSim als Simulation die beste Wahl sei.

Testen in Simulation

Mit der theoretischen Lösung im Hinterkopf entschied ich mich zunächst, sie durch Simulation zu validieren, anstatt sie sofort in der realen Welt zu testen. Die reale Welt ist oft von Rauschen durchdrungen, das die Wirksamkeit der Lösung trüben und zu irrelevanten Problemen führen kann. In Anbetracht dessen kehrte ich zu meinem Projekt aus CSCI473 zurück und passte es als Testumgebung für diese theoretische Lösung an.

Nachdem ich den alten Code von ROS Melodic auf ROS Noetic umgestellt und ihn iterativ verfeinert hatte, gelang es mir, die vorgeschlagene Lösung in TurtleSim zum Laufen zu bringen. Demonstrationen seiner Funktionalität, mit einigen coolen Zielkoordinaten‑Pfaden, finden sich am Ende dieses Blog‑Posts. Der Code dafür ist HIER einsehbar.

Fazit

Zusammenfassend lässt sich sagen, dass das TurtleSim‑Schildkröten‑Projekt die Schildkröte effektiv zu festgelegten Koordinaten navigieren lässt, indem ein geschlossener Regelkreis verwendet wird, und damit mein anfängliches Open‑Loop‑System von 2020 deutlich übertrifft. Nachdem die Lösung erfolgreich getestet war, implementierte ich sie bei den Triton‑Robotern. In der realen Welt führte das Rauschen jedoch zu unerwarteten Problemen, die wochenlange Fehlersuche und Tests erforderten. Nach diesen Wochen gelang es mir schließlich, die Tritons zu den gewünschten realen Koordinaten zu bringen, indem ich die in TurtleSim getestete Lösung nutzte. Hier ist ein Demo‑Video, das zeigt, wie ein Triton zu bestimmten realen Koordinaten bewegt wird, basierend auf der in TurtleSim getesteten Methode:

Rückblickend wünschte ich mir eine Simulation, die die reale Physik besser nachbildet. TurtleSim ist großartig zum Lernen, aber nicht ideal zum Testen von Robotik‑Ideen für die reale Welt. Zu diesem Zeitpunkt hielt ich es für ausreichend für meinen einfachen Anwendungsfall, was sich später als nicht zutreffend erwies.

Das Hauptziel dieses Blog‑Posts war es, die Erstellung eines geschlossenen Regelkreises zu beschreiben, der die Schildkröte in TurtleSim und anschließend die Triton‑Roboter präzise zu vorgegebenen Zielpositionen (X, Y) navigieren lässt. Ich glaube, dieses Ziel wurde erreicht, und es könnte Interesse an meiner Arbeit im HCR‑Labor geweckt haben. In diesem Sinne plane ich, weitere Blog‑Posts über meine Arbeitserfahrungen im HCR‑Labor zu verfassen…

Bewegende Schildkröte (TurtleSim) Demos

Dieses Video enthält die folgenden Demos:

  • Cayley Nodal: Ein einfaches Cayley Nodal Design
  • Circles: Ein Spinnennetz‑ähnliches Design
  • Inner Circles: Ein „Kreise innerhalb von Kreisen“-Design
  • M: Ein sehr einfaches M‑Design