Sonntag, 28. Dezember 2014

Weihnachtszeit ist Hackerzeit. Bei soviel süßem kann doch sowieso keiner schlafen. Ich habe die paar Tage genutzt um das Number6 Programm zu reflektieren. Einige Codeschnipsel sind rausgeflogen, einige wurden effizienter umgeschrieben.

- Das Soundstreaming ist komplett rausgeflogen. Die Tonqualität der Webcam ist miserabel, außerdem war mir das Geräusch der Servomotoren elendig auf die Nerven gegangen.

- Die Bildbearbeitung ist jetzt unabhängig von der Auflösung. Ich kann damit ganz einfach zwischen verschiedenen Auflösungen hin und herschalten.

- Ein Fehler der beim abschalten das Programm abstürzen lässt wurde teilweise behoben.

Die Performance Tests haben nochmals gezeigt das die Webcam der Flaschenhals ist. Auf Full-HD bricht die Framerate derart zusammen, dass genaue Bewegungen nicht mehr möglich sind. In HD Auflösung wird eine Framerate von bis zu 18fps erreicht. Richtig super sind qHD und nHD. Dabei sind praktisch keine Bewegungsunschärfen mehr wahrzunehmen. Leider ist das Sichtfeld dann sehr eingeschränkt.

Das Jahr 2015 wird spannend ! Ich habe schon mehrere 60fps Webcams ausgemacht mit denen diese Unschärfen hoffentlich behoben werden können. Außerdem habe ich ein paar coole Erweiterungen geplant. Unter anderem einen Roboterarm gepaart mit einem Tracking-Handschuh. Damit wäre es möglich die eigene Handbewegung zu verschieben (MR Stufe 3) und mit entfernten Gegenständen zu arbeiten.

Samstag, 8. November 2014

Die HTWG Konstanz hat einen Artikel über meine Arbeit veröffentlicht. Scheinbar stößt das Thema auf viel Interesse. Vielen Dank an Felix Herz und Anja Wischer.

Artikel der HTWG Konstanz

Artikel im Südkurier (08.12.2014)

Sonntag, 2. November 2014

Zurück von der Make Munich.

Ich habe einen ganzen Haufen interessanter Leute getroffen. Auch ein paar gute Ideen sind dabei herausgekommen. Jetzt werde ich prüfen ob die 3D Ansicht mit einem Prisma vor der Kamera verbessert werden kann. Auf jeden Fall muss ich die Verbindung erweitern, so das ich im laufenden Betrieb zwischen WLAN und Kabel wechseln kann. Bei 20 offenen und sich überlagernden Netzen die es hier gab ist der Roboter mal des öfteren wegen Verbindungsproblemen abgestürzt.



Sonntag, 26. Oktober 2014

Ich werde mit Number6 am 1+2 November an der Make Munich sein. Kommt vorbei, ihr dürft den Roboter ausprobieren und Fragen stellen. Ich freue mich schon darauf.

Samstag, 4. Oktober 2014

Ich habe den Fehler mithilfe des sync_write Befehls umgangen. Anscheinend kommt der Treiber für den USB2AX durcheinander wenn zuviele Befehle in kurzer Zeit auftreten. Aber jetzt läuft Number6 wieder stabil und sogar einiges schneller als zuvor mit 28-32 Positionsänderungen in der Sekunde. Die Kamerasynchronisation ist nun eine einzige gleitende Bewegung. Ich möchte mich nocheinmal beim Entwickler des USB2AX, Nicolas Saugnier, bedanken der mir mit dem Treiber geholfen hat.

Hier ist das versprochene Funktionsvideo:


Montag, 29. September 2014

Das Funktionsvideo werde ich wahrscheinlich erst am nächsten Wochenender hochladen können, aber hier ist nochmal ein Bild von Number6. Im Moment kämpfe ich mit dem Treiber des USB2AX. Das ist der Controller der benötigt wird um die Dynamixel Motoren anzusteuern. Der Treiber löst Bluescreens aus (BSOD (ja die gibt es auch noch in Windows 8 )). Anscheinend tritt der Effekt auf wenn zuviele Befehle hintereinander übergeben werden. Deshalb läuft Number6 im Moment doch nur mit 9-10 Tracking-Positionen pro Sekunde.

Aber immerhin habe ich Hilfe von Herrn Nicolas Saugnier. Das ist der Entwickler des USB2AX. Meine Mail an den Support wurde innerhalb einer Stunde beantwortet. Und das auch noch am Sonntag Morgen. Ich bin wahrlich beeindruckt. Das ist Kundenservice vom feinsten. Vielen Dank :)


Samstag, 27. September 2014

Number6 is alive !

Nummer6 lebt !



Ich habe endlich meine Oculus Rift DK 2 erhalten. Die ist alleine schon sehr beeindruckend. Die Full-HD Auflösung ist eine deutliche Verbesserung (obwohl man die Pixel immer noch deutlich erkennen kann). Das Headtracking mit der Kamera funktioniert einwandfrei.

