Está en la página 1de 138

INSTITUTO POLITCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERA


MECNICA Y ELCTRICA



BRAZO ROBTICO CONTROLADO MEDIANTE SENSOR
KINECT

TESIS
QUE PARA OBTENER EL TTULO DE
INGENIERO EN COMUNICACIONES Y ELECTRNICA


PRESENTA:
FRANCISCO JAVIER VZQUEZ VZQUEZ



ASESOR:
ING. ARMANDO MANCILLA LEN



MXICO, D.F. 2013
INSTITUTO POLITCNICO NACIONAL
ESCUELASUPERIORDE INGENIERAMECNICAYELECTRICA
UNIDADPROFESIONAL"ADOLFOLPEZMATEOS"
TEMA DE TE S I S
INGENIEROENCOMUNICACIONESYELECTRNICA
QUEPARAOBTENERELTI TULODE
TESISYEXAMENORALINDIVIDUAL
PORLAOPCI NDETITULACIN
DEBERA(N)DESARROLLAR
C. FRANCISCOJAVIERVZQUEZVZQUEZ
"BRAZOROBTICOCONTROLADOMEDIANTESENSORKINECT"
CONSTRUIRELPROTOTIPODEUNBRAZOROBTICO INTEGRADOPORTRESGRADOSDELIBERTADYUNA
PINZADESUJECIN, PROGRAMADOPARAMOVERSEDEACUERDOALOS MOVIMIENTOSHECHOSPOREL
BRAZODELUSUARIODEFORMASIMULTANEA,DICHOS MOVIMIENTOSDELUSUARIOSERNADQUIRIDOSA
TRAVSDELSENSORMICROSOFTKINECT.
:. INTRODUCCIN .
:. ESTADODELARTE.
.:. MARCOTERICO.
:. DESCRIPCINDELHARDWARE.
.:. DISEODELSOFTWARE.
.:. PRUEBASy RESULTADOS.
:.
:.
:.
CONCLUSIONES.
BIBLIOGRAFA .
ANEXOS.
JEFEDELDEPA
INGENIERAENCOM
MXICOD. F.,A10DEJUNIODE2013.

i


ndice general
Introduccin .......................................................................................................................... 1
Definicin del problema ............................................................................................................. 1
Justificacin ............................................................................................................................... 2
Objetivos del proyecto ............................................................................................................... 3
General .................................................................................................................................. 3
Especficos ............................................................................................................................. 3
Captulo 1 Estado del arte ......................................................................................................... 4
1.1 ontrol de un !obot "## con $inect ..................................................................................... %
1.2 #ra&o robtico controlado mediante 'estos a trav(s de $inect ............................................. )
1.3 *so m(dico del $inect .......................................................................................................... )
1.% +erro robot 'ua para cie'os ................................................................................................. ,
Captulo 2 Marco terico ..........................................................................................................
2.1 -istemas en tiempo real ....................................................................................................... .
2.1.1 -ensores ........................................................................................................................ /
2.1.2 "condicionamiento de la se0al ....................................................................................11
2.1.3 onversin anal'ica a di'ital .......................................................................................11
2.1.% +rocesamiento di'ital ...................................................................................................1%
2.1.) lasificacin de los sistemas en tiempo real ..................................................................1,
Captulo 3 Descripci! del "ard#are ....................................................................................... 1
3.1 -ensor de movimiento y obtencin de datos ..................................................................... 11
3.1.1 -ensor de profundidad .................................................................................................21
3.1.2 Deteccin y se'uimiento de usuario .............................................................................2)
3.1.3 2ibreras de libre acceso para la pro'ramacin de $inect ..............................................2/
3.2 Dispositivos de procesamiento di'ital ................................................................................. 33
3.2.1 Descripcin de los dispositivos de procesamiento .........................................................33
3.2.2 omunicacin entre la computadora y microcontrolador +3114%))5 ..........................3)
3.3 -ervomotores .................................................................................................................... 3,

ii

3.3.1 +rincipio de funcionamiento .........................................................................................3.
3.3.2 ontrol de un servomotor ............................................................................................31
3.% 6arjeta de control para los servomotores ........................................................................... 3/
3.%.1 Dia'rama es7uem8tico del circuito impreso para la tarjeta de control .........................3/
Captulo 4 ............................................................................................................................... 43
Dise$o del so%t#are ................................................................................................................ 43
%.1 Descripcin del soft9are .................................................................................................... %3
%.2 3niciali&acin del $inect ..................................................................................................... %,
%.3 -oft9are para ad7uisicin de datos .................................................................................... )5
%.3.1 3ma'en de profundidad ................................................................................................)1
%.3.2 3ma'en en el espacio !G# .............................................................................................)%
%.3.3 3ma'en de puntos infrarrojos........................................................................................),
%.3.% +roceso de calibracin ..................................................................................................),
%.3.) -eleccin de las articulaciones a utili&ar ........................................................................,5
%.3., 8lculo de movimientos del bra&o del usuario ..............................................................,1
%.3.. Deteccin de 'esto de finali&acin .................................................................................3
%.3.1 Deteccin de dedos para apertura y cierre de la pin&a ...................................................)
%.3./ 3nterfa& 'r8fica de usuario ............................................................................................12
%.% +ro'ramacin del microcontrolador +3114%))5 ................................................................ 13
Captulo & 'rue(as ) resultados .............................................................................................. *0
).1 Estructura del bra&o robtico ............................................................................................. /5
).1.1 8lculo del tor7ue para los motores ............................................................................./2
).2 !esultados de la deteccin de dedos .................................................................................. /.
).3 !esultados de movimiento del robot .................................................................................. /1
).% +ruebas del bra&o robtico ................................................................................................. //
Co!clusio!es ........................................................................................................................ 103
Observaciones ........................................................................................................................15%
2imitaciones ............................................................................................................................15%
:ejoras del proyecto y trabajo a futuro ..................................................................................15%
+i(lio,ra%a ........................................................................................................................... 10-

iii

.!e/o 1 ................................................................................................................................ 100
1.1 "n8lisis de costos ..............................................................................................................151
.!e/o 2 ................................................................................................................................ 112
2.1 aractersticas del +3114%))5 ..........................................................................................112
2.2 6erminales +3114%))5 .....................................................................................................113
2.3 !e'istros transmisin *"!6 ...............................................................................................11%
2.% !e'istros 6imer2 ...............................................................................................................11,
.!e/o 3 ................................................................................................................................ 110
3.1 Gr8ficas de descar'a de la batera de 8cido;plomo ............................................................111
3.2 +lantilla del arc<ivo =ml para Open>3 ................................................................................111
.!e/o 4 ................................................................................................................................ 11*
%.1 +lantilla del arc<ivo =ml para pro'ramacin del sensor .....................................................11/
%.2 di'o para obtener ima'en de profundidad ....................................................................125
%.3 di'o para obtener ima'en !G# ......................................................................................121
%.% di'o para obtener ima'en infrarroja ..............................................................................121
%.) di'o para calibracin de usuario ....................................................................................122
%., 8lculo de 8n'ulo entre dos joints .....................................................................................123
%.. 8lculo del 8n'ulo de rotacin ...........................................................................................12%
%.1 di'o deteccin de dedos ................................................................................................12)
%./ di'o de la interrupcin *"!6 del +3114%))5 ................................................................12,
%.15 di'o de la interrupcin 6imer2 del +3114%))5 ............................................................12.
.!e/o & I12,e!es ................................................................................................................ 120
).1 3ma'en de <abitacin no apta para funcionamiento del sensor .........................................121
).2 3m8'enes de los usuarios controlando el bra&o robtico ...................................................121
).2.1 *suario n?mero 2 ).2.2 *suario n?mero 3................................................................ 121
).2.3 *suario n?mero % ).2.% *suario n?mero ) ............................................................... 121
.!e/o - Dia,ra1a de clases de la aplicaci! ............................................................................. 2



iv

NDICE DE FIGURAS
Figura 1.1 Robot ABB moviendo piezas de madera, controlado por Kinect [1]. ................................................ 4
Figura 1. 2 rototipo de perro robot guiando a persona invidente [1]. .............................................................. !
Figura 2.1 "iagrama a blo#ue de un sistema de procesamiento digital. ........................................................... $
Figura 2.2 "iagrama a blo#ues de un sistema en tiempo real. .......................................................................... %
Figura 2. & 'a( )e*al original [&]...................................................................................................................... 12
Figura 2. 4 +ultiprogramaci,n......................................................................................................................... 1-
Figura &. 1 "iagrama de casos de uso para el sistema. .................................................................................... 1$
Figura &.2 rincipales componentes del sensor Kinect [-]. ............................................................................... 1.
Figura &. & /ngulo de movimiento para la base [!].......................................................................................... 20
Figura &. 4 12nea de vista vertical [!]. ............................................................................................................... 20
Figura &. - 12nea de vista 3orizontal [!]........................................................................................................... 20
Figura &.! 4riangulaci,n en visi,n est5reo [.]. ................................................................................................ 21
Figura &.$ 6magen #ue muestra la pro7ecci,n de puntos sobre una super8icie [%]. ........................................ 22
Figura &.. 9ada punto es distinguible de otro dentro del patr,n pro7ectado [%]. .......................................... 22
Figura &.% 6magen de pro8undidad capturada por la c:mara [%]. ................................................................... 2&
Figura &.10 ;< es proporcional para el punto pro7ectado [%]. ....................................................................... 2&
Figura &. 11 roceso de segmentaci,n 7 obtenci,n de articulaciones a partir de im:genes de pro8undidad
[11]. .................................................................................................................................................................. 2-
Figura &. 12 Articulaciones del cuerpo del usuario, de las cuales se puede realizar un seguimiento '<,7,z(. .... 2!
Figura &.1& 6magen #ue muestra cuando el sensor se encuentra sobre una super8icie m,vil, algunos ob=etos
son detectados como usuarios siendo marcados con determinado color [12]. ............................................... 2.
Figura &.1- 6magen 1 ........................................................................................................................................ 2%
Figura &.1! 6magen & ........................................................................................................................................ 2%
Figura &.14 6magen 2 ........................................................................................................................................ 2%
Figura &.1$ Representaci,n abstracta del concepto de >pen?6 dividido en tres capas [14]. .......................... &1
Figura &.1. "iagrama de comunicaci,n entre los dispositivos de procesamiento. .......................................... &-
Figura &. 1% +,dulo serial bluetoot3. .............................................................................................................. &-
Figura &.20 ines para transmisi,n 7 recepci,n de datos a trav5s del modulo serial bluetoot3 [1-]. ............. &!
Figura &.21 @lementos #ue con8orman un servomotor [1!]. ............................................................................ &$
Figura &.22 9ables de un servomotor [1!]. ....................................................................................................... &$
Figura &.2& 9iclos de traba=o para posicionar un servomotor est:ndar [1!]. .................................................. &.
Figura &.24 "iagrama de simulaci,n para movimiento de los servomotores. ................................................. &%
Figura &.2- "iagrama es#uem:tico de tar=eta controladora para los servomotores. ..................................... 40
Figura &. 2$ 9apa superior del circuito impreso. .............................................................................................. 40
Figura &. 2! 9apa in8erior del circuito impreso. ................................................................................................ 40
Figura &.2. 4ar=eta de control para los servomotores. .................................................................................... 41
Figura &.2% Bater2a de acidoAplomo. ................................................................................................................ 41
Figura 4.1 "iagrama de 8lu=o del so8tBare del sistema. ................................................................................... 44
Figura 4.2 "iagrama a blo#ues de las etapas del sistema. ............................................................................. 4-
Figura 4.& "iagrama de clases del so8tBare dise*ado para la computadora. ................................................ -0
Figura 4.4 +apa de bits a utilizar para copiar im:genes entregadas por el sensor. ........................................ -1
Figura 4.- Algoritmo para obtener una imagen de pro8undidad. .................................................................... -2

v

Figura 4. ! 6magen de pro8undidad 7 color del usuario a una distancia de 2metros utilizando el nodo
CDenerador de pro8undidadE. ........................................................................................................................... -&
Figura 4.$ 6magen de pro8undidad 7 color cuando el usuario e<tiende la mano a una distancia menor de 1-
cm. .................................................................................................................................................................... -&
Figura 4. . Algoritmo para obtener imagen a color. ........................................................................................ --
Figura 4. % 6magen RDB obtenida con el nodo Fgenerador de imagenF. ......................................................... --
Figura 4. 10 6magen del patr,n in8rarro=o emitido por el sensor de pro8undidad, obtenida a trav5s del nodo
CDenerador 6n8rarro=oE. .................................................................................................................................... -!
Figura 4.11 Algoritmo para calibraci,n de usuario. ......................................................................................... -.
Figura 4. 12 ose FsiF para llevar a cabo el proceso de calibraci,n [14]. ....................................................... -.
Figura 4.1& Alineaci,n de las articulaciones ad#uiridas con imagen RDB. ...................................................... !0
Figura 4. 14 Representaci,n de un vector 8ormado por un punto o articulaci,n del usuario dentro del plano
del sensor. ......................................................................................................................................................... !2
Figura 4.1- /ngulo 8ormado por dos vectores pro7ectados en las articulaciones del usuario. ........................ !4
Figura 4. 1! /ngulos a calcular para el movimiento del brazo. ........................................................................ !-
Figura 4. 1$ /ngulo 8ormado por dos vectores en un espacio tridimensional. ................................................. !!
Figura 4. 1. 4raslaci,n de un vector 3acia el origen. ...................................................................................... !$
Figura 4. 1% 9:lculo de :ngulo entre dos vectores. .......................................................................................... !$
Figura 4.20 /ngulos #ue 8orma la rotaci,n de un cuerpo en un sistema de coordenadas con respecto a otro
[1$]. .................................................................................................................................................................. !%
Figura 4. 21 )istema de rotaci,n de un cuerpo con re8erencia a un plano. ...................................................... $0
Figura 4. 22 ose 4 #ue es el sistema de re8erencia para la rotaci,n de una articulaci,n [1&]. ...................... $1
Figura 4. 2& )istema de re8erencia para la rotaci,n del 3ombro derec3o........................................................ $1
Figura 4. 24 Algoritmos para obtener el :ngulo de rotaci,n de una articulaci,n. ........................................... $2
Figura 4. 2- "iagrama de 8lu=o para la detecci,n de gestos con >pen?6. ........................................................ $4
Figura 4. 2! "istancia de la cabeza al cuello, similar a la distancia de lo largo de la mano. ........................... $!
Figura 4. 2$ Regi,n de inter5s'amarillo( de la imagen de pro8undidad. .......................................................... $$
Figura 4. 2. i<eles #ue ser:n tomados en cuenta para la 8orma de la imagen. ............................................. $.
Figura 4. 2% Figura 4% Forma conve<a G, 7 8orma no conve<a H [1.]. ............................................................ $%
Figura 4. &0'a( Rect:ngulo #ue cubre el :rea................................................................................................... .0
Figura 4. &1 6nter8az gr:8ica de usuario de la aplicaci,n. ................................................................................. .2
Figura 4.&2 "iagrama de 8lu=o de la programaci,n del 691.F4--0. ............................................................... .-
Figura 4. && "iagrama de 8lu=o de la interrupci,n generada por la recepci,n de datos a trav5s del modulo
IAR4. ................................................................................................................................................................ .!
Figura 4. &4 "iagrama de 8lu=o de la rutina de interrupci,n del temporizador 2'4imer2(. .............................. ..
Figura 4.&- 9iclo de traba=o para movimiento de servomotores en 0 grados 'amarillo( ,4- grados 'azul( ,%0
grados 'morado( 7 1.0 grados'verde(. ............................................................................................................. .%
Figura -. 1 9on8iguraci,n de un brazo rob,tico antropom,r8ico o angular. .................................................... %0
Figura -. 2 )oporte para el servomotor utilizado. ............................................................................................ %1
Figura -. & )ervomotor utilizado. ..................................................................................................................... %1
Figura -. 4 +edidas de los tubos de aluminio utilizados. ................................................................................. %1
Figura -.- +edidas del eslab,n para movimiento angular nJmero 2. ............................................................. %2
Figura -. ! +edidas del eslab,n para movimiento angular nJmero 1. ............................................................ %&
Figura -. $ "ise*o 8inal del prototipo del brazo rob,tico. ................................................................................ %-

vi

Figura -. . +edidas del prototipo 8inal. ........................................................................................................... %-
Figura -.% +:<ima apertura de la pinza. ......................................................................................................... %!
Figura -. 10 /rea de traba=o del brazo rob,tico. .............................................................................................. %!
Figura -.11 Formas conve<as detectadas. ....................................................................................................... %$
Figura -. 12 Resultado de la detecci,n de dedos. ............................................................................................ %$
Figura -. 1& Resultado de la detecci,n de dedos ............................................................................................. %$
Figura -. 14 osici,n con brazo estirado. ......................................................................................................... %.
Figura -. 1- osici,n con brazo 8le<ionado. ..................................................................................................... %.
Figura -. 1! osici,n con brazo semi A8le<ionado. ............................................................................................ %%
Figura -. 1$ +odelo de pieza cil2ndrica para pruebas del brazo rob,tico. ....................................................... %%
Figura -.1. "istribuci,n de las piezas sobre mesa de madera. ...................................................................... 100
Figura -. 1% Dr:8ica del tiempo en completar la prueba. ............................................................................... 101
Figura A. 1 Kabitaci,n con condiciones no aptas para el 8uncionamiento del sensor. ................................... 12.
Figura A. 2 Isuario & '1.!2metros(................................................................................................................. 12.
Figura A.& Isuario 2 '1.-1metros( ................................................................................................................. 12.
Figura A. 4 Isuario - '1.-0metros(................................................................................................................. 12.
Figura A. - Isuario 4 '1.!0metros(................................................................................................................. 12.


NDICE DE TABLAS
4abla &. 1 9aracter2sticas del sensor. ............................................................................................................... 1%
4abla &. 2 "atos de pro8undidad en espacio de color RDBA. ............................................................................ 24
4abla &. & "atos de pro8undidad en espacio de color HIL. .............................................................................. 24
4abla &. 4 9omparaci,n de librer2as de libre acceso. ....................................................................................... &0
4abla &. - 9aracter2sticas t5cnicas de la bater2a acidoAplomo. ........................................................................ 41
4abla 4. 1Lenta=as del so8tBare de +icroso8t para Kinect 7 >pen?6 ............................................................... 4$
4abla 4. 2 "esventa=as del so8tBare de +icroso8t para Kinect 7 >pen?6. ........................................................ 4$
4abla 4. & untos utilizados del usuario. .......................................................................................................... !0
4abla 4. 4 Lectores utilizados para el c:lculo de los :ngulos. .......................................................................... !.
4abla 4. - rioridades del sistema en tiempo real. ........................................................................................... .4
4abla -. 1 +edidas 7 pesos del eslab,n para movimiento angular nJmero 2. ................................................ %2
4abla -. 2 +edidas 7 pesos del eslab,n para movimiento angular nJmero 1. ................................................ %&
4abla -. & "ise*o 8inal del prototipo del brazo rob,tico. ..................................... Error! Marcador no definido.
4abla -. 4 Resultados de las pruebas realizadas con el brazo rob,tico. ......................................................... 101
4abla ane<o 1 9osto total del pro7ecto. ........................................................................................................ 111



vii



Prlogo

Existen procesos industriales o laboratorios de investigacin qumica
donde al realizarse determinados trabajos, el personal o cientfico,
transporta y mueve sustancias u objetos peligrosos con las manos
exponindolo de forma peligrosa al entrar en contacto directo.
El objetivo de esta tesis consiste en construir el prototipo de un brazo
robtico que realice movimientos similares a los realizados por el
brazo de un usuario, utilizando los datos capturados por el sensor
Microsoft Kinect.
Este prototipo pretende asistir en el trabajo en donde comnmente el
usuario pone en riesgo las manos al entrar en contacto con el objeto o
sustancia. Tambin puede contribuir en asistir operaciones quirrgicas
o procesos industriales de control. El proyecto es desarrollado usando
un dispositivo de ltima tecnologa como lo es Kinect.

1

Introduccin

Los brazos robticos (tambin llamados brazos manipuladores) son comnmente
utilizados dentro de la industria en diferentes actividades como la transportacin
de piezas, ensamblado o diseo de componentes electrnicos. En el campo de la
medicina tambin se ha trabajado con brazos robticos, facilitando el trabajo a los
mdicos en operaciones quirrgicas. Los brazos manipuladores pueden ser
controlados mediante interfaces de usuario (palancas, botones, interfaces grficas,
etc.) o funcionar de forma autnoma. En el caso de los brazos autnomos se
requiere conocer las coordenadas dentro de un plano, del objeto que se quiera
transportar para implementar algn algoritmo que realice dicha labor. Para los
robots que se controlan mediante interfaces de usuario se requiere un tiempo de
respuesta favorable y precisin del robot para realizar una labor como la
transportacin de piezas.

Definicin del problema

Existen procesos industriales o laboratorios de investigacin donde se requiere
utilizar brazos manipuladores que sean controlados por el usuario mediante
interfaces que puedan ser utilizadas por cualquier persona, con un tiempo de
respuesta favorable en el movimiento del brazo y buena precisin, esto debido a
que existe la necesidad de sustituir el trabajo de transportacin de objetos que
comnmente es realizada por el personal que utiliza las manos para realizar la
mencionada tarea. Debido a lo anterior surge la necesidad de innovar las
interfaces de usuario que comnmente se utilizan para brazos manipuladores y se
requiere facilitar la forma en la que se controlan dichos robots mejorando el tiempo
de respuesta del robot.




2

Justificacin

La presente tesis propone la construccin y programacin del prototipo de un
brazo robtico que sea controlado mediante el movimiento del brazo del usuario a
travs de una interfaz de usuario basada en el dispositivo Microsoft Kinect, el
brazo robtico debe imitar en tiempo real el movimiento del brazo del usuario,
mejorando el tiempo de respuesta, precisin y facilidad para controlar los brazos
manipuladores. El brazo robtico es construido para ayudar en tareas que
sustituyan el trabajo que comnmente es realizado por el contacto directo de la
mano del usuario y el objeto, en una determinada labor, evitando as accidentes
que son causados por dicha actividad. El brazo robtico tambin ayudar a
realizar trabajos que tal vez no sean peligrosos pero dependen de una
herramienta que realice movimientos similares a los ejecutados por el brazo del
cuerpo humano, siendo el brazo del usuario el control para colocar el brazo
robtico al punto deseado, adems se pretende innovar el control de brazos
manipuladores utilizando un dispositivo de ltima tecnologa como Kinect,
remplazando dispositivos que requieren mas recursos o son difciles de trabajar en
forma conjunta.









3

Objetivos del proyecto
General

Construir el prototipo de un brazo robtico integrado por tres grados de libertad y
una pinza de sujecin, programado para moverse de acuerdo a los movimientos
hechos por el brazo del usuario de forma simultanea, dichos movimientos del
usuario sern adquiridos a travs del sensor Microsoft Kinect .


Especficos

El diseo, construccin y programacin del brazo robtico en conjunto, es
considerado un sistema en tiempo real, por lo que el movimiento del brazo debe
realizarse en un tiempo que sea visualmente paralelo al tiempo en el que se
mueve el brazo perteneciente al usuario. Los objetivos especficos establecidos
para realizar el trabajo se definen a continuacin:
Adquisicin de datos de profundidad y de usuario por medio del sensor
Kinect, utilizados para procesar y capturar cada movimiento que realiza el
usuario con el brazo derecho.
Desarrollar una interfaz grfica de usuario que permita visualizar la
ejecucin del brazo del usuario, desplegando los grados desplazados por
cada articulacin.
Construccin del prototipo del brazo robtico utilizando servomotores para
el movimiento, permitiendo tres grados de libertad.
Establecimiento de comunicacin del sistema a travs del protocolo RS232
utilizado para el envo de datos desde la computadora haca un
microcontrolador.
Programacin del microcontrolador PIC18F4550 dedicado a recibir los
datos de la computadora, datos que contienen los grados a desplazarse de
cada motor y poder as generar el movimiento de cada uno de los motores,
de forma simultanea, bajo el concepto de sistema multitarea.

%

Captulo 1 Estado
del arte
Desde que fueron liberadas las diferentes libreras de programacin para el sensor
Kinect en una computadora personal, el sensor ha sido utilizado en robots de uso
medico e industrial [1]. Los proyectos se han desarrollado utilizando desde los ms
simples mecanismos de robtica hasta robots con mayor grado de complejidad en
cuanto a mecnica y programacin.
11 Control de un !obot "## con $inect
Estudiantes de Ingeniera Robtica que en el verano de 2011, en Suecia, usaron
el software de seguimiento de esqueleto del Kinect, para controlar un brazo
robtico ABB [1]. En la figura 1.1 se puede ver como manejan el robot con el
Kinect, en donde apilan una serie de bloques de madera para despus escribir
utilizando el robot.








4i'ura 1.1 !obot "## moviendo pie&as de madera@ controlado por $inect A1B.

)

1% #ra&o robtico controlado mediante
gestos a trav's de $inect

En la Universidad Tsukuba (Ibaraki, Kanto, Japn), fue presentado el Sistema de
Brazo Robot Controlado por Gestos, que tiene la capacidad de comprender los
movimientos tanto del brazo en general, como de la mano y sus dedos. El sistema
necesita de dos cmaras, encargadas de transmitir en tiempo real informacin
sobre el movimiento y la forma de la mano, para despus ser duplicados en la
rplica robtica. Un detalle el cual ya parece haber sido resuelto por sus
desarrolladores es que no todas las manos humanas son iguales, por esta razn
cargaron al sistema con una gran base de datos repleta de manos, de forma que
slo es necesario encontrar una mano similar en forma y tamao para que el
brazo robot pueda operar sin inconvenientes [1].

1( )so m'dico del $inect

