Actualmente se está desarrollando un proyecto de realidad aumentada para la asignatura Sistemas de Información. Inicialmente se pensó que construir una pequeña aplicación con características de RA para Android sería mucho más fácil de lo que está resultando.
En primer lugar, la falta de documentación y ejemplos como base del desarrollo del software dificultó mucho el inicio de la tarea. Por ello solicitamos documentación a la empresa Mobbeel ya que su actividad laboral gira en torno al sistema operativo Android, y ayuda al grupo de investigación Gexcall en Mérida, concretamente a Quique y Héctor.
Finalmente se ha optado por montar una RA algo diferente a los ejemplos proporcionados. Consiste en la utilización del hardware del móvil (cámara y gps) más el diseño de imágenes en 3D con OpenGl.
Una vez montado todo, la aplicación mostrará las imágenes diseñadas cuando el dispositivo móvil se encuentre exactamente en la latitud y longitud seleccionadas y enfoque al punto exacto.
Hasta este momento se ha conseguido implementar lo siguiente:
1.- Lanzar la imagen de OpenGL sobre la imagen en tiempo real que captura la cámara.
2.- Para el manejo de Gps se utiliza la clase LocationManager. Esta clase proporciona acceso a los servicios de sistema de localización. Estos servicios permiten que las aplicaciones puedan obtener actualizaciones periódicas de la situación geográfica del dispositivo. El método que inicializará la localización geográfica es el siguiente:
/**
* Initializes GPS
*/
public void initLocationManagement(MyLocationListener ocationListener){
this.locationManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
this.locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 1000, 1, locationListener);
boolean enabledOnly = true;
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
this.locationManager.getBestProvider(criteria, enabledOnly);
}
3.- Cargar la imagen renderizada del cubo y añadirla a la vista:
/**
* Initializes Renderer.
*/
public void initRenderer(CompassRenderer compassRenderer) {
this.mGLSurfaceView = new GLSurfaceView(this);
this.mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
this.mGLSurfaceView.setRenderer(compassRenderer);
this.mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
setContentView(this.mGLSurfaceView);
}
4.- Lanzar la vista de la cámara y añadir la imagen de OpenGL. Para ello asociamos la vista OpenGL a la actividad principal, creamos la vista de la cámara y la añadimos. La vista de la cámara queda así detrás de la vista OpenGL, visible porque esta última tiene un fondo transparente.
mCameraView = new CameraView(this);
addContentView(mCameraView, new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
El resultado obtenido se aprecia en la siguiente imagen obtenida del propio dispositivo.
Los principales problemas con los que nos encontramos actualmente son los siguientes:
• Mostrar la imagen 3D de openGL según la posición geográfica almacenada. A pesar de comparar la localización del dispositivo con la latitud y longitud seleccionadas para el testeo, no logramos pintar nada.
• Establecer la imagen en un punto según la situación de la brújula del dispositivo. Lo que se quiere conseguir es consultar en cualquier momento el sensor que detecta el rumbo de la brújula y la inclinación del teléfono. Con estos valores se dibujaría la imagen en una determinada posición y la veríamos a través del móvil sólo si enfocamos en esa dirección.
Si consigues hacer algo que funcione medianamente sería impresionante.
Ahora mismo hay aplicaciones muy buenas que se sirven de la brújula y las coordenadas GPS, por lo que tecnológicamente es posible. Ahora bien, me parece una exageración hacer una aplicación de ese estilo en un mes (o dos).
Es un campo bastante nuevo para mi así que creo que no puedo aconsejarte nada demasiado técnico 🙁
Parece sencillo, pero me imagino que, como todo, habrá costado mucho¡¡ Enhorabuena por el trabajo, Juan Luis.
Buscando esta mañana un rato, sobre RA en Android, he encontrado algo que para futuros trabajos… o para lo que sea creo que resulta muy interesante.
Se trata de un proyecto open source y licencia GPL denominado AndAR (android AR) y consiste en un FrameWork para constrir aplicaciones RA sobre dispositivos Android:
http://code.google.com/p/andar/
Y aquí un «How To»: HowToBuildApplicationsBasedOnAndAR :
http://code.google.com/p/andar/wiki/HowToBuildApplicationsBasedOnAndAR
=================================================================
Top 5 de mejores app de RA para Android:
http://compixels.com/441/top-5-augmented-reality-apps-for-android
=================================================================
un saludo,
Ángel
Por cierto mira que chulo 🙂
http://www.nopuedocreer.com/quelohayaninventado/16126/augmented-reality-cinema-muestra-las-escenas-donde-se-filmaron/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+NoPuedoCreerQueLoHayanInventado+%28No+puedo+creer+que+lo+hayan+inventado…%29&utm_content=Google+Reader