I've updated the tracker module to handle the polling of the headtracker itself - and it works _much_ better. Before, with the client app calling the module and waiting on a reply, I was maxing the frame rate at about 68, now, with the module doing it and the client returning immediately with the last polled value, fps is over 300. Not bad. I'll probably release a new version in a few days.
One thing I forgot to mention about the demo program. Due to differences in everyones z800 trackers, it needs to be 'calibrated' on start. So, start demo program with the z800 sitting on the desk. Press the 'r' button - this will determine the set points for your z800 (eventually, I'll have these saved to the config file so you don't have to do it each time). Now put it on (without stopping the program) and press 'c' - this re-centers the headset. You can press 'c' as much as you want - but dont press 'r' again, otherwise it'll get a bad center point and will drift all over the place.
The Z800 Headtracker kernel module is now available here: tracker-0.1.tar.bz2
It's still very preliminary. From the TODO:
TODO: - merge into the Z800 module - add headtracker polling into driver (10-30ms) (this way, the 3D app won't be sitting waiting on a USB call - it'll immediately return with the saved headtracker from the last poll)If you want to run the demo program shown below, you'll also need the updated emadevice lib, here: emaDevice-0.2.tar.bz2 I plan on making some major changes to it (including renaming it). More on that later.
Anyways, you're welcome to give it a try. As I mentioned earlier, there's still much to be done to get a stable view vector based on all the sensors. I'll probably write up some more issues with the driver/demo prog later.
One thing I did do with the demo prog is to display a "L" or "R" in the bottom left or right corner of the screen. Each is only drawn for that eye - so if you close your left eye, you'll only see the "R". However, if you see a "L" instead, then it's out of sync - press F4 to flip screens. I've got a couple of ideas on how the program itself can tell it's out of sync - but need to experiment a bit first. Later... (my email address is in the README)
Just packaging the new kernel module and demo at the moment. Here's a snap of the updated demo showing the 3 different vectors from the head tracker. There's still work to be done - need to figure out how to handle 'low speed' rotation - the gyro's have trouble detecting it (though they do seem to work well at higher rotation speeds). Plus there seems to be some gimbal lock (I'm planning on switching to quaternions) and other issues. There's still work to be done figuring out exactly how everything works, so hopefully, I'll get some help with that :)
Well, the head tracker modules is in and working better then I expected. I have to say it wouldn't have been possible without John Kondis - he took all the raw data, decoded it and determined how the data was laid out. His spreadsheet with all the numbers (and graphs) was amazing. So a very big thanks to John!
I'm just putting together a quick demo using the headtracker so I can verify it's working correctly. I expect to have a release sometime tomorrow.
I'm back and working on the head tracker component of the Z800. Work has been nuts (if you want freetime, don't become a game developer!). I want to get a basic tracker working and make some more improvements to the core z800 driver. Hopefully, a new version will be up soon. The tracker component will be a separate kernel module. More info soon.
Current version 2006/10/27 is 0.6
Grab it from here: Z800Driver-0.6.tgz
Current version 2006/10/27 is 0.1
Grab it from here: EMADevice-0.1.tgz
Here's a screenshot of the demo program included with the above: