IMADEIT-V3.::.Kontroll-Center.::.V1

Begonnen mit dem Kontroll-Center.::.V1 habe ich Mitte Mai 2009. Diese erste Version wurde weiterentwickelt und verwendet zur Steuerung und zum Debuggen von IMADEIT-V3 bis Ende Oktober 2009.

Vorüberlegungen

Vor dem erstellen des Kontroll-Center.::.V1 habe ich eine Liste erstellt mit Punken, die dieser erfüllen muss.

  1. Das Programm sollte übersichtlich und intuitiv zu bedienen sein
  2. Alle wichtigen Funktionen sollten sofort verfügbar sein (ohne viel Klicken, soweit möglich auch mit Shortcuts)
  3. Graphische Darstellung der Sensorwerte.
  4. LOG-Box zum Mitverfolgen der Fahraktionen des Roboters und der Gesendeten/Empfangenen Daten.
  5. Möglichkeiten, um Geschwindigkeiten und andere Werte einfach einzustellen.
  6. Überwachungsmöglichkeit von Akkuspannungen und anderer wichtiger Werte/Messungen.
  7. Es sollten immer alle Daten empfangen werden, die von IMADEIT-V3 kommen. Dennoch sollte es möglich sein, während dem Empfangen, oder so Zeitversetzt, dass man es nicht merkt, Daten an IMADEIT-V3 zu schicken, bzw. anderes am/mit dem PC/Laptop zu machen.

Um den Punkt 1 zu lösen habe ich mir anfangs ein grobes Konzept auf einem Blatt Papier zkizziert, danach hat sich der Rest beim Programmieren bzw. Erstellen und Verändern der graphischen Nutzeroberfläche (GUI) ergeben. Mit diesen Überlegungen verbunden war auch immer der zweite Anforderungspunkt.
Der 3. Punkt war der wohl am einfachsten zu lösende. Aus meinem Google Sketchup Modell heraus habe ich eine Top-Ansicht des Roboters erstellt und diese in das Programm eingebunden. Die Sensorwerte werden dann dort eingeblendet, wo sich die entsprechenden Sensoren befinden.
Punk 4 lässt sich bei Lazarus mit einem sogenannten "Memo" recht einfach lösen, dessen Inhalt man bequem in einer *.txt Datei speichern kann und später auch wieder laden kann. Diese Möglichkeit des Speicherns/Landes habe ich jedoch nur anfangs genutz, später hat sich herausgestellt, dass eine solche Funktion nicht nötig ist und es reicht, wenn die aktuellen Informationen im Memo dargestellt werden
Die Lösung des 6. Punkts war etwas schwieriger, weshalb ich da immer wieder andere Ansätze verwendet habe und nie wirklich zufrieden war. Erst ganz am ende der ersten Version des Kontroll-Centers habe ich eine Lösung gefunden.
Der Punkt 7 war hingegen noch etwas schwieriger als Punkt 6 zu lösen, an diesem Punkt habe ich fast eine Woche gearbeitet (was immernoch recht wenig ist, m Vergleich zu den anderen Punkten aber viel). Das Problem hierbei ist, dass ich ständig empfangen will. Dies mache ich, indem ich direkt nach dem öffnen des Programms eine Prozedure starte, in der der COM bzw. USB Port ständig nach neuen Daten ausgelesen wird. Jedoch ist es unmöglich, während dem Auslesen eine andere Aktion durchzuführen. Eine Lösung währe, verschiedene Threads zu verwenden, jedoch wollte mir dies trotz mehrerer Tutorials aus dem Internet einfach nicht gelingen. Aus diesem Grund habe ich die "brutale Methode" gewählt. Die Methode besteht aus dem Befehl "Application.ProcessMessages" und bewirkt, dass bei jedem Aufruf das Formular nach Änderungen abgefragt wird. Somit habe ich in dieser Zeit die Möglichkeit, Daten an den Roboter zu senden. Der einzige Nachteil dieser Methode ist, dass die Prozessor-Auslast von meinem eeepc sofort auf 20% gestiegen ist. Ist zwar etwas viel, aber dennoch hatte ich genug Ressourcen übrig um anderes mit dem Netbook zu machen.

Der Kontroll-Center unter Ubuntu (Stand: 25.09.2009)

Eine weitere Fragestellung, die ich ertmal lösen musste, bevor ich ans Programmieren der einzelnen Funktionen gehen konnte, ist, was ich für Daten an den Roboter, bzw. der Roboter an den PC senden muss, damit diese Wissen, was zu tun ist.
Aus diesem Grund habe ich mit eine kleine Kodierung überlegt, die ich in einer Mindmap dokumentiert habe. Jenachdem, was ich machen will, füge ich die einzelnen Zeichen aneinander.
Beispiel: 'FES' wird vom PC an den Roboter geschickt.
Die Folge ist, dass der Roboter das erste Zeichen in einer Case-Abfrage auswertet. In dieser wird er herausfinden, dass das erste Zeichen ein 'F' ist und geht in eine weitere Case-Abfrage, wo ein 'E' gefunden wird. Nun kommt eine dritte Case-Abfrage geht, wo für das 'S' eingetragen ist, dass der der Motorstrom ausgeschaltet werden soll.

