FlyStick

Bestandsaufnahme

In der CAVE der TU Chemnitz, IWP wird dieses Eingabegerät verwendet, aber auch an der POWERWALL sowie im benachbarten IWU (FhG).

Es ist Teil des Vicon Tracking Systems, welches auch an anderen Stellen recht reparaturanfällig ist. Inzwischen war, Ende 2014 wurde alles, bis auf die FlySticks, ausgetauscht. Mit anderen Worten, die von mir gemachte Lösung ist auch heute noch (2015) unverändert im Einsatz.

Handgerät

So sieht er aus. Ein Hohlstecker steckt an seinem Ende, damit der Akku nicht leer läuft.

An den fünf retroreflektierenden (ansonsten gleichartigen) Kugeln wird mit Hilfe mehrerer Infrarot-Kameras (mit IR-Scheinwerfern) die Lage des Flysticks im Raum ermittelt (einige Bildverarbeitung erforderlich).

Für die beiden Knöpfe (einer oben, der andere an der Unterseite) ist ein 869-MHz-Funksender eingebaut. Es ist sogar ein Transceiver (also mit Empfänger), so dass man damit eine störungsfreie, zuverlässige Datenübertragung realisieren kann, oder auch ein Firmware-Update des enthaltenen Mikrocontrollers.

Und das ist der herausgefundene Schaltplan.

Schaltplan, mal schnell „disassembliert“

Der Grund für diese Untersuchung ist die unzuverlässige Übertragung der Steuerkommandos. Noch mehr stört, dass manchmal unkontrolliert Kommandos ausgeführt werden! Dies scheint etwas von der Auslastung des WLANs im Raum, vom Gebrauch von Bluetooth, Handys und Drahtlosmikrofonen abzuhängen. Von der Herstellerfirma wurde keine Verbesserung in Aussicht gestellt.

Beim genauer Analyse des Schaltplans, der Signale und der mechanischen Konstruktion fallen eine Menge Ungereimtheiten auf:

Das ganze Gerät kostete sicherlich einige 100 €! Hand aufs Herz, so etwas nenne ich Fehlkonstruktion!

Erste Umbaumaßnahme: Höhere Abstrahlungsleistung

Ohne die Firmware zu ändern oder den Mikrocontroller zu wechseln.

Zweite Umbaumaßnahme: Einfaches Ladegerät

Mitgeliefert wird ein Standfuß und ein professionelles Ladegerät Ansmann ACS110 traveller. So weit, so gut. Immer wieder kommt es vor, dass das Ladegerät nicht fertig wird mit Laden und die Akkus zerbrät. Das ist eben das Problem der Schnellladegeräte: Volle und noch warme Akkus werden als leer erkannt und geladen, bis sie glühen und kaputt gehen. Wirklich!! Von der Brandgefahr ganz zu schweigen. Ladegeräte, bei denen man die Akkus einlegen muss, haben dafür wenigstens eine Temperaturüberwachung.

Hin wie her, der Flystick wird maximal 1 Stunde pro Tag benutzt und minimal 23 Stunden pro Tag geladen. Wer braucht da einen Schnell-Lader? Richtig: niemand.

Eine Konstantstromquelle samt Miniatur-Trafo passt in den Standfuß und erspart obendrein die ewig störende Wandwarze. Mit 50 mA Ladestrom (viel weniger als ein Zehntel der Nennkapazität) kann man keine Akkus totbrennen. Zum Glück ist der Standfuß genügend dickwandig zum Basteln und bietet genug Hohlraum für den Trafo.

Pardon, Kein Foto vorhanden

Beim Ersatz der Schaltung mit einem besseren Mikrocontroller würde ich von Akkus zu Trockenbatterien umschwenken wollen, das ist letztlich zuverlässiger.

Empfangsteil

Es verbleiben immer noch die gelegentlichen Fehl-Tastendrücke. Obwohl es nun deutlich seltener passiert. Was wohl die Empfangseinheit macht? Wahrscheinlich einfach nur das Signal des Funkempfängers durchreichen.

   
Der Funkempfänger. Gespeist von einem Steckernetzteil.

