Primeros pasos con ARKit

Alfonso Miranda Castro
Build and run
Published in
4 min readFeb 12, 2018

Uno de las novedades más sonadas que ha traído la versión número 11 de iOS ha sido una librería llamada ARKit. Esta no es más que un framework que nos ayuda a crear realidad aumentada en nuestras aplicaciones iOS. La realidad aumentada existe en los dispositivos iOS desde el principio de los tiempos y no es más que tener una información virtual sobre la realidad y que ambos mantengan una correspondencia, mostrando una información útil para el usuario.

Para esta correspondencia, ARKit usa una técnica llamada Odometría Visual Inercial (VIO) que combina información de los sensores de movimiento con la cámara de los dispositivos iOS. ARKit tiene la capacidad de reconocer las características más notables de las imágenes, realiza comparaciones para detectar diferencias en las posiciones a través de todas las imágenes del video y lo mezcla con la información de los sensores.

Y después de toda la teoría, lo mejor para adentrarse en este mundo es empezar a tirar líneas de código.

¿Cómo empezamos un proyecto de realidad aumentada?

Desde la versión 9 de Xcode tenemos una nueva opción a la hora de crear un proyecto del tipo “Augmented Reallity App”.

Una vez seleccionado tenemos la opción de usar varias tecnologías: SpriteKit, SceneKit o Metal, donde nos creará un ejemplo inicial con la que elijamos, en nuestro caso seleccionaremos SceneKit, que es para objetos en 3D (hablaré durante todo el artículo sobre SceneKit).

Como podemos ver está muy relacionado con la creación de videojuegos usando los frameworks ya existentes de Apple, y es algo en lo que habrá que tener los verdaderos conocimientos para crear nuestras apps de AR, ya que para el manejo de esta realidad tan solo tendremos que tener unos conocimientos básicos y mucha imaginación.

Si ejecutamos este proyecto sin tocar nada más (recordad, en dispositivo, no funciona en simulador) podremos ver un avioncito en nuestra realidad.

Si analizamos el código generado podemos ver como podemos inicializar nuestro entorno de realidad aumentada con ARKit.

Para empezar, necesitamos añadir nuestro escenario, en este caso y al trabajar con SceneKit sería un objeto del tipo ARSCNView.

@IBOutlet var sceneView: ARSCNView!

En el viewWillAppear inicializamos la configuración de la escena. Aquí está lo más básico para que funcione, se crea un objeto ARWorldTrackingConfiguration y lo añadimos a la sessión de nuestra escena.

override func viewWillAppear(_ animated: Bool) {super.viewWillAppear(animated)// Create a session configurationlet configuration = ARWorldTrackingConfiguration()// Run the view’s sessionsceneView.session.run(configuration)}

Y en el viewDidLoad se inicializa la escena en si. En este caso lo único que hacemos es añadir un objeto 3D frente a la cámara.

override func viewDidLoad() {super.viewDidLoad()// Set the view’s delegatesceneView.delegate = self// Show statistics such as fps and timing informationsceneView.showsStatistics = true// Create a new scenelet scene = SCNScene(named: “art.scnassets/ship.scn”)!// Set the scene to the viewsceneView.scene = scene}

Pero, ¿podemos añadir realidad aumentada a un proyecto ya existente?

Si, sin problemas. Se puede hacer como con cualquier otro tipo de vista o funcionalidad. Para ello tan solo necesitamos añadir en nuestra vista la escena ARSCNView (en caso que queramos jugar con SceneKit) e inicializarlo como hemos visto antes. El único detalle que nos faltaría sería añadir en el info.plist los permisos para permitir usar la cámara para AR, de la siguiente forma.

Y listo, ya podemos empezar a construir lo que queramos con esta nueva forma de trabajar.

¿Qué objetos puedo añadir en la escena?

En este ejemplo que tenemos por defecto al crear un proyecto de realidad aumentada estamos añadiendo un objeto 3D en formato scn, que es el nativo de Apple. Admite otros formatos como obj o dae, y desde el propio XCode podemos transformas estos formatos a scn para trabajar de forma más cómoda.

Además podemos crear objetos con las herramientas que tenemos en XCode, ya sea por código o de forma más visual. Todo esto funciona de forma muy similar a construir una app en SceneKit con la diferencia en que aquí trabajaremos con la realidad tanto como escena como con la cámara, mientras antes la escena era también virtual y la cámara la controlábamos en el juego.

¿Dónde se situa los objetos?

Al arrancar la realidad aumentada lo primero que hace el sistema es posicionarnos un origen que será la posición de la cámara del dispositivo en ese momento. A partir de esto nos alinea el resto de elementos que hayamos añadido a la escena dependiendo de la configuración que hayamos elegido, que tenemos tres opciones:

  • gravity: Alinea el mundo con la gravedad.
  • gravityAndHeading: Alinea el mundo tanto con la gravedad como con el norte en el eje de coordenadas.
  • camera: Alinea el mundo con la posición de la cámara.

Esto se define en el objeto ARWorldTrackingConfiguration de la siguiente forma:

configuration.worldAlignment = .gravityAndHeading

A partir de ahí ya situamos los objetos en las cordenadas x (izquierda, derecha), y (altura), z (profundidad).

Con esto tenemos para empezar pero hay mucho más que contar sobre ARKit y sus posibilidades, pero lo dejaremos para otro artículo.

Aquí tenéis código de lo hablado aquí para que podáis jugar: https://github.com/alfonsomiranda/ARKitTutorial/tree/feature/InitialProject

--

--