Category Archives: Augmented reality

Google’s WorldSense

Lenovo just announced the Mirage Solo VR headset with Google’s WorldSense inside-out tracking capability. The result is an untethered VR headset which presumably has spatial mapping capabilities, allowing spatial maps to be saved and shared. If so, this would be a massive advance over ARKit and ARCore based AR which makes persistence and collaboration all but impossible (the post here goes into a lot of detail about the various issues related to persistence and collaboration with current technology). The lack of a tether also gives it an edge over Microsoft’s (so-called) Mixed Reality headsets.

Google’s previous Tango system (that’s a Lenovo Phab 2 Pro running it above) did have much more interesting capabilities than ARCore but has fallen by the wayside. In particular, Tango had an area learning capability that is missing from ARCore. I am very much hoping that something like this will exist in WorldSense so that virtual objects can be placed persistently in spaces and that spatial maps can be shared so that multiple headsets see exactly the same virtual objects in exactly the same place in the real space. Of course this isn’t all that helpful when used with a VR headset – but maybe someone will manage a pass-through or see-through mixed reality headset using WorldSense that will enable persistent spatial augmentation using a headset with hopefully reasonable cost for ubiquitous use. If it was also able to perform real time occlusion (where virtual objects can get occluded by real objects), that would be even better!

An interesting complement to this is the Lenovo Mirage stereo camera. This is capable of taking 180 degree videos and stills suitable for use with stereoscopic 3D displays, such as the Mirage headset. Suddenly occurred to me that this might be a way of hacking a  pass-through AR capability for Mirage before someone does it for real :-). This is kind of what Stereolabs are doing for existing VR headsets with their ZED mini except that this is a tethered solution. The nice thing would be to do this in an untethered way.


The disaggregated smartphone and the road to ubiquitous AR

Nearly five years ago I posted this entry on a blog I was running at the time:

Breaking Apart The Smartphone

…it’s not difficult to imagine a time when the smartphone is split into three pieces – the processor and cellular interface, the display device and the input device. One might imagine that the current smartphone suppliers will end up producing the heart of the system – the display-less main CPU, the cellular interface, Bluetooth, WiFi, NFC etc. However, it will open up new opportunities for suppliers of display and input devices. It’s pretty safe to assume that Google Glass won’t be the only show in town and users will be able to pick and choose between different display devices – and possibly different display devices for different applications. Likewise input devices will vary depending on the environment and style of use.

Maybe we’ll look back on the current generation of smartphones as being inhibited by their touchscreens rather than enabled by them…

I was only thinking vaguely of AR at the time but now it seems even more relevant. A key enabling technology is a low power wireless connection between the processing core and the display. With this implemented in the smartphone core, things change tremendously.

For example, I have a smartphone that is pocketable in size, an iPad for things where a bigger screen is required, a smartwatch for when I am too lazy to get the phone out of my pocket etc. I only have a SIM for the smartphone because even having one cellular contract is annoying, let alone one per device. How would having a wireless display capability change this?

For a start, I would only have one smartphone core for everything. This would have the one and only SIM card. When I want a tablet type presentation, I could use a suitable size wireless display. This would be light, cheap and somewhat expendable, unlike the smartphone itself. However, in this concept, the smartphone can always be kept somewhere safe – expensive screen replacements would be a thing of the past, especially if the smartphone core doesn’t even have a screen. I like to ride a bike around and it would be nice to have easy access to the smartphone while doing so and in all weathers. You can get bike bags that you can put a smartphone in but they are pretty lame and actually quite annoying in general. Instead, I could have a cheap waterproof display mounted on the bike without any need for waterproof bags.

Since the display is remote, why not have a TV sized screen that connects in the same way? Everything streamable could be accessed by the smartphone and displayed on the TV without a need for any other random boxes.

Finally, AR. Right now AR headsets kind of suck in one way or another. I am intrigued by the idea that, one day, people will wear AR type devices most of the time and what that means for, well, everything. The only way this is going to happen in the near future is if the headset itself is kept as small and light as possible and just acts as a display and a set of sensors (inside out tracking, IMU, depth etc). Just like the other displays, it connects to a smartphone core via a wireless link (I believe that any sort of tethered AR headset is unacceptable in general). The smartphone core does all of the clever stuff including rendering and then the output of the GPU is sent up to the headset for display. An AR headset like this could be relatively cheap, waterproof, dustproof and potentially worn all day.

What does a world with ubiquitous AR actually look like? Who knows? But if people start to assume that everyone has AR headsets then “real world” augmentation (decoration, signage etc) will give way to much more flexible and powerful virtual augmentations – anyone not using an AR headset might see a very bland and uninformative world indeed. On the other hand, people using AR headsets might well see some sort of utopian version of reality that has been finely tuned to their tastes. It’s definitely Black Mirror-ish but not all technology has to have horrendous outcomes.

Speeding up ARKit development with Unity ARKit Remote

Anything that speeds up the development cycle is interesting and the Unity ARKit Remote manages to avoid having to go through Xcode every time around the loop. Provided the app can be run in the Editor, any changes to objects or scripts can be tested very quickly. The iPhone (in this case) runs a special remote app that passes ARKit data back to the app running in the Editor. You don’t see any of the Unity stuff in the phone itself, just the camera feed. The composite frames are shown in the Editor window as above.

Using ARKit with ExpoKit, React Native, three.js and soon (hopefully) WebRTC

This rather unimpressive test scene, captured from an iPhone, is actually quite interesting. It is derived from a simple test app using Expo that makes it easy to use React Native, ARKit and three.js to generate native iOS (and Android although not with ARKit of course) apps. Expo provides a nice environment where a standard app supports rapid development of javascript apps on top of the underlying native support. This test app worked will in Expo within a very short space of time.

The only problem is that I also want to support WebRTC in the app. There is a React Native WebRTC implementation but as far as I can tell it requires that the app be detached from Expo to ExpoKit so that it can be included in Xcode. Unfortunately, that didn’t work as AR support didn’t seem to be included in the automatically generated project.

To include ARKit support requires that the Podfile in the project’s ios directory be modified to add AR support. The first section should look like this:

source ''
platform :ios, '9.0'
target 'test' do
  pod 'ExpoKit',
   :git => "",
   :tag => "ios/2.0.3",
   :subspecs => [

Basically “AR” is added as an extra subspec. Then ARKit seems to work quite happily with ExpoKit.