Sie sind auf Seite 1von 16

UNIVERSIDAD POLITCNICA DE SAN LUIS POTOS

Ciencia, Tecnologa y Cultura al Servicio del Ser Humano

Lego NXT controlado con Kinect


Proyecto Final
M.C. Vctor Manuel Fernndez Mireles Organizacin Computacional

Integrantes: Diego Gabriel De La Fuente Moreno Kichj Fernndez Esteban Erika Nohem Reyna Ramos Aldo Damin Noyola Martnez 30 de noviembre de 2011

Lego NXT controlado con Kinect


Proyecto Final

CONTENIDO
1. 2. 3. 4. a. b. c. d. e. f. 5. 6. 7. 8. Introduccin............................................................................................................................. 3 Objetivo ..................................................................................................................................... 3 Aplicacin................................................................................................................................. 4 Implementacin ...................................................................................................................... 4 Pasos previos ...................................................................................................................... 4 Instalacin del SDK de Kinect ........................................................................................ 5 Configuracin del IDE ....................................................................................................... 5 Codificacin de la Aplicacin ....................................................................................... 10 Conexin y control del Lego NXT ................................................................................ 12 Interfaz Grfica .................................................................................................................. 13 Pruebas ................................................................................................................................... 14 Conclusiones......................................................................................................................... 14 Propuesta a futuro ............................................................................................................... 14 Referencias ............................................................................................................................ 16

Lego NXT controlado con Kinect


Proyecto Final

1. Introduccin En el presente trabajo se presenta la implementacin del proyecto para controlar un robot Lego NXT con la tecnologa Kinect de Microsoft. Se muestra el proceso seguido hasta la finalizacin del proyecto. Por un lado se muestra la programacin del Kinect y por otro lado se presentan los pasos necesarios para realizar la conexin de la PC con el Lego NXT a travs de una conexin Bluetooth. El Kinect es un dispositivo creado para jugar a los videojuegos de Xbox 360 sin necesidad de ningn mando o controlador. El sensor Kinect posee 2 cmaras de profundidad por infrarrojos y una cmara RGB. Con los datos de profundidad se realiza un seguimiento esquemtico de nuestro cuerpo (Skeletal Tracking) para poder llevarlo al juego. Tambin tiene una serie de micrfonos para diferenciar el sonido del juego y ambiental del de nuestra voz y una base motorizada para cambiar el ngulo de visin.

Imagen1: Se muestra el Kinect y sus cables de conexin a la computadora.

2. Objetivo Controlar el robot Lego NXT mediante un dispositivo Kinect a travs de una conexin Bluetooth. Slo se trabajar en el control de los motores, por lo que la programacin de los sensores queda excluida. Quedando este proyecto como base a otros proyectos ms complejos y de propsito ms especfico. Se plantea utilizar el Lego NXT en una carrera entre Legos, por lo tanto, los principales movimientos que el robot debe interpretar son Avanzar, Detener, Reversa, vuelta a la Derecha y vuelta a la Izquierda.

Lego NXT controlado con Kinect


Proyecto Final