Estudiantes de la Universidad de Washinton (EE.UU.) han querido ir ms all. Han
adaptado la tecnologa para realizar cirugas robticas asistidas en la vida real.
Este mtodo implica el uso de Kinect para ayudar a los cirujanos a utilizar las
herramientas cuando realicen una ciruga. En la actualidad, los cirujanos suelen
utilizar la robtica para intervenciones quirrgicas mnimamente invasivas. El
principal problema, con los mtodos actuales, es que los cirujanos no tienen
ninguna forma de palpar lo que estn haciendo. Si se mueve un instrumento
quirrgico en algo slido, el instrumento se detendr pero el mando de control
sigue en movimiento. El equipo de ingeniera elctrica de la universidad ha
resuelto este problema gracias al cdigo abierto de Kinect para asignar y
reaccionar a los entornos en tres dimensiones y enviar la informacin sobre el
entorno al usuario. Al usar Kinect se establecen "espacios electrnicos" que
restringen el movimiento de la herramienta quirrgica, es decir, si la herramienta
toca un hueso se deja de mover. En cambio, si el instrumento se mueve a lo largo
de un hueso, el joystick sigue el mismo camino. Incluso es posible definir las
zonas de acceso restringidas para proteger los rganos vitales. El equipo espera
que esta ciruga robtica sea fiable y prctica a largo plazo, permitiendo as a los
mdicos llevar a cabo fcilmente en las principales ciudades cirugas en pacientes

,

en pueblos pequeos y aislados. Chizeck asegura que esta idea se puede
extrapolar en catstrofes o guerras. En un hospital de Canad han mostrado un
nuevo ejemplo del uso de Kinect para mantener la sala de operaciones como un
entorno esterilizado. La idea es que se realicen determinadas tareas sin salir del
quirfano, como puede ser la bsqueda de informacin sobre el estado de un
paciente en un ordenador. La realizacin de un escner por rayos X, ya que podra
manejar de forma remota el ordenador que controla el aparato. Adems de eso, se
evitara tener que lavarse y desinfectarse, como sucede ahora cada vez que utiliza
esa mquina [1].
1* +erro robot gua para ciegos

Un inteligente diseo de perro-robot le saca bastante provecho a la tecnologa del
Kinect, ya que su capacidad de reconocer el espacio y las distancias le convierte
en un preciso gua de ciegos. El uso es bastante sencillo, el usuario toma el
mango del perro y lo presiona, entonces el robot avanza mientras da indicaciones
de voz y describe el entorno para situar mejor y ayudar a su dueo. Tambin
sube y baja escaleras si es necesario, por lo que es bastante verstil. Est
desarrollado por la Universidad de Electro-comunicaciones (Tokio) [1]. El plan es
seguir mejorando el perro-robot, incluir comandos de voz y agregarle GPS para
mejorar la navegacin.



4i'ura 1. 2 +rototipo de perro robot 'uiando a persona invidente A1B.

.

Captulo % ,arco
terico
%1 -istemas en tiempo real

Es un sistema electrnico de procesamiento que interacta con el medio, controla
procesos, y entrega resultados dentro de tiempos establecidos de manera
confiable y segura.
El principal objetivo de un sistema en tiempo real es controlar o realizar varios
procesos de forma simultnea, lo que se conoce como multitarea. Estos procesos
o tareas duran un tiempo determinado, dependiendo la aplicacin o la
determinacin del usuario, y son atendidos por un mismo procesador o CPU
(unidad central de procesamiento). Al tiempo que dedica el procesador a cada
tarea se le conoce como prioridad, esta se define dependiendo la aplicacin o el
uso que tenga [2].
La figura 2.1 muestra la representacin de forma general de un sistema de
procesamiento digital, en el cual intervienen mnimo dos variables y se obtiene una
respuesta en un tiempo acorde a la necesidad del usuario.


4i'ura 2.1 Dia'rama a blo7ue de un sistema de procesamiento di'ital.



1

En el primer bloque se representa todas las variables que interactan con el
sistema, en el caso de un sistema electrnico, estas variables pueden ser
sensores debido a que estos interactan con la naturaleza o el medio, y adems
dependen del tiempo. El segundo bloque representa el proceso que se encarga
de controlar todas las variables del sistema y realizar determinados procesos. El
ltimo bloque representa la respuesta del sistema, la cual debe ser entregada por
el sistema en un tiempo que no afecte algn proceso o sea catastrfico para el
sistema.
En un sistema en tiempo real intervienen los siguientes factores para el tiempo de
respuesta:
Fsicos
-Capacitancias, inductancias, resistencias de los circuitos, etc
-Velocidad de propagacin de los medios de comunicacin digital
-Velocidad de procesamiento
-Etapas del sistema
Software
-Algoritmo
-Nivel de lenguaje(c++,asm,etc.)
-Compilador
Para los tipos de comunicacin digital en un sistema en tiempo real, los ms
comunes son los siguientes:
Serie
-USB
-RS232
-RS485
-Ethernet
Paralelo
-ICE
-PCI
-DB25
Inalmbricos
-Bluetooth
-Wifi


/

Para entregar resultados al usuario, los sistemas en tiempo real realizan diferentes
procesos que determinan el tiempo de respuesta. En la figura 2.2 se muestra el
diagrama a bloques de los procesos que realiza un sistema en tiempo real para
entregar una respuesta o resultado, cada bloque representa un proceso que tiene
determinada duracin en el sistema. El tiempo total de respuesta del sistema esta
dado por la suma de los tiempos correspondientes a cada etapa, como se
determina en la ecuacin 2.1.

4i'ura 2.2 Dia'rama a blo7ues de un sistema en tiempo real.
Ct6

D ti
5
=1
EEcuacin 2.1F
En dondeG
Ct6 D tiempo total de respuesta del sistema
Ci D tiempo de etapa de procesamiento n?mero i
%11 -ensores
Una parte fundamental en todo sistema de adquisicin de datos es el elemento
encargado de percibir la magnitud a medir. Los sensores son dispositivos capaces
de convertir una magnitud fsica como puede ser temperatura, presin, etc., en
una diferencia de potencial o una variacin de intensidad de corriente, es decir,
realizan una conversin de energas y suministran informacin sobre el estado y
tamao de la magnitud. Los sensores informan de su entorno y adems esa
informacin es cuantificable, es decir, medible por algn instrumento.



15

La posibilidad de que un sensor perciba una determinada magnitud depende de:
Que exista una propiedad en algn material que cambie en funcin de
esa magnitud
Preferiblemente esa funcin debe ser lineal para el rango en el que
estemos interesados, por ejemplo la relacin que se da en los conductores
entre su resistencia al paso de la corriente elctrica y la temperatura, es
decir a mayor resistencia, mayor temperatura.

En otras ocasiones existe una relacin entre una magnitud y un
fenmeno fsico
Si la relacin es predecible y estable, el fenmeno se puede usar como
base para la determinacin de la magnitud. En muchas ocasiones la
dificultad est en conseguir que la propiedad o fenmeno est en funcin
nicamente de la magnitud que queremos evaluar. Suele ocurrir que la
medida es funcin de varios factores, de tal manera que cualquier variacin
en alguno de ellos altera el resultado final.

En la actualidad, la mayor parte de los sensores generan una salida en voltaje o
corriente, o bien modifican una propiedad que puede ser evaluada de forma
elctrica. De esta manera, y con el debido acondicionamiento, la seal de salida
puede ser tratada por un equipo digital de adquisicin de datos.
Las seales del mundo real son, en general, analgicas y varan de manera
continua en el tiempo, para que una computadora sea capaz de procesarla se
debe convertir a datos digitales. Cada uno de estos sensores tiene unas
caractersticas propias y genera una tensin o intensidad determinada, por lo que
estas seales tienen que ser adaptadas para ser tratadas en una tarjeta de
adquisicin de datos.

En el tratamiento de imagen y sonido, los sensores ms utilizados son:

Micrfono: Capta la informacin sonora que se propaga por el aire y la
convierte a una seal elctrica.
Cmara: Capta la informacin visual y convierte la informacin en datos
digitales.




11

%1% "condicionamiento de la se.al
El objetivo del acondicionador de seal es generar a partir de lo obtenido por los
sensores, una seal que sea aceptable por las tarjetas de adquisicin de datos.
Las funciones principales que va a tener que realizar el acondicionador de seal
son las siguientes:

Amplificacin: La seal proporcionada por los sensores suele ser de un
valor muy pequeo, por lo que debe ser amplificada con el fin de que pueda
ser detectada correctamente por la tarjeta de adquisicin de datos. La
amplificacin debe ser tal que las variaciones de la seal recorran todo el
margen de la tarjeta de adquisicin de datos. La amplificacin de las
seales, en su origen, reduce el ruido que les puede afectar en su
transmisin hasta la computadora.
Filtrado: Con el filtrado se pretende eliminar ruidos de frecuencia que
pueden hacer perder exactitud al sistema de adquisicin de datos. Lo ideal
es transportar la seal del sensor lo ms limpia posible a la tarjeta de
adquisicin.
Excitacin: Hay algunos sensores que necesitan de una excitacin en
corriente o voltaje, para producir la variacin proporcional a la magnitud a
medir.
Linealizacin: No todos los sensores tienen una variacin lineal con
respecto a las variaciones de la magnitud que se miden; a veces es
necesario convertir la respuesta del sensor en lineal.

%1( Conversin analgica a digital
Un conversor analgico-digital, es un dispositivo electrnico capaz de convertir
una entrada analgica de voltaje en un valor binario, Se utiliza en equipos
electrnicos como computadoras, grabadores de sonido y de vdeo. Como
caractersticas ms relevantes de un convertidor analgico a digital estn:

Nmero de canales analgicos: Nos indica la cantidad de magnitudes
distintas que podemos adquirir con el mismo convertidor analgico-digital.
Generalmente disponen de un nico ADC y los diferentes canales se
generan por medio de un multiplexor analgico.
Velocidad de muestreo: Cuanto mayor sea la velocidad de muestreo
mejor representacin obtendremos de la seal analgica, en cualquier caso
la velocidad de muestreo debe ser siempre mayor que el doble de la
frecuencia de la seal que queremos muestrear, segn el Teorema de
Nyquist. El Teorema de Nyquist indica que la frecuencia de muestreo
mnima que tenemos que utilizar debe ser mayor que (2 fmax), siendo

12

fmax es la frecuencia mxima de la seal. Si utilizamos esa frecuencia de
muestreo, podremos reproducir posteriormente la seal a partir de las
muestras tomadas.














Consideremos una seal con una frecuencia de 100 Hz. El Teorema de
Nyquist indica que debemos utilizar una frecuencia de muestreo mayor que
200 Hz. Si utilizramos una frecuencia ms alta que la que nos dice Nyquist
obtendramos una representacin ms exacta de la seal de entrada. Sin
embargo, cuanta ms alta es la frecuencia de muestreo ms alto es el
nmero de muestras por segundo que se debern procesar, por lo que los
procesadores de seal debern ser ms potentes o realizar menos
procesamiento en cada muestra.
(Ecuacin 2.2)

Si utilizamos una frecuencia inferior aparece un fenmeno llamado
Aliasing. Esto significa que cuando intentamos reconstruir la seal aparece
una seal de frecuencia ms baja. Este fenmeno se presenta por el hecho
de que las muestras se pueden unir para crear una forma de onda de
frecuencia ms baja que es totalmente diferente de la onda original.
La velocidad de muestreo depende de los canales que queramos tener
activos. Las especificaciones de los convertidores analgico-digital suelen
indicar la velocidad de muestreo del ADC, a medida que aumenta el
nmero de canales que este debe atender disminuir el nmero de
muestras por segundo que podemos obtener en cada canal.

Resolucin: Viene dada por el nmero de bits del ADC que se utilizan para
representar cada muestra, a mayor nmero de bits del ADC la tarjeta ser
capaz de detectar variaciones menores en la seal. El nmero de distintos
niveles en que se divide la seal a convertir viene dada por 2n, siendo n la
EaF EbF
4i'ura 2. 3 EaF -e0al ori'inal A3B.
EbF :uestreo de se0al utili&ando teorema de >y7uist A3B.

13

longitud de palabra del conversor. Por ejemplo un conversor de 8 bits
tendr 256 niveles distintos, suponiendo un rango de entrada de 10V
proporcionara una resolucin de:

Resolucin =
+vc]-(.vc])
2
n-1
(Ecuacin 2.3)

Rango de entrada: Indica los mrgenes entre los que debe estar la seal
de entrada para que pueda ser convertida. Las tarjetas de adquisicin de
datos suelen dar varias posibilidades que se pueden seleccionar por
hardware o por software.

Estas 4 caractersticas vienen a determinar la capacidad y la precisin de la tarjeta
de adquisicin:

A mayor nmero de canales mayor capacidad.
A mayor velocidad de muestreo mayor capacidad
A mayor resolucin mayor precisin
A menor rango de entrada mayor precisin, ya que se con los mismos bits
de resolucin se tendr que representar un menor rango.

El tiempo de conversin es el tiempo que tarda un ADC en muestrear,
sintetizar y entregar en el bus de datos el resultado de la conversin. El tempo
de conversin delimita la frecuencia mxima de muestreo:

6muestreo H 6conversin EEcuacin 2.%F

Existen diversos tipos de ADC disponibles actualmente, la mayora de los cuales
tambin contienen el circuito para digitalizar seales analgicas. Los cuatro tipos
ms populares son:

ADC de aproximacin sucesiva: Este tipo de ADC compara la forma de
onda de la entrada de informacin con la salida de un DAC dentro del
dispositivo. Repetidamente dividen el voltaje de entrada por la mitad
produciendo una salida de n bits en n ciclos de su reloj. Los ADC de
aproximacin sucesiva son generalmente precisos y rpidos, y
relativamente baratos de producir. Sin embargo, pueden ser lentos al
responder a cambios repentinos en la seal de entrada y son sensibles a
voltajes picos en la propia seal de entrada.

Tconversin= (n+1) (Tck) (Ecuacin 2.5)

Tck= periodo de reloj utilizado en el ADC


1%

ADC de rampa: Los ADC de rampa utilizan un capacitor conectado a un
voltaje de referencia. Este se carga durante un tiempo determinado a travs
del voltaje de entrada y despus se descarga a travs del voltaje de
referencia. El tiempo para descargarse se alacena utilizando un contador
digital, y es proporcional al voltaje de entrada. Esto produce resultados muy
precisos, pero es muy lento y generalmente costoso.

Tconversin= (2
n
) (Tck) (Ecuacin 2.6)
Tck= periodo de reloj utilizado en el ADC

ADC Flash: Este tipo de ADC compara el voltaje de entrada con un
conjunto de voltajes de referencia creados por una escala de resistencias
de igual valor. Se utilizan comparadores entre cada nivel de voltaje y la
salida digital decodificada. Este proceso es muy rpido pero requiere 2
n

resistencias exactas para un ADC de n bits. Esto hace el ADC flash caro, y
comercialmente no prctico para utilizar una exactitud de 8 bits. El tiempo
de respuesta esta dado por el hardware (normalmente picosegundos a
nanosegundos).
%1* +rocesamiento digital

En esta etapa se implementa algn tipo de proceso o algoritmo computacional que
modifique la seal recibida. Una de las ventajas de utilizar sistemas
computacionales es que la mayor parte del procesamiento de la seal reside en la
programacin, permitiendo realizar modificaciones de forma ms rpida y
econmica sobre el algoritmo, ya que si se requiere realizar cambios, estos se
ejecutan dentro del programa o algoritmo de procesamiento y no en el hardware,
ahorrando recursos y tiempo que podran ser consumidos en la modificacin de
las partes tangibles del sistema.
Ventajas de utilizar sistemas de procesamiento digital:
-Fciles y confiables para el procesamiento digital
-Mayor inmunidad al ruido
-Solo se requiere modificar el software y no el hardware




1)

Multiprogramacin
Es la ejecucin de dos o ms procesos de manera aparentemente simultnea
utilizando un CPU y sus perifricos. En la figura 2.4 se muestra un diagrama en
donde se muestra como los datos de entrada deben ser procesados y entregados
de forma simultnea utilizando un solo CPU.






Sistema operativo
Se encarga de administrar los recursos de cada proceso, tiempo de ejecucin de
cada proceso, espacio de memoria, etc. Tambin es la capa que permite al
usuario ejecutar aplicaciones sin necesidad de conocer y programar la capa
fsica(hardware), un sistema operativo en tiempo real es comnmente utilizado en
dispositivos de procesamiento como microcontroladores, DSP, FPGA,
normalmente se denota con las siglas RTOS(sistema operativo en tiempo real).








4i'ura 2. % :ultipro'ramacin

1,

%1/ Clasificacin de los sistemas en tiempo real

Los sistemas en tiempo real se pueden dividir segn los errores que se puedan
presentar:
Crticos: si no se cumplen con los tiempos establecidos se destruye el
sistema y/o causa una catstrofe al medio o al usuario.
No crticos: es aquel en el que se puede tolerar que en algunas ocasiones
los resultados no se obtengan en los tiempos establecidos, ya que no se
degrada el servicio o el proceso que esta controlando el sistema, en este
tipo se especifica una tasa de probabilidad que permite tolerar las fallas en
los tiempos de respuesta.
Inflexibles: no se cumplen con tiempos de respuesta, no ocurre dao al
sistema, pero la aplicacin queda inservible.


El sistema desarrollado en la presente tesis es clasificado dentro de la categora
de sistemas en tiempo real no crticos, debido a que el sistema puede tolerar que
los resultados no se obtengan en los tiempos establecidos, en este caso las
imgenes que entrega el sensor son enviadas a la computadora 30 veces en un
segundo, por lo cual si alguna imagen no es procesada por la computadora, no
afecta sobre el sistema debido a que el sensor genera las imgenes con un tiempo
superior a los movimientos del usuario, los cuales son capturados a travs del
Kinect.







1.

