{"id":694,"date":"2018-04-13T01:19:03","date_gmt":"2018-04-13T01:19:03","guid":{"rendered":"http:\/\/www.mnemonic.studio\/memo\/?p=694"},"modified":"2018-04-13T15:38:27","modified_gmt":"2018-04-13T15:38:27","slug":"holographic-touch-part-1","status":"publish","type":"post","link":"http:\/\/www.mnemonic.studio\/memo\/holographic-touch-part-1\/","title":{"rendered":"Holographic Touch, Part 1"},"content":{"rendered":"<h4>An experiment &#8211; with mixed success &#8211; in combining HoloLens augmented reality with touchscreen interaction.<\/h4>\n<p><!--more--><\/p>\n<hr \/>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/hololens\" rel=\"noopener\" target=\"_blank\">Microsoft&#8217;s HoloLens<\/a> is probably my favorite new technology device of the last decade &#8211; the first time I tried it out, it felt truly magical. It&#8217;s still the only augmented reality device I&#8217;ve used that feels seamless and &#8220;just works.&#8221; <\/p>\n<p>That said, it has some limitations, one of which is a lack of intuitive interaction. The user&#8217;s instinct is to tap the holographic objects to navigate, but that&#8217;s not quite how HoloLens works. With this device, you &#8220;gaze&#8221; at an object to highlight it, then tap your finger to select it. There&#8217;s a learning curve to this, which makes it challenging to deploy the devices in exhibits and public environments.<\/p>\n<p>I decided to explore the possibilities of using HoloLens with touch displays &#8211; not only would this provide familiar, tactile interaction, but it would work nicely in museums and brand environments where a physical component could provide a visual anchor for an augmented-reality experience. I set out to build a simple prototype that would give me just enough structure to experiment with the combined technology platform and to understand its strengths and limitations. <\/p>\n<hr \/>\n<p>My primary challenge was to align HoloLens&#8217; virtual content precisely with a real-world touch display. I initially tested <a href=\"https:\/\/www.vuforia.com\/\" rel=\"noopener\" target=\"_blank\">Vuforia<\/a>, probably the most common development toolkit for augmented reality. Vuforia support is built into Unity, the platform I&#8217;m using for HoloLens development, so it seemed like an easy choice.<\/p>\n<p>After resolving some challenges around software version compatibility, I was able to compile Vuforia&#8217;s sample app and run it on my HoloLens. Vuforia applications use a device camera to look for printed tracking tags, which the app uses to interpolate the camera&#8217;s point of view and render 3D content on top of the scene. For my purposes, I wanted the HoloLens to track digital tag images, rather than printed ones, directly off of a small tabletop touch display. <\/p>\n<div class=\"videoWrapper\">\n<iframe loading=\"lazy\" src=\"https:\/\/player.vimeo.com\/video\/264499726\" width=\"1280\" height=\"720\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe>\n<\/div>\n<p><\/p>\n<p>It worked &#8211; more or less. In order to initially recognize the tracking images, I had to hold the device fairly perpendicular to the touchscreen. Once the hologram appeared, it was more flexible, but there was visible shakiness (0:25 in the video above) and drifting (0:02). Worse still, if the tracking image went out of view, the hologram flickered off. There are composite approaches that can use Vuforia to initialize positioning and switch to the HoloLens&#8217; own tracking thereafter, but I decided to try a different approach&#8230;.<\/p>\n<hr \/>\n<p>For my second test, I built a custom application that would allow manual manipulation of a holographic grid, allowing me to align it precisely with a matching grid on the touch display. To keep things simple, I used voice control in lieu of navigation buttons (that may not sound simple, but it&#8217;s remarkably easy to implement for HoloLens). Through voice, I could choose whether to scale, rotate, or move the object, then use a simple hand gesture to perform the transformation.<\/p>\n<div class=\"videoWrapper\">\n<iframe loading=\"lazy\" src=\"https:\/\/player.vimeo.com\/video\/264499780\" width=\"1280\" height=\"720\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe>\n<\/div>\n<p><\/p>\n<p>Once I got this up and running on the device, it was pretty easy to use. Unfortunately, while the HoloLens content was smooth and stable, it still drifted. To use Microsoft&#8217;s own terminology, it was &#8220;swimming.&#8221; If I kept my head steady, the hologram was stable, but as I moved slightly, the image shifted &#8211; only a few centimeters or so, but enough to make it impossible to consistently align the grids.<\/p>\n<p>I tried out some of Microsoft&#8217;s default applications to see if I would get the same results. Using the built-in Holograms app, I selected a virtual dog and placed it atop the touch display. As expected, the effect is smooth, but doesn&#8217;t stand up to scrutiny: as the video shows (at 0:28:00), the dog&#8217;s position shifts relative to the grid lines. Had the image been floating in space, without the display underneath it, I probably wouldn&#8217;t have noticed this.<\/p>\n<div class=\"videoWrapper\">\n<iframe loading=\"lazy\" src=\"https:\/\/player.vimeo.com\/video\/264499822\" width=\"1280\" height=\"720\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe>\n<\/div>\n<p><\/p>\n<p>I did some more research; <a href=\"https:\/\/forums.hololens.com\/discussion\/7385\/reduce-shifting-of-holograms\" rel=\"noopener\" target=\"_blank\">others online<\/a> faced the same issue, so I was fairly certain I wasn&#8217;t doing anything wrong. Ultimately, a combination of factors are working against me:<\/p>\n<ul>\n<li>The shininess of the touch display surface makes it less than ideal for HoloLens&#8217; visual tracking.<\/li>\n<li>HoloLens is expressly meant for viewing content from a distance of 1.5 meters or greater (all of my content fell within one meter).<\/li>\n<li>HoloLens smooths all of its virtual content to minimize jitter, privileging elegance over accuracy.<\/li>\n<li>HoloLens&#8217;s tracking technology simply doesn&#8217;t support this level of precision.<\/li>\n<\/ul>\n<p>It would be silly to complain about these limitations &#8211; it&#8217;s pretty miraculous that HoloLens works as well as it does in the first place. That said, it&#8217;s a two-year-old device using rapidly developing technologies, so it&#8217;s entirely possible that its next generation will overcome all this issues. But rather than wait <a href=\"https:\/\/www.roadtovr.com\/microsoft-affirms-new-hololens-headset-is-in-development\/\" rel=\"noopener\" target=\"_blank\">a year or two<\/a> until the next HoloLens arrives, I decided to see if I could work around its current limitations.<\/p>\n<hr \/>\n<p>To finish this stage of the prototype, I built a simple application which animates a circle to follow the user&#8217;s touch point across the grid. Using a simple network connection, these touchpoints are sent wirelessly to the HoloLens application, which replicates the motion using a 3D cube. <\/p>\n<div class=\"videoWrapper\">\n<iframe loading=\"lazy\" src=\"https:\/\/player.vimeo.com\/video\/264499915\" width=\"1280\" height=\"720\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe>\n<\/div>\n<p><\/p>\n<p>Except for the &#8220;swimming,&#8221; it&#8217;s not bad. The cube is never quite perfectly aligned to the grid below it, but it&#8217;s consistent, and the coarseness of the grid snapping helps with perceived accuracy.<\/p>\n<p>I&#8217;m tempted to try a few more things&#8230; using printed Vuforia tags in lieu of virtual ones, or adding non-reflective materials around the display edge to try to improve tracking. But neither of these workarounds would successfully scale up to a larger display.<\/p>\n<p>Instead, as a next step, I&#8217;ll build out the prototype to incorporate some use cases for exhibit experiences, and see whether I can build interfaces that will work successfully in spite of the precision issue. Stay tuned&#8230;.<\/p>\n<hr \/>\n<div class=\"wp-caption-text\" style=\"text-align:left;\">*A word about the videos on this page: When looking through the HoloLens, the 3D content is rendered from slightly different angles for the left and right eyes to create the illusion of depth. However, the device&#8217;s camera is right in the middle, so when recording video, there&#8217;s a misalignment between the real-world and augmented content. You&#8217;ll have to take my word for it that things look better through the HoloLens!<\/div>\n","protected":false},"excerpt":{"rendered":"<p>An experiment &#8211; with mixed success &#8211; in combining HoloLens augmented reality with touchscreen interaction.<\/p>\n","protected":false},"author":1,"featured_media":699,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[7],"tags":[22,34,19,40,21,28,15,41],"class_list":["post-694","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-read","tag-3d","tag-augmented-reality","tag-creative-coding","tag-hololens","tag-microsoft","tag-multitouch","tag-unity","tag-vuforia"],"_links":{"self":[{"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/posts\/694","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/comments?post=694"}],"version-history":[{"count":10,"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/posts\/694\/revisions"}],"predecessor-version":[{"id":721,"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/posts\/694\/revisions\/721"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/media\/699"}],"wp:attachment":[{"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/media?parent=694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/categories?post=694"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.mnemonic.studio\/memo\/wp-json\/wp\/v2\/tags?post=694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}