Behavior based robotics with LejOS


LejOS ist derzeit nur eine sehr rudimentäre Klassenbibliothek um damit funktionsfähige Roboter zu entwickeln. Die Grundfunktionen wie z.B. Sensoren auslesen oder Motoren anzusteuern sind zwar implementiert, allerdings bleibt offen wie damit genau ein Roboterprogramm entwickelt werden kann. Natürlich kann man in Java in nur wenigen Programmzeilen formulieren, „Wenn Hinderniss von vorne, dann lenke nach links“, nur sind derart programmierte Roboter in aller Regel nicht das, was man eigentlich erreichen möchte. Im folgenden soll deshalb die „Behavior Based Robotik“ einer näheren Betrachtung unterzogen werden, mit der man komplexeres Verhalten ermöglichen kann.

Die schlechte Nachricht vorneweg: derzeit ist behavior based robotics wiederum nur auf einem sehr niedrigen Stand in LejOS implementiert und auch die Dokumentation schweigt sich über dieses Thema aus, so dass die Vermutung naheliegt, dass die Entwickler selbst nicht so genau wissen was es damit auf sich hat. Deshalb zunächst etwas zur grundlegenden Idee und was das besondere ist. Grundsätzlich ist Behavior based Robotics eine Gegenbewegung zur akademischen Künstlichen Intelligenz. Behavior Based Robotics ist kein LISP, kein Expertensystem, keine kognitive Architektur und auch keine Artifical General Intelligenz, vor allem aber ist behavior based robotics nicht die Wissenschaft davon wie man einer Maschine Intelligenz einprogrammiert.

Am ehesten kann „behavior based robotics“ mit dem Erstellen eines Aimbots in AutoIt verglichen werden. Dazu ein kleiner Exkurs: In der Spieleszene hat sich eine kleine Subkultur herausgebildet die versucht mit Hilfe der Scriptsprache AutoIt und wenig bis gar keinen Programmierkenntnissen kleine Minibots zu entwickeln, welche browser-basierende Flashgames automatisch spielen können. Die Funktionsweise besteht darin, dass man in einem definierten Bildschirmbereich über eine Funktion namens „pixelsearch“ nach einer bestimmten Farbe sucht und auf diese Koordinate dann den Curser positioniert. Angelehnt ist dieser Programmablauf an „GUI Automatisierung“ hat aber einen spielerischen Charakter. Das besondere an AutoIt Scripten ist, dass wohl keine andere Programmiersprache so sehr dem Stereotyp des Script-Kiddies zuträglich ist. Was bedeutet, dass diese Sprache vom Image her sehr weit unten liegt und viele wissenschaftlich ausgebildete Informatiker an Hochschulen vermutlich noch nie etwas von AutoIt gehört haben dürften. Die Programmiermethode um einen AutoIt-Aimbot zu schreiben und einen behavior-based Roboter zu programmieren ist deckungsgleich. Beides Mal gibt es kein eigentliches Konzept sondern der Quellcode wird auf das spezifische Problem hin optimiert, was im Extremfall darin mündet, dass man die Koordinanten der Buttons auf dem Bildschirm in absoluten Werten angegibt, was bedeutet, dass so erstellte Bots nicht allgemeingültig sind.

Eine erweiterte Form dieser Programmierung findet sich in Wettbewerben wie Starcraft AI wo beispielsweise der EISbot ebenfalls über behavior based robotics erstellt wurde, dort in der Sprache ABL (a behavior language). Auch beim EISbot gibt es das Grundproblem, dass dieser nur das eine konkrete Starcraft Game spielen kann und nichts anderes. Selbst für den Nachfolger (Starcraft 2) ist der Bot nicht mehr zu gebrauchen, insofern kann man ihn als gescripteten AutoIt Bot verunglimpfen.

