Professional Documents
Culture Documents
Director:
Ing. Carlos Alberto Parra Rodrguez, PhD
1 Introduccin
Pgina1
Trabajo de Grado - Profundizacin
Pgina2
Maestra Ingeniera Electrnica
2 Marco terico.
Pgina3
Trabajo de Grado - Profundizacin
Arduino es una iniciativa de software y hardware libre, lo que quiere decir que los
el cdigo y los diseos electrnicos estn disponibles de forma gratuita,
manteniendo solamente en reserva la marca Arduino para las tarjetas oficiales. La
Pgina4
Maestra Ingeniera Electrnica
Figura 2: Parrot Mini Drone Jumping Sumo. Ejemplo comercial de un robot de locomocin diferencial.
Pgina5
Trabajo de Grado - Profundizacin
ICC
vl
vr
R
x
Figura 3: Esquema geomtrico de un robot con locomocin diferencial
Pgina6
Maestra Ingeniera Electrnica
Pgina7
Trabajo de Grado - Profundizacin
2.4 UBJSON
2.4.1 JSON
JSON es el acrnimo de JavaScript Object Notation, es el formato empleado por
JavaScript para la definicin de objetos y el intercambio de datos [6]. Dentro de las
principales caractersticas de JSON se tiene que es un formato que puede ser
ledo y escrito fcilmente por un humano, es ligero, fcil de procesar y generar por
un ordenador. Actualmente, este formato est siendo ampliamente utilizado como
alternativa sobre XML para el envo de mensajes debido a que la representacin
de un objeto es ms reducida y simple. Un objeto en JSON se representa de la
siguiente manera.
Pgina8
Maestra Ingeniera Electrnica
JSON es casi tan extensible con XML debido a que el valor puede ser una cadena,
un nmero, un booleano, un vector u otro objeto. De esta forma, en JSON se
pueden anidar diferentes objetos con diferentes niveles de jerarqua.
2.4.2 UBJSON:
UBJSON es el acrnimo de Universal Binary JSON [7]. Esta es una iniciativa para
construir una especificacin de JSON de forma binaria de tal forma que se pueda
conservar la extensibilidad del formato y reducir su tamao, sacrificando la
legibilidad por parte de los humanos. Por otro lado, UBJSON tambin permite
especificar ms tipos de datos, por ejemplo en JSON un dato numrico no se le
puede especificar directamente el tipo de nmero, es decir, es tarea de la
aplicacin definir si se trata de la representacin de un byte, short, int, float, double
etc. Por ejemplo para representar velocidad como un entero de 32 bits tenemos:
JSON:
{velocidad:{valor:14789,representacin:int32}} = 54 caracteres
UBJSON:
[{][i][9][velocidad][l][14789][}] = 18 caracteres
Pgina9
Trabajo de Grado - Profundizacin
int32 5 bytes l No Si
int64 9 bytes L No Si
float32 5 bytes d No Si
float64 9 bytes D No Si
char 2 bytes C No Si
string 1 + nval + len S Si Si
array +2 bytes [,] Opcional Si
objeto +2 bytes {,} Opcional Si
Tabla 1: tipo de datos en UBJSON [7]
2.5 OpenCv
OpenCV tiene una arquitectura modular que consiste en los siguiente mdulos [9]:
Core: definicin de las estructuras de datos bsicas.
Imgproc: mdulo para el procesamiento de imgenes que incluye filtrado
lineal y no lineal, as como transformaciones geomtricas.
Video: mdulo para el anlisis de video que incluye estimadores de
movimiento, algoritmos para seguimiento de objetos y sustraccin de
planos de fondo.
Calib3d: este mdulo ofrece algoritmos para la calibracin de cmaras
simples y estero, estimacin de posicin de objetos, reconstruccin de
elementos 3D entre otros.
Features2d: detectores de caractersticas sobresalientes, descriptores y
comparadores descriptores.
Highgui: interfaz de captura de video y funcionalidades de interfaz de
usuario.
Pgina10
Maestra Ingeniera Electrnica
3 Especificaciones
Pgina11
Trabajo de Grado - Profundizacin
Integrado: L298N
Voltaje lgica: 5V
Voltaje motores: 5v - 35V
Corriente lgica: 0mA - 36mA
Corriente mxima
por cada puente H: 2A
Potencia mxima: 25W
Dimensiones: 43x43x26mm
Peso: 26g.
Micro-motores: Cada robot est equipado con dos micromotores de alta potencia
de marca Pololu. En la seccin de Anexos 8.1 se puede encontrar mayor detalle
de las especificaciones de estos micromotores as como los planos de los
soportes utilizados para fijarlos a la estructura del robot y los adaptadores para
asegurarlos a las ruedas utilizadas.
Micro-controlador ATmega2560
Voltaje de operacin 5V
Voltaje de entrada 7-12V
Voltaje de entrada mximo 6-20V
Pines digitales I/O 54 (15 de salida PWM)
Pines analgicos 16
Corriente DC por pin 40mA
Corriente del pin 3.3v 50mA
Memoria Flash 256KB
Pgina12
Maestra Ingeniera Electrnica
SRAM 8KB
EEPROM 4KB
Frecuencia de reloj 16MHz
Chip USB Host MAX3421E
Largo 101.52mm
Ancho 53.3mm
Peso
Tabla 2: Especificaciones tarjeta Arduino Mega ADK R3 [2]
Pgina13
Trabajo de Grado - Profundizacin
Pgina14
Maestra Ingeniera Electrnica
Sistema Android
Comunicaciones
GPRS WiFi- Direct WiFi Bluetooth USB
Gestor conexiones
Codificador/decodificador Protocolo
Monitor Cooperativo
Mapa de variables Mapa de agentes
Aplicacin
Figura 10: Arquitectura general de la biblioteca para Android
Pgina15
Trabajo de Grado - Profundizacin
3.5.1 Infraestructura
Cmara
Altura: 234cm
Porttil
rea de pruebas
Pgina16
Maestra Ingeniera Electrnica
Inicio
Construir estructura
Virtual
Pgina17
Trabajo de Grado - Profundizacin
4 Desarrollos
Pgina18
Maestra Ingeniera Electrnica
La tarjeta Arduino ADK se encarga de recibir los comandos que llegan desde el
telfono Android a travs del puerto USB. Una vez los comandos son
interpretados, la aplicacin en Arduino modifica, en caso de ser necesario, una o
varias de las cuatro seales de PWM que controlan la velocidad y el sentido de las
dos ruedas del robot. Finalmente, la tarjeta L298N se encarga de entregar la
potencia necesaria requerida por los micromotores.
Pgina19
Trabajo de Grado - Profundizacin
Pgina20
Maestra Ingeniera Electrnica
Pgina21
Trabajo de Grado - Profundizacin
Ejemplo:
1. Udp BroadCast
Cliente 2. Udp Ack
Servidor
3. Solicitud de conexin
4. Canal TCP/IP
Pgina22
Maestra Ingeniera Electrnica
3. Cuando el cliente recibe confirmacin del mensaje UDP, este inicia una
conexin TCP con los datos del servidor que recin ha recibido.
4. Finalmente, el servidor acepta la conexin TCP/IP y guarda los datos de
conexin para enviar mensajes asincrnicos al cliente.
1. Se crea la variable
2. Se adiciona en el mapa de variables del mdulo Monitor con la funcin
addVariable(Variable).
3. Se modifica la variable a lo largo de la aplicacin.
4. Se sincroniza la variable, es decir, se enva la informacin solo de las
variables que se han modificado. La funcin syncVar() enva un listado que
incluye solo las variables modificadas al mdulo Comunicaciones el cual a
su vez los codifica segn el protocolo diseado.
Agent: Esta es una clase abstracta que implementa las funciones bsicas de
un agente como enviar mensajes a otros agentes y recibir mensajes de otros
agentes. Para crear un agente se debe crear una clase heredada de la clase
Agent y se debe sobre-escribir el mtodo newAgentMsg() para recibir
mensajes de otros Agentes.
Pgina23
Trabajo de Grado - Profundizacin
Pgina24
Maestra Ingeniera Electrnica
Servidor Android
Comunicaciones
Cooperativo
Agente
Pgina25
Trabajo de Grado - Profundizacin
1. Nueva conexin
Cuando un nuevo agente requiere integrarse al enjambre de robots, este inicia una
conexin TCP/IP a travs del mdulo Comunicacin. El mdulo cooperativo
entonces, enva una respuesta incluyendo el ID del nuevo agente. Entonces, el
nuevo agente enva un mensaje con su alias, una cadena con la cual el agente
podr ser identificado. Esta cadena alias se utiliza cuando el robot tiene una
identificacin propia dada por s mismo, en el caso de la aplicacin de verificacin,
cada robot se identifica por un color el cual se asigna previamente. Finalmente, el
mdulo cooperativo enva un mensaje al resto del enjambre informando el registro
de un nuevo agente.
Pgina26
Maestra Ingeniera Electrnica
PC Robot
Vx, Vy, V
GUI Calculo Dispositivo
Vl y Vr Android
Vl, Vr (WiFi)
Visin
Arduino ADK
Biblioteca
Android
Imagen
Cmara Externa
El bloque de visin utiliza las imgenes capturadas desde una cmara externa y las
procesa para determinar la posicin y orientacin del robot. Desde la interfaz de
usuario se generan los estmulos de velocidad en X, Y y sobre la estructura virtual.
En el siguiente bloque se determina la posicin del vrtice correspondiente de la
estructura virtual y se calcula la velocidad requerida, en cada rueda, para que el robot
alcance este vrtice antes de la captura de la siguiente imagen. La aplicacin de
control, desarrollada en JAVA como una aplicacin de escritorio, utiliza la biblioteca
desarrollada para Android con el propsito de incorporarse como un agente adicional,
de tipo Controlador, el cual podr enviar y recibir mensajes de otros agentes. Dentro
del dispositivo Android, sobre el agente tipo Carro, se dispara el evento de recepcin
de mensajes y se decodifica la informacin de velocidad para cada una de las ruedas.
Finalmente, la tarjeta Arduino recibe la informacin de velocidad de cada rueda y
cambia los estados PWM y direccin sobre los puertos correspondientes.
Pgina27
Trabajo de Grado - Profundizacin
Ajuste manual
niveles HSV
Pgina28
Maestra Ingeniera Electrnica
.
.
Ahora la estructura virtual se desplaza hasta coincidir con el centro de masa del
enjambre de robots. Seguidamente, se utiliza un algoritmo de optimizacin para
girar la estructura virtual sobre su centro de masa hasta encontrar un mnimo error
de posicin:
min [4]
vr
W
y
vl
r
IC
x
R
: Vector entre ( , y( ,
: ngulo entre el robot y
: ngulo del robot respecto al sistema de coordenadas W
Pgina30
Maestra Ingeniera Electrnica
; | | ; | | ;
; 1 ;
Entonces,
1
;
1 ;
1 2 ;
2 ;
2
1
2
; asin ;
1
| |
; ;
Pgina31
Trabajo de Grado - Profundizacin
Valores Interfaz de
HSV usuario GUI
USB
Hilo de Control
Mdulo
Cooperativo
Car1
Mdulo
Comunicaciones Car3
WiFi
Car2
Figura 22: Diagrama general de bloques de la aplicacin Control de formacin
Pgina32
Maestra Ingeniera Electrnica
La interfaz de usuario lee los valores HSV desde un archivo, en este caso son 24
valores, 6 por cada uno de los 3 robots y 6 para la identificacin de los crculos de
direccin, y los enva al hilo de Control. Adems, este componente permite que el
usuario de esta aplicacin realice las siguientes tareas:
Pgina33
Trabajo de Grado - Profundizacin
Pgina34
Maestra Ingeniera Electrnica
Comunicacin
2. New MsgCar
AgentCar Cooperativo
Mdulo
3. syncVar
Mdulo
Monitor
Pgina35
Trabajo de Grado - Profundizacin
5 Protocolo de pruebas
Teniendo en cuenta que fueron tres los robots construidos, las estructuras tambin
tienen un lmite de tres puntos. Especficamente, se escogieron tres estructuras
diferentes para las pruebas: un punto, una lnea de 200 pixeles de ancho y un
tringulo equiltero de 350 pixeles de lado. Por otro lado, la estructura puede
recibir tres estmulos diferentes: velocidad paralela al eje x, velocidad paralela al
eje y y velocidad de rotacin sobre el centro de masa de la estructura.
5.1.1 Medicin 1
Estructura: un punto.
Duracin: 70627ms.
Mensajes enviados: 419:
Mensajes sin ack: 3
Pgina36
Maestra Ingeniera Electrnica
Resultados:
Promedio tiempo de cmputo: 79ms.
Desviacin estndar tiempo de cmputo: 5.7910ms.
Tiempo de cmputo mximo: 118ms.
Promedio tiempo de comunicacin: 177ms.
Desviacin estndar tiempo de comunicacin: 33.5479ms.
Tiempo de comunicacin mximo: 628ms.
5.1.2 Medicin 2
Estructura: lnea recta de 200px.
Duracin: 66966 ms.
Mensajes enviados: 639.
Mensajes sin ack: 10.
Pgina37
Trabajo de Grado - Profundizacin
Resultados:
Promedio tiempo de cmputo: 100ms.
Desviacin estndar tiempo de cmputo: 6.4777ms.
Tiempo de cmputo mximo: 139ms.
Promedio tiempo de comunicacin: 216ms.
Desviacin estndar tiempo de comunicacin: 93.8881ms.
Tiempo de comunicacin mximo: 975ms.
5.1.3 Medicin 3
Estructura: tringulo equiltero 350px de lado.
Duracin: 60291 ms.
Mensajes enviados: 708.
Mensajes sin ack: 12.
Resultados:
Promedio tiempo de cmputo: 123ms.
Desviacin estndar tiempo de cmputo: 6.4762ms.
Tiempo de cmputo mximo: 180ms.
Promedio tiempo de comunicacin: 250.5ms.
Desviacin estndar tiempo de comunicacin: 124.2318ms.
Tiempo de comunicacin mximo: 1185ms.
Pgina38
Maestra Ingeniera Electrnica
Figura 31: Regresin lineal de los tiempos promedio por nmero de robots
Pgina39
Trabajo de Grado - Profundizacin
5.3 Prueba1:
Estructura: un punto.
Estmulos: Velocidad en x, velocidad en y y velocidad simultnea en x,y.
Pgina40
Maestra Ingeniera Electrnica
5.4 Prueba2
Estructura: lnea recta de 200 px.
Estmulos: Velocidad en x, velocidad en y, velocidad simultnea en x,y y
velocidad de rotacin sobre su centro de masa.
Resultados:
Error promedio = 1.6481 cm;
Desviacin estndar = 2.2712 cm;
Error Mximo = 16.2878 cm.
(Ver video Prueba2Formacion.avi).
Pgina41
Trabajo de Grado - Profundizacin
Figura 34: Grafica distancia promedio entre los robots y la estructura lnea.
5.5 Prueba3
Estructura: tringulo equiltero 350px de lado.
Estmulos: Velocidad en x, velocidad en y, velocidad simultnea en x,y y
velocidad de rotacin sobre su centro de masa.
Resultados:
Error promedio = 2.2309 cm;
Desviacin estndar = 1.3414 cm;
Error Mximo = 8.1464 cm.
(Ver video Prueba3Formacion.avi).
Pgina42
Maestra Ingeniera Electrnica
Figura 36: Grafica distancia promedio entre los robots y la estructura triangulo.
Pgina43
Trabajo de Grado - Profundizacin
Pgina44
Maestra Ingeniera Electrnica
7 Bibliografa
Pgina45
Trabajo de Grado - Profundizacin
8 Anexos
Pgina46
Maestra Ingeniera Electrnica
8.1.2 Micromotor:
Tipo: Micromotor (HP) Alta potencia
Tamao: 24 x 10 x 12 mm
Peso: 0.34 oz
Relacin de reduccin: 298:1
Velocidad sin carga: 100 rpm
Corriente sin carga: 70 mA
Torque Stall: 90 oz-in (6.4 kg-cm)
Corriente Stall: 1600 mA
Figura 41: Soportes utilizados para fijar los micromotores a la estructura del robot
Pgina47
Trabajo de Grado - Profundizacin
Figura 42: Adaptador para eje de motor de 3mm con rueda estndar Hex de 12mm. Unidades en mm
[pulgadas].
Figura 43: Ensamble micromotor, adaptador y rueda. Las ruedas son de 120mm de dimetro y 55mm
de ancho. Usan adaptador estndar Hexagonal de 12mm.
Pgina48
Maestra Ingeniera Electrnica
Pgina49
Trabajo de Grado - Profundizacin
27 mm
35,00 mm
115 mm
180 mm
260,00 mm
12 mm
160 mm
115 mm
18 mm
4,25 m
130 mm
40 mm
Figura 45: Placa de acrlico de 3mm de espesor. Soporta los componentes electrnicos, el sistema de
alimentacin y los motores.
Pgina50
Maestra Ingeniera Electrnica
160 mm
260 mm
115 mm
130 mm
Figura 46: Placa de acrlico de 3mm de espesor. Soporta el telfono y los grficos utilizados para la
localizacin del robot.
Pgina51
Trabajo de Grado - Profundizacin
160 mm
m
m
30
70 mm
180 mm
Figura 47: Plantilla para los grficos utilizados para la localizacin de los robots
Pgina52
Maestra Ingeniera Electrnica
Pgina53
Trabajo de Grado - Profundizacin
Pgina54
Maestra Ingeniera Electrnica
Pgina55
Trabajo de Grado - Profundizacin
8.3.1 Diseos
En la carpeta D:\Corel se encuentran los diseos de los robots de locomocin
diferencial.
8.3.2 Videos
En la carpeta D:\Videos se encuentran los videos tomados durante las pruebas
finales de la aplicacin control de formacin.
Archivos:
CalibPwm.avi: Se muestra como se calibraron las ganancias de los motores
de cada robot para que cumplieran con las trayectorias calculadas para
mover el robot de un punto a otro.
Prueba1Formacion.avi: Control de formacin estructura virtual de un punto.
Prueba2Formacion.avi: Control de formacin estructura virtual de una lnea
recta de longitud 200px.
Prueba3Formacion: Control de formacin estructura virtual de un tringulo
equiltero de lado 350px.
8.3.3.1 Arduino
Carpeta: D:\Software\Arduino\Formacion
Archivos:
Formacion.ino: aplicacin control de formacin para Arduino Mega ADK.
Monitor.cpp: Es una biblioteca en C++ para darle compatibilidad a la
aplicacin de control de formacin con los mdulos de Monitor y
Comunicacin de Android.
Monitor.h: Definiciones para Monitor.cpp.
8.3.3.2 Android
En D:\ Software\Android\App4 se encuentra el proyecto completo para Android
Studio. Para ejecutarlo se debe importar en Android Studio como un proyecto
gradle.
Pgina56
Maestra Ingeniera Electrnica
Archivos:
Comunicacion.java:
ServerEvent.java:
socketClient.java:
socketServer.java:
UdpServerDiscovery.java:
ClientEvent.java:
Channel.java:
BJSonParser.java:
BJsonObj.java:
Archivos:
Agent.java
AgentBasicSt.java
AgentMsg.java
CooperativeEvent.java
CooperativeSet.java
Archivos:
AgentCar.java:
AgentMsgCar.java:
control.java:
Pgina57
Trabajo de Grado - Profundizacin
Archivos:
Control.java:
ControlFormacion.java:
ControlLoop.java:
Fibonacci.java:
FunctionInterfaz.java:
Trayectory.java:
Archivos:
CarPoint.java:
CircleParam.java:
Hsv.java:
VideoLoop.java:
Pgina58