Beim Anblick habe ich prompt die Hände über den Kopf zusammengeschlagen! Zwei Mikrocontroller! Zwei gleiche Quarze. Womöglich nur zur Baudraten-Konvertierung.

Und das ist der Schaltplan:

 
Schaltplan, mal schnell „disassembliert“

Die Schaltung ist derart trivial, dass diese keiner weiteren Erklärung bedarf.

Neubau

Da die vorhandenen FlySticks nicht für die Zeit des Umbaus abgezogen werden können, wird hier auf Neubau gesetzt. Mit NC-Fräsmaschinen sollte es keine Hürde sein, den Kopf nachzubauen. Auch ein probeweiser 3D-Druck sah ganz brauchbar aus, wurde jedoch (damals!) wegen zu erwartender geringerer Bruchfestigkeit verworfen.

Auf PC-Seite geht es stets per USB in den Rechner. Das erspart Wandwarzen und ähnliche Stromversorgungsprobleme. Das Gerät meldet sich schließlich als Joystick mit 2 Tasten und null Hebeln.

 
Unser Nachbau ist kürzer. drahtgebunden: An seinem Ende ist ein 4-poliger Binder-Stecker (Typnummern Kupplung: 719-09-9764-70-04, Einbaustecker: 719-09-9765-30-04) für den USB-Anschluss.

Mechanisch wurde hier das Elektronikteil samt LED und Taster komplett in den verlängerten Plast-Kopf gesteckt. Dadurch kann das Aluminium-Gehäuserohr per Zentralgewinde angeschraubt werden, und die fummeligen radialen Schrauben des Originals entfallen.

drahtgebunden: Im Gehäuse ist genügend Platz für das reichlich lange Kabel zum Buchsenstopfen, welches beim Eindrehen entsprechend verwunden im Innern zu liegen kommt.

drahtlos: Im Gehäuse ist Platz für 2 R3-Primärzellen, so wie im Original. Da die Ruhestromaufnahme extrem gering ist, ist keine Lademöglichkeit notwendig oder vorgesehen. So ist der Stopfen frei von Kabeln und kann problemlos aufgeschraubt werden, etwa zum Batteriewechsel.

drahtgebunden

Einfach zwei Joystick-Knöpfe und ein Joystick-zu-USB-Konverter. Mal ganz einfach. Der Konverter wurde bereits 1× in der Bastelkiste vorgefunden.

Ein weiterer wird mittels V-USB und ATtiny44 aufgebaut. Hier ist die Firmware. Diese gibt sich als Joystick mit 2 Tasten und null Hebeln aus und überträgt pro Report gerade mal 1 Byte mit sinnvollen 2 Bits. Zumindest Windows XP kommt damit problemlos zurecht. Ob es die VR-Software auch tut? — Ja, problemlos!

[Foto]
Leiterplatten-Bestückung als kabelgebundener HID-Joystick. Die zusätzlichen Bauelemente sind 2 USB-Serienwiderstände und 2 Dioden zur Speisespannungsreduktion

drahtlos

Kompletter Ersatz sowohl der Sende- als auch Empfangselektronik, mit folgenden Eigenschaften:

Schaltung Handgerät

Das Handgerät (der eigentliche FlyStick) bekommt immer ein und dieselbe Leiterplatte. Hier der Schaltplan, das Layout oben und unten sowie die komplette Eagle-Quelle. Aufgebaut wird in 3 Bestückungsvarianten. Diese stehen im Schaltplan.
Die Anschlussvarianten hierzu sind:

Anschlussvarianten
VarianteAusführung/AnschlüsseX1X2X3X4X5X6X7X8X9D+D–
AMit vorgefundenem USB-Joystick-Konverter (drahtgebunden)-----GNDT1 zum Konv.T2 zum Konv.5 V vom Konv.--
Am Joystick-Port (15-pol. SubD-Buchse)-----Pin 4Pin 2Pin 7Pin 1--
BUSB-HID-Joystick im Mikrocontroller (drahtgebunden)-5 V von USB---GND---D+D–
Cmit UHF-FM-Transceiver RFM12 (drahtlos)-3-V-Batterie +---Batterie -----
B+CFirmware programmierenRESET3..5 VSCKMISOMOSIGND-----
[Foto] [Foto]
Die Schaltung mit den zwei gegenüber liegenden Tasten passt in den FlyStick-Kopf