Nummer6 ist somit voll betriebsbereit. Die größten Fortschritte in Bezug auf Nummer5 sind die Tonübertragung (neu), der verbesserte Kameraaufbau (einfacher, schneller) und die Mögichkeit das Bild im laufenden Betrieb anzupassen (Augenabstand, Bildabstand). Ich fasse hier kurz die Features zusammen:

-  Das System läuft wie bereits in vorhergehenden Posts beschrieben auf einem Zotac nano PC. Gestartet wird im Headless Betrieb. D.h. es wird automatisch beim Systemboot das ad-hoc Netzwerk und das Number6 Programm gestartet. Display und Eingabegeräte sind nicht vonnöten. Einstellungen kann man im laufenden Betrieb über die Gegenstation vornehmen.

-  Der Kameraaufbau wurde umgebaut. Ich arbeite jetzt nur noch mit einer einzelnen Full-HD Webcam. Das 3D Bild entsteht durch überlappendes ausschneiden aus diesen Frames. Bei Nummer5 gab es durch die beiden Webcams ein Kalibrierungs Problem.

-  Bildübertraung mit 12-18 Frames pro Sekunde.

-  Automatische Anpassung der Kompressionsrate für bestmögliche Bildqualität.

-  Übertragung und Synchronisation der Headtrackingdaten mit 14 Positionen pro Sekunde.

-  Tonübertragung in Echtzeit.


Ich werde sobald ich Zeit habe ein Video von der Funktionsweise machen.

Dienstag, 9. September 2014

Die neue Oculus wird endlich ausgeliefert ! Sobald ich das schöne Ding in Händen halte werde ich den zweiten Belastungstest starten und ein Funktionsvideo online stellen.


Mittwoch, 20. August 2014

Das Startup läuft jetzt fehlerfrei. Das heißt Number 6 arbeitet ab sofort im "headless" Betrieb. Alle nötigen Programme werden beim booten automatisch gestartet. Die wichtigsten sind das Programm selbst und das Ad-Hoc Netz. Schade dass diese nicht mehr so einfach zu handhaben sind wie bei Windows 7.

Der Tonstream läuft nun parallel mit den Bildstream. Die Latenz ist minimal größer wie beim Bild, fällt aber ohne die logging Daten kaum auf. Die Latenz insgesamt ist nun wesentlich besser als bei Number5. Es treten interessante Effekte auf wenn man die eigene Stimme, um einige Millisekunden verschoben, auf Kopfhöhrer hört während man spricht. Bei längeren Sätzen fängt man an zu stottern. Ziemlich witzig.

Ich habe außerdem eine Netzwerkadapter Abfrage eingebaut. Falls das Programm auf einem neuen PC gestartet wird kann der Nutzer einen verfügbaren Wifi Adapter auswählen. Das Programm fragt die IP ab und schickt diese an Number6. So wird eine Kommunikation aufgebaut ohne jedesmal das Programm anpassen zu müssen. Das war ziemlich nervig bis jetzt, gerade wenn das Programm im Labor getestet werden sollte.

Hier mal ein Snapshot von meinem Ressourcen Monitor. So langsam wird das Wifi vom Hauptspeicher als Flaschenhals eingeholt.


Ich warte leider immer noch auf meine Oculus Rift DK 2. Hoffentlich bekomme ich sie mit der nächsten Auslieferung.

Montag, 11. August 2014

Wir haben es mit "Nummer 5" ins c't Magazin geschafft ! Der Artikel ist in Ausgabe 18/2014 zu finden. Vielen Dank an Herr Jan-Keno Janssen und den Rest des c't Teams.

Schaut mal rein:
c't Artikel: Moved Reality



Dienstag, 29. Juli 2014

Dank ein paar queueing und multithreading Tricks läuft der Stream jetzt mit 15-17 fps. Der Unterschied ist vor allem bei Bewegungen des Kamerasystems deutlich zu sehen, da auch die Latenzzeit der Übertragung selbst noch etwas abgenommen hat. Leider hat sich jetzt ein Fehler eingeschlichen der das Bild ab und zu flackern lässt. Diesen Bug werde ich jetzt noch suchen müssen.

In diesem kurzen Video zeige ich euch die optischen Einstellungsfunktionen. Man kann den Augenabstand, den Bildabstand und die Linsenstellung während der Übertragung auf die eigenen Bedürfnisse anpassen. Mein kleiner Plüsch Tux durfte Modell stehen.

Dienstag, 22. Juli 2014

Endlich sind die Dynamixel angekommen. Sagt Hallo zu "Number 6". Etwas kompakter, aber wesentlich flexibler als der erste Prototyp. Im Moment noch an Bildschirm und Tastatur angeschlossen, sollte er bald im Headless Betrieb arbeiten können. D.h. kompletter Autostart aller benötigten Programme und des Netzwerkaufbaus. Im Moment arbeite ich am Stream für Kontrolleingaben. Damit werden Änderungen im Bildverarbeitungsalgorithmus während der Übertragung möglich.