Tambin a travs de este proyecto se pretende mostrar la versatilidad de los robots Lego NXT, ya que pueden ser usados para muchos propsitos de investigacin, enseanza y entretenimiento. Se muestra de manera implcita como los sistemas computacionales (en este caso el robot Lego y la PC) pueden intercomunicarse para llevar a cabo una tarea, esto slo se logra gracias a los componentes de su arquitectura y su organizacin. 3. Aplicacin Una aplicacin prctica puede ser utilizar el Kinect como detector de presencia de una sala, y en base a ello, encender las luces, o realizar alguna operacin en las PCs, en los equipos mviles o en la red. Con el uso del robot Lego pueden derivarse proyectos como la exploracin de sitios pequeos, donde los humanos no puedan acceder fcilmente, o proyectos ms complejos como la desactivacin de la energa elctrica en caso de un incendio. 4. Implementacin Este proyecto se pudo realizar gracias a la facilitacin por parte de la Universidad Politcnica de San Luis Potos en equipo e instalaciones necesarias. a. Pasos previos Empezamos a explorar las alternativas disponibles para la programacin del Kinect. Las dos principales alternativas fueron usar: Uso del proyecto OpenKinect (www.openkinect.org), que habilita el uso del Kinect para los sistemas Linux, Windows y Mac en una amplia gama de lenguajes de programacin (Java JNA y Java JNI, C, C++, C#, Python, ActionScript, Javascript y Lisp) usando libreras open source. Uso del SDK y toda la suite oficial de Microsoft. (Se restringe a sistemas con Windows 7 y a los lenguajes C# y C++ principalmente).

Lego NXT controlado con Kinect


Proyecto Final

Despus de varios intentos fallidos y slo un intento exitoso de usar las libreras de Open Kinect en sistemas Linux, se opt por usar la suite oficial de Microsoft. Debido a tal situacin tuvimos que dejar de usar nuestros equipos personales y depender totalmente de las instalaciones y del equipo de UbiLab. Cabe sealar que en sistemas Linux se intent usar las libreras para Java JNI, Java JNA y C#. b. Instalacin del SDK de Kinect i. Material Sensor Kinect Cable especial para el Kinect USB/Power ii. Requerimientos Para un funcionamiento ptimo del Kinect, la PC necesita contar con ciertos requerimientos mnimos como lo son: PC 32 o 64 bits Procesador Dual-Core 2.66 GHz superior Puerto USB 2.0 2GB RAM Sensor Kinect con cable USB/Power Windows 7 Visual Studio 2010 .NET Framework 4 iii. Observaciones Todo el software que ocupamos en este proyecto se puede instalar en una PC con menos de estos requerimientos pero se corre el riesgo de que se trabe o trabaje lento. c. Configuracin del IDE Paso 1: El primer paso es instalar Microsoft Visual C# Express 2010 que se pude descargar del siguiente link: http://www.microsoft.com/visualstudio/en-us/products/2010editions/visual-csharp-express Esta es una versin de prueba por 90 das.

Lego NXT controlado con Kinect


Proyecto Final

Es necesario tener conexin a internet mientras se est instalando el programa.

Imagen2: Ventana que muestra la pgina de descarga de Microsoft Visual C# Express 2010

Paso 2: Una vez que se instala el visual C# hay que descargar e instalar los drivers y el SDK del Kinect de Microsoft. Se puede descargar del siguiente link http://www.kinectforwindows.org/download/

Imagen3: Se muestra la pgina de descarga del SDK de Kinect. Se debe elegir la versin apropiada.

Lego NXT controlado con Kinect


Proyecto Final

Una vez que descargamos el archivo ya sea el de 32 64 bits hay que conectar el Kinect a la PC y se procede a instalar. Realmente lo que se instalar son los drivers del Kinect y el SDK. Para instalarse no debera de existir ninguna complicacin, con solo seguir las instrucciones.

Imagen4: Se muestra el estado de la instalacin de los drivers de Kinect en Windows 7.

Una vez que se instal el driver y el SDK nos debemos de asegurar que se ha instalado correctamente, para esto hay que dirigirnos a C:\Program Files\Microsoft Research KinectSDK o la ruta que hayamos elegido para la instalacin del SDK y ejecutamos el programa Skeletal Viewer o Shape Game que son 2 programas de ejemplo que se instalan con el SDK.

Imagen5: Vista del Shape Game. Si la instalacin se realiz con xito, los programas de prueba deben ejecutarse sin problema.

Paso 3: El siguiente paso es abrir Visual Studio 2010 para crear el proyecto WPF (Windows Presentation Foundation). Le damos un nombre y aceptamos.

Lego NXT controlado con Kinect


Proyecto Final

Imagen6: Figura que muestra la creacin de un proyecto en Visual Studio.

Cuando finalice el proceso de creacin y preparacin de la solucin se abrir el panel de diseo con la ventana principal (MainWindows.xaml) de la aplicacin y el explorador de proyectos a la derecha. Desplegaremos el nodo de MainWindow.xaml para acceder al fichero MainWindow.xaml.cs (el code-behind de la ventana) para empezar a programa en l. Para poder programar con el SDK de Kinect deberemos agregar una referencia a nuestro proyecto. Presionamos con el botn derecho del ratn encima de References elegimos aadir referencia. Nos aparecer un cuadro de dilogo en el que seleccionaremos la referencia al SDK Microsoft.Research.Kinect y aceptamos. Despus de aceptar veremos cmo se ha agregado una nueva referencia a nuestro proyecto que corresponde al SDK.

Imagen7: Se muestran el cuadro de dilogo para aadir las referencias.

Lego NXT controlado con Kinect


Proyecto Final

Ahora ya se puede comenzar a programar el Kinect agregando la referencia: using Microsoft.Research.Kinect.Nui;

La instruccin anterior funcionaba para las versiones anteriores del SDK de Kinect. En las nuevas versiones el nombre de esta librera cambia un poco, slo que no hemos probado nuestra aplicacin en la nueva versin disponible. Paso 4: Una vez que ya se tiene todo lo necesario para comenzar a programar con el Kinect hay que descargar e importar las libreras necesarias para poder establecer la conexin con el Lego NXT. La librera para establecer la conexin y programar el Lego en C# la pueden descargar del siguiente link http://nxtnet.codeplex.com/releases/view/12686.

Imagen8: Vista de la pgina de descarga de las libreras necesarias para trabajar con los Legos NXT desde Visual Studio.

Ah encontraran 2 archivos para descargar, pero el que ms nos interesa es NxtNet Release 1.0.0.0 (Debug) pues en ese archivo se encuentran las libreras y la documentacin, mientras que en el otro viene el cdigo fuente.

Lego NXT controlado con Kinect


Proyecto Final

Una vez que lo tenemos hay que descomprimirlo y comenzar a programar. Paso 5: Ya agregamos la librera del SDK del Kinect, ahora hay que agregar la referencia a la librera de NXT#, para esto presionamos con el botn derecho del ratn encima de References elegimos aadir referencia. Nos aparecer un cuadro de dilogo en el que buscaremos la librera dentro de la carpeta NxtNet Release 1.0.0.0 (Debug)/Library.

Imagen9: Vista que muestra cmo agregar las referencias a la librera NxtNet.

d. Codificacin de la Aplicacin Paso 1: El siguiente paso es establecer la conexin entre el Lego y la PC, lo recomendable es utilizar un Bluetooth genrico 2.0 plug and play. Una vez que esta encendido el Bluetooth del Lego y conectado el Bluetooth en la computadora, hay que emparejarlos dando clic derecho en el icono del Bluetooth que aparece en la barra de tareas. Luego se presiona en agregar un dispositivo y elegimos el Lego Mindstorm, el cual nos pedir una clave que por default es 1234. Ya que tenemos asociado el Lego NXT con la PC hay que verificar cual es el puerto de salida de comunicacin del Lego para establecer la conexin en la programacin. Los pasos que se deben de seguir son dar clic derecho en el icono del Bluetooth, abrir configuracin,

10

Lego NXT controlado con Kinect


Proyecto Final

seleccionar la pestaa puertos COM y ah observaremos el puerto de salida y el puerto entrante, el que nos interesa es el de salida.

Imagen10: Pantallas que muestran cmo verificar qu puerto de salida es usado para asociar el Lego a la computadora, y muestra el cdigo que se debe usar para la conexin.

Como se puede observar, ese fragmento de cdigo es el encargado de establecer la comunicacin con el Lego y se le indica el puerto en el cual se encuentra. Por ultimo Pues ya se puede comenzar a programar la aplicacin, a continuacin se describirn brevemente cada uno de los mtodos utilizados en el programa.
void MainWindow_Loaded(object sender, RoutedEventArgs e)

Crea el objeto Kinect, inicializa los parmetros como la ventana, el panel, etc. E inicializa los streams de video del Kinect.
void kinect_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)