Captulo (
Descripcin del
0ard1are
El proyecto tiene como base al sensor Microsof Kinect, el cual enva datos que se
actualizan constantemente, los cuales determinan los movimientos del brazo
robtico cuya estructura cuenta con tres grados de libertad. Cada grado est
limitado por el movimiento mximo de un servomotor (0-180 grados) y al ngulo de
los movimientos del brazo del usuario, mismos que se encuentran normalmente
dentro del mismo rango.
El diagrama de casos de uso que se muestra en la figura 3.1 representa como
debe el usuario interactuar con el sistema.
4i'ura 3. 1 Dia'rama de casos de uso para el sistema.

11

La figura 3.1 muestra el diagrama de casos de uso para el sistema del brazo
robtico, el usuario debe interactuar con el sistema en todo momento, realizando
alguna de las siguientes tareas:
Pose de calibracin: es necesaria para poder iniciar el movimiento del brazo
y poder controlarlo.
Movimiento del brazo derecho: es el control del brazo robtico, el cual
realiza los movimientos en tiempo real que sean realizados por el usuario.
Apertura o cierre de la mano izquierda: movimiento establecido para tomar
(cerrar la mano), o dejar objetos (abrir la mano) utilizando la pinza del brazo
robtico.
Gesto de finalizacin: gesto predeterminado para finalizar el movimiento del
brazo.

(1 -ensor de movimiento y obtencin de
datos
Kinect es un dispositivo electrnico que se constituye de dos sensores: una
cmara infrarroja utilizada para la deteccin de profundidad, y una cmara RGB
para imgenes a color [4]. La resolucin para las cmaras es de 640*480 pixeles
con 11bits de resolucin y 640*480 pixeles con 32 bits de resolucin para la
cmara de profundidad y de color respectivamente. La velocidad de envo es de
30 tramas por segundo para ambas cmaras. La cmara de color RGB soporta
alta resolucin 1280*1024 pero la velocidad de envo disminuye a 15 tramas por
segundo. En adicin, el sensor Kinect contiene un arreglo de cuatro micrfonos,
adems de una base motorizada que puede rotar el sensor hacia arriba o haca
abajo. En la figura 3.2 se muestra de manera general los componentes que
conforman al Kinect, indicando el nombre de cada uno de ellos.





1.;-ensor de profundidad
2.;8mara !G#
3.;"rre'lo de micrfonos
%.;#ase
4i'ura 3.2 +rincipales componentes del sensor $inect A)B.

1/

1. Sensor de profundidad que consiste en un proyector lser infrarrojo y un
sensor monocromtico, ambos trabajan en conjunto para obtener imgenes
de profundidad en un espacio 3D bajo condiciones donde no exista luz
ambiental.
2. Cmara RGB con 32 bits de resolucin de 640*480 pixeles a 30 tramas por
segundo. Esta cmara obtiene imgenes a color en dos dimensiones.
3. Arreglo de cuatro micrfonos localizados en la parte baja del sensor, de
forma horizontal. Estos micrfonos son utilizados para el reconocimiento de
voz, ya que cuentan con herramientas de gran ayuda para el tratamiento de
audio como lo son: localizacin de la fuente acstica, supresin de
ambiente de ruido, y cancelacin del eco. La trama de datos para audio en
los cuatro micrfonos es de 16 bits a 16khz.
4. Base motorizada que sirve para establecer la lnea de vista del sensor, el
rango de movimiento de la base motorizada es de 27 grados de forma
vertical.
El sensor entrega los siguientes datos utilizando los componentes:
Sensor de profundidad: mapas de profundidad que permiten obtener la
distancia en milmetros de objetos o personas con referencia al sensor.
Tambin permite detectar a usuarios (mximo 6), dentro del rango del
alcance del sensor, y obtener las coordenadas dentro del plano 3D
comprendido por el rea que cubre del sensor, de las coordenadas (x,y,z)
de diferentes puntos o articulaciones del cuerpo humano.
Cmara RGB: permite capturar imgenes a color en un espacio 2D con
resolucin de 640*480 pixeles.
Arreglo de micrfonos: capturan audio que se encuentre dentro del
entorno del sensor, permitiendo anular ecos u otro tipo de ruido que afecte
el reconocimiento de voz.
La tabla 3.1 muestra las caractersticas para el correcto funcionamiento del
sensor.
6abla 3. 1 aractersticas del sensor.
Lnea de vista horizontal 57
Lnea de vista vertical 43
Rango de movimiento de la base
motorizada
27
Rango del sensor de profundidad 1.2m a 3.5m


25

Las caractersticas mencionadas en la tabla 3.1 se refieren a:
Lnea de vista horizontal: ngulo mximo de proyeccin que forman los
vrtices de la superficie que abarca el sensor de forma horizontal.
Lnea de vista vertical: ngulo mximo de proyeccin que forman los
vrtices de la superficie que abarca el sensor de forma vertical.
Rango de la base motorizada: es el rango que puede rotar el motor de la
base de forma vertical.
Rango del sensor de profundidad: la distancia que tiene que mantener el
usuario con respecto al sensor, para que el sensor pueda entregar datos
correctos.
En la figura 3.5 se muestra la lnea de vista del sensor de forma horizontal y
vertical en la figura 3.4, tambin se observa la distancia mnima y mxima que
cubre el sensor, estableciendo as el rea que deber ser ocupada por el usuario.







4i'ura 3. % 2nea de vista vertical
A,B.
4i'ura 3. 3 In'ulo de movimiento
para la base A,B.
4i'ura 3. ) 2nea de vista <ori&ontal
A,B.

21

(11 -ensor de profundidad
Basa su funcionamiento en una tcnica llamada luz estructurada, la cual consiste
en la proyeccin de un patrn de puntos infrarrojos sobre una superficie, al hacer
corresponder la imagen captada con el patrn original, es posible triangular la
posicin de cada pxel y determinar su profundidad con respecto al plano
perpendicular a la cmara [7] .

E1isi! del patr! de pu!tos i!%rarro3os
Cuando una superficie es iluminada por una onda de luz, cada punto acta como
una fuente de onda esfrica. La luz en cualquier punto en el campo de luz
dispersa, se compone de ondas que han sido emitidas desde cada punto de la
superficie iluminada. Si la superficie es suficiente rugosa para crear longitud de
trayectoria superior a la longitud de onda del punto, se da lugar a cambios de fase
mayor que la amplitud, y por lo tanto la intensidad.

La tecnologa usada por Kinect para adquirir la imagen de profundidad es llamada
LightCoding, la cual utiliza un emisor infrarrojo para la proyeccin del patrn de
puntos, los cuales son invisibles para el ojo humano. Cada punto del patrn esta
hecho para que sea diferente a los dems, de esta forma, la cmara infrarroja lee
la luz codificada y ejecuta un sofisticado algoritmo de procesamiento paralelo para
descifrar el cdigo de la luz y poder generar una imagen de profundidad. El
mtodo es sensible en luz ambiental [7].

Triangulacin
En visin por computadora, la triangulacin se refiere a el proceso para determinar
un la distancia de un punto en un espacio 3D a partir de la visin de dos o mas
imgenes. La figura 3.6 muestra la geometra epipolar de un par de cmaras de
visin estreo.










4i'ura 3., 6rian'ulacin en visin est(reo A1B.

22

Un punto P es proyectado en un espacio tridimensional, que pasa por el punto
focal de cada cmara, lo que resulta en dos puntos correspondientes de imagen,
si estos puntos son conocidos y la geometra de la imagen es conocida, la
proyeccin de esas dos lneas puede ser determinada. Usando algebra lineal se
puede determinar la distancia de ese punto. Esta tcnica es empleada por el
sensor Kinect para calcular la profundidad de los objetos y obtener una
reconstruccin 3D, la triangulacin es realizada por cada punto entre una imagen
virtual y el patrn de observacin [7].
El proceso de triangulacin para obtener la profundidad de los objetos es
mostrado a continuacin:
1.- Patrones de luz son proyectados en la escena







2.- Los patrones son distinguibles uno de otro










4i'ura 3.. 3ma'en 7ue muestra la proyeccin de puntos sobre una superficie A/B.
4i'ura 3.1 ada punto es distin'uible de otro dentro del patrn proyectado A/B.

23

3.-Una imagen de profundidad es capturada para usarse como referencia










4.- x es proporcional para la profundidad del objeto













4i'ura 3./ 3ma'en de profundidad capturada por la c8mara A/B.
4i'ura 3.15 C= es proporcional para el punto proyectado A/B.

2%

I12,e!es de pro%u!didad

El sensor Kinect entrega imgenes de profundidad a una velocidad de 30 tramas
por segundo, con una resolucin de 640*480 pixeles. Los datos de profundidad
son representados en un espacio de color RGB o YUV (dependiendo la
configuracin), en 16bits de datos. Para el caso del espacio RGB se utilizan 16
bits para establecer los datos de profundidad, los cuales corresponden al canal
R(rojo) y al canal G(verde), el canal B(azul) se utiliza para establecer datos de
usuario, por ejemplo cuando un pixel corresponde a los datos de usuario, este es
establecido en el octeto del canal azul, por ltimo el canal A es establecido en 255.
Cuando se utiliza el espacio de color YUV (espacio en frecuencia) se utilizan 4
bytes por cada dos pixeles, por lo tanto se pueden almacenar 16 bits en datos de
profundidad, pero valores adicionales como el nmero de usuario detectado, no
pueden ser incluidos [10].
Las tablas 3.2 y 3.3 muestran como se distribuyen los datos de profundidad
utilizando los espacios de color RGBA y YUV.

6abla 3. 2 Datos de profundidad en espacio de color !G#".
R G B A
3 bits de 8 8 bits 0 ID de usuario 255




6abla 3. 3 Datos de profundidad en espacio de color J*K.




4567 2 ()tes por pi/el8
11bitsL1,bits valores

2)

(1% Deteccin y seguimiento de usuario
Cuando se adquieren datos a travs de la cmara de profundidad, imagen con la
informacin de la distancia de los objetos o usuario, esta imagen es analizada
para extraer informacin que est relacionada con el usuario, su posicin y la pose
realizada. El sensor contiene dentro de su software un algoritmo de deteccin que
consiste en dividir el cuerpo del usuario en 31 partes que son reconocidas en un
plano tridimensional. Una representacin del proceso de deteccin de usuario se
muestra en la figura 3.11.

El anlisis de imgenes de profundidad tiene ventajas sobre el anlisis de
imgenes a color, las imgenes de profundidad proporcionan mayor calidad en
condiciones de ambiente ligeras, es decir, en espacios en donde la luz solar no
afecte de forma directa. Esto hace que el sensor realice muestras de dichas
imgenes a travs de la cmara de profundidad y estas sean ms fciles de
analizar que las imgenes a color. Para segmentar la imagen del cuerpo del
usuario en diferentes imgenes se utiliza en clasificador de imgenes, cuyo
4i'ura 3. 11 +roceso de se'mentacin y obtencin de articulaciones a partir de im8'enes de profundidad A11B.


2,

algoritmo esta basado en un rbol de decisiones. Este algoritmo utiliza una base
de datos con una similar pose para cada imagen, con aproximadamente 100 000
poses para cada imagen. Para establecer la decisin de que imagen corresponde
a la imagen del usuario se establecen diferentes caractersticas. Una caracterstica
esta definida como una funcin f(I,x) que define una imagen I y una posicin x,
adems de un parmetro 0 que describe las caractersticas de la imagen dentro
del espacio tridimensional, a travs de estas caractersticas, el algoritmo detecta
que imagen se asemeja a la imagen almacenada dentro de la base de datos. A
partir de este algoritmo el sensor obtiene articulaciones o puntos especficos del
cuerpo del usuario.
Para obtener las articulaciones del cuerpo del usuario se llevan a cabo tres pasos:
1. Un estimador de densidad por cada parte del cuerpo del usuario,
basado en la probabilidad de la superficie del rea de cada pixel.
2. Tcnica para encontrar eficiencia en la densidad.
3. Algoritmo que obtiene la aproximada localizacin de los puntos o
articulaciones.
La deteccin de articulaciones es demasiado precisa, con un 91.4 % de
probabilidad de ser localizados correctamente dentro del plano tridimensional.
Las articulaciones o puntos del cuerpo, de los cuales se puede realizar un
seguimiento dentro del plano que abarca el sensor, son los siguientes:
4i'ura 3. 12 "rticulaciones del cuerpo del usuario@ de las cuales se puede reali&ar un se'uimiento E=@y@&F.

2.

Limitaciones de la deteccin de usuario
La deteccin y seguimiento de usuario que proporciona Kinect es precisa y de
cierta forma confiable, aunque tambin sufre algunas limitaciones. Estas
limitaciones son insignificantes cuando la aplicacin del sensor es exclusivamente
en software, pero cuando se aplica a campos como el de la robtica, estas
limitaciones pueden ser vitales para la aplicacin. Las principales limitaciones en
cuanto a la deteccin y seguimiento de usuario son las siguientes:
No trabaja bajo la luz solar (hardware)
El sensor Kinect proyecta una luz infrarroja a travs de su emisor de 60mW
(mili Watts) con una longitud de onda de 830nm (nano metros). La luz solar
tiene un ancho espectro de luz infrarroja que afecta a la luz proyectada por
el sensor, la luz proyectada es blindada por el brillo de la luz solar, entonces
la cmara que detecta la proyeccin de puntos infrarrojos es deshabilitada
para poder detectar los patrones emitidos por el emisor. Esto propicia que
exista una muy pobre deteccin de profundidad en reas que estn
expuestas a la luz solar.

No detecta usuarios dentro de superficies transparentes y reflejantes
(hardware)
La deteccin en superficies reflejantes o transparentes es tambin difcil
cuando se utilizan sensores pticos, como es el caso del sensor Kinect.
Este factor se debe a que la mayora de los sensores pticos reflejan la luz
sobre la superficie, esta reflexin puede ser alta o baja y puede afectar en
las lecturas del sensor.

La resolucin de la cmara limita el reconocimiento de gestos
demasiados precisos, como pueden ser gestos realizados con los
dedos a determinada distancia (hardware)
La resolucin de la cmara de profundidad se limita a 640*480 pixeles con
pocos centmetros de resolucin, esta limitante determina que algunos
gestos no puedan ser reconocidos por el sensor. Dentro de los gestos que
no son complicados y pueden ser detectados por el sensor Kinect se
encuentran: realizar un movimiento de onda con la mano, levantar y agitar
la mano o realizar un crculo con la misma. Sin embargo si una pequea
rea del cuerpo es observada, por ejemplo la mano del usuario, gestos tan
especficos como los realizados por esta , no pueden ser reconocidos

21

debido a que la regin de inters de la imagen que debe ser analizada, es
pequea en comparacin con la imagen del cuerpo.

El Kinect debe de mantenerse fijo sobre una base o superficie
(hardware)
Para simplificar la deteccin y seguimiento de usuario, el sensor debe estar
totalmente fijo, esto debido a que cuando el sensor se encuentra sobre una
superficie mvil, puede detectar determinados objetos como si estos
estuvieran en movimiento y/o confundirlos con siluetas humanas para
despus entregar resultados incorrectos. La figura 3.13 muestra los datos
errneos que entregara el sensor Kinect cuando se encuentre montado
sobre una superficie mvil, algunos objetos son detectados como usuarios
debido a que cuando el sensor se mueve, la imagen obtenida aparenta el
movimiento del objeto.








La solucin a este problema es la calibracin que lleva a cabo el usuario
para confirmar que se trata de una silueta humana.
La inicializacin para la deteccin y seguimiento de usuario toma
determinado tiempo (software)
Otro problema importante es la inconsistente deteccin de usuario. El
problema consiste que cuando el seguimiento de un usuario es perdido por
una trama de la imagen de profundidad y el usuario es recuperado por otra
imagen, es detectado como si se tratara de otro usuario aunque se trate del
mismo. La imagen 3.14 muestra la perdida de un usuario por una trama de
profundidad, en la tercera trama (figura 3.16), se recupera la imagen del
usuario, pero se determina como un segundo usuario.
4i'ura 3.13 3ma'en 7ue muestra cuando el sensor se
encuentra sobre una superficie mvil@ al'unos objetos son
detectados como usuarios siendo marcados con determinado
color A12B.

2/







(1( 2ibreras de libre acceso para la programacin
de $inect

Cuando el sensor Kinect sali a la venta, no existan controladores ni libreras
para habilitar el uso del sensor en una computadora personal, el uso de este
sensor se aplicaba exclusivamente a la consola Xbox360. Fue hasta el 2010 que
Microsoft liber el SDK (Kit de desarrollo de software) para Kinect, el cual permite
acceder a todas las funciones del sensor: sensor de profundidad, seguimiento de
usuario, cmara RGB y acceso al arreglo de micrfonos. Debido a que Microsoft
no fue el creador del controlador principal del sensor Kinect, se han desarrollado
diferentes libreras de programacin de libre acceso compatibles con el sensor
Kinect.
En la tabla 3.4 se muestran las diferentes libreras de libre acceso que se han
desarrollado para el sensor Microsoft Kinect, algunas son compatibles con
distintos lenguajes de programacin y plataformas de desarrollo.





En la primera fi'ura E3.1%F se detecta al usuario iluminado con rojo@ en la se'unda trama Efi'ura 3.1)F el usuario es perdido@
por ?ltimo en la tercera trama Efi'ura 3.1,F se recupera la deteccin de usuario@ a diferencia 7ue se ilumina de color a&ul@
debido a 7ue el sensor asume 7ue es un nuevo usuario.
4i'ura 3.1) 3ma'en 3
4i'ura 3.1, 3ma'en 2
4i'ura 3.1% 3ma'en 1

35



6abla 3. % omparacin de libreras de libre acceso.
Nombre Lenguajes Plataformas Caractersticas
Open Kinect/
Libfreenect


C,Python, ActionScript,
C#,C++, Java JNI and Java
JNA, JavaScript,
Com-monLisp
Linux, Windows,
Mac OS X
Imgenes de color y
profundidad, control de
la base motorizada y del
led.

CL SDK NUI and
driver

C, C# Windows Imgenes de color y
profundidad, control del
led y de la base
motorizada.
Robot Operating
System

Pyhon, C++ UNIX Imgenes de color y
profundidad.
Acceso a base
motorizada.
OpenNI/NITE
Middle-ware


C,C++,C#, Java Windows, Linux,
Ubuntu, Mac OS X
Identificacin de
usuario, deteccin de
gestos, seguimiento y
orientacin de
articulaciones de
usuario, imgenes de
color y profundidad.

SDK Microsoft Kinect

C++,C#, Visual Identificacin de
usuario, deteccin de
gestos, seguimiento de
articulaciones de
usuario, imgenes de
profundidad y de color.

Trabajando con ejemplos de las libreras de OpenNI y las libreras de desarrollo
de Microsoft para Kinect, se opt por elegir a OpenNI para la programacin del
sensor. Aunque la informacin para la programacin de Kinect con OpenNI es
escaza, contiene ventajas al lado del software de Microsoft para Kinect tales
como: seguimiento de movimiento independiente de las manos, seguimiento de la
rotacin de las articulaciones del usuario detectado, instalacin en plataformas
como Windows y Mac, distintos lenguajes de programacin (Java, C++, C#) y libre
uso de las libreras de programacin para cualquier implementacin comercial. La
programacin entre estas dos libreras es totalmente diferente, pero se mantienen
los mismos conceptos cuando se trabaja con Kinect como lo son: imgenes de
profundidad, imgenes a color y seguimiento de usuario.



31

Descripcin de las libreras de uso libre para programar
el sensor
OpenNI (Interfaz natural de uso libre) es un conjunto de libreras multiplataforma y
multilenguaje para desarrollar aplicaciones utilizando interfaces naturales como e
sensor Kinect. Las libreras fueron desarrolladas por una organizacin llamada
OpenNI que fue fundada por la empresa Israel PrimeSense, la compaa que
otorg la licencia a Microsoft para construir el sensor Kinect [13]. El principal
propsito de OpenNI es establecer un desarrollo de software estndar que habilite
la comunicacin con:
Sensores de audio y visin: en esta tesis de utiliza el sensor Microsoft
Kinect, pero OpenNI puede utilizarse con el sensor desarrollado por
PrimeSense llamado XAzus.
Percepcin de audio y video(los componentes del software analizan los
datos de audio y video que son capturados a travs de las imgenes), por
ejemplo software que recibe datos visuales como imgenes, regresando la
localizacin de la palma de la mano.
El estndar de OpenNI es aplicado al desarrollo de aplicaciones de interaccin
natural para realizar un seguimiento dentro de una escena tridimensional, estos
datos son capturados por medio de las imgenes de profundidad obtenidas por el
sensor. Las libreras de programacin de OpenNI se puede describir en tres
capas (vase figura 3.17), en donde cada una representa un elemento integro. La
capa inferior contiene el hardware o dispositivos que adquieren los datos del
mundo real. La segunda capa contiene los componentes de las libreras que
interpretan y analizan los datos del sensor. Finalmente la capa superior contiene el
software que implementa las aplicaciones de interaccin natural.
.
4i'ura 3.1. !epresentacin abstracta del concepto de Open>3 dividido en tres capas A1%B.

32

La forma en la que trabaja OpenNI es a travs de la produccin de nodos. La
produccin de nodos es el establecimiento de componentes que forman los datos
del sensor que sern utilizados en las aplicaciones.
OpenNI clasifica la produccin de nodos en dos categoras:
Produccin de nodos relacionada con el sensor
Produccin de nodos relacionada con las libreras
Los nodos relacionados con el sensor son los siguientes:
Dispositivo: Un nodo que representa un dispositivo fsico (por ejemplo un
sensor de profundidad o una cmara RGB), el principal objetivo de este
nodo es habilitar el dispositivo que se utilizar.
Generador de profundidad: Genera mapas de profundidad, este nodo debe
ser implementado en algn sensor que capture imgenes en tercera
dimensin y est certificado por la compaa OpenNI.
Generador de imgenes: Nodo que genera imgenes a color, debe ser
implementado en algn sensor que obtenga imgenes a color y est
certificado por la compaa OpenNI.
Generador infrarrojo: Nodo que genera imgenes infrarrojas.
Generador de audio: Genera cadenas de audio.
Los nodos relacionados con las libreras de OpenNI son los siguientes:
Generador de gestos: genera eventos en la aplicacin cuando
determinados gestos son detectados.
Analizador de escena: separa el fondo de una escena de un objeto o
imagen de usuario, permitiendo trabajar los pixeles de fondo de forma
independiente.
Generador de puntos en la mano: permite reconocer la palma de la mano
de un usuario y realizar un seguimiento cuando la mano cambia de
posicin.
Generador de usuario: representacin del cuerpo(o parte del cuerpo) en
una escena tridimensional.
Calibracin
Para la produccin del nodo de generacin de usuario es necesaria una pose por
parte del usuario, debido a que antes de realizar este proceso, los datos del
usuario que proporciona la cmara de profundidad no estn alineados con

33

respecto a los datos de la cmara de color. La calibracin se utiliza para poder
utilizar los datos de profundidad, junto con los de la imagen de color. Tambin
optimiza el seguimiento de usuario, debido a que ofrece una mayor precisin a
diferencia de no utilizar la mencionada calibracin.
(% Dispositivos de procesamiento digital
Para poder programar el sensor Kinect se requiere el uso de una computadora
personal, debido a que la mayor parte de los datos, se adquieren, procesan y
muestran en forma de video (datos digitales), lo cual demanda velocidades de
procesamiento altas como las que se llevan a cabo en computadoras personales
de reciente tecnologa, adems de que la adquisicin de datos que se obtiene del
sensor es a travs del puerto USB(bus serial universal) y todas las libreras de
desarrollo son nicamente compatibles con sistemas operativos que se ejecutan
en computadoras personales y entornos de desarrollo para las mismas (Visual
Studio, NetBeans, Eclipse, etc.).
A diferencia del procesamiento para el sensor Kinect, el brazo robtico requiere de
un dispositivo ajeno a la computadora personal para generar el movimiento de los
servomotores (modulacin por ancho de pulso) que conforman la estructura del
robot, este dispositivo debe contar con algn protocolo de comunicacin que
facilite la recepcin de datos desde la computadora y los procese para poder
generar el movimiento de los servomotores bajo el concepto de sistema multitarea,
es decir, de forma simultnea.

(%1 Descripcin de los dispositivos de
procesamiento
Computadora personal para procesamiento de datos del sensor
De acuerdo con las especificaciones de los desarrolladores de las libreras
utilizadas para la programacin del sensor Kinect [13], las caractersticas de
procesamiento para la computadora que se utilice para tratar los datos del sensor
deben de ser las siguientes:
Sistemas operativos basados en arquitectura de 32 bits 64 bits
Procesadores Pentium 4 a 1.4 GHz o posteriores

3%

Para el presente proyecto se utiliz una computadora personal con procesador
Intel i7 a 2.20 GHz, y sistema operativo Windows 7 edicin Ultmate, debido a que
es la computadora personal con la que se cuenta y cumple las exigencias para la
programacin del sensor.
Microcontrolador PIC18F4550
Como se mencion anteriormente el control del robot requiere un dispositivo de
procesamiento que sea capaz de establecer una comunicacin con la
computadora para la recepcin de datos, y de forma simultanea genere el
movimiento de los motores, los cuales ejercen la fuerza sobre la estructura del
brazo y producen su movimiento. A partir de estas necesidades se propone el uso
del microcontrolador PIC18F4550, este microcontrolador fabricado por Microchip,
cuenta con recursos que cumplen con las caractersticas que se requieren para la
recepcin, procesamiento, y generacin de seal de movimiento de los motores,
aadiendo que se cuenta con experiencia en la programacin y recursos de este
dispositivo, basada en los cursos tomados y trabajos desarrollados a lo largo de la
carrera.
En el anexo 2.1 se muestran las caractersticas del PIC18F4550 y a continuacin
se describen los recursos del PIC que se utilizan en el presente trabajo:
Comunicacin serial sncrona (USART): utilizada para establecer la
recepcin de datos que provienen desde la computadora a travs del
protocolo RS232, que corresponden a los grados de movimiento que deben
realizar los servomotores.
Puertos de salida (PORTB): permiten la salida de datos que son
procesados por el microcontrolador y son enviados a un dispositivo
electrnico externo, en nuestro caso se utilizan enviar los estados de voltaje
alto y bajo para la seal de los servomotores.
Temporizadores (TIMERS): un sistema multitarea requiere de rutinas de
servicio que se ejecuten de forma administrada y con tiempo favorables
para el sistema, los temporizadores del micro controlador son utilizados
para generar el movimiento de los servomotores, y la recepcin de datos
provenientes de la computadora, en un tiempo que sea mnimo y contribuya
a la rpida respuesta del movimiento del brazo robtico.

3)

(%% Comunicacin entre la computadora y
microcontrolador +3C145*//6
Un sistema en tiempo real necesita de un protocolo de comunicacin que permita
transportar los datos enviados hacia el dispositivo final (en nuestro caso micro
controlador), desde la computadora. Este protocolo debe favorecer al rpido
transporte de los datos para evitar retrasos en los tiempos de respuesta.
El protocolo que establece la comunicacin entre la computadora y el micro
controlador, el cual es el encargado de mover el brazo robtico, es el protocolo
RS232, dicho protocolo es uno de los mas usados dentro de los sistemas en
tiempo real, adems de que permite fcilmente transmitir datos como caracteres
de forma rpida, eficiente y sin fallas. La figura 3.18 muestra el diagrama que
representa la comunicacin entre los dispositivos de procesamiento.



En este proyecto se utiliza comunicacin serial RS232 para enviar los datos de la
computadora al microcontrolador, pero se realiza de forma inalmbrica utilizando
el mdulo bluetooth de la computadora para el envo de datos y el modulo serial
inalmbrico que se muestra en la figura 3.19 para la recepcin por parte del PIC,
mdulo basa su funcionamiento en el protocolo bluetooth, pero entrega los datos
de forma serial a una velocidad de 9600 baudios por segundo. La comunicacin
entre los dispositivos de procesamiento es totalmente inalmbrica como se
ejemplifica en la figura 3.18, en donde se envan los datos por el mdulo bluetooth
de la computadora y ser reciben por el modulo serial que se encarga de entregar
los datos al microcontrolador.





4i'ura 3.11 Dia'rama de comunicacin entre los dispositivos de procesamiento.
4i'ura 3. 1/ :dulo serial bluetoot<.

3,

Este mdulo se adapta a cualquier bluetooth de computadora como si se tratara
de un dispositivo de este protocolo que se encuentra en celulares, cmaras, etc.
Una vez que se lleva a cabo el proceso de emparejamiento, se crea un puerto
virtual dentro de la computadora con la que se emparej al mdulo, como si se
tratara de un puerto fsico serial con conector DB9. Una vez que el puerto se ha
creado de forma virtual, es posible enviar datos desde nuestro programa al puerto
virtual, los cuales viajan mediante el protocolo bluetooth, pero son nuevamente
entregados hacia el microcontrolador o dispositivo final de forma serial (RS332).
Este tipo de comunicacin ayuda en el proyecto para la supresin de cables en la
comunicacin entre la computadora y el PIC18F4550, adems de que contiene
todas las ventajas del protocolo bluetooth, como la distancia de alcance y la
compatibilidad con cualquier dispositivo que maneje comunicacin serial. Cabe
destacar que aunque el mdulo base su funcionamiento en el protocolo bluetooth,
no es necesario conocer propiedades demasiado adentradas acerca del protocolo
bluetooth, ni realizar ningn tipo de configuracin en la programacin interna del
mdulo.

En la figura 3.20 se muestran los pines del modulo, los cuales corresponden a la
conexin a VCC, GND y los pines de envo TX, y recepcin RX, de datos para el
dispositivo final, que en nuestro caso es el PIC18F4550.





(( -ervomotores
Es un motor de corriente continua que tiene la capacidad de ser controlado en una
determinada posicin. El motor es capaz de ubicarse en cualquier posicin dentro
de un rango de operacin (generalmente de 180) y mantenerse estable en dicha
posicin. Los servomotores se suelen utilizar en robtica, automatizacin, debido a
su gran precisin en el posicionamiento.

En general, los servomotores suelen estar compuestos por 4 elementos
fundamentales:

Motor de corriente continua (DC): Es el elemento que le brinda movilidad
al servomotor. Cuando se aplica un potencial a sus dos terminales, este
4i'ura 3.25 +ines para transmisin y recepcin de
datos a trav(s del modulo serial bluetoot< A1)B.

3.

motor gira en un sentido a su velocidad mxima. Si el voltaje aplicado sus
dos terminales es inverso, el sentido de giro tambin se invierte.
Engranajes reductores: Tren de engranajes que se encarga de reducir la
alta velocidad de giro del motor para incrementar su capacidad de torque.
Sensor de desplazamiento: Suele ser un potencimetro colocado en el
eje de salida del servomotor que se utiliza para conocer la posicin angular
del motor.
Circuito de control: Es una placa electrnica que implementa una
estrategia de control de la posicin por realimentacin. Para ello, este
circuito compara la seal de entrada de referencia (posicin deseada) con
la posicin actual medida por el potencimetro. La diferencia entre la
posicin actual y la deseada es amplificada y utilizada para mover el motor
en la direccin necesaria para reducir el error.

En la figura 3.21 se muestran los 4 elementos mencionados anteriormente,
adems se muestra la carcasa en donde vienen incluidos estos elementos y
en conjunto forman al servomotor.














((1 +rincipio de funcionamiento
Los servos disponen de tres cables (Figura 3.22): dos cables de alimentacin
(positivo y negativo) que suministran un voltaje 4.8-6V y un cable de control que
indica la posicin deseada al circuito de control mediante seales PWM
(Modulacin por ancho de pulsos).





4i'ura 3.21 Elementos 7ue conforman un servomotor A1,B.
4i'ura 3.22 ables de un servomotor A1,B.

31

Las seales PWM (modulacin por acho de pulso) utilizadas para controlar los
servos estn formadas por pulsos positivos cuya duracin es proporcional a la
posicin deseada del servo y que se repiten cada 20ms (50Hz). Todos los servos
pueden funcionar correctamente en un rango de movimiento de 90, que se
corresponde con pulsos PWM comprendidos entre 0.9 y 2.1ms. Sin embargo,
tambin existen servos que se pueden mover en un rango extendido de 180 y sus
pulsos de control varan entre 0.5 y 2.5ms. Antes de utilizar un servo se debe
comprobar experimentalmente su rango de movimiento para no daarlo. Para
mantener fijo un servo en una posicin habr que enviar peridicamente el pulso
correspondiente; ya que si no recibe seales, el eje del servo quedar libre y se
podr mover ejerciendo una leve presin.

((% Control de un servomotor
Para controlar un servo, se le ordena un cierto ngulo, medido desde 0 grados,
envindole una serie de pulsos. En un tiempo alto de pulso se le indica el ngulo
al que debe posicionarse. Generalmente se considera que en 1.5ms est en el
centro (90 grados) .Entre lmites de 1 ~ 2ms son las recomendaciones de los
fabricantes, normalmente se puede usar un rango mayor de 1.5ms para obtener
un ngulo mayor e incluso de 2ms para un ngulo de rendimiento de 180 grados o
ms. El factor limitante es el tope del potencimetro y los lmites mecnicos
construidos en el servo. Un sonido de zumbido normalmente indica que usted est
forzando por encima al servo, entonces debe disminuir un poco. En la figura 3.23
se muestra el ciclo de trabajo o tambin nombrado pulso en alto para que un
servomotor se posicione en 90 grados (posicin neutra), 0 grados y 180 grados, el
ciclo de trabajo para las posiciones de 0 y 180 grados depende del servomotor y
del fabricante.









4i'ura 3.23 iclos de trabajo para posicionar un servomotor est8ndar
A1,B.

3/

(* 7arjeta de control para los servomotores
La figura 3.24 muestra la conexin que se realiz para la simulacin del
movimiento de los motores, dentro del esquema se encuentra la conexin del
puerto del microcontrolador del cual se utilizan los pines b0 a b3 para conectar los
motores. La conexin al puerto DB9 (puerto serie), el cual sirvi de apoyo para
crear un puerto virtual y simular la entra de datos desde la computadora hacia el
PIC, recalcando que en este proyecto no se hace uso del conector DB9, el cual es
remplazado por el modulo serial inalmbrico bluetooth.


(*1 Diagrama es8uem9tico del circuito impreso
para la tarjeta de control
Una vez realizadas las pruebas correspondientes para el movimiento de los
servomotores y recepcin de datos a travs del modulo UART, se implement el
siguiente diseo de la tarjeta controladora, la cual contiene el PIC18F4550 como
unidad central de control y el modulo serial bluetooth para la recepcin de datos.
El diseo del circuito esquemtico y PCB, fue realizado con el software ALTIUM
Designer, implementando un modelo de PCB de doble capa. La figura 3.25
muestra el diseo final de la tarjeta controladora.
4i'ura 3.2% Dia'rama de simulacin para movimiento de los servomotores.

%5


En las figuras 3.26 y 3.27 se muestran las capas que forman el diseo del circuito
impreso basado en el diagrama esquemtico que corresponde a la tarjeta
controladora de servomotores incluyendo las conexiones para los servomotores y
el mdulo de comunicacin entre la computadora y el microcontrolador.










4i'ura 3.2) Dia'rama es7uem8tico de tarjeta controladora para los servomotores.
4i'ura 3. 2. apa inferior del circuito impreso. 4i'ura 3. 2, apa superior del circuito impreso.

%1

En la figura 3.28 se muestra el diseo fsico del circuito impreso, indicando las
medidas que corresponden a la tarjeta controladora para los servomotores del
brazo robtico e indicando los componentes ms importantes que constituyen a la
tarjeta.






Batera para los servomotores
Los servomotores utilizados en el presente proyecto requieren una fuente de
alimentacin independiente al voltaje suministrado al PIC18F4550. La fuente de
alimentacin que se utiliza para alimentar a todos los motores que componen el
brazo manipulador es una batera de acido-plomo. Las bateras de acido-plomo
son confiables, de larga duracin, adems de que no requieren algn tipo de
circuitera que represente mayores gastos o espacio dentro del circuito. La
mayora de las bateras tienen una determinada duracin, dependiendo de la
corriente y voltaje demandados por el circuito. En la figura 3.29 se muestra la
batera utilizada para los servomotores, y en la tabla 3.5 sus caractersticas.
6abla 3. ) aractersticas t(cnicas de la batera acido;plomo.


Sistema de proteccin para carga excesiva
Terminales de 1.06 cm
Soporta hasta 300Centgrados
0.78 kg
6v a 4Ampers/hora
4i'ura 3.21 6arjeta de control para los servomotores.
4i'ura 3.2/ #atera de acido;plomo.

%2


La duracin para la batera de forma continua es la indicada a continuacin:
Duracin =
4000 mAh (cocntc quc cntcgu Iu butciu)
1200mA (cocntc dcI ccuto)
= S.S boros (Ecuacin 3.1)
Para la duracin de manera discontinua se tom en cuenta la grfica de descarga
de la batera (ver anexo 3.1) donde indica que para una corriente de 1200mA de
forma no constante se obtendr una duracin de 2 a 3 horas de forma no continua.










%3

Captulo *
Dise.o del soft1are
Como se mencion anteriormente, el trabajo realizado en esta tesis es un sistema
en tiempo real, el brazo robtico tiene que moverse en un determinado tiempo
que asimile ser paralelo al tiempo en que el usuario mueve el brazo derecho. El
funcionamiento del software se basa en el diagrama de flujo que se describe
posteriormente, el cual muestra los diferentes procesos para que se ejecuten en
los dispositivos de procesamiento.

*1 Descripcin del soft1are

En el diagrama mostrado en la figura 4.1 se marcan de color azul los procesos que
sern ejecutados por la computadora, mientras que de color verde los procesos
que ejecutar el microcontrolador PIC18F4550. A pesar de que algunos procesos
son ejecutados por el mismo dispositivo (computadora o sensor Kinect), cada
proceso depende de otro y tiene una prioridad asignada para su ejecucin.
En nuestro primer proceso o inicio del algoritmo del sistema, se inicializa el sensor,
en el segundo proceso se adquieren los datos de profundidad, despus se entra
en el proceso calibracin de usuario, hasta que sea completado de forma correcta
se puede trabajar con los datos de usuario. El siguiente paso es el clculo del
movimiento del brazo del usuario, es aqu donde se aplica el algoritmo de
seguimiento del brazo que controla el robot. La segunda condicin que existe
dentro del sistema es la deteccin del gesto de finalizacin, dato que ordena al
microcontrolador que realice la detencin del brazo robtico, esta condicin es
aplicada dentro de cada ciclo del diagrama de flujo, y procesada antes de enviar el
paquete de datos hacia el microcontrolador. El siguiente proceso en el diagrama
de flujo es nuevamente la condicin de finalizacin, la diferencia entre la condicin
marcada en verde y la marcada en azul, radica en que el proceso marcado de
verde es aplicado por el microcontrolador, si sta condicin se cumple, el
microcontrolador detiene el brazo robtico dando fin a la aplicacin, en caso

%%

contrario se genera el movimiento del robot, y despus regresa nuevamente al
proceso de adquisicin de imgenes, que propicia la repeticin del ciclo del
algoritmo, el cual llega a su fin cuando el gesto de finalizacin es detectado.























4i'ura %.1 Dia'rama de flujo del soft9are del sistema.

%)

El sistema en tiempo real implementado en este trabajo, omite algunas etapas de
proceso dentro de un sistema en tiempo real, debido a que parte de los datos que
son adquiridos del ambiente a travs del sensor Kinect, son procesados por el
sensor y enviados a la computadora como datos digitales.
El diagrama de la figura 4.2 muestra las etapas que componen al sistema en
tiempo real para el movimiento del brazo robtico y los procesos que son
ejecutados dentro de cada etapa.

4i'ura %.2 Dia'rama a blo7ues de las etapas del sistema.

Las etapas del sistema mostradas en la figura 4.2 se resumen a continuacin:
Inicializacin del Kinect: el sensor es la variable de entrada que interacta
con el ambiente y entrega datos del mismo (en nuestro caso usuario),
adems de que estos resultados dependen del tiempo, es por eso que se
determinada como la primer etapa del sistema. A pesar de que solo se
utiliza un sensor, se puede considerar la adquisicin de mltiples variables,
debido a los diferentes datos que entrega el Kinect.
Adquisicin de imgenes y datos de profundidad: se capturan todos los
datos que enva el sensor hacia la computadora, permitiendo utilizarlos para
la implementacin de nuestro algoritmo de movimiento.
Proceso de calibracin: no todos los usuarios presentan el mismo tamao
de extremidades del cuerpo, motivo por el cual se realiza un proceso de
calibracin que permite la correcta lectura de los datos del usuario.
Seleccin de articulaciones a utilizar: Microsoft Kinect entrega datos
referentes a las articulaciones del cuerpo del usuario, sin embargo no todos

%,

estos datos se utilizan en el proyecto, dentro de esta etapa se adquieren
nicamente las articulaciones que servirn para realizar el clculo del
movimiento del brazo derecho y mano izquierda del usuario, las dems son
descartadas.
Clculo de movimientos del brazo: se implementan los algoritmos
basados en cinemtica directa, que utilizan datos procesados por etapas
anteriores y se calculan los datos finales que sern enviados a la siguiente
etapa.
Transductor o etapa del movimiento del brazo robtico: un sistema en
tiempo real , aplica una accin en el ambiente despus de procesar las
variables de entrada, dentro de esta etapa se explica el movimiento del
brazo robtico, el cual es efectuado a travs del microcontrolador
PIC18F4550.
*% 3niciali&acin del $inect
Realizando investigacin sobre las libreras mas utilizados para el desarrollo de
aplicaciones con Kinect: el software de desarrollo de Microsoft para Kinect y
OpenNI, se opt por elegir al segundo. A diferencia del software de Microsoft para
Kinect, OpenNI fue desarrollado por la empresa que otorg la patente a Microsoft
para la construccin del dispositivo, por lo que estas libreras contienen
herramientas que para este trabajo, representan una gran ventaja al lado del SDK
de Microsoft. La licencia otorgada por Microsoft es exclusivamente para su uso no
comercial, a diferencia del software utilizado en este proyecto, que s permite el
uso comercial de sus libreras, factor que puede contribuir en una futura
implementacin comercial.
Las principales ventajas entre OpenNI y el sotfware de Microsoft se muestran en
la tabla 4.1. En relacin al seguimiento de usuario, una de las ventajas de OpenNI
que es factor en este trabajo, es la obtencin de la rotacin de las articulaciones
del cuerpo del usuario, herramienta que el SDK de Microsoft no ofrece, otra
ventaja de utilizar OpenNI, es un soporte basado en libreras para el seguimiento
exclusivo de las manos y reconocimiento de gestos con las mismas. Algunos otros
factores que tambin influyen en la eleccin de OpenNI son el menor consumo de
CPU, uso de mltiples lenguajes de programacin y de plataformas como Linux o
Mac. En cuanto a las desventajas que pueden presentarse dentro de OpenNI se
encuentran la pose de calibracin que se necesita para trabajar con los datos de
usuario y la confusa instalacin y falta de informacin por parte de las libreras
utilizadas. En la tabla 4.2 se enlistan las desventajas tanto del SDK de Microsoft
y de OpenNI.

%.

6abla %. 1Kentajas del soft9are de :icrosoft para $inect y Open>3


6abla %. 2 Desventajas del soft9are de :icrosoft para $inect y Open>3.



SDK de Microsoft OpenNI

Soporte par audio Licencia de uso comercial

Soporte para motor Framework para seguimiento
de manos independiente.

Seguimiento de usuario Seguimiento de usuario
Ventajas
No necesita pose de
calibracin
Calcula rotacin de las
articulaciones

Mejor tratamiento de
articulaciones
ocluidas.
Soporta Windows, Linux y
Mac.

Instalacin simple Soporte para adquirir las
imgenes infrarrojas

Sistema de reconocimiento de
gestos con las manos.

Compatible con varios
sensores.
SDK de
Microsoft
OpenNI
Licencia
nicamente para
uso no comercial.
Carece de rotaciones para
manos, pies y clavcula.
Seguimiento de
usuario completo
(no permite seguir
nicamente las
manos)
Articulaciones ocluidas no
son compatibles.
Desventajas No calcula la
rotacin de las
articulaciones.
Laboriosa instalacin
Exclusivamente
para Windows 7

Consume mas
CPU que OpenNI


%1

En OpenNI los recursos que se utilizan del sensor para el desarrollo de
aplicaciones se dividen por nodos, estos dependen de que recursos se vallan a
utilizar del sensor, por ejemplo: si se desea utilizar nicamente la cmara de color
RGB, se debe utilizar el nodo denominado Generador de Imagen que permite
generar las imgenes a color por parte de la cmara del sensor y adquirir las
imgenes cuando el sensor realice una captura y esta puedan ser enviada hacia la
computadora. Los nodos se pueden utilizar de forma individual o de forma
conjunta. Para poder hacer uso de los nodos en OpenNI, se debe hacer uso de un
archivo de configuracin con extensin .xml, este archivo contiene los nodos que
sern utilizados en la aplicacin.
La configuracin de un archivo .xml para iniciar el Kinect dentro de OpenNI debe
tener la plantilla que se muestra en el anexo 3.2, las configuraciones dentro del
archivo xml se refieren a los siguientes parmetros:
<licencias> indica la licencia que se utilizada para el uso libre de OpenNI,
la cual se obtiene de forma gratuita en la pgina de OpenNI , y permite el
acceso a todos los nodos disponibles en las libreras.
<Produccin de nodos> en esta etiqueta se deben incluir todos los nodos
que se desean producir a travs del sensor, especificando las
caractersticas deseadas.
<Tipo de nodo = nombre> en esta seccin se debe indicar el tipo de nodo
que se va a utilizar (profundidad, imagen, imagen de infrarrojo, audio, etc),
adems de que se aade un nombre que identifica al nodo.
<Configuracin > la configuracin de cada nodo es establecida a travs de
esta etiqueta, donde se indican las caractersticas de cada nodo, si se
desea utilizar cualquiera de las cmaras del sensor, se debe establecer la
velocidad de envo y la resolucin.
En este trabajo se utilizan los siguientes nodos: profundidad (Generador de
profundidad), imagen RGB(Generador de imagen), usuario(Generador de
usuario) y gestos(Generador de gestos). La idea de trabajar con los datos del
sensor de profundidad, es poder obtener la ubicacin dentro del plano 3D de
las articulaciones del usuario, motivo por el que se utiliza un nodo de
profundidad. Debido a que el sensor detecta al usuario y accede a las
articulaciones del mismo a travs de imgenes de profundidad, se debe utilizar
obligatoriamente el nodo de profundidad si se requiere utilizar el nodo de
usuario (Generador de usuario). El nodo Generador de imagen es utilizado
para visualizar la imagen a color, utilizada en el proyecto nicamente como
referencia de los movimientos que ejecuta el usuario. Los siguientes nodos

%/

(Generador de seguimiento de manos y Generador de gestos) sirven de apoyo
para utilizar las libreras que proporciona OpenNI y dedicadas exclusivamente
al seguimiento de manos y deteccin de gestos con las manos, herramienta
que se implementara para definir un gesto de finalizacin del movimiento del
brazo robtico.
En resumen: los nodos a utilizar y configurar dentro del archivo .xml son los
siguientes:
Generador de profundidad (utilizado para la imagen de profundidad)
Generador de imagen( datos sobre la imagen a color)
Generador de usuario (permite acceder a datos del usuario)
Generador de seguimiento de manos( realiza seguimiento exclusivo de
las manos)
Generador de gestos(detecta gestos hechos con las manos)
El archivo xml puede nombrarse de cualquier forma, lo importante de la
configuracin de este archivo es el establecimiento de los nodos a utilizar y sus
propiedades, ya que de esto depender la velocidad de actualizacin de nuestra
aplicacin. La configuracin final del archivo .xml utilizado en el proyecto es la
mostrada en el anexo 4.1.
Algunos puntos importantes de observar en la configuracin de este archivo son:
el establecimiento de la resolucin y velocidad de envo para las cmaras de
profundidad y de color, los cuales son de 640*480 pixeles a un velocidad de 30 fps
(30 tramas por segundo) para ambas cmaras.
Todos estos nodos deben ser iniciados y procesados computacionalmente a
travs de un principal objeto definido en las libreras de OpenNI, denominado
contexto. Este objeto se encarga de inicializar, actualizar y detener todos los
nodos producidos por el sensor, los cuales fueron tambin establecidos en el
archivo .xml. Para poder trabajar con el objeto contexto en OpenNI, se deben
tomar en cuenta los siguientes mtodos que son la base para trabajar con los
datos del sensor: Iniciar generando todo, Esperar y actualizar, Detener todo,
mtodos que son llamados a travs del objeto contexto. El mtodo Iniciar
generando todo se encarga de inicializar todos los nodos que fueron escritos en
el archivo xml, asegurando de que cada uno de ellos contenga las propiedades
adecuadas para su funcionamiento. El mtodo Esperar y actualizar, actualiza los
datos de todos los nodos que se hayan generado, permitiendo que los nuevos
datos capturados por el sensor puedan ser utilizados para su procesamiento,
cuando se desea actualizar solo uno de los nodos inicializados se utilizan otros
mtodos como Esperar por alguno y actualizar, el cual espera por un nodo en

)5

especifico sin tomar en cuenta que otros nodos hayan generado o no, nuevos
datos.
El mtodo Detener todo se encarga de detener la generacin de todos los nodos
a travs del sensor, este mtodo puede utilizarse para dejar de utilizar alguna
configuracin de un archivo xml y poder utilizar otro archivo con la extensin
indicada.

*( -oft1are para ad8uisicin de datos
Para la programacin del software se implement un modelo basado en el
diagrama de clases mostrado en la figura 4.3, ocupando un objeto por cada clase,
con el objetivo de organizar los algoritmos implementados en cada clase y poder
tener un control y acceso para las caractersticas que ofrece el sensor.

4i'ura %.3 Dia'rama de clases del soft9are dise0ado para la computadora.
El contenido de las clases se resume a continuacin:
Seguimiento: contiene los mtodos para obtener todos los datos referentes
al seguimiento de el usuario como las coordenadas (x,y,z) de las
articulaciones y su rotacin.
Imgenes: realiza la adquisicin y procesamiento de todas las imgenes
con las que se trabajan como imagen de profundidad e imagen RGB.
Clculos: implementa todos los algoritmos matemticos utilizados en el
software.

)1

Deteccin de mano: procesa dentro de sus mtodos la imagen que obtiene
la forma de la mano del usuario y con ello determina su estado (abierto o
cerrado).
Programa principal: inicia todos los procesos a travs de dos subprocesos
que se ejecutan de forma paralela para el funcionamiento del programa.
*(1 3magen de profundidad

Como se mencion anteriormente, los datos y seguimiento de usuario, dependen
de las imgenes de profundidad, estas son generadas a travs del nodo
Generador de profundidad y entregadas a una velocidad de 30 tramas por
segundo. Una desventaja de OpenNI es que no genera ningn tipo de evento
cuando una imagen ha sido producida y enviada por el sensor hacia la
computadora, simplemente los datos son entregados a travs del mtodo Obtener
Metadatos, el cual entrega los datos de profundidad, debido a esto, la velocidad
de adquisicin de la trama o imagen, depender del algoritmo implementado en la
aplicacin y el tiempo que se asigne para procesar cada imagen.
La adquisicin y procesamiento de datos del sensor Kinect son desarrollados
utilizando tecnologa .Net, y lenguaje de programacin C#, trabajando las
imgenes como mapas de bits. Estos mapas permiten crear una imagen del
tamao de la imagen entregada por el sensor, bloquear la imagen durante el
proceso de copiado de datos y una vez que se termina este proceso, mostrar la
imagen. En la figura 4.4 se muestra una representacin del mapa de bits que
permite almacenar la cantidad exacta de datos entregados por el nodo de
profundidad.







,%5 bytes
%15 bytes

4i'ura %.% :apa de bits a utili&ar para
copiar im8'enes entre'adas por el
sensor.

)2

Cada byte dentro del mapa contiene 8 bits, esto indica que solo se pueden
almacenar datos con valor mximo de 255. Realizando el producto entre las filas y
columnas del mapa de bits, obtenemos un total de 307200 bytes para cada canal
utilizado en las imgenes. La representacin de los datos en una imagen de
profundidad en OpenNI es establecida en escala de grises. Normalmente el valor
de un pixel en escala de grises se representa por un canal, y cuyo valor del pixel
se encuentra en el rango de 0-255, el nodo de profundidad entrega normalmente
valores de 0 a 10000 para cada pixel, este valor representa la distancia en cm que
existe entre el sensor y las coordenadas del espacio3D que corresponden a ese
pixel, pero para poder representarlo en escala de grises se normaliza al rango de
0-255. Perceptivamente dentro de la imagen de profundidad, este valor representa
la intensidad de un pixel, graficndose en pantalla como un determinado color
entre el blanco y el gris, por ejemplo: si el valor del pixel es 0, el color del pixel es
negro, y de forma contraria, si el valor es 255 ,el color es blanco, si el valor se
encuentra dentro de ese rango, obtendr el color al cual su valor este mas
cercano, ejemplo: 150 (obtenemos un color parecido al blanco), 30(obtenemos un
color parecido al negro), el umbral establecido para definir la frontera de los
valores de cada pixel es 128. Para poder obtener una imagen de profundidad y
visualizarla dentro de una interfaz grfica de usuario, se debe implementar un
algoritmo que capture los datos de profundidad que entrega el sensor cada 30
milisegundos, y realice el proceso de copiado hacia el mapa de bits, para despus
mostrarlos de forma grfica. El algoritmo de la figura 4.5 obtiene una imagen de
profundidad y es implementado en el cdigo del anexo 4.2.









4i'ura %.) "l'oritmo para obtener una ima'en de profundidad.

)3

El objeto de tipo Bitmap sirve para poder almacenar los datos de profundidad
obtenidos de la funcin GetMetaData, el cual debe ser bloqueado durante el
proceso de copiado, para evitar que algunos datos sean sobre escritos. El objeto
de tipo DepthMetaData es utilizado para almacenar todos los datos de
profundidad en el caso de que se quiera trabajar con ellos. La figura 4.6 despliega
la imagen de profundidad que se obtiene cada 30 milisegundos a una distancia de
2 metros. Curiosamente se puede observar en la imagen de profundidad que los
contornos del usuario o de los objetos se visualizan de color negro, simulando una
sombra, esto se debe a que los puntos infrarrojos son desviados por los contornos
de un objeto o persona, por lo que el valor de esas regiones se establece en 0.
Los valores de estos pixeles que se encuentran en la frontera entre el usuario y la
imagen, no afectan de forma directa dentro de la deteccin de usuario, debido a
que el contorno puede ser obtenido utilizando otros algoritmos de visin por
computadora.

4i'ura %. , 3ma'en de profundidad y color del usuario a una distancia de 2metros utili&ando el nodo MGenerador de
profundidadN.

4i'ura %.. 3ma'en de profundidad y color cuando el usuario e=tiende la mano a una distancia menor de 1) cm.

)%

En la figura 4.7 se observa otro detalle importante cuando se trabaja con el sensor
de profundidad del Kinect, cuando algn objeto se encuentra dentro de una
distancia menor a 15 cm delante del sensor, el valor de profundidad del pixel de
este objeto siempre ser nulo, debido a la arquitectura con la que cuenta el
sensor de profundidad, en este caso el diseo de la cmara de profundidad, no es
capaz de detectar los puntos infrarrojos que se proyecten en objetos que se
encuentren a 15cm o a una menor distancia delante del sensor, por este motivo
todos estos objetos o formas se visualizan de color negro en la imagen de
profundidad.

*(% 3magen en el espacio !G#
La imagen RGB sirve de apoyo en este proyecto para que el usuario pueda
referenciar y comparar el movimiento realizado por su brazo y el movimiento que
ejecuta el brazo robtico, pero en el movimiento del robot, no afecta de ninguna
manera. El nodo encargado de generar datos para adquisicin de imgenes a
color es Generador de Imagen . La composicin de una imagen a color es
diferente a una imagen de profundidad, un pixel de una imagen a color esta
conformado por tres canales: R(rojo) ,G(verde)B(azul), los cuales contienen
valores de 0 a 255. OpenNI permite alinear los datos de profundidad con los datos
de la cmara RGB, permitiendo mostrar nicamente pixeles donde se muestre el
usuario deseado.
El algoritmo para obtener imgenes a color es similar al de las imgenes de
profundidad, la diferencia radica en los tipos que se manejan para obtener los
datos del contexto y en la forma de copiarlos en una imagen, tomando en cuenta
que en una imagen a color se obtienen tres canales y los valores de estos tres
forman un color por cada pixel, el algoritmo para imgenes a color se muestra en
la figura 4.8 y es implementado en el cdigo del anexo 4.3.


))











En la figura 4.9 se muestra la imagen a color que se obtiene a travs del nodo
Generador de Imagen. La resolucin de la imagen es normalmente de 640*480
pixeles, pero el sensor Kinect puede generar imgenes a color con una resolucin
de 1280*1024 reduciendo la velocidad de envo a 15 tramas por segundo.









4i'ura %. 1 "l'oritmo para obtener ima'en a color.
4i'ura %. / 3ma'en !G# obtenida con el nodo O'enerador de ima'enO.

),

*(( 3magen de puntos infrarrojos
Las imgenes de proyeccin del patrn de puntos infrarrojos que emite el sensor
de profundidad del Kinect no son utilizadas para la implementacin del proyecto,
sin embargo se muestran como referencia para entender el desarrollo de la
aplicacin y el funcionamiento del sensor. La figura 4.10 muestra la imagen de
puntos infrarrojos que emite el sensor sobre la superficie que cubre, estos son
representados de forma visual a travs de la intensidad de cada uno de los
pixeles, como se mencion en el capitulo dos, estos puntos cubren cada objeto
que se encuentre dentro del rea del sensor, permitiendo detectar la distancia de
los objetos o usuario y generar el mapa de profundidad.







*(* +roceso de calibracin
El sensor de profundidad detecta mximo a seis usuarios dentro del rea que
cubre, sin embargo, para realizar un mejor seguimiento de usuario, es
recomendable trabajar con un mximo de dos usuarios, ya que el aumento de
seguimiento de estos, provoca retardos en el procesamiento de datos de usuario
por parte de la computadora. En el presente trabajo se propone a un solo usuario
como operador del brazo robtico, pero tambin se consideran factores como la
intromisin accidental o provocada de otra persona dentro del rea del sensor.
OpenNI tiene la ventaja de generar eventos cuando se detecta o pierde un
usuario, cuando se detecta un nuevo usuario asigna un nmero de identificacin
(ID) al usuario detectado, por ejemplo: si la aplicacin es iniciada y entra un primer
usuario al rea que cubre el sensor, se le es asignado el nmero 1 como ID, si
posteriormente ingresa otra persona se le asigna el ID nmero 2, continuando de
esta manera sucesiva hasta llegar al mximo de usuarios que pueden ser
detectados, si llegaran a ingresar mas usuarios dentro del rea del sensor, estos
4i'ura %. 15 3ma'en del patrn infrarrojo emitido por el sensor de profundidad@ obtenida a
trav(s del nodo MGenerador 3nfrarrojoN.

).

no serian detectados o simplemente obtendramos un error en tiempo de
ejecucin. Una pregunta comn que puede llegar a surgir dentro de la deteccin
de usuario es: Qu pasa cuando un usuario es identificado, pero despus sale
del rea del sensor y regresa nuevamente? , el sensor Microsof Kinect guarda los
datos de un usuario cuando es perdido, es decir cuando abandona el rango que
cubre el sensor, si un nuevo usuario es detectado posteriormente, el sensor
compara los datos del usuario detectado, con los datos del usuario perdido,
buscando semejanzas en cuando a la forma del cuerpo y tamao, por lo tanto es
posible que al usuario detectado se le asigne el ID del usuario perdido, si es que
se tratara de la misma persona, en caso contrario se le asigna un nuevo ID , esto
propicia algunos errores que pueden llegar a suceder durante la identificacin, por
ejemplo: que un usuario salga del rea del sensor y otro entre, tomando el ID del
primero debido a una posible similitud en las extremidades y forma del cuerpo
entre ambos , lo cual es difcil que pueda suceder.
Otra ventaja de poder identificar mediante ID a los diferentes usuarios dentro del
rea del Kinect es que podemos utilizar los pixeles de profundidad que
correspondan nicamente a ese determinado usuario, permitiendo realizar
interfaces grficas de usuario en donde solo se despliegue la imagen que
corresponde al cuerpo del usuario, o en su defecto alinear los pixeles de usuario
con los de la cmara RGB para obtener imgenes a color del cuerpo del usuario.
La diferencia para adquirir datos de usuario entre el SDK de Microsoft y las
libreras de OpenNI para el seguimiento de usuario, radica en que OpenNI
necesita una pose de calibracin. Las libreras de Microsoft no requieren de una
pose de calibracin para acceder a las articulaciones del usuario, esto se debe a
que la calibracin que realiza el software de Microsoft se hace mediante un
algoritmo que localiza el centro de masa del usuario detectado, y a partir de ah,
se localizan los puntos a los cuales se tiene acceso. OpenNI incluye una pose de
calibracin, la cual no impide que se puedan acceder a las articulaciones del
usuario, pero se obtiene una mejor precisin del seguimiento realizando esta pose
de calibracin. El proceso de calibracin tambin ayuda en el seguimiento de
usuarios que estn dentro del rea del sensor y tengan parecidas pero no
idnticas formas en los sus cuerpos.
OpenNI contiene eventos que se generan cuando ocurren procesos relacionados
con la deteccin y calibracin de usuario. En la figura 4.11 se muestra el diagrama
de flujo para poder realizar la correcta calibracin del usuario, estos procesos son
establecidos por OpenNI de forma general, sin poder ser modificados,
implementando la calibracin en el cdigo del anexo 4.5.

)1













Los procesos marcados de color azul dentro del algoritmo de calibracin mostrado
en la figura 4.11 representan los eventos que se generan cada que ocurre dicho
proceso, los procesos de color verde representan mtodos que deben ser
llamados para realizar la tarea especfica. El proceso de calibracin debe ser
realizado para cada usuario detectado, si es el caso que se requiera trabajar con
los datos de un nuevo usuario. El proceso de calibracin de un usuario se puede
describir de la siguiente manera: un nuevo o primer usuario es detectado por el
sensor generando el evento Nuevo usuario , a partir de este momento se realiza
la peticin para detectar una pose de calibracin, es decir, se asume que el
usuario detectado realizar la pose de calibracin, el mtodo que realiza esta
peticin es Iniciar pose de deteccin, este mtodo recibe dos parmetros: el
ID(nmero de usuario) del que se desea calibrar, y la pose de calibracin a
realizar, la cual esta definida de forma predeterminada en OpenNI y es la que se
muestra en la figura 4.12 .






4i'ura %.11 "l'oritmo para calibracin de usuario.
4i'ura %. 12 +ose O+siO para llevar a cabo el proceso de calibracin A1%B.

)/

La razn de la forma de la pose para calibrar al usuario se debe que a travs de
la pose se puede tomar una imagen donde se visualicen casi la mayora de las
articulaciones del usuario, o por lo menos la parte superior del cuerpo del usuario.
Una vez que se realiz la peticin de deteccin de pose de calibracin y el usuario
realiz la pose, se genera el evento Pose detectada, el cual indica que la pose
ha sido detectada, dentro de este evento se debe llamar al siguiente mtodo que
indica el diagrama de flujo , Peticin de calibracin, el cual se encargar de
realizar la peticin para la calibracin del usuario, este mtodo recibe como
argumento el ID del usuario que se requiera calibrar, antes de llamar a este
mtodo de peticin de calibracin se debe de llamar al mtodo Detener deteccin
de pose, ya que si no se hace, el proceso entra en un ciclo infinito porque el
evento Pose detectada se genera constantemente. El siguiente evento que se
genera es Calibracin completa, evento que se genera cuando se completa la
calibracin, en este proceso se deben tomar en cuenta algunas consideraciones,
el termino de la calibracin no significa la correcta calibracin de usuario, por ese
motivo OpenNI cuenta con una bandera dentro de este evento que indica si la
calibracin se completo correctamente, a partir del valor de esa bandera se
determina el comienzo del seguimiento de usuario y acceso a las coordenadas 3D
del mismo, en el caso de que el valor de la bandera sea verdadero se asume la
correcta calibracin del usuario. El mtodo encargado de comenzar el seguimiento
de usuario es Iniciar seguimiento, mtodo que de igual forma recibe el numero ID
de usuario a seguir, si el valor de la bandera que indica la correcta calibracin de
usuario es establecido es errneo, se debe repetir el proceso de calibracin a
partir de la peticin de la deteccin de pose de calibracin, llevndose a cabo este
proceso de forma iterativa hasta obtener una correcta calibracin del usuario. Los
factores que influyen para que la calibracin de usuario no se lleve a cabo de
forma correcta se deben a una mala imitacin de la pose de calibracin o a que el
usuario deje de realizar la pose de calibracin antes de completarse el proceso,
normalmente la calibracin de usuario es completada de forma correcta en menos
de dos segundos. La imagen 4.13 muestra la localizacin de cada uno de las
articulaciones despus del proceso de calibracin, se puede observar que las
coordenadas de localizacin de los articulaciones se encuentran alineadas con los
pixeles de la imagen RGB, entonces surge una nueva pregunta: como alinear las
coordenadas de un pixel de la imagen RGB con las coordenadas de profundidad?,
el sensor de profundidad entrega coordenadas dentro del plano tridimensional del
mundo real( es decir del plano 3D en las superficie que se proyectan los puntos
infrarrojo), estas coordenadas se alinean mediante el proceso de calibracin.

,5






*(/ -eleccin de las articulaciones a utili&ar
Una vez que se realiza el seguimiento de usuario se puede tener acceso a todos
los datos que el sensor entrega para las articulaciones del usuario: coordenadas
(x,y,z), y rotacin de las articulaciones.

En la tabla 4.3 se muestran las articulaciones o puntos seleccionados para trabajar
nicamente con el movimiento del brazo derecho del usuario. El motivo de utilizar
la extremidad derecha es debido a que la mayora de personas son diestras,
aunque sin ningn problema podra implementarse el control para personas
zurdas. La seleccin de estas articulaciones es relacionada con el algoritmo para
calcular los movimientos, lo que permite omitir las articulaciones sobrantes
disminuyendo nuestro tiempo de procesamiento por cada trama adquirida del
sensor, tambin se obtiene como ventaja la disminucin de la distancia requerida
del usuario con referencia al sensor, no necesitamos abarcar la lnea de vista del
sensor con todo el cuerpo, debido a que no se utilizan articulaciones de la parte
inferior del cuerpo como rodillas o pies.
6abla %. 3 +untos utili&ados del usuario.






Hombro derecho
Cadera derecha
Codo derecho
Mano derecha
Mano izquierda
Cuello
Cabeza
4i'ura %.13 "lineacin de las articulaciones
ad7uiridas con ima'en !G#.

,1

*(: C9lculo de movimientos del bra&o del usuario
Identificar un usuario y poder realizar un seguimiento 3D de las articulaciones
mencionadas contiene grandes ventajas dependiendo la aplicacin que se est
desarrollando y dependiendo de los algoritmos que se realicen. El seguimiento de
usuario se puede utilizar tanto para la deteccin de gestos realizados por el cuerpo
o para imitar los movimientos que el usuario realiza y reproducirlos en tiempo real.
Para la implementacin de nuestro brazo robtico, necesitamos enviar desde la
computadora haca microcontrolador, los datos de actualizacin de los
movimientos de los motores por cada imagen recibida. Para obtener cada
movimiento de las articulaciones del brazo del usuario se utiliza cinemtica directa,
la cual utiliza las coordenadas otorgadas por el sensor y calcula los movimientos
del brazo.

Cinemtica Directa para clculo de dos grados de libertad
La 'cinemtica' es una rama de la fsica que estudia las leyes del movimiento
(cambios de posicin) de los cuerpos, sin tomar en cuenta las causas (fuerzas)
que lo producen, limitndose esencialmente, al estudio de la trayectoria en funcin
del tiempo. La aceleracin es el ritmo con que cambia su rapidez (mdulo de la
velocidad). La rapidez y la aceleracin son las dos principales cantidades que
describen cmo cambia su posicin en funcin del tiempo. La idea principal de
utilizar cinemtica para los clculos, es nicamente obtener los ngulos que
forman las extremidades del brazo del usuario a partir de las articulaciones
tomadas como referencia para el movimiento. La velocidad y aceleracin de la
trayectoria del brazo dependen de la rapidez con la que el usuario efecta los
movimientos.
Las articulaciones del usuario se pueden describir como un punto dentro de un
espacio de coordenadas), el cual puede ser representado por un vector que
contiene una posicin y una orientacin con respecto a un plano. En este caso el
plano a considerarse es el plano 3D donde son proyectados los patrones del
sensor de profundidad. La posicin(x,y,z) de un punto dentro del plano 3D se
puede expresar mediante la ecuacin 4.1 .
=
x
X +
y
Y +
z
Z (Ecuacin 4.1)

,2

Donde
x,

y
y
z
denotan los componentes del vector dentro del plano 3D, a
travs de los ejes de referencia. La posicin de puede ser compactada y
representada como un vector 3*1, como se muestra en la ecuacin 4.2.
_
px
py
pz
_ (Ecuacin 4.2)
En la figura 4.14 se representa la posicin y orientacin de un punto
x
dentro de
un espacio 3D, y se proyecta un vector desde el origen (en este caso es el sensor
Kinect) hacia la articulacin o punto del cuerpo, se puede observar que la
orientacin del punto localizado dentro del rango del sensor, esta referenciado con
respecto al eje z, que corresponde al eje que se representa la distancia entre el
sensor y el usuario.












A1, A2 y A3 representan los ngulos que forma el vector con respecto a cada eje
del plano 3D. Los puntos se relacionan con cada movimiento que ejecuta el
usuario que a su vez se considera un cuerpo rgido debido a que las dems
partes de su cuerpo se pueden mantener estticas mientras alguna parte en
especifica se mueve, que no es lo mismo que el usuario no pueda moverse de
lugar dentro del plano 3D al estar controlando el robot. Utilizando este concepto se
lleg a la conclusin de implementar cinemtica directa para la obtencin de los
ngulos, esto implica que se debe realizar el clculo de los movimientos de
4i'ura %. 1% !epresentacin de un vector formado por un punto o articulacin del usuario dentro del
plano del sensor.

,3

nuestra estructura (brazo de usuario) para conocer la trayectoria y llegar a un
punto desconocido, punto que se conoce normalmente en la mayora de los
brazos manipuladores pero se desconoce la trayectoria, misma que tiene que ser
calculada y precargada dentro del robot para que cada grado de libertad ejecute el
movimiento correspondiente. En nuestro cdigo de aplicacin, el punto final a
donde debe llegar el brazo robtico es desconocido para el programa, debido a
que el movimiento que realizar el brazo robtico ser controlado por el usuario,
siendo este quien determine a travs de los movimientos, la posicin final del
brazo.
La cinemtica directa es utilizada para determinar los ngulos de movimiento de
cada grado de libertad del robot a partir de los movimientos del mismo, en nuestro
caso inicialmente el robot no esta en movimiento, ya que no es un robot
autnomo, entonces surge aqu la pregunta Cmo se aplica la cinemtica directa
en el movimiento del brazo robtico?, para aplicar cinemtica directa se emplea
una analoga entre el brazo del usuario y el brazo robtico, una vez que el usuario
lleve a cabo la pose de calibracin el programa podr realizar los clculos del
movimiento del robot, los cuales imitarn a los del usuario, es por eso que el
usuario debe realizar el primer movimiento, que determina la posicin inicial del
robot, y a partir de ella poder conocer la posicin de cada articulacin del robot y
seguir con el movimiento. Para mover una articulacin del brazo robtico se toman
como referencia tres articulaciones del usuario por cada grado de libertad, las
cuales forman vectores, de los cuales se conoce la posicin y orientacin de cada
uno de ellos mediante las coordenadas proporcionadas por el sensor y por lo tanto
hacen posible la aplicacin de formulas de cinemtica directa.
La forma en la que se obtiene el movimiento del brazo del usuario utilizando
cinemtica directa se explica con siguiente ejemplo: supongamos que el usuario
levanta la mano derecha a la altura de su hombro derecho, las coordenadas
(x,y,z) de la mano forman un vector, el cual puede tomar como origen cualquier
otro punto dentro del plano 3D, en este caso supongamos que el origen es el
punto(x,y,z) que corresponde al punto de localizacin del hombro, la cinemtica
directa debe aplicarse tomando dos vectores como referencia y partir de ah poder
obtener el ngulo que existe entre ellos, entonces formamos un primer vector
desde el hombro hasta la mano, despus se debe tomar otro vector como
referencia para encontrar el ngulo, el punto que se toma para referenciar el
vector faltante es la posicin (x,y,z) de la cadera, a partir de ah se forma el nuevo
vector cuyo origen debe ser el mismo que el primer vector para poder encontrar el
ngulo que forman, de esta manera podemos deducir del ejemplo que el ngulo
formado entre el brazo con la mano extendida y la cadera, es un ngulo de 90

,%

grados, de esta misma forma si el usuario levanta la mano, el ngulo ser
afectado por dicho movimiento generando cambios en la posicin de los vectores.
En la figura 4.15 se ejemplifica el ngulo formado por dos vectores
correspondientes a las articulaciones del usuario, el origen de ambos vectores es
el hombro derecho del usuario, posicin que puede cambiar pero no afecta el
ngulo formado por los vectores si estos no cambian de posicin, el nico valor
que puede afectar el ngulo formado por los vectores es el del codo derecho,
debido a que cambia la posicin del vector 1 y como consecuencia aumenta o
disminuye el ngulo formado con el vector 2.

A partir de este ejemplo, podemos definir las articulaciones que formarn los
vectores que darn movimiento al brazo robtico, el cual estar dotado de tres
grados de libertad. La imagen 4.16 muestra los vectores que forman los puntos
que sern tomados en cuenta para obtener dos vectores por cada grado de
libertad y su respectivo ngulo, en la imagen solo se muestran dos ngulos
encontrados, debido a que el tercer ngulo es obtenido con otro mtodo que se
explicar ms adelante. Los puntos o articulaciones elegidos del esqueleto del
usuario para formar los vectores de movimiento son: hombro derecho, cadera
derecha, codo derecho y mano derecha. El motivo por el cual se eligen estos
puntos es debido que la posicin del vector que forma cada uno de ellos depende
de la posicin de otro, si la mano derecha del usuario es levantada,
4i'ura %.1) In'ulo formado por dos vectores proyectados en las articulaciones del usuario.

,)

automticamente la posicin tanto del codo y de la mano cambian de valor, como
consecuencia el ngulo formado por ambos vectores cambia tambin de valor.
Cabe destacar que todos los vectores formados se proyectan en un plano
tridimensional, por lo tanto los ngulos calculados siempre cambiarn de
referencia dependiendo el eje del plano al que estn orientados, debido a que la
obtencin del tercer ngulo es nicamente referenciado al eje z, esto impide la
rotacin del usuario dentro del plano 3D que proyecta el Kinect, lo que implica que
el usuario en todo momento debe tener el cuerpo en posicin de frente dirigida al
sensor, sin poder girar hacia otro eje de referencia.

En la figura 4.16 se observa como se forman dos ngulos con tres vectores, los
cuales tienen al hombro como origen, esto implica que el movimiento de los
vectores puede desarrollarse dentro de todo el espacio 3D y no solo en un espacio
2D de frente al sensor, debido a que el punto que define el origen(hombro
derecho) no cambia de posicin mientras la mano o codo derecho si pueden
hacerlo, otro punto que tampoco cambiar de posicin es la articulacin
correspondiente a la cadera derecha, por lo cual los nicas articulaciones que
influyen en el cambio del valor de ngulo que forman los vectores son los
articulaciones correspondientes a la mano derecha y codo derecho.
El siguiente paso es calcular los mencionados ngulos que forman los vectores ya
definidos. Las coordenadas proporcionadas por Kinect para el seguimiento de
usuario varan acorde a la distancia en la que se encuentre el usuario, tanto para
el eje x, y, z, es por eso que el clculo de los ngulos del movimiento del brazo
4i'ura %. 1, In'ulos a calcular para el movimiento del bra&o.

,,

debe contemplar que estas coordenadas no tendrn siempre un rango fijo de
valores y no sern positivas en todos los casos. En la figura 4.17 se muestra la
proyeccin de dos vectores dentro de un plano 3D y la formula definida dentro del
clculo vectorial para obtener el ngulo que se forma entre ambos.






La formula para calcular en ngulo formado por los vectores v y w se define a
continuacin:
0=cos
-1

vw
]v] ]w]
(Ecuacin 4.3)
La ecuacin corresponde al coseno inverso del producto punto de los vectores V
y W, dividido entre el producto del modulo de ambos vectores. El valor de este
ngulo es obtenido computacionalmente en radianes, por lo que se debe aplicar
otra formula que permita generar el valor obtenido en grados. Esta formula es
aplicada directamente en nuestro algoritmo para obtener los ngulos de
movimientos formados por nuestros tres vectores ya establecidos, pero surge un
nuevo problema: la formula es utilizada en vectores que son proyectados desde el
origen hacia un punto p, retomando la figura 4.17 nuestros vectores dibujados
dentro del esqueleto del usuario tienen como origen al hombro derecho del
usuario, sin embargo el origen de referencia de las coordenadas que se adquieren
esta determinado por la posicin del Kinect debido a las coordenadas entregadas
por el sensor tienen como origen al mismo, significa que los vectores no se
encuentran proyectados desde el origen. La formula que resuelve este problema,
es la traslacin de vectores al origen, la cual se puede representar en la figura
4.18.

4i'ura %. 1. In'ulo formado por dos vectores en un espacio tridimensional.

,.







Como podemos observar, solo necesitamos realizar la resta de los vectores que
se proyecten del origen hacia los puntos extremos del vector que necesitemos
trasladar, en nuestra aplicacin conocemos los puntos que forman cada uno de los
vectores, adems de que podemos proyectar vectores desde el origen hacia el
punto que forma nuestro vector deseado, por lo tanto es posible realizar la
traslacin de los vectores que deseemos, hacia el origen.
A partir de este procedimiento podemos aplicar la ecuacin 4.3 y podemos
calcular nuestros dos primeros ngulos que determinan dos de los tres grados de
libertad del robot, el algoritmo para implementar las formulas anteriores y obtener
en grados el respectivo ngulo, se explica en la figura 4.19y se implementa en el
anexo 4.6.










4i'ura %. 11 6raslacin de un vector <acia el ori'en.
4i'ura %. 1/ 8lculo de 8n'ulo entre dos vectores.

,1

Antes de poder aplicar este algoritmo es necesario trasladar los vectores que se
ocupen hacia el origen, en nuestro caso los vectores a ocupar se definen en la
tabla 4.4 .

6abla %. % Kectores utili&ados para el c8lculo de los 8n'ulos.
Nombre Punto de origen Punto destino
Vector 1 Hombro derecho Cadera derecha
Vector 2 Hombro derecho Codo derecho
Vector 3 Codo derecho Mano derecha
Vector 4 Codo derecho Hombro derecho

A partir de esta tabla se deduce que se necesita realizar la traslacin de cuatro
vectores hacia el origen, entonces se aplica la formula que traslada un vector a
partir de dos vectores que se proyecten del origen al destino, en nuestra aplicacin
no todos los vectores se trasladan de la misma manera debido a que el ngulo
tomado como referencia para cada uno de ellos se toma con referencia a distinto
vector, las traslaciones que se debe realizar son las siguientes:
Vector 1: vector del origen a la cadera derecha - vector del origen al hombro
derecho.
Vector2: vector del origen al codo derecho - vector del origen al hombro
derecho.
Vector 3: vector del origen a la mano derecha - vector del origen al codo
derecho.
Vector 4: vector del origen al hombro derecho - vector del origen al codo
derecho.
Como se puede observar en dos vectores se utilizaron los mismos puntos, pero la
traslacin se hizo de diferente forma para cada uno de ellos, esto se debe a que el
ngulo que se forma para los cuatro vectores toma a un eje distinto como
referencia, el primer ngulo toma como referencia al eje formado por la cadera y
hombro derecho, mientras que el segundo toma el eje formado por el hombro
derecho y el codo derecho, esto implica que en el primer ngulo el origen sea el
hombro, mientras que el segundo tenga como origen al codo derecho, es por eso
que se tienen que trasladar de diferente manera para poder utilizarlos. Con estos
datos podemos implementar la funcin del algoritmo de la figura 4.19 y poder
obtener los movimientos de dos grados de libertad de nuestro brazo.

,/

O(te!ci! del tercer ,rado de li(ertad utili9a!do u!a
1atri9 rotacio!al
El ltimo ngulo de movimiento del brazo de usuario es definido por la rotacin del
hombro derecho del usuario, movimiento que se define tambin en grados,
desafortunadamente OpenNI no entrega el resultado de esta rotacin en grados,
la forma en la que se estructuran estos datos es dentro de una matriz de rotacin.
Los ngulos Euler representan la rotacin de un cuerpo en movimiento con
referencia a un sistema de coordenadas. En la figura 4.20 se muestra un ejemplo
de los ngulos que forma un cuerpo en movimiento con respecto a otro sistema
de referencia dentro de un plano tridimensional.








Los grados Euler pueden ser representados por una matriz de rotacin 3*3 que
contiene la rotacin de un marco de referencia fija, con respecto a otro marco de
referencia en movimiento, esto se puede explicar en la figura 4.21 ,en donde se
tiene un plano fijo denotado por los ejes X1,Y1,Z1, y otro X0,Y0,Z0 que contiene
un ngulo de rotacin 0 con respecto al primero, este desplazamiento solo
interviene en los ejes X y Y, es decir: si proyectamos un vector dentro del espacio
X0,Y0,Z0, este vector tendr el mismo componente tanto en Z0, como en Z1. Para
poder representar un vector del plano X0,Y0.Z0 se utiliza una proyeccin de
vectores denominada proyeccin ortogonal, la cual se representa con las matrices
de las ecuaciones 4.4, 4.5 y 4.6 para cada eje de rotacin.
4i'ura %.25 In'ulos 7ue forma la rotacin de un cuerpo en un
sistema de coordenadas con respecto a otro A1.B.

.5

R
x
(0)=[
1 u u
u cos0 -scn0
u scn0 cos0
] (Ecuacin 4.4)
R
y
(0)=[
cos0 u scn0
u 1 u
-scn0 u cos0
] (Ecuacin 4.5)
R
z
(0)=[
cos0 -scn0 u
scn0 cos0 u
u u 1
] (Ecuacin 4.6)







Donde R
x
(0), R
y
(0) y R
z
(0), representan la proyeccin de la rotacin del ngulo 0
con respecto a cada eje, es decir en RX(0) se utiliza al eje x como pivote para la
rotacin de los otros planos, de igual forma se utiliza el eje y para RY(0) y el eje Z
para RZ(0). Estas tres proyecciones permiten describir un cuerpo que rota en tres
ngulos sobre el eje X,Y y Z respectivamente. Para obtener la rotacin de los tres
ngulos tenemos que multiplicarlos en determinado orden dependiendo la
aplicacin en la que se vayan a utilizar. Para este trabajo se necesita obtener el
ngulo de rotacin alrededor del eje z, del hombro derecho , utilizando como
referencia el plano de la figura 4.21 ,debido a que OpenNI entrega la rotacin de
una articulacin con respecto a la posicin T del usuario la cual se define en la
figura 4.22, la rotacin de una articulacin esta en base a esta pose, en la imagen
de la figura 4.23 se muestra que al mover el brazo fuera del sistema de referencia
se obtiene una rotacin del punto ubicado en la articulacin, el cual corresponde a
la articulacin del hombro derecho.
4i'ura %. 21 -istema de rotacin de un cuerpo con referencia a un plano.

.1








El algoritmo para calcular los tres ngulos de rotacin de una articulacin se define
por la multiplicacin de las tres matrices RX(0), RY(0) y RZ(0), en donde se
obtiene una tercer matriz, que es la matriz proporcionada por las libreras de
OpenNI. La siguiente matriz muestra el resultado final de multiplicar las tres
matrices de rotacin.
[
ruu ru1 ru2
r1u r11 r12
r2u r21 r22
]= [
CyCz +SxSySz CzSxSy - CySz CxSy
CxSz CxCz -Sx
-CzSy + CySxSz CyCzSx +SySz CxCy
](Ecuacin 4.7)
En donde:
Cx=cos0x (Ecuacin 4.8)
Cy=cos0y (Ecuacin 4.9)
Cz=cos0z (Ecuacin 4.10)
Sx=sen0x (Ecuacin 4.11)
Sy=sen0y (Ecuacin 4.12)
Sz=sen0z (Ecuacin 4.13)
Esta matriz describe la rotacin de los tres ngulos de la articulacin denotados
por valores flotantes, para obtener el valor en radianes de estos ngulos de
rotacin se toman en cuenta tres casos:
4i'ura %. 22 +ose 6 7ue es el sistema de referencia
para la rotacin de una articulacin A13B.

4i'ura %. 23 -istema de referencia para la rotacin del
<ombro derec<o.

.2

1. Si 0
y
pertenece a (-
n
2
,
n
2
) entonces cy 0, cy(sx,cx)=(-r12,r22), por lo tanto
los ngulos de rotacin se obtienen de la siguiente manera:
0y = asin(r02), 0x = atan2(-r12, r22), 0z = atan2(-r01, r00) (Ecuacin 4.14)
2. Si 0y=
n
2
, entonces sy=1 y cy=0, en este caso la obtencin de ngulos es:
0y =
n
2
, 0z + 0x = atan2(r10, r11) (Ecuacin 4.15)
3. En el caso de que 0y=-
n
2
entones sy=-1 y cy=0, para estas condiciones los
ngulos se obtienen:
0y = -
n
2
, 0z -0x = atan2(r10, r11) (Ecuacin 4.16)
El algoritmo de la figura 4.24 implementa las condiciones de la factorizacin de la
matriz de rotacin entregada por cada articulacin del esqueleto, en donde se
determina un ngulo por cada eje de rotacin, tomando en cuenta el plano de la
posicin t del usuario, el resultado es entregado en grados, el cdigo esta
disponible en el anexo 4.7.
4i'ura %. 2% "l'oritmos para obtener el 8n'ulo de rotacin de una articulacin.

.3


*(; Deteccin de gesto de finali&acin
A partir de la calibracin de usuario se establece el inicio del movimiento del brazo
robtico, pero el seguimiento de usuario y la obtencin de los ngulos de
movimientos del brazo son calculados de forma continua hasta que se le indique al
sensor que deje de generar las imgenes de profundidad, es por eso que se
incluye dentro de la adquisicin de datos un gesto hecho por la mano izquierda del
usuario para finalizar la aplicacin y por lo tanto detener el movimiento del robot.
Las libreras OpenNI ofrecen la deteccin de gestos realizados por cualquiera de
las dos manos de un usuario detectado. Estos gestos pueden ser realizados antes
o despus de la calibracin del usuario, los gestos incluidos dentro de estas
libreras para ser detectados son:
saludo: realizar un movimiento similar al de un saludo con una de las dos
manos.
click: extender la mano del usuario con referencia al sensor Kinect y
despus regresarla al primer lugar donde estaba antes del movimiento.
circulo: mover la mano en forma circular hacia cualquier lado.
De estos tres gestos provedos por OpenNI, eleg el gesto de saludo debido a que
su movimiento no requiere extender demasiado los brazos, basta con simular un
saludo tpico de hola con la mano para que el gesto sea detectado. La deteccin
del gesto basa su funcionamiento en eventos que se generan en las libreras de
OpenNI, cuyo diagrama de flujo de los procesos que lleva la deteccin del gesto
se muestra en la figura 4.25. El inicio marca un movimiento de la mano que puede
propiciar que el usuario realice el gesto indicado al sensor, despus de que
efectivamente el usuario lleva acabo el gesto se genera el evento, en donde se
realiza un seguimiento de la mano y se puede acceder o no a las coordenadas
(x,y,z) de la mano que realiz el gesto, si el seguimiento de la mano es perdido por
el sensor de profundidad, se genera un nuevo evento, el cual realiza una peticin
para la nueva deteccin del gesto, a partir de entonces el usuario tendr que
realizar nuevamente el gesto.




.%




















4i'ura %. 2) Dia'rama de flujo para la deteccin de 'estos con Open>3.

.)

*(4 Deteccin de dedos para apertura y cierre de la
pin&a
La idea de poder controlar el brazo robtico a travs del Kinect es no tener que
utilizar algn tipo de interfaz de usuario como: botones, palancas, mouse, etc., es
por eso que todo el control del movimiento del brazo, incluyendo el cierre y
apertura de la pinza, debe ser controlado por los movimientos del brazo del
usuario.
Desafortunadamente dentro de las articulaciones o puntos de los cuales el
sensor Kinect realiza un seguimiento en un plano 3D, no se encuentran
articulaciones de los dedos, el punto ms cercano a estos es la mano, es por eso
que para permitir un control de la pinza que se efecte a travs de la apertura o
cierre de la mano del usuario se necesit utilizar otra librera que no esta incluida
en las libreras de OpenNI, esta librera es denominada EmguCV, la cual
contiene herramientas que facilitan algoritmos y procesos utilizados en visin por
computadora. EmguCV es un conjunto de libreras para programacin en lenguaje
C# que implementa todas las funciones y algoritmos utilizados en el paquete de
libreras de visin por computadora denominado OpenCV. Estas libreras de
visin por computadora son utilizadas en este proyecto debido a que facilitan la
implementacin de distintos algoritmos de visin por computadora, adems de que
aceleran el procesamiento de imgenes debido a que utilizan memoria del
sistema que ayuda a procesar las imgenes de forma ms rpida. EmguCV
cuenta tambin con ejemplos que utilizan imgenes de profundidad o imgenes a
color como las que entrega el Kinect, es por eso que se proyectan como la mejor
opcin para tratar las imgenes del sensor para esta aplicacin.
Como ya se mencion, Kinect no puede entregar de ninguna manera un
seguimiento en el plano 3D de las articulaciones que forman los dedos de la mano
del usuario, ah surgi un problema para el desarrollo de este proyecto.
Realizando investigacin acerca del tratamiento de imgenes de profundidad y a
color a travs de Kinect, se encontraron dos posibles soluciones para la deteccin
de la apertura y cierre de la mano de un usuario a partir del anlisis y tratamiento
de imgenes en dos dimensiones mediante el sensor Kinect. La primera fue
aplicar un algoritmo de deteccin de piel en una imagen a color RGB y a partir de
las formas detectadas aplicar otros algoritmos que identifican la forma de una
mano. La segunda opcin fue realizar un filtrado de los pixeles que contemplen un
rango de la mano dentro de la imagen de profundidad del sensor Microsoft Kinect,
y posteriormente aplicar el mismo algoritmo de deteccin de una mano que se
aplica en imgenes a color. Para este proyecto se descart utilizar un algoritmo

.,

que segmentara una imagen a color para formar una imagen de la mano del
usuario a partir de la deteccin del color de la piel utilizando la cmara RGB del
Kinect, debido a que no todas las personas presentan el mismo tono de piel,
adems de que las imgenes RGB capturadas por el sensor pueden llegar a
capturar otros colores de objetos que se confundan con el color de la piel del
usuario. El objetivo de utilizar el sensor Kinect es aprovechar al mximo los
recursos que ofrece, por lo tanto el algoritmo implementado para la deteccin del
gesto que implica la apertura o cierre de una mano del usuario se basa en la
extraccin de una imagen de profundidad del recuadro que cubre nicamente la
mano izquierda del usuario.
El procedimiento de deteccin del gesto de apertura o cierre de la pinza se
describe a continuacin:
Extraccin de imagen de profundidad basndose nicamente en la
regin de inters que corresponde a la mano izquierda del usuario
El algoritmo que implementa la deteccin del gesto con la mano requiere
nicamente trabajar la regin de la imagen de profundidad que contemple el rea
de la mano del usuario. Desafortunadamente ni el sensor Kinect ni las libreras de
OpenNI entregan o permiten saber que pixeles corresponden a la mano del
usuario, el mapa de profundidad solo contiene valores que indican la distancia del
usuario u objetos y como dato extra informan si el pixel corresponde a la imagen
del usuario o no, pero no especifican la correspondencia de ese pixel a una parte
especifica del cuerpo del usuario como las manos. La forma propuesta en esta
tesis para obtener dicha regin de inters que pueda comprender el rea de la
mano del usuario es la siguiente: tomando como referencia que aproximadamente
la distancia entre la cabeza y el cuello de un usuario puede ser la distancia del
lado de un cuadrado que contemple el rea de la mano del usuario, entonces se
establece dicha medida como el lado del cuadrado del rea de la mano. La figura
4.26 muestra las medidas que se proponen para obtener una regin de inters que
abarque el rea de la mano izquierda del usuario.





4i'ura %. 2, Distancia de la cabe&a al cuello@ similar a la distancia de lo lar'o de la mano.

..

En la figura 4.26 se muestra que aproximadamente la distancia de la cabeza al
cuello del usuario (distancia de A hacia B ), es aproximadamente la distancia del
largo de la mano(distancia de C hacia D ), a partir de esa medida se propone un
cuadrado que tenga esas medidas en un lado para formar el rea de la mano del
usuario, a partir de estas medidas surge una nueva pregunta: Cmo se obtiene la
regin de inters de la mano dentro de una imagen a partir de las medidas
establecidas?, el sensor Kinect entrega las coordenadas de las articulaciones del
usuario en mm, lo que implica que se puede obtener la distancia entres dos
articulaciones en mm, dicha unidad de medida no servira de mucho en imgenes
que son procesadas por algoritmos de computadora, debido a que el rango de
magnitud para una imagen es de 640*480 pixeles, a diferencia del rango del
sensor que entrega datos de hasta 10000mm valores que pueden ser positivos y
negativos, implementar un algoritmo que convierta estas coordenadas del mundo
real, al mundo de los pixeles, puede llegar a ser complicado y como se mencion
anteriormente, afectara en el tiempo de procesamiento, afortunadamente OpenNI
contiene una funcin dentro de sus libreras que convierte las coordenadas del
mundo real entregadas por el Kinect, a coordenadas proyectables en un sistema
de referencia como un monitor, es decir: coordenadas de rango de 0 a 640 para el
eje X, y de 0 a 480 para el eje Y. A partir de esta funcin se mide la distancia en
pixeles entre la cabeza del usuario y su cuello. Aplicando la ecuacin 4.8 se
determina la distancia entre dos puntos dentro de un plano 2D que corresponde al
plano de la imagen de profundidad que entrega el Kinect.
JAB = (X2 - X1)2 +(Y2 - Y1)2 (Ecuacin 4.17)

Esta distancia corresponde a la distancia entre la cabeza y el cuello del usuario,
sobre coordenadas proyectables, obteniendo esta distancia podemos capturar un
cuadro que corresponda a el rea que abarca la mano del usuario. Para
determinar el centro de ese cuadro que ser nuestra regin de inters, se toman
las coordenadas que Kinect proporciona de la mano derecha, es decir, las
coordenadas (x,y) de la mano izquierda del usuario se convierten a coordenadas
proyectables para nuestra imagen y por lo tanto determinan el centro de nuestra
regin de inters. En la figura 4.27 se muestra la regin que se obtiene en base a
la medida tomada de la cabeza al cuello del usuario.



4i'ura %. 2. !e'in de
inter(s EamarilloF de la
ima'en de profundidad.

.1

Filtrado de pixeles correspondientes nicamente a la forma de la mano
del usuario
Aplicar el procedimiento para obtener un rea que es referente a nuestra regin de
inters, solo permite enfocar nuestro anlisis en una cierta parte de la imagen de
profundidad, pero todava no se obtiene la imagen en 2D correspondiente a la
forma de la mano. Para realizar este proceso es necesario hacer un filtrado de los
pixeles correspondientes a la forma de la mano, como ya se ha dicho nuestro
algoritmo se basa en la imagen de profundidad, a partir de esta imagen, se
seleccionarn nicamente los pixeles que se encuentren dentro de un rango que
abarquen el grosor de una mano sobre el eje z, es decir los valores de profundidad
mayores a la localizacin de la mano izquierda sobre el eje z sern descartados, y
tambin los que se encuentren menor a ese rango, la figura 4.28 muestra como se
lleva a cabo el proceso de filtrado para descartar los pixeles y obtener nicamente
los correspondientes a la mano izquierda del usuario.







Una vez completado este proceso se obtiene una figura dentro de nuestra imagen
parecida a la forma de una mano, cabe destacar que esta imagen es analizada en
un plano en dos dimensiones, por lo que carece de todas las ventajas que se
tienen al trabajar con imgenes 3D, ventajas que tienen los datos entregados por
el sensor. El algoritmo de filtrado nicamente coloca el valor de los pixeles que
se encuentren dentro del rango del ancho de una mano en 255, y los pixeles que
se encuentren fuera de ese rango sobre el eje z, son colocados en 0, permitiendo
mantener nicamente los pixeles que dan forma a la mano del usuario. Debido a
que la regin de inters es calculada de forma propuesta y con un tamao no
exacto, la imagen resultante del proceso de filtracin puede no corresponder a la
imagen de solo la mano, y tomar tambin una parte del brazo dentro de esta
4i'ura %. 21 +i=eles 7ue ser8n tomados en cuenta para la forma de la ima'en.

./

forma, hecho que afecta de forma mnima en el algoritmo de deteccin de apertura
o cierre de la mano.
Procedimiento para detectar formas convexas dentro de la nueva
imagen, lo que es similar a la forma de los dedos
Una vez que se tiene una imagen en escala de grises, debido a que se trabaja con
imgenes de profundidad, se requiere encontrar todas aquellas formas que
puedan parecerse a la forma de un dedo, en sta parte es donde se implementan
las libreras de cdigo abierto de algoritmos de visin por computadora
denominado EmguCV. EmguCV contiene libreras que implementan algoritmos
sobre imgenes que se encuentren en el espacio RGB en escala de grises,
adems aceleran la velocidad de procesamiento de las imgenes, factor que es
vital para esta aplicacin.
Una figura convexa se define de la siguiente manera:
Si para cada par de puntos de C, el segmento que los une est totalmente incluido
en C, es decir, un conjunto es convexo si se puede ir de cualquier punto a
cualquier otro en lnea recta, sin salir del mismo.
La figura 4.29 muestra el ejemplo de una figura convexa





Como se puede observar, dentro de la figura 4.29 X, los puntos denotados desde
A hasta B, se encuentran unidos por una lnea recta hacia otro punto que
pertenece al conjunto, por ejemplo: el punto A, al punto B, el C al D, etc, en ningn
caso, la lnea que los une sale del rea de la figura, es por eso que se define como
figura convexa, caso contrario de la figura 4.29 Y, en la cual algunas lneas
trazadas dentro de sus puntos , salen del rea de la figura.

4i'ura %. 2/ 4i'ura %/ 4orma conve=a P@ y forma no conve=a J

15

Establecido este concepto procedemos a aplicar una funcin de EmguCV que
aplica un algoritmo que encuentra las formas convexas de nuestra imagen, la cual
antes fue procesada en los anteriores algoritmos, esta funcin de la librera de
EmguCV es denominada Obtener defectos convexos, la cual se encarga de
detectar las formas convexas de una figura que se encuentre dentro de nuestra
imagen, y entregar las coordenadas x,y de los siguientes puntos:

Inicio de la figura convexa.
Profundidad de la figura convexa

Apoyndonos de este algoritmo podemos encontrar las puntas de todos los dedos
de la mano, y de otras partes de la mano que el algoritmo considera convexos,
aunque no se traten de formas que pertenecen a la de un dedo, estas partes sern
descartadas en el proceso que se explicar mas adelante. Una vez que se
encontraron todos esos puntos, se guarda la ubicacin (x,y) de todas las formas
convexas, para poder implementar el procedimiento final.
Identificar cuando el usuario abre o cierra la mano
Par poder abrir o cerrar la pinza del brazo robtico, es necesario detectar cuando
un usuario abre o cierra la mano. Los procesos explicados anteriormente permiten
tener la ubicacin de puntos que puedan pertenecer a la forma de los dedos de la
mano, a partir de esos datos, se implementa un procedimiento para conocer si el
usuario esta abriendo o cerrando la mano. Este procedimiento consiste en obtener
mediante el mtodo Obtener la mnima rea de EmguCV, que cubre la figura de
la imagen, en nuestro caso la forma de la mano, esta funcin devuelve un
rectngulo que cubre al rea comprendida por la figura encontrada dentro de la
imagen a la que se le aplica esta funcin. En la figura 4.30(a) se dibuja este
rectngulo que marca el rea que cubre la figura encontrada. El siguiente paso es
dibujar otro rectngulo que abarque la mitad del rectngulo encontrado
anteriormente, con el objetivo de trazar el rectngulo a un rea que
aproximadamente sea el rea que cubre la palma de la mano, en la figura 4.30(b)
se muestra el polgono.







EaF
EbF
4i'ura %. 35 EaF !ect8n'ulo 7ue cubre el 8rea.
EbF!ect8n'ulo 7ue cubre la mitad del 8rea de la fi'ura.

11

Una vez que tenemos trazadas estas figuras dentro de nuestra imagen, el
siguiente paso es aplicar las condiciones de nuestro algoritmo que permiten
detectar el nmero de dedos que el usuario extiende con la mano izquierda, estas
condiciones se basan tambin en la medicin de distancia entre el centro de la
palma la cual se puede obtener mediante la ubicacin (x,y) del sensor, y la punta
de los dedos de la mano que como ya se mencion, se puede tambin obtener. La
condicin para realizar el conteo del nmero de dedos es la siguiente: si la
distancia del centro de la mano a la punta de los dedos es mayor a la distancia del
centro de la mano a la frontera del rectngulo que abarca la mitad del rea de la
figura, se considera que el usuario a extendido el dedo, en caso contrario se
considera como si el dedo estuviese doblado. A partir de esta condicin se hace
un anlisis de todas las formas convexas encontradas y se realiza un conteo de
aquellas que cumplan la condicin, sin embargo tambin se establece otra
condicin: las coordenadas (x,y), de las puntas de los dedos deben de ser
menores que la frontera del rectngulo que cubre el rea debido a que se
considera que el usuario siempre mantiene la mano con los dedos en direccin
hacia arriba, en el proceso de encontrar formas convexas, la forma de la imagen
que es analizada puede tener formas convexas que no correspondan a los dedos,
denominado tambin como ruido, es por eso que mediante esta condicin se
evitan errores de ese tipo.

El procedimiento de deteccin de dedos no es del todo preciso porque puede
detectar formas en la imagen y clasificarlas como dedos aunque no lo sean, o
puede verse afectado por la distancia en la que se encuentra el usuario con
respecto al sensor, lo cual causa que la regin de inters sea muy pequea dentro
de la imagen de 640*480 pixeles y el algoritmo no obtenga de forma correcta las
formas de las imgenes.

Para determinar si el usuario cerr o abri la mano, simplemente se hace un
intervalo en el conteo de los dedos extendidos detectados, si el contador indica
que se extendieron 4 o 5 dedos, se considera la mano abierta debido a que el
dedo pulgar es difcil de detectar dentro de este algoritmo. Si el contador indica 1
0 nmero de dedos, se contempla que el usuario ha cerrado la mano, de esas dos
formas se detecta el movimiento realizado por el usuario que contribuye al cierre o
la apertura de la pinza. El cdigo del procedimiento para detectar la apertura o
cierre de la mano se implementa en el anexo 4.8.






12

*(< 3nterfa& gr9fica de usuario

Como se mencion anteriormente, la interfaz grfica de usuario debe desplegar la
imagen a color y la imagen de profundidad del sensor, con el objetivo de que el
usuario pueda observar sus movimientos y saber que movimientos est realizando
sobre el robot. Adems de las imgenes que obtiene el sensor, la interfaz
despliega los ngulos que se envan haca el microcontrolador y despliega cuando
un usuario es o no detectado. Debido a que el brazo robtico es iniciado,
controlado y finalizado por los movimientos del usuario, el nico botn de la
interfaz grfica es el botn que se encarga de inicializar (encender) el sensor
Kinect , e iniciar la captura y procesamiento de los datos adquiridos por el sensor,
es decir el movimiento del robot inicia hasta que el usuario realiza la pose de
calibracin, pero los datos del sensor se procesan desde que es oprimido el botn
de iniciar. En la figura 4.31 se muestra la imagen la interfaz grfica de usuario de
la aplicacin, as como los controles que se encuentran dentro de ella y apoyan al
usuario en el control del robot.







3ma'en de profundidad y color.
Kalor de
8n'ulos
del robot.
Deteccin
de usuario.
3ma'en de la mano 7ue controla la pin&a.
4i'ura %. 31 3nterfa& 'r8fica de usuario de la aplicacin.

13

** +rogramacin del microcontrolador
+3C145*//6
El microcontrolador PIC18F4550 es el dispositivo de procesamiento encargado de
generar la seal para los servomotores que conforman el brazo robtico, el
PIC18f4550 debe generar la seal de los servomotores en tiempo real, es decir
que los motores se muevan al mismo tiempo, el motivo de generar la seal al
mismo tiempo se debe a que cuando se genera una seal para cada motor de
forma serial moviendo motor por motor, el movimiento del robot es lento en
comparacin de mover todos los motores en forma paralela, adems de que los
motores pueden perder el torque cuando se deja de generar la seal. Otro punto
importante es que la velocidad de los motores forma parte del proceso que
determina la velocidad de nuestro sistema y la respuesta dentro de los tiempos
establecidos para considerarse como un sistema en tiempo real.
Retomando las especificaciones del microcontrolador utilizado, una de las
herramientas del microcontrolador son los Temporizadores tambin conocidos
como Timers, los cuales sern utilizados para generar la modulacin por ancho
de pulso (PWM), de los motores del brazo robtico.
La transmisin universal serial sncrona y asncrona (USART), ser utilizada para
la recepcin de datos desde la computadora a travs del modulo serial bluetooth.
Otras caractersticas incluidas dentro de la programacin del PIC son la utilizacin
de puertos para enviar la seal a cada servomotor.
Para poder programar las tareas dentro del PIC y poder asignar los tiempos que
sean necesarios para realizarlas en tiempo simultneo, se deben enumerar las
prioridades de cada tarea, definiendo cual es ms importante para nuestro sistema
y cuales carecen de menor importancia. En la tabla 10 se enumeran las tablas de
acuerdo a la prioridad y duracin. Como se puede observar, las principales
prioridades del sistema, son la generacin de pulsos para los motores, el tiempo
que duran estas tareas varia de acuerdo a los grados que deba moverse cada
motor, es por eso que el tiempo de duracin puede variar, sin embargo estas
tareas son prioritarias para el sistema, debido a que si se deja de generar el pulso
para cualquier motor, ste perder el torque, ocasionando tal vez un error en el
sistema, por ejemplo: supongamos que el motor que genera el segundo grado de
libertad pierde el torque, entonces la fuerza de gravedad ocasiona que el eslabn
que pertenece al motor que une ese eslabn, ejerza una fuerza hacia abajo
provocando la inestabilidad o movimiento errneo del brazo.

1%

6abla %. ) +rioridades del sistema en tiempo real.
Tarea Prioridad Duracin
Motor 1( 1 gdl) 1 Ciclo de trabajo
Motor 2 (2 gdl) 1 Ciclo de trabajo
Motor 3 (3 gdl) 1 Ciclo de trabajo
Motor 4(pinza) 1 Ciclo de trabajo
Recepcin UART 2 2.5 us

Dentro de la prioridad nmero 2, se encuentra la tarea que se encarga de recibir el
paquete de datos a travs de la comunicacin serial ,el cual genera el movimiento
para el brazo, a esta tarea se le asigna una segunda prioridad debido a que el
sistema debe recibir los datos que contienen los ngulos que debe moverse cada
motor, sin embargo aunque uno de estos paquetes que contiene cuatro valores
correspondientes a los tres grados de libertad y al movimiento de la pinza, no
llegase a ser ledo, no afectara de forma directa al sistema, debido a que el
programa guarda los valores anteriores, los cuales son generados a travs del
PWM del motor correspondiente, cuyo torque debe de generarse de manera
constante.
Una vez establecidas estas prioridades, se realiz la programacin del
microcontrolador PIC18F4550, la cual se basa en el diagrama de flujo mostrado en
la figura 4.32, en este diagrama se establecen los pasos para la configuracin de
las funciones del PIC, el primer paso para iniciar el programa es la configuracin
de puertos de entrada y/o salida, en el presente proyecto se utilizan los puertos
B0-B3 para la generacin del PWM de los motores, por lo tanto estos bits son
establecidos como salida. En el segundo proceso se establece la configuracin de
la transmisin serial asncrona, en donde se configura el puerto TX como salida y
RX como entrada, cabe destacar que en este proyecto, el PIC solo recibir datos,
sin embargo para la configuracin de la comunicacin serial del PIC deben
establecerse estos dos pines con la configuracin adecuada, adems debe
establecerse en 1, la bandera de interrupcin de la recepcin de datos, la cual
recibe byte por byte ,el dato que sea enviado desde la computadora al PIC. El
siguiente proceso consiste en la configuracin del timer2, cuya interrupcin genera
el tiempo de 0.00001 segundos el cual corresponde al ciclo en alto de duracin
para que el servomotor se pueda mover un grado, a partir de ese concepto se
movern los dems motores. Despus de establecer la configuracin de los
temporizadores y del UART(transmisin serial sncrona), el siguiente proceso es
establecer un ciclo infinito dentro del programa, cuyo objetivo es permitir que las
interrupciones tanto del TIMER como del UART se generen y realicen las

1)

correspondientes tareas. Este ciclo llega a su fin solo si es recibido el dato
proveniente de la computadora, que pertenece al gesto de finalizacin del brazo
robtico, cuyo valor indica que el brazo debe detenerse, por lo cual se inicia un
contador, el cual segura que todos los motores llegarn al estado final, es decir al
movimiento de finalizacin, para despus establecer al microcontrolador en un
estado de bajo consumo conocido como estado en reposo. En dado caso de
que no se estableciera un contador que permita a los motores llegar a su estado
final y en vez de eso se mande al microcontrolador al estado en reposo despus
de recibir el dato de finalizacin, los motores perdern el torque inmediatamente, y
no podrn llegar al estado final, lo que implica que el brazo pierda la fuerza en
todas sus articulaciones. Cuando el contador llega al nmero establecido para
llegar a la posicin final, el microcontrolador llega al estado en reposo y por lo
tanto la aplicacin finaliza.















4i'ura %.32 Dia'rama de flujo de la pro'ramacin del +3114%))5.

1,


En la figura 4.33(anexo 4.9) se muestra el diagrama de flujo establecido para la
interrupcin que se genera para la recepcin de datos del modulo UART, la cual
se genera cada que un byte es recibido dentro del modulo RX, en este diagrama
de flujo se establece una variable que inicia en 0, cuando un dato es recibido, se
asigna el dato que es recibido a la variable que guarda los grados que debe
moverse el primer motor, que corresponde al primer grado de libertad, despus de
esto la variable se incrementa y se borra la bandera correspondiente a la
interrupcin de recepcin, cuando esta se vuelve a generar, el valor del modulo de
recepcin se asigna a la variable que indica los grados de movimiento del segundo
motor correspondiente al segundo grado de libertad y se incrementa la variable,
este proceso se genera de forma sucesiva hasta llegar a la asignacin de la cuarta
variable, cuyo valor corresponde a la apertura o cierre de la pinza, una vez
incrementada la variable contador hasta este valor ,la variable se reinicia en cero
para volver a recibir los siguientes cuatro datos. La recepcin de estos datos se
realiza de forma muy rpida, debido a que los datos provenientes de la
computadora son enviados uno tras de otro, sin espera ningn tiempo, lo que
acelera la asignacin de valores a las variables de movimiento de los motores.












4i'ura %. 33 Dia'rama de flujo de la interrupcin 'enerada por la
recepcin de datos a trav(s del modulo *"!6.

1.



Dentro de la figura 4.34 (anexo 4.10) se visualiza el diagrama de flujo
correspondiente a la interrupcin del TIMER2, el cual genera una interrupcin
cada 0.00001 segundos. Retomando la especificacin de movimiento de un
servomotor, este debe generar un tiempo en alto mnimo de 0.0006 segundos para
un movimiento de 0 grados, y un tiempo mximo en alto de 0.0024 segundos lo
que corresponde a 180 grados, generando despus un tiempo de 0.018 segundos
para el tiempo en bajo lo cual completa el periodo de la seal de un servomotor,
sin embargo para que un servomotor pueda moverse los grados deseados, se
deben enviar mnimo 30 periodos iguales correspondientes a los grados de
movimiento. Retomando el diagrama de flujo, las condiciones para generar el
PWM de los cuatro motores al mismo tiempo es la siguiente: se establecen todos
los pines de los motores en estado alto desde la configuracin de los puertos, se
declara una variable contador2, la cual inicia en inicia en 0, y en cada interrupcin
esta variable incrementa en uno su valor y es comparada con las variables que
contienen los grados que se mover cada servomotor, cuyos valores de cada
variable fueron asignados en la rutina de interrupcin de recepcin del UART,
cuando la variable contador2 es igual al valor de uno de los valores de las
variables de los motores, el pin correspondiente a esa seal se establece en cero,
iniciando su ciclo en bajo. Por ejemplo: supongamos que dentro de la subrutina de
recepcin del UART se le asign a la variable servo1 el valor de 90, esto implica
que ese servomotor debe de moverse a la posicin de 90, entonces quiere decir
que la variable contador2, debe ser incrementada 90 mas 60 veces, el motivo de
agregar el nmero 60 es porque como se haba establecido dentro del marco
terico, los servomotores estndar necesitan un tiempo mnimo de 0.0006
segundos en alto, lo que corresponde a 0 grados, en nuestro ejemplo para mover
el servomotor a 90 grados necesitamos generar un tiempo en alto de 0.0015
segundos , lo que corresponde a incrementar la variable contador2, 150 veces, es
por eso que el tiempo de 0.0006 segundos debe ser obligatorio para todos los
servos, independientemente de los grados a los que se vayan a posicionar. El
proceso de preguntar si cualquiera de las cuatro variables que contienen los datos
de movimiento de los servos, son iguales a la variable contador2, es el proceso de
terminar el ciclo en alto de los motores, a partir de entonces se inicia el estado en
bajo. Para completar el periodo de un servomotor se debe de establecer un tiempo
en bajo desde los 0.015 hasta los 0.020 segundos, debido a eso, una vez que se
ha comparado la variable contador2 con los valores de movimiento de los cuatro
servomotores , se espera a que el valor de esa variable sea igual a 1800, lo que
implica un transcurso de 0.018 segundos, que es el tiempo en el que todos los

11

pines de los motores estuvieron en estado bajo, y entonces se inicia un nuevo
periodo, estableciendo de nueva cuenta los pines de los motores en estado alto, y
estableciendo la variable contador2 nuevamente con un valor de 0.





















4i'ura %. 3% Dia'rama de flujo de la rutina de interrupcin del tempori&ador 2E6imer2F.

1/


En la figura 4.35 se muestra el perodo correspondiente a cada seal, la cual se
marca de diferente color, en este ejemplo el motor 1 se mueve 0 grados, el dos 45,
el tres 90, y el cuarto 180, lo que corresponde a los tiempos en alto con duracin
.000105s, 00150s, 0.00195s, 0.00240s respectivamente para cada motor. Como
se mencion anteriormente, el ciclo en bajo es el mismo para todos, es decir 0.018
segundos, lo cual no afecta de ninguna manera en el movimiento de cada motor.















4i'ura %.3) iclo de trabajo para movimiento de servomotores en 5 'rados
EamarilloF @%) 'rados Ea&ulF @/5 'rados EmoradoF y 115 'radosEverdeF.

/5

Captulo / +ruebas
y resultados
En el presente captulo se explica el diseo mecnico y funcionamiento del brazo
robtico, adems se presentan las pruebas finales realizadas para explicar el
funcionamiento del manipulador y obtener la eficiencia del proyecto, tomando
como referencia determinados parmetros relacionados tanto al brazo robtico
como a los diferentes usuarios que realizaron pruebas con el prototipo.
/1 Estructura del bra&o robtico

El principal objetivo es controlar el brazo robtico a travs de los movimientos del
brazo del usuario, delimitando la estructura del robot con tres grados de libertad.
Debido a que no se tom en cuenta un plano de referencia o coordenadas de
espacio para el rea del trabajo del robot, se propone una estructura que permite
realizar los movimientos del brazo robtico, imitando a los del usuario. La
estructura propuesta pertenece a la configuracin angular o antropomrfica de un
manipulador, la cual se visualiza en la figura 5.1, esta estructura presenta una
articulacin con movimiento rotacional y dos con movimiento angular.









4i'ura ). 1 onfi'uracin de un bra&o robtico antropomrfico o an'ular.

/1

Para el diseo mecnico se utilizaron tubos de aluminio y soportes para los
servomotores construidos tambin con aluminio, los brackets o soportes para
servomotores son fabricados con medidas que se ajustan al tamao de un
servomotor estndar, el cual se muestra en la figura 5.2 con sus respetivas
medidas. En la figura 5.3 se observa el soporte que se adapta a un servomotor
con las medidas de los servomotores utilizados.







A continuacin se muestran los tubos de aluminio utilizados para construir los
eslabones del brazo robtico (parte que une las articulaciones, en la figura 5.4 se
muestra la longitud de cada uno de ellos.







4i'ura ). 3 -ervomotor utili&ado.
4i'ura ). 2 -oporte para el servomotor utili&ado.
4i'ura ). % :edidas de los tubos de aluminio utili&ados.

/2

/11 C9lculo del tor8ue para los motores
Una vez que se establecieron las medidas de los eslabones 1 y 2, el siguiente
paso es calcular el torque o fuerza necesaria para poder mover el peso del brazo
robtico tomando en cuenta tambin el peso de los motores y de los soportes
(brackets), la formula utilizada para el clculo es la que se muestra en la ecuacin
5.1.
= d (Ecuacin 5.1)
En donde:
= torque o torsin = fuerza aplicada d = distancia
Para el clculo del torque correspondiente de cada motor se tom en cuenta el
peso del motor, bracket y tubo de aluminio del correspondiente eslabn. Para el
motor del eslabn del movimiento angular 2 se toman en cuenta las distancias
que se muestran en la figura 5.5 y los pesos de la tabla 5.1.

6abla ). 1 :edidas y pesos del eslabn para movimiento an'ular n?mero 2.
Elemento Distancia Peso
Soporte para
servomotor
4.5cm 20 gr
Tubo de
aluminio
7.5cm 15 gr
Pinza con
motor
6.5cm 74 gr

4i'ura ).) :edidas del eslabn para movimiento an'ular n?mero 2.

/3

Sustituyendo en la ecuacin 5.1
= (0.020kg+ 0.015kg + 0.074kg)(9.80 m/s
2
)(0.045m+0.075m+0.065m) (Ecuacin 5.2)
Q= 0.197617 N/m (Ecuacin 5.3)
Convirtiendo de N/m a Kg/cm obtenemos:
= 2.01513 kg/cm (Ecuacin 5.4)
EL motor utilizado modelo Hitec-hs311 tiene un torque de 3.0kgm/cm (ver anexo
costos del proyecto)
Para el motor del eslabn del movimiento angular nmero 1 que corresponden al
movimiento angular 2 se toman en cuenta las distancias que se muestran en la
figura 5.6 y los pesos de la tabla 5.2.

6abla ). 2 :edidas y pesos del eslabn para movimiento an'ular n?mero 1.
Elemento Distancia Peso
Tuvo de aluminio
movimiento angular 1
12.5cm 30gr
Soporte
con motor
4.5cm 84gr
Tubo de aluminio
movimiento angular 2
7.5cm 15 gr
Pinza con motor 6.5cm 74 gr

4i'ura ). , :edidas del eslabn para movimiento an'ular n?mero 1.

/%

Sustituyendo en la ecuacin 5.1
= (0.030kg+ 0.084kg + 0.015k + 0.074kg)(9.80 m/s
2
)(0.125m + 0.045m +
0.075m + 0.065cm) (Ecuacin 5.5)
Q= 0.616714 N/m (Ecuacin 5.6)
Convirtiendo de N/m a Kg/cm obtenemos:
= 6.2887 kg/cm (Ecuacin 5.7)
Para este torque se utiliz el servomotor Power HD con un torque de 17kg/cm(ver
anexo anlisis de costos)
Para obtener el torque del servomotor que proporciona el movimiento de rotacin
del robot se aadi la distancia del bracket que corresponde al motor que
proporciona el movimiento angular nmero 1 y nmero 2, sustituyendo en la
formula se obtiene lo siguiente:
= (0.030kg+ 0.084kg + 0.015k + 0.074kg + 0.084 Kg)(9.80 m/s
2
)(0.125m +
0.045m + 0.075m + 0.065cm + 0.045m) (Ecuacin 5.8)
Q= 0.998473 N/m (Ecuacin 5.9)
Convirtiendo de N/m a Kg/cm obtenemos:
= 10.1815 kg/cm (Ecuacin 5.10)
Igualmente se utiliz un servomotor PowerHd que contiene un torque de 17kg que
es mayor al requerido.
En la figura 5.7 se visualiza el prototipo del diseo mecnico del manipulador
antropomrfico, diseo que fue tomado como referencia para construir el prototipo.

/)


La figura 5.8 muestra las medidas del brazo robtico, estas medidas son tomando
en cuenta el origen y destino de las articulaciones, en donde el motor gira para
realizar los movimientos angulares.

4i'ura ). 1 :edidas del prototipo final.

4i'ura ). . Dise0o final del prototipo del bra&o robtico.

/,

Apertura de la pinza

La pinza de sujecin puede abrirse una distancia de 3.5 cm y cerrarse por
completo, en la figura 5.9 se muestra la medida de la apertura de la pinza de
sujecin.












El espacio de trabajo para el prototipo del brazo robtico se basa en la figura 5.10,
la cual corresponde al espacio que normalmente tiene acceso un manipulador de
configuracin antropomrfica, en donde la parte rayada, marca el rea de
movimiento que abarca el brazo robtico utilizando sus tres grados de libertad.
Esta rea es aproximada, debido a que como se ha venido mencionando, el
movimiento del brazo robtico, ser controlado por el movimiento del usuario, por
lo que si la persona no puede realizar movimientos tan flexibles con su brazo,
entonces el brazo robtico no podr moverse mas de lo que permitan dichos
movimientos.







4i'ura )./ :8=ima apertura de la pin&a.
4i'ura ). 15 Irea de trabajo del bra&o robtico.

/.

/% !esultados de la deteccin de dedos
En base al procedimiento para la deteccin de formas convexas en una imagen de
profundidad, se obtuvieron resultados como los que se muestran en la figura 5.11.







Los crculos rojos representan inicio de una forma convexa y los crculos amarillos
representan la profundidad de la forma convexa. En las figuras 5.12 y 5.13 se
muestran los resultados que se obtienen cuando el usuario extiende 2 y 5 dedos
respectivamente utilizando la mano izquierda. Este procedimiento no es del todo
preciso debido a que se analizan imgenes de profundidad y partir de ellas se
detectan formas convexas que pueden ser similares a las de un dedo, esto
provoca que existan algunas otras formas en la imagen y puedan ser contadas
como formas similares a las de un dedo.







4i'ura ).11 4ormas conve=as detectadas.
4i'ura ). 12 !esultado de la deteccin de dedos. 4i'ura ). 13 !esultado de la deteccin de dedos

/1

/( !esultados de movimiento del robot
En las figuras 5.14, 5.15 y 5.16 se muestran los movimientos del brazo robtico y
del usuario, demostrando los movimientos que se generan cuando el usuario
dobla las articulaciones.









En la figura 5.14 se muestra como al extender el brazo, el brazo robtico repite la
misma accin movindose casi 180 grados, ngulo formado entre los dos
eslabones, en la figura 5.15 se muestra la mxima flexin que puede realizar el
usuario con el ngulo formado entre el brazo y antebrazo, movimiento que ejecuta
el brazo robtico de forma similar, un detalle importantes es que el movimiento
que efecta el brazo robtico en su tercer grado de libertad( segundo eslabn), es
contrario al movimiento del brazo del usuario con el antebrazo, la implementacin
para este movimiento dentro de la mecnica del robot fue realizada
intencionalmente, debido a que el antebrazo de cualquier usuario no es capaz de
ser flexionado de forma negativa a como se muestra en la figura 70, por lo tanto
esto limitara el movimiento del robot y por lo tanto el alcance para tomar y dejar
piezas, es por eso que el movimiento del segundo eslabn es contrario al
movimiento natural del usuario. Finalmente en la figura 5.16 se muestra una
flexin del brazo del usuario y del robot a una posicin aproximadamente de 90
grados, permitiendo tener una posicin recta para la pinza. El movimiento de
rotacin y del segundo grado de libertad, son efectuado de forma similar en el
robot, delimitados por la flexibilidad en los brazos del usuario.
4i'ura ). 1% +osicin con bra&o estirado.
4i'ura ). 1) +osicin con bra&o fle=ionado.

//








/* +ruebas del bra&o robtico
Las pruebas realizadas para probar la eficiencia del brazo robtico en ser utilizado
por cualquier usuario, se realizaron en una superficie que tuviera un fondo rgido
para la proyeccin de la cmara infrarroja ,debido a que el sensor no funciona de
forma correcta al proyectar la luz infrarroja sobre superficies reflejantes o
habitaciones donde la luz solar se proyecte de forma directa, las pruebas se
realizaron sobre una habitacin donde no se afectara la luz solar de forma directa
en la proyeccin del sensor, tambin se intento realizar pruebas bajo condiciones
de luz solar y superficies reflejantes, pero en ningn caso se obtuvo un correcto
funcionamiento del sistema (ver anexo 5.1).






Las pruebas consistieron en tomar 6 piezas como la mostrada en la figura 5.17 y
colocarlas en un recipiente, las pruebas se realizaron con la colaboracin de 4
usuarios, con el objetivo de demostrar que cualquier persona puede controlar el
robot sin adentrarse en su programacin o cosas similares. Cabe destacar que las
personas que controlaron el brazo robtico para intentar tomar y cambiar las
4i'ura ). 1, +osicin con bra&o semi ;
fle=ionado.
4i'ura ). 1. :odelo de pie&a
cilndrica para pruebas del bra&o
robtico.

155

piezas al recipiente, no estaban familiarizados con el control del brazo robtico,
nicamente se les explico el movimiento correspondiente a cada grado de libertad
Cada usuario realiz dos pruebas para intentar tomar 6 piezas similares a las de
la figura 5.18 dispersadas en diferentes lugares dentro de una mesa de 60 * 60cm,
la dispersin de las piezas se muestra en la figura 5.17, a partir de esta
distribucin se tom el tiempo que tardo cada usuario en colocar las piezas en el
recipiente, realizando dos intentos por cada prueba.











En la tabla 5.4 se muestran los tiempos que realiz cada usuario al tratar de mover
las piezas, adems se indica el nmero de piezas que piezas que fueron soltadas,
y las piezas que quedaron fuera del alcance del robot por un movimiento errneo
del robot, adems se incluye como dato adicional, la estatura del usuario, para
demostrar que cualquier usuario puede controlar el brazo robtico. En los anexos
5.2 se puede consultar los imgenes de los usuarios controlando el prototipo,
tambin se incluye el tiempo que realic en ejecutar las mismas pruebas, con el
objetivo de comparar con el tiempo realizados por los usuarios que controlaron
el robot sin tener un previo entrenamiento.

4i'ura ).11 Distribucin de las pie&as sobre mesa de madera.

151

6abla ). 3 !esultados de las pruebas reali&adas con el bra&o robtico.

En la siguiente imagen se muestra una grafica con el tiempo realizado por
usuarios que no conocen el prototipo y lo han utilizado para realizar la prueba de
depositar las 6 piezas dentro del contenedor.







No. de Usuario Estatura No. de
prueba
Piezas
soltadas
Piezas
fuera del
alcance
del
robot
Nmero de
pizas
depositadas
Tiempo
total
(minutos)
1 (Desarrollador
del prototipo)
1.69m 1 1 1 4 2.20
1 (Desarrollador
del prototipo)
1.69m 2 0 1 5 3.59
2 (Ver anexo
5.2.1)
1.51m 1 1 0 5 6.37
2 (Ver anexo
5.2.1)
1.51m 2 1 0 5 5.12
3 (Ver anexo
5.2.2)
1.62m 1 0 1 5 2.47
3 (Ver anexo
5.2.2)
1.62m 2 0 1 5 6.05
4 (Ver anexo
5.2.3)
1.60m 1 2 1 4 13.06
4 (Ver anexo
5.2.3)
1.60m 2 2 1 4 12.56
5 (Ver anexo
5.2.4)
1.50m 1 0 3 3 8.33
5 (Ver anexo
5.2.4)
1.50m 2 0 2 4 10.20
5
2
%
,
1
15
12
1%
2 2 3 3 % % ) )
M
i
!
u
t
o
s
:;1ero de usuario
4i'ura ). 1/ Gr8fica del tiempo en completar la prueba.

152


El promedio general del tiempo que se obtiene al tratar de transportar las 6 piezas
al contenedor es el mostrado en la ecuacin 5.11:
Iicmpo promcJio =
t
i
n-2
i=2
n-2
(Ecuacin 5.11)
Donde:
i = nmero de usuario
n= total de usuarios
t
i
= tiempo del usuario en completar la prueba
Sustituyendo en la ecuacin 5.2 obtenemos el siguiente promedio:
Tiempo promedio
=
6.37 mIn+5.12mn+2.47 mIn+6.05mn+13.06+12.56+8.33mn+10.20mn
8
=16.34minutos (Ecuacin 5.12)

Para obtener la eficiencia del brazo robtico se realizaron la suma de las pruebas
realizadas (incluyendo la realizada por el autor del presente trabajo) y se obtuvo
un porcentaje de las piezas que fueron colocadas correctamente en el contenedor,
tomando las piezas soltadas o que quedaron fuera del alcance del robot, como un
error, el porcentaje de eficiencia se determina con la siguiente formula:

< de e%icie!cia D
No dc pczus dcpostudus
1otuI dc pczus
- 1uu =
44
60
- 1uuD .3R EEcuacin ).13F


< de error D 155R ;.3RD 2.R (Ecuacin 5.14)

El porcentaje de error disminuye cuando el usuario obtiene prctica en el uso del
prototipo, adaptndose a los movimientos del robot para poder controlar su
velocidad y precisin. Cuando el prototipo es utilizado por personas que han
realizado un previo entrenamiento para controlar el robot, el porcentaje de error
disminuye.



153

Conclusiones
Dentro de las pruebas se observ que el movimiento del brazo robtico puede ser
un poco brusco, debido a que las coordenadas entregadas por el Kinect no son del
todo constantes dentro de cada imagen entregada por el sensor, aun as, se
pudieron tomar algunas piezas de pequeo tamao y peso ligero, demostrando
que el brazo robtico podra llegar a transportar piezas u objetos pequeos como
los utilizados en las pruebas los cuales tienen un ancho menor a la apertura total
de la pinza
El tiempo promedio para que un usuario que desconoce el funcionamiento del
prototipo pueda utilizar el robot, depende la habilidad de la persona para
acostumbrarse al control del robot; para algunos usuarios fue difcil mantener la
mano izquierda referenciada al sensor para abrir y cerrar la pinza y al mismo
tiempo realizar el control con el brazo derecho.
El porcentaje de error fue considerable, debido a que no todas las piezas fueron
transportadas de forma correcta durante las pruebas, debido a que ligeros
movimientos del robot desplazaban las piezas dejndolas fuera su alcance.
Adems de que otras piezas fueron soltadas al presentarse fallas dentro de la
deteccin de dedos para la apertura y cierre de la pinza.
En cuanto a la respuesta del sistema se obtuvieron resultados favorables, el robot
se mueve a una velocidad que asimila ser paralela a la velocidad con la que el
usuario mueve el brazo, permitiendo menor tiempo en el transporte de piezas u
objetos. Una de las limitaciones del proyecto, como se ha mencionado
anteriormente, es que ninguno de sus tres grados de libertad alcanza el mximo
movimiento permitido por los servomotores (180 grados), debido a que la
flexibilidad en los movimientos del brazo de la mayora de las personas, no se
ajusta a dicho movimiento, delimitando como consecuencia el movimiento del
brazo robtico.
Finalmente, este trabajo de tesis produjo un brazo robtico con tres grados de
libertad, que puede ser controlado de forma natural por cualquier persona que
cuente con las extremidades requeridas, sin necesidad de utilizar interfaces fsicas
como palancas o botones.


15%

Observaciones
El cuarto donde se utilice el sensor es de gran importancia, se debe procurar que
el sensor proyecte sobre una superficie rgida y no transparente o reflejante
(vidrios, etc.), adems de que la habitacin debe ser un espacio en donde no
afecte la luz solar de forma directa, por ejemplo colocar el sensor cerca de una
ventana o puerta. La altura donde se coloque el sensor debe estar dentro de los
rangos que indica el fabricante (0.60m a 1.50m), ya que al no cumplirse esta
especificacin, el sensor adquiere y entrega los datos de forma incorrecta debido a
la mala proyeccin que ejecuta el sensor infrarrojo sobre la superficie cuando se
coloca el sensor en una altura fuera del rango especificado.
2imitaciones
Ninguno de los tres grados de libertad del brazo robtico puede desplazarse los
180 grados que limita un servomotor, los movimientos realizados por un usuario
dependiendo de su capacidad para mover el brazo controlan el robot, limitan el
movimiento de cada articulacin. Otro aspecto que limita este proyecto, es que no
puede utilizarse en ambientes donde exista luz solar, debido a que el sensor
Kinect no trabaja bajo esas condiciones, de igual forma si algn objeto o persona
se encuentra entre el sensor y el usuario, se obstruye la lectura de los datos del
sensor, como consecuencia la aplicacin tendr un funcionamiento incorrecto,
provocando fallas catastrficas en el movimiento del brazo robtico.
,ejoras del proyecto y trabajo a futuro
El alcance para tomar o dejar piezas con el brazo robtico depende tambin de los
grados de libertad del robot, una mejora que podra implementarse es agregar
mas grados de libertad imitando lo ms preciso el movimiento natural del brazo de
una persona. En cuanto a la comunicacin entre la computadora y el PIC, se
puede cambiar el protocolo de comunicacin utilizando alguno que mantenga el
envo de los datos de manera rpida y efectiva, pensando tal vez en una
comunicacin basada en el protocolo Wifi.
Otra opcin dentro del control del robot, es poder anular el uso de la mano
izquierda para el control de la pinza, realizando este control con la misma mano
que del brazo que controla el robot. Este trabajo solo ser posible si en algn
futuro los desarrolladores del hardware del Kinect liberan un nuevo modelo del
dispositivo que permita el seguimiento de las articulaciones de los dedos dentro de
un plano 3D. Otra opcin para implementar la tarea mencionada, es utilizar

15)

algunas libreras que permite un anlisis 3D de la mano, basado en algoritmos de
visin por computadora, cuyo software se encuentra en la pgina de las libreras
de programacin utilizadas en este trabajo, adems de conjuntarlo con un
seguimiento de usuario, como el que se implement en el proyecto.















15,

#ibliografa
A1B*D. E2512F. Open>3 and soft9are. Obtenido de <ttpGLLsabia.tic.udc.esL'cLtrabajosR252511;
12L$inectLcodi'o.<tml
A2B"lejandro@ 3. 2. E>oviembre de 2512F. -istemas en tiempo real. "puntes del semestre.
A3B -istemas de as7uicisin de datos@S :ora :ora
A%B "tif $<an@ 4. :. E2511F. $inDectectG $inect Detectin' Objects.
A)B <ttpGLLes.scribd.comLdocL1,%3..13LTinectdoc pa'ina 22
A,B -i'n2an'ua'e6ranslator 8rticulo por Daniel :artine& apilla pa'ina 1..
A.B DE+6@ S. E. E2512F. $inect docs. Obtenido de <ttpGLLes.scribd.comLdocL1,%3..13LTinectdoc
A1B Jaime@ :. :. E>oviembre de 2512F. Diapositivas de clase. Kision -tereo.
A/B <ttpGLLes.scribd.comLdocL1,%3..13LTinectdoc p8'inas 23 y 2%.
A15B :att<ias $ronlac<ner@ 3. m. E2512F. 6SE $3>E6 -E>-O! "- S*:">;:"S3>E;3>6E!4"E 3>
"*D3O;K3-*"2 "!6 +!OJE6-. "ustria.
A11B !eal;6ime Suman +ose !eco'nition in +arts from -in'le Dept< 3ma'es@ Jamie -<otton @
"ndre9 4it&'ibbon@ :at ooT.
A12B M$inDectectG $inect Detectin' ObjectsN @ "tif $<an@ 4ebin :oideen@ Juan 2ope&@ Uai 2. $<oo
and V<i'an' V<u Department of omputer -cience@ ity olle'e of >e9 JorT@ >e9 JorT.
A13B -ense@ +. E2511F. Open>3 *ser Guide.
A1%B <ttpGLL999.openni.or'L
A1)B <ttpGLLarticulo.mercadolibre.com.m=L:2:;%1/%/1)11;bluetoot<;modulo;serial;
microcontrolador;pic;arduino;atmel;WJ:
A1,B +ublicacin 3nterna / 25;5/;255. 4rancisco ". andelas Seras Juan ". orrales !amn
A1.B<ttpGLLes.9iTipedia.or'L9iTiLR3R11n'ulosWdeWEuler.
A11B<ttpGLLes.9iTipedia.or'L9iTiLonve=idad
A1/B"rran& "randa 4rancisco@ 2. J. E2511 ; 2512F. 3nteraccin persona;computador basada en el
reconocimiento visual de manos. *>3KE!-3D"D O:+2*6E>-E DE :"D!3D.

15.

A25B"tif $<an@ 4. :. E2511F. $inDectectG $inect Detectin' Objects.
A21B#oreisntein@ G. E4ebrero 2512F. :aTin' t<in's seeG 3D vision 9it< $inect@ +rocessin'@ "rduino
and :aTer#ot. OX!eilly.
A22B#runo -iciliano@ 2. K. E2551F. !obotic@ :odellin'@ +lannin' and ontrol. -prin'er.
A23BDie&@ E. !. E"bril 11 2512F. "rduino and $inect +rojects. 6ec<nolo'y in action.
A2%BEberly@ D. E1 de Diciembre de 1///F. <ttpGLL999.'eometrictools.comL. Obtenido de Euler
"n'le 4ormulas.
A2)BGary #radsTy@ ". $. E2551F. 2earnin' OpenK. OX!eilly.
A2,BJamie -<otton@ ". 4. Es.f.F. !eal;6ime Suman +ose !eco'nition in +arts from -in'le Dept<
3ma'es.
A2.B2adislao :at<e@ D. -. Es.f.F. Estudio del funcionamiento del sensor $inect y aplicaciones para
bioin'eniera. 2511.
A21B2i@ J. E2515F. 6<esis on S">D GE-6*!E !EOG>363O> *-3>G $3>E6. #.-.@ ommunication
*niversity of <ina@.
A2/B:acormicT@ J. E2515;2511F. So9 does t<e $inect 9orTY
A35B+rime -ense. E2511F. +rime -ense 1.3 >36E "l'orit<ms notes.
A31B+rime -ense@ >36E. E2511F. +rime -ensor >36E 1.3 ontrols +ro'ramerXs Guide@ version 1.
A32B+rime-ense. E2512F. Open>3.or'. !ecuperado el Junio de 2512@ de <ttpGLL999.openni.or'L
A33B!avZ@ D. Es.f.F. $inectG t<e ne=t 'eneration of motion control.
A3%B-ean $ean@ J. S. EDicimebre 23 ;2511F. :eet t<e $inect. 6ec<nolo'y in action.
A3)B6on'o@ 2. d. E52 de -eptiembre de 2515F. Em'u K Sand Gestures !eco'nition "dvanced
6utorial. Obtenido de <ttpGLL999.youtube.comL9atc<YvD4jj/'766fc






151

"ne=o 1
11 "n9lisis de costos
Para la construccin e implementacin de este proyecto se utilizaron los siguientes
materiales:
Sensor Kinect: El sensor Kinect es el principal componente de este
proyecto, debido a que todos los datos son adquiridos a travs del l, este
dispositivo puede comprarse en cualquier tienda donde este a la venta la
consola Xbox 360, debido a que es un complemento de la consola, es
recomendable comprarlo por separado para que se incluya el cable USB
que se requiere para la conexin
con la computadora.
Precio: $1800.00


Bracket para servomotor estndar:
sirve para montar cualquier
servomotor estndar y poder hacer
una estructura ms rgida o conectarlo
con otros brackets y permitir la
rotacin de la articulacin del brazo.
Precio: $275.00
Cantidad: 3

Modulo bluetooth para transmisin serial:
funciona por medio del protocolo bluetooth, pero
la transmisin y recepcin es de forma serial
RS232.
Precio: $250.00

Servomotor estndar HITEC HS-311: utilizado para una articulacin y
para la apertura y cierre de la pinza.

Velocidad : (sec/60o): 0.19
Torque (Kg-cm/Oz-in): 3.7/49

15/

Tamao (mm): 40 x 20 x 37
Peso (g/oz): 43/1.51
Precio: $210.00
Cantidad: 2

Servomotor estndar alto torque: Para el
movimiento de rotacin del brazo y el movimiento
del primer eslabn, se utiliz un servomotor con
mayor torque, funcionando con las mismas
caractersticas que el HITEC HS-311.
Velocidad: (sec/60o): 0.19
Torque (Kg-cm): 17kg
Tamao (mm): 40 x 20 x 37
Peso (g/oz): 43/1.51
Precio: $350.00
Cantidad: 2
Gripper: pinza que abre o cierra para tomar objetos
pequeos con el brazo robtico, la apertura del
gripper es de 1.3 pulgadas.
Precio:$ 300.00

Tubo de aluminio ligero: utilizado para construir los
eslabones del brazo robtico, debido al material con
el que est fabricado, no se requiere demasiado
torque para poder levantar dicho eslabn.
Precio: $30.00
Cantidad: 2


Placa fenlica doble cara 10*10cm: el diseo del
circuito impreso requiere una placa de doble vista
para hacer el diseo de la placa controladora del
brazo.
Precio: $18.00

115


Batera de acido-plomo 6v 2 Ampers: los
servomotores utilizados en el proyecto demandan
mayor cantidad de corriente y voltaje a los utilizados
por el PIC18F4550, es por eso que se utiliza una
batera con mayor voltaje y amperaje para permitir el
mximo torque de los motores.
Precio: $120.00

Base para circuito integrado de 40 pines: utilizada
para el colocar el PIC ene l circuito impreso.
Precio: $5.00

Microcontrolador PIC18F4550 : las caractersticas de
este PIC satisfacen las herramientas que se requieren
para el proyecto.
Precio: $120.00

Cristal piezoelctrico 20Mhz: es necesario para
generar la frecuencia de trabajo del reloj del
PIC18F4550.
Precio: $15.00



Conector USB tipo B para circuito impreso: este
conector permite realizar la conexin con la
computadora para poder programar el microcontrolador
y alimentarlo.
Precio: $8.00


Capacitor 22f: complementos para el correcto
funcionamiento del cristal piezoelctrico.
Precio: $2.00
Cantidad: 2

111

La siguiente tabla muestra el costo total del proyecto.
6abla ane=o 1 osto total del proyecto.
Material Cantidad Costo por pieza Costo total
Kinect 1 $1800.00 $1800.00
Soporte para
servomotor
3 $275.00 $825.00
Mdulo bluetooth 1 $250.00 $250.00
Servomotor 3.7kg 2 $210.00 $420.00
Servomotor 17kg 2 $350.00 $700.00
Pinza 1 $300.00 $300.00
Tubo de aluminio 2 $30.00 $60.00
Tabla fenlica 1 $18.00 $18.00
Batera acido-
plomo
1 $120.00 $120.00
PIC18F4550 1 $120.00 $120.00
Base 40pin 1 $5.00 $5.00
Cristal 20Mhz 1 $15.00 $15.00
Conector USB 1 $8.00 $8.00
Capacitor 22pf 2 $2.00 $4.00
Total $4645.00

De todos los materiales utilizados, el sensor Kinect es el mas costoso debido a
que es un producto de ltima tecnologa y con gran futuro dentro de las interfaces
de usuario, el uso de este producto es la base en esta tesis, pero representa una
gran ventaja y ahorro de trabajo al lado de otro tipo de sensores que son costosos
y requieren de circuitera externa. Algunos de los servomotores utilizados tienen
un costo elevado debido al torque con el que cuentan y su durabilidad, adems de
tener tiempos de respuesta favorables para la implementacin del proyecto.
El material utilizado para la estructura del robot esta diseado para permitir
libremente la rotacin de cada motor y ser ligero debido al material con el que esta
construido.
El proyecto es relativamente costoso pero demasiado eficiente debido al gran
futuro y desarrollo que ha vendo incrementndose en las interfaces de usuario que
utilizan el sensor Kinect, adems de ser un proyecto demasiado innovador.


112

"ne=o %
%1 Caractersticas del +3C145*//6
Es un microcontrolador de la familia pic18 fabricado por Microchip, el cual cuenta con las
siguientes caractersticas:
Arquitectura RISC avanzada Harvard: 16 bits con 8 bits de datos.
77 instrucciones
Desde 18 a 80 pines
Hasta 64K bytes de programa (hasta 2 Mbytesen ROMless)
Multiplicador Hardware 8x8
Hasta 3968 bytes de RAM y 1KBytes de EEPROM
Frecuencia mxima de reloj 40Mhz. Hasta 10 MIPS.
Pila de 32 niveles.
Mltiples fuentes de interrupcin
Perifricos de comunicacin avanzados (CAN y USB)

El PIC18F4550 dispone de las siguientes memorias:

Memoria de programa: memoria flash interna de 32.768 bytes: La cual almacena
instrucciones y constantes/datos, adems puede ser escrita/leda mediante un
programador externo o durante la ejecucin del programa mediante unos punteros.

Memoria RAM de datos: memoria SRAM interna de 2048 bytes en la que estn
incluidos los registros de funcin especial. Almacena datos de forma temporal
durante la ejecucin del programa y puede ser escrita/leda en tiempo de ejecucin
mediante diversas instrucciones.

Memoria EEPROM de datos: memoria no voltil de 256 bytes: al macena datos
que se deben conservar aun en ausenci a de tensi n y de alimentacin.
Puede ser escrita/leda en tiempo de ejecucin a travs de registros
Pila: bloque de 31 palabras de 21 bits que almacena la direccin de la instruccin
que debe ser ejecutada despus de una interrupcin o subrutina








113

%% 7erminales +3C145*//6


11%

%( !egistros transmisin )"!7

11)





11,

%* !egistros 7imer%




11.




111

"ne=o (
(1 Gr9ficas de descarga de la batera de 9cido>plomo


(% +lantilla del arc?ivo =ml para Open@3
Archivo xml para el uso del Kinect en OpenNI
<OpenNI>

<Licenses>

<Licensevendor="PrimeSense" key="0KOIk2JeIBYClPWVnMoRKn5cdY4="/>

</Licenses>

<ProductionNodes>

<Node type=" " name=" ">

<Configuration>

</Configuration>


</Node>

</ProductionNodes>

</OpenNI>

11/

"ne=o *
*1 +lantilla del arc?ivo =ml para programacin del sensor

Archivo xml utilizado para la aplicacin
<OpenNI>
<Licenses>
<License vendor="PrimeSense" key="0KOIk2JeIBYClPWVnMoRKn5cdY4="/>
</Licenses>
<Log writeToConsole="false" writeToFile="false">
<!-- 0 - Verbose, 1 - Info, 2 - Warning, 3 - Error (default) -->
<LogLevel value="3"/>
<Masks>
<Mask name="ALL" on="true"/>
</Masks>
<Dumps>
</Dumps>
</Log>
<ProductionNodes>
<Node type="Depth" name="Image1">
<Configuration>
<MapOutputMode xRes="640" yRes="480" FPS="30"/>
<Mirror on="true"/>
</Configuration>
</Node>
<Node type="Image" name="Image2">
<Configuration>
<MapOutputMode xRes="640" yRes="480" FPS="30"/>
<Mirror on="true"/>
</Configuration>
</Node>
<Node type="User"/>
<Node type="Gesture"/>
<Node type="Hands"/>
</ProductionNodes>
</OpenNI>









125

*% Cdigo para obtener imagen de profundidad






















public unsafe Bitmap Obtener_imagenDepth(DepthMetaData Metadata_profundidad)
{
lock (this)
{

Rectangle rectangulo = new Rectangle(! ! "#! #$)%
BitmapData mapadatos = this&mapa_profundidad&'ockBits(rectangulo!
(mage'ockMode&)riteOnl*! +*stem&Drawing&(maging&,i-el.ormat&.ormat/#bppRgb)%
imagen_profundidad&0etMetaData(Metadata_profundidad)%
ushort1 apuntadorprofundidad =
(ushort1)imagen_profundidad&DepthMap,tr&2o,ointer()%

for (int a = % a 3 #$% a44)
{
b*te1 5alores = (b*te1)mapadatos&+can&2o,ointer() 4 a 1
mapadatos&+tride%


for (int b = % b 3 "#% b44! apuntadorprofundidad44! 5alores 4= 6)
{


5alores78 = (b*te)1apuntadorprofundidad%99canal :


5alores7:8 = (b*te)1apuntadorprofundidad%99canal /


5alores7/8 = (b*te)1apuntadorprofundidad%99canal 6
;


;

this&mapa_profundidad&<nlockBits(mapadatos)%

;
return this&mapa_profundidad%

;


121


*( Cdigo para obtener imagen !G#












** Cdigo para obtener imagen infrarroja









public unsafe Bitmap Obtener_imagen_R0B((mageMetaData datos_R0B)
{
Rectangle rectangulo = new Rectangle(! ! "#! #$)%
BitmapData mapadatos = mapa_R0B&'ockBits(rectangulo! (mage'ockMode&)riteOnl*!
+*stem&Drawing&(maging&,i-el.ormat&.ormat/#bppRgb)%
imagen_R0B&0etMetaData(datos_R0B)%
R0B/#,i-el1 pR0B = (R0B/#,i-el1)imagen_R0B&(mageMap,tr&2o,ointer()%
for (int * = % * 3 #$% *44)
{
b*te1 pDest = (b*te1)mapadatos&+can&2o,ointer() 4 * 1 mapadatos&+tride%
for (int - = % - 3 "#% -44! 44pR0B! pDest 4= 6)
{
b*te red = pR0B=>Red%
b*te green = pR0B=>0reen%
b*te blue = pR0B=>Blue%
pDest78 = blue%
pDest7:8 = green%
pDest7/8 = red%
;
;
mapa_R0B&<nlockBits(mapadatos)%
return mapa_R0B%
;

public unsafe Bitmap Obtener_imagen(R((RMetaData Metadata_infraro?o)
{
Rectangle rectangulo = new Rectangle(! ! "#! #$)%
BitmapData mapadatos = mapa_(R&'ockBits(rectangulo! (mage'ockMode&)riteOnl*!
+*stem&Drawing&(maging&,i-el.ormat&.ormat/#bppRgb)%
imagen_(R&0etMetaData(Metadata_infraro?o)%
ushort1 apuntadorprofundidad = (ushort1)imagen_(R&(RMap,tr&2o,ointer()%
for (int a = % a 3 #$% a44)
{
b*te1 5alores = (b*te1)mapadatos&+can&2o,ointer() 4 a 1 mapadatos&+tride%
for (int b = % b 3 "#% b44! apuntadorprofundidad44! 5alores 4= 6)
{
5alores78 = (b*te)1apuntadorprofundidad%99canal :
5alores7:8 = (b*te)1apuntadorprofundidad%99canal /
5alores7/8 = (b*te)1apuntadorprofundidad%99canal 6
;


;
mapa_(R&<nlockBits(mapadatos)%
return mapa_(R%

122

*/ Cdigo para calibracin de usuario























pri5ate 5oid <ser0enerator_@ew<ser(ob?ect sender! @ew<serA5entBrgs e) {
if (e&(D == :)
{
label:&2e-t = C<suario detectado con (D = C 4 e&(D&2o+tring()%
this&usuario&,oseDetectionDapabilit*&+tart,oseDetection(C,siC! :)%
;
;
pri5ate 5oid <ser0enerator_'ost<ser(ob?ect sender! <ser'ostA5entBrgs e)
{
if (e&(D == :)
{
label:&2e-t = C<suario : perdidoC%
;
;
pri5ate 5oid ,oseDetectionDapabilit*_,oseDetected(ob?ect sender! ,oseDetectedA5entBrgs e)
{
if (e&(D == :)
{
this&usuario&+keletonDapabilit*&ReEuestDalibration(:! true)% 99peticion de
calibraciFn
this&usuario&,oseDetectionDapabilit*&+top,oseDetection(:)% 99detener la
deteccion de pose
;
;
pri5ate 5oid ,oseDetectionDapabilit*_OutOf,ose(ob?ect sender! OutOf,oseA5entBrgs e)
{
if (e&(D == :)
{
this&usuario&,oseDetectionDapabilit*&+tart,oseDetection(C,siC! :)%
;
;
pri5ate 5oid +keletonDapabilit*_DalibrationDomplete(ob?ect sender!
Dalibration,rogressA5entBrgs e)
{
if (e&(D == :)
{
if (e&+tatus&2o+tring() == COGC)
{
bandera_actualiHacion = true%
bandera_comienHa_seguimiento_mano = true%
this&usuario&+keletonDapabilit*&+tart2racking(:)% 99empeHamos calibracion
;
else
{
this&usuario&,oseDetectionDapabilit*&+tart,oseDetection(C,siC! :)% 99peticion
pra nue5a detecccion de pose
;
;
;


123


*: C9lculo de 9ngulo entre dos joints






















public double obtener_angulo_entre_dos_(double 5:! double 5/! double 56! double
w:! double w/! double w6)
{
double producto_punto%
double magnitud_5%
double magnitud_w%
double angulo! angulo_real%
referencia = new double768%
articulacion = new double768%
referencia78 = 5:%
referencia7:8 = 5/%
referencia7/8 = 56%
articulacion78 = w:%
articulacion7:8 = w/%
articulacion7/8 = w6%
producto_punto = (referencia78 1 articulacion78) 4 (referencia7:8 1
articulacion7:8) 4 (referencia7/8 1 articulacion7/8)%
magnitud_5 = Math&+Ert(Math&,ow(referencia78! /&) 4
Math&,ow(referencia7:8! /&) 4 Math&,ow(referencia7/8! /&))%
magnitud_w = Math&+Ert(Math&,ow(articulacion78! /&) 4
Math&,ow(articulacion7:8! /&) 4 Math&,ow(articulacion7/8! /&))%
angulo = Math&Bcos((producto_punto) 9 (magnitud_5 1 magnitud_w))%
angulo_real = (angulo 1 6") 9 (/ 1 Math&,()%
return angulo_real%
;


12%

*; C9lculo del 9ngulo de rotacin




















public double obtener_rotacion_?oint(double7!8 matriH!int e?e)
{
double thetaI! thetaJ! thetaK%
if (matriH7!/8 3 4:)
{
if (matriH7! /8 > =:)
{
thetaI = Math&Bsin(matriH7! /8)%
thetaJ = Math&Btan/(=: 1 matriH7:! /8! matriH7/!/8)%
thetaK = Math&Btan/(=matriH7! :8! matriH7! 8)%
;
else
{
thetaI = =: 1 Math&,( 9 /%
thetaJ = =: 1 Math&Btan/(matriH7:! 8! matriH7:! :8)%
thetaK = %
;
;
else
{
thetaI = : 1 Math&,( 9 /%
thetaJ = Math&Btan/(matriH7:! 8! matriH7:! :8)%
thetaK = %
;
switch (e?e)
{
case :L
resultado = thetaJ%
break%
case /L
resultado = thetaI%
break%
case 6L
resultado = thetaK%
break%
;
return resultado%

;
;


12)

*4 Cdigo deteccin de dedos
























public (mage3Bgr! B*te> dibu?ardedos((mage3Bgr! B*te> image)
{
int dedos = % 99inicia un contador para saber la cantidad de dedos
if (defectos M= null)
{
int posiblesdedos=defectos&2otal%
for (int i = % i 3 defectos&2otal% i44)
{ tr*
{ ,oint. ,untoinicial = new
,oint.((float)areglodedefectos7i8&+tart,oint&J!
(float)areglodedefectos7i8&+tart,oint&I)%

,oint. ,untoprofundidad = new ,oint.((float)areglodedefectos7i8&Depth,oint&J!
(float)areglodedefectos7i8&Depth,oint&I)%

,oint. ,untofinal = new ,oint.((float)areglodedefectos7i8&And,oint&J!
(float)areglodedefectos7i8&And,oint&I)%
'ine+egment/D 'ineainicio = new 'ine+egment/D(areglodedefectos7i8&+tart,oint!
areglodedefectos7i8&Depth,oint)%
'ine+egment/D 'ineaprofundidad = new 'ine+egment/D(areglodedefectos7i8&Depth,oint!
areglodedefectos7i8&And,oint)%
Dircle. Dirculoinicio = new Dircle.(,untoinicial! Nf)%
Dircle. Dirculoprofundidad = new Dircle.(,untoprofundidad! Nf)%
Dircle. Dirculofinal = new Dircle.(,untofinal! Nf)%
if ((Dirculoinicio&Denter&I 3 ca?a&center&I OO Dirculoprofundidad&Denter&I 3
ca?a&center&I) PP (Dirculoinicio&Denter&I 3 Dirculoprofundidad&Denter&I) PP
(Math&+Ert(Math&,ow(Dirculoinicio&Denter&J = Dirculoprofundidad&Denter&J! /) 4 Math&,ow(Dirculoinicio&Denter&I =
Dirculoprofundidad&Denter&I! /)) > ca?a&siHe&Qeight 9 "&N))
{
dedos44%
;
; catch (A-ception) {;
;
MD5.ont font = new MD5.ont(Amgu&DR&D5Anum&.O@2&DR_.O@2_QAR+QAI_D<,'AJ! Nd! Nd)%
switch (dedos)
{
case L
resultado = CDC%
angulo_mano_final = ::%
break%
case :L
resultado = CDC%
angulo_mano_final = ::%
break%
case /L
resultado = CD C%
angulo_mano_final = ::%
break%
case 6L
resultado = CD C%
angulo_mano_final = ::%
break%
case #L
resultado = CBC%
angulo_mano_final = N%
break%
case NL
resultado = CBC%
angulo_mano_final = N%
break%
case "L
resultado = CBC%
angulo_mano_final = N%
break%

12,

*< Cdigo de la interrupcin )"!7 del +3C145*//6








99interrupcion RJ
if(,(R:bits&RD(.==:) 99bandera de interrupcion de RJ se acti5a al recibir un dato
{
if(RDRA0==:$:){
grados=S%
gradosdos=:%
gradostres=:%
gradoscuatro=:%
bandera_reposo=:%
; else
{
5ariable44% 995ariable Eue asigna el dato correspondiente a cada articulaciFn

switch(5ariable)
{
case :L
grados=RDRA0%
break%
case /L
'radosdosD!!EG[
breaT[
case 3G
'radostresD!!EG[
breaT[
case %G
'radoscuatroD!!EG[
variableD5[
breaT[
defaultG
breaT[ \

+3!1bits.!34D5[ LLlimpiamos bandera de interrupcin
\ \


12.

*16 Cdigo de la interrupcin 7imer% del +3C145*//6


















99interrupciFn 2imer/
if(,(R:bits&2MR/(.==:) 99bandera interrupcion timer/
{
,R/=:/% 99cargamos registro
contador44% 99incrementamos contador
if(contador=="4grados) 99preguntamos
por la primera 5ariable
{
'B2Bbits&'B2B:=% 99si el pulso
esta completo!terminamos el ciclo de traba?o
;
if(contador=="4gradosdos) 99segunda 5ariable
{
'B2Bbits&'B2B6=% 99terminamos el
pulso de la segunda 5ariable
;
if(contador=="4gradostres) 99segunda 5ariable
{
'B2Bbits&'B2B"=% 99terminamos el
pulso de la segunda 5ariable
;
if(contador=="4gradoscuatro) 99segunda 5ariable
{
'B2Bbits&'B2BT=% 99terminamos el pulso de la segunda 5ariable
;
99 if(contador == 6$) 99reiniciamos el pulso
colocando los bits en uno
if(contador==:$)
{
'B2Bbits&'B2B:=:% 99iniciamos nue5o periodo
'B2Bbits&'B2B6=:%
'B2Bbits&'B2B"=:%
'B2Bbits&'B2BT=:%
contador=%
;

121

"ne=o / 3m9genes
/1 3magen de ?abitacin no apta para funcionamiento del
sensor






/% 3m9genes de los usuarios controlando el bra&o robtico
/%1 )suario nAmero % /%% )suario nAmero (






/%( )suario nAmero * /%* )suario nAmero /





4i'ura ". 1 Sabitacin con condiciones
no aptas para el funcionamiento del
sensor.
4i'ura ".3 *suario 2 E1.)1metrosF 4i'ura ". 2 *suario 3 E1.,2metrosF
4i'ura ". ) *suario % E1.,5metrosF 4i'ura ". % *suario ) E1.)5metrosF

129

"ne=o : Diagrama de clases de la aplicacin

También podría gustarte