Maus-Steuerung in Java über OSC

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Funktionsweise

Die Maussteuerung ist ein Java-Programm, das Daten aus dem EyesWeb-Patch per OSC-Protokoll erhält und weiterverarbeitet. Über die eingegangenen Werte wird die Mausbewegung gesteuert. Realisiert wurden die generelle Bewegung, weiterhin das Drücken der Maus und ein einfacher Klick.
Eine Kamera nimmt den Benutzer und seine Bewegungen mit dem Datenhandschuh auf. Das Bild wird übermittelt an das Programm EyesWeb, das die Position der Leuchtdioden ermittelt und die Entfernung der Dioden zueinander berechnet. Diese Werte werden zusammen mit der Kameraauflösung über Port 3000 geschickt. Die Daten von der Java-Anwendung empfangen und verarbeitet, anschließend wird die Maus auf dem Bildschirm entsprechend bewegt.

Datenhandschuh kamera eyesweb.jpg

Die Maus-Steuerung benutzt neben den Standardbibliotheken eine externe Jar-Datei als zusätzliche Bibliothek. Die JavaOSC-Bibliothek wurde von C. Ramakrishnan / Illposed Software geschrieben und ist im Internet frei verfügbar. Die Bibliothek enthält verschiedene Klassen, die es möglich machen über Java OSC-Messages zu empfangen und zu verschicken. OSC steht für Open Sound Control und ist ein Protokoll, das dem Midi Protokoll ähnelt und vor allem in der Audioverarbeitung genutzt wird.
Aus dem OSC-Protokoll werden folgende Werte extrahiert:

  • X-Wert des Schwerpunkts
  • Y-Wert des Schwerpunkts
  • Diagonale
  • Kameraauflösung Breite
  • Kameraauflösung Höhe

Die X- und Y Werte werden jeweils mit dem Wert der Kameraauflösung verrechnet und auf die Bildschirmauflösung skaliert. Dabei ist zu beachten, dass nur die Hälfte der Bildschirmbreite genutzt wird. Der Bildschirm ist erweitert auf zwei Monitore und gibt die Ansichten über zwei Beamer auf die Leinwand aus. Da die Beamer jedoch übereinander und nicht nebeneinander strahlen, kann der Benutzer nur in einem Bereich der halb so breit ist wie die Bildschirmauflösung agieren. Die Diagonale ist der Indikator für das Drücken der Maus. Wenn die Diagonale sehr klein ist, d.h. die beiden Leuchtdioden sind eng zusammen, wird die Maus gedrückt. Wenn die Diagonale wieder größer wird, wird ein Klick ausgeführt.

In der Anwendung kann man einstellen, ab welcher Größe der Diagonale ein Drücken detektiert werden soll. Dieses Einstellen geschieht momentan noch statisch über Eingeben des Wertes auf der Oberfläche. Geplant ist, dieses Einstellen in Zukunft dynamisch zu generieren.

Zur besseren Erkennung des Drückens der Maus wurde ein Puffer programmiert, der jeweils 3 Diagonalen-Werte verrechnet. Erst wenn 3 Werte kleiner sind als die anfangs eingestellte Bedingung wird ein Drücken der Maus meldet. Durch Spiegelungen in Brillengläsern oder der Umgebung detektiert EyesWeb teilweise falsche Werte, die unter Umstanden zufällig einen Klick herbeiführen könnten. Durch den Puffer wird dies verhindert.

Dokumentationen der einzelnen Klassen

Ausgabe

Die Klasse "Ausgabe" ist die Oberfläche der Anwendung und gleichzeitig die Main-Klasse. Über sie kann die Anwendung gesteuert werden. Beim Start generiert sie ein Objekt der Klasse Voreinstellung und die Zentrale. Wenn der "Start"-Knopf gedrückt wird, wird diese Aktion in der Zentrale bemerkt. In der Oberfläche stehen Informationen über die Bildschirmauflösung und die Kameraauflösung. In späteren Versionen soll der Benutzer hier auch seine eigene Auflösung einstellen können. Das bedeutet, er legt fest, welchen Bereich des Kamerabildes er erreichen kann. Der Wert der Diagonale, von dem an ein Klick registriert wird, kann ebenfalls in der Oberfläche eingestellt werden. Momentan geschieht diese über eine manuelle Eingabe. Später soll dieses Textfeld ausgetauscht werden. Der Benutzer wird dann aufgefordert, seine Finger einmal zu Testzwecken zusammenzuführen und dieser Wert der Diagonale wird gespeichert als Bedingung für einen Klick.

Voreinstellung

Diese Klasse wird sofort nach Erstellen der Oberfläche aktiv und registriert einkommende Werte aus dem OSC-Protokoll. Sie extrahiert die Kameraauflösung und gibt diese, zusammen mit der Bildschirmauflösung in der Oberfläche aus.

Zentrale

Die Zentrale erzeugt ein Objekt der Klasse Verbindung und registriert das Drücken des Start-Knopfs. Daraufhin wird der Thread in der Klasse Verbindung gestartet, der auf einkommende OSC-Meldungen wartet.

Verbindung

Diese Klasse behandelt die die Verbindung zu dem OSC-Port. Sie erzeugt ein Objekt der Klasse OSCPortIn aus dem JavaOSC-Package und eine Objekt der Klasse Steuerung.
Sobald eine OSC-Meldung eingeht werden folgende Werte extrahiert:

  • Kameraauflösung
  • Koordinaten x und y
  • Länge der Diagonale

Diese Werte werden an die Steuerung weitergeleitet.

Steuerung

Diese Klasse ist ein Kind der Klasse Robot und kontrolliert und steuert die Mausbewegung. Die extrahierten Werte der OSC-Meldung werden verrechnet und die entsprechende Aktion ausgeführt.
Eine Auflistung der implementierten Maus-Aktivitäten:

  • mousemove
  • mousepress
  • mouserelease