Proyecto Elo 329: Oculus Rift-Manejo de sensores
1. Descripción del problema
Oculus Rift es un dispositivo que tiene diversas aplicaciones en desarrollo de software. Uno de los aspectos mas básicos e importantes, es el correcto manejo de los sensores del dispositivo, lo cual si se domina correctamente, abre la posibilidad de crear múltiples aplicaciones que requieran un dispositivo de este tipo. Es por este motivo que el objetivo de este proyecto es lograr leer los valores de los sensores de movimiento del Oculus rift, para posteriormente mostrar su funcionamiento mediante una interfaz grafica y así por lo tanto lograr una base de desarrollo para futuras aplicaciones.
2. Análisis del problema
Para empezar el desarrollo del programa, se debe considerar que Oculus Rift trabaja con librerías hechas en C++.
Además dado que se quiere mostrar en una interfaz gráfica los valores de los sensores, se debe utilizar un software de desarrollo que incorpore alguna herramienta de creaciones de interfaces gráficas. Por ello los elementos utilizados para el desarrollo de este proyecto fueron:
- Dispositivo Oculus Rift (En este caso usada la versión DK1)
- SDK (Software Development Kit) de Oculus VR , la cual puede ser descargada desde : Oculus Vr (Utilizada versión 0.3.2 linux)
- Programa Qt el cual cuenta con despliegue de interfaces gráficas
Estos interactuan de la siguiente manera formando el sistema:
- El SDK de Oculus Rift provee los metodos necesarios para poder interactuar con los sensores del Oculus rift
- El dispositivo Oculus Rift envía los datos al pc al cual está conectado
- El ambiente de desarrollo Qt se encarga de inicializar el dispositvo mediante el uso de los metodos presentes en las librerias otorgadas por el SDK, para posteriormente leer los valores de los sensores y por ultimo mostrarlos mediante una interfaz grafica.
Figura 1:Ejes de movimiento del Oculus Rift
2.1 Casos de usos
A continuación se muestran casos de usos. Dado que la funcionalidades del programa son limitadas, los siguientes casos de usos son la mayoria de los casos que podrían ocurrir al ejecutar el programa.
Caso de uso 1: Oculus no conectado
Caso de uso 2: Oculus conectado y funcionando
3. Arquitectura de la solución
Al crear la solución del programa, el diagrama UML con las clases es la siguiente:
Figura 2:Diagrama de clases UML
Las clases resultantes poseen los siguientes atributos y métodos:
Mainwindow:
Public:
Explicit MainWindow (QWidget *parent=0);
~MainWindow();
Void createStatusBar();
Prívate slots:
Void on_label_linkActivated (const QString &link);
Void on_label_linkHovered (const QString &link);
Prívate:
Clkled:
Public:
Clckled(widget *parent=0);
Prívate slots:
Clock:
Public:
Clock (QWidget *parent=0);
Protected:
Void PaintEvent (QPaintEvent *event);
Variables:
En el caso de las clases clkled y clock se indica una sola clase de las 3 que se implementaron en cada caso, ya que sus características son idénticas entre ellas y solo varía el dato que recibe y muestra cada una.
Figura 3:Diagrama secuencia casos de usos
En este diagrama se explica de qué forma se conectan las clases y que sentido secuencial tienen éstas. Las flechas indica el sentido de los datos y hasta donde llegan éstos. Finalmente se representan en la clase que crea la interfaz gráfica.
4. Implementación de la solución
En primer lugar se crea una clase que permite obtener los datos de los sensores del Oculus, los cuales son representados en grados, para lograr simular el movimiento en la interfaz gráfica compuesta por los “relojes”.
Se crea una clase “variables” que junta todos los datos y permite su manipulación, cambiar de formato y exportar dichos datos a otras clases.
Las clases “clock” y “clkled” permiten ver gráficamente los valores entregados por los sensores. La primera representa el movimiento del Oculus, indicado con el “puntero del reloj” y la segunda, muestra los valores en grados que permiten simular el movimiento en las clases “clock”.
Finalmente se crea una interfaz gráfica general que junta los elementos anteriores y muestra todo en una ventana.
Como observación, se destaca que la interfaz es creada con la plataforma QTCreator, que facilita trabajar de esta forma en el lenguaje C++.
Así por lo tanto la implementación completa se puede ver y descargar desde el siguiente enlace: Proyecto Oculus
5. Pruebas
Algunas de las primeras dificultades que se presentaron al desarrollar el proyecto, fue la implementación de las librerías en el código, dado que el manual del SDK no es muy especifico en como agregar todas las librerías necesarias para poder inicializar y en consecuencia leer los sensores. Por ello se utilizo bastante tiempo en investigar que comandos eran necesarios agregar en la etapa de compilación. Estos comandos de compilación se pueden ver en el el archivo gui1.pro en el directorio: Proyecto_Oculus_Rift/proyecto_gui1/gui1/
Así por lo tanto en la siguiente imágen se muestra el resultado al ejecutar el programa, estando el Oculus Rift conectado y funcionando.
Figura 4:Resultados obtenidos
Integrantes:
- Gonzalo Callender
- Matias Lacasia
- Diego Carvajal