Virtual-Laser-Pointer
In Großindustrien werden im Design- und Konstruktionsprozess Videowände zum Anzeigen von 1:1 CAD-Modellen eingesetzt. Diese Wände haben oft eine Bespielte Fläche von mehreren Quadratmetern. Um einen bestimmten Bereich des Contents markieren zu können, wurden früher herkömmliche Laserpointer eingesetzt. Im Zeitalter von hochabsorbierenden Rückprojektionswänden und nicht reflektierenden LED-Wänden sind diese jedoch so gut wie unsichtbar. Daher muss der Marker digital in das Videosignal eingearbeitet werden.
Das für die Firma Viscon entwickelte System ‚Viscon Virtual-Laser-Pointer‘ kurz VLP ist mit bis zu sieben Nutzern Kollaborativ nutzbar. Die Videoquelle für hochaufgelöste Videowände besteht aus mehr als einem Rechner. Der VLP unterstützt daher Render-Cluster Rechensysteme.
Virtual-Laser-Pointer, ein gelber dreieckiger Marker als VRED Overlay.
Eingabesystem
Die erste Herausforderung in dem Projekt war es, Handgehaltene Eingabegeräte mit integrieren IMU Sensor über Bluetooth mit dem VLP-Server zu verbinden. Zum Einsatz kommt ein Bluetooth 2.1 Empfänger der Leistungsklasse 2. Die Bluetooth Datenverarbeitung erfolgt mit Blue-Z, der offiziellen Protokoll Implementierung für Linux Systeme. Die ausgewählten Eingabegeräte werden zunächst mit dem Linux System verbunden. Die Datenannahme erfolgt fern ab vom vorgesehen HID Standard, da die Geräte diesen nicht befolgen. Über einen RAW Socket werden alle Pakete entgegengenommen und auf Byte ebene gefiltert. Blue-Z ist eine C Bibliothek, daher wurde dieser Part als extern C im Backend implementiert.
Das Backend verarbeitet die Eingabedaten in Echtzeit. Die Drehung der Hand wird mithilfe einer Rotation-Matrix, Hochfrequente eingaben mittels FFT herausgefiltert. Das gefilterte Signal wird einer Marker Grafik zugewiesen die sich dann, abhängig von der Eingabe über die Videowand bewegt.
Erzeugt wird die Grafik auf den entsprechenden Rechnern des Render-Clusters. Die wird eine Windows-Forms Anwendung ausgeführt, die mit OpenGL die Marker rendert oder die Fenster verschiebt.
Virtual-Laser-Pointer, Testaufbau mit zwei Laptops und einem Desktop PC.
Netzwerk Kommunikaton
Die Server Client Kommunikation erfolgt mit C++ UDP Sockets und JSON Datenpaketen. Der Server sendet über die Broadcast Adresse, an einem Spezifitäten Port den Datenstrom an die Clients. Die Clients horchen auf diesen Port. Der Datenstrom verrät den Clients die Server IP-Adresse. Der Client meldet sich mit allen angeschlossenen Displays beim Server an, der Server antwortet mit der Globalen Positionierung des Clients.
Nach der Anmeldung entscheidet jeder Client anhand seiner globalen Positionierung und der einzelnen Marker Koordinaten ob und wo ein Marker angezeigt werden soll.
Benutzeroberfläche
Jedes Eingabegerät und Clients lassen sich individuell konfigurieren. Das Frontend wird mit einem nginx im lokalem NAT gehostet und ist vom Web Browser bequem erreichbar. Die Kommunikation mit dem Backend Erfolg über ein im Backend implementierten Web socket und JSON Datenpacket. Es gibt zwei wesentliche Registerkarten.
Eingabegeräte
Um das Eingabeerlebnis anzupassen kann hier die Grafik, die Start Position, Geschwindigkeit und Größe der Marker angepasst werden. Damit sich die Verschiebung der Marker Grafik natürlich anfühlt muss je nach Größe des Videowand die Geschwindigkeit angepasst werden.
Client
Pixelgenau wird hier jedes Display realitätsgetreu und pixelgenau angeordnet. Lücken und Überlappungen sind erlaubt um größtmögliche Flexibilität zu gewährleisten.