asistente robotizado para la gestión interactiva de medicamentos a
TRANSCRIPT
Universidad Politecnica de Madrid
Facultad de Informatica
Tesis de Master
Master en Inteligencia Artificial
Asistente Robotizado para la
gestion interactiva de
medicamentos a personas
dependientes basado en vision
artificial y comunicacion
simbolica, desarrollado sobre un
robot humanoide Meccanoid
G15KS adaptado
AUTOR: Ruben Martın Garcıa
TUTORES: Darıo Maravall Gomez-Allende y Javier de Lope Asiaın
2016
Resumen
Existe una gran cantidad de personas dependientes que requieren de ayuda para
diversas tareas. Entre todas ellas la que mas se repite es la administracion de medica-
mentos. En estos casos lo habitual es que un familiar atienda a la persona dependiente
o contrate a un asistente social, sin embargo esto no siempre es posible. Una solucion
a esto podrıa ser el uso de un robot que se encargue de gestionar la medicacion de la
persona dependiente.
En este trabajo se ha disenado un procedimiento que puede ser usado para gestionar
la medicacion de personas dependientes. El procedimiento se divide en dos etapas. La
primera consiste en una fase de adquisicion de lexico comun basado en anclaje visual. Se
usa vision artificial y un puntero laser para senalar el medicamento y texto para indicar
su nombre. Este proceso tambien es utilizado para el entrenamiento del algoritmo de
clasificacion.
La segunda fase, denominada fase de busqueda, consiste en encontrar un medicamento
situado sobre una estanterıa repleta de medicamentos diferentes. El robot hace uso de la
vision artificial para segmentar cada medicamento y un clasificador knn para encontrar
el medicamento. Posteriormente el robot es capaz de senalizar el medicamento con su
puntero laser.
Para la realizacion de las pruebas se ha adaptado un robot humanoide Meccanoid
G15KS. Se ha modificado la estructura para anadir una plataforma pan-tilt, un puntero
laser y una camara. Tambien se ha sustituido el procesador original por un miniorde-
nador Raspberry Pi para realizar la vision por computador y una placa Arduino para
el control de motores.
ii
Abstract
There are many disabled people who require help to do different tasks. The one which
repeats a lot is drugs manage. Usually, in these situations a relative or a social assistant
takes care of the disabled person. However this can not be posible always. The use of a
robot witch manages disabled person’s drugs could be a solution for this fact.
In this work a possible procedure has been designed that can be used to manage the
medication of dependent people. The procedure is divided in two stages. First stage
consists of a phase of acquisition of common lexicon based on visual anchorage. We use
computer vision and the laser to point to the drug and text to indicate its name. This
process also is used for training the classiffier.
The second stage, denominated search phase, consists of finding a drug located on a
bookcase filled with other different drugs. The robot use computer vision to segment
each medicine and a knn classifier to find the drug. Later, the robot points the drug
with its laser.
To test this worh we has adapted a humanoid robot named Meccanoid G15KS. Its
structure has modified to add a pan-tilt mechanism, a laser, and a camera. Also, we
replace the original processor by a Raspberry Pi single-board computer to process
computer vision, and a Arduino board for the engine control.
iii
Indice general
Resumen II
Abstract III
1. Introduccion 1
1.1. Planteamiento del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Descripcion de la aplicacion 6
2.1. Escenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Humanoide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3. Universo de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4. Planteamiento del proceso . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1. Adquisicion de lexico . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.2. Fase de busqueda . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3. Descripcion hardware del robot 16
3.1. Diseno del robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.1. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1.2. Diseno electronico . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2. Detalles tecnicos del hardware . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.1. Meccanoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.2. Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.3. Modulo camara de Raspberry Pi . . . . . . . . . . . . . . . . . 29
3.2.4. Puntero laser . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.5. Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
iv
Indice general
4. Proceso de adquisicion de lexico 33
4.1. Esquema general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2. Fases del proceso de adquisicion de lexico . . . . . . . . . . . . . . . . . 37
4.2.1. Filtrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.2.2. Deteccion de bordes . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.3. Deteccion de laser . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.4. Identificar objeto apuntado . . . . . . . . . . . . . . . . . . . . 41
4.2.5. Segmentar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.2.6. Guardado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5. Proceso de busqueda 45
5.1. Fases de la busqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.1.1. Busqueda de objetos . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1.2. Segmentacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.1.3. Clasificar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.1.4. Calcular movimiento del robot . . . . . . . . . . . . . . . . . . . 49
5.1.5. Mover el robot y senalar . . . . . . . . . . . . . . . . . . . . . . 52
6. Implementacion 54
6.1. Plataformas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.2. Lenguaje de programacion . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.3. Librerıas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.4. Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7. Diseno y evaluacion del Reconocedor de medicamentos 58
7.1. Clasificador knn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2. Variables discriminantes . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.3. Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.4. Universo de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.5. Resultados del clasificador . . . . . . . . . . . . . . . . . . . . . . . . . 67
8. Conclusiones 70
9. Lıneas de trabajo futuro 73
v
Indice de figuras
1.1. Vision artıstica del proceso de aprendizaje. . . . . . . . . . . . . . . . . 2
1.2. Vision artıstica del proceso de busqueda. . . . . . . . . . . . . . . . . . 3
2.1. Escenario de desarrollo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Estanterıa de medicamentos. . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3. Robot Meccanoid G15KS modificado. . . . . . . . . . . . . . . . . . . . 9
2.4. Adquisicion de lexico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5. Proceso de busqueda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1. Meccanoid G15 KS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2. Modificacion de la cabeza. . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3. Proceso de fabricacion de la pieza para la camara y el laser. . . . . . . 21
3.4. Piezas personalizadas para el soporte de Raspberry Pi y Arduino. . . . 21
3.5. Esquema electronico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.6. Modelos de Meccanoid. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.7. Placa Raspberry Pi 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.8. Modulo camara de Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . 29
3.9. Puntero laser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.10. Placa BQ Zum Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1. Diagrama de estados del proceso de aprendizaje . . . . . . . . . . . . . 34
4.2. Diagrama de actividad del proceso de aprendizaje . . . . . . . . . . . . 36
4.3. Proceso de filtrado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.4. Deteccion de bordes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.5. Deteccion de laser e identificacion. . . . . . . . . . . . . . . . . . . . . . 42
4.6. Imagenes segmentadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
vi
Indice de figuras
5.1. Diagrama de actividad del proceso de busqueda . . . . . . . . . . . . . 46
5.2. Proceso de busqueda de Aspirina. . . . . . . . . . . . . . . . . . . . . . 49
5.3. Esquema FOV vertical y horizontal de la camara. . . . . . . . . . . . . 50
5.4. Modelizado de la cabeza del robot. . . . . . . . . . . . . . . . . . . . . 51
7.1. Universo de trabajo: Almax. . . . . . . . . . . . . . . . . . . . . . . . . 62
7.2. Universo de trabajo: Aspirina. . . . . . . . . . . . . . . . . . . . . . . . 63
7.3. Universo de trabajo: BB Cream. . . . . . . . . . . . . . . . . . . . . . . 63
7.4. Universo de trabajo: Celestoderm. . . . . . . . . . . . . . . . . . . . . . 64
7.5. Universo de trabajo: Dretine.. . . . . . . . . . . . . . . . . . . . . . . . 64
7.6. Universo de trabajo: Enantyum. . . . . . . . . . . . . . . . . . . . . . . 65
7.7. Universo de trabajo: Espidifen. . . . . . . . . . . . . . . . . . . . . . . 65
7.8. Universo de trabajo: Fungusol. . . . . . . . . . . . . . . . . . . . . . . . 66
7.9. Universo de trabajo: Glicilax. . . . . . . . . . . . . . . . . . . . . . . . 66
7.10. Universo de trabajo: Oliderm. . . . . . . . . . . . . . . . . . . . . . . . 67
7.11. Universo de trabajo: Pharmaton. . . . . . . . . . . . . . . . . . . . . . 67
7.12. Grafica del resultado de leave-one-out . . . . . . . . . . . . . . . . . . . 68
vii
Indice de cuadros
3.1. Especificaciones del MeccaCerebro . . . . . . . . . . . . . . . . . . . . . 26
3.2. Caracterısticas principales de los robots Meccanoid . . . . . . . . . . . 27
3.3. Especificaciones de las Placas Genuino UNO y BQ Zum Core . . . . . . 32
7.1. Resultado Leave-one-out . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.2. Matriz de confusion (k=1) . . . . . . . . . . . . . . . . . . . . . . . . . 69
viii
Capıtulo 1
Introduccion
La dependencia personal es la incapacidad funcional para el desarrollo de activida-
des de la vida diaria y el requerimiento de ayuda para su realizacion. Las personas
dependientes se caracterizan por la perdida o la no adquisicion de habilidades funcio-
nales, que se definen como el conjunto de destrezas que se requieren para llevar una
vida independiente y que poseen las personas que se desenvuelven por sı mismas en
su entorno proximo. Para establecer la calificacion de personas dependientes deben es-
tar en una situacion o grado lo suficientemente notable o elevado de discapacidad y
disfuncionalidad como para necesitar el concurso, la intervencion en forma de ayuda,
auxilio, soporte y cuidado personal por terceros, bien de su familia o bien la asistencia
de servicios sociales.
Dependiendo el grado de dependencia de una persona, esta puede requerir ayuda en
tareas como la alimentacion, higiene o administracion de medicamentos, posiblemente
siendo esta ultima la mas demandada. El problema mas comun es que la persona depen-
diente pierde la nocion del tiempo y se olvida de cuando tiene que tomar la medicina,
o incluso se puede llegar al caso de que desconoce cual es la medicacion y cantidad
que debe tomar en cada caso. En otras ocasiones puede ocurrir que el farmaceutico
proporcione el medicamento incorrecto y la persona dependiente no se de cuenta; esto
puede implicar graves danos a la salud. Normalmente otra persona, sea familiar o un
asistente, es el encargado de supervisar o gestionar la administracion de medicamentos
de forma continua.
1
Capıtulo 1. Introduccion
En muchas ocasiones el familiar que debe ayudar a la persona dependiente no dispone
de tiempo ni de medios para atender a esa persona, y la unica solucion que se encuentra
a dıa de hoy es la de contratar ayuda externa, como un asistente de servicios sociales.
Una nueva forma de ayuda que se esta investigando recientemente es el uso de robots
para la ayuda de este tipo de personas (Tiwari et al., 2011), (Cunha et al., 2014).
A continuacion se muestran una serie de trabajos relacionados: (Rouanet et al., 2013),
(Kemp et al., 2008), (Rouanet et al., 2009), (Yu y Ballard, 2003), (Parde et al., 2015),
(Nagai et al., 2003).
1.1. Planteamiento del proyecto
En el transcurso de este trabajo vamos a ver una novedosa tecnica que permite
adaptar un robot para su uso con personas dependientes. Mas concretamente, nos vamos
a cenir al uso del robot en la tarea de gestionar la medicacion. La idea principal es que
el robot pueda aprender mediante un lexico con anclaje visual a recordar e indicar al
paciente el medicamento determinado que debe tomar en cada momento.
Figura 1.1: Vision artıstica del proceso de aprendizaje.
El proceso de adquisicion de lexico consiste en disponer los diferentes medicamentos
frente al robot y el usuario, por ejemplo, en una mesa o en una estanterıa. Tanto la
2
1.1. Planteamiento del proyecto
persona como el robot deben mirar al mismo punto en el espacio, y por ello deben de
alinear sus perspectivas. Una vez que ambos observan lo mismo procedemos al apren-
dizaje, para ello el usuario debe indicar un medicamento, o bien mediante un gesto
deıctico o bien mediante un puntero laser, y al mismo tiempo debe indicar el nombre
del medicamento. De esta forma el robot sera capaz de etiquetar el medicamento con
el nombre que le corresponde. En este trabajo se ha decidido usar un puntero laser
como metodo de senalizacion y texto escrito como metodo para indicar el nombre del
medicamento.
El proceso de busqueda, es decir, el momento en el que el robot debe indicar la
medicacion a la persona dependiente, puede realizarse de dos formas diferentes: por un
lado el robot puede disponer de una agenda en la cual sabe que medicamento debe
indicar y en que dıa y hora. En el otro caso el paciente pregunta al robot que le
indique donde se encuentra un medicamento. En ambos casos el proceso es el mismo,
independientemente de la forma en la que se pida el medicamento. El robot se situara
frente a los medicamentos y movera la cabeza en busca de aquel que se haya solicitado.
Una vez que lo encuentre, el robot centrara el medicamento en la imagen y activara el
laser senalando de forma precisa cual es el medicamento.
(a) Situacion 1. (b) Situacion 2.
Figura 1.2: Vision artıstica del proceso de busqueda.
Para esta tarea que hemos planteado, el robot que necesitaremos debera tener forma
antropomorfica y con una apariencia que le resulte simpatica al paciente. Esta ultima
cuestion se debe a que el mayor problema que nos encontramos a la hora de introducir
3
Capıtulo 1. Introduccion
un robot de companıa en un entorno familiar, especialmente si este es poco atractivo
y/o tiene una forma extrana, muy lejana a la humana, la respuesta mas comun es el
rechazo.
El robot debera poder realizar movimientos de la cabeza tanto verticales como ho-
rizontales. Si el robot ademas es capaz de moverse por el entorno y de mover sus
extremidades nos ofrecera mayor flexibilidad a la hora de realizar tareas mas complejas
o combinar algunas de ellas. Al mismo tiempo resulta mucho mas agradable tratar con
el robot si este es capaz de hablar y mover sus extremidades al mismo tiempo.
Sera necesario que el robot disponga de una camara y un laser en la cabeza. Para
simplificar el problema, el laser debera estar alineado con el campo de vision de la
camara; de esta manera el puntero laser se encontrara siempre en el centro de la imagen.
La conjuncion del movimiento horizontal y vertical de la cabeza con la incorporacion
de una camara y un laser, facilita que en la fase de aprendizaje el robot pueda alinear
su ”vistacon la del usuario para observar el mismo punto en el espacio. Ası, en la
fase de explotacion, el puntero marcara el medicamento en cuestion y el usuario podra
reconocer con exactitud de cual se trata.
Las pruebas se han realizado en un robot Meccanoid modificado. La primera mo-
dificacion consiste en descartar el procesador que trae de fabrica el robot y usar un
miniordenador, mas concretamente una Raspberry Pi. Para que el control de motores y
servos sea independiente y libere uso del procesador se ha anadido una placa Arduino
para su control. Como se trata de un robot fabricado por Meccano, esta formado a base
de piezas sencillas de plastico unidas por tornillos, lo que permite anadir, modificar o
quitar alguna de las partes del robot con total facilidad. En este caso se han creado
algunas piezas personalizadas, las cuales se han usado para sujetar el laser, la camara,
la placa de Arduino y la Raspberry Pi.
4
1.2. Objetivos
1.2. Objetivos
La idea principal de este proyecto consiste en disenar un sistema que permita a
un robot buscar e identificar medicamentos para ayudar a personas dependientes. A
continuacion se muestran los diferentes objetivos que deben completarse.
El primer objetivo que consiste en disenar un metodo de comunicacion entre hombre
y maquina simbolico.
Se quiere implementar un sistema sobre un robot que le permita realizar la tarea
de adquisicion de lexico mediante anclaje visual. De tal forma que el uso de un lexico
comun permita la comunicacion entre hombre y maquina.
Se debe disenar un sistema capaz de encontrar un medicamento dentro de un entorno
de forma autonoma, que se pueda ejecutar en diferentes situaciones.
Se programara un metodo basado el vision artificial que permita reconocer los dife-
rentes medicamentos.
Finalmente sera necesario disenar y fabricar un robot que permita alcanzar los obje-
tivos anteriores.
5
Capıtulo 2
Descripcion de la aplicacion
El objetivo principal de este proyecto es conseguir que un robot sea capaz de gestionar
la medicacion a una persona dependiente de forma autonoma. Para ello el robot debe
saber buscar e identificar los medicamentos que necesite el paciente en cada momento.
Lo primero que debe hacer el robot es aprender como son los medicamentos y que
nombre tienen. Una vez aprendidos todos los medicamentos que necesita el paciente,
podremos programar una agenda en la cual indicaremos las horas a las que debe tomar
el medicamento. Ademas en cualquier momento podremos preguntar al robot donde se
encuentra un medicamento, simplemente diciendo su nombre. Como vemos, aparecen
dos fases, una de adquisicion de lexico y otra de busqueda de medicamentos.
Vamos a llamar paciente a la persona dependiente a la que han de administrarse
medicamentos y cuidador a la persona que normalmente esta a su cuidado. El cuidador
sera la persona encargada de realizar el proceso de adquisicion de lexico.
Para resolver el problema que nos atana vamos a seguir la metodologıa de la navaja de
Ockham que dice: ”En igualdad de condiciones, la explicacion mas sencilla suele ser la
mas probable”. En ingenierıa una solucion sencilla suele ser mucho mas eficiente que una
solucion compleja. Por este motivo en este proyecto nos hemos centrado en encontrar y
aplicar solo las soluciones mas sencillas entre todas las que se han propuesto. Tambien
es un punto de partida para mejorar y adaptar el problema a situaciones mas complejas
en un trabajo futuro.
6
2.1. Escenario
2.1. Escenario
Lo primero es definir como va a ser el escenario en el que se van a realizar los ex-
perimentos. Vamos a situar el robot frente a una estanterıa donde se van a colocar los
medicamentos. En la fase de adquisicion de lexico el cuidador debe encontrarse al lado
del robot y mirar hacia la estanterıa. En la fase de busqueda, ya sea el paciente o el cui-
dador, deberan situarse nuevamente al lado del robot para poder ver que medicamento
esta senalando el robot con el puntero laser una vez que este ha activado su alarma.
Figura 2.1: Escenario de desarrollo.
Los medicamentos van a estar colocados en una estanterıa con 3 baldas, que puede
estar anclada en una pared o puesta encima de una mesa. Se debe tener en cuenta que
debe estar a una altura a la cual el robot pueda acceder facilmente. Los medicamentos
se dispondran de forma vertical en las baldas de tal forma que no se superpongan.
La colocacion de los medicamentos en vertical nos ayuda a solucionar dos proble-
mas principalmente; si colocamos los medicamentos sobre una mesa, todas las cajas
se situan en el mismo plano lo que aumenta la probabilidad de que los medicamentos
se superpongan unos delante de otros. Nos encontramos con el problema de identificar
y segmentar que parte de la imagen corresponde a cada medicamento. Por otro lado,
al situarse sobre una mesa, la cantidad de posiciones y perspectivas en las que puede
7
Capıtulo 2. Descripcion de la aplicacion
situarse cada medicamento es mucho mayor que las posiciones que puede tomar en la
estanterıa, lo que complica considerablemente el reconocimiento.
(a) Anclada a la pared. (b) Puesta sobre una mesa.
Figura 2.2: Estanterıa de medicamentos.
La estanterıa se ha fabricado desde cero para ajustarla a las medidas y requisitos del
proceso. El material que se ha usado es carton pluma, que consiste en dos cartulinas
de color blanco, rellenas por una capa de poliuretano. Este material aunque es muy
ligero tiene la consistencia suficiente como para soportar las cajas de los medicamentos.
Para mejorar el contraste entre los medicamentos y la estanterıa, esta se ha recubierto
con goma eva de color negro. El nombre tecnico es etilvinilacetato, es un polımero
termoplastico conformado por unidades repetitivas de etileno y acetato de vinilo. Este
material ofrece una superficie uniforme y mate, lo que evita reflejos indeseados.
2.2. Humanoide
El humanoide que se ha usado en los experimentos de este trabajo es un Meccanoid
G15 KS modificado, al cual se ha anadido lo siguiente: capacidad de mover la cabeza de
forma horizontal y vertical, una camara, un laser, una placa Raspberry Pi y un Arduino.
En el siguiente capıtulo se explica con mas detenimiento cada una de las modificaciones
realizadas en el robot.
8
2.3. Universo de trabajo
Figura 2.3: Robot Meccanoid G15KS modificado.
La comunicacion hombre-maquina se va a realizar mediante texto. Los mensajes del
robot se van a mostrar en una pantalla y las ordenes se van a escribir con un teclado.
Lo ideal es que este proceso de comunicacion se hiciese mediante voz, ya que se trata
del metodo de comunicacion mas usado entre humanos. Sin embargo nos encontramos
ante varios problemas que nos dificultan su uso. Para empezar, hay que tener en cuenta
que el proceso de reconocimiento de voz es una gran reto, de hecho hay un gran numero
de personas trabajando en ese tema. Resolver el tema de reconocimiento de voz ademas
del problema de vision planteado, sobrepasa los objetivos planteados en este proyecto.
Aunque existen algunas aplicaciones de reconocimiento de voz, las que mejor funcionan
son aplicaciones comerciales, y resulta costoso adquirirlas. Ademas, habrıa que haber
anadido al robot un microfono y unos altavoces, junto a las modificaciones que ya se
han hecho.
2.3. Universo de trabajo
El universo de trabajo es una coleccion finita de elementos que se van a utilizar
durante el experimento para poder probar y validar el planteamiento propuesto.
Como el objetivo es reconocer y encontrar medicamentos, deberemos elegir cuales
vamos a usar. Se parte de la premisa de trabajar con unos 10 o 12 medicamentos
diferentes. Tambien se ha decidido usar la caja en vez de los blisters o las capsulas.
9
Capıtulo 2. Descripcion de la aplicacion
Si ya resolver el problema de clasificacion puede resultar complicado para la caja, el
problema se vuelve mas complejo si hay que distinguir entre los blisters o la propia
capsula del medicamento porque las capsulas o los blisters son practicamente iguales
en todos los casos.
2.4. Planteamiento del proceso
Como hemos mencionado antes, la resolucion del problema planteado debe llevarse
a cabo en dos fases. Una primera de adquisicion de lexico, en la cual el robot debe
aprender el nombre y la apariencia de cada medicamento. La segunda fase, serıa la de
busqueda, en la cual el robot debe buscar el medicamento indicado en el entorno.
2.4.1. Adquisicion de lexico
Figura 2.4: Adquisicion de lexico.
En el proceso de aprendizaje de lexico vamos a ensenar al robot el nombre de cada
medicamento. Este proceso implica que debemos resolver una serie de problemas que
surgen del propio planteamiento. Para empezar tenemos que tener en cuenta que el
robot va a tener dentro de su campo de vision varias cajas de medicamentos al mismo
tiempo, y debemos pensar en una forma de senalar un medicamento y distinguirlo del
resto. El metodo mas intuitivo es la senalizacion mediante un gesto deıctico, es decir
10
2.4. Planteamiento del proceso
un gesto con la mano. Podrıamos hacerlo senalando con el dedo, pero esto anade otra
problema extra y es identificar hacia donde esta apuntando con el dedo. Otro gesto que
se puede emplear es el de tocar el medicamento, ya sea con un dedo o con la mano
entera. Tambien podemos coger el medicamento con las manos y mostrarlo de frente al
robot. En todos estos casos nos encontramos con el problemas de segmentar los dedos o
la mano del medicamento, y en algunas ocasiones puede entorpecer el reconocimiento.
Otro metodo que se puede usar es un puntero laser para senalar el medicamento.
Simplemente el cuidador se encargarıa de apuntar el medicamento con el laser. Este
proceso simplifica el problema de segmentacion mencionado anteriormente, ya que no
tenemos ningun objeto que se superponga por encima de la caja, como si ocurre al
coger el medicamento con las manos. Sin embargo surge el siguiente problema: como
el puntero laser va a situarse dentro de la caja del medicamento, si capturamos una
imagen mientras el puntero sigue dentro, surge el problema de segmentar el puntero del
medicamento. Sin embargo es facil de evitarlo, simplemente se debe capturar la imagen
una vez que dejemos de apuntar con el laser.
La forma mas sencilla de detectar el laser es mediante un filtrado y quedarnos solo con
los pıxeles con mayor intensidad de la imagen. Esto anade otro problema mas difıcil de
resolver, que aparece cuando la iluminacion de la escena es muy intensa, por ejemplo, si
iluminamos la escena con un foco que apunte directamente a los medicamentos, podemos
encontrarnos con una gran cantidad de pıxeles con un valor de intensidad muy alto,
que van a interferir directamente con la deteccion del laser. Esto puede provocar dos
comportamientos, o que se detecten multiples punteros laser, o que el laser no sea
detectado.
Se analizaron las dos opciones, y al final el metodo que se ha elegido es el de la
deteccion del puntero laser.
Ademas de senalar el medicamento, el robot debe de ser capaz de identificar donde
esta el borde del medicamento para recortarlo, en palabras mas tecnicas, debe segmentar
el medicamento de la imagen. El primer paso para resolver este problema consiste en
identificar los diferentes objetos que se encuentran dentro del campo de vision del robot.
11
Capıtulo 2. Descripcion de la aplicacion
El siguiente paso consiste en usar la senalizacion del medicamento con el puntero laser
para realizar la segmentacion de dicho medicamento.
Si tenemos en cuenta que se va a apuntar en el interior del medicamento, este proceso
anade el problema de identificar donde se encuentran los bordes. La forma de solucio-
narlo es encontrando todos los bordes de todos los objetos que aparecen en la imagen,
para despues relacionarlo entre sı de forma que conozcamos que bordes estan contenidos
en otros. Si conseguimos saber esto, podemos saber cual es el borde que se corresponde
con el exterior de la caja.
En este punto podemos segmentar la imagen usando el contorno exterior de tal forma
que nos quedemos unicamente con los pıxeles de la imagen que se encuentran dentro del
contorno. Como tenemos segmentada la imagen, deberemos indicar cual el su nombre.
Este es el punto donde se realiza la adquisicion del lexico.
Este proceso se realiza simultaneamente con la creacion de un dataset de clasificacion.
En este punto en el que sabemos el nombre del medicamento y tenemos la referencia
visual, que corresponde con la imagen segmentada, podemos usarlo para incluirlo en un
dataset que nos permita entrenar un clasificador.
El problema de la clasificacion surge de escoger un conjunto de variables discriminan-
tes adecuadas. Se podrıan usar caracterısticas fısicas del medicamento, como la forma,
el tamano, el color, su nombre, etc. La forma y el tamano, en nuestro caso no son muy
fiables, puesto que estamos trabajando con cajas de medicamentos, y todos tienen la
misma forma y en muchos casos el tamano es muy parecido. Usar el color, o mas con-
cretamente el histograma de cada uno de los canales rojo, verde y azul de la imagen
puede proporcionar resultados mucho mas discriminantes, siempre y cuando las cajas
de los medicamentos se diferencien entre sı, que es lo que suele ocurrir con las cajas
de medicamentos de las grandes farmaceuticas. Si tratamos con medicamentos que son
practicamente iguales, como es el caso de los medicamentos genericos, este sistema pue-
de ser inviable. En este caso deberıamos usar alguna otra cosa, como un sistema capaz
de leer el nombre del medicamento, pero este proceso anade un gran numero de dificul-
tades. Para empezar, debemos conocer donde se situan al letras que corresponden con
12
2.4. Planteamiento del proceso
el nombre del medicamento, para posteriormente implementar un OCR que reconozca
cada una de las letras. En este caso se ha decidido usar el histograma de la imagen
segmentada.
Llegados a este punto, solo queda almacenar las variables discriminantes en un dataset
etiquetado con el nombre del medicamento y finalizarıa el proceso de adquisicion de
lexico de uno de los medicamentos. Este proceso serıa necesario repetirlo varias veces
por cada medicamento para conseguir un dataset con un tamano suficiente.
2.4.2. Fase de busqueda
En la fase de busqueda el robot debe encontrar y senalar el medicamento indicado.
La parte complicada de este proceso es que el robot debe ser capaz de distinguir cual
es el medicamento correcto y descartar el resto.
El primer paso consiste en encontrar todos los objetos que aparecen dentro del cam-
po de vision. Para ello podemos utilizar el mismo procedimiento de reconocimiento de
bordes que se ha usado en el fase de adquisicion de lexico. Como en esta fase no dispo-
nemos de un puntero laser que nos guıe en el proceso, deberemos tratar de encontrar
todos los medicamentos usando unicamente la vision por computador.
Como partimos de una lista con todos los contornos de cada uno de los objetos de la
imagen, una solucion a este problema consiste en buscar los bordes exteriores de todas
las cajas. Se puede partir de un contorno aleatorio y hallar el borde exterior. Al igual
que usamos la jerarquıa para buscar el borde exterior, podemos usarla para encontrar
los contornos hermanos, es decir detectar el resto de bordes exteriores.
Pueden surgir algunos problemas a la hora de usar este metodo, como que el contorno
exterior no se corresponda con el contorno real del medicamento. Para resolverlo se
plantea un metodo que usa varios fotogramas consecutivos para encontrar la mejor
solucion, que se corresponda con el borde exterior real del medicamento.
Se debera segmentar la escena para obtener un conjunto de imagenes mas pequenas
que se correspondan con cada uno de los medicamentos detectados. El procedimiento
13
Capıtulo 2. Descripcion de la aplicacion
vuelve a ser el mismo que para el proceso de adquisicion de lexico, se recorta la imagen
usando el contorno exterior del medicamento.
La siguiente tarea consiste en reconocer a que medicamento corresponde cada imagen
segmentada. Para ello se puede hacer uso de un clasificador, como por ejemplo un
clasificador k-nn. El proceso seria el siguiente: por cada imagen segmentada se obtienen
sus variables discriminantes y se aplica el algoritmo de clasificacion. Este metodo da
como resultado el nombre del medicamento que corresponde a la imagen segmentada.
Cuando el nombre devuelto por el clasificador coincida con el nombre del medicamento
buscado, significa que lo hemos encontrado y por lo tanto, savemos cual es su posicion
en la escena.
(a) Situacion 1. (b) Situacion 2.
Figura 2.5: Proceso de busqueda.
Llegados a este punto, donde sabemos la posicion del medicamento dentro de la
imagen, es el momento de proceder con su senalizacion. Surgen varias opciones para
senalar, podemos tratar de usar la mano del robot o anadir un puntero laser en su
mano para apuntar hacia el medicamento, de forma analoga a como lo usamos en la
fase de adquisicion de lexico. Esto anade el problema de como mover cada una de
las articulaciones del brazo para que el brazo se posicione correctamente. Se puede
solucionar modelizando el robot o usando algun algoritmo de control que ajuste la
posicion de la mano o el laser teniendo en cuenta que el error a minimizar es la distancia
de la situacion actual respecto de la posicion objetivo, que corresponde con el centro
del medicamento.
14
2.4. Planteamiento del proceso
El ultimo paso consiste en avisar al paciente de que estamos senalando el medi-
camento. Nuevamente la opcion mas logica es el habla, pero como hemos explicado
anteriormente, este tema lo hemos dejado aparcado. La opcion que queda es utilizar
texto. El inconveniente que esto genera es que si el paciente no esta mirando a la pan-
talla no se va a enterar de que el robot ha senalado un medicamento. La solucion a esto
puede ser el sonido, simplemente emitiendo una alarma.
15
Capıtulo 3
Descripcion hardware del robot
Se puede definir al robot inteligente autonomocomo un sistema compuesto por un
controlador electronico acoplado a un cuerpo mecanico, y con ciertas caracterısticas de
autonomıa, movilidad y razonamiento. Para que esto se cumpla, esta maquina necesita
de adecuados sistemas sensoriales para percibir el entorno, de actuadores que le permi-
tan moverse e interactuar con el entorno y de un sistemas de control que se encarga de
realizar tareas a partir de los estımulos detectados.
Figura 3.1: Meccanoid G15 KS.
Un robot social es aquel que interactua y
se comunica con las personas de forma sen-
cilla y agradable siguiendo comportamientos,
patrones y normas sociales. Para eso, ademas
de tener apariencia humana, se necesita que
disponga de habilidades que se ubican dentro
del dominio de la llamada inteligencia social.
La tarea de gestion de medicamentos a una
persona dependiente abordada en este proyec-
to se encuentra justamente dentro del dominio
de la inteligencia social, y por ello podemos
deducir que es necesario disponer de un robot
social.
16
En el mercado se pueden encontrar multiples robots sociales para la realizacion de
esta tarea, como son el caso de los robots Nao y su hermano mayor Pepper fabricados
por Aldebaran, o el recien salido EMIEW2 de Hitachi. Desgraciadamente la mayorıa de
estos robots comerciales tienen un precio tan elevado que solo unos pocos privilegiados
disponen de los recursos necesarios para adquirirlo.
Otra opcion bastante comun a la hora de necesitar un robot es crearlo uno mismo,
desde 0, con la filosofıa ”hazlo tu mismo”(DIY, Do It Yourself en ingles). Este proceso
requiere de una gran labor de ingenierıa y sera necesario pasar por las siguientes tareas:
Seleccion de los materiales a usar, ası como motores, sensores y otro tipo de
actuadores.
Identificar los requisitos mınimos de procesador necesarios.
Disenar la estructura.
Disenar la electronica.
Fabricar las piezas.
Ensamblar las piezas junto a los motores, sensores y actuadores.
Fabricar los circuitos impresos y soldar todos los componentes.
Conectar todos los elementos y programar el firmware.
Una opcion intermedia es la de usar un artefacto existente, como un vehıculo, un
juguete o un robot comercial mas barato y modificarlo para anadir todas las capacidades
que se necesiten en la tarea que se va a realizar. Esta opcion puede ahorrar tiempo a la
hora de construir el robot, puesto que no es necesario disenar la estructura completa del
robot ni fabricar piezas desde cero, pero al mismo tiempo se puede convertir en un arma
de doble filo, puesto que se aumenta la complejidad de tener que adaptar las diversas
piezas de las que esta compuesto el artefacto para convertirlo en un robot funcional. En
algunas ocasiones, sobretodo en artefactos muy pequenos, puede resultar mucho mas
complicado que crear un robot desde cero. Si logramos disponer de un buen artefacto
desde el que partir, tenemos que tener en cuenta que el resto de tareas de diseno siguen
17
Capıtulo 3. Descripcion hardware del robot
estando presentes, como el diseno electronico, la instalacion de sensores y actuadores o
la programacion del firmware.
Esta ultima opcion es la que se ha llevado a cabo para la realizacion de este proyecto.
Mas concretamente se ha optado por modificar un robot de juguete llamado Meccanoid
G15 KS fabricado por la empresa Meccano. En las siguientes secciones se va a explicar
el diseno realizado y las especificaciones de los componente hardware utilizados.
3.1. Diseno del robot
El primer paso consiste en montar el diseno original del Meccanoid G15 KS para
analizar los pros y los contras de adaptar este robot. A primera vista, su capacidad
para hablar, reconocer voz y el movimiento de sus extremidades pueden indicar que se
trata de un buen candidato, pero vamos a verlo con mas detalle.
La primera ventaja de usar este robot es que tiene una estructura con una altura
de 122cm, lo que le permite interactuar tanto con un humano como con el entorno de
una forma muy comoda. Por ejemplo, tiene la altura suficiente para ver los objetos que
hay encima de una mesa sin necesidad de subirse a un escalon. Tambien dispone de un
sistema de ruedas que le permiten moverse por el entorno, lo que le ofrece capacidades
de navegacion.
El diseno de las articulaciones de los brazos no es del todo util para interactuar con
el entorno. Esto es debido a que el hombro y el codo realizan el movimiento sobre el
mismo eje impidiendo que el brazo alcance cualquier posicion a su alrededor. Por si
fuera poco esta limitacion, la mano tampoco es prensil, por lo que no puede ser usado
para agarrar objetos. En nuestro caso este problema no afecta, ya que solo se usa el
movimiento de la cabeza, pero habrıa que tenerlo en cuenta si se decidiera coger objetos
o senalar un objeto con la mano.
Solo se han encontrado dos problemas que realmente entorpecen el uso de este robot
y ha sido necesaria su modificacion. El primer problema se vuelve a repetir con el mal
diseno de las articulaciones, en este caso del cuello ya que solo el capaz de realizar
18
3.1. Diseno del robot
movimientos horizontales y sagitales. El otro problema reside en el procesador, debido
a que no se puede programar y por lo tanto resulta de un componente completamente
inutil.
Analizando estos pros y contras podemos concluir que este robot, tal cual lo encon-
tramos en el mercado, no se puede usar para realizar los experimentos de este proyecto,
sin embargo puede ser modificado para solventar los dos problemas que hemos mencio-
nado. El problema del cuello se puede arreglar modificando la estructura original del
robot, y el segundo problema se puede solucionar descartando el procesador original e
incluir un nuevo procesador que controle el robot. Estas modificaciones son las que se
han realizado en el robot y que van a ser explicadas mas detalladamente a continuacion.
Para una mayor comprension se ha separado la explicacion de las modificaciones
en dos secciones, estructura y diseno electronico. En algunos casos las dos secciones
estan relacionadas, ya que para anadir un componente electronico es necesario fabricar
o modificar una pieza donde sujetarlo. En la seccion de Estructura se explicara tanto
las modificaciones del robot como las piezas que han tenido que construirse. En la
seccion de diseno electronico se detallaran todos los componentes electronicos que ha
sido necesario incluir para controlar el robot, ası como los controladores y las conexiones
entre ellos.
3.1.1. Estructura
El primer paso ha sido modificar el diseno del robot para cambiar el movimiento de
la cabeza horizontal y sagital por un movimiento vertical y horizontal (PAN-TILT).
Como el robot esta construido a base de las clasicas piezas de Meccano, el primer paso
consistio en desmontar todas las piezas del cuello e investigar como estaban dispuestos
los agujeros de las diferentes piezas. El siguiente paso es tratar de sujetar los dos motores
de tal forma que los ejes de rotacion correspondan con los ejes longitudinal y transversal
del robot. Una vez hecho esto, deberemos colocar las piezas necesarias para sujetar, por
un lado, los motores al cuerpo del robot y por el otro lado, sujetar la cabeza donde se
va a situar la camara y el laser.
19
Capıtulo 3. Descripcion hardware del robot
(a) movimiento horizontal-sagital. (b) movimiento horizontal-vertical.
Figura 3.2: Modificacion de la cabeza.
Para incorporar los diversos componentes electronicos es necesario fabricar piezas que
se puedan acoplar al Meccanoid facilmente. Las piezas personalizadas se han fabricado
a partir de estireno. El estireno es un plastico proveniente del petroleo que se caracteriza
por ser poco pesado, flexible y muy resistente. Trabajar con este material resulta muy
sencillo, se puede cortar facilmente con una cuchilla, permite lijado y podemos usar
pegamento para unirlo.
La pieza mas compleja que se ha realizado sirve para sujetar la camara y el laser
sobre la cabeza. Esta pieza sustituye la pieza original que se situa en el centro de la
cara, es decir, se trata de la ”nariz”del robot. Su utilidad inicial era el de sujetar y
mantener a la distancia correcta los ojos. El diseno de la nueva pieza se ha basado en la
pieza original, y se ha mantenido la utilidad principal de sujetar los ojos, pero ademas
se ha incluido el soporte necesario para sujetar la camara y el laser. En el lado frontal
de la pieza, solo son visibles 2 pequenos agujeros, que corresponden con el objetivo de
la camara y el puntero laser. Por la parte trasera nos encontramos con un hueco donde
introducir la camara junto a cuatro orificios que permiten sujetarla con tornillos. Por
otro lado existe un hueco donde introducir el laser y una pequena repisa donde fijar el
laser con tornillos.
20
3.1. Diseno del robot
Figura 3.3: Proceso de fabricacion de la pieza para la camara y el laser.
Se han creado dos piezas con el objetivo de sujetar la Raspberry Pi y la placa Arduino
en el interior del robot. El diseno es muy sencillo, recuerda a las clasicas piezas de
plastico de Meccano, pero al mismo tiempo es suficiente para soportar el peso de las
placas y evitar que se muevan. En una de las piezas se sujeta la placa Arduino y
el driver L298N (driver de motores) mediante separadores metalicos disenados para
sujetar placas electronicas. En la otra placa se ha usado velcro para mantener sujeta
la Raspberry Pi, que a su vez esta dentro de una carcasa de plastico ABS. El motivo
de usar velcro es porque de esta manera podemos sacar del robot el microordenador si
fuera necesario y tiene la suficiente fuerza como para mantener la placa estable sobre
la pieza de estireno.
Figura 3.4: Piezas personalizadas para el soporte de Raspberry Pi y Arduino.
21
Capıtulo 3. Descripcion hardware del robot
3.1.2. Diseno electronico
El primer paso del diseno electronico es pensar que requisitos a nivel de procesador
son necesarios. Una vez tenemos esto, es necesario mirar que componentes extra se van
a necesitar para controlar cada uno de los dispositivos que van a conectarse a nuestras
placas controladoras.
En nuestro caso vamos a usar dos placas controladoras, una placa Arduino fabricada
por la empresa BQ llamada Zum Core y una Raspberry Pi 3. Uno puede pensar que
teniendo una Raspberry Pi 3, que dispone de puertos de salida que funcionan exac-
tamente igual que los puertos de Arduino, no serıa necesaria la placa Arduino, sin
embargo usar dos placas tiene sus ventajas. Los motivos de porque se ha decidido usar
dos controladores son los siguientes:
La principal ventaja de tener dos o mas controladores es que podemos realizar ope-
raciones de forma paralela. En este caso la Raspberry Pi 3 se va a encargar del pro-
cesamiento de imagenes para realizar vision por computador y la placa Zum Core se
va a centrar en manejar los motores y el laser. Tanto la vision por computador como
controlar los motores en tiempo real requieren de un gran uso de CPU, si solo dispu-
siesemos de un controlador, ambas tareas tardarıan mucho mas tiempo en realizarse y
serıa inviable la captura de vıdeo en tiempo real.
El otro motivo de porque anadir una placa de tipo Arduino es que la companıa
Meccano ofrece en su pagina web las librerıas necesarias para controlar los motores
del Meccanoid desde Arduino. Si usaramos la Raspberry Pi 3 habrıa que rehacer esta
librerıa para que pudiera funcionar, y ello implica una gran inversion de tiempo.
La idea es que el microordenador Raspberry Pi actue como procesador principal.
Sera el encargado de capturar las imagenes de la camara y aplicar las correspondientes
tecnicas de vision por computador. La camara se conecta directamente al puerto SCI
de la placa mediante un cable ribbon. La placa Zum Core se conecta mediante un
cable USB a la Raspberry Pi, lo que nos permite, ademas de poder comunicarnos por
el puerto serie, poder programar la placa Zum Core directamente desde la Raspberry
22
3.1. Diseno del robot
Pi. Tambien podemos conectar ambas placas a traves del puerto UART sin tener que
modificar nuestro codigo.
La alimentacion de la Rapberry Pi 3 se puede realizar mediante un transformador o
una baterıa. En nuestro caso se usan las dos opciones, un transformador de 5V-2,5A y
una baterıa li-ion de 5V-2.1A con una capacidad de 7800mAh.
Figura 3.5: Esquema electronico.
Como hemos mencionado Zum Core sera el encargado de manejar todos los motores
del robot, ası como la activacion y desconexion del puntero laser. Esta alimentada por
el puerto USB proveniente de la Raspberry Pi 3, aunque tambien se conecta a una
23
Capıtulo 3. Descripcion hardware del robot
baterıa Ni-MH de 6V y capacidad de 1800mAh. Esta baterıa es la que venia incluida
en el Meccanoid y se usa para dar potencia a los motores.
Meccano ha disenado un protocolo que permite conectar hasta 4 dispositivos ınteligentes.en
cascada sobre los mismos 3 cables. Tanto los servos que mueven la cabeza y las extremi-
dades del robot como los leds que iluminan los ojos son dispositivos inteligentes. En el
modelo Meccanoid G15 KS, tenemos 3 lineas de dispositivos inteligentes: una linea que
conecta 3 servos encargados de mover el brazo derecho, otra linea que conecta 2 servos
para mover el cuello y los leds RGB de la cabeza y una tercera con 3 servos encargados
de controlar el brazo izquierdo. Cada lınea esta conectada directamente a la placa Zum
Core
Los motores que estan conectados a las ruedas y que otorgan la capacidad de movi-
miento por el entorno son motores de corriente continua normales. Para poder controlar
dichos motores es necesario emplear algun tipo de driver de potencia, que permita con-
trolar la velocidad y la direccion del giro. En nuestro caso se ha optado por usar un
placa basada en el driver L298N. Se conecta mediante 4 cables, 2 por cada motor, a la
placa Zum Core. A su vez se conecta directamente a la baterıa de 6V.
Por ultimo nos falta el puntero laser, que se conecta directamente a otro de los pines
de la placa Zum Core. Funciona de forma similar a un diodo led, por lo tanto solo son
necesarios 2 cables para su control.
3.2. Detalles tecnicos del hardware
En esta seccion se van a comentar las caracterısticas tecnicas de cada uno de los
dispositivos electronicos que se han usado en la modificacion del robot.
3.2.1. Meccanoid
La empresa de juguetes Meccano presento el pasado Otono de 2015 el robot Mecca-
noid en dos versiones diferentes, G15 y G15 KSMeccanoid es un robot open-source, crea-
do a base de las clasicas piezas de Meccano, que los usuarios pueden programar a su gus-
to; para ello cuenta con un microcontrolador denominado ”MeccaCerebro”(MeccaBrain
24
3.2. Detalles tecnicos del hardware
en ingles) que dispone de capacidades como conexion por bluetooth, reconocimiento de
voz, habla y control de motores.
Dado que el publico de este robot esta orientado a ninos, se proporcionan varios
”metodos de programacion”sencillos. En realidad estos metodos solo consisten en grabar
secuencias de movimientos y voz que puede reproducir posteriormente mediante un
comando de voz asociado.
Figura 3.6: Modelos de Meccanoid.
El primer metodo, Movimiento Inteligente
Aprendido (MIA), consiste en un modo de
captura de movimientos en el cual el usuario
mueve directamente los brazos y cabeza del ro-
bot. Al mismo tiempo se puede ir diciendo en
voz alta diferentes frases. Una vez terminada
la grabacion, se le asigna un comando de voz
que puede ser usado posteriormente para que
el robot ejecute el movimiento y reproduzca el
audio.
Las dos siguientes formas de programacion
se realizan mediante la aplicacion movil que
deberemos instalar en un smartphone o tablet.
En dicha aplicacion ademas podremos controlar de forma remota el robot.
El segundo metodo sigue la misma mecanica que el anterior, la de capturar un mo-
vimiento y audio, pero en este caso lo que movemos son los brazos y cabeza de un
muneco 3D que aparece representado en la aplicacion movil. El audio se graba a traves
del Meccacerebro.
Tal vez la forma mas interesante es la ultima posibilidad de programacion, Learned
Intelligent Movement (LIM), un sistema que hace uso de vision por computador para
reconocer la silueta e imitar a una persona que se situa enfrente del robot. La idea es
colocar nuestro dispositivo movil en el pecho del robot con el objetivo de que la camara
25
Capıtulo 3. Descripcion hardware del robot
MeccaCerebro
Microcontrolador DesconocidoMemoria Flash 64 MbBluetooth SıReconocimiento de voz SıFrases pre-programadas +1000Programacion de Codigo Abierto No
Cuadro 3.1: Especificaciones del MeccaCerebro
quede apuntando directamente al usuario. Aunque teoricamente suena muy bien, este
sistema no es nada robusto, todos los intentos de utilizar este sistema resultaron fallidos,
incluso adaptando el entorno para facilitar la deteccion.
Como hemos mencionado, se trata de un proyecto open-source , pero desgraciadamen-
te, la empresa unicamente ha distribuido publicamente los protocolos de comunicacion
de lo que ellos denominan ”dispositivos inteligentes”. La empresa Meccano mantiene
bajo secreto industrial la informacion tecnica del hardware del MeccaCerebro por lo
que el tipo de procesador usado es desconocido. Mediante ingenierıa inversa la comu-
nidad intuye que se trata de un microcontrolador ATmega como el usado en las placas
Arduino, pero solo se trata de una suposicion. Debido a esto, y a que ademas no han pro-
porcionado ninguna herramienta, resulta imposible la programacion del MeccaCerebro
en algun lenguaje de programacion existente.
Podemos encontrar dos modelos diferentes en el mercado, el Meccanoid G15 y el
Meccanoid G15 KS. La principal diferencia entre ellos es el tamano, el numero de piezas
y el numero de motores. Para los experimentos se ha usado el modelo Meccanoid G15 KS
que tiene una altura de 122 cm, 1188 piezas y 10 motores. El robot se construye a partir
de las clasicas piezas de Meccano, aunque han sustituido el metal por policarbonato.
La union entre las diferentes piezas se realiza mediante tornillos hexagonales y tuercas.
Este metodo de montaje nos da la flexibilidad de modificar el esquema basico y anadir,
eliminar o modificar las partes que se necesiten.
26
3.2. Detalles tecnicos del hardware
Caracterısticas Meccanoid G15 Meccanoid G15KS
Altura del robot 61 cm 122 cmMaterial del Robot Policarbonato PolicarbonatoNumero de piezas 600 1188Numero de servos 4 8Numero de motores 2 2Baterıa 4 x pilas alcalinas LR14, C Baterıa recarcagable Ni-MH
Cuadro 3.2: Caracterısticas principales de los robots Meccanoid
El robot dispone de 10 motores, de las cuales 8 son ”dispositivos inteligentes 22 son
motores de corriente continua. Los servos incluyen un led RGB cuyo color puede ser
modificado. En la cabeza se dispone de otro dispositivo inteligente con 2 leds RGB que
permiten modificar el color de los ojos.
Un dispositivo inteligente consiste en un circuito que permite enlazar en cascada
hasta un maximo de 4 dispositivos en los mismos 3 cables. La librerıa que permite
controlar este chip es open-source y la podemos encontrar en su web. Esta escrita en
C++ y pensada para usar con el entorno Arduino.
Los motores se disponen de la siguiente manera: 3 servos en cada brazo y 2 servos para
el movimiento de la cabeza y 2 motores de corriente continua para el desplazamiento
por el suelo. Lo que nos da un total de 10 grados de libertad.
3.2.2. Raspberry Pi
Raspberry Pi es un microordenador u ordenador de placa simple (SBC) de bajo
coste desarrollado en Reino Unido por la Fundacion Raspberry Pi , con el objetivo de
estimular la ensenanza de ciencias de la computacion en las escuelas.
Varias generaciones de Raspberry Pi han sido lanzadas al mercado. La primera ge-
neracion (Pi 1) fue lanzada en febrero de 2012 en un modelo A basico y un modelo
B de mayores prestaciones. Los modelos A+ y B+ fueron lanzados un ano mas tarde.
Raspberry Pi 2 modelo B fue lanzado en febrero de 2015 y Raspberry Pi 3 en febrero
de 2016. Estas placas tienen un precio que varia entre los 20$ y los 35$. En abril de
27
Capıtulo 3. Descripcion hardware del robot
Figura 3.7: Placa Raspberry Pi 3
2014 se lanzo una version reducida, y en noviembre de 2015 se lanzo Pi Zero con un
diseno mas pequeno y unas capacidades de entrada y salida (GPIO) mas limitadas a
un precio de 5$.
Todos los modelos incluyen un system-on-a-chip (SOC) Broadcom, los cuales incluyen
una CPU ARM compatible y un procesador grafico (GPU) on-a-chip VideoCore IV.
El rango de frecuencia del procesador va desde los 700Mhz hasta los 1.2Ghz para la
Raspberry Pi 3 y el rango de memoria RAM on-board va desde los 256MB hasta 1 GB.
La placa no incluye disco duro, pero a cambio usa una tarjeta de memoria donde se
guarda el sistema operativo; se pueden usar tarjetas SDHC o MicroSDHC. Las placas
disponen entre uno y cuatro conectores USB, salida HDMI, salida de vıdeo compuesta y
una salida de sonido con conector jack de 3.5mm. Dispone de salidas GPIO que permiten
la comunicacion a bajo nivel con protocolos como I2C o UART. Algunas placas tambien
incluyen un conector Ethernet RJ45. La Raspberry Pi 3 ademas incluye conectividad
WiFi 802.11n on-board y Bluetooth. No incluyen fuente de alimentacion ni carcasa.
La fundacion proporciona en su web dos sistemas operativos para usar en sus pla-
cas, basados en Debian y Arch Linux. Promueven Python como lenguaje principal de
programacion pero soporta BBC BASIC, C , C++, PHP, Java, Perl, Ruby, Squeak
Smaltalk y alguno mas.
28
3.2. Detalles tecnicos del hardware
En este proyecto se ha usado la ultima placa que ha salido al mercado, la Raspberry Pi
3, ya que dispone de un procesador mucho mas potente que permite un procesamiento
mas rapido a la hora de realizar vision por computador.
3.2.3. Modulo camara de Raspberry Pi
Figura 3.8: Modulo camarade Raspberry Pi
El modulo camara de la Raspberry Pi puede ser usado
para capturar vıdeo en alta definicion(1080p) o tomar fo-
tografıas. Para utilizarla, simplemente necesita ser conec-
tada mediante un cable ribbon al conector SCI (Camera
Srial Interfaz) de la Raspberry Pi.
La placa es muy pequena, mide unos 25x20x9 mm y
pesa apenas 3 gramos. En cuanto a imagenes, el sensor es
capaz de capturar hasta 2592x1944. Sin embargo en modo
vıdeo, las resoluciones soportadas son: 1080p30, 720p60 y
640x480p60/90. Dispone de una distancia focal de 3.6mm, una apertura focal f/2.9,
relacion de aspecto 4:3, un campo de vision horizontal de 53◦ y un campo de vision
vertical de 40◦.
Esta camara puede ser usada con OpenCV puesto que la fundacion proporciona las
librerıas necesarias para controlar esta camara en lenguaje Python. Tambien existe una
librerıa para C++ llamada Raspicam; esta desarrollada por la comunidad y nos permite
hacer exactamente lo mismo que la librerıa de Python.
3.2.4. Puntero laser
Figura 3.9: Puntero laser.
El puntero laser es el modelo Keyes KY-008. Se trata
de un emisor con una longitud de onda de 650nm (color
rojo), que emite un haz pequeno pero intenso. Funciona a
5V-30mA, por lo que se puede usar con una placa Arduino
directamente. Dispone de 3 pines de salida aunque solo
son necesarios 2 de ellos para su control.
29
Capıtulo 3. Descripcion hardware del robot
3.2.5. Arduino
Arduino es una plataforma de hardware y software libre, y fue disenada para crear
prototipos de forma sencilla y rapida . Cualquier persona con unos conocimientos basicos
de programacion y electronica, puede empezar a usar cualquiera de la placas que se han
desarrollado en la plataforma, ya que ese fue uno de los objetivos que plantearon.
Arduino puede tomar la informacion desde cualquiera de sus pines de entrada, desde
cualquier dispositivo o sensor, tratarla, y actuar en todo aquello que le rodea, como
pueden ser luces, motores o cualquier otro actuador.
Se diseno un lenguaje especıfico para esta plataforma basado en Processing, que
engloba todas las funciones basicas de los microcontroladores AVR, lo que permite una
programacion mucho mas sencilla y a un nivel mas elevado. Sin embargo, sigue siendo
un MCU, por lo tanto, se puede programar en ensamblador.
Otra de las ventajas de esta placa es que pueden ser montadas a mano, ya que en la
pagina web de la plataforma estan disponibles todos los esquemas en CAD de las placas
Arduino. Esto nos permite adaptar nuestra placa a cualquier necesidad. Asimismo, se
pueden encontrar varios modelos de placas en el mercado.
Por otro lado, tambien se encargaron de disenar un entorno de programacion, faci-
litando la programacion de este dispositivo. En la pagina web de la plataforma, nos
podemos encontrar con toda la documentacion necesaria para su programacion, desde
las funciones mas basicas, a las librerıas que se han ido incluyendo posteriormente.
Ademas, decidieron incluir una seccion llamada playground, en la que se van mostran-
do algunos de los proyectos que se han ido desarrollando por la comunidad, por lo
que, podemos encontrar la informacion necesaria para empezar a crear nuestro propio
proyecto.
Arduino UNO / Genuino UNO
Arduino UNO (llamado Genuino UNO fuera de Estados Unidos) es la placa mas
robusta y mas usada por la comunidad y de la cual podemos encontrar mayor docu-
mentacion y proyectos.
30
3.2. Detalles tecnicos del hardware
UNO es una placa de microcontrolador basada en el ATmega328P. Tiene 14 entradas
y salidas digitales de las cuales 6 pueden ser usadas como salida PWM, 6 entradas
analogicas, un cristal de 16Mhz, un conector USB, un conector de alimentacion tipo
Jack, un conector para la programacion ICSP y un boton de reinicio.
BQ Zum Core
Recientemente, la empresa espanola BQ ha invertido en investigacion y desarrollo
de sistemas roboticos orientados a la ensenanza. Podemos encontrar desde disenos de
robots para imprimir con impresoras 3D, entornos de programacion web basados en
scratch, placas controladoras, hasta pequenos circuitos electronicos que incluyen sen-
sores o actuadores. En definitiva un amplio abanico de piezas que podemos juntar a
nuestro antojo para llevar a cabo cualquier proyecto de forma facil y sencilla, sin tener
demasiados conocimientos de electronica.
Figura 3.10: Placa BQ Zum Core
Entre todos los productos, cave destacar Zum Core , una placa microcontroladora
basada en Arduino UNO. La principal ventaja es la conectividad Bluetooth, la cual
que no solo permite comunicarse con otros dispositivos si no que tambien permite su
programacion. Amplıan la corriente de salida, pudiendo proporcionar hasta 3A de forma
continua, a diferencia de 1A que permite como maximo la placa Arduino UNO. Anaden
un boton de encendido y apagado e incluyen sets de 3 pines para cada entrada/salida, lo
que permite conectar practicamente cualquier dispositivo sin necesidad de usar placas
de prototipado o circuitos externos.
31
Capıtulo 3. Descripcion hardware del robot
Genuino UNO BQ Zum Core
Procesador ATmega328P Atmel Mega328P
Voltaje de salida3,3 V (150 mA)5 V (1 A)
3,3 V (50 mA)5 V (3,2 A)
Voltaje de entrada 6-20V 6 V - 17 VI/O digitales 14 14Salidas PWM 6 6Entradas analogicas 6 6Memoria flash 32 KB 32 KBSRAM 2 KB 2 KBEEPROM 1 KB 1 KBVelocidad CPU 16 MIPS 16MIPS
Interfaces
USBFTDISPII2CICSP
USBFTDISPII2CICSPBluetooth 2.1 Clase 2
Boton encendido No SiUSB Tipo B Micro-B
Programable USBUSBBluetooth
Cuadro 3.3: Especificaciones de las Placas Genuino UNO y BQ Zum Core
La placa Zum Core es la que se ha usado en la modificacion del Meccanoid. Como
hemos comentado incluye un set de 3 pines, y este es el principal motivo de eleccion
de esta placa, ya que tanto los servos, como el laser y posibles sensores pueden ser
conectados directamente.
32
Capıtulo 4
Proceso de adquisicion de lexico
El proceso de adquisicion de lexico mediante anclaje visual consiste en mostrar un
objeto al robot e indicar el nombre de dicho objeto, de tal forma que robot y humano
se aseguren de tener un mismo nombre para un objeto concreto. En nuestro caso, como
el universo de trabajo que se va emplear consta de un conjunto de medicamentos,
usaremos una foto del medicamento como anclaje visual y el nombre del mismo como
lexico comun.
Al mismo tiempo es necesario entrenar un clasificador que permita distinguir cada
uno de los medicamentos del universo de trabajo para despues asignarles la etiqueta
correspondiente. Normalmente el proceso de entrenamiento del clasificador y la adqui-
sicion de lexico se realizan de forma separada, sin embargo en esta aplicacion el proceso
de aprendizaje se realiza al mismo tiempo que el proceso de adquisicion de lexico.
Para realizar ambas tareas al mismo tiempo va a seguir el siguiente procedimiento:
El usuario senala un medicamento con un puntero laser.
Se recorta la imagen del medicamento senalado (anclaje visual).
El usuario indica al robot el nombre del medicamento (lexico).
Incluir toda la informacion obtenida en un dataset (clasificador).
33
Capıtulo 4. Proceso de adquisicion de lexico
Para realizar este procedimiento con una mayor robustez se captura vıdeo en tiempo
real. Por lo tanto, hay que tener en cuenta que en cada iteracion (que se corresponde
con cada fotograma del vıdeo) de este proceso se van a realizar una serie de operaciones
que dependeran del estado en el que se encuentre el sistema.
4.1. Esquema general
Los estados por los que pasa el sistema de aprendizaje estan representados en la
figura 4.1.
Figura 4.1: Diagrama de estados del proceso de aprendizaje
El objetivo del estado inicial es esperar a detectar el puntero laser, por lo tanto nos
mantendremos en este estado mientras no detectemos el puntero laser en la escena.
En cuanto detectamos el laser cambiaremos a un nuevo estado en el cual nos cen-
traremos en calcular el rectangulo delimitador con mayor area. Es decir, trataremos de
encontrar el rectangulo que delimita la caja del medicamento que estamos senalando
con el puntero laser.
34
4.1. Esquema general
El primer paso es obtener una jerarquıa de los contornos de cada uno de los objetos
que aparecen en la escena. Es decir, obtenemos una jerarquıa padre-hijo-hermano de
los bordes que se encuentran en la escena. Por ejemplo, si tenemos un medicamento con
su nombre escrito en la caja, obtendremos un contorno padre, que se corresponde con
el borde de la caja, y varios contornos hijo, que se corresponden con cada una de las
letras del nombre del medicamento.
Una vez que tenemos esta jerarquıa, se tienen que calcular los contornos que se
encuentran a una distancia mas cercana del puntero laser, que normalmente se corres-
ponderan con contornos hijo. En el ejemplo anterior, podrıamos estar detectando una
de las letras del nombre del medicamento.
En este punto se usara la jerarquıa para obtener el contorno padre, que deberıa
corresponder con el borde exterior de la caja. Una vez que tenemos el contorno padre,
calculamos el rectangulo delimitador de dicho contorno, que usaremos para segmentar
la imagen.
En cada iteracion la jerarquıa de contornos puede ser diferente, y puede ocurrir
que en dos iteraciones consecutivas el contorno padre del contorno senalado por el
laser sea diferente y por lo tanto obtendremos un rectangulo delimitador diferente.
Para solventar este problema aprovechamos que estamos capturando vıdeo haciendo
lo siguiente: Si calculamos el area del rectangulo delimitador de la iteracion actual y
resulta que es mayor que el area de un rectangulo obtenido en una iteracion anterior, se
va a sustituir el rectangulo delimitador anterior por el rectangulo delimitador de esta
iteracion. Cuando cambiamos de estado, tendremos el rectangulo delimitador con mayor
area, que se corresponde siempre con el contorno exterior de la caja del medicamento.
Este metodo funciona siempre y cuando detectemos el puntero laser durante un numero
suficiente de fotogramas.
El siguiente cambio de estado se producira cuando se deje de detectar el puntero laser
en la escena. En este momento el robot pedira al usuario que le indique el nombre del
medicamento. Este nombre a su vez va a ser usado como etiqueta de la clase dentro del
dataset de clasificacion. Seguidamente, se usara el rectangulo delimitador con mayor
35
Capıtulo 4. Proceso de adquisicion de lexico
Figura 4.2: Diagrama de actividad del proceso de aprendizaje
area obtenido en el estado anterior para segmentar la imagen y obtener un fragmento
donde solo se encuentra la caja del medicamento.
36
4.2. Fases del proceso de adquisicion de lexico
Una vez que tenemos la imagen segmentada, es el momento de incluirla en el dataset
de clasificacion. Para ello vamos a usar como variables discriminantes los histogramas
normalizados de cada uno de los canales RGB de la imagen. Obtendremos al final una
matriz de 3 filas por 256 columnas, que sera la que usemos para clasificar. El ultimo
paso de este estado consiste en anadir al dataset el par etiqueta-histogramas.
En este punto volveremos al estado inicial y se podra repetir el proceso tantas veces
como sea necesario para conseguir un tamano del dataset suficiente.
En cualquier momento el usuario puede detener la ejecucion, momento en el cual el
sistema volcara toda la informacion del dataset en un fichero CSV.
Este sistema permite un entrenamiento del clasificador abierto, es decir, podemos
incluir nuevas clases al dataset en cualquier momento, lo que ofrece grandes ventajas.
Hasta ahora hemos visto por encima cual es el proceso de adquisicion de lexico, en la
siguiente seccion se va a explicar detalladamente cada una de las tareas que se realizan
para llevarlo a cabo.
4.2. Fases del proceso de adquisicion de lexico
Este proyecto se ha creado en diferentes fases para facilitar la implementacion y
posibles cambios posteriores, realizando, el analisis, diseno, codificacion y las pruebas
pertinentes para cada una. La idea de hacerlo ası tiene como objetivo conseguir una
mayor modularizacion y desacoplamiento en las diferentes funcionalidades del sistema,
pudiendolas implementar de forma independiente de forma que se puedan usar solo
en los momentos en los que se necesite y ademas que los cambios afecten lo mınimo
posible a otros modulos. En la figura 4.2 se puede ver un diagrama de actividad donde
se incluyen todas las operaciones que se realizan durante el proceso de adquisicion.
En los siguientes apartados, se explican en detalle las fases seguidas.
37
Capıtulo 4. Proceso de adquisicion de lexico
4.2.1. Filtrado
Todos los algoritmos de filtrado se ejecutan en cada iteracion independientemente
del estado en el que se encuentre el sistema. El objetivo es mejorar la calidad de la
imagen para que el procesado posterior, como la deteccion de bordes, se pueda realizar
con mayor fiabilidad.
El primer filtro que se aplica sirve para mejorar el contraste de la imagen. El filtro
consiste en multiplicar el cada uno de los pıxeles de una imagen por los pıxeles de otra
imagen y dividirlo entre 255. P1cij y P2cij son los pıxeles en la posicion ij y canal c de
la primera y segunda imagen respectivamente. Prcij es el pıxel resultante en pa posicion
ij canal c.
Prcij =P1cij · P2cij
255(4.1)
En nuestro caso se multiplica cada fotograma por si mismo, dando un resultado en el
cual los colores de la imagen se intensifican, proporcionando un mayor contraste entre
los tonos claros y oscuros.
(a) Imagen original. (b) Imagen filtrada.
Figura 4.3: Proceso de filtrado.
El siguiente paso es aplicar un filtro bilateral que se trata un filtro no lineal, que
permite reducir el ruido sin eliminar los bordes. El valor de intensidad en cada pıxel de
38
4.2. Fases del proceso de adquisicion de lexico
la imagen resultante depende de su distancia en la imagen y su diferencia de nivel de
gris al pıxel central
En este punto necesitamos realizar dos operaciones mas que nos van a servir mas
adelante aunque nos e corresponden con un proceso de filtrado. Por un lado se requiere
separar de forma independiente los canales rojo, verde y azul de la imagen original. Por
otro lado se van a transformar la imagen RGB a escala de grises.
4.2.2. Deteccion de bordes
Se sacan los bordes de los objetos por el algoritmo de (Canny, 1986), que detecta
todos los bordes posibles de una imagen utilizando el calculo de variaciones con la
primera derivada. Esta funcion parte de una imagen escala de grises y devuelve una
imagen binarizada con la posicion de los contornos.
Para la obtencion de los contornos se usa la funciona de OpenCV findContours().
Esta funcion parte de una imagen binaria donde encuentra los contornos usando el
algoritmo (Suzuki y be, 1985). Retorna un array con todos los contornos y una jerarquıa
que relaciona los contornos entre sı.
(a) Imagen original. (b) Contornos.
Figura 4.4: Deteccion de bordes.
39
Capıtulo 4. Proceso de adquisicion de lexico
4.2.3. Deteccion de laser
A la hora de detectar un puntero laser de color rojo en una escena, se puede pensar
que la mejor forma es obtener aquellos pıxeles con una intensidad de rojo mas elevada.
Sin embargo, despues de reiteradas pruebas, se ha descubierto que el proceso que mejor
resultado ofrece es el de obtener los pıxeles de mayor intensidad del canal azul de la
imagen. Esto es debido a que la camara captura el centro del puntero laser como un
punto blanco de intensidad muy alta y los alrededores de color rojo. Si se usa el canal
rojo, se obtiene, ademas del centro del laser, una gran cantidad de ruido a su alrededor.
Si por el contrario se usa el canal azul, solo se obtiene el circulo central, sin ruido.
Para seleccionar unicamente los pıxeles de la imagen con mayor intensidad hay que
tener en cuenta que el valor de intensidad del laser puede variar en cada iteracion,
para asegurarnos de filtrar correctamente aplicamos un umbral al 98%. El proceso es
el siguiente:
Obtener el valor de intensidad maximo del canal azul de la imagen.
Se descuenta un 2%.
Ignoramos el valor si desciende de un nivel de intensidad de 200 sobre 255 (evita
ruido).
Aplicamos una funcion umbral a la imagen con el valor calculado.
Mediante es proceso obtendremos una imagen binaria, en la cual los pıxeles en blanco
corresponden con los pıxeles con un nivel de intensidad superior al 98%.
Para reducir el ruido generado por el filtrado primeramente se dilata la imagen, se
aplica un difuminado gaussiano y se vuelve a erosionar la imagen. Con este proceso, da
como resultado que el laser forma un circulo bien definido, mientras que el ruido queda
con formas muy dispares. La importancia de aplicar morfologıa matematica se refleja
en el siguiente paso.
40
4.2. Fases del proceso de adquisicion de lexico
El ultimo paso es usar la transformada de Hough para encontrar los cırculos que
hay en la imagen. La funcion de OpenCV que implementa este algoritmo se llama
HoughCircles(), y proporciona un vector con el centro y el radio de cada uno de los
circulos detectados. La explicacion del proceso puede encontrarse en (Yuen et al., 1990).
4.2.4. Identificar objeto apuntado
Para identificar el objeto apuntando por el laser, primero se seleccionan los 3 con-
tornos mas cercanos al puntero laser. Se parte de las coordenadas del punto central
del circulo obtenido con la transformada de Hough para calcular la distancia de dicho
punto a cada uno de los contornos proporcionados por la funcion findCotours().
La distancia del punto al contorno se calcula con la funcion de openCV pointPoly-
gonTest(). Esta funcion determina cuando un punto esta dentro de un contorno,fuera
de un contorno o esta justo encima del contorno. Se le puede pasar un parametro para
que ademas indique la distancia al borde del contorno.
El motivo de seleccionar 3 contornos es debido a que el laser tambien se detecta como
un contorno, y por razones obvias, ese es el contorno mas cercano al centro del puntero
laser. Realizando pruebas, el numero de contornos que mejor resultado ha dado es 3.
Una vez que tenemos los 3 contornos, usamos la jerarquıa proporcionada por la fun-
cion findContours() y la recorremos de forma recursiva hasta obtener el predecesor mas
antiguo. De esta forma obtenemos el contorno exterior del medicamento. Normalmente
las cajas de medicamentos tienen letras y dibujos en su interior, y estos contornos son
los que se detectan al apuntar con el puntero laser, y por ello buscamos el contorno
exterior.
Seguidamente, obtenemos el rectangulo delimitador del contorno, para ello usamos
la funcion de OpenCV boundingRect().
Para asegurarnos de que el rectangulo delimitador corresponde realmente con el borde
exterior de la caja del medicamento, vamos a ir almacenando el rectangulo con el area
mayor. Para ello al inicio del estado se inicializa una variable rectangulo con area igual
41
Capıtulo 4. Proceso de adquisicion de lexico
0. En cada iteracion se comprueba si el area del rectangulo delimitador es mayor que
el area del rectangulo guardado, asignandolo en caso afirmativo.
De esta manera nos aseguramos que al final del estado el rectangulo delimitador
corresponde con el borde exterior de la caja del medicamento.
(a) Imagen original con laser. (b) Celestoderm senalado en verde.
(c) Imagen original con laser. (d) Aspirina senalado en verde.
Figura 4.5: Deteccion de laser e identificacion.
4.2.5. Segmentar
El proceso de segmentacion consiste en obtener una imagen mas pequena a la original
que contenga unicamente la informacion requerida. En nuestro caso se requiere de una
imagen donde aparezca unicamente un medicamento y que no contenga mas objetos ni
fondo.
42
4.2. Fases del proceso de adquisicion de lexico
La segmentacion se realiza con un retraso de 2 fotogramas desde que se deja de
detectar el laser. Esto es ası para asegurarse que la imagen segmentada no incluye el
puntero laser, evitando que entorpezca el proceso de clasificacion.
Para segmentar vamos a usar el rectangulo delimitador obtenido de la fase anterior,
que corresponde con el borde exterior del medicamento. Este recorte ofrece muy buenos
resultados ya que se esta trabajando con cajas rectangulares.
Una vez que tenemos la imagen segmentada, se calcula el histograma de los canales
rojo, verde y azul de la imagen. Se normalizan los histogramas entre 0 y 1 usando la
funcion de OpenCV normalice() en el modo MINMAX, que ajusta el valor maximo
dentro del histograma a 1 y el valor mınimo a 0. Los tres histogramas se juntan en una
matriz de 3 filas y 256 columnas.
(a) Celestoderm. (b) Aspirina.
Figura 4.6: Imagenes segmentadas.
Al comienzo de este proceso se le muestra la imagen segmentada al usuario y se le
pregunta por el nombre del medicamento que aparece en la imagen. Si por algun error,
la imagen segmentada fuese invalida, se puede escribir un texto de control que invalida
la segmentacion y continua con el proceso.
El ultimo paso es almacenar los histogramas normalizados junto con el nombre del
medicamento en un dataset.
43
Capıtulo 4. Proceso de adquisicion de lexico
4.2.6. Guardado
El dataset generado se guarda en disco en formato CSV. Se escribe una linea en el
fichero por cada elemento dentro del dataset. Con el siguiente formato:
etiqueta de clase, valores del histograma azul, valores del histograma verde, valores
del histograma rojo
44
Capıtulo 5
Proceso de busqueda
El objetivo del proceso de busqueda es encontrar un medicamento solicitado y senalar-
lo con el puntero laser. Para ello primero el robot debera ser capaz de encontrar la
posicion del medicamento en la estanterıa y posteriormente debe ser capaz de apuntar
su puntero laser sobre la caja del medicamento.
El proceso de busqueda puede realizarse en dos situaciones diferentes. La primera
situacion se produce por una solicitud interna del sistema, proveniente de la agen-
da. El objetivo es recordar al paciente que debe tomar un medicamento. Se mostrara
un mensaje informativo similar a: ”Son las 8:00, debes tomar este medicamento”. La
segunda situacion es una peticion externa al sistema. En este caso se trata de una con-
sulta realizada por el paciente para preguntar por la localizacion de un medicamento.
De forma mas abstracta el paciente preguntarıa al robot: ”¿Donde se encuentra este
medicamento? 2le responderıa : .El medicamento se encuentra aquı.al mismo tiempo que
lo senala con el puntero laser.
Para las dos situaciones se va a realizar el siguiente proceso:
Encontrar todos los objetos en la escena.
Segmentar cada uno de los objetos.
Aplicar el clasificador a cada imagen segmentada.
45
Capıtulo 5. Proceso de busqueda
Guardar el rectangulo delimitador de la imagen segmentada que coincida con el
nombre del medicamento buscado con menor distancia.
Calcular el centro del rectangulo delimitador.
Calcular la posicion que debe tener el robot para apuntar al centro del medica-
mento.
Mover la cabeza del robot y apuntar con el laser.
5.1. Fases de la busqueda
Las fases del proceso de busqueda estan representadas en el diagrama 5.1.
Figura 5.1: Diagrama de actividad del proceso de busqueda
46
5.1. Fases de la busqueda
5.1.1. Busqueda de objetos
El primer paso es encontrar todos los objetos en la escena. Usamos el mismo sistema
que en la fase de adquisicion de lexico. Se obtienen los bordes mediante el algoritmo
de Canny y posteriormente se hayan los contornos con la funcion findContours() de
OpenCV().
Se parte de estos datos para encontrar todos los bordes exteriores. Primero se escoge
un contorno de forma aleatoria y se calcula cual es el antecesor mas antiguo usando la
jerarquıa proporcionada por la funcion findContours(). Si el contorno elegido no tiene
padres, se repite este paso.
En este punto, se dispone del primer contorno exterior que corresponde con uno de
los objetos detectados en la escena. Usamos nuevamente la jerarquıa y obtenemos todos
los contornos hermanos, que deberıan corresponden con el resto de medicamentos.
La jerarquıa no es muy fiable, en numerosas ocasiones se detectan varios contornos
que no corresponden con el contorno exterior del objeto. Para solventar este problema
y obtener un resultado mas fiable, se aplica un algoritmo que deja unicamente los
contornos de mayor area. Este paso tambien se aprovecha de la captura del vıdeo para
obtener mejores resultados por lo que se va a realizar en iteraciones consecutivas.
Este algoritmo hace uso de los rectangulos contenedores de todos los contornos detec-
tados. Se parte de un listado de rectangulos contenedores calculados en el paso anterior
y la lista de rectangulos contenedores obtenida en la iteracion actual. El algoritmo
va a escoger aquellos rectangulos que contengan a otros en su interior eliminando los
rectangulos de su interior. Si dos rectangulos son diferentes, es decir, uno no esta den-
tro del otro, se mantienen los dos rectangulos. Si hay dos rectangulos muy parecidos,
permanece solo el de mayor area. Si se detectan nuevos rectangulos, estos se anaden
a la lista y el proceso se vuelve a repetir para asegurarnos de obtener unicamente el
contorno exterior del nuevo rectangulo detectado.
Este algoritmo retorna unicamente los rectangulos delimitadores de todos los objetos
de la escena.
47
Capıtulo 5. Proceso de busqueda
5.1.2. Segmentacion
Los siguientes pasos, la segmentacion y la clasificacion, se realizan dentro del mismo
bucle para optimizar el proceso.
Llegados a este punto, la segmentacion resulta sencilla. Para segmentar se usan los
rectangulos delimitadores obtenidos de la fase anterior, que corresponden con el borde
exterior de cada medicamento. Esta segmentacion da buen resultado porque estamos
trabajando con cajas. Habrıa que anadir un paso adicionas para segmentar por el con-
torno si usaramos otro tipo de objetos.
5.1.3. Clasificar
Por cada imagen segmentada que obtenemos del paso anterior, vamos a calcular sus
histogramas de los canales rojo, verde y azul.
Este es el punto clave del proceso, donde se va a usar el histograma obtenido en esta
iteracion en el clasificador k-nn. El resultado de este algoritmo es el nombre de la clase
que mas se parece al histograma dado, que corresponde con el nombre del medicamento.
El parametro k se asigna mediante un parametro de la aplicacion. Se usa la distancia
euclıdea como metodo de medicion entre muestras. El algoritmo tambien retorna la
distancia mas pequena entre el histograma dado y la clase seleccionada.
En este paso se va dar uso de una variable donde se va a ir guardando el rectangulo
delimitador con menor distancia y una variable para guardar la distancia euclıdea menor
de esa imagen respecto de las muestras.
Si el nombre de la clase que devuelve el clasificador, coincide con el nombre del
medicamento buscado y ademas la distancia euclıdea obtenida es menor que la del
rectangulo obtenido anteriormente, sustituimos los rectangulos y guardamos el nuevo
rectangulo.
Tras varias iteraciones seguidas de este proceso, se va a obtener el rectangulo deli-
mitador que es mas probable que coincida con el medicamento buscado. Este procesa
mejora el resultado del clasificador por si solo.
48
5.1. Fases de la busqueda
(a) Imagen original. (b) Resultado del clasificador.
Figura 5.2: Proceso de busqueda de Aspirina.
5.1.4. Calcular movimiento del robot
Despues de 20 iteraciones se sigue con el procedimiento de apuntado. Se ha elegido
20 iteraciones porque es un numero suficientemente grande como para encontrar una
buena solucion pero no tanto como para que la ejecucion sea muy prolongada.
El primer paso para calcular el movimiento que debe hacer el robot es obtener el punto
central del rectangulo delimitador (ox, oy). OpenCV nos ofrece los metodos necesarios
para conocer las coordenadas de la esquina superior izquierda (cx, cy), el ancho y el alto
del rectangulo. Con estos datos podemos calcular el punto central.
ox = cx +widht
2
oy = cy +height
2
(5.1)
El puntero laser esta alineado con el campo de vision de la camara, por lo tanto
siempre esta situado en el centro de la imagen. Calculamos el desplazamiento en pıxeles
del centro del rectangulo al centro de la imagen. El tamano de la imagen es de 640px
x 480px.
49
Capıtulo 5. Proceso de busqueda
dpxH = ox −640
2
dpxH = oy −480
2
(5.2)
Figura 5.3: Esquema FOV vertical y horizontal de la camara.
Para traducir el resultado en pıxeles a milımetros se usan las propiedades de la
camara. Dispone de una distancia focal de 3.6mm, una apertura focal f/2.9, relacion de
aspecto 4:3, un campo de vision (FOV) horizontal de 53◦ y un campo de vision vertical
de 40◦. Las medida realmente necesarias son el FOV en radianes que se corresponden
con FOVh = 0,9250 y FOVv = 0,6981 respectivamente. El otro parametro necesario
es la distancia de la camara a la imagen Dcam. El robot siempre se situa a la misma
distancia de la estanterıa, por lo tanto podemos indicar este valor directamente .
Para obtener un factor de escala entre las dos unidades, hay que calcular el tamano
en milımetros de la escena completa y hallar su relacion con el tamano en pıxeles. El
tamano de la escena en milımetros se calcula de la siguiente forma:
50
5.1. Fases de la busqueda
widthmm = tan(FOVh
2) · (Dcam) · 2
heightmm = tan(FOVv
2) · (Dcam) · 2
(5.3)
Se calcula el factor de escala y se aplica al desplazamiento para convertir las unidades
de pıxeles a milımetros. De esta manera se obtiene la distancia en milımetros desde el
centro del medicamento al centro de la escena.
dmmH = dpxH ·widthmm
640
dmmV = dpxV ·heightmm
480
(5.4)
(a) Calculo del desplazamiento. (b) Calculo del angulo de giro.
Figura 5.4: Modelizado de la cabeza del robot.
El eje de giro de la cabeza esta alineado con el centro del sensor de la camara pero
se situa a una distancia mayor de la estanterıa, esta representado en la figura 5.4. El
angulo de giro debe ser calculado usando la distancia del eje a la estanterıa Deje de la
siguiente forma:
51
Capıtulo 5. Proceso de busqueda
αH = tan−1(dmmH
Deje
)
αV = tan−1(dmmV
Deje
)
(5.5)
El ultimo paso es traducir el angulo de giro en radianes obtenido en el paso anterior
a un valor comprendido entre [0, 255] que puede interpretar el servo. El valor 0 corres-
ponde con un angulo de 0 radianes y 255 con un angulo de π radianes (180o). Como el
desplazamiento se calcula de forma relativa, el calculo del angulo absoluto dependera
del angulo actual de los servos γPAN y γTILT , que se corresponden con la posicion desde
la que se ha tomado la medicion. El signo de la operacion depende de la direccion de
giro del servo.
αPAN = γPAN − αH ·256
π
αTILT = γTILT + αV ·256
π
(5.6)
El resultado es la posicion absoluta que debe tomar el robot para apuntar al centro
del medicamento.
5.1.5. Mover el robot y senalar
El ultimo paso consiste en enviar tres comandos por el puerto serie a la placa Arduino.
El primer comando es un mensaje donde se indica la posicion absoluta que acabamos
de calcular. El segundo mensaje es una senal para activar el puntero laser. El ultimo
mensaje indica a la placa Arduino que debe activar la alarma. Pasado un tiempo se
envıan otros tres comandos para deshacer la operacion realizada y volver a la posicion
de origen.
Todo el proceso de movimiento de los servos se realiza mediante la placa Arduino.
Para posicionar la cabeza en el lugar indicado, se usa la librerıa proporcionada por
Meccano. Se envıan los valores recibidos por el cable que conecta los servos que realizan
los movimientos horizontales y verticales.
52
5.1. Fases de la busqueda
La activacion del laser se realiza poniendo la salida de Arduino donde esta conectado
el laser en alto, es decir con 5V.
Para la alarma se hace uso de la librerıa ”tone”que provee la plataforma Arduino.
Cuando el comando es recibido se emite un numero indicado de veces un pitido a traves
de un zumbador conectado a una de las salidas de la placa.
53
Capıtulo 6
Implementacion
La parte software de este trabajo se ha realizado en lenguaje de programacion C++
debido a su potencia y eficiencia. Se ha programado sobre las plataformas Raspbian
y Arduino. Ademas, para agilizar la programacion se han usado varias librerıas como
OpenCV, raspicam, WiringPi en Raspberry Pi y la librerıa de Meccanoid para la placa
Arduino.
6.1. Plataformas
Estan disponibles varios sistemas operativos que funcionan sobre la placa Raspberry
Pi. Noobs y Raspbian son las dos distribuciones oficiales, aunque podemos encontrarnos
otras creadas o modificadas por la comunidad como Ubuntu Mate, Windows 10 IOT,
Pinet o OSMC. Se ha elegido usar Raspbian, puesto que es el sistema operativo que
mas tiempo lleva en produccion lo que implica encontrar un mayor numero de paquetes
software compatibles y una mayor documentacion.
Raspbian es un sistema operativo gratuito basado en Debian que esta optimizado
para el hardware de la Raspberry Pi. El sistema operativo dispone de un conjunto de
programas basicos y utilidades que permiten hacer uso de la Raspberry pi. Sin embargo,
Raspbian ofrece mas que solo un sistema operativo; dispone de mas de 35.000 paquetes
software pre-compilados en un formato correcto listos para ser instalados facilmente.
54
6.2. Lenguaje de programacion
BQ ofrece un entorno de programacion propio basado en web para su placa Zum Core.
Esta pensado para una programacion sencilla basada en Scratch. Sin embargo puede
usarse cualquier otro entorno, como el IDE oficial o Eclipse para una programacion mas
clasica.
La programacion de Arduino se realiza normalmente mediante una version adaptada
de C++. Se trata de una librerıa que encapsula algunas funciones que trabajan directa-
mente con los registros del microcontrolador, aunque existe la posibilidad de usar estas
operaciones directamente.
6.2. Lenguaje de programacion
C++ es un lenguaje de programacion disenado a mediados de los anos 1980 por Bjar-
ne Stroustrup. La intencion de su creacion fue el extender al lenguaje de programacion
C mecanismos que permiten la manipulacion de objetos. En ese sentido, desde el punto
de vista de los lenguajes orientados a objetos, el C++ es un lenguaje hıbrido.
6.3. Librerıas
OpenCV es una librerıa muy potente orientada a metodos de vision artificial como
reconocimiento de objetos, vision estereoscopica, vision por computador, calibracion de
camaras, etc. Cuenta con interfaces de C++, Python y Java. Es multiplataforma por lo
que es compatible con varios sistemas operativos como Windows, Linux, Mac OS, iOS
y Android. Es proporcionada por una licencia BSD que permite su uso gratuito tanto
para uso academico, como comercial.
Raspicam es un librerıa desarrollada por la comunidad en C++, que permite manejar
el modulo camara de Raspberry Pi . Hacen uso de las herramienta rapistill que viene
instalada con Raspbian. Esta librerıa ademas ofrece la posibilidad de usarla directamen-
te con OpenCv, lo que permite sustituir facilmente las funciones de captura estandar
de OpenCV por las de esta librerıa.
55
Capıtulo 6. Implementacion
WiringPi es una librerıa que incluye la capacidad de manejar el puerto serie de la
Raspberry Pi. Puede usarse para manejar el puerto UART montado sobre la placa o
cualquiera de los puertos USB sin distincion alguna entre ellos. Simplemente hay que
indicar el nombre del dispositivo para abrir un stream de datos.
La librerıa Meccanoid esta escrita en C++ y esta pensada para su uso en el entorno
Arduino. Se trata de un proyecto Open Source desarrollado por la empresa Spin Master,
asociada a Meccano. Permite el control de los dispositivos inteligentes de cualquiera de
las versiones del robot Meccanoid.
6.4. Experimentos
Los experimentos llevados a cabo en este proyecto han hecho uso de las plataformas,
lenguajes y libreras mencionados con anterioridad. Se han implementado los siguientes
ficheros que hacen uso de ellas:
Raspberry Pi
• adquisicion.cpp
• busqueda.cpp
• utils.h
Arduino
• meccanoid.ino
• pitches.h
Adquisicion En este fichero se implementa todo el proceso de adquisicion de busque-
da. Tambien se han anadido dos modos para poder testear el clasificador. El primero
consiste en aplicar el test leave-one-out para diferentes valores de k del algoritmo knn.
El segundo metodo permite usar el puntero laser del usuario para clasificar un medica-
mento y obtener el nombre de su clase.
56
6.4. Experimentos
Busqueda La programacion de cada una de las fases proceso de busqueda esta escrita
en este fichero. Tambien se hace uso de la librerıa WiringPi para la comunicacion con
Arduino para controlar los servos, laser y alarma.
Utils Esta librerıa incluye una serie de funciones que son usadas tanto en el proceso
de adquisicion de lexico como en el proceso de busqueda. Estan implementados los
procesos de lectura y escritura del dataset, la generacion de histogramas a partir de
una imagen, el algoritmo knn y varias funciones sencillas.
Meccanoid En este fichero se encuentra el controlador de los motores del robot.
Actua como un servidor que recibe comandos desde el puerto serie y ejecuta las orde-
nes correspondientes. Hay comandos para controlar la posicion de las extremidades y
cabeza, que hacen uso de la librerıa de Meccanoid para controlar los dispositivos in-
teligentes. Tambien permite activar y desactivar el puntero laser. Hace uso del fichero
Pitches para generar una alarma.
Pitches En este fichero se encuentra una lista de notas que permiten emitir un sonido
o melodıa con un zumbador o altavoz.
57
Capıtulo 7
Diseno y evaluacion del reconocedor
de medicamentos
La fase crucial de este proyecto es el uso de un clasificador, que es el algoritmo
que permite reconocer los medicamentos. Si el uso de este algoritmo falla, el proceso
completo fallarıa.
Existen varios tipos de clasificadores, y cada uno tiene sus ventajas e incovenientes.
Uno de los mas sencillos y que se suele utilizar como partida es el ”K nearest neigh-
bors”(knn). La principal ventaja de este algoritmo es que permite trabajar rapidamente
puesto que no es necesario entrenar cada vez que se anade un nuevo elemento al dataset.
Esta ventaja nos permite probar con diferentes variables discriminantes para encontrar
la mejor alternativa.
7.1. Clasificador knn
El algoritmo knn (Silverman y Jones, 1989) es un metodo de clasificacion supervisada
que sirve para estimar la funcion de densidad F (x/Cj) de las variables predictoras o
discriminantes x por cada clase Cj .
Este es un metodo de clasificacion no parametrico, que estima el valor de la funcion
de densidad de probabilidad o directamente la probabilidad a posteriori de que un
elemento x pertenezca a la clase Cj a partir de la informacion proporcionada por el
58
7.1. Clasificador knn
conjunto de prototipos. En el proceso de aprendizaje no se hace ninguna suposicion
acerca de la distribucion de las variables discriminantes.
En el reconocimiento de patrones, el algoritmo knn es usado como metodo de clasifi-
cacion de objetos (elementos) basado en un entrenamiento mediante ejemplos cercanos
en el espacio de los elementos. knn es un tipo de ”Lazy Learning”, donde la funcion se
aproxima solo localmente y todo el computo es diferido a la clasificacion.
Los ejemplos de entrenamiento son vectores en un espacio caracterıstico multidimen-
sional, cada ejemplo esta descrito en terminos de p atributos considerando q clases para
la clasificacion. Los valores de los atributos del i-esimo ejemplo (donde 1 ≤ i ≤ n ) se
representan por el vector p-dimensional
xi = (x1i, x2i, ..., xpi) ∈ X (7.1)
El espacio es particionado en regiones por localizaciones y etiquetas de los ejemplos
de entrenamiento. Un punto en el espacio es asignado a la clase C si esta es la clase
mas frecuente entre los k ejemplos de entrenamiento mas cercano. Generalmente se usa
la distancia euclidiana y es el metodo usado en este trabajo.
d(xi, xj) =
√
√
√
√
p∑
r=1
(xri − xrj)2 (7.2)
La fase de entrenamiento del algoritmo consiste en almacenar los vectores carac-
terısticos y las etiquetas de las clases de los ejemplos de entrenamiento. En la fase de
clasificacion, la evaluacion del ejemplo (del que no se conoce su clase) es representada
por un vector en el espacio caracterıstico. Se calcula la distancia entre los vectores al-
macenados y el nuevo vector, y se seleccionan los k ejemplos mas cercanos. El nuevo
ejemplo es clasificado con la clase que mas se repite en los vectores seleccionados.
Este metodo supone que los vecinos mas cercanos nos dan la mejor clasificacion y
esto se hace utilizando todos los atributos; el problema de dicha suposicion es que es
posible que se tengan muchos atributos irrelevantes que dominen sobre la clasificacion:
dos atributos relevantes perderıan peso entre otros veinte irrelevantes.
59
Capıtulo 7. Diseno y evaluacion del reconocedor de medicamentos
Para corregir el posible sesgo se puede asignar un peso a las distancias de cada atri-
buto, dandole ası mayor importancia a los atributos mas relevantes. Otra posibilidad
consiste en tratar de determinar o ajustar los pesos con ejemplos conocidos de entre-
namiento. Sin embargo la mejor opcion pero que lleva mas tiempo,consiste en antes
de asignar pesos es recomendable identificar y eliminar los atributos que se consideran
irrelevantes antes de anadirlos al vector de caracterısticas.
En sıntesis, el metodo knn se resumen en dos algoritmos:
Algoritmo de entrenamiento Para cada ejemplo < x, f(x) > ,donde x ∈ X, agre-
gar el ejemplo a la estructura representando los ejemplos de aprendizaje.
Algoritmo de clasificacion Dado un ejemplar xq que debe ser clasificado, sean
x1, ..., xk los k vecinos mas cercanos a xq en los ejemplos de aprendizaje, regresar
f(x)← argmaxv∈V
k∑
i=1
δ(v, f(xi)) (7.3)
Donde δ(a, b) = 1 si a = b; y 0 en cualquier otro caso. El valor f(xq) devuelto por
el algoritmo como un estimador de f(xq) es solo el valor mas comun de f entre los
k vecinos mas cercanos a xq. Si elegimos k = 1; entonces el vecino mas cercano a xi
determina su valor.
7.2. Variables discriminantes
Como se ha mencionado, la eleccion de las variables discriminantes es la parte mas
importante a la hora de usar este clasificador y esto se cumple en el problema que nos
atana. Una primera idea que se tuvo es usar el tamano, mas concretamente la relacion
de aspecto de la caja de los medicamentos junto con el color predominante. Este vector
de caracterısticas resulta bastante pequeno, pero dado que se trabaja con cajas muy
parecidas se penso que no darıa muy buen resultado.
Otra opcion que se barajo durante el desarrollo es el uso de la jerarquıa proporcionada
por la funcion findContours() de OpenCV. Esta idea parecıa bastante interesante desde
60
7.3. Dataset
un punto de vista teorico, pero en la practica no resultaba tan bonito. Mientras se
hacıan las correspondientes pruebas con el resto de procesos, nos percatamos que la
forma de generar dicha jerarquıa era muy diferente en cada ejecucion, a veces ocurrıa,
que en dos iteraciones consecutivas, dos contornos que eran padre e hijo en la primera
pasan a ser hermanos en la segunda. Esto implica que crear un proceso para calcular
la distancia entre contornos iba a resultar muy complicado.
Finalmente se opto por usar el histograma en color. Un histograma es una vector
cuyos elementos son el numero de pıxeles que tienen una intensidad de entre todas las
intensidades posibles. Se debe realizar sobre uno de los canales de la imagen. Usualmente
en vision por computador se usa un histograma de una imagen en blanco y negro, aunque
en este caso hemos intensificado el tamano, generando un histograma por cada uno de
los canales de la imagen RGB.
En definitiva, se usan 3 histogramas de 256 valores, que corresponden con el canal
rojo, verde y azul. Estos 3 histogramas se juntan en un super vector de 768 elementos,
que contiene los 3 histogramas uno detras de otro. En la implementacion se usa una
matriz de 3 filas por 3 columnas, en vez de un vector, dado que el tipo de dato Mat de
OpenCV lo trata como si fuera un vector.
Este super vector es normalizado entre [0,1] empleando la funcion normalize() de
OpenCV. Esta funcion ofrece varios tipos de normalizacion, y se ha usado el metodo
MINMAX, que asigna al valor mas alto dentro del histograma el valor 1 y al valor mas
bajo se asigna a 0, interpolando el resto de valores.
El calculo de la distancia entre los vectores de caracterısticas se calcula mediante la
distancia euclıdea. Se hace uso de la funcion norm() proporcionada por OpenCV, que
por defecto calcula la distancia euclıdea.
7.3. Dataset
El dataset es el conjunto de vectores de caracterısticas usados para el entrenamiento
del algoritmo de clasificacion.
61
Capıtulo 7. Diseno y evaluacion del reconocedor de medicamentos
En este proyecto se esta trabajando con un dataset con un total de 1320 vectores de
caracterısticas. Siendo 120 muestras por cada clase, con un total de 11 clases. Las clases
se corresponden con el nombre de los medicamentos con los que se estan trabajando.
7.4. Universo de trabajo
El universo de trabajo es el conjunto de elementos, en nuestro caso cajas de medica-
mentos, que se corresponden con cada una de las clases dentro del dataset.
A continuacion se muestra un ejemplo de cada uno de los medicamentos usados. Se ha
utilizado el proceso implementado para la adquisicion de lexico para extraer, de forma
aleatoria, una captura y el histograma de cada uno de los medicamentos.
(a) Captura. (b) Histograma.
Figura 7.1: Universo de trabajo: Almax.
62
7.4. Universo de trabajo
(a) Captura. (b) Histograma.
Figura 7.2: Universo de trabajo: Aspirina.
(a) Captura. (b) Histograma.
Figura 7.3: Universo de trabajo: BB Cream.
63
Capıtulo 7. Diseno y evaluacion del reconocedor de medicamentos
(a) Captura. (b) Histograma.
Figura 7.4: Universo de trabajo: Celestoderm.
(a) Captura. (b) Histograma.
Figura 7.5: Universo de trabajo: Dretine..
64
7.4. Universo de trabajo
(a) Captura. (b) Histograma.
Figura 7.6: Universo de trabajo: Enantyum.
(a) Captura. (b) Histograma.
Figura 7.7: Universo de trabajo: Espidifen.
65
Capıtulo 7. Diseno y evaluacion del reconocedor de medicamentos
(a) Captura. (b) Histograma.
Figura 7.8: Universo de trabajo: Fungusol.
(a) Captura. (b) Histograma.
Figura 7.9: Universo de trabajo: Glicilax.
66
7.5. Resultados del clasificador
(a) Captura. (b) Histograma.
Figura 7.10: Universo de trabajo: Oliderm.
(a) Captura. (b) Histograma.
Figura 7.11: Universo de trabajo: Pharmaton.
7.5. Resultados del clasificador
Para comprobar la eficacia del clasificador en la tarea de reconocimiento de medi-
camentos normalmente se separa el conjunto de datos (dataset) en dos conjuntos, un
conjunto de entrenamiento y un conjunto de prueba. De esta manera se puede probar
el algoritmo para conocer su tasa de aciertos ante casos desconocidos. En este proyecto
se ha usado el metodo leave-one-out.
67
Capıtulo 7. Diseno y evaluacion del reconocedor de medicamentos
0 2 4 6 8 10 12 14 16
96,5
97
97,5
98
98,5
99
k
%aciertos
Leave-one-out
Figura 7.12: Grafica del resultado de leave-one-out
La validacion mediante el algoritmo Leave-one-out consiste en extraer un elemento
del dataset que va a conformar el conjunto de prueba y el resto de elementos conforman
el conjunto de entrenamiento. Seguidamente se aplica el algoritmo de clasificacion y
se anota su resultado. Este proceso se repite para cada uno de los elementos dentro
del dataset. Al final del resultado se calcula la tasa de aciertos contando el numero de
aciertos frente al numero total de elementos.
En la figura 7.12 y en la tabla 7.1 se puede observar el resultado de aplicar el test
leave-one-out al dataset de medicamentos.
Con un valor de k = 1 se obtiene los mejores resultados con este algoritmo alcanzando
una tasa de aciertos del 99,17%. Es un resultado muy bueno, por ello se usa el valor
de k = 1 en la fase de busqueda.
68
7.5. Resultados del clasificador
k aciertos total % exito
1 1309 1320 99.16673 1303 1320 98.71215 1304 1320 98.78797 1294 1320 98.03039 1291 1320 97.803011 1286 1320 97.424213 1281 1320 97.045515 1276 1320 96.6667
Cuadro 7.1: Resultado Leave-one-out
almax
aspirina
bbcream
celestoderm
dretine
enan
tyum
espidifen
fungu
sol
glycilax
oliderm
pharmaton
almax 120 0 0 0 0 0 0 0 0 0 0aspirina 0 119 0 1 0 0 0 0 0 0 0bbcream 0 0 119 1 0 0 0 0 0 0 0celestoderm 0 0 1 117 0 2 0 0 0 0 0dretine 0 0 1 0 119 0 0 0 0 0 0enantyum 0 0 0 0 0 120 0 0 0 0 0espidifen 0 0 0 0 0 0 119 1 0 0 0fungusol 0 0 1 0 0 0 0 119 0 0 0glycilax 0 1 1 0 0 0 0 0 118 0 0oliderm 0 0 0 0 0 0 0 0 0 120 0pharmaton 0 0 1 0 0 0 0 0 0 0 119
Cuadro 7.2: Matriz de confusion (k=1)
69
Capıtulo 8
Conclusiones
La idea principal de este proyecto consistıa en disenar un sistema que permitiera a
un robot buscar e identificar medicamentos para ayudar a personas dependientes. Al
final se ha conseguido que el robot Meccanoid G15KS sea capaz de buscar un medi-
camento situado en una estanterıa y senalarlo mediante un puntero laser. Ademas se
puede programar una agenda en el robot que ejecute el programa de busqueda a una
hora indicada, o se puede hacer manualmente para buscar un medicamento concreto.
Para que el robot sea capaz de realizar esto, es necesario que aprenda como son los
medicamentos, para ello se ha realizado un procedimiento de adquisicion de lexico con
anclaje visual que ademas sirve para el entrenamiento del robot.
El primer objetivo a alcanzar era el de disenar un metodo de comunicacion simbolico.
Este problema se resolvio usando un puntero laser. Aunque parece algo extrano en un
principio, este metodo se usa de forma intuitiva por un humano tras el primer uso.
Ademas, el proceso de identificar el objeto senalado es trivial y elimina todas las posibles
ambiguedades. A pesar de que la deteccion del puntero laser puede presentar algunos
problemas en escenas muy iluminadas, la tarea suele ser bastante sencilla y rapida de
realizar; practicamente en todos los casos se obtienen buenos resultados. La principal
pega de este mecanismo es que es necesario disponer de un dispositivo que contenga un
laser que pueda manejar el usuario.
El proceso de adquisicion de lexico, se ha apoyado en el uso del puntero laser y la
deteccion de objetos realizada mediante vision por computador para poder identificar el
70
objeto que queremos que aprenda el robot. La mejora mas importante en este aspecto
viene de la captura de vıdeo. Se han usado varios fotogramas seguidos para mejorar el
resultado que se obtiene de forma individual en cada uno de los fotogramas. El proceso
consiste en obtener en cada fotograma el rectangulo delimitador de mayor area, que
corresponde con el rectangulo que rodea la caja del medicamento. Al tomar varios
fotogramas, se obtiene al final el rectangulo de mayor area de todos los calculados. Este
metodo ha mejorado considerablemente la eficacia del proceso individual, permitiendo
identificar un medicamento de forma fiable en unos 2-3 segundos. En alguna ocasiones
este tiempo puede extenderse, debido a que la posicion del medicamento o la iluminacion
impiden la deteccion de todos los bordes del objeto. Pero a pesar de esto, si se mantiene
el tiempo suficiente el puntero laser sobre el objeto, puede encontrarse el borde exterior.
Una vez tenemos el rectangulo delimitador, simplemente se recorta la imagen usando
ese rectangulo. Como todas las cajas de medicamentos son rectangulares, simplemente
hay que recortar la imagen usando el rectangulo delimitador del contorno exterior del
objeto detectado. Este proceso es muy especifico para esta tarea en concreto que habrıa
que refinar si se quiere usar otro tipo de recipientes.
La tarea de adquisicion de lexico se ha realizado de forma conjunta con el proceso de
entrenamiento del dataset de entrenamiento del clasificador. Esto permite que la apli-
cacion realizada pueda ser usada en cualquier robot y que ademas pueda ser entrenado
de forma facil por cualquier persona, sin necesidad de tener un gran conocimiento de
inteligencia artificial. A pesar de esto, el proceso puede resultar algo cansado si se reali-
za en una unica sesion. Para aliviar la pesadez de esta tarea, se ha disenado un sistema
de entrenamiento abierto, con el cual puede irse entrenando el robot en sesiones cortas.
Incluso se pueden anadir nuevos medicamentos una vez que el robot ya esta usando. A
esto le acompana la ventaja de usar un clasificador knn, puesto que el entrenamiento
no requiere de tiempo de computo adicional.
Se ha disenado un procedimiento para que el robot sea capaz de buscar y senalar
un medicamento dentro de una estanterıa de forma autonoma. La parte crucial de esta
tarea reside en la identificacion del medicamento. Esta tarea la realiza el algoritmo de
clasificacion knn. Se han obtenido resultados muy buenos, con una tasa de aciertos por
71
Capıtulo 8. Conclusiones
encima del 99% en el test leave-one-out. Se han usado utilizando tres histogramas como
variable predictora, uno por cada canal de la imagen RGB.
La otra parte mas importante dentro del proceso de busqueda reside en la segmenta-
cion de todos los objetos de la imagen, para ello se ha usado un algoritmo que se basa
en la deteccion de bordes de la imagen y una jerarquıa que los relaciona para obtener
el borde exterior de cada uno de los medicamentos. Para ello obtiene los rectangulos
delimitadores con mayor area. Una vez obtenido el borde exterior de las cajas, la parte
de segmentar la imagen es analoga al procedimiento de adquisicion de lexico.
Para poder probar estos experimentos, se ha usado el robot Meccanoid G15KS. Es-
te robot ha sido modificado para que pueda ser usado en este proyecto. La primera
modificacion consistio en modificar su estructura para que la cabeza pudiera realizar
un movimiento horizontal y vertical (PAN-TILT). Se anadio una camara y un puntero
laser. Finalmente se descarto el procesador del robot y se incluyo una Raspberry Pi y
una placa Arduino para la vision artificial y el control de los motores respectivamente.
El robot elegido ha sido una muy buena eleccion y ha permito poner a prueba en un
entorno real todo el proceso.
72
Capıtulo 9
Lıneas de trabajo futuro
Este trabajo ha desencadenado un punto de partida para realizar una investigacion
mas profunda en muchos de los metodos y procedimientos que se han desarrollado.
Ademas se pueden incluir muchas mejoras que se han dejado de lado en el transcurso
de este proyecto.
La parte donde mas se puede mejorar es en la comunicacion hombre-maquina. Co-
mo hemos visto este proyecto se ha centrado en una comunicacion simbolica, y se ha
empleado un metodo muy sencillo, que consiste en el uso de un puntero laser. Sin em-
bargo, el mecanismo usado en la sociedad humana consiste en usar gestos y sonidos.
Una posible linea de investigacion futura puede consistir en el reconocimiento de gestos
acompanados de informacion sonora. Pueden ser gestos sencillos como tocar un objeto
o apuntar con el dedo. Las senales sonoras pueden ser ordenes sencillas que ayuden al
robot a comprender el gesto que esta realizando.
La propia parte de reconocimiento de voz, y sobretodo entender que dice la perso-
na sigue siendo un gran reto dentro de la Inteligencia Artificial, e investigar en esta
direccion es un buen camino por donde continuar.
La deteccion de los bordes de los objetos ha sido uno de los procedimientos de los
cuales mejor resultado se ha obtenido. Sin embargo el proceso esta pensado para una
escena estatica, o con ligeras modificacion. Una linea de trabajo futura es adaptar este
metodo para objetos que estan en movimiento, de tal forma que se puedan usar varios
73
Capıtulo 9. Lıneas de trabajo futuro
fotogramas para detectar correctamente los objetos que se mueven dentro de la escena.
El ultimo paso de la segmentacion, que cosiste en recortar la imagen ha resultado
muy sencilla en este caso debido a que los medicamentos con los que se ha trabajado
estan en cajas de carton rectangulares. En muchos casos podemos encontrarnos con
botes de plastico o cristal que contienen el medicamento en su interior. En estos caso
el proceso de segmentacion se deberıa de refinar para conseguir segmentar todo tipo de
envoltorios, y esto puede ser el punto de partida para otra lınea de investigacion futura.
Otra de las partes donde mas se puede mejorar en es el reconocimiento de medica-
mentos. Aunque los resultados obtenidos han sido buenos, es conveniente seguir investi-
gando en esta linea y mejorar este reconocimiento, puesto que podemos estar hablando
de vidas humanas. Un punto donde mejorar es en la eleccion de nuevas variables dis-
criminantes, aunque usar el histograma ha sido una muy buena opcion, el tamano de
los vectores de caracterısticas que se han generado son muy grandes y eso implica la
necesidad de disponer de un sistema con una gran cantidad de memoria. Usar el algo-
ritmo knn no ayuda tampoco en este aspecto. Se puede plantear el uso de otro tipo de
clasificadores mas robustos, eficientes y rapidos.
La fase de clasificacion se puede complementar o quizas incluso sustituir con la lectura
del nombre del medicamento y/o codigo de barras. Este metodo implica un gran reto,
puesto que lo mas complicado es encontrar la posicion del nombre del medicamento. Este
camino es una buena opcion porque existen muchos medicamentos que su apariencia es
igual, y solo cambia el nombre, como es el caso de los medicamentos genericos. Ademas,
la parte de reconocimiento de los caracteres esta suficientemente investigada como para
ser un mecanismo muy fiable.
74
Bibliografıa
Arduino web. URL https://www.arduino.cc/. (2016-07-04).
Meccano - Meccanoid. a. URL http://www.meccano.com/meccanoid-about. (2016-
07-01).
Meccano - Meccanoid-opensource. b. URL http://www.meccano.com/
meccanoid-opensource. (2016-07-01).
OpenCV. URL http://opencv.org/. (2016-07-01).
Placa Zum Core compatible ArduinoTM | BQ. URL https://www.bq.com/es/
placa-zum-core. (2016-07-01).
Raspberry Pi - Teach, Learn, and Make with Raspberry Pi. a. URL https://www.
raspberrypi.org/. (2016-07-01).
raspicam commands - Raspberry Pi Documentation. b. URL https://www.
raspberrypi.org/documentation/usage/camera/raspicam/. (2016-07-01).
Raspicam lib - GitHub. c. URL https://github.com/cedricve/raspicam. (2016-07-
01).
WiringPi. URL http://wiringpi.com/. (2016-07-01).
J. Canny. A Computational Approach to Edge Detection. IEEE Transactions on
Pattern Analysis and Machine Intelligence, PAMI-8(6):679–698, 1986. ISSN 0162-
8828.
Antonio Cunha, Telmo Adao, y Paula Trigueiros. HelpmePills: a mobile pill recognition
tool for elderly persons. Procedia Technology, 16:1523–1532, 2014.
75
Bibliografıa
C. C. Kemp, C. D. Anderson, H. Nguyen, A. J. Trevor, y Z. Xu. A point-and-click
interface for the real world: Laser designation of objects for mobile manipulation. En
2008 3rd ACM/IEEE International Conference on Human-Robot Interaction (HRI),
pags. 241–248. 2008.
Yukie Nagai, Koh Hosoda, Akio Morita, y Minoru Asada. Emergence of joint attention
based on visual attention and self learning. En Int. Symposium on Adaptive Motion
of Animals and Machines. 2003.
Natalie Parde, Michalis Papakostas, Konstantinos Tsiakas, Maria Dagioglou, Vangelis
Karkaletsis, y Rodney D Nielsen. I spy: An interactive game-based approach to
multimodal robot learning. En Workshops at the Twenty-Ninth AAAI Conference
on Artificial Intelligence. 2015.
P. Rouanet, J. Bechu, y P. Y. Oudeyer. A comparison of three interfaces using handheld
devices to intuitively drive and show objects to a social robot: the impact of underl-
ying metaphors. En RO-MAN 2009 - The 18th IEEE International Symposium on
Robot and Human Interactive Communication, pags. 1066–1072. 2009.
P. Rouanet, P. Y. Oudeyer, F. Danieau, y D. Filliat. The Impact of Human-Robot Inter-
faces on the Learning of Visual Objects. IEEE Transactions on Robotics, 29(2):525–
541, 2013. ISSN 1552-3098.
B. W. Silverman y M. C. Jones. E. Fix and J.L. Hodges (1951): An Important Contribu-
tion to Nonparametric Discriminant Analysis and Density Estimation: Commentary
on Fix and Hodges (1951). International Statistical Review / Revue Internationale
de Statistique, 57(3):233–238, 1989. ISSN 0306-7734.
Satoshi Suzuki y KeiichiA be. Topological structural analysis of digitized binary images
by border following. Computer Vision, Graphics, and Image Processing, 30(1):32–46,
1985. ISSN 0734-189X.
Priyesh Tiwari, Jim Warren, Karen Day, Bruce MacDonald, Chandimal Jayawardena,
I. H. Kuo, Aleksandar Igic, y Chandan Datta. Feasibility Study of a Robotic Me-
dication Assistant for the Elderly. En Proceedings of the Twelfth Australasian User
Interface Conference - Volume 117, AUIC ’11, pags. 57–66. Australian Computer
Society, Inc., Darlinghurst, Australia, Australia, 2011. ISBN 978-1-920682-97-2.
76
Bibliografıa
Chen Yu y Dana H Ballard. Exploring the role of attention in modeling embodied lan-
guage acquisition. En Proceedings of the Fifth International Conference on Cognitive
Modeling, pags. 219–224. 2003.
HK Yuen, J Princen, J Illingworth, y J Kittler. Comparative study of Hough Transform
methods for circle finding. Image and Vision Computing, 8(1):71–77, 1990. ISSN
0262-8856.
77