Das Schaulbild:

Kodier-Mindmap vom 26.09.2009

Realisierung/Funktionen

Als nächster Schritt nach diesen vorausgehenden Überlegungen war, die Funktionen des Kontroll-Centers.::.V1 mit denen von IMADEIT-V3 zu verknüpfen. Dies ging schrittweise und oftmals aus verschiedenen Gründen recht langsam.
Folgende Funktionen sollten der Kontroll-Center.::.V1 und IMADEIT-V3 beherrschen:

  1. Reines Fernsteuern des Roboters.
  2. Fernsteuern und gleichzeitiges Anzeigen der Sensorwerte.
  3. Fernsteuern mit Anzeige der Sensor- und Akkuwerte.
  4. Autonomes Fahren des Roboters mit Anzeige der Sensorwerte und der gerade durchgeführten Aktion.
  5. Folgen von Personen auf einer geraden Strecke.
  6. Drehen von IMADEIT-V3 um eine vorgegebene Gradzahl.
  7. Manuelles Steuern des Schneeschiebe-Aufsatzes.
  8. Planmäßiges Abfahren einer Fläche.

1. Reines Fernsteuern des Roboters.

Die Funktion des reinen Fernsteuern war schon recht bald nach kleinen anfänglichen und nicht weiter nennenswerten Problemen vollständig verfügbar.
Über die folgenden Tasten konnte man IMADEIT-V3 steuern:
"w" = geradeaus fahren
"a" = nach links drehen (auf der Stelle)
"s" = rückwärts fahren
"d" = nach rechts drehen (auf der Stelle)
Die Fahraktion wurde solange durchgeführt, bis eine andere gewählt wurde oder die "q"-Taste gedrückt wurde, was den Roboter einfach anhält. Sollte es zu einem Fehler kommen, konnte man die "e"-Taste drücken, was zur Folge hatte, dass 50 Mal das Zeichen zum Unterbrechen der Stromversorgung der Motoren gesendet wurde und der Roboter erstmal nicht weiter fahren konnte. Erst durch wiederholtes Drücken der "e"-Taste konnte der Roboter wieder fahren.

Eine weitere Möglichkeit der Steuerung von IMADEIT-V3 war die sogenannte "Maussteuerung". Bei dieser konnte man den im Screenshot (s. unten) zu sehenden blauen Kreis anklicken. Durch Bewegen des Fingers auf dem Mauspad des eeepc fuhr der Roboter in die Richtung, in die man mit dem Finger ging. In dieser Funktion war man erstmal mit der Maus gefangen und konnte den Steuerbereich (grünes Viereck) nicht verlassen. Erst, wenn man in den roten Bereich ging und dort einmal mit der Maus klickte, im Steuerbereich einen Doppelklich machte, oder wenn man mit der "q"-Taste den Roboter anhielt, konnte man die Maus wieder für Anderes verwenden.
Diese Steuerungsmethode war erstmal sehr gewöhnungsbedürftig und deswegen anfangs nicht bei hohen Geschwindigkeiten zu empfehlen.
Diese Steuermethode hat sich jedoch nicht als sehr praktikabel erwiesen, weshalb ich sie nie wirklich verwendet habe

Ein kleines Video vom reinen Fernsteuern des Roboters:
!!Bitte hier klicken um den Download zu starten (ca. 3MB)!!

2. Fernsteuern und gleichzeitiges Anzeigen der Sensorwerte.

Box, in der die Sensorwerte angezeigt werden

Die zweite Funktion habe ich nach der ersten reailsiert, da mir diese als am einfachsen erschied, zumal sie für andere Funktionen grundlegend war.
Das größte Problem bei der Umsetzung dieser Funktion war, dass ich die Anforderung an das Programm hatte, dass immer die Sensorwerte geschickt werden und es dennoch ständig möglich sein sollte, den Roboter fernzusteuern. Dadurch entstand manchmal das Problem, dass eines der Funkmodule noch ausgelesen wurde und dabei den Interrupt bekam, das es nun wieder Daten empfangen soll. Brach das Modul das Senden einfach ab, so wurde es nicht wieder zum Empfangen freigegeben. In Folge dessen konnte gar nichts mehr gemacht werden. Und wenn der Roboter gerade fuhr, so fuhr er halt weiter, bis er durch einen Gegenstand daran gehindert wurde.
Letztendlich musste ich den Kompromiss eingehen, dass immer nur eines geht (Senden oder Empfangen). Deshalb hatte ich entschieden, dass das Senden vom PC aus vorrang hatte, wenn der Roboter also sendete, gingen dessen Daten verloren. Und um zu vermeiden, dass das Funkmodul während dem Empfangen abgewürgt und dabei nicht ordentlich freigegeben wird, habe ich vor dem Empfangen geprüft, ob das Modul gerade beim Senden ist, wenn ja, wurde erstmal die Verbindung ordnungsgemäß beendet.

