The Quest IMU data is relative to the headset’s initial pose and the Guardian/boundary setup — it doesn’t provide a built-in global/magnetic north frame. While the headset has a magnetometer, Oculus doesn’t expose it directly for aligning with magnetic north.
A common approach is:
Record an initial calibration pose aligned with your reference world frame.
Rotate all subsequent IMU quaternions by the inverse of that initial orientation to bring them into your “world” frame.
If needed, apply a fixed rotation offset to align with magnetic north/other sensors.
Pseudo-code example (simplified for quaternions):
# q_imu = current IMU orientation quaternion # q_init = initial reference orientation q_world = q_init.inverse() * q_imu
This way, your Quest IMU data is roughly synchronized with your other sensors in a common frame.
If you want, I can write a full Android/Java snippet for converting Quest IMU UDP data to a world-aligned frame.