Ocolus Rift

Status
Nicht offen für weitere Antworten.

Spacefish

Erfahrener Benutzer
#1
Huhu,

ich bin ein Neueinsteiger und meine FPV-Flugstunden belaufen sich bisher noch auf 0,0, da ich bisher das Equipment dafür noch nicht zusammen habe.

Von der FatShark Base SD die ich bisher habe bin ich etwas entäuscht, das FOV ist ja nicht so das wahre und die chromatische Aberration der Plastiklinsen gerade zu den Rändern hin ist ja doch ziemlich extrem...

Habe mich deshalb man drangesetzt und ein kleines Tool gerschrieben, welches es erlaubt die Ocolus Rift (VR-Brille mit 140° FOV, Stereo und deutlich höherer Auflösung) als FPV-Videobrille zu verwenden. Mangels Rift und sonstigem Equipment (Sender, Empfänger, Videokamera) hatte ich jedoch noch nicht die Chance es "live" zu testen. Wollte euch trozdem mal einen Screenshot und das Tool zeigen und fragen was ihr davon haltet.
Laut Erfahrungsberichten soll ja die Immersion bei der Rift sehr stark sein. Wäre toll wenn man das auch beim FPV-Flug hinkriegt!

Hier ein Screenshot:


Ich benutze aktuell meine Webcam als Caputure Device, es sollte aber auch jede USB-TV Karte o.Ä. gehen. Die Anwendung läuft mit der Webcam ohne merkliche Verzögerung. Die Frames werden vom USB gelesen und direkt auf die Grafikkarte gestreamt. Die Transformationen für die Rift hab ich als OpenGL Fragmentshader umgesetzt um möglich hohe Ausführungsgeschwindigkeit zu haben. Praktisch ist die Verzögerung im Worstcase. so 50ms. Die Kamera nimmt mit 50fps auf (alle 20 msec ein Frame) sendet diese über USB 2.0 (max. 2 msec) und die Grafikkarte arbeitet mit 50hz Richtung Monitor (max. 20 msec).

Wer es selber mal ausprobieren möchte hier:http://lab.neosolve.de/RemoteEyes/RemoteEyes.zip

Das ganze ist noch sehr buggy und erkennt noch nicht das Videoformat das vom Capturedevice kommt. Es wird einfach mal 640x480 angenommen und BGR Bytefolge für die Farben. Das senden jedoch auch viele Webcams / Capturekarten. Es werden eben die rohen Bytedaten interpretiert und keine unötige Transformation auf der CPU o.Ä. durchgeführt.

Das ganze Ding läuft mit OpenGL und ist Cross-Platform kompilierbar (Linux, Windows). Man könnte das DIng also später z.B. mal auf nem RaspberryPI oder auf irgend so nem China ARM-Stick ausführen. Da die ganzen Transfomrationen auf der GPU per Fragmentshader passieren läuft das auch darauf.

Naja TL;DR ich hoffe Jemand kann damit was anfangen und würde mich über Eure Meinung freuen!

Edit: Bei dem Tool könnt ihr mit "f" in den Vollbildmodus gehen und mit ESC beenden. In meinem Blog steht nochmal genauer wie das Tool funktioniert falls das Jemand interessiert: http://www.spacefish.biz/blog/2013/04/ocolus-rift-fpv/
 

Nabazul

Erfahrener Benutzer
#2
auf jedenfall ein interresanter Ansatz. Glaubst du so was könnte man auch auf einem raspberry pi zum laufen kriegen ? Ein notebook oder ähnliches zum fliegen mitschleppen ist immer doof. Mit nem PI könnte man dann eine kleine box bauen.

Wie du schon richtig festgestellt hast ist die verzögerung der Knackpunkt an der ganzen geschichte 50ms wäre grade so noch machbar alles darüber wird kritisch.
 

milz

Erfahrener Benutzer
#3
Das wäre natürlich der Oberhammer.
Dann überleg ich gerade scharf ob ich nicht eine preorder.
Ich glaub ich muss mir mal das DEV Kit anschauen -)
In welcher Sprache hast das gecodet ?

mfg milz
 

Spacefish

Erfahrener Benutzer
#4
Also das Tool ist in C geschrieben b.z.w. der Shader halt in GLSL. Es sollte auf dem Pi ohne Probleme laufen, ich hab es grade mal auf meiner Linuxbüchse gebaut und da tut es :)
Ich werde es mal heute Abend auf meinem PI probieren, allerdings muss ich das erst wieder flicken, da der SD-Kartenslot abgebrochen ist, hoffe das krieg ich hin, sollte aber ansich kein Problem sein.

