Best practice for working with QR codes

The advantage of placing with the QR code is you can easily position and orient your model in exactly the same place over and over again. We run a QR code tracking algorithm that averages the tracked position and orientation from a large number of samples, meaning that repeated placement should be pretty consistent (though not absolutely perfect, see notes below).

QR code size
When placing with the QR code, you should try to position the hololens as perpendicular to the code as possible (samples will be more accurate) while still ensuring the device can see enough of the environment to maintain good tracking. This means that generally speaking larger QR codes are more useful because you don’t need to get so close to the code that you lose track of the environment. But otherwise there is no difference in tracking precision between small and large codes (a small code up close to the camera on the hololens is tracked in exactly the same way as a large code positioned further away).

QR code location
When you place your model with a QR code in Fologram, you are essentially doing an orientation transform on your model. The QR code data contains a reference plane (by default this is an XY plane at 0,0,0), that is then transformed to the detected plane of the physical QR code in the arbitrary coordinate space of the HoloLens. Whenever you place a model in Fologram, we create a spatial spatial anchor on the HoloLens to keep holograms fixed in this location. Tracking precision is best near this anchor point and decreases as you move further away. So if after placing your model you then need to walk 6m to a workbench where you will actually use a hologram, this will be less precise than if you had placed the model 30cm from the workbench. As a result you should always try to design QR code locations that can be as physically close as possible to the work area you are planning to use.

Multiple QR Codes
You can use the FologramQR command to create as many QR codes as you want. Each QR code contains its coordinates (by default this is 0,0,0) and can be placed anywhere and in horizontal or vertical orientation. When you place your model on any of these QR codes, the coordinates contained in the QR code will specify which location in your model should be moved / oriented to the location of the QR code in physical space.

Because we are calculating the QR code position in physical space from RGB frames from the front facing camera on the hololens, you can expect some small error in the tracked position and orientation due to limited resolution and noise in the camera data. Even very small rotational error will become quite apparent as you move further way from the QR code. So when you place with one QR code (say at 0,0,0), your model will be ‘accurate’ around this QR code and as you move further away will start to drift (mostly due to rotational error in the QR code rather than tracking precision). If you move 6m to some other QR code, before re-placing your model will be way off (maybe by 2-5cm). When you place your model on this new QR code it will now be ‘accurate’ again, but if you walk back to your original QR code you will experience the same incorrect drift (once again due to rotational error).

We are working on solving this problem by interpolating between tracked positions of qr codes to spread this drift out over space. But this feature is experimental and not publicly released yet.