Was haltet Ihr vom Design ? Wer fand das Doppelkamera System von "Number 5" cooler ?
Vielleicht sollte ich wieder Augenbrauen befestigen :)


Donnerstag, 17. Juli 2014

VideoStreaming in HD. Immer wieder ein gutes Gefühl, wenn ein Programm schließlich funktioniert. Das Bild wird in HD aufgenommen, jpg komprimiert und per WLAN übertragen. Beim Client schließlich wieder dekomprimiert und auf volle 1920-1080 Pixel skaliert. Der Stream läuft mit 10-12fps. Gar nicht so schlecht. Damit schlage ich sogar Nummer5 der eine niedrigere Auflösung hatte.


Mittwoch, 9. Juli 2014

Das Arbeiten mit OpenCV ist wie ein Martial Arts fight, es wird um jede Millisekunde gekämpft. Es wird schwieriger als gedacht, Bilder in Full-HD zu bearbeiten. Es dauert schon fast 200 MS nur um ein Frame von der Webcam abzurufen. Das muss man doch irgendwie beschleunigen können.

Freitag, 4. Juli 2014

Die Hardware für den Prototypen Zwei steht fest. Er wird auf einem Zotac ZBox Mini PC operieren. Dazu kommt eine Full-HD Webcam. Ich hoffe das Oculus Rift Development Kit 2 wird tatsächlich im frühen August ausgeliefert. Jetzt muss ich mich um Bildkomprimierung kümmern um das WLAN nicht in die Knie zu zwingen. Es wird super aussehen, wenn die Hardware zusammengebaut ist. Mir zucken jetzt schon die Finger.



Eine erfreuliche Nachricht kam die letzte Woche noch bei uns an. Das c't Magazin wird einen Artikel über unsere Arbeit und den Prototypen 1 schreiben. Ich darf mit meinem Kollegen zusammen nach Hannover fahren und unsere Arbeit vorführen. Es ist schön das rennomierte Technik Magazine auch jungen Entwicklern solche Chancen geben. Vielen Dank.

Mittwoch, 2. Juli 2014

Die Bachelorarbeit wurde am 01.07.2014 abgegeben. Ich werden nun fortführend berichten über die Entwicklung des Prototypen 2. Dieser soll sich vor allem durch eine verbesserte Kommunikation und damit niedrigere Latenzzeiten auszeichnen. Die Hardware Spezifikationen erhalten mit dem Oculus Rift (Development Kit 2) ein Upgrade von HD auf Full-HD.

Im Moment bin ich beschäftigt mit der Entwicklung der neuen Socket-API die direkt auf die von Microsoft bereitgestellte WINSOCK-2 Schnittstelle aufsetzen soll. Da Client und Server zwei unabhängige Programmteile sind, müssen sie fähig sein die Kommunikation selbstständig aufrecht zu erhalten, und im Notfall wiederherzustellen.
In diesem Blog geht es um Moved Reality. Damit werden Systeme beschrieben, die Sinnesreize aufzeichnen und auf einen Menschen übertragen können. Unser erster Prototyp wurde von mir und einem Studienkollegen, als Bachelorarbeit, an der HTWG Konstanz entwickelt.

Die Moved Reality ist eine Mischung aus Virtual Reality Technologie, Bildverarbeitung, Augmented Reality und einiges an Kreativität. Der Bereich ist in sechs Stufen eingeteilt, die den menschlichen Wahrnehmungsmöglichkeiten entsprechen (Sehen, Hören, Riechen, Schmecken, Fühlen/Tasten, Gleichgewicht).

Der erste Prototyp, Codename: Nummer 5, erreicht Stufe Zwei. Das bedeutet, dass er zwei dieser Möglichkeiten erfüllt hat (Sehen, Hören). Das System besteht aus einem Kamerasystem mit drei Freiheitsgraden, das durch die Kopfbewegungen des Anwenders synchronisiert wird. Der Anwender kann sozusagen seinen Sehsinn temporär auf die Maschine auslagern. Dazu kam ein Oculus Rift (Development Kit 1) zum Einsatz. Das Motorsystem besteht aus drei Dynamixel Motoren.



 Die Software ist als Client/Server-Architektur aufgebaut. Ein leistungsstarker PC fungiert als Server. Hier werden die zwei Webcam Streams entgegengenommen, für die Darstellung auf dem Oculus Rift bearbeitet und zusammen mit dem Audio Frames per WLAN zum Client geschickt. Der Client empfängt die Daten, stellt sie am Oculus Rift dar und sendet seinerseits die Head-Tracking-Daten zurück, mit denen die Position der Kameras, entsprechend zur Kopfbewegung des Anwenders, angepasst werden. Falls Augmented-Reality-Algorithmen eingesetzt werden, sollten diese ebenfalls direkt am Server ausgeführt werden. Der Client wird also nur minimal belastet. Es kann sich um ein Laptop oder ein Tablet handeln, falls eine HDMI Schnittstelle vorhanden ist, oder gar ein Embedded Board.