Schaltung „Empfänger“

Die Schaltung passt in das gern verwendete Reichelt-Kleingehäuse KS21. Die Antenne wurde im Stegreif um die Schaltung herum gelegt (nicht berechnet!). Hier ist das Layout oben und unten zu sehen.

[Foto] [Foto]
Die aufgebaute Schaltung kommt mit nur wenigen Bauelementen aus

Hier habe ich, um Probleme mit dem USB-Bootloader bei hochgezogenem OSCCAL zu umgehen, den 12-MHz-Quarz bestückt.

Firmware

Welch ein Glück, Variante A braucht keine Firmware, der vorgefundene Mikrocontroller ist bereits fertig programmiert. Für die übrigen Varianten wird Firmware benötigt.

Firmware Handgerät mit USB-Kabel (Variante B)

Firmware Handgerät mit UHF-FM-Transceiver (Variante C)

Vorüberlegungen:

Tatsächliche Implementierung: Wegen der spürbaren Latenzzeit und der geringen effektiven Datenrate wurde das Baken-Konzept verworfen, und der FlyStick sendet bei Tastendruck einfach drauflos. Jedem der drei FlySticks und jedem der drei Empfänger wird je eine von 12 Frequenzen im 433-MHz-Band zugewiesen, nichts weiter. Das Acknowledge kommt vom Empfänger unmittelbar danach. Den RFM12 in Betrieb zu nehmen erwies sich als recht kompliziert, da das Datenblatt keine vernünftige Auskunft über das Funktionsprinzip und das how-to-use gibt. Daher kursieren im Netz jede Menge Halbwahrheiten. Ich habe deshalb etwas auf der o.a. Webseite ergänzt.

Firmware „Empfänger“ (Variante C)

Vorüberlegungen

Tatsächliche Implementierung: Das Prinzip des Sensornetzwerks (ähnlich ZigBee) wurde verworfen und auf die einfacher handhabbare 1:1-Beziehung gesetzt. Das heißt, 1 FlyStick hat genau 1 zugeordneten Empfänger. Im Anwendungsfall ist das Propagieren von Funk-Ereignissen wegen der geringen zu überbrückenden Entfernungen niemals nötig. Auch werden keine Baken verwendet.

Die Zuordnung erfolgt über eine fest einprogrammierte Wireless ID {Usage Page: 0x06, Usage ID: 0x22} mit 4 Bit; dies lässt 16 FlySticks zu. Standardmäßig ist für jede benutzte Wireless ID ein eigener Wireless Channel {Usage Page: 0x06, Usage ID: 0x21} aus 12 „Kanälen“ im 433-MHz-Band voreingestellt. Der Kanal ist vom Anwender einstellbar, und mehrere FlySticks mit verschiedener Wireless ID dürfen auf dem gleichen Kanal arbeiten.

Nicht implementiert (vergessen) wurde die Rückmeldung von Battery Strength {Usage Page: 0x06, Usage ID: 0x20}.

Die Eigenschaften der „Usage Page 6“ können mit dem Programm HidParse betrachtet und ggf. geändert werden.

Einsatzerfahrungen

Bedrahtete FlySticks

Die zwei bedrahteten Geräte funktionieren erwartungsgemäß störungsfrei.

Um den Betrieb an übermäßig langen (eigentlich unzulässigen) Anschlussleitungen zu ermöglichen wurde die Doppeldiode durch einen Festspannungsregler LP2950-33 ersetzt sowie die Serienwiderstände in den Datenleitungen auf 22 Ω verkleinert.

Probleme traten auf, als das Kabel aus dem Stecker gerissen wurde. Oder von einem Stuhlbein zerquetscht wurde. Gegen Gewalt gibt's kein probates Mittel … Auch ist das Aufräumen von 5 m Kabel lästig. Nach Jahren ohne Pflege sieht es ziemlich schmuddelig aus.