Somit funktioniert das Fernsteuern und Anzeigen der Sensorwerte im Programm ohne Probleme!

3. Fernsteuern mit Anzeige der Sensor- und Akkuwerte.

Diese Funktion habe ich nie realisieren können, da in der gesamten Zeit, in der ich den Kontroll-Center.::.V1 verwendet habe, die Hardware zum Auswerten der Akkuspannungen fehlte. Die Anzeige der Sensorwerte war aber schon in der zweiten Funktion realisiert worden. Nach diesem Prinzip hätte auch die Anzeige der Akkuspannungen funktionieren müssen.

4. Autonomes Fahren des Roboters mit Anzeige der Sensorwerte und der gerade durchgeführten Aktion.

Das Anzeigen der Sensorwerte und der gerade durchgeführten Aktion war, nachdem das Fernsteuern des Roboters mit der Anzeige der Sensorwerte geschafft war kein Problem. Der Code für den Roboter musste um ein paar Zeilen ergänzt werden und schon war es möglich mitzuverfolgen, was der Roboter gerade mit den Sensoren für Entfernungen misst und was für eine Aktion er daraufhin durchführt.

In dieser Box werden die gerade durchgeführten Fahraktionen mit der Zeit angezeigt.

5. Folgen von Personen auf einer geraden Strecke.

Das Folgen von Personen wollte ich erst gar nicht in IMADEIT-V3 implementieren, jedoch wurde ich von der SCHOTT AG Mainz gefragt, ob ich das bei ihrem Tag der offenen Tür der Ausbildung präsentieren könnte, da dies beim Jugend forscht Wettbewerb 2008 mit IMADEIT-V2 auf sehr gute Resonanz gestoßen war.
Daraufhin hatte ich mir nochmal den alten Code rausgesucht und mir angeschaut, was ich dort gemacht hatte - eigentlich ein sehr simpler Algorithmus, den ich fast 1:1 für IMADEIT-V3 übernehmen konnte. Somit war auch diese Funktion schnell im Kontroll-Center, der die gerade durchgeführte Aktion anzeigt, und in IMADEIT-V3 untergebracht.

6. Drehen von IMADEIT-V3 um eine vorgegebene Gradzahl.

Diese Funktion des Kontroll-Centers und damit auch des Roboters hatte erstmal keine all zu große Bedeutung. Eher diente es mir als Kontrolle, ob der Kompass richtig arbeitet und um zu demonstrieren, was für eine Bedeutung der Kompass hatte und was für verschiedene Möglichkeiten es bei einer solchen erstmal einfach aussehenden Funktion gibt.
So gibt es zwei Richtungen, in die sich der Roboter drehen kann. Entweder links oder rechts. Deshalb hatte der Kontroll-Center.::.V1 die Möglichkeit, dass man die Drehrichtung aussuchte und den Roboter somit zwnag, dass er sich nach links oder rechts dreht. Die dritte Möglichkeit war, dass man dem Roboter die Möglichkeit gab zu entscheiden, in welche Richtung er sich dreht. Entweder in Abhängigkeit des zurückzulegenden Wegs (der kürzere macht natürlich mehr Sinn) oder ob an einer Stelle der Wechsel von 360° nach 0° oder andersrum stattfand, was bedeutet, dass man nach der Überschreitung dieser Grenzmarke den Algorithmus wechseln muss und die Abbruchsbedingung des Drehvorgangs abändert.

7. Manuelles Steuern des Schneeschiebe-Aufsatzes.

Über diese Funktion des Schneeschiebe-Aufsatzes konnte man den Pflug  entweder nach links, zur Mitte hin oder nach rechts kippen. Ebenso war es möglich, den Pflug in kleinen Schritten, oder zu einem absolut angegebenen Punkt, zu heben bzw. zu senken.
Auch diese Funktion diente so wie die Funktion zum "Drehen von IMADEIT-V3 um eine vorgegebene Gradzahl" merh zu Testzwecken als dass sie einen praktischen Nutzen hatte. Später beim autonomen Schneeschieben sollte die Basis die Steuerung des Pflugs übernehmen.

8. Planmäßiges Abfahren einer Fläche.

Diese Funktion waren Vorarbeiten um IMADEIT-V3 das planmäßige Abfahren einer Fläche in Bahnen beizubringen.
Erstmal sollte die Länge der abzufahrenden Bahn (X-Koordinate) mit einer Zeit in Millisekunden angegeben werden, da zu diesem Zeitpunkt noch Sensoren zum Messen de rzurückgelegten Strecke fehlten. Später sollte die Länge in cm angegeben werden.
Weitere Einstellmöglichkeiten waren die Anzahl der Bahnen und der Abstand der Bahnen (Y-Koordinate).
Die vollständige Umsetzung dieser Funktion war jedoch nie möglich, da ich währenddessen beschlossen habe, eine neue Version des IMADEIT-V3.::.Kontroll-Centers zu erstellen.

© 2010 by Jonathan Heilmann
Login