Friday 17 March 2017

Why can't Firmware and API developers get along (They are lying!!)

So, another nice HMD rant.
Over the last couple of weeks we have been implementing a Universal Shader for OpenHMD, which will automatically correct the lenses based on parameters set in the drivers.
This makes it possible for developers to just implement 1 final shader and not worry about the rest, which is totally fine!

During this progress Nedlinpopo, one of our lovely contributors has figured out the firmware properties for the Oculus DK2 and CV1 were a bit off, redesigning the variables by recalculating them himself with a custom frustum.

Why is this needed? The Firmware reports different values then the hardware uses.....

During this process we found out that the IPD of the DK2 can actually be set, nice! if the values don't align we can at least set them based on our own calculations, and keep things the way there were, but the CV1.....
You can see they had to rush this out for production, The firmware reports back wrong values, and some one has confirmed OVR has hard coded values.

Why, o why would you do this if you have a firmware team you could just poke and ask to change the default variable, or at least expose a set method, like they had with the DK2.


Oculus is not the only one with firmware issues, OSVR has them as well.
This 'Open Source' headset has closed firmware, and does not expose all the sensors we would need to implement proper native support.
The Gyro is untouchable, they prefer to expose a pre-fused quaternion, which is wrong by default (it needs manual rotation every frame to align properly).

Sure i get that firmware can not be opened up even when its a bit sad (though I would not call a device "Open" then, I can replace almost all screens of my laptops, most of the vendors delivering howto guides, are they "Open" devices now?), but at least choose to expose the sensors and do the sensor fusion in software, this allows users to make tweaks, fix things, trying out other fusion techniques, instead of being forced to use a (wrong) fused quaternion.
I also suspect the documentation not lining up with what we find, but thats still in research.

Bottom line, please firmware developers, force your API/Driver devs to communicate, make sure things are logical and well implemented.
And API/Driver devs, think of the firmware, if they do it right, less work for you eh?

Monday 6 February 2017

Progress Report - FOSDEM 2017, with OpenHMD!




"Will anyone else will be going to FOSDEM as well in February?"
Something innocent as this can start great things. What looked like a opportunity for me to meet one or two people from our lovely project, turned out to be a large meetup, hack session and partyfest!


We got a Apartment with 4 people (Vive setup in the Living room, though we did not had a lot of time to use that.), organized a BoF session on the Saturday for a hour (https://www.fosdem.org/2017/schedule/event/openhmd_bof/) and ended up having between 40 and 50 attending the session, meeting about 8 to 10 people I might have spoken to since 2013 on IRC and even getting so many questions regarding meeting up again, we got the same BoF room again the next day! (Which we may or may not have used for a extended amount of time hacking on things).

So what did we achieve other then the logical meet and greets and exchanging knowledge?


Initial support for reading the Oculus CV1 Camera.

Using libuvc with the combined knowledge of everyone brainstorming at the session we got it to work directly! This means not needing a Kernel patch on Linux to use the device (which is currently only available in 4.10 rc6 I think).

CV1 Camera Result!

Initial working OSVR HDK2 support, kinda.

So, for some reason this Open Source hardware does not provide direct access to all the sensors and has a post-fusion absolute position quaternion (which sometimes is crooked). This is non ideal for a wide array of reasons like not being able to change/improve the sensor fusion (because closed source firmware...), no access to gyro data, and no way to get relative data.
The technical documentation from the config regarding the physical dimensions and FoV also seem not to match up, so the current implementation is a bit of a hack and 'close enough', but hey we have to start somewhere!

Basic support in OpenMW.

So, I love me some elder scrolls goodness and the OpenMW project is a great initiative. So I took it on me to implement rudimentary OpenHMD support (currently in my fork) which works fine, but is still pretty basic.
There are some problems with the stereo mode in OpenSceneGraph missing very basic but essential features, like setting projection and view matrices per camera.
I hope to prepare a patch soon for OSG to solve these issues, implement the lens correction shader and do some fixes to the UI and presentation that makes it more suitable for VR.


Small little tinkering.

p5 gloves, lighthouse, LG 360 VR, Intel Realsense, of course we tinkered with about everything we brought which is a lot!
I can still feel my shoulders complaining about the amount of gear I brought from the Netherlands to Belgium. All worth it, thank god for trains.



And of course the people!

Gaaaaah we have a awesome community! Every single person I met was lovely, people I spoke with for 3/4 years, people who just showed up to check what we were about, every single person was a pleasure to meet and talk with.
FLOSS in general is great, but of course, our community is the best, as it should be!



Thanks for all the fish and see you next year FOSDEM!

Sunday 22 January 2017

New blog started

So, recently I get this question a lot again: "Is there a place where you have more information about project X".
Well mostly this is a case of referring them to the Twitter account of the relevant project, but sometimes I just need a place to dump my findings, project status which is only relevant to some, documentation in progress and similar.

Bring back the project blog.
I did this years ago as well, but always have deleted these when they lost their relevance.
With the current projects I am doing (more on that in a future post), I think the information has a bit more relevance over time, so this one is to stay!

Feel free to shout at me if you have any questions, or poke me on Twitter!