Welcome to the Oculus Developer Forums!

Your participation on the forum is subject to the Oculus Code of Conduct.

In general, please be respectful and kind. If you violate the Oculus Code of Conduct, your access to the developer forums may be revoked at the discretion of Oculus staff.

Getting accurate timestamps for rotation data

ZacSVRZacSVR Posts: 2
NerveGear
Hello,

I'm developing an app for Oculus Go using Unity 2019.1.12f1, the Oculus Unity Integration v16.0, and VRTK v3.3.

I want to save the rotation of the headset regularly to plot on a graph later. So, for each rotation value, I need to get the most accurate timestamp possible. In the future, I'll be measuring the position of the headset too (on a better headset). Here's roughly what I'm doing, in a MonoBehaviour class that I'm attaching to an object in the scene:

// The object representing the headset, set in the Unity editor:
//  (Uses VRTK's VRTK_SDKObjectAlias script to get the transform of the Oculus OVRCameraRig object)
public GameObject headsetObject;
private string previousRotation;

void FixedUpdate()
{
    // Get the headset rotation and time
    string headsetRotation = headsetObject.transform.rotation.eulerAngles.ToString("f3");
    string curTime = Time.time.ToString("f6");

    // Check that the latest rotation isn't equal to the previous value we collected
    bool isDuplicate = headsetRotation == previousRotation; 
    if (isDuplicate)
    {
        return;
    }

    // Save the rotation and time somewhere
    ...
    latestRotation = headsetRotation;
}

Here is my problem: I'm saving the rotation value and the timestamp at the same point in the code, but I don't know if the timestamp is accurate. How do we know precisely at what time the rotation of the headset object was set?

Having done some testing, I think that the headset's rotation data is updated once every frame. When FixedUpdate is called twice in one frame, the headset rotation is the same in both calls. I found that FixedUpdate gets the same rotation data as Update, but a couple of milliseconds earlier (since FixedUpdate is called before Update).

In the Oculus Unity Integration, it looks like the script OVRCameraRig.cs is responsible for updating the GameObject's transform. I tried enabling the useFixedUpdateForTracking property, but this didn't seem to change anything.

Does anyone know how to best get accurate timestamps for the values of the position and rotation of a headset?

Thank you!


Tagged:
Sign In or Register to comment.