2018 ist eine der Tasten („Knackfrosch“) des ersten bedrahteten Flysticks ausgefallen. Diese Tasten fallen auch anderswo mal aus. Ersatz wurde umgehend eingelötet, liegt herum.

Funk-Flysticks

Bei den drei Funk-FlySticks bin ich bereits bei der Schaltplanerstellung in eine böse Falle getappt: Beim USI des ATtiny44 ist SDO auf MISO und SDI auf MOSI, unabhängig ob SPI-Master oder -Slave. Somit habe ich die falschen Leitungen für die Nutzung von USI angeschlossen, und damit muss das SPI-Protokoll per Software implementiert werden, was so nicht beabsichtigt war.

Die Ruhestromaufnahme liegt bei 0,7 µA. Die zwei R3-Zellen mit angenommenen 500 mAh Kapazität halten somit rechnerisch 70 Jahre; ein Ausschalter erübrigt sich wie geplant. Beim Senden liegt die Stromaufnahme bei 30 mA, in den Sendepausen bei 3 mA (zz. laufen beide Oszillatoren weiter, könnte man noch deutlich reduzieren).

Mitten in der Entwicklungsphase streikte der ATtiny44 vollends. Dies lag schließlich daran, dass der RFM12 ein Reset-Kommando beim Programmieren abbekommen haben muss und daraufhin RES permanent nach LOW zog. Man sollte es also vermeiden, die beiden Reset-Eingänge zu verbinden, wenn man noch genügend Pins frei hat. Schließlich wurden VDI, IRQ und FFIT gar nicht gebraucht.

Nach einigen Jahren (2014) fiel ein FlyStick aus. Ursache waren verformte Kontakte des Batterie-Halters. Also ein mechanisches Problem. Anscheinend öfters heruntergefallen.

Ein weiteres Jahr später gab es eine weitere Retour. In diesem Fall war das USB-Kabel des Funkempfängers kaputt. Warum auch immer dieses so oft bewegt werden muss; hat wieder nichts mit der eigentlichen Funkübertragung zu tun.

2018 war beim zweiten Funk-Flystick der Kanal verstellt. Dass jemand daran herumgespielt hat ist möglich aber unwahrscheinlich.

An manchen PCs funktioniert der Funkempfänger nicht, „USB-Gerät wird nicht erkannt“. Dazu sind zwei 3,9-V-Z-Dioden einzubauen, wie bei V-USB angegeben, jeweils mit der Katode an die Datenleitungen der USB-Buchse, Anode auf Masse.

Bedienungsanleitung

Ein FlyStick ist ein handgehaltenes VR-Eingabegerät mit einer vollständigen Lageerkennung sowie zwei Tasten. Seine Funktionalität entspricht einer Computermaus.

Die an der Vorderseite befindlichen 5 retro-reflektierenden Kugeln dienen in Verbindung mit mindestens 2, typisch 4 Infrarotkameras und einer anspruchsvollen Bildverarbeitung der Lageerkennung sowohl der Linearachsen (X,Y,Z) als auch der Rotationsachsen (A,B,C). Es handelt sich um ein Local Positioning System (LPS). Die Bildverarbeitungseinheit („Data Station“) sendet die ermittelten Positionsdaten über einen TCP-Socket via Ethernet zur VR-Software.

Die beiden Tasten dienen zum Auslösen von bestimmten Ereignissen in der VR-Software. Die obere Taste (Knopf 1) entspicht dabei typischerweise der linken Maustaste (Auswahl oder Eingabe), die untere Taste (Knopf 2) der rechten Maustaste (Kontextmenü). Der FlyStick emuliert dazu einen USB-Joystick mit 2 Feuerknöpfen und null Hebeln. Die Tasten-Eregnisse gelangen als entsprechendes USB-Paket zur VR-Software, wobei Windows diesen Joystick in seiner Liste der System-Gamecontroller einreiht.

Die Funkübertragung der schnurlosen FlySticks erfolgt vollkommen transparent zum USB-Protokoll, d.h. der VR-Software macht es keinen Unterschied, ob sie mit einem drahtgebundenen oder schnurlosen FlyStick kommuniziert.

Das Gerät ist sofort nach dem Herstellen der USB-Verbindung funktionsbereit. Im Windows-Gerätemanager sollte sich ein USB-HID-Gerät sowie ein HID-Gerät eintragen. In der Systemsteuerung unter „Gamecontroller“ können Sie die Funktion der Tasten jederzeit überprüfen.

Die Emulation einer seriellen Anbindung wie beim Vorgängermodell ist nicht vorgesehen, um die Einfachheit der Anwendung des FlySticks nicht zu gefährden. Im Bedarfsfall kann ein entsprechender Protokollumsetzer geschrieben werden, wobei das Programm „com0com“ (= Nullmodem in Software) für die (ansonsten recht komplizierte) Emulation der seriellen Schnittstelle sorgen kann.

Drahtgebundener FlyStick

Die auf der Oberseite befindliche Leuchtdiode ist eine Betriebs- und Funktionsanzeige. Sie leuchtet permanent, solange der FlyStick angesteckt und aktiviert ist. Sie verlischt kurz bei Tastendruck oder dem Loslassen einer Taste.

An der Unterseite befindet sich eine kleine 4-polige Steckverbindung mit mäßiger Steckkraft. Dessen Hauptzweck ist es, das Kabel lösen zu können, um das Aufräumen und den Transport zu erleichtern.

Das Anschlusskabel darf nicht mit USB-Verlängerungskabeln verlängert werden! Entsprechende Verlängerungen sind entweder mit USB-Hubs oder Aktiv-Verlängerungen (enthalten einen USB-Hub mit 1 Port) durchzuführen. Entsprechend dem USB-Standard sind von Hub zu Hub und Endgerät (maximal 7) jeweils maximal 5 m Kabel zulässig (insgesamt 35 m). Alles andere verletzt die USB-Spezifikation und funktioniert nur manchmal.

Das Gerät ist wartungsfrei.

Drahtloser Funk-FlyStick

Das Gerät ist zweigeteilt und besteht aus dem FlyStick („Sender“) und einer kleinen Empfängerbox. Die Kommunikation erfolgt im lizenzfreien 433-MHz-Band. Die Reichweite beträgt 50 m in Gebäuden mit 1 Zwischenwand. Empfohlen wird der Betrieb mit minimaler Reichweite, etwa 10 m. Verschiedene FlySticks stören sich nicht gegenseitig, da diese verschiedene Wireless-IDs haben. Zusätzlich arbeiten diese in verschiedenen Frequenzbereichen.

Die oben befindliche Zweifarb-Leuchtdiode leuchtet grün bei jedem Tastendruck und Loslassen, wenn die Kommunikation zur Empfängerbox erfolgreich verlief. Sie leuchtet rot, wenn die Kommunikation erfolglos war. Hierfür sind die typischen Ursachen:

Das Gerät hat folgende Sonderfunktionen:

Was tun, wenn Sende- und Empfangskanal nicht passen? In Kanalauswahl-Modus gehen und alle 12 Kanäle probieren; die empfangsbereite Empfängerbox sollte dann bei passendem Kanal wieder „einrasten“ und mithören können.

Die Verschlusskappe an der Geräteunterseite kann durch Linksdrehung abgeschraubt werden und gibt den Zugang zum Batteriehalter frei. Der Batteriehalter („Schiffchen“) kann durch leichtes Klopfen aus dem Rohr gezogen werden. Er enthält 2 Primärzellen R3. Der Betrieb mit Akkumulatoren ist nicht empfehlenswert.

Technische Daten

Technische Daten
WertDrahtgebundenDrahtlos-FlystickEmpfängerboxEinheit
GeräteemulationHID-Joystick, 2 Knöpfe, 0 Hebel-
USB-IDPID 16C0 & VID 27D9 & Seriennummer-
Speisespannung5 (USB)3 (2x R3)5 (USB)V
Ruhestromaufnahme3500,7350µA
Betriebsstromaufnahme202535mA
Abmessungen (ohne Kabel)270 × 160 × 80 (über alles)70 × 50 × 21mm³
Masse (ohne Kabel)105≈ 150≈ 50g

Kompletter Neubau (Überlegung)

