Proyecto Fin de Carrera

Robótica, software y telecomunicaciones.

Novedades en KinectComp

En Robolab seguimos trasteando con la Kinect, con su calibración y con el cómo pasar los datos de imagen y profundidad a coordenadas en 3D. La semana pasada se hicieron algunos cambios en las interfaces (archivos .ice) kinect y rgbd. Lo que me lleva a modificar mi código para trabajar con estas nuevas interfaces. Estos cambios son debidos a la calibración de la kinect y al ajuste que se aplica para hacer coincidir los datos de profundidad sobre la imagen RGB o bien la imagen sobre la profundidad.

De momento, estos métodos son getDataRGBZinIR() y getDataRGBZinRGB(), ambos métodos nos devuelven la Z en lugar de la DEPTH (profundidad), ya que es más útil porque podríamos pasar esa información a un sistema cartesiano con coordenadas XYZ, además para mi caso concreto, también es más útil pues los movimientos que haremos sobre la cámara serán movimientos planos en lugar de movimientos esféricos con centro en la Kinect.

Diferencias entre el concepto de Depth y Z.

Diferencias entre el concepto de Depth y Z.

Respecto a los métodos de conseguir los datos de imagen, es debido a que la cámara IR y la cámara RGB están desplazadas en el eje X (suponiendo un sistema cartesiano de tres dimensiones XYZ), y por tanto es importante usar como referencia una cámara u otra.

Estos cambios han hecho que me interese más aún por el componente que gestiona la Kinect en RoboComp y por el mismo driver de OpenKinect. He realizado algunas modificaciones en KinectComp de forma que sea más versátil y potencialmente más capaz. Por ejemplo, es interesante que en la interfaz de KinectComp (archivos .ice) estén definidos métodos con todas las posibilidades de la Kinect, pues aunque no se puedan implementar en este momento, es posible dejar esos métodos vacios y desarrollarlos más adelante sin interferir con los programas o componentes que se conectan a KinectComp.

Por este motivo he estado pensando en varios métodos, además de los existentes. Un método casi obligado sería el de calibrar la Kinect. Ya que sería conveniente poder calibrar cada Kinect antes de obtener los datos de imagen y profundidad, hasta ahora KinectComp calibraba la Kinect con unos valores de calibración genéricos proporcionados por Nicolas Burrus en su wiki. He modificado el código para que use variables en esa calibración, ya que cada Kinect tiene unos valores específicos asociados, de forma que con un método del tipo setCalibration(vectorCalibration[]) podamos pasar los valores específicos de nuestra Kinect en caso de que los conozcamos.

Otros métodos son asociados al LED de la Kinect de forma que podamos cambiar y leer su estado, esto puede ser útil para nuestra aplicación como un método de comunicación entre el programa y el usuario. Por ejemplo, si el usuario está demasiado cerca de la kinect, ponemos el LED en rojo, y si está a una distancia óptima se pone a verde.

Tambien sería ideal tener métodos para el audio o el acerelómetro de la Kinect, aunque en este momento no se le vaya a dar uso, porque aún no está bien implementado en el driver.

Como apunte final respecto a los métodos, creo que es conveniente evitar los parámetro en funciones siempre que se pueda, por ejemplo, se podría usar el siguiente método para la modificación del color del LED:

void setLEDcolor(int color);

Sin embargo, veo mucho más interesante crear la misma funcionalidad con un serie de métodos, pues el tener varios métodos no es algo necesariamente negativo:

void setLEDred();

void setLEDgreen();

void setLEDorange();

28 marzo 2011 Posted by | all | , , , | 1 comentario