In einer Zusammenarbeit zwischen dem IWR und dem Archäologischen Institut werden Keilschriften antiker Steintafeln analysiert.
Diese Keilschriften werden per Laserscanner abgetastet und auf den Computer übertragen. Anhand der Scandaten werden Vektorgrafiken
der Keilschriften erstellt. Dennoch müssen, auf Grund von Scanfehlern, Unleserlichkeiten bzw. wegen Vektorgrafiken, die vor
der Laserscannerzeit erstellt wurden, Keilschriften von Hand mit einem Vektorprogramm nachgezeichnet werden. Dazu wurden entweder
Touchscreens oder Grafiktablets eingesetzt. Beide Möglichkeiten sind teuer. Beim Grafiktablet kommt hinzu, dass die Bedienung nicht
intuitiv ist und dem Nachmalen am Bildschirm nicht gleichzusetzen ist. Ziel des Softwarepraktikums war eine Machbarkeitsstudie, die
untersuchen sollte ob Touchscreens oder Grafiktablets durch den geschickten Einsatz einer
Wiimote (Eingabegerät der Nintendo Wii) ersetzt werden könnten.
Dazu sollte zunächst die
Anbindung der Wiimote an einen Computer mit Linux-Betriebssystem über
Bluetooth untersucht werden. Der nächste Schritt sollte der Bau eines
Infrarotstiftprototypen sein
um danach eine einsatzfähige
Arbeitsumgebung bauen zu können.
Für die Anbindung der Wiimote an einen Computer verwendeten wir ein handelsübliches USB-Bluetooth-Dongle. Unter Ubuntu wurde das Softwarepaket
bluetooth für die Kommunikation mit blueZ-Stack und die Pakete
libcwiid1 bzw.
python-cwiid als (python-)API für die
Wiimote benötigt. Der ursprüngliche Plan die Software von Grund auf neu zu schreiben wurde schnell fallengelassen als wir die Applikation
python-whiteboard mit nahezu gewünschter Funktionalität auf
GitHub fanden.
Darüber hinaus untersuchten wir inwieweit eine eigene Anbindung mit einem python-Maustreiber besser ist als die o.g. Applikation. Wobei
keine Unterschiede festzustellen waren, sodass wir uns für die Weiterarbeit mit
python-whiteboard entschieden.
Probleme gab es im Test mit dem Abstand der Wiimote zur anzeigenden Oberfläche (Bildschirm/Wand bei der Verwendung eines Beamers).
Der Abstand musste, besonders zur Wand, auf Grund des Erfassungswinkels so groß gewählt werden, dass das Infrarotsignal zu schwach für
die Erkennung wurde. Ein weiteres Problem war, dass
python-whiteboard nur den Umgang mit einer Wiimote erlaubt. Eine zweite Wiimote
konnte damit keine Verbesserung bringen. Dazu kam, dass die Software, besonders in der Erkennung und Anbindung der Wiimote, nicht fehlerfrei
war und einige Male den Dienst vorübergehend verweigerte.
Die ersten Tests wurden mit einem simplen Aufbau aus Akkupack(2x Typ AAA), Widerstand und Infrarot-LED(3mm) vollzogen. Durch die geringe Lichtstärke der
LED war dieser Aufbau ausschließlich für Versuche innerhalb einer Entfernung von 2m zu verwenden. Hinzu kommt, dass das Aus- bzw. Einschalten mittels
an- bzw. abklemmen des Akkupacks geregelt wurde.
Erster Prototyp
Der erste verwendbare Prototyp wurde mit einer stärkeren, größeren(5mm) LED ausgestattet. Hinzu
kommt die Verwendung des richtigen Widerstands (der mitgelieferte Widerstand entsprach nicht der passenden Ohmzahl). Ein eingebauter Tippschalter
ermöglichte zielgerichtetes Einschalten der LED.
Zweiter Prototyp
Zweiter Prototyp eines IR-Stifts.
Zweiter Prototyp eines IR-Stifts (Schema).
Um näher an das Vorbild eines Whiteboards heranzureichen verwendeten wir für diesen Prototypen eine leere Hülle eines Edding-Stifts. Die IR-LED
ersetzte die Stiftspitze und wurde mit Hilfe der Feder eines Kugelschreibers auf einem Tippschalter im Inneren des Stifts montiert. Dadurch wurde
ein drucksensibles einschalten der LED ermöglicht. Da die Hülle nur wenig Platz bot, der Feder/Schalter-Aufbau jedoch viel Raum einnahm hatte nur
noch ein Akku (Typ AAA) in dem Aufbau platz. Dies führte zu einer deutlich erkennbaren reduzierten Lichtstärke der LED. Ursprünglich hätte der
Prototyp anstatt des Feder/Schalter-Aufbaus lediglich mit einem Taster an der Stiftspitze ausgestattet werden sollen. Da dadurch aber keine
Positionierung der LED mehr möglich war musste diese einfachere Lösung der tatsächlichen weichen. Ein weiteres Problem das auffiel war der Abstrahlwinkel
der LED. Im Gegensatz zu einem IR-Laser streut eine LED das ausgesendete Licht, was widerrum zu einer Unschärfe in der Erkennung führt.
Umgehen ließe sich dieses Problem nur durch aufwendige optische Verbesserungen (Linsen, Spiegel, ...), die uns aus Kostengründen nicht zur
Verfügung standen. Ein weiterer Punkt, der gegen die Benutzung des Prototyps sprach war das, trotz der Verwendung nur eines Akkus, hohe Gewicht. Ausserdem ließ sich der zweite Prototyp nicht wie gehofft verwenden, da der Widerstand zwischen der druckemfpindlichen LED und jeder von uns getesteten Oberfläche zu hoch war, als dass ein flüssiges Schreiben möglich gewesen wäre.
Dritter Prototyp
Dritter Prototyp eines IR-Stifts.
Dritter Prototyp eines IR-Stifts (Schema).
Vor allem Aufgrund des letzen Umstands, haben wir uns letztendlich für den Bau eines dritten Prototypen entschieden.
Dieser sollte möglichst einfach sein und nicht aus viel mehr als einer LED als Stiftspitze und einem Tippschalter, der per Finger bedient wird, bestehen.
Da der Sensorschalter im vorderen Teil des Stifts wegfiel war soviel Platz, dass der Akku komplett in das Gehäuse integriert werden konnte, was sich
positiv auf den Schwerpunkt auswirkte. Gleichzeitig war die Integration des Akkus ein Problem, da die Stiftlänge nun so kurz war, dass er nur noch schlecht
zu greifen war und die Stifthaltung unnatürlich wurde.
Vierter Prototyp
Vierter Prototyp eines IR-Stifts.
Der vierte und damit finale Prototyp war lediglich eine Erweiterung des dritten Prototyps um dessen Fehler auszubessern. Die geringe Lichtstärke durch die Verwendung von nur
einem Akku (siehe 2./3. Prototyp) war das größte Problem, dass es zu beseitigen galt. Da die Stiftlänge ohnehin nicht ausreichte wurde kurzerhand der zweite
Akku als Stiftverlängerung angebracht. Somit konnten zwei Fliegen mit einer Klappe geschlagen werden. Bisher wurde nicht berücksichtigt, dass die Akkus irgendwann
geladen werden müssen. Da wir Heißkleber und Strukturklebeband verwendeten kam ein einfaches Herausnehmen der Akkus nicht in Frage. Zwei Ladedrähte, an die ein
Ladeadapter gelötet werden kann, lösten das Problem.
Vertikale Projektionsfläche
Der erste Arbeitsplatz, der erprobt wurde, war mit starkem Bezug auf das Ursprüngliche Projekt, ein Whiteboard zu bauen. Deswegen fanden
unsere ersten Tests an einer vertikalen Projektioinsfläche statt. Während unserer Tests fanden wir heraus, dass sich eine vertikale Projektionsfläche nicht gut für das dauerhafte und präzise Arbeiten eignet. Unsere Hauptprobleme:
- Der Schatten der Hand verhindert die Sicht auf das von hinten projizierte Bild
- bei längerem Arbeiten ist eine stehende Arbeitsposition sehr unbequem
- der Abstrahlwinkel der LED ist direkt nach vorne. Eine präzise Erfassung ist damit nahezu unmöglich
- die Oberfläche reflektiert die IR Strahlung nicht gut, was in der Natur einer Leinwand liegt
Horizontale Arbeitsfläche
Vor allem die unbequeme Arbeitsposition brachte uns zu der Überlegung, dass eine horizontale Arbeitsfläche besser geeignet ist.
Wir erprobten eine Tischprojektion, verwarfen diese aber recht schnell aus folgenden Gründen:
- Projektionsabstand zwischen Beamer und Tisch um eine annehmbar große Arbeitsfläche herzustellen,
erscheint schwierig
- das gleiche Argument gilt auch im Hinblick auf die Mobilität oder geteilten Arbeitsplatz
- der Schatten der eigenen Hand blieb weiterhin ein Problem
- die Anbringung der Wiimote in der Nähe des Beamers wurde so deutlich schwieriger
Unser nächster Schritt, war die Erprobung eines TFT Monitors. Um ihn vor Kratzern und Druckstellen zu schützen,
passten wir eine Plexiglasscheibe ein, die das komplette Display abdeckt und in den Rahmen des Monitors passt. Der Monitor
ist die bestmögliche Lösung bisher, denn:
- das Arbeiten erfolgt sehr ähnlich wie mit einem Grafiktablett
- der Montior erlaubt das Ausschließen jeglicher Schatten der Hand auf dem Bild
- der Aufbau ist viel unkomplizierter als mit einer Tischprojektion
- die Wii-Mote ist leichter Anzubringen, z.B. mit Hilfe eines Stativs
Ausrichten der Wiimote mit Hilfe eines Stativs.
oder KlebebandAusrichten der Wiimote mit Hilfe eines Stuhls,Pappe und Klebeband.
Um in einer Produktivumgebung mit dem Whiteboard zu arbeiten stellten wir fest, dass die Präzision, mit der die Infrarotsignale erkannt werden, unzureichend war.
Präzisionserhöhung durch Einsatz mehrerer Wiimotes
Verwendung mehrerer Wiimotes zur Präzisionserhöhung.
Unsere Idee war, mehrere
Wiimotes einzusetzen. Jeder Wiimote sollte eine Koordinate zugeordnet werden. Der Versuchsaufbau enthielt jeweils eine Wiimote für X- bzw. Y-Koordinate. Da hierbei, auf Grund der
Projektionsumrechnung, die Whiteboard-Applikation nicht mehr genutzt werden konnte, programmierten wir uns eine eigene Testapplikation. Von jeder Wiimote sollte nur die Positionsdaten
des X-Wertes übernommen werden. Die X-Werte der zweiten Wiimote stellten die Y-Koordinate dar. Mit einer API für Mausbewegungen setzten wir die Koordinatenwerte in Bewegungen des Mauszeigers
um. Was wir nicht bedacht hatten war, dass die Ausrichtung beider Wiimotes extrem präzise sein muss, um die volle Arbeitsfläche zu erfassen und gleichzeitig so nahe an der Fläche zu bleiben,
dass das Signal nicht zu schwach wird. Da die Wiimotes nicht so präzise eingesetzt werden(Abtastwinkel entspricht nicht der theoretischen Angabe) konnten wurde diese Idee der
Präzisionserhöhung wieder verworfen.
Präzisionserhöhung durch Mittelwertbildung
Einstellbare Schwellenwerte.
Euklidisches Limit.
Unsere Beobachtungen zeigten, dass pro
Klick mit dem IR-Stift im Schnitt etwa 8 Signale durch die Wiimote empfangen werden. Bei stillstehender Siftspitze sollte man 8 gleiche Werte
erwarten. In der Praxis kommen allerdings Werte mit einer unberechenbaren Streuung am Empfangsgerät an. Grund dafür sind Unebenheiten in der Oberfläche und, damit verbunden, Spiegelungen,
die das Signal verfälschen. Die Mehrheit der verfälschten Daten liegt nahe am tatsächlichen Wert, was im unbearbeiteten Zustand zu einem Wackeln des Mauszeigers führt. Vereinzelt treten
Ausreißer auf, die den Mauszeiger kurzzeitig über die Projektionsfläche rasen lassen. Um dem Mauswackeln entgegen zu wirken entwickelten wir einen Datenfilter zur Mittelwertbildung. Die
eingehenden Signale werden dabei auf ihren Zeitstempel und ihre örtliche Abweichung hin analysiert. Als Referenzwert dient ein Startsignal. Liegt der Zeitstempel eines eingehenden Signals
innerhalb eines eingestellten
deltas wird der Wert gespeichert. Liegt ein Folgewert über
delta aber innerhalb eines eingestellten
limits wird der Mittelwert über dem
aktuellen Signal und den gespeicherten Signalwerten gebildet und als Mausbewegung ausgegeben. Liegt der Wert über dem limit oder übersteigt der euklidische Abstand des Werts ein
euklidisches limit werden alle gespeicherten Werte verworfen. Der aktuelle Wert wird daraufhin zum neuen Referenzwert.
In der Praxis ließ sich für die Werte
- delta = 0.04
- limit = 0.5
- euklidlimit = 20
eine Optimierung erzielen.
Die Testapplikation(Erweiterung.py) findet sich in den
Downloads.
Innerhalb des Praktikums kamen einige Ideen auf, wie man das Whiteboard optimieren könnte. Aus Zeit- und Geldgründen konnten wir folgende Punkte nicht umsetzen. Sie sollen aber zukünftigen
Praktikanten die die Whiteboard-Idee aufgreifen zeigen, was noch möglich wäre:
- Umsetzung von Stiftgesten
Ähnlich wie bei Mausgesten wäre es möglich besondere Befehle(z.B. Hin-/Herauszoomen)
mit Stiftgesten umzusetzen.
- Glas statt Plexiglas
Wie bereits erwähnt sorgt der Einsatz einer Plexiglasscheibe für Unebenheiten und damit zu ungewollten Spiegelungen auf der Oberfläche. Eine starre
Glasscheibe könnte dieses Problem verhindern.
- IR-Laser/Linsen
Da IR-LEDs das ausgesendete Licht nicht punktgenau ausstrahlen entsteht eine gewisse Unschärfe. Abhilfe könnte dabei ein IR-Laser oder der Einsatz von Linsen
schaffen.
- (Multi-)Touchscreen
Das, was eigentlich durch das Praktikumsergebnis ersetzt werden soll ist vielleicht doch die zwar teurere jedoch präzisere Lösung. Touchscreens mit Multitouch
erlauben zudem besondere Befehle für das Zoomen der Arbeitsfläche.
Binary Packages
Source Code
Folien