2-Guiado Brazo Robotico Vision Artificial - Proyecto
2-Guiado Brazo Robotico Vision Artificial - Proyecto
2-Guiado Brazo Robotico Vision Artificial - Proyecto
1. INTRODUCCIÓN .................................................................................................. 4
2. OBJETIVOS DEL PROYECTO .......................................................................... 6
3. METODOLOGÍA DE TRABAJO ........................................................................ 8
4. RECURSOS EMPLEADOS ................................................................................ 11
5. BRAZO ROBÓTICO ........................................................................................... 12
5.1. DISEÑO MECÁNICO .................................................................................. 12
5.1.1. ESTRUCTURAS DE SOPORTE (“Huesos” y “Articulaciones”) ........ 16
5.1.2. MOTORES (“Músculos”)....................................................................... 20
5.2. CONTROL DE MOVIMIENTOS ................................................................. 24
5.2.1. FUNCIONAMIENTO GENERAL........................................................... 25
5.2.2. DISEÑO ELECTRÓNICO ...................................................................... 30
1) Microcontrolador PIC16F876 .................................................................... 30
2) La etapa de potencia ................................................................................... 32
5.2.3. ALGORITMOS DE POSICIONAMIENTO............................................. 38
6. SISTEMA DE VISIÓN ARTIFICIAL ............................................................... 40
6.1. DISEÑO MECÁNICO .................................................................................. 41
6.2. CONTROL DE MOVIMIENTOS ................................................................. 44
6.2.1. FUNCIONAMIENTO GENERAL........................................................... 45
6.2.2. DISEÑO ELECTRÓNICO ...................................................................... 48
6.2.3. PROCESAMIENTO DE IMÁGENES ..................................................... 49
7. PLANIFICACIÓN................................................................................................ 59
8. PRESUPUESTO ................................................................................................... 69
8.1. MEDICIONES............................................................................................... 69
8.1.1. BRAZO ROBÓTICO ............................................................................... 70
8.1.2. CABEZA ROBÓTICA ............................................................................. 71
8.1.3. PLACA DE CONTROL DE MOTORES ................................................. 72
8.1.4. EQUIPOS, SENSORES Y HERRAMIENTAS ......................................... 73
8.1.5. MANO DE OBRA ................................................................................... 73
8.2. SUMAS PARCIALES.................................................................................... 74
8.2.1. BRAZO ROBÓTICO ............................................................................... 74
8.2.2. CABEZA ROBÓTICA ............................................................................. 75
Este proyecto surge por mi interés personal hacia los robots humanoides. Un robot
humanoide es un robot de servicio que imita la apariencia humana y algunos aspectos de
su conducta. Tiene manos y brazos libres que utiliza para su interacción con el entorno,
así como sistemas de visión artificial incorporados. Aunque no hay una aplicación
determinante para este tipo de robots, actualmente la industria los está focalizando hacia
el mercado del entretenimiento. También se estudian otras áreas de aplicación, como el
mantenimiento en plantas industriales, construcción, servicio en el hogar, bienestar y
cuidado de enfermos, o rescate en catástrofes.
COG
Asimo
El objetivo principal es la construcción física del robot (brazo y cabeza) y sus circuitos
de control, la implementación de unos algoritmos básicos de desplazamiento que
permitan mover los motores del robot a cualquier posición, y la captura y procesamiento
de imágenes en tiempo real. El brazo tendrá cinco grados de libertad para emular los
movimientos del brazo derecho de una persona, desde el hombro hasta la muñeca. Cada
uno de los ojos tendrá dos grados de libertad (arriba-abajo, izquierda-derecha). Las
órdenes de movimiento se lanzarán desde un ordenador hacia el sistema robótico,
indicando la posición en la que deben situarse los motores. Una vez desplazados a la
posición deseada, los motores deberán mantener dicha posición hasta recibir una nueva
orden.
PC
Puerto serie
PLACA DE CABEZA
CONTROL
BRAZO
Webcam 1 Webcam 2
5 Motores
3 Motores
1.- PC: representa el ‘cerebro’ del robot. Se encarga de tomar decisiones de alto nivel
acerca de los movimientos de brazos y ojos. A través del puerto serie transmite a la
placa de control las órdenes que ejecutarán los motores. Además recibe y procesa las
imágenes de las webcams, para detectar la posición de la pelota.
2.- Placa de control: Recibe por el puerto serie las órdenes del PC y las convierte en
señales PWM de control dirigidas a los motores. Está constituida por
microcontroladores y etapas de potencia. Los microcontroladores aportan una
inteligencia de nivel inferior, destinada a la ejecución de órdenes y al control constante
de la posición de los motores.
3. Decisiones
de juego
6. Control de
posición de motores
HW
Microcontroladores Webcams
Tarjeta de control
o Proto-Board (matriz 15x30)
o Microcontroladores PIC16F876
o Puerto serie
Brazo robótico
o Placas de aluminio
o Ejes de fibra de carbono
o Puentes de madera
o Rodamientos
o 3 servos Hitec HSR-5995TG, 1 servo Hitec HS-81, 1 servo Futaba
S3003
Cabeza robótica
o 2 webcams Logitech Quickcam Messenger
o Placas de aluminio
o Ejes de fibra de carbono
o Rodamientos
o 2 servos Hitec HS-81, 1 servo Futaba S3003
Mecánicamente, un robot está formado por una serie de ejes o eslabones [RENT00]
unidos mediante articulaciones que permiten un movimiento relativo entre cada dos
eslabones consecutivos. El movimiento de cada articulación puede ser de
desplazamiento, giro, o una combinación de ambos. De esta forma, existen seis tipos de
articulaciones diferentes: de rotación o bisagra, prismática, cilíndrica, planar y esférica.
Cada uno de los movimientos independientes que puede realizar una articulación con
respecto a la anterior, se denomina grado de libertad (GDL) [BARR99]. En la figura de
la página siguiente se indica el número de grados de libertad de cada tipo de
articulación.
En este proyecto todas las articulaciones empleadas son del primer tipo (rotación).
Aunque se trata de una simplificación del modelo humano, se consiguen emular todos
los movimientos y grados de libertad de una persona, desde el hombro hasta la muñeca.
Es decir, no se emulan los movimientos de las manos (los dos GDL de la muñeca, y los
movimientos de los dedos).
En una articulación deslizante, los huesos se desplazan uno con respecto al otro. Las
articulaciones metacarpiales y metatarsiales de nuestras manos son deslizantes. Para este
proyecto no han sido necesarias.
Ya que aquí se trata la construcción un robot humanoide, tal vez la mejor forma de
comprender este apartado sea dividir la estructura que da soporte físico al brazo en:
- “Huesos”: los huesos son las 2 barras de color negro que aparecen en la foto de la
página siguiente.
- “Articulaciones”: (entendido en el sentido anatómico de la palabra, no con el
significado de la Robótica). Las articulaciones son las zonas intermedias de unión en
las que se da el movimiento de los huesos. Están formadas por las placas de
aluminio, los puentes y soportes de madera, y los rodamientos.
- “Músculos”: los músculos serían los motores.
Codo Hombro
Los materiales empleados han sido: madera, aluminio y fibra de carbono. Se han
seleccionado estos y no otros, teniendo en cuenta que lo primordial era conseguir la
máxima ligereza y la máxima resistencia.
El aluminio se ha utilizado sólo para las placas planas de soporte de los motores. La
madera se escogió porque era necesario crear una estructura rígida con cierto volumen
que pudiera soportar a una altura determinada los rodamientos que facilitan el giro de
los “huesos”.
Hombro
Hombro
Hombro
Codo
Codo
Motor 4 Motor 2
Es el elemento que le brinda movilidad al servo. Cuando se aplica un potencial a sus dos
terminales, este motor gira en un sentido a su velocidad máxima. Si el voltaje aplicado a
sus dos terminales es inverso, el sentido de giro también se invierte.
• 2. Engranajes reductores
• 3. Circuito de control
Este circuito es el encargado del control de la posición del motor. Recibe los pulsos de
entrada y ubica al motor en su nueva posición dependiendo de los pulsos recibidos. Los
servomotores tienen 3 terminales:
Permanece igual que antes. Pero ahora no sólo se permite la inversión del voltaje
aplicado a sus dos terminales, sino también la variación de dicho voltaje. Gracias a esta
variación se controla la velocidad, cosa que antes no podía hacerse.
• 2. Engranajes reductores
• 3. Circuito de control
¿Cuáles son los pasos que se dan internamente en el sistema para que el brazo llegue
a moverse a una posición determinada? Lo más sencillo para comprender el
funcionamiento, es visualizar las fases de un esquema general que explica el
comportamiento a lo largo de 3 etapas:
ETAPA 1. ENVÍO
Un programa Java envía las órdenes al brazo, a través del puerto serie.
Concretamente, para cada movimiento envía 5 órdenes (5 bytes, uno para cada motor).
En cada byte van 3 informaciones:
- ID: El identificador del motor al cual se lanza la orden (un nº del 1 al 5, ya que hay 5
motores)
- POS: La posición en la que deberá situarse el motor (16 posiciones diferentes, 16
ángulos).
- VEL: La velocidad a la que hay que hacer el movimiento. Para simplificar el control
solamente se han implementado 2 velocidades (0=lento, 1=rápido).
PC
Brazo
uC Motor 1
ID / POS / VEL
Pto. Serie uC Motor 2
uC Motor 3
PC
Brazo
uC Motor 1
¿ID = 1?
ID=2 / POS / VEL
No -> Reenvío
Pto. Serie uC Motor 2
¿ID = 2?
Sí -> Recepción
uC Motor 3
La dirección de giro (derecha o izquierda) se consigue enviando por el PIC una señal
TTL (un 1 o un 0) por una patita del uC que está conectada a la etapa de potencia del
motor que controla. Hacia la derecha el motor rota en el sentido de la agujas del reloj, y
hacia la izquierda en sentido contrario.
PC
Brazo
uC Motor 1
0
Pto. Serie uC Motor 2 12 4
8
ID / POS=16 / VEL=1 ¿POS actual > 8?.....Sí -> giro contrarreloj y llego a 8
¿Vel=1?.......................Sí -> PWM=38
uC Motor 3
ETAPA 1. ENVÍO
a) El PC construye un byte con la siguiente información:
- Identificador del motor: la información va dirigida al motor 2 (en binario 010)
- Posición a situar el motor: posición 16 (1000 en binario ).
- Velocidad del desplazamiento: velocidad rápida (1 en binario)
Al final, el byte completo sería: 010 1000 1
d) El PIC 2 recibe el byte. Mira la dirección, y como ve que es para él, pasa a procesar la
información.
g) Cuando llega a la posición destino, el PIC 2 frena, aplicando brevemente una señal
PWM en el sentido opuesto al de giro actual. A continuación, deja de aplicar la señal
1) Microcontrolador PIC16F876
El uC empleado es el PIC16F876. Constituye el elemento principal, ya que contiene
toda la inteligencia para el control continuo de la posición y velocidad del motor. Se ha
seleccionado este modelo, y no otro de gama inferior, porque dispone de 3
funcionalidades indispensables para este proyecto:
MCLR: Es la patilla de RESET. Mientras esta patilla esté conectada a 5V (hay un '1'
lógico en la patilla), el PIC funcionará normalmente. Cuando se ponga a 0V, el PIC
se reseteará, es decir, el programa comienza desde cero.
AN0: Entrada por la cual se recibe la señal del sensor de posición (el potenciómetro
insertado en el servo). El PIC recoge esta señal analógica y la convierte a digital para
poder operar con ella. De esta forma, controlará la posición y velocidad del motor.
CLKIN: Entrada del reloj. Para que el PIC pueda funcionar, necesita de un circuito
de reloj que le marque los tiempos. El fabricante especifica cómo deber ser este
circuito. Consta básicamente de un cristal de cuarzo, que es el que produce la
oscilación. Se ha usado un reloj de 4Mhz. El datasheet del PIC16F876 indica que la
configuración más apropiada para su montaje es:
RB0-RB7: Puerto B del PIC, usado como salida. Durante la fase de programación
del PIC y también en las pruebas, se ha conectado el puerto a 8 leds para hacer el
debugging necesario.
Vss: Tierra.
2) La etapa de potencia
Para poder gobernar motores con un PIC, debemos crear una etapa intermedia, entre la
electrónica de control, y los motores. Esta etapa se denomina "etapa de potencia".
Vemos su funcionamiento:
Puente H
Este chip lleva integrados dos puentes H (uno para cada motor). Por tanto, para un
brazo de 5 motores, han sido necesarios 3 puentes H.
Veamos cómo es el patillaje de estos chips, y para qué sirve cada cosa:
El chip tiene dos partes completamente independientes (en la figura, separadas por la
línea roja punteada). Cada una de ellas, gobierna a un motor. Veamos el patillaje de la
parte derecha:
Patilla 1A: indicará el sentido de giro del motor. Si 1A=0, girará en un sentido
(según como hayamos conectado el motor), y si 1A=1, girará en el sentido
contrario.
Patilla 2A: tiene que llegar justo la inversa de 1A. Esto se puede hacer por
software, o por hardware. Es más seguro hacerlo por hardware, haciendo pasar
a la señal 1A por un inversor.
Patilla 1,2EN: es una entrada de habilitación del chip. Esto quiere decir que si
1,2EN es un '1', el chip funcionará como se ha indicado hasta ahora. Si 1,2EN
fuese '0', el motor se para, independientemente del valor que tengan las patillas
1A y 2A (el chip está deshabilitado).
GND: Tierra.
Patillas azules: son las salidas hacia los motores. A esas patillas van conectados
directamente los bornes del motor.
Inversor
PWM
En la primera línea de la figura, el motor está encendido un 10% del tiempo, con lo
que el motor girará al 10%. En la segunda, el pulso activo del motor dura el 50%, luego
iremos a la mitad de velocidad que el motor puede dar. En el tercer caso, el motor va al
90%.
La cinemática del brazo de un robot trata del estudio analítico del movimiento del
brazo del robot con respecto de un sistema de referencia fijo como una función del
tiempo, sin tener en cuenta las fuerzas que originan el movimiento. En Robótica, las
especificaciones de movimiento se refieren al extremo del robot, o a un punto fijo de su
herramienta, que se conoce como Tool Central Point (TCP) [BARR00]. En nuestro caso
el TCP correspondería con el centro de la raqueta de ping-pong, ya que es el punto con
el que debería golpearse la pelota.
Mas difícil hubiera sido resolver el problema cinemática inverso. Trata de obtener las
coordenadas articulares que se corresponden con una orientación y una posición dados
del extremo final del robot. Este problema puede no tener solución (posiciones no
alcanzables por el robot, por ejemplo), o en caso de tenerla, puede que ésta no sea única.
Igual que antes, podemos seguir comparando el robot con un humano. Y, haciendo
una analogía, se podría hablar de la ‘cabeza’ del robot en la cual se encuentran los
‘ojos’.
Este apartado trata acerca de la construcción física de una cabeza robótica en la que
se insertan dos webcams, a modo de ojos.
Traduciendo esto a las especificaciones del robot, para conseguir los movimientos
horizontales se usan ejes verticales, y para los movimientos verticales se usan ejes
horizontales. Para simular estos movimientos, podría haberse hecho con dos ejes para
cada ojo (uno vertical y otro horizontal) y cuatro motores, pero si se aprovecha la
peculiaridad antes citada, bastaría con dos ejes verticales (uno para cada ojo), y uno
horizontal que controle el movimiento ‘arriba-abajo’ de ambos ojos al mismo tiempo.
Esto, además de simplificar el diseño físico (3 servos y 3 ejes en vez de 4 servos y 4
ejes) tiene la ventaja de ahorrar el difícil control necesario para sincronizar
adecuadamente ambos movimientos verticales.
Cada ojo tiene dos grados de libertad, puesto que cada eje permite un GDL y los dos
ojos comparten el eje horizontal.
Por tanto, de nuevo se repiten las 3 etapas de control de bajo nivel. Sin embargo, lo
que sí varía es el control de alto nivel. Consiste en la lógica que, tomando como input la
posición de la pelota de ping-pong, lanza las órdenes a los microcontroladores que
mueven los ojos. Esta parte no ha llegado a implementarse para este proyecto y por eso
en la descripción del funcionamiento general sólo se hará referencia al bajo nivel.
¿Cuáles son los pasos de bajo nivel que se dan internamente en el sistema para que
los ojos lleguen a moverse?
ETAPA 1. ENVÍO
Un programa Java envía las órdenes a los ojos, a través del puerto serie. Para cada
movimiento envía 3 órdenes (3 bytes). En cada byte van 3 informaciones:
- ID: El identificador del motor al cual se lanza la orden (un nº del 1 al 3, ya que hay 3
motores). El motor 1 controla el eje vertical y los motores 2 y 3 controlan los ejes
verticales del ojo izquierdo y derecho, respectivamente.
- POS: La posición en la que deberá situarse el motor (16 posiciones diferentes, 16
ángulos).
- VEL: La velocidad a la que el ojo tendrá que moverse para seguir la pelota. Solamente
se han implementado 2 velocidades (0=lento, 1=rápido).
PC uC Motor uC Motor
3 2
Ojos uC Motor 1
ID / POS / VEL
Pto. Serie
PC uC Motor uC Motor
3 2 ID=2 / POS / VEL
¿ID = 2?
Ojos Sí -> uC Motor 1
Recepción
¿ID = 1?
No ->
Pto. Serie
¿POS actual > 8?.....Sí -> giro ojo a izqda y llego a pos 8
ID / POS=16 / VEL=1
¿Vel=1?.......................Sí -> PWM=38
Pto. Serie
El diseño electrónico de los ojos es igual que el realizado para el brazo. Unos
microcontroladores controlan los motores utilizando una etapa de potencia. Lo único
que cambia es el número de PICs: solamente son necesarios 3 uC, ya que sólo hay 3
motores a controlar.
JMF es mucho más complejo que todo eso. Pero podríamos decir a grandes rasgos
que las clases Java programadas para este proyecto utilizan esas 3 clases de la API,
extendiendo sus funcionalidades.
1. Input: En este proyecto hay 2 inputs. Son las 2 web-cams, que funcionan como
ojos del robot. Se capturan por tanto las imágenes en tiempo real, no se leen desde
un archivo ni se reciben por la red.
Lo primero que hace el programa es buscar en el sistema la cámara logitech (el ojo),
que es un dispositivo de captura conectado al PC al que Windows asigna el
identificador “vfw:Microsoft WDM Image Capture (Win32):0". El código es el
siguiente:
JMF admite muchos formatos de vídeo. En todos ellos tenemos por un lado una
pista de vídeo, y por otro una pista de audio. Nos interesa obtener sólo la de
vídeo, para analizar la imagen.
2. Procesamiento: Una vez caputurados los datos, están listos para procesar. Para
ello se crea un procesador (Processor) que tendrá que pasar por una serie de
estados hasta poder empezar a procesar.
//Ponemos el Processor en estado ‘configured’. De esta forma se podrá usar como Player
p.configure();
videoTrack.setCodecChain(codecs);
cls = ClassLoader.getSystemClassLoader().loadClass(videorenderer);
videoTrack.setRenderer((Renderer) cls.newInstance());
//Arrancamos el processor
p.start();
for(h=1;h<height-1;h++)
{
contaNar=0;
for(w=1;w<width-1;w++)
{
ofs = h*width+w;
if(! esNaranja4(buf[ofs]))
buf[ofs]=0; //a negro todo lo q no sea naranja
else
contaNar++;
}
if (contaNar>contaNarWidthMax)
{
contaNarWidthMax = contaNar;
maxNarHeight = h;
}
for(w=1;w<width-1;w++)
{
contaNar=0;
for(h=1;h<height-1;h++)
{
ofs = h*width+w;
if(! esNaranja4(buf[ofs]))
buf[ofs]=0; //a negro todo lo q no sea naranja
else
contaNar++;
}
if (contaNar>contaNarHeightMax)
{
contaNarHeightMax = contaNar;
maxNarWidth = w;
}
}
ofs = maxNarHeight*width+maxNarWidth;
buf[ofs]=16711680; //Señalo con un puntito azul el centro de masas de la pelota naranja
buf[ofs+1]=16711680;
buf[ofs+2]=16711680;
}
brillos[ofs]= (short)br;
buf[ofs] = buf[ofs] = (br<<16)+(br<<8)+br;
}
}
// Sobel
gradH = -1*brillos[ofs-1] + brillos[ofs+1]; if(gradH<0) gradH=-gradH;
gradV = -1*brillos[ofs-width] + brillos[ofs+width];
if(gradV<0) gradV=-gradV;
grad = gradH+gradV;
3. Output: tras haber procesado los datos, se muestra por pantalla la imagen
procesada, en tiempo real. Esto no es necesario para el funcionamiento interno
Motores:
Se decidió emplear servomotores modificados, para que actuaran como motores
normales de continua, con la ventaja de mantener su caja reductora y por consiguiente
un gran par de salida. Su velocidad y dirección de giro se controla mediante PWM y
puentes en H, con microcontroladores.
Microcontroladores:
Comunicaciones:
Para la comunicación entre el PC y el robot se utiliza el puerto serie del ordenador, y los
módulos UART de los PIC. Aunque en principio se hicieron pruebas con el puerto
paralelo, finalemente se decidió simplificar el diseño adoptando el puerto serie. Se ha
creado un protocolo simple de comunicaciones, por el cual cada PIC tiene un
identificador, y solo atiende las órdenes que lleven dicho ID.
Procesamiento de imágenes:
Se emplea el Java Media FrameWork (JMF), API de java para datos multimedia, que
permite la captura y procesamiento de imágenes. Se escogió Java y JMF porque era la
forma más rápida de desarrollar un aplicación que pudiera tomar datos provenientes de
una cámara de vídeo.
Cámaras de video:
2 web-cams “Logitech QuickCam”. Recogen 15 imágenes por segundo, lo cual es
suficiente para el seguimiento de una pelota en movimiento.
Tras el diseño, se pasó a la construcción del brazo y la cabeza del robot. El hecho de
tener que fabricar las piezas de forma artesanal y hacer múltiples pruebas con diversos
materiales buscando dichos materiales en infinidad de tiendas, contribuyó a alargar esta
fase.
El proyecto se inició unos meses antes del curso 2005-2006. En principio se calculó
una distribución de horas que permitiera finalizarlo durante ese año, aunque con mucha
carga de horas:
Es decir, en vez de las 650 horas planificadas inicialmente, se han tenido que dedicar
1.250 horas. No ha podido iniciarse la programación de las estrategas de juego ya que
esta tarea tenía dependencias con la tarea de coordinación de los movimientos del brazo
con el ojo. Ninguna de esas dos tareas ha llegado a iniciarse, pero el resto de tareas sí
han sido finalizadas con éxito.
8.1. MEDICIONES
• No se tiene en cuenta el precio del equipo informático necesario para llevar a cabo la
programación y pruebas de la placa, por ser válida cualquier configuración con los
sistemas operativos adecuados. Sí se considerará, por contra, el equipo informático
que contiene la ‘inteligencia’ del robot (procesamiento de imágenes y control de
movimientos), así como las diversas herramientas y equipos de medida necesarios
para la fabricación de la placa de control de motores, realización de pruebas y
construcción del robot.
Estructuras de soporte:
• 15 Tornillos pequeños
• 18 Tornillos grandes
Estructuras de rotación:
• 5 Rodamientos de acero
Motores:
Estructuras de soporte:
• 8 Tornillos
• 8 Tuercas
Estructuras de rotación:
• 6 Rodamientos de acero
Cámaras:
Motores:
Integrados:
• 5 PIC16F876
• 3 L293D
• 1 74LS14
• MAX233CPP
• 5 Zócalos de 28 patillas
• 3 Zócalos de 16 patillas
• 1 Zócalo de 14 patillas
• 1 Zócalo de 20 patillas
Conectores:
• 1 Conector macho de cable plano de 2 vías
• 1 Clema de dos contactos (para la alimentación)
• 1 Conector DB-9 hembra
Otros elementos:
• 1 Placa protoboard “Adle-board” de 12 x 17 cm
• 5 Resistencias de 100 ohm
• 10 Condensadores cerámicos de 22 pF
• 5 Cristales de cuarzo de 4 Mhz
• 20 Leds
• 1 Alimentador AC-DC de 9V
• 1 Alimentador AC-DC de 6V
• 1 Soldador
• 1 Multímetro
Descripción Cantidad
Documentación previa 75 horas
Diseño y montaje del robot 300 horas
Diseño e implementación de la placa de control de motores 300 horas
Desarrollo de software 500 horas
Depuración y pruebas 50 horas
Documentación final 25 horas
1. Pruebas de Velocidad:
Las articulaciones del brazo robótico alcanzan velocidades de rotación de hasta
0.45 seg/180º. Sumando el movimiento sincronizado del conjunto de
articulaciones, podemos llegar a velocidades de desplazamiento de la raqueta de
hasta 4.5 m/seg. El 95% de los movimientos de un jugador medio de ping-pong
están por debajo de ese límite. Esto significa que, dotado de la inteligencia
adecuada, el sistema físicamente sería capaz de jugar a la velocidad requerida
por un humano.
Los ojos de un ser humano pueden llegar a moverse a velocidades elevadísimas
(0.1 seg/180º). Pero estos movimientos repentinos y bruscos sólo se usan cuando
desviamos la mirada de nuestro foco de atención para llevarla hacia un nuevo
estímulo (son los denominados movimientos saccádicos). En realidad, para las
tareas de seguimiento de una pelota de ping-pong que un adversario lance contra
la mesa no necesitamos más de 0.3 seg/180º, ya que está es la velocidad máxima
a la que se despazará la pelota ante nuestro campo visual si es lanzada a 20
metros/seg desde el lado opuesto contra nuestro lado de la mesa. Lo habitual en
un jugador medio será que el 90% de las pelotas no superen los 5 metros/seg y
que por tanto basten giros oculares de 0.3 seg/180º). El sistema de Visión
Artificial consigue mover los ejes oculares a una velocidad máxima de hasta 0.3
seg/180º. De nuevo, esto implica que, dotado de la inteligencia adecuada, el
sistema físicamente sería capaz de jugar a la velocidad requerida por un humano.
Especialmente difícil ha resultado el diseño de un brazo que fuera capaz de imitar los
grados de libertad de una persona. Para los ojos había modelos a seguir (por ejemplo el
diseño de Cog), pero el brazo ha sido concebido sin partir de nada que no fuera la mera
inspiración aportada por libros de Anatomía. La fase de construcción y ensamblado de
las piezas y la búsqueda de materiales han resultado especialmente largas.
Han sido necesarios más de dos años de trabajo, pero el esfuerzo ha merecido la pena si
observamos los resultados obtenidos:
Diseño y construcción de un brazo robótico ligero y resistente, con idéntica
libertad de movimiento a la de un brazo humano.
Diseño y construcción una cabeza robótica con unos ojos que imitan los
movimientos de los ojos de una persona.
Control de la posición del brazo y de los ojos desde un PC.
Control de la velocidad de los movimientos de los motores.
Se muestran por pantalla las imágenes capturadas y las procesadas
Procesamiento simple de imágenes (paso de color a blanco y negro, por ejemplo)
Implementación del algoritmo de Sobel, que detecta cambios bruscos en la
luminosidad de las imágenes (se muestran por pantalla los bordes resaltados en
negro).
Detección del centro de masas de una pelota de ping-pong (se muestra por
pantalla un punto azul que resalta el centro de la pelota).
Estas dos actividades tienen la entidad propia y la carga de horas suficientes como para
desarrollarse en un nuevo proyecto.
Pero además, si se añadiera una mano robótica al final del brazo, podrían extenderse las
aplicaciones de este sistema brazo-cabeza. Hay infinidad de tareas no relacionadas con
el ping-pong, que no requieren una gran fuerza ni grandes dosis de procesamiento de
imágenes. Por ejemplo, la asistencia en alimentación a discapacitados, o algunos juegos
de mesa, como el ajedrez. También queda, por tanto, abierta esta posibilidad de
desarrollo futuro.
Libros:
[BARR99]
- “Fundamentos de Robótica”
Antonio Barrientos, Luis Felipe Peñín, Carlos Balaguer, Rafael Aracil
Ed. Mc Graw Hill
[RENT00]
- “Robótica Industrial. Fundamentos y aplicaciones”
Arantxa Rentería, María Rivas
Ed. Mc Graw Hill
[ANGU00]
- “Microcontroladores PIC”
José María Angulo Amusátegui, Ignacio Angulo
Ed. Mc Graw Hill
[SOBO97]
- “Atlas de anatomía humana”
J. Sobotta
Editorial Médica Panamericana
[PERE01]
- “Anatomía funcional del aparato locomotor”
A. Pérex Casas, M.E. Bengoechea
Ed. Summa
- “PIC16F876 Datasheet”