microsoft / MixedReality-WorldLockingTools-Unity

Unity tools to provide a stable coordinate system anchored to the physical world.
https://microsoft.github.io/MixedReality-WorldLockingTools-Unity/README.html
MIT License
188 stars 45 forks source link

Support for android-based pass-through headsets like Lynx and Quest2? #229

Closed zantiu closed 2 years ago

zantiu commented 2 years ago

So there's quite some exciting recent announcements and developments related to mixed reality glasses.

First of all the French start-up Lynx will start shipping their mixed reality headset based on the Qualcomm XR2 in a couple of months. They just successfully completed their kickstarter, but enterprises can also order directly. They will release with the Open-XR runtime. Their anchor system has not been announced officially, but it might be based on Wikitude's technology which has been purchased by Qualcomm.

Then there's the Quest 2 and other future headsets like project Cambria. Quest 2 will have their black-and white optical passthrough opened for general availability soon, and the Cambria glasses will come with full-color pass-though. During the connect event Facebook announced the 'Presence Platform/SDK' that will also contain spatial anchors. And that will also be running on Open-XR.

Will WLT be able to run on these headsets once the relevant hardware/SDK's are ready? And will you need to make changes, or can WLT just access the underlaying anchor mechanisms through Open-XR in the same way as on the Hololens?

fast-slow-still commented 2 years ago

Yes, it is an exciting time for AR. At this time, I could not speculate on support of platforms which haven't been finalized.

zantiu commented 2 years ago

In the meantime Oculus has released their Spatial Anchors API based on OpenXR: https://developer.oculus.com/experimental/spatial-anchors-api-openxr/

I tried this tutorial and it works well combined with pass-through: https://skarredghost.com/2022/01/05/how-to-oculus-spatial-anchors-unity-2/

Then I built my WLT project also to Quest 2. I notice that anchors get dropped around the room, just like on the Hololens. The anchor and edges count also goes up when walking around.

However the debug info shows following info:

So does this already work? Or should some changes be implemented in WLT first? @fast-slow-still

In the end I want to synchronize the environments between the Hololens and the Quest.

fast-slow-still commented 2 years ago

@zantiu , no, the null anchor subsystem indicates that WLT doesn't know how to talk to the device/platform, so it is using a no-op placeholder anchor manager to allow development in the meantime. The null anchor manager doesn't perform any world-locking, it just goes through the motions, creating an internal graph of pseudo-anchors which don't actually track the real world. They are just dummy objects.

Support for the Quest will probably involve building specializations for AnchorManager and SpongyAnchor for the Quest system, although it is possible that WLT's OpenXR subsystem will already support it with minor modifications.

Finishing this will, obviously, require my getting access to a Quest device (among other things). I do note that Oculus hasn't actually "released" their Spatial Anchors API, it is still an experimental preview. But I would certainly like to have support ready when it is officially released.

zantiu commented 2 years ago

Right that would have been too easy...

You should get one. They are amazing!

So would the spacepin functionality work already? I mean if I mark some points with their real-world coordinates then WLT will already align the content correctly, right? (Like what we already do with the hololens through QR-codes, although with the Quest it will have to be manual since no QR-code scanning functionality)

fast-slow-still commented 2 years ago

You could use the space pins with the null anchor manager, but in a limited capacity:

  1. You can't persist from session to session.
  2. There is no world-locking. If your camera drifts, WLT can't correct, because it has no underlying anchor support.

I will start trying to get a Quest today!

zantiu commented 2 years ago

Ok that should be sufficient to do some initial testing.

I also ordered the Lynx R1 that I mentioned above: https://www.lynx-r.com/collections

Their Spatial Anchors should be based on Snapdragon Spaces: https://www.qualcomm.com/products/features/snapdragon-spaces-xr-platform

zantiu commented 2 years ago

So just one question: should SpacePin.SetFrozenPose() work with the null anchor manager?

I just wanted to test if I could get some basic alignment when using the quest controller to point to the real-world position of the spacepin, but nothing happened. No error message or anything.

fast-slow-still commented 2 years ago

Hi @zantiu , we've been on holiday for St Patrick's Day here in Ireland.

Yes, SetFrozenPose should work with the null anchor manager. If it doesn't, could you submit an issue on it? Please include all of the usual version info, repro steps, and especially a UnityPlayer.log.

Also, if this is custom code (not the sample SpacePinOrientableManipulation component), please include the code. If you can't post the code on a public facing issue, maybe you could email it to me directly.

Thanks!