Teilbericht

Das Inhaltsverzeichnis steht hier.

PC-Interface SAUS: PC-Interface

Autoren:

Datum: 16.01.96

Stichworte:


Zusammenfassung:

Im folgenden wird das Prinzip der Programmierschnittstelle für den Rollstuhl erläutert.


Motivation und Konzept

Die Ansteuerung der Sensoren bzw. Aktoren des Rollstuhls geschieht über Mikrocontroller. Diese können Befehle in Form von Nachrichten empfangen, die wiederum verschiedene Aktionen zur Setzen von Aktoren oder Lesen von Sensoren zur Folge haben. Um den Benutzer die Problematik der Kommunikation und den Nachrichten über dem CAN-Bus zu erleichtern, wurde eine Programmierschnittstelle in Form einer C++ Klasse entwickelt, die Funktionen zur Verfügung stellt, um die Hardwarekomponenten ansteuern zu können (Nähere Info siehe Klassendokumentation PCInterface !) . Bei den Funktionen, die den Mikrocontroller beeinflussen, werden die entsprechende Befehle und Werte in eine CAN-Bus Nachricht (Nähere Info siehe Dokumentation CAN-Bus !) verpackt und über den CAN-Bus zu den Mikrocontrollern geschickt. Dazu werden die Funktionen aus PCCAN.H benutzt, die den direkt CAN-Bus ansteuern. Die Funktionen, die Sensorwerte zurückgeben, lesen im allgemeinen klasseninterne Variablen aus, die durch empfangende Nachrichten aktualisiert werden müssen. Dies kann durch eine einmalige Anforderung (request) nach einer Sensornachricht an den Mikrocontrollern oder durch Aktivierung des automatischen Senden von Sensornachricht vom Mikrocontroller (polling) geschehen. Damit durch das Warten auf eine Nachricht vom Mikrocontroller keine laufende Applikation aufgehalten bzw. am Abarbeiten anderer Aufgaben blockiert wird, wurde der Empfang der Nachrichten durch einen zeitgesteuerten Interrupt realisiert. Dieser empfängt jede CAN-Nachricht, wählt die relevanten Nachrichten aus, entpackt die Inhalte und schreibt diese in entsprechende klasseninternen Variablen.

Senden

Generell müssen die Werte für RTR, subID, identifier, datalength und data zum Senden bekannt sein, um eine CAN-Bus Nachrichten formatieren zu können (Nähere Info siehe Aufbau CAN-Bus Nachricht CAN-Bus !) . Folgende Hardware-Komponenten des Rollstuhls können beeinflußt werden:

Motor

Bei dem Motor kann die Motorspannung und damit die Geschwindigkeit gesetzt werden. Dabei sind Werte von 0 bis 255 möglich, wobei 0 keine Spannung und 255 volle Spannung am Motor bedeutet. Erfahrungsgemäß bewegt sich der Motor erst ab einen Wert um 10.

Ultraschall

Zur Anfrage nach Ultraschallwerten müssen bestimmte Feuerstrategien (Nähere Info siehe Feuerstrategien Hardware Rollstuhl) übergeben werden. Dabei gibt es eine Sende- und eine Lesemaske, die Werte von 0 bis 255 annehmen können. Wenn die Nachricht am Knoten angekommen ist, werden die verlangten Werte sofort zurückgeschickt und können dann ausgelesen werden. Es besteht noch die Möglichkeit des automatischen Senden von Ultraschallmessungen. Dabei müssen Feuerstrategien übergeben werden, die dann nacheinander angewandt und die Ergebnisse in bestimmten Zeitintervallen automatisch zum PC geschickt werden.

Odometrie

Bei der Odometrie kann eine einmalige Anfrage nach aktuellen Werten oder ein automatisches Senden des Mikrocontrollers aktiviert werden. Die Sendefrequenz beim automatischen Sendens errechnet sich aus dem übergebenen Wert/10 in Sekunden. Danach werden ein oder mehrere Odometrie-Nachrichten zum PC verschickt, die dann mit den Funktionen für die Odometrie ausgelesen werden können.

Lenkwinkel

Der Lenkwinkel kann Werte zwischen -128 und 127 annehmen, wobei negative Werte ein Links- und positive Werte ein Rechtseinschlag der Lenkräder zur Folge hat. Der wirkliche Einschlag hängt von Umgebungsbedingungen ab.

Bumper

Es kann eine einmalige Anfrage nach den Bumperzuständen angefordert werden. Dies ist nur bei Initialisierung des Systems sinnvoll, da normalerweise eine Bumpernachricht gesendet wird, sobald einer betätigt wurde.

Empfang

Der Empfang auf der PC-Seite geschieht über ein zeitgesteuerten Interrupt. Dabei wird die Funktion OnInterrupt() 10 mal pro Sekunde aufgerufen und prüft dabei, ob im CANBus-Buffer eine Nachricht angekommen ist. Wenn das der Fall ist, wird diese anhand des Identifiers identifiziert und der Inhalt der Nachricht entsprechenden Variablen zugeordnet. Folgende Sensorwerte können empfangen werden:

Ultraschall

Je nach Lesemaske können die gemessenen Werte übernommen werden. Die Werte der empfangenen Ultraschallnachrichten werden in einen zweidimensionalen Array von 0 bis 255 und 0 bis 1 geschrieben, wobei der Index von 0 bis 255 die Lesemasken interpretiert und der andere Index dazu, dient den Empfang zu sichern, indem die Nachrichtenfolge erst im Index 0 geschrieben wird und erst wenn alle Nachrichten empfangen wurden, die Werte in Index 1 kopiert werden. Die empfangenden Werte repräsentieren die Nummer des Ultraschallsensors und des entsprechenden Abstand zum vorliegenden Objekt in cm. Da in Abhängigkeit von der Lesemaske auch Sensoren keine Werte liefern können, werden diese mit dem Wert -1 markiert (Nähere Info siehe Nummerierung Ultraschall Hardware Rollstuhl !) .

Bumper

Eine Bumper-Nachricht wird automatisch gesendet, wenn einer der Bumper betätigt wurde. Danach können die Zustände der einzelnen Bumper ermittelt werden. Aus Sicherheitsgründen stoppt der Motor sofort bei Aktivierung eines Bumpers. Die gelieferten Werte repräsentieren die Nummer des Bumpers und der Zustand, gedrückt oder nicht (Nähere Info siehe Nummerierung Bumper Hardware Rollstuhl !) .

Odometrie

Alle aktuellen Odometriewerte werden in einer Nachricht empfangen und können durch verschiedene Funktionen ausgewertet werden. Zurückgeliefert wird die Anzahl der Impulse pro Zeiteinheit, die zurückgelegte Distanz und die Anzahl der aufgetretenden Fehler jeweils rechts und links.