Android initially started developing AR with more custom hardware, but in 2017 they started work on ARCore as a way to make AR more accessible to current Android users. In February 2018, ARCore was released with version 1.0, making it officially available for use in apps across a wide range of phones, rather than just the small set available while it was still in Beta. ARCore is currently available for developers in several different formats; Android, Android NDK, Unity, and the Unreal Engine. For our initial, test and experimentation with AR, we chose to dive directly into the Android code to gain a better understanding of how ARCore works, and to leverage our experience building other Android apps in Android Studio.
Using the basic tutorials available for ARCore for Android we were able to create an initial application that prompts the user to install ARCore and to ensure it has the proper permissions. Unfortunately, the only other resources available are the API calls, so in order to see how ARCore is integrated into an app we need to use the sample app provided. By leveraging how the sample ARCore project works and using the API references, we built up an understanding of the core concepts in ARCore and how they interact with one another. These involve initializing an ARCore Session, getting an updated Frame from it to draw the current view of the world, generating Anchors as real world points, and then drawing the AR representation based on the Pose of an Anchor. Our initial assumption was that part of the API would provide easy access to draw the camera view and display AR objects, but as we explored the API and sample app we learned that most of the graphical part of ARCore is done through the GL ES framework, making experience with it important.
As our goal was to learn about ARCore and not the GL ES framework, we leveraged a lot of the graphical logic from the sample app, and focused on the interaction with ARCore. From this, we created a basic app that calculates the length between two points in the real world space.