Missionsplanung für Multi-Robot-System


[1] Zugegeben, die Aufgabe ist nicht gerade alltäglich. Es kommt nicht oft vor, dass bei Robotics Stackexchange jemand mit einem Quadcopter Waypoints abfliegt, laut dem verlinkten H.264 Video offenbar schon eine fertige Software im Einsatz hat und jetzt die Crowd um Hilfe bittet, um das System ein wenig aufzumotzen und noch spritziger zu gestalten. Zu meinem Bedauern muss ich leider zugeben, mich mit Künstlicher Intelligenz im Allgemeinen und Robotik im Speziellen nicht so gut auszukennen, als dass ich wirklich einen Tipp geben könnte. Nur soviel vielleicht: Waypoints sind Knoten in einem größeren Graphen. Wenn der Graph aus 20 Nodes besteht kann man davon 3 Nodes auswählen und die von dem UAV abfliegen lassen. Solche Graphen, besser bekannt als Navmesh, können entweder manuell in die Map eingezeichnet werden, oder aber automatisiert über Routenverlegungs-Algorithmen berechnet werden.

Der Zweite Teil der Frage mit dem Multi-Robot-System ist auch für mich relevant. Mein Fachwissen reicht leider nicht aus, um das umfassend zu beantworten, aber Multithreading dürfte hier das Zauberwort sein. Die Idee ist es, jeden Quadcopter mit einem eigenen Prozess zu starten und dann über die Main-Loop welche den Framecounter hochzählt zu synchronisieren. Eine Multi-Threading Anwendung für einen Roboter habe ich schonmal in Python programmiert, der Sourcecode müsste noch irgendwo im Archiv schlummern, für ein Multi-Agenten-System müsste man das Konzept hochskalieren, was relativ kompliziert sein dürfte. Das Hauptproblem besteht im Timing:

Angenommen, der Roboter1 führt laut dem High-Level-Planner die Tasks a und b aus. a dauert 100 Frames, b dauert 50 Frames. Gleichzeitig führt Roboter2 den Task c aus, welcher 50 Frames dauert. Jetzt startet man das System und es passiert folgendes:

          0   25   50    75   100   125   150
Roboter 1 |-----------a--------||-----b----|
Roboter 2 |----c----|

Das Problem ist, dass sich jetzt Roboter2 schon bewegt, und Roboter1 gleichzeitig dazu eine Ausweichroute berechnen muss. Noch komplizierter wird es, wenn während sich die Umgebung verändert, klar wird, dass die Tasks auf dem Roboter abgeändert werden müssen. Weil Roboter2 jetzt an der falschen Position ist, muss Roboter1 von „a-b“ auf „a-d“ als neuen Taskplan wechseln. Aber das größte Hinderniss kommt noch. Wenn man in den Threads absolute Timinigangaben in Millisekunden definiert, kann man in der Simulation das ganze nicht einfach schneller laufen lassen. Das jedoch braucht man um verschiedene Task-pläne durchzutesten, weil ein bestimmtes Ziel erreicht werden soll. Kurz gesagt, mehrere Roboter, die noch unterschiedliche Tasks ausführen dürfen kann ziemlich Messy werden und sollte nur von erfahrenen Programmiererinnen angegangen werden.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s