Back in January 2015, Microsoft announced the future of augmented reality computing when they announced the HoloLens. I wrote and article explaining the difference between augmented reality, virtual reality and what Microsoft was doing ("Mixed Reality"). Then in March 2016, they released the developer editions of the first HoloLens, which I wrote about here. A little while later, I got my hands on one and wrote my first (and so far only) app, where I built my [First Hologram])(https://blog.davemdavis.net/2016/05/20/my-first-hologram/). Then I got busy and haven’t really done any development on it since. Every now and then I pick it up, play with it and remember how much I enjoy the experience, even with all its limitations. I had many ideas for the HoloLens but never really pursued them.
At Mobile World Congress this year, they announced the next version of HoloLens..The HoloLens 2. They made vast improvements over the previous version both technically and in the messaging as to the target audience…businesses. The usual technical advances….lighter, faster, more comfortable, better field of view…etc. They also announced a couple of Azure services that will expand the capabilities of Microsoft Mixed Reality (MR) efforts. These announcements also rekindled my interest in MR development, so I figure I would take another look. One of the new Azure services announced was Azure Spatial Anchors. Let’s take a look at this service first.
What are Spatial Anchors
Before we jump in to Azure Spatial Anchor, we first need to learn about spatial anchors. According to Microsoft a spatial anchor represents an important point in the world that the system should keep track of over time. Each anchor has a coordinate system that adjusts as needed, relative to other anchors or frames of reference, in order to ensure that anchored holograms stay precisely in place. Rendering a hologram in an anchor’s coordinate system gives you the most accurate positioning for that hologram at any given time. This comes at the cost of small adjustments over time to the hologram’s position, as the system continually moves it back into place relative to the real world. This concept is not tied specifically to Microsoft. It is a concept of the broader AR/VR community. It is often associated to a concept called simultaneous localization and mapping (SLAM).
Each AR/VR platform implements spatial anchors in their own proprietary manner which are usually not compatible with each other. Think about what that means. If I wanted to share an experience between an iPhone and an Android phone, I would have to convert the interpretation of the anchor from one platform to another. Think about the complexity involved. A spatial anchor is not "place this hologram at this GPS". It more like "I have this 3D representative of the environment, place this hologram here". That means each system has to have the same representation (Map) of the environment in order to place the hologram. Now you have to factor in the angle of perception, no two phones will be in the exact same place at the exact same angle. Also how do you stay in sync while the hologram is moving and or the user is moving, all while continually mapping the surroundings? Not an easy task. Why do I mention all this? First it’s fun to take a step back and appreciate the complexities involved. Second the Azure Spatial Anchor Service help solve some of these complexities.
Azure Spatial Anchors Service
Azure Spatial Anchors is a service that allows developers the capabilities to build spatially aware mixed reality applications. These applications may support multiple platforms like Microsoft HoloLens, iOS-based devices supporting ARKit, and Android-based devices supporting ARCore. Azure Spatial Anchors enables developers to work with mixed reality platforms to perceive spaces, designate precise points of interest, and to recall those points of interest from supported devices. These precise points of interest are referred to as Spatial Anchors. There is a managed service that facilitates the sharing and platform specific SDKs for each supported platform.
Azure Spatial Anchors provides the platform for storing and sharing anchors, SDKs to enable retrieving and translating those anchors, speeding up development and removing complexities. This opens up a bunch of interesting possibility. The following are some use cases from the Microsoft site:
- Multi User Experience: two players playing chess on a virtual chess board. They each see it from their point of view.
- Way-Finding: connecting spatial anchors to leave a breadcrumb trail, guiding someone from point A to point B.
- Persisting Visual Content: place a virtual calendar on a conference room wall that others can view using a supported device.
I have to admit my excitement after the initial release of HoloLens was high. I lose some of that excitement when I started playing with it. Having Azure Spatial Anchors, opens the door to many possibilities. Over the next few weeks I am going to play with it and see where I land. I hope to get a hold of a HoloLens 2…or at least try it. Spatial Anchors are just a small part of what’s possible with HoloLens 2 but an important one because it opens the door to creating cross platform experiences.