Bei den V-USB-Projekten ist mir AetherSense aufgefallen. Mit Ultraschall habe ich ja auch schon mal gearbeitet, und dieser erlaubt einfache Entfernungsmessungen in cm-Genauigkeit. Genau das richtige für einen Next-Generation-FlyStick.

Die Positionserkennung erfolgt hierbei durch Aussenden von Ultraschall-Signalen am FlyStick, synchron mit der Aussendung eines Funksignals im lizenzfreien 433-MHz-Band, den Empfang an mindestens 3 Ecken der Projektionswand und der Ortsbestimmung via Laufzeitmessung und Trilateration. Die Wandler am Handgerät sollten möglichst Kugelcharakteristik haben. Zur Schallgeschwindigkeitsbestimmung wird die Lufttemperatur gemessen.

Funktionsweise des Ultraschall-Flysticks

Wie bisher gibt es eine direkte Rückkopplung der Funktion am FlyStick über eine LED, denn die Funkübertragung arbeitet bidirektional. Damit lässt sich auch eine automatische entfernungs- und echoabhängige Wiederholfrequenz realisieren. Das Feedback hat sich in der Praxis als sehr zweckmäßig erwiesen.

Die Lageerkennung erfolgt wie beim Wii-Eingabegerät mit Beschleunigungssensoren, insbesondere die Drehung in der eigenen Achse. Der zweite Ultraschallsender am Ende des Flysticks wird benötigt, um keinen Magnetkompass zu benötigen.

So wie hier vorgestellt hat das System eine Schwachstelle: Wenn man den FlyStick senkrecht hält, kann die Drehung um die eigene Achse nicht mehr detektiert werden. Dazu wäre ein dritter Ultraschallsender erforderlich, dessen erforderliche Lage den Stick recht unhandlich macht (so wie die „Antennen“ des Infrarot-Modells). In der Praxis dürfte diese Einschränkung kein Problem sein.

In Stichpunkten die Eigenschaften und Vorteile des Systems:

Problematisch ist die Reflexion des Ultraschalls an den recht glatten Wänden des VR-Raumes und muss durch genügend großen zeitlichen Abstand zwischen den Sendesignalen gelöst werden. Bei höheren Ansprüchen ist eine Serienkodierung der Ultraschallsignale möglich, um Echos von „neuen“ Signalen zu unterscheiden und die Wiederholfrequenz zu erhöhen. Durch die gleichzeitige Funkausstrahlung ist die Zuordnung kein Problem.

Der VR-Raum sollte frei von reflektierenden Gegenständen sein! Schädlich wäre es, wenn einer der Empfänger nur ein lautes Echo wahrnimmt.

Typische Wiederholfrequenzen (ohne Echo, Signallänge = 0) sind:

1 m300 Signale/s
3 m100 Signale/s
10 m30 Signale/s
30 m10 Signale/s

Typische VR-Anwendungen dürften sich im Bereich 3..10 m befinden.

Alles in allem haben wir es mit einem Local Positioning System (LPS) zu tun.

Mehrere Eingabegeräte bzw. VR-Brille

Durch das Funksystem lassen sich mehrere Geräte einander synchronisieren und nachher trennen. Die wichtigste Anwendung ist die VR-Shutterbrille. Zweckmäßig ist es, die Shutterfrequenz mit der Ultraschallwiederholfrequenz zu synchronisieren und die Shutterfrequenz ebenfalls per Funk zu übertragen. Dadurch wird Infrarot gänzlich obsolet und frei für sonstige Anwendungen.

Mögliche Nachteile und Probleme:

Immerhin würde eine solche Brille wesentlich eleganter aussehen als das „gehörnte“ Exemplar mit den retro-reflektierenden Kugeln, was bei Fachvorträgen durchaus eine Rolle spielt. Auch kann man einfach zwischen mehreren solchen Brillen umschalten, d.h. der Kontrolleur kann eine bestimmte Brille aus mehreren aktivieren.
(Bei VR ist es üblich, dass nur einer die „aktive“ Brille bekommt. Alle anderen Teilnehmer sehen das 3D-Bild mehr oder weniger fehlerhaft.)