Reputation: 381
I'm having an issue with a project built in Unity for Hololens 2, using
The MRTK is installed using the MRTK feature tool. I installed foundations, extensions, toolkit tools and standard assets.
The Vuforia ImageTargets get a random offset from their supposed position.
I have the scene, hand tracking and the general setup for the Hololens running as intended using the MRTK. I also want to utilize the image tracking capabilities of Vuforia, but thats where my issue comes in. When starting the app on the Hololens 2 device, the ImageTargets are getting detected, but their position has a random offset, after each restart of the app. I suspect that the World coordinate system is slightly off. In the Vuforia behaviour, the World Center mode is already predefined to DEVICE and cannot be changed. When testing in the Editor with a Webcam, everything is working as expected. The scene is setup similar to the tutorial found at https://arvrjourney.com/hololens-2-marker-tracking-with-vuforia-engine-and-mrtk-fb582c8f8ac0
My scene hirarchy looks as follows, which is similar to the scene setup found in the Vuforia Hololens 2 samples
One of the Targets has no child, but it is actually toggling another scene gameobject, after detection and then switching over to extended tracking to use the more stable tracking of the Hololens. The SceneGameobject is following the Imagemarkers position. To verify the behaviour, there is also a second marker, with a default setup and a cube as a child. Both show the same behaviour and same offset. I also tried to change the Image Targets' place in the hirarchy, like putting it as a child of the Playspace, or the Maincamera, to no avail.
TLDR: Vufora Image Targets do not work when using OpenXR on the Hololens 2
EDIT: I changed from OpenXR back to Windows Mixed Reality, which seems to have eliminated the issue, but I'm really puzzled about it nonetheless, especially, when OpenXR is supposed to replace Windows Mixed Reality in the future o.O
Upvotes: 1
Views: 1761
Reputation: 3968
This was a problem that was caused by Vuforia not fully supporting OpenXR. As of version 10.4.4, they have fixed the problem.
If you were like me and came to this question because you were implementing your own image tracking service and suddenly there was an offset caused by updating to Unity 2020 and/or OpenXR, it's likely you are encountering the same problem Vuforia had to fix. I fixed it by changing how I am obtaining the world origin:
The proper way to obtain the world origin in OpenXR is using:
using Microsoft.MixedReality.OpenXR;
var worldOrigin = PerceptionInterop.GetSceneCoordinateSystem(Pose.identity) as SpatialCoordinateSystem;
Upvotes: 1