[SOLVED] Controller provides rotation as Euler angles, not quaternions


So we built our own driver for the Bridge Controller. Occipital’s driver is only implemented in iOS and that’s quite limiting. For instance, you can’t use it in Unity while building stuff. We read bits coming from the device via BLE. We get all buttons and touchpad info fine, but when it comes to rotation we only get bytes 3-11 [of the payload of 0xF001 characteristic] that make up EULER ANGLES. There’s nothing else in the payload. This means the device gets into a gimbal lock when pointed straight up or down and can’t be used for full 3dof rotation tracking. https://en.wikipedia.org/wiki/Gimbal_lock


Two days later… The controller does transmit Eulers but also signalizes (by the first three bits of bytes 3, 6 and 9) that there is an offset in yaw/pitch/roll angles. This way it dodges gimbal lock. Reverse engineered and implemented, marking this as solved. But omg people, please, use quaternions.