IMADEIT-V3.::.Kontroll-Center.::.V2

Mit der Entwicklung des Kontroll-Centers.::.V2 habe ich anfang November 2009 begonnen. Auch dieses Programm dient wieder zum Steuern und Debuggen von IMADEIT-V3, jedoch wurde die Benutzeroberfläche vollständig neu gestaltet und es kamen einige neue Möglichkeiten zum Debuggen hinzu.
Die wohl größte Änderung ist jedoch, dass mit dieser V2 nun der Kontroll-Center die KI (künstliche Intelligenz) beinhaltet. In Folge dessen musste die Kommunikation umgebaut werden.

Der Kontroll-Center.::.V2 vom 18.12.2009

Kommunikation

Da mit der neuen Version des Kontroll-Centers dieser auch die KI beinhaltet, war die Kommunikation zwischen jenem und IMADEIT-V3 eine besondere Hürde, da mehr Daten möglichst sicher geschickt werden müssen. Sonst würde es schnell zu unfällen kommen.
Aus diesem Grund fordert der Kontroll-Center nun IMADEIT-V3 immer durch Senden von "DPes" (steht für "Datensatz-Protokoll-empfangen-start") auf, einen Datensatz zu schicken. Dieser besteht im Normalfall aus den Akkuspannungen sowie den Sensorwerten. Wurde IMADEIT-V3 jedoch gerade eingeschaltet, so wird noch geschickt, was für ein Akku beim Starten (Startup) gewählt wurde, da dies eine der wenigen Entscheidungen ist, die IMADEIT-V3 noch treffen darf/kann. Des Weiteren werde direkt nach dem "Startup" noch weitere Informationen zum Status des Roboters geschickt. Diese beinhalten zum Beispiel, ob gerade die Hintergrundbeleuchtung des LCD eingeschaltet ist.
Wurde der Datensatz vollständig geschickt, so sendet IMADEIT-V3 noch ein "DPef" (steht für "Datensatz-Protokoll-empfangen-fertig"). Erst, wenn der Kontroll-Center diese Zeichenfolge bekommen hat, startet dieser mit der Auswertung des empfangenden Datensatzes. Sollte wegen eines Fehlers das "DPef" nicht empfangen werden, so versucht der Kontroll-Center auf verschiedensten Wegen den Roboter wieder unter Kontrolle zu kriegen, da es sich offensichtlich um einen Fehler handelt, der fatale Folgen haben kann.
Das Auswerten der Datensätze funktioniert bei der zweiten Version genau so wie bei der ersten. Der empfangene String wird Zeichen für Zeichen in einer Case-Anweisung analysiert und verarbeitet (dazu später mehr). Auch bei dieser Version des Kontroll-Centers gibt es wieder eine Mindmap zur Kodierung, die jedoch deutlich übersichtlicher geworden ist, da ich einiges komprimiert habe um Sendezeit beim Übertragen der Datensätze zu sparen.
Wenn der Datensatz fertig analysiert ist, besteht für den Kontroll-Center die Möglichkeit, weitere Anweisungen an den Roboter zu schicken. Dies geschieht auch wieder in einem Block. Zum Starten sendet der Kontroll-Center ein "DPss" (Datensatz-Protokoll-senden-start). Danach werden die Datensätze gesendet, abschließend ein "DPsf" (Datensatz-Protokoll-senden-fertig). Wenn IMADEIT-V3 ein "DPss" empfängt und innerhalb einer bestimmten Zeit kein "DFsf" (also ein klassisches Timeout), so wird die Fahrt gestoppt, da der zu empfangende Datensatz eventuell neue Informationen zum Fahren beinhalten könnte.
Änderungen der Fahrtrichtung können jedoch auch noch zwischen dem Empfangen und Senden eines Datensatz gesendet werden. Somit ist besser garantiert, dass der Roboter bei der manuellen Steuerung über die Tastatur wie gewünscht fährt.

Flussdiagramm zur Kommunikation zwischen dem Kontroll-Center.::.V2 und IMADEIT-V3

Verarbeitung der Daten

Detailauswertung der Sensorwerte

Die Entfernungen werden hier in den ProgressBars grafisch dargestellt, woduch ein besseres Gefühl für die tatsächliche Entfernung der Gegenstände entsteht, wenn man den Roboter selbst nicht sieht. Des Weiteren wird in dem weißen Kreis oben links ein roter Strich angezeigt, der die Ausrichtung zum magnetischen Nordpol anzeigt, was der Kompass misst.
Doch damit nicht genug, ist diese Ansicht geöffnet, so werden die Messerte der Entfernungssensoren gespiechert und in Graphen dargestellt. Somit lassen sich Fehlverhalten und -funktionen von einzelnen Sensoren leichter erkennen.

Roh-Graph, wo Sensorwerte eingezeichnet werden können.

Bei Bedarf lassen sich die aufgezeichneten Werte speichern und später wieder laden. Ebenso ist es Möglich, die Aufzeichnung zwischenzeitlich zu stoppen und in bestimmte Bereiche des Graphen hinein zu zoomen.

Bei dieser Verarbeitung handelte es sich bisher nur um Darstellungsvarianten, die aber noch nicht dazu beitragen, dass IMADEIT-V3 fährt.
Die wichtigste Verarbeitung geschieht erst im nächsten Schritt, wenn der Kontroll-Center kontrolliert, ob und welche Funktion (autonomes Ausweichen, Folgen von Gegenständen, Abfahren einer Fläche etc.) gewählt wurde. Je nach wahl werden die Sensorwerte an eine bestimmte Funktion übergeben und dort ausgewertet. Das Ergebnis der Funktion ist dann die Fahrtrichtung und eventuell Geschwindigkeit von IMADEIT-V3, die im Folgenden per Funk gesendet wird.

Die einzelnen Funktionenen

Im Folgenden werde ich nach und nach die verschiedenen Funktionen und Möglichlkeiten des Kontroll-Centers.::.V3 vorstellen. Momentan beinhaltet die grafische Oberfläche jedoch deutlich mehr als das Programm im Hintergrund, weshalb es vielleicht so aussehen mag, als währe ich schon ganz weit, was aber nicht der Fall ist.

COM-Port

Im TabSheet "COM-Port" gibt es recht wenige Einstellmöglichkeiten, die mehr oder weniger von Bedeutung sind.
Klar, man muss den COM-Port auswählen können, der bei Ubuntu standartmäßig unter /dev/ttyUSB0 zu finden ist. Mit "COM-Timeout" stellt man ein, wie lange (ms) der Kontroll-Center am COM-Port auf Daten warten soll, bevor er im Programmablauf weiter macht. Diese Zahl ist jedoch von recht geringen Bedeutung. Schon deutlich wichtiger ist der Wert "Datensatz-Timeout", der in ms festlegt, wann nach dem Senden des "Ds" Aktionen eingeleitet werden sollen um IMADEIT-V3 wieder unter Kontrolle zu kriegen. Mit "Datensatz-Wartezeit" wird eingestellt, nach wie vielen ms wieder ein vollständiger Datensatz angefordert werden soll.

COM-Port (18.12.2009)

iPod

In der Funktion "iPod" kann man die Steuerung von IMADEIT-V3 mit Hilfe eines iPod-touch oder iPhones aktivieren bzw. deaktivieren. Mehr Möglichkeiten gibt es in dieser Funktion momentan nicht.
Die Pfeile werden für die Fahrtrichtung verwendet, "OK" ist zum normalen Stoppen, "back" und "space" dienen zum Ausschalten des Motorstroms. Über "esc" kann die Steuerung des Roboters über den iPod beendet werden.
Die Nutzeroberfläche sieht wie folgt aus:

iPod touch Menü zum Fernsteuern von IMADEIT-V3

Einstellungen

Im Bereich "Einstellungen" kann man die einzelnen µCs resetten, wenn es einen Fehler oder ähnliches gab, der sich nur durch einen Neustart des jeweiligen Programms aus dem Prozessor beheben lässt.
Des Weiteren kann man in diesem Bereich die STVO-LEDs deaktivieren und aktivieren. Jedoch ist diese Funktion noch nicht verfügbar, da die Platine zum Steuern der STVO-LEDs aufgrund technischer Probleme momentan nicht angeschlossen ist (Stand: 11.01.2010). Die einzige Beleuchtung, die sich momentan deaktivieren und aktivieren lässt ist die des LCDs.
Zukünftig soll hier auch noch die Möglichkeit bestehen die einzelnen Geschwindigkeiten zum vorwärts/rückwärts Fahren und Drehen einzustellen. Implementiert ist diese Funktion schon, jedoch ist sie noch deaktiviert (und unsichtbar), da IMADEIT-V3 mit diesen Informationen noch nichts anfangen kann, da die entsprechenden Programmzeilen fehlen.

Einstellungen (Stand: 11.01.2010)

Ausweichen

Ausweichen (19.12.2009)
Flussdiagramm zum "Ausweichen"

Bei der Funktion "Ausweichen" des Kontroll-Centers geht es darum, dass IMADEIT-V3 autonom durch die Gegend fahren soll ohne irgendwo gegen zu stoßen oder herunter zu fallen (Bürgersteig).
Der Algorithmus ist aus Modulen zusammengesetzt, die einzeln aktiviert werden können. In jedem Modul können die einzelnen Grenzwerte der Entfernungen eingestellt werden, mit denen der Kontroll-Center die aktuellen Messungen vergleicht und dem entsprechend den Roboter anders fahren lässt. Ebenso lassen sich die Zeiten einstellen, die eine Fahrtrichtung durchgeführt werden soll. Später sollen die Zeiten durch Entfernungen (cm) ersetzt werden, bzw. beim Drehen soll eine Gradzahl angegeben werden.

 

 

Die einzelnen Aktionen werden nacheinander in einer If-Then-Abfrage durchgegangen. Ist eine Bedingung der Aktion wahr, so wird die Aktion durchgeführt, danach wird keine weitere Aktion mehr auf ihre Wahrheit kontrolliert, sondern die Procedure wird beendet und es wird nach neuen Sensorwerten gefragt. Diese Konstruktion hat zur Folge, dass die oberste Aktion höhere Priorität hat als die unterste, was erfordert, dass man sich beim Programmieren schon die Frage stellen muss, welche Aktion höhere Priorität haben soll. Da dies jedoch nicht immer all zu einfach zu entscheiden ist soll später die Möglichkeit hinzukommen, dass man die Priorität einer Aktion manuell im Kontroll-Center festlegen kann.

Da es recht viel Aufwand währe, die einzelnen Aktionen in Worten zu erklären, habe ich ein Flussdiagramm des Algorithmus erstellt, welches weitestgehend selbsterklärend sein sollte. Nur ein kleiner Hinweis: Bei den Vergleichswerten der Sensoren wie "Aktion1BodenVorneRechts" und "Aktion1BodenVorneLinks" handelt es sich um die Werte, die man im Kontroll-Center einstellen kann. Die Werte wie "FrontVorneRechts" oder "FrontVorneLinks" sind die Entfernungen, die IMADEIT-V3 gemessen hat.

Folgen - gerade

Folgen - gerade (19.12.2009)
Flussdiagramm "Folgen" - gerade

Das "Folgen" eines Gegenstands ist weniger eine Funktion mit Zweck, sondern eher eine Spaß-Funktion. Hierbei soll der Roboter einem Gegenstand (vorzüglich jedoch eine Person) folgen. Da der Algorithmus jedoch recht komplex ist, habe ich erstmal nur den zum Folgen eines Gegenstands auf einer geraden Strecke geschrieben, später soll der für kurvige Strecken hinzukommen.

 

 

 

Manuell lässt sich über den Kontroll-Center die Folgeentfernung plus/minus der Toleranz einstellen. Befindet sich der Gegenstand in diesem Bereich, so bleibt der Roboter stehen. Ist der Gegenstand über diesen Bereich plus einer maximalen Entfernung hinaus, so bleibt er stehen. Sollte der Gegenstand näher als der Folgeentfernung minus der Toleranz sein, so ist die nächste Aktion abhängig von der Entfernung nach hinten. Wenn der Abstand geringer als 50cm ist, so bleibt IMADEIT-V3 stehen, da die Gefahr besteht, dass der Roboter etwas beschädigt. Ist der Abstand nach hinten größer als 50cm fährt IMADEIT-V3 rückwärts.
Das ganze in einem Flussdiagramm rechts ->

Fläche abfahren

Fläche abfahren (Stand: 11.01.2010)
Grafische Darstellung des Fahrwegs
Flussdiagramm zum Abfahren einer Fläche

Zum Abfahren einer Fläche gibt es bisher noch keinen Code. Alles, was es bisher gibt sind vorüberlegungen, die noch sehr vage sind und sich innerhalb weniger Tage ändern können.
Trotzdem will ich hier mal meine bisherigen Überlegungen darlegen.

Im Kontroll-Center soll es anfangs die Möglichkeit geben, dass man vorgibt, wie lang die anzufahrende Fläche in Zentimeter (cm) ist (Y-Koordinate). Um die Breite der Fläche anzugeben gibt es zwei Möglichkeiten. Die eine ist, dass man die Breite in cm angibt (X-Koordinate) und das Programm dann berechnet, wei viele Bahnen der Roboter machen muss, damit die Fläche lückenlos abgefahren wird. Die zweite Möglichkeit ist, dass man gleich die Anzahl der Bahnen vorgibt. Die Breite der Fläche Berechnet sich dann aus: {(Breite des Roboters) + (Anzahl der Bahnen) * [(3/4)*(Breite des Roboters)]}
Da momentan (11.01.2010) noch die Sensoren zum Messen der zurückgelegten Wegstrecke fehlen gibt es alternativ die Möglichkeit, dass man die X und Y-Koordinaten in Millisekunden (ms) angibt.
Anhand dieser Angaben sollte es nun (theoretisch) machbar sein, dass IMADEIT-V3 eine freie Fläche lückenlos in Bahnen abfährt.

Um dies zu tun, soll der Roboter erst eine gerade Strecke fahren, die der Länge (Y-Koordinate) der Fläche entspricht {1}. Danach macht der Roboter eine erste 90° Drehung nach rechts {2} fährt eine kleine Strecke gerade aus {3} und macht danach wieder eine 90° Drehung nach rechts {4}. Somit steht IMADEIT-V3 nun parallel zur eben gefahrenen Strecke, die er nun in die Gegenrichtung fährt {5}. Hat er die Starthöhe erreicht, macht IMADEIT-V3 wieder eine 90° Drehung, diesmal allerdings nach links {6}, fährt erneut eine kurze Strecke {7} um wieder eine 90° Drehung nach links zu machen {8}.
Nun befindet sich IMADEIT-V3 um etwa 1,5*Breite des Roboters versetzt zum Startpunkt und hat insgesamt zwei Bahnen zurückgelegt. Sollen noch weitere Bahnen zurückgelegt werden, so geht die gesamte Prozedur wieder von vorne los.
Dargestellt habe ich alles nochmal in zwei Grafiken. Einmal eine, die den Weg zeigt, den der Roboter fahren soll und eine, die die Fahrtrichtungsänderungen in einem Flussdiagramm zeigt.

© 2010 by Jonathan Heilmann
Login