Hallo Gast, Sie sind nicht angemeldet.

Kontrollsoftware I

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

Robotersysteme, die in Zukunft Einzug in unser alltägliches Leben halten werden, müssen vor allem einen großen Spielraum für Erweiterungen aufweisen. Wie schon in den vorigen Kapiteln angesprochen wurde, bietet unsere Kartenverwaltung eine Fülle von Erweiterungsmöglichkeiten. Um diese jedoch mit externen Systemen verknüpfen zu können, ist eine Software nötig, die eine komfortable Bedienoberfläche sowie eine offene Schnittstelle für Programme anderer Hersteller zur Verfügung stellt. So eine Software kann man sich praktisch wie ein Betriebssystem vorstellen, das eine Verwaltung von Daten und eine Kommunikation zwischen verschiedenen Prozessen ermöglicht. Auf diese Weise können zwei verschiedene Robotersysteme Daten austauschen, obwohl sie gar nicht explizit für den gemeinsamen Betrieb entwickelt wurden. Die Leistungsfähigkeit, die dabei entsteht, ist leicht zu erkennen. Mehrere mobile Roboter können ihre Karten abgleichen und so Informationen über Regionen erhalten, in denen sie sich selbst noch nie befanden. Auch das bereits angesprochene Beispiel der elektrischen Tür ist einfach realisierbar.

Um die Integrationsfähigkeit unseres Systems vorstellen zu können, haben wir eine Software entwickelt, die entsprechende Funktionen bietet.

Abb 6.1: Schema der Kontrollsoftware

Damit die Software nicht nur in Verbindung mit unserer speziellen Hardware funktioniert, basiert sie auf einer Plugin-Funktionalität. Hardwarespezifische Plugins (Treiber) können so in das Programm eingebunden werden und mit ihm über eine Schnittstelle kommunizieren. Die Software ist dadurch von der speziellen Hardware unabhängig und könnte praktisch mit jedem Mikrocontroller kommunizieren, für den ein entsprechendes Plugin vorhanden ist. Beim Initialisieren kann jedes Plugin eine beliebige Anzahl von Variablen registrieren, wie zum Beispiel X- und Y-Position oder Batteriespannung. Diese Variablen sind die einzige Möglichkeit, Daten zwischen Plugin und Kontrollsoftware auszutauschen. Die Software hat jetzt mit anderen Worten nur Kenntnis über die Position und Batteriespannung. Die Datenübertragung zwischen PC und Roboter liegt ganz im Aufgabenbereich des Plugins und ist somit nicht durch die Kontrollsoftware beschränkt und kann genau auf die anzusteuernde Hardware zugeschnitten sein. Das Plugin sendet in einem selbst gewählten Intervall die aktuellen Werte zur Kontrollsoftware.

Die Software bietet einerseits die Möglichkeit, die Werte der Variablen anzuzeigen und zu editieren. Die Anzeigefelder sind übrigens selbst wieder durch Plugins erweiterbar, sodass für eine besondere Variable (zum Beispiel eines Neigungssensors) ein spezielles Feld eingebunden und verwendet werden kann. Diese Möglichkeit ist sehr hilfreich bei der Fehlerdiagnose sowie bei der Kontrolle des Roboters.

Die zweite und wichtigere Funktion ermöglicht das Programmieren von Beziehungen zwischen zwei oder mehreren Variablen. Abbildung 6.1 zeigt, wie das Beispiel der elektrischen Tür aussehen könnte. "Hardware 1" ist der Roboter, "Hardware 3" die Tür. Die Kontrollsoftware überprüft laufend die Position des Roboters. Befindet er sich in einem festgelegten Bereich, wird die "Status"-Eigenschaft der Tür auf "offen" gesetzt und der Roboter kann passieren.

Die Programmierung der Beziehungen kann in einem Plugin stattfinden. Plugins können nicht nur ihre Variablen der Kontrollsoftware zur Verfügung stellen, sondern auch auf die Variablen anderer Plugins zugreifen. Dies ist aber nur möglich, wenn dem Programmierer des einen Plugins das andere bekannt ist, was selten der Fall sein wird. Aus diesem Grund besitzt die Kontrollsoftware ein Quellcode-Fenster, in dem diese Beziehungen mit der Scriptsprache VBScript selbst programmiert werden können.

Jede Variable bekommt von der Kontrollsoftware ein Ereignis zugeordnet, das auftritt, wenn sich der Wert der Variable ändert. Dem Quellcode können nun Ereignisprozeduren hinzugefügt werden, die beim Auftreten des Ereignisses aufgerufen werden. Der Quellcode für unser Beispiel:

  1. Sub Plugin1_PosX_Change()
  2.  PosX = CDK.getData("Plugin 1", "PosX")
  3.  PosY = CDK.getData("Plugin 1", "PosY")
  4.  If PosX > 1500 And PosX < 1700 And _
  5.     PosY > 900 And PosY < 1100 Then
  6.    CDK.setData("Plugin 3", "Status", "Open")
  7.  Else
  8.    CDK.setData("Plugin 3", "Status", "Close")
  9.  End If
  10. End Sub
  11.  
  12. Sub Plugin1_PosY_Change()
  13.  Call Plugin1_PosX_Change
  14. End Sub

Das Beispiel zeigt eine sehr einfache Anwendung. Die Wegberechnung des Roboters ist nicht an dem Öffnen der Tür beteiligt, was gewisse Nachteile hat. Die Tür wird beispielsweise auch dann geöffnet, wenn der Roboter zwar an der Tür vorbei, aber nicht hindurch fahren möchte. Aus diesem Grund wäre auch eine Plugin-Funktionalität auf dem Roboter sinnvoll und durchaus möglich, ist im Moment jedoch noch nicht vorhanden.

Die Gestaltung der Benutzeroberfläche ist ebenfalls durch Plugins möglich. Bereits angesprochene Anzeigefelder können programmiert werden, über die ein Darstellen und Editieren der Variablen möglich ist. Die Verknüpfung von Anzeigefeld und Variable geschieht einfach per Drag and Drop. Es können aber auch ganz neue Fenster programmiert werden, die komplizierte Eingaben ermöglichen. Ein Beispiel dafür wäre ein Karten-Plugin, über das die Karte des Roboters angezeigt und editiert werden kann.

Die Plugin-Funktionalität wird über ActiveX-DLLs realisiert. Jedes Plugin wird dabei als DLL kompiliert und in einem vorgesehenen Verzeichnis der Kontrollsoftware abgespeichert. Beim Starten der Software wird die DLL registriert und eingebunden, wobei ihr ein Objekt übergeben wird, über das es auf die Funktionen der Software zugreifen kann. Dieses Objekt (wir nennen es einfach "door") ist bildlich vorgestellt die Tür zu einem Raum, in dem sich alle Plugins treffen, um ihre Daten auszutauschen. Das Objekt beinhaltet mehrere Funktionen, die neben dem Lesen und Schreiben von Daten auch das Anzeigen von Meldungen, Steuern des Drag and Drop-Vorgangs etc. beinhaltet. Eine komplette Liste finden Sie im Anhang.
Das door-Objekt ist auch in dem Quellcode zur Programmierung der Beziehungen vorhanden. Im obigen Beispiel ist beispielsweise der Aufruf "CDK.setData" zu finden.

Mit so einer Software, die einen Schnittstellenstandard definiert, wäre es möglich, Geräte verschiedener Anbieter, die alle einen entsprechenden Treiber mitliefern, zu verknüpfen.