Hallo Gast, Sie sind nicht angemeldet.

Prozessverteilung und Implementierung

Von Johannes Dörr, Florian Manteuffel am 12.06.2009, aktualisiert am 17.04.2010 um 19:21 Uhr

Die Verschaltung der Hauptelektronik ist in der Abbildung dargestellt und soll im Folgenden näher erläutert werden.

Conrad C-Control II

Die C-Control II (CC2) übernimmt die Hauptsteuerung des Roboters und ist allen anderen Baugruppen übergeordnet. Die grundlegende Verhaltensweise des Roboters sowie die Ansteuerung der sekundären Elektronik (Sensoren und Motoren, siehe Sekundäre Elektronik) sind hier implementiert. Über ein Funkmodul ist der Roboter mit dem PC vernetzt. Eingehende Signale werden weiterverarbeitet oder weitergegeben, sodass im Administrationsmodus (siehe Navigationsmodi) auch auf Untersysteme zugegriffen werden kann.

iPAQ Pocket PC

Da die Wegberechnung meistens das rechenaufwendigste Modul bei mobilen Robotern ist, wird diese oft auf einem PC implementiert, der dann per Funk mit dem Roboter kommuniziert. Da unser Roboter aber möglichst unabhängig sein und auch in größeren Gebäuden funktionieren sollte, kam dies für uns nicht in Frage. Notebooks als mobile Rechner sind auch etwas zu groß, aber Pocket PCs, die sich natürlich auch selbst programmieren lassen, scheinen genau die richtige Lösung zu sein. Die Firma AppForge bietet eine Entwicklungsumgebung für Visual Basic an ("MobileVB"), die unseren Ansprüchen (Klassenmodule, User Defined Types etc.) genügte. Es gibt auch ein entsprechendes Entwicklungspacket von Microsoft namens "eMbedded Visual Basic", allerdings werden die genannten Funktionen davon noch nicht unterstützt. Die am Computer mit Visual Basic entwickelte Wegberechnung konnten wir so ohne größere Probleme auf dem Pocket PC implementieren.

Der Pocket PC kommuniziert mit der CC2 über die serielle Schnittstelle und fungiert praktisch als Slave. Er empfängt Befehle von der CC2 und gibt entsprechende Daten zurück. So können von der CC2 alle Kartenfunktionen gesteuert werden.

Die Programmierung der Karte basiert auf Objektorientierung. Jedes Hindernis ist eine Instanz des Klassenmoduls "tObstacle", das ein Datenfeld vom Typ Point enthält, in dem die Daten der einzelnen Hindernispunkte gespeichert werden. Außerdem enthält die Klasse grundlegende Funktionen zur Kartenverwaltung.

  1. Private Type Point
  2.    x As Long
  3.    y As Long
  4.    DistanceA As Long
  5.    DistanceB As Long
  6.    DistanceX As Long
  7. End Type
  8.  
  9. Private Points() As Point
  10. Public Precision As Long

Beim Hinzufügen eines neuen Hindernisses wird eine neue Instanz der Klasse erstellt und einem neuen Element des Datenfeldes "Hindernisse" zugeordnet.

(Bei der Portierung auf den PDA traten unerwartete Probleme auf. Beispielsweise unterstützt MobileVB nicht die Übergabe von dynamischen Datenfeldern, weshalb die etwas seltsame Konstruktion mit dem UDT "ObstList" nötig war.)

ATmega8 Mini

Die CC2 wird von einem kleineren Mikrocontroller unterstützt (Mega8), der die Quadrature-Signale des Maussensors (HDNS-2000) auswertet und die Steuerung der Kamera (CMUcam) übernimmt. Die Daten werden der CC2 per I2C-Bus in Registern zur Verfügung gestellt.

Die gesamte Positionskontrolle, die die Kamera verwendet, ist auf dem Mega8 implementiert. Es bekommt von der CC2 nur Befehle und die nötigen Daten wie zum Beispiel die Position des nächsten Orientierungspunktes, das Suchen des Punktes und die anschließende Positionsbestimmung werden eigenständig ausgeführt.

Die Bewegung der Kamera, die über zwei Servos gesteuert wird, ist etwas umständlich. Die Servos, von denen insgesamt 4 auf dem Roboter verwendet werden, werden alle über einen Ansteuerungs-IC (siehe Sekundäre Elektronik) geregelt. Dieser IC sitzt wie das Mega8 am I2C-Bus. Leider kann eine CC2 nur als Master arbeiten, was bedeutet, dass das Mega8 nur Slave sein darf. Dies bedeutet, dass das Mega8 nicht direkt auf den Servo-IC zugreifen kann, um die Kamera zu bewegen. Aus diesem Grunde ist ein kleiner Umweg nötig. Das Mega8 setzt, um die Kamera zu bewegen, ein Register mit der gewünschten Position, welches die CC2 abfragt und dementsprechend den IC ansteuert.

Wie unter Positionsbestimmung beschrieben wurde, besteht ein Orientierungspunkt aus 4 Farben. Bei der Suche nach einem Orientierungspunkt beschränkt sich der Roboter zunächst auf eine Farbe. Wurde diese gefunden, wird die Kamera so ausgerichtet, dass alle 4 Farben vollständig im Kamerabild zu sehen sind. Aus den Positionen der Farbfelder wird dann die Eigenposition berechnet. Diese Prozedur ist leider nur möglich während der Roboter sich nicht bewegt, da die Kamera nicht mehrere Operationen an einem Bild durchführen kann. Mit anderen Worten werden die Positionen der vier Farben nicht in demselben Frame ermittelt, sondern in vier unterschiedlichen. Würde sich die Kamera demnach mit dem Roboter bewegen, wären die Ergebnisse nicht zu gebrauchen. Es gibt jedoch bereits eine neue Version der CMUcam, mit der eine Positionsbestimmung ohne Anzuhalten theoretisch möglich wäre.