Das mit dem PI ist b.t.w. ne gute Idee, da ich damit mal meine FatShark testen kann, ich nahm an ich hätte kein Gerät mit S-Video out im Haus bis auf ne alte PS2, aber das Pi hat das ja auch.

Da die rechenintensivensachen auf der GPU laufen, sollte das Pi das locker verpacken. die CPU macht nichts außer Bytes vom USB an die GPU weiterzuschubsen ohne diese zu verarbeiten.

Edit: hier noch ne kleine Demo unter Linux: http://www.youtube.com/watch?v=UQ7t2Xqn3w8
sorry schonmal wegen der stylischen Haare / Mode, bin gerade erst aufgestanden ;)
 
Zuletzt bearbeitet:
Erhaltene "Gefällt mir": milz

Spacefish

Erfahrener Benutzer
#5
Noch ein paar Ideen:

1. Man könnte den Headtracker der Rift mitbenutzen, damit erst nur das Kamerabild schieben und gleichzeitig die Servos bewegen, so sieht es aus als hätte es nahezu 0 Latenz, da es ja erstmal nur am Boden "virtuell" verschoben wird das Bild. Wenn sich das Servo dann bewegt schiebt es das Bild im Gleichtakt wieder zurück, so das man die verspätete Kamerabewegung nicht mitkriegt.

Vorteil:
- Headtracking wäre nahezu ohne Latenz da Clientseitig (Die Rift liefert 1000Hz)

Nachteil:
- Wäre eine bisschen schlechtere Auflösung
- Man bräuchte ne Kamera mit > 140° FOV z.B. 170° oder sowas damit das halbwegs sinnvoll ist.

2. Man hätte ja dann idr. einen USB-Videoframegrabber o.Ä. die haben ja meist auch Stereo Audio-In. Man könnte dann den Audiokanal vom Copter / Flugzeug direkt vom Steuergerät (z.B. Multi Wii) beschicken, die Daten am Boden dekodieren (hängt ja eh nen Pi dran) und das OSD am Boden erzeugen.

Vorteil:
- Man spart sich das OSD im Flieger und damit Gewicht
- Das OSD kann die volle Auflösung haben, da es ja nicht mit übertragen wird
- Man kann das Video ohne überlagertes OSD aufnehmen (auch direkt auf dem Pi)
- Das OSD kann "fixed" im Raum stehen wie ein HUD in einem Flugzeug und sich beim Headtracking nicht mitbewegen. Würde vermtl. auch eine bessere Immersion geben.
- Man könnte die Telemetriedaten getrennt aufzeichnen am Boden in CSV Files o.Ä.

Nachteil:
- Evtl. Fehler bei der Übertragung wenn das Signal sehr madig ist. Allerdings ist vermtl. schonw eit vorher das Videobild nichtmehr zu erkennen.
 
#6
Sehr coole Sache !!

schon allein die Brille für video zu benutzen fänd ich klasse.
Was hat die pro Auge denn für eine Auflösung?

Das raspberry pi könnte das video also entsprechend aufbereiten ?
Also comp video in, dann verdoppeln, anordnen und verzerren..
Und dann via hdmi raus in die box von der rift ?
 

meister

Erfahrener Benutzer
#7
Sehr coole Sache !!

schon allein die Brille für video zu benutzen fänd ich klasse.
Was hat die pro Auge denn für eine Auflösung?

Das raspberry pi könnte das video also entsprechend aufbereiten ?
Also comp video in, dann verdoppeln, anordnen und verzerren..
Und dann via hdmi raus in die box von der rift ?
Raspberry-PI und Analog-Video in is so ne sache, hat das schonmal wer hinbekommen ?

Gruß,
Olli
 

Spacefish

Erfahrener Benutzer
#8
Oh ja ist es.. Hab mir in Zwischenzeit ein STK1160 zugelegt. Die Latenz unter Linux (x64) ist super! Man nimmt eigentlich keine Verzögerung wahr. Ich habe darüber Playstation gespielt und es fühlt sich an wie an einem Fernsehr.
Aktuell habe ich jedoch noch das Problem, dass es immer als NTSC Signal interpretiert wird, das Bild dadurch Schwarz/Weiß ist und nur 3/4 hoch. Stellt man dies jedoch um (im Windows) geht es. Im Video4Linux habe ich noch nicht geschaut wie man das umstellt, aber das sollte schon auch gehen.

Mit dem Pi habe ich es noch nicht getestet. Aber das soll ja wirklich ein ziemliches Problem sein, da die USB-Hardware des Pi scheinbar einen Fehler hat und zudem auch die Doku nicht offen ist... Aktuell scheint es also nicht wirklich möglich zu sein..
Ich bin aber zuversichtlich das man da auch noch irgend ein anderes Board z.B. MicroATX oder so findet mit dem es geht..

Der Video -> USB Adapter zieht ziemlich viel Strom so gefühlt, er wird relativ warm und hat keinerlei PowerSave funktionen o.Ä.
 

GerdS

Erfahrener Benutzer
#9
Ich habe über diese Brille für FPV auch schon nachgedacht und fände es toll wenn man das mit dem PI hinbekommen würde. Erschwerend zum bereits diskutierten kommt allerdings noch dazu, dass das Videobild für die Rift verzerrt werden muss um die Optik der Okulare wieder auszugleichen, etwa wie ein Gummituch, welches nur an den 4 Ecken gahalten und dabei geehnt wird. Nur das Bild verdoppeln alleine reicht nicht aus.

Gruß Gerd
 
#11
Sehr sehr coole Idee!
Ich hab gestern erst das heise-Video dazu angeschaut und dachte sofort an FPV. Der benötigte Rechner hat mich erstmal wieder auf den Boden kommen lassen...aber an einen Mini-Computer dachte ich auch...hab das dann aber aufgrund fehlender Programmierkenntnis verworfen. Aber, dass ich das hier nun durch Zufall gefunden hab - geil!

Meinst du, es würde auch auf einem Arduino flott laufen? Das war eigentlich meine bevorzugte Basis, die ich mir zum Basteln anschaffen wollte.

Abonniert!
 

Maniac

BlackOut Pilot
#13

Spacefish

Erfahrener Benutzer
#14
Also das Pi scheint es nicht so richtig zu verpacken..

Das kleinere Beagle Bone für 49$ hört sich ganz gut an, allerdings hat das kein Video-Out nur HDMI.

Auf einem Arduino wird das nicht laufen! Die Arduino haben glaub max. 16 Mhz, bei 640x480x25 hätte man ja schon 65 Millionen Pixel pro Sekunde die man verarbeiten muss und dabei sind ja noch nichtmal farbastufungen oder helligkeiten mit eingerechnet.. 65Mhz. EIn Arduino kann man für sowas getrost vergessen!
 

fpv-floh

Erfahrener Benutzer
#15
Gute Idee in einem nichtssagenden Threadtitel versteckt… evt. kann hier ein Mod mal Hand anlegen ;o)

Hatte mich auch schon damit beschäftigt, allerdings in eine andere Richtung…

Basis das hier: http://bitcortex.com/oculus-libre-open-source-hmd-inspired-by-oculus-rift/

Allerdings mit anderem Controllerboard, welches auch eine AV-Signalbuchse hat (bei Ebay gefunden, Link kann ich nachreichen). Vorteil wäre halt, weiter benötigte Hard-/Software hält sich in Grenzen, geringstmögliche Latenz... Problem: Realisierung des Bildschirmsplittings für linkes und rechtes Auge.

Abgewandelter Ansatz wäre: je ein Display pro Auge, also auch 2 Controller mit AV-Signalbuchse. Signal kommt ohne Umwege vom Receiver, also wieder nahezu latenzfrei. So ab ~2,5" gibt es TFT-Farbdisplays mit VGA oder besserer Auflösung.
 

kritzelkratzel

Erfahrener Benutzer
#16
Problem: Realisierung des Bildschirmsplittings für linkes und rechtes Auge.
Hmm, wie wäre es, ein schon fertig gesplittetes Signal (übertragen mit einer konventionellen Tx/Rx-Strecke) auf den Bildschirm zu leiten? Bisher gibt die Kamera (siehe Signatur) schon Side-by-Side 3D aus, allerdings in der Horizontalen um 50% gestaucht.

Lösung 1) Verwendung von 16:9 VGA-Displays mit Analogeingang, welche ein eingespeistes 4:3 Signal oftmals aus Faulheit gleich auf 16:9 horizontal dehnen. Keine Änderungen an der Firmware der Kamera notwendig.

Lösung 2) Verwendung eines 4:3 VGA-Displays mit Analogeingang. Firmwareänderung in Kamera dahingehend, dass die horizontale Kompression ausgelassen wird und statt dessen nur 50% des Bildes unkomprimiert verarbeitet werden.

Würde das der Sache helfen? Bei beiden Lösungsansätzen müsste man mit Verzerrungen in der Horizontalen oder mit schwarzen vertikalen Balken leben. Wen es interessiert, ich hatte in einem anderen Forum schon mal so eine Diskussion mit Geekmaster (wer auch immer das ist), der mir wichtige Hinweise hat geben können.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten