1. Facultad de Ingeniería
Escuela de Ingeniería Eléctrica y Electrónica
Universidad
del Valle Percepción y Sistemas Inteligentes - PSI
NX-BOT – Plataforma para experimentación
en Robótica Cooperativa
Alejandro Michael Pustowka Reyes
Jonathan Alejandro Hernandez
Eduardo F. Caicedo
Eval Bladimir Bacca
contacto: alejandro.pustowka@correounivalle.edu.co
www.psiunivalle.com
Enero 2012
2. Resumen
NX-BOT es una plataforma robótica construida para realizar prácticas e
investigaciones en el área de Robótica cooperativa. NX-BOT es un robot que cuenta
con tracción diferencial, conformada por dos servomotores y una rueda de apoyo, y
dispone además de sensores infrarrojos y de ultrasonido para la detección de
obstáculos, una pinza para recolección de objetos, un buzzer para generación de
melodías monofónicas, y un sistema Wifi para la comunicación entre robots, así como
para actividades de teleoperación y control remoto. El robot cuenta además con un
sistema operativo Linux y una versión del framework Player/Stage versiones 2.0.5 y
3.0.2, lo cual lo convierte en una plataforma versátil para la experimentación en
robótica móvil.
NX-BOT es un desarrollo que hizo parte de la tesis de pregrado “Mantenimiento y
Cambio Automático de Formaciones en un Grupo de Robots Móviles Cooperativos
Homogéneos”, desarrollado por los ingenieros Alejandro M. Pustowka y Jonathan A.
Hernandez, en conjunto con los directores Eduardo F. Caicedo Ph.D. y Eval B. Bacca
M.Sc. Además de este trabajo han sido desarrollados otros proyectos de grado que
han utilizado la plataforma.
Áreas de aplicación: Robótica móvil, Control Inteligente, Inteligencia
computacional.
2
3. Índice
1. Introducción.............................................................................................................5
2. Datos Técnicos..........................................................................................................6
3. Descripción de la plataforma..................................................................................7
4. Módulos Electrónicos de NX-BOT.........................................................................8
4.1. Sistema de bajo nivel.........................................................................................8
4.1.1. Sensores ...................................................................................................10
4.1.2. Actuadores................................................................................................12
4.1.3. Puertos de expansión................................................................................12
4.1.4. Batería, carga y encendido.......................................................................13
4.2. Sistema de alto nivel........................................................................................13
5. Estructura mecánica..............................................................................................15
5.1. Posición de módulos electrónicos....................................................................15
5.2. Apariencia final................................................................................................16
6. Software..................................................................................................................18
6.1. NXOS...............................................................................................................18
6.2. OpenWRT/Player.............................................................................................19
6.2.1. Player/Stage..............................................................................................20
6.2.2. Simuladores de Player/Stage....................................................................22
6.2.3. Herramientas de Player/Stage..................................................................23
6.3. NXAPI.............................................................................................................24
6.3.1. Paquetes de la librería NXAPI.................................................................25
7. Modo de operación................................................................................................27
7.1. Encendido y estado de batería..........................................................................27
7.2. Configurando la red.........................................................................................27
7.2.1. Configuración Wifi...................................................................................28
7.3. Accediendo a OpenWRT por consola..............................................................29
7.4. Probando Player/Stage.....................................................................................30
7.4.1. PlayerViewer............................................................................................30
7.4.2. Playerjoy...................................................................................................31
7.5. Utilizando Javaclient para programar NXBOT...............................................31
7.6. Utilizando NXAPI para programar NXBOT...................................................32
8. Enfoque pedagógico...............................................................................................34
8.1. La robótica en la educación.............................................................................34
8.1.1. Laboratorios remotos................................................................................34
8.2. NXBOT como plataforma educativa...............................................................34
8.2.1. Implementación de un laboratorio remoto con NXBOT..........................34
8.3. NXBOT como plataforma de investigación.....................................................34
3
5. 1. Introducción
El robot NXBOT se concibió como una plataforma orientada a la realización de
prácticas de robótica, en especial en el área de cooperación. En la etapa de diseño se
plantearon como requerimientos que la plataforma contara con sistemas sensoriales
sencillos, así como un sistema de locomoción simple, pero un canal de comunicación
robusto, estándar, confiable y de amplio rango, para facilitar la interacción del usuario
con la plataforma. NXBOT cuenta por lo tanto con un canal de comunicación Wi-fi,
lo cual permite su integración con la red del área de robótica, y facilita también la
integración de la plataforma en laboratorios remotos. Actualmente NXBOT cuenta
con sensores exteroceptivos como infrarrojos, ultrasonido, cámara web, así como
propioceptivos, como el estado de la batería y odometría como sistema de
localización. Los actuadores con los que cuenta están definidos por su sistema de
locomoción, el cual es diferencial (2 motores), y una pinza en la parte frontal para la
manipulación de objetos. El sistema puede ser además expandido usando alguna de
sus diferentes interfaces (puertos serie, USB 2.0, GPIO, etc).
NXBOT es compatible además con el entorno de desarrollo en robótica Player/Stage,
el cual es un servidor de interfaces robóticas e que comprende simuladores en 2D y
3D, el cual es ampliamente utilizado en el área de robótica móvil a nivel mundial,
además de ser de fuente abierta (open source). Se han desarrollado el driver y las
respectivas librerías de control para permitir realizar prácticas tanto en la plataforma
de simulación Stage como en el robot. Dadas estas características, NXBOT se
presenta como una herramienta versátil para actividades de investigación en robótica
móvil, específicamente en labores cooperativas.
5
6. 2. Datos Técnicos
Dimensiones (w x d x h) 11x11x15,5 cm
Hardware
Sistema de alto nivel Router (WRTSL54GS)
MIPSEL @ 266 MHz (32 bits)
Sistema de bajo nivel Microcontrolador 8 bits AVR @ 16 MHz
Batería 6V@4Ah
Carcasa Acrílico 2 mm y 3 mm
Sensores
Infrarrojos Seis (6) sensores infrarrojos.
Máxima distancia de detección: 60 cm.
Contacto Cuatro (4) sensores de contacto.
Ultrasonido Seis (6) sensores ultrasonido.
Estado interno Sensor de estado de la batería.
Video Soporte para dos (2) cámaras web por USB.
Actuadores
Locomoción Dos (2) motores en configuración diferencial
con encoders.
Ruedas de radio 6 cm.
Velocidad máxima: 15 cm/s. (30 cm/s en
futuros cambios)
Resolución de encoders: 360 puls/rev.
Sonido Buzzer piezoeléctrico.
Pinza Pinza accionada por servomotor. Amplitud
máxima 4 cm.
Expansión Puertos:
• USB (1)
• Ethernet (4)
• SPI (1)
• Serial (2)
• Memoria Externa (hasta 64KB)
• Interrupciones externas (8)
• Canales ADC (7).
Sistema Operativo Linux OpenWRT Backfire 10.03
Software
Control Player/Stage 2.0.5 – 3.0.2
Streaming Video Mjpg-streamer
6
7. 3. Descripción de la plataforma
NXBOT es una plataforma que cuenta con diversos sensores exteroceptivos como
infrarrojos, ultrasonido, cámara web. Los actuadores de la plataforma se componen
de los motores del sistema de locomoción, cuya tracción es diferencial (2 motores),
así como una pinza en la parte frontal para la manipulación de objetos. El sistema
cuenta además con diversos puertos de expansión (puertos serie, USB 2.0, Ethernet,
GPIO, etc), como se puede ver en las figuras a continuación.
Conectividad Enlace WiFi
USB
(Webcam)
S. Ultrasonido
Buzzer
Sensores IR
Pinza Motores con
Encoders
Sistemas sensoriales y de actuación de NXBOT
Ethernet
Puerto USB
LED Encendido
LED Estado Batería Puerto
Expansion
Puerto
serial
Programación
Puerto
de carga Encendido
Conectores del NXBOT en la zona trasera
7
8. 4. Módulos Electrónicos de NX-BOT
NXBOT comprende dos sistemas de procesamiento hardware para cumplir con los
requerimientos planteados en su diseño. El primer sistema, denominado Sistema de
Bajo Nivel, se encarga de las labores de muestreo de sensores y ejecuta los lazos de
control de los actuadores. El segundo sistema, denominado Sistema de Alto Nivel,
está encargado de la comunicación inalámbrica vía Wifi con el usuario, la ejecución
del servidor de interfaces Player/Stage y demás programas que el usuario desee
ejecutar en el Sistema Operativo del robot (Servidores de Streaming, bases de datos,
programas de control, etc). La figura ilustra el diagrama de bloques del sistema.
Figura 1: Diagrama general de sistemas de NXBOT
Los dos sistemas se comunican a través de un enlace serial configurado a 115.200
baudios, 8 bits de datos, sin paridad, 1 bit de stop.
4.1. Sistema de bajo nivel
El sistema de bajo nivel comprende una plataforma microcontrolada, implementado
con una arquitectura de 8 bits Atmel AVR, que se encarga del control de bajo nivel de
los actuadores y sensores del robot. Las características más relevantes de este sistema
se muestran a continuación:
Microcontrolador
Atmega1281: Arquitectura AVR@16MHz
8 KB RAM, 128 KB FLASH.
Comunicaciones
Dos UART disponibles: 1 para comunicación con
sistema de Alto Nivel, otra disponible para el
usuario.
Una interfaz SPI.
Conectores
Seis (6) conectores para sensores infrarrojos.
Ocho (8) conectores para sensores de contacto.
Interfaz para motores, incluyen señales PWM, de
8
9. dirección, y de lectura de encoders.
Buzzer piezoeléctrico.
Otros
Expansión Siete (7) entradas analógicas disponibles.
Interfaz de expansión de memoria, hasta 64KB.
Tres (3) puertos de 8 bits de E/S.
Indicadores Indicador LED de encendido y de estado de
batería.
El hardware del sistema se muestra en la siguiente figura
Figura 2: Descripción de hardware del sistema de bajo nivel
Descripción
1. Conector de expansión 2. LED de encendido
3. LED de estado de la batería 4. Pulsador de RESET
5. Alimentación 6. Interfaz SPI
7. Conectores para sensores de contacto 8. Conectores para sensores IR
9. Conector para tarjeta motor 10. Conector para Sistema Alto
nivel
9
10. El sistema armado se observa a continuación en la figura
Figura 3: Sistema de bajo nivel montado
4.1.1. Sensores
Infrarrojos
NXBOT cuenta con un anillo de seis (6) sensores infrarrojos (IR) distribuidos en los
180° de la zona frontal del robot. Estos sensores se encuentran ubicados como se
muestra en la figura. Estos sensores se usan para detectar obstáculos en las
orientaciones donde se encuentran ubicados. Su rango de detección puede ser
ajustado usando el potenciómetro con el que cuenta cada módulo. Sin embargo este
tipo de sensores no permiten medir distancia a los obstáculos detectados. La figura
ilustra el sensor IR construido.
Sensor Infrarrojo Emisor-Detector Sensor Infrarrojo Emisor-Detector
Ultrasonido
NXBOT también cuenta con sensores ultrasonido que, a diferencia de los sensores
infrarojos, si permiten estimar distancia a los obstáculos, con resolución de 1 cm.
Estos sensores hacen parte de un módulo externo al robot, que debe ser conectado a
través del puerto de expansión serial. La figura ilustra el sensor ultrasonido utilizado
(SRF02) y el módulo de expansión que se ubica sobre el robot.
10
11. Sensor Ultrasonido SRF02 Arreglo de seis sensores SRF02
Puerto de
conexión
NXBOT con módulo de ultrasonido Puerto serial donde se conecta el módulo
Cámara web
NXBOT soporta diferentes cámaras web conectadas a través de su puerto USB 2.0.
Las cámaras que mejores resultados han presentado son las que incluyen un
codificador JPEG, de tal manera que la carga de transmisión de la imagen por USB se
ve disminuida, y se pueden alcanzar tasas de hasta 30 cuadros por segundo, o incluso
la conexión de dos cámaras simultáneas, conformando un sistema de estereovisión,
alcanzando tasas de hasta 15 cuadros por segundo. Las cámaras Logitech son las que
generalmente incluyen esta característica. En la siguiente figura se puede observar
dos modelos evaluados y validados con NXBOT.
Cámara Logitech C270 Cámara Logitech Pro 9000
11
12. Sensor de estado de bateria
NXBOT cuenta con un sensor para medir el estado de la batería, de tal manera que
alerte al usuario cuando ésta se encuentra descargada. Un LED dedicado para
indicación del estado de la batería varía su color para mostrar la carga, variando entre
colores Verde – Naranja – Rojo. Asimismo, el buzzer emite una corta melodía cuando
es necesario cargar el robot.
4.1.2. Actuadores
Motores con encoders
NXBOT cuenta con dos motores distribuidos en una configuración diferencial. Los
motores son servos modificados, con un torque suficiente para el peso del robot, y se
encuentran equipados con encoders, que generan 360 pulsos por revolución. Esta
configuración facilita aplicar lazos de control de velocidad y de posición.
Motor Futaba S3004 Llanta con recubrimiento de caucho
Encoders
NXBOT cuenta además con un Buzzer para generación de diferentes melodias. Es
usado para alertar sobre eventos de importancia, como la conexión/desconexión de un
cliente al robot, así como la alerta por batería baja.
4.1.3. Puertos de expansión
NXBOT cuenta con un puerto de expansión de memoria externa, que permite agregar
múltiples dispositivos al sistema. Asimismo, pone a disposición líneas ADC para
lectura de señales analógicas y un puerto USB, para conexión de dispositivos que
usen esta interfaz, como cámaras web, memorias de almacenamiento externo, tarjetas
de sonido, etc. El puerto de expansión cuenta con entradas ADC (8), interfaz con
memoria externa (<64KB) o líneas de propósito general, GPIO (16).
12
13. 4.1.4. Batería, carga y encendido
NXBOT cuenta con una batería seca, de 6V@4Ah. La autonomía aproximada de la
plataforma es de 3 a 4 horas, aunque puede ser más dependiendo de la cantidad de
dispositivos activos en el robot. El sistema es recargable, y su puerto de carga se
encuentra localizado en la zona trasera, en donde también se encuentra el botón de
encendido, como se ilustró en la figura. La carga de la batería toma un tiempo de
aproximadamente ocho horas, se recomienda utilizar un cargador de baterías con el
conector mostrado en la siguiente figura.
Batería de 6V@4Ah Puerto del Cargador
4.2. Sistema de alto nivel
El sistema de alto nivel de NXBOT comprende un sistema embebido con mayor
capacidad de procesamiento, y es utilizado como un computador embebido que
ejecuta un sistema operativo Linux para facilitar la gestión y configuración del
sistema, además de encargarse de la comunicación inalámbrica y acceso a redes a
través de Wifi. El sistema ambién ejecuta la aplicación servidor que controla el
sistema de bajo nivel y permite la conexión/desconexión de usuarios. Las
características más relevantes del sistema se describen a continuación:
Microprocesador
Broadcom: Arquitectura MIPSEL@266MHz
32 MB RAM, 8 MB FLASH.
Comunicaciones
Interfaz de comunicación Wifi serie g.
Dos UART disponibles: 1 para comunicación con
sistema de Bajo Nivel, otra disponible para el
usuario.
13
14. (1) puerto USB Device 2.0
(4) puertos Ethernet
A continuación se muestra el router utilizado, que corresponde a la referencia
WRTSL54GS de la marca Linksys.
Router WRTSL54GS de Linksys Hardware del router WRTSL54GS
14
15. 5. Estructura mecánica
NXBOT cuenta con una estructura mecánica de material acrílico de 2 y 3 mm. El
diseño consideró una base para ubicar la batería y los motores, así como tres pisos
para la ubicación de los módulos electrónicos, sensores y demás actuadores. Las
siguientes figuras ilustran el despiece de esta estructura.
5.1. Posición de módulos electrónicos
En las siguientes imágenes se ilustra la ubicación de los diferentes módulos hardware
que componen NXBOT. Con una vista superior se indican las posiciones de los
componentes en la base y en cada uno de los pisos de la plataforma. Como se puede
observar en las siguientes imágenes, la base comprende la batería, los dos motores y
la rueda loca de apoyo para el robot. El primer piso comprende la tarjeta de
comunicación y programación del robot, así como la tarjeta de control de motores. El
segundo piso comprende la ubicación del módulo electrónico de bajo nivel, junto con
los sensores infrarrojos, mientras que el tercer piso soporta únicamente el módulo
electrónico de alto nivel.
Posición de motores, batería y rueda loca Piso 1: tarjeta de comunicación y motores
15
16. Piso 2: Sistema de bajo nivel y sensores IR Piso 3: sistema de alto nivel
Las siguientes imágenes muestran la ubicación de los componentes internos de
NXBOT, sin considerar el exterior. Se observa que todos los puertos de expansión
quedan localizados en la zona trasera del robot.
Estructura interna lateral Estructura interna frontal
5.2. Apariencia final
La carcasa del robot NXBOT fue realizada con acrílico negro de 2 mm de espesor. La
carcasa soporta los pisos que a su vez mantienen los módulos electrónicos. La parte
superior del robot se ha dejado plana para facilitar la ubicación de otros módulos de
expansión.
16
17. Carcasa exterior, vista lateral Carcasa exterior, vista frontal
Carcasa exterior, vista lateral Carcasa exterior, vista trasera
17
18. 6. Software
El software de NXBOT se encuentra dividido en tres partes: NXOS (Firmware del
sistema microcontrolado), OpenWRT/Player (Sistema Operativo y Aplicación que se
ejecuta en el sistema embebido) y NXAPI (API de control de alto nivel escrita en
Java y que puede ser ejecutada en un computador remoto). El código es mantenido a
través de un servidor SVN público, que puede ser visitado en el siguiente enlace:
http://code.google.com/p/nxbot
La figura a continuación ilustra la integración de estos tres componentes software.
Figura 4: Componentes software del robot NXBOT
A continuación se describe cada uno de los componentes software mencionados.
6.1. NXOS
NXOS es el sistema operativo para el sistema de bajo nivel de NXBOT. Se encarga
de la gestión de todos los dispositivos conectados al robot, como sensores y
actuadores. NXOS realiza la actualización de lecturas de los sensores de manera
determinística, ya que implementa un RTOS (Sistema Operativo de Tiempo Real),
que garantiza el cumplimiento estricto de las tasas de muestreo configuradas. NXOS
también implementa los lazos de control de los actuadores del sistema. Son
básicamente tres tareas que gestiona NXOS: comunicación con el sistema de alto
18
19. nivel, actualización de sensores (infrarrojos, bumpers y batería) y control de
actuadores (Motores, buzzer, indicadores LED). NXOS usa FreeRTOS
(http://www.freertos.org) en su implementación. La figura ilustra la arquitectura
general de NXOS.
Figura 5: Diagrama de Bloques de NXOS
6.2. OpenWRT/Player
El sistema de alto nivel incluye la distribución Linux OpenWRT, la cual es una
distribución orientada a sistemas embebidos de bajos recursos computacionales.
OpenWRT se encarga de la gestión de los sistemas de comunicación Ethernet y Wifi,
así como los puertos seriales del hardware del router WRTSL54GS. Actualmente, las
plataformas cuentan con la versión más reciente a la fecha de OpenWRT, denominada
BackFire 10.03. Al contar con Linux en la plataforma, es posible instalar un
sinnúmero de aplicaciones ya portadas a esta arquitectura, como servidores de
Streaming de Video (mjpg-streamer), drivers para diferentes dispositivos USB como
memorias USB, webcams, tarjetas de sonido, etc. entre otras aplicaciones.
19
20. 6.2.1. Player/Stage
El entorno Player/Stage ha sido también portado a la arquitectura del Sistema de Alto
Nivel. Player es un servidor de interfaces robóticas que permite el control de todo el
hardware con el que cuenta NXBOT. La ventaja de usar el entorno Player/Stage es
que se puede realizar una etapa previa de simulación para cada uno de los
experimentos. El software escrito para estos experimentos funciona sin problemas
tanto para el simulador como para la plataforma real, lo que agiliza la validación de
resultados.
La comunicación con Player se realiza mediante sockets TCP/IP. El Hilo del Servidor
se encarga de recibir comandos desde los programas cliente, y los almacena en
Buffers de Comandos para ser enviados a los Hilos de Control de cada dispositivo.
Estos a su vez, leen estos Buffers de Comandos y los aplican al dispositivo asignado.
Si el dispositivo es de lectura, el Hilo de Control del Dispositivo se encarga de tomar
los datos del dispositivo y los almacena en un Buffer de Datos. Este buffer a su vez es
leído por el hilo del servidor y son enviados a los programas cliente que lo requieran.
La figura ilustra este proceso.
Figura 6: Estructura básica del servidor Player
Para interactuar con el servidor Player, se debe tener en cuenta tres conceptos básicos:
• Interfaz: Entidad abstracta que especifica una clase de periféricos o entidades
abstractas, como algoritmos. Especifica qué datos provee el periférico, los
cuales se definen en los atributos de la interfaz, y asimismo define los
métodos disponibles que tiene.
20
21. • Driver: Pieza de código que se encarga de realizar la comunicación con el
periférico (sensor o actuador), y encapsula su información en los atributos de
una o más interfaces.
• Dispositivo: Se define como un driver unido a una interfaz, y es el elemento
básico de control entre el Player y el Programa Cliente.
Por lo tanto, la versatilidad de Player radica en la facilidad de abstraer diferentes
periféricos a través de interfaces. Esto permite que un programa software escrito para
un robot específico, pueda ser utilizado en otro sin mayor cambio, ya que el control se
realiza a través de interfaces. En la figura a continuación, se observa más claramente
los términos de interfaz y driver. Se observa que para cada robot, NXBOT y
Pioneer3dx, se ha implementado un driver, el cual provee tres interfaces: Camera,
Sonar y Position2d. Para los programas cliente, no importa que robot estén
controlando, éstos ven únicamente las interfaces, lo que permite una abstracción de
hardware y por lo tanto facilita la portabilidad de código.
Figura 7: Ejemplo de interfaces y drivers de robots NXBOT y Pioneer
21
22. El servidor Player compilado para NXBOT es la versión más reciente a la fecha
(Player 3.0.2) e incluye las siguientes Interfaces:
• Position2d: Interfaz Para el control directo de motores, tanto de posición
(odometría) como de velocidad.
• IR: Interfaz para lectura de los sensores infrarrojos. Depreciada, será
próximamente actualizada a Ranger.
• Bumper: Interfaz para lectura de los sensores de contacto.
• Sonar: Interfaz para lectura de los sensores ultrasonido. Depreciada, será
próximamente actualizada a Ranger.
• Power: Interfaz para lectura del estado de la batería.
• DIO: Interfaz para control de las líneas digitales disponibles en el puerto de
expansión de NXBOT.
• AIO: Interfaz para lectura de las líneas analógicas disponibles en el puerto de
expansión de NXBOT.
• Gripper: Interfaz para controlar la pinza del robot NXBOT.
• Camera: Interfaz disponible para acceder a las imágenes de la cámara
onboard del robot.
6.2.2. Simuladores de Player/Stage
El proyecto Player/Stage cuenta con dos simuladores en 2D y 3D. El simulador Stage
provee simulación en 2.5D. Modela únicamente la cinemática de las plataformas
simuladas, más no su dinámica. Se han escrito los respectivos archivos que permiten
simular la plataforma NXBOT en Stage, como lo muestra la figura
Figura 8: NXBOT simulado en Stage
22
23. Gazebo es el simulador 3D del proyecto. Éste aún no ha sido trabajado, ni se han
escrito los modelos para simular NXBOT en él.
6.2.3. Herramientas de Player/Stage
Player/Stage cuenta con varias herramientas para evaluar el entorno de desarrollo e
interactuar tanto con los robots reales como los simulados.
PlayerViewer
PlayerViewer es un simple cliente que permite observar los datos devueltos por las
interfaces, de una manera gráfica fácilmente entendible. Asimismo, provee una
interfaz sencilla para el control de algunas interfaces de envío de comandos.
Figura 9: Interfaz de PlayerViewer
Playerjoy
Playerjoy es una sencilla interfaz de línea de comandos, que permite controlar
interfaces de tipo Position2D, usando ya sea un Joystick previamente reconocido por
el sistema operativo, o usando el teclado para enviar comandos de velocidad al robot.
Playercam
Playercam es una interfaz gráfica que permite la conexión a interfaces Camera y
Blobfinder. Permite observar las imágenes de cámaras y ver que regiones de color ha
detectado la interfaz Blobfinder. La figura ilustra la interfaz de Playercam.
23
24. Figura 10: Interfaz de Playercam
6.3. NXAPI
Al controlar NXBOT usando Player se tiene a disposición los lenguajes de
programación soportados por éste. Actualmente, Player soporta los clientes de
lenguajes C/C++ y Python, sin embargo proyectos independientes han escrito clientes
para otros lenguajes, como Java y Matlab. Específicamente para este proyecto, se
decidió dar soporte a Java, debido a la sencillez del lenguaje y por ser
multiplataforma. De esta manera, se pueden ejecutar controladores tanto en Windows
como en Linux.
NXAPI se definió como una interfaz de programación orientada a implementar el
paradigma de comportamientos en robótica [enlace a Arkin, bibliografía]. Su base es
Javaclient, el cliente de Java para Player. NXAPI intenta ser una herramienta que
facilita la programación de pilas de comportamientos y la selección de diferentes
árbitros para estas pilas, siendo los más comunes los árbitros cooperativos y los
competitivos. La figura a continuación ilustra un ejemplo de pila de comportamientos
para la tarea de evasión de obstáculos y su implementación utilizando NXAPI.
Figura 11: Representación gráfica de la pila de comportamientos
24
25. //Interfaces Javaclient
Position2DInterface positionNXBot;
SonarInterface ir;
//Conexion al servidor Player de NXBOT
Robot nxbot = new Robot("NXBOT","192.168.1.1",6665, 0);
//Acceder a interfaces de Player
positionNXBot = nxbot.requestInterfacePosition2D(0,
PlayerConstants.PLAYER_OPEN_MODE);
ir = nxbot.requestInterfaceSonar(0, PlayerConstants.PLAYER_OPEN_MODE);
//ejecutar el hilo del cliente Player
nxbot.runThreaded(10,0);
//Punto de meta
Vector2D point = new Vector2D(5,5,Vector2D.MODE_XY);
//Creacion de los comportamientos
NxMSGoToPoint irAMeta = new NxMSGoToPoint("goto2",positionNXBot,point, 4,
0.2f, NxBehavior.MODE_EXPONENTIAL);
NxPSDetectObstaclesIR obst = new
NxPSDetectObstaclesIR("obst",positionMarlin,ir);
NxMSAvoidObstacles evadirObst = new
NxMSAvoidObstacles("avoid",obst,positionMarlin,NxBehavior.MODE_EXPONENTIAL);
//Creacion del arbitro y asignacion de comportamientos
CooperativeArbitrator arbitrator = new CooperativeArbitrator("a1", false);
arbitrator1.add(irAMeta);
arbitrator1.add(evadirObst);
//Ejecucion del programa
while(true)
{
Vector2D total = arbitrator.value();
posH.goTo(total, positionMarlin);
try
{
Thread.sleep(50);
}
catch(Exception e){}
}
6.3.1. Paquetes de la librería NXAPI
Paquete Util
Incluye utilidades para facilitar el manejo de información, como vectores, Helpers
para diferentes interfaces de Player, GUIs para representación gráfica de algunos
elementos, etc.
Paquete Test
Incluye los programas de prueba para validar el funcionamiento de NXBOT y son
25
26. programas de ejemplo para familiarizarse con la interfaz.
Paquete Robot
Este paquete incluye las clases necesarias para realizar la conexión al servidor Player,
gestión de sensores y de actuadores.
Paquete Behaviors
Este paquete incluye los comportamientos hasta la fecha implementados. Incluye
comportamientos sencillos, como GoToPoint, AvoidObstacles, hasta otros más
complejos, como Follow, MaintainFormation, etc. Asimismo, este paquete incluye
todas las clases necesarias para gestionar la pila de comportamientos, y diferentes
tipos de árbitro (colaborativo y competitivo).
Un ejemplo de la estructura de clases de NXAPI se puede ver en la figura a
continuación.
Figura 12: Diagrama de Clases reducido de NXAPI
26
27. 7. Modo de operación
En esta sección se describen los pasos a seguir para empezar a trabajar con NXBOT
en prácticas de robótica utilizando el entorno de desarrollo Player/Stage.
7.1. Encendido y estado de batería
Al encender NXBOT debe prenderse el LED de encendido del robot (LED rojo), así
como el indicador de batería, el cual ilumina tonalidades entre verde y rojo
dependiendo de la carga de la pila. En caso de que el robot emita dos bips cada cierto
tiempo, indica que la batería se encuentra baja y es prudente colocar a cargar la
plataforma. Si el robot enciende los dos LEDs, el indicador de batería es verde y no
emite los bips típicos de descarga, puede proceder a utilizar NXBOT para las
prácticas en robótica.
NO se recomienda configurar la red de NXBOT si éste tiene la batería baja,
ya que podría llevar a efectos no deseados.
7.2. Configurando la red
Para configurar la red de NXBOT, se debe conectar un cable de red a uno de los
puertos de la zona trasera del robot. No utilice el primer puerto, debe ser alguno de
los siguientes cuatro disponibles, como lo ilustra la siguiente imagen.
Figura 13: Puertos Ethernet disponibles para configuración
Luego de haber conectado el cable a NXBOT y a su equipo, configure la interfaz de
red en su computador para permitir asignación dinámica de dirección IP por DHCP.
La dirección IP por defecto de NXBOT es la 192.168.0.1. El robot le debe asignar
una dirección en el rango de 192.168.0.2 a 192.168.0.254.
En una consola del sistema operativo, use los comandos ipconfig/all (en Windows) o
ifconfig (en Linux) para verificar la dirección IP asignada a su máquina por NXBOT.
Si la dirección se encuentra en el rango anteriormente definido, se encuentra
correctamente conectado a NXBOT.
27
28. Aunque es posible cambiar la dirección de red de la interfaz LAN de
NXBOT (Puertos Ethernet), se recomienda NO hacerlo, con el fin de
garantizar uniformidad en el acceso al robot.
Ahora puede ingresar a la interfaz web del robot, que le permitirá configurar todos los
parámetros de red que desee (Wifi, LAN, WAN). Utilice su navegador para ello,
simplemente en la barra de dirección coloque la dirección IP de NXBOT
(192.168.0.1). Si todo sale correctamente, debe observar una portada similar a la
siguiente figura:
Figura 14: Interfaz de acceso a OpenWRT
Para acceder a la plataforma WEB, utilice el siguiente login:
Usuario root
Contraseña nxbot
7.2.1. Configuración Wifi
Las opciones de configuración de Wifi se pueden encontrar en el menú Network,
submenú Wifi. La figura muestra la pantalla de configuración.
28
29. A continuación se describen los campos de configuración.
Parámetro Descripción
Enable Habilita o deshabilita la interfaz Wifi. Recomendamos
mantenerla activa.
Channel Canal de comunicación Wifi. Definido por el usuario.
Network name (ESSID) Nombre de la red. Si NXBOT está generando la red Wifi,
asigne el nombre que crea conveniente. Si NXBOT se va a
conectar a una red Wifi ya existente, ingrese el nombre de
esa red.
Mode Se recomienda utilizar únicamente dos modos:
Provide (Acces Point): NXBOT genera la red Wifi según
el nombre asignado.
Join (Client): NXBOT se conecta a una red previamente
existente.
Encryption Tipo de encripción que lleva el enlace. Actualmente
funciona únicamente WEP.
7.3. Accediendo a OpenWRT por consola
Para acceder al sistema operativo de NXBOT (OpenWRT) se utiliza el protocolo SSH
(Secure Shell). Si utiliza Windows puede utilizar el programa PuTTY, que incluye ese
protocolo. En caso de usar Linux, utilice el comando ssh. Se utiliza la siguiente
dirección para acceder a OpenWRT:
# ssh root@192.168.0.1
La contraseña es la misma que la de acceso a la interfaz web. Si todo ha salido
correctamente en el inicio de sesión, observará en la consola información similar a la
siguiente figura:
29
30. Figura 15: Acceso a OpenWRT por consola
Esto indica que ha ingresado correctamente. Esta es una consola que recibe comandos
típicos de Linux. Puede utilizar las herramientas del sistema para instalar nuevos
programas, con el comando opkg, siempre y cuando tenga conexión a internet.
7.4. Probando Player/Stage
Se pueden utilizar las herramientas de Player/Stage para controlar al robot, una vez se
encuentre corectamente conectado a éste.
7.4.1. PlayerViewer
Puede utilizar PlayerViewer para controlar el movimiento de la plataforma y observar
la lectura de sensores infrarrojos, ultrasonido y de contacto, así como el estado de la
batería, el estado de las líneas analógicas y digitales, y controlar el estado de la pinza
(abierto o cerrado).
Para utilizar PlayerViewer puede utilizar el siguiente comando:
# playerv h 192.168.0.1
Cambie la dirección IP en caso de que se encuentre conectado a una red Wifi externa.
El proceso para conectarse a cada una de las interfaces del robot se realiza a través
del menú Devices. Proceda a suscribirse a la interfaz (submenú Subscribe). Si el
dispositivo es un sensor, comenzará a ver los datos del sensor en la interfaz de
Playerv. Si es una interfaz de posición y desea enviar comandos de velocidad o
posición, utilice el submenú Command del mismo menú, y posteriormente habilite la
interfaz (submenú Enable).
A continuación se muestra una imagen de PlayerViewer usando el menú Devices:
30
31. Figura 16: Menú Devices de PlayerViewer
7.4.2. Playerjoy
Utilice Playerjoy para controlar NXBOT con el teclado o con un Joystick. Utilice el
siguiente comando:
# playerjoy 192.168.0.1:6665
Cambie la dirección IP en caso de que se encuentre conectado a una red Wifi externa.
Utilice las siguientes teclas para controlar al robot:
Tecla Función
i Adelante
j Izquierda
l Derecha
, Atrás
q Incrementar
velocidad
z Decrementar
velocidad
7.5. Utilizando Javaclient para programar NXBOT
Para escribir software para controlar la plataforma se ha recomendado utilizar
Javaclient, que permite ser ejecutado en diferentes sistemas operativos.
Recomendamos remitirse a la página de Javaclient para descargar el código fuente y
compilarlo en cualquier IDE de Java (Eclipse, Netbeans):
http://java-player.sourceforge.net/
31
32. En la página existen múltiples ejemplos para familiarizarse con Javaclient. A
continuación se muestra un pequeño ejemplo que ilustra la forma de programación
con esta librería.
Figura 17: Diagrama de flujo general de una aplicación escrita
con Javaclient
7.6. Utilizando NXAPI para programar NXBOT
NXAPI facilita la programación de controladores basados en el paradigma de
comportamientos. La librería puede ser descargada de la página del proyecto de
NXBOT:
http://code.google.com/p/nxbot
en la librería se incluyen diferentes ejemplos que permiten familiarizarse con ella. A
continuación se muestra un pequeño ejemplo que ilustra la forma de programación
con esta librería.
32
34. 8. Enfoque pedagógico
La robótica móvil es una rama que despierta mucho interés en la actualidad, no
solamente en el ámbito de investigación, sino también en el proceso pedagógico. Es
una rama comúnmente atractiva que facilita el desarrollo de experiencias a los
estudiantes, pues aunque muchos la ven como un concepto de ciencia ficción, ya
cuenta con aplicaciones reales, y en unos casos permite modelar a pequeña escala
procesos de gran envergadura. Aplicar en la educación los conceptos de robótica,
fortalece los procesos de creatividad y pensamiento divergente, indispensables y
necesarios en la formación académica y facilita la creación de espacios más ricos en
recursos y sinergias que profundizan la apropiación de conocimiento.
8.1. La robótica en la educación
Existe actualmente la tendencia de involucrar las TICs en el proceso de enseñanza-
aprendizaje. Incluir la robótica en prácticas pedagógicas hace parte de esta tendencia,
ya que utiliza las nuevas tecnologías no sólo como objeto de aprendizaje, sino
también como medio y apoyo al proceso académico. Esto ha permitido que se
establezca una nueva rama en la robótica, conocida como “Robótica Educativa”, en
donde se plantean metodologías para aplicar el uso de robóts en el proceso
pedagógico. La robótica educativa ha sido trabajada desde estas dos perspectivas:
como objeto de aprendizaje, puede ser utilizada para aprender o reforzar los
conceptos en los siguientes temas:
• Física y Matemáticas
• Programación
• Control de procesos
• Instrumentación
• Inteligencia computacional
Estos son sólo unos pocos ejemplos en donde la robótica puede ser utilizada como
objeto de aprendizaje. Sin embargo, especial énfasis existe actualmente para
involucrar la robótica en otras áreas menos obvias, que no tienen estrecha relación
con la tecnología, como lo son la biología, química, historia, e incluso artes. La figura
ilustra el robot NXT de Lego Mindstorms, una de las plataformas que han sido
pensadas para ser utilizadas en actividades de robótica educativa.
34
35. Figura 19: Robot NXT de Lego
Mindstorms, utilizado como plataforma
educativa
8.2. NXBOT como plataforma educativa
NXBOT puede ser aplicado en estos espacios pedagógicos, al ser una herramienta
con grandes capacidades para la experimentación en robótica móvil. Ya que se
encuentra soportado por un entorno de desarrollo simple de manejar (Player/Stage),
que tiene la posibilidad de utilizar diferentes lenguajes de programación y cuenta con
facilidades en la conectividad a través de TCP/IP, facilita la integración de la
plataforma en prácticas en clase. Otra de las ventajas de trabajar con NXBOT es que
cuenta con soporte en el simulador Stage. Al contar con pocas plataformas, se hace
necesario validar inicialmente los algoritmos en simulación, y permite que el
estudiante esté involucrado activamente en el proceso pedagógico aún sin contar
directamente con el hardware físico.
8.2.1. Implementación de un laboratorio remoto con NXBOT
Dadas las facilidades de conectividad que ofrece NXBOT, es posible la
implementación de laboratorios remotos con la plataforma. Un laboratorio remoto
permite el acceso de estudiantes usando la red de internet como base. Ya que NXBOT
cuenta con conectividad Wifi, que usa TCP/IP como protocolo, la integración de la
plataforma en la arquitectura del sistema es realmente sencilla. NXBOT ya ha sido
integrado a la plataforma RENATA [referencia aquí], que provee un laboratorio
remoto de robótica entre las universidades adscritas a esta red. La figura a
continuación muestra la integración de NXBOT a una arquitectura de red que puede
servir de base para la implementación de laboratorios remotos.
35
36. Figura 20: Arquitectura para conexión de NXBOT a la
red
8.3. NXBOT como plataforma de investigación
NXBOT puede ser también utilizado como plataforma de investigación en el área de
robótica móvil. El conjunto de sensores y actuadores que comprende el robot lo hace
idóneo para trabajar en las ramas típicas de robótica móvil, como lo son la
Localización y Navegación, así como los sistemas multirobot, gracias a la robusta
interfaz de comunicación que provee. Diferentes trabajos han sido realizados con la
plataforma, los cuales se listan a continuación:
• Mantenimiento y cambio automático de formaciones
• Sistema de videovigilancia soportado por robots móviles
• Reconstrucción de una imagen panorámica de 360° usando robots móviles
• Navegación reactiva a través de pasillos usando visión artificial
Estos son solo algunos de los trabajos en donde se ha involucrado al robot NXBOT
como plataforma de investigación. Las figuras a continuación ilustran algunas de las
investigaciones realizadas.
36
37. Figura 21: Grupo de robots NXBOT
manteniendo una formación cuadrado
(a) (b)
Figura 22: NXBOT navegando mediante visión artificial: (a) detección del punto de fuga, (b)
Navegación a través de pasillos usando el punto de fuga
37
38. 9. Referencias
1. Pustowka, A.M., Hernandez J.A., "Mantenimiento y cambio automático de
formaciones de un grupo de robóts móviles cooperativos homogéneos",
Universidad del Valle, 2008.
2. Hernandez, J.A.; Pustowka, A.; Caicedo, E.F.; Bacca, E.B., "Formation
control of cooperative robots with limited sensing using a virtual robot as
reference", Latin-American Robotics Symposium LARS, Valparaiso, Chile,
2009. (versión online: http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?
arnumber=5418317)
3. Publicación de navegación por punto de fuga.
4. "Proyecto Player/Stage" [online] http://playerstage.sourceforge.net/
5. Behavior based robotics... Arkin.
9.1. Videos
1. "NX-Bot: Formación Flecha" [online] http://www.youtube.com/watch?
v=xNWVuFW0KA4&feature=related
2. "NX-Bot: Formación Columna" [online] http://www.youtube.com/watch?
v=CK5_BR9Ydm0&feature=related
3. "NX-Bot: Formación Cuadrado" [online] http://www.youtube.com/watch?
v=snkjwmBnkmI&feature=related
4. "NX-Bot: Formación Fila" [online] http://www.youtube.com/watch?
v=pP97Qtj2szY&feature=related
5. "NX-Bot, cambio de formación cuadrado (ancho)" [online]
http://www.youtube.com/watch?v=51I7vrg0M1
6. "NX-Bot: Cambio automático de formación en un pasillo de paredes
paralelas" [online] http://www.youtube.com/watch?
v=2XOy8fmbDiQ&feature=related
7. "NX-BOT: Cambio automático de formación en un pasillo de paredes
inclinadas" [online] http://www.youtube.com/watch?
v=AlhxQNx48JE&feature=related
8. NXBOT navegación autónoma por pasillos usando punto de fuga
38