Ese mtodo sirve para obtener el frame desde el que podremos

11

Lego NXT controlado con Kinect


Proyecto Final

extraer el objeto tipo PlanarImage que ser con el que trabajaremos en nuestra aplicacin. El PlanarImage lo utilizaremos para crear un BitmapSource con el mtodo Create pasando a ste como parmetros la anchura y altura de la imagen, el dpi, el formato de pxeles de la imagen (brg32, brga32, blackWhite), la representacin en bytes de la imagen y por ltimo el stride.
void kinect_DepthFrameReady(object sender, ImageFrameReadyEventArgs e)

Este mtodo es el de profundidad, nos sirve para saber que tan lejos encuentra un pxel del sensor (que mas adelante esto nos sirve para obtener la distancia a partir del sensor).
byte[] convertDepthFrame(byte[] depthFrame16)

Este mtodo recibe los datos de profundidad y los va a convertir en datos de imagen RGB para poder mostrarlos.
void kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)

Este mtodo detecta el esqueleto de las personas, que en nuestra aplicacin es utilizado para poder diferenciar los brazos
bool isMakingAFist(ImageSource imgHand)

Este mtodo es el que detecta las palmas de nuestras manos y nos devuelve las coordenadas de la palma de las manos izquierda y derecha.
public void verificarLego()

En este mtodo comprueba la posicin de la palma de nuestras manos y enva la seal al robot para realizar su correspondiente accin. e. Conexin y control del Lego NXT La ventana principal de la aplicacin esta dividida en secciones. En la parte superior se encuentra el titulo de la aplicacin y un panel que nos muestra un mensaje acerca de donde posicionarnos (si ms adelante o ms atrs), las coordenadas de las manos izquierda y derecha tanto en X como en Y. Debajo del panel se encuentra el VideoStream (que es el video en vivo) y debajo, del lado derecho se encuentra el DepthVideo (que es un video RGB). Es la cmara que detecta la profundidad de los objetos. Debajo de ese cuadro de video se encuentra otro pequeo panel en donde nos indica el Status de la conexin y de las instrucciones que se le estn indicando el Lego NXT.

12

Lego NXT controlado con Kinect


Proyecto Final

El programa funciona de la siguiente manera: Se levantan ambas manos. Esto le indica al Lego NXT que debe avanzar Se extiende la mano izquierda (formando aproximadamente un ngulo de 90con el cuerpo), esto le indica al Lego NXT que gire hacia la izquierda. Se levanta la mano derecha (formando aproximadamente un ngulo de 90con el cuerpo), esto le indica al Lego NXT que gire hacia la derecha. Ambas manos se posicionan aproximadamente a media pantalla, levemente extendidas, esto le indica al Lego NXT que retroceda. Ambas manos deben de estar semipegadas al cuerpo y hacia abajo (como una posicin natural), esto le indica al Lego NXT que se detenga.

Imagen11: Vista que muestra la interfaz principal de la aplicacin y muestra las regiones en que se deben posicionar las manos para un correcto funcionamiento de la aplicacin. Ntese que el jugador debe posicionarse en el centro del ngulo de visin de Kinect.

f. Interfaz Grfica La interfaz grfica se dise usando un tipo de archivo especial de Visual Studio. Se trata de un archivo con extensin XAML. Dicho archivo soporta la inclusin de componentes de la interfaz grfica (etiquetas, botones, imgenes, campos de texto, deslizadores, etc.)

13

Lego NXT controlado con Kinect


Proyecto Final

muy similar a los componentes de un formulario HTML. Se dispone de una vista diseo, donde se visualiza la interfaz en modo grfico; y una vista de cdigo, donde se pueden nombrar cada componente de la interfaz y ajustar sus propiedades. Dichos nombres de los componentes son visibles desde el cdigo base de la aplicacin y se puede hacer referencia a ellos y cambiar sus propiedades desde el programa principal (que est escrito en C#). El archivo XAML es un tipo de XML/HTML que Microsoft Visual Studio usa para la definicin de la interfaz grfica. 5. Pruebas Las pruebas de funcionalidad de la aplicacin fueron probadas en las instalaciones del UbiLab. Las pruebas consistieron en ajustar la distancia a la que el jugador debe posicionarse, el puerto COM al que debe estar conectado el Bluetooth, la tolerancia a fallos de nuestra aplicacin, la estabilidad de los hilos manejados, etc. Dichas pruebas nos permitieron detectar errores y resolverlos. 6. Conclusiones El proyecto present las oportunidades de trabajar con tecnologas de punta, pues el dispositivo Kinect apenas tiene un ao en el mercado, y aun ni siquiera el SDK oficial es lo suficientemente robusto en varios aspectos. Se trabaj con un lenguaje de programacin con el cual no se acostumbra realizar los desarrollos, y se reafirmaron los conocimientos y habilidades adquiridas no solo durante este curso, sino dentro de todo el plan de la carrera, permitiendo as pasar de la teora a la aplicacin de los conceptos. Durante la elaboracin del mismo se presentaron retos, que se supieron sortear de manera positiva, para as lograr el objetivo, controlar un Lego mediante un dispositivo Kinect. 7. Propuesta a futuro Tomando como base el presente se propone desarrollar un sistema que permita concientizar a las personas con respecto de la cultura vial. En este trabajo se logr controlar el Lego con el dispositivo

14

Lego NXT controlado con Kinect


Proyecto Final

Kinect y se propone desarrollar una maqueta vial donde se puedan manejar los Legos, que contenga algunos cruceros con algn mtodo que simule los semforos. Por ejemplo, se podra poner algunos Legos en cada esquina e implementar en el Lego un sensor de luz, que sea capaz de leer el color del semforo, asignando un puntaje cuando el conductor realice la accin apropiada, si es verde avanzar o continuar avanzando, y en caso de ser rojo, detenerse. Obviamente el conductor con mayor puntaje ganar. Otra opcin a desarrollar es que con un mismo dispositivo Kinect se puedan manipular dos Legos, ya que el actual solo se puede hacer con uno y de esta manera, poder competir de igual forma en una carrera entre los participantes para probar sus habilidades motrices y de conduccin.

15

Lego NXT controlado con Kinect


Proyecto Final

8. Referencias 1. Reto SDK Kinect. Proporciona la documentacin bsica para programar para el Kinect. Muy til a la hora de crear el Hola Mundo.
http://blogs.msdn.com/b/esmsdn/archive/2011/07/07/sdk-de-kinect-desarrolla-conkinect.aspx

2. Librera NXT.NET para Lego Mindstorms. Permite usar el Lego Mindstorms usando Microsoft Visual Studio y C#.
http://nxtnet.codeplex.com/

3. Hemos decidido liberar el cdigo fuente, pues sabemos que este proyecto tiene buenos campos de aplicacin. De aqu pueden descargar el cdigo fuente de nuestra aplicacin.
http://www.mediafire.com/?4tw0rqf7ifn1a35

16

Das könnte Ihnen auch gefallen