Und jetzt vielleicht der zurück zu LejOS. Auch dort kann man mit ähnlichen Vorgehensweisen zu Programmcode gelangen. Bei vielen Robotik-Wettbewerben ist das auch die übliche Praxis ohne dass es näher thematisiert wird, dass die erstellten Problemlösungen nicht verallgemeinerbar sind. Und das dürfte auch die wichtigste Eigenschaft von behavior-based-robotics sein, dass ein theoretisches Fundament fehlt und eine Abstraktion nicht stattfindet. Diese Programmiermethode zeichnet sich dadurch aus, dass eine Scriptsprache verwendet wird, also keine richtige Programmiersprache sondern eine Art von Makro, was Aktionen ausführt. Genauer gesagt wird ein Prozess beschrieben, man sagt also dem Programm bzw. dem Roboter was konkret in welcher Reihenfoge zu tun ist.

Aber daraus zu folgern, diese Programmierung wäre besonders simpel und zu keineren komplexen Problemen zu gebrauchen ist falsch. Die Logik und damit das theoretische Modell ist nicht im Quellcode selber enthalten, sondern muss über vorgelagertes Softwareengineering geleistet werden. Man kann das Erstellen von LeJOS Scripten wie auch das Programmieren in AutoIt sehr wohl unter wissenschaftlichen Aspekten betreiben, und zwar indem man Methoden wie das Wasserfallmodell, UML Diagramme oder Behavior Trees einsetzt. Nehmen wir ein kleines Beispiel wie die Erstellung eines AutoIt Scriptes für Starcraft AI funktioniert.

Zunächst einmal erstellt man eine Anforderungsanalyse worin man in Stichworten beschreibt, was der Bot können muss, welche Spielstärke er mindestens haben sollte, wie umfangreich das Projekt werden darf, wann er fertig sein sollte und wie er in groben Schritten funktionieren soll. Dann überlegt man sich eine grobe Unterteilung in Unterprogramme, also beispielsweise „Strategie, Umgebungserkennung, Handlungsplanung“ und zwar unter dem Gesichtspunkt von Starcraft. Zusätzlich sind noch Behavior Trees, Struktogramme oder UML Diagramme nützlich. Und dann kann man versuchen, dieses Konzept in AutoIt Programmcode zu überführen und zu testen.

VERGLEICH
Im folgenden eine Gegenüberstellung zwischen behavior Based Robotics (aka AutoIt Bot Erstellung) und akadamischer Künstlicher Intelligenz. Die akademische Künstliche Intelligenz ist an Algorithmen interessiert, welche möglichst allgemeingültigen Charakter besitzen und im besten Fall eine echte Künstliche Intelligenz darstellen. Beispiele hierfür sind Neuronale Netze, Prolog Shells, Machine Learning oder genetische Algorithmen. Diese Ansätze sind von der Konzeption her so ausgelegt, dass man den entsprechenden Algorithmus in Software implementiert, das Programm ausführt und dann fängt der Roboter an zu denken und lernt fehlendes Wissen automatisch hinzu. Beispielsweise sind genetische Algorithmen darauf ausgelegt, dass sie ihren eigenen Programmcode zur Laufzeit verbessern können um sich so optimal an Probleme anpassen. Aber auch Algorithmen wie Simulated Annealing können zur akademischen Künstlichen Intelligenz gezählt werden, weil sie universale Lösungsstrategien darstellen die für sehr viele Probleme angewendet werden können.

Im Gegensatz dazu sind AutoIt Scripte (bzw. behavior based robotics) jeweils auf ein konkretes Problem zugeschnitten, sie sind nicht intelligent oder lernfähig. Stattdessen muss die Programmlogik von außen erstellt werden und zwar über Softwareengineering. Das bedeutet, das Verstehen des Problems, das Finden einer Lösung, das Durchdenken unterschiedlicher Möglichkeiten wird nicht im Programmcode durchgeführt sondern ist Aufgabe des Softwareentwicklers. Er verwendet dazu Modellierungstools wie UML-Diagramme, bedient sich zur Recherche des Internets, oder nutzt IDEs um den Programmcode zu erstellen.

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