Search code examples
mrtk

Can I trigger the Hololens Calibration sequence from inside my application?


I have a hololens app I am creating that requires the best accuracy possible for hologram placement. This application will be used by numerous individuals. Whenever I try to show the application progress, I have to have the user go through the calibration process, otherwise the holograms appear to have way too much drift.

I would like to be able to call the hololens calibration process automatically when the application opens. Later, after I set up user authentication and id management, I will call the calibration process when a new user is found.

https://learn.microsoft.com/en-us/windows/mixed-reality/calibration

I have looked into the calibration (via the above documentation and elsewhere) and it seems that all it is setting is IPD. However the alternative solutions I have found that allow for dynamic ipd adjustment appear to be invalid for UWP Store apps. This makes them unusable for me.

I am looking for any help or direction, or if this is even possible. Thank you.


Solution

  • Yes, it is possible to to this, you need to use the LaunchUriAsync protocol to launch the following URI: ms-hololenssetup://EyeTracking

    Here is an example implementation, obtained from the LaunchUri example in MRTK

    public void LaunchEyeTracking()
    {
    #if WINDOWS_UWP
        UnityEngine.WSA.Application.InvokeOnUIThread(async () =>
        {
            bool result = await global::Windows.System.Launcher.LaunchUriAsync(new System.Uri("ms-hololenssetup://EyeTracking"));
            if (!result)
            {
                Debug.LogError("Launching URI failed to launch.");
            }
        }, false);
    #else
        Debug.LogError("Launching eye tracking not supported Windows UWP");
    #endif
    }