1 Programación de los robots Nomad 200 y Super Scout II Marco Antonio López Trinidad Laboratorio de Sistemas Inteligentes Tec de Monterrey Campus Cuernavaca
2 Caracteristicas del robot Nomad 200 Robot móvil con seis módulos sensores Táctil Infrarrojo Ultrasónico Sistema de visión básico Sistema de visión con sensor láser Sistema de compás
3 Características del robot Nomad 200 Sistema distribuido Sistema para manejo de sensores Sistema para manejo de motores Sistema de comunicaciones con el host (computadora externa al robot móvil) Registro de posición y orientación Software con interfaz gráfica para control a distancia del robot y simulador
4 Sistema mecánico del robot Sistema no holonómico de tres servo motores y tres ruedas síncronas Las tres ruedas se trasladan juntas controladas por un motor Un segundo motor permite rotar las tres ruedas El tercer motor controla la posición angular de la torreta Se define como sistema no holonómico, ya que el robot solamente se puede trasladar hacia adelante o hacia atrás, en dirección de la alineación de las tres ruedas
5 Sistema sensorial El robot Nomad 200 del Laboratorio de Sistemas Inteligentes cuenta con: Sistema táctil (Sensus 100) de veinte canales 20 sensores independientes de presión organizados en 2 anillos con 10 sensores por cada anillo intercalados para cubrir 360 ° con una resolución de 18° A cada sensor tiene una sensibilidad de 8 onzas A control del sistema por un microcontrolador 68HC11
6 Sistema sensorial El robot Nomad 200 del Laboratorio de Sistemas Inteligentes cuenta con: Sistema ultrasónico (Sensus 200) de 16 canales rango de alcance de 17 pulgadas a 255 pulgadas con una precisión del 1% sobre todo el rango cálculo de la distancia basado en el cálculo del tiempo de vuelo entre la emisión de una señal y su retorno al transductor transductores Polaroid con ángulo de dispersión de 25 ° A sistema controlado por un microcontrolador 68HC11
7 Sistema sensorial El robot Nomad 200 del Laboratorio de Sistemas Inteligentes cuenta con: Sistema de visión básico (Sensus 400) Cámara Hitachi KP-D50 a color, tecnología CCD con resolución de 470 lineas de TV frame graber para PC librería de software para procesamiento de imágenes
8 Sistema de procesamiento Sistema multiprocesador de memoria compartida Todos los procesadores se comunican mediante un bus ISA Sistema maestro basado en microprocesador de la familia 386, 486 o Pentium Sistema sensorial controlado por 68HC11 Sistema motriz controlado por 68HC08 2 puertos seriales 1 puerto paralelo 1 floppy de 3.5 pulgadas 1 puerto para joystick disco duro de 2 Gbytes
9 Programación del Nomad Modos de Programación Modo cliente: la aplicación se comunica con un servidor que a su vez se comunica con el demonio del robot o el simulador Modo directo: la aplicación se comunica directamente con el demonio del robot ¿Que modo se debe utilizar? Modo cliente: mientras se esta en el proceso de desarrollo de una aplicación Modo directo: una vez que una aplicación esta libre de errores
10 Programación en modo directo y en modo cliente Aplicación 1 Aplicación 2 Server Simulador Demonio del robot Robot Cliente Servidor Robot
11 Programación del Nomad ¿Cómo cambiar de modo de operación? Recompilando el programa fuente y utilizando cualquiera de los archivos objeto Nclient.o para establecer modo cliente Ndirect.o para establecer modo directo ¿Son compatibles estos modos? Ambos modos son completamente compatibles Algunas instrucciones usadas por el modo cliente son ignoradas por el modo directo (rutinas de dibujo)
12 Robot simulado vs Robot Real Software: no existe ninguna diferencia entre la programación del robot simulado y real Práctico: en una simulación los datos son ideales, especialmente cuando se esta tomando lecturas de sensores (existen variaciones) La instrucción simulated_robot permite probar programas mediante el simulador La instrucción real_robot permite ejecutar programas sobre el robot real
13 Robot simulado vs Robot Real C y Lisp son los lenguajes con los que actualmente es posible programar al robot Nomad 200 y Super Scout II Nclient.h, Nclient.o y Ndirect.o son la librería y los programas objeto para compilar en C o C++ Nclient.lsp es la librería para compilar con Lisp (Lucid Common Lisp)
14 Vectores Globales El vector State contiene información sobre: estado actual del robot configuración lectura de los sensores El vector State se actualiza despu₫s de la ejecución de una instrucción en el robot El vector Smask es similar al vector State, pero solamente se actualizan los campos de inter₫s para el programador
15 Vectores Globales El vector Láser contiene información de las lecturas del sensor láser Vector State STATE_SIM_SPEED Velocidad de simulación. Este valor escala la velocidad en tiempo real con unidades de 1/10. STATE_IR_0-15 Lecturas de los 16 sensores infrarrojos. Los sensores están numerados en sentido opuesto a las manecillas del reloj, empezando en el frente del robot. Las lecturas corresponden a distancias medidas en pulgadas
16 Vectores Globales Vector State STATE_SONAR_0-15 Lecturas de los 16 sonares. Los sonares están numerados de la misma forma que los sensores infrarrojos Las lecturas de los sonares se miden en pulgadas STATE_BUMPER Lecturas de los bumpers. Las lecturas están codificadas en binario. El bumper n esta representado por el bit (n+1). El bit 0 es el menos significativo. Un bit cambia de 0 a 1 cuando el bumper correspondiente a este bit hace contacto con un obstáculo
17 Vectores Globales
18 Vector State STATE_CONF_X Valor acumulado (integrado) de las coordenadas en X, en incrementos de 1/10s de pulgada con respecto de la posición inicial. Este valor se borra con los comandos zr o dp STATE_CONF_Y Valor acumulado (integrado) de las coordenadas en Y, en incrementos de 1/10s de pulgada con respecto a la posición inicial. Este valor se borra con los comandos zr o dp
19 Vectores Globales Vector State STATE_CONF_STEER Orientación de las ruedas en incrementos de 1/10s de grado, con respecto de la posición inicial dentro del rango [0, 3600]. Este valor se borra con los comandos zr o da STATE_CONF_TURRET Orientación de la torreta en incrementos de 1/10s de grado, con respecto a la posición inicial dentro del rango [0, 3600]. Este valor se borra con los comandos zr o da STATE_VEL_TRANS Velocidad de traslación del robot en 1/10s de pulgada por segundo
20 Vectores Globales Vector State STATE_VEL_TURRET Velocidad de rotación del robot en incrementos de 1/10s de grado por segundo STATE_MOTOR_STATUS Estado de los motores. Codificado en binario por los 3 bits menos significativos, b0 representa el estado del motor de traslación, b1 representa el estado del motor de rotación, b2 representa el estado del motor de la torreta. El valor de activación para un bit es 1 STATE_LASER Activa el modo láser
21 Vectores Globales Vector State STATE_COMPASS Lecturas del compás STATE_ERROR Numero de error El vector State se actualiza cada vez que se ejecuta un comando de movimiento. Sin embargo existen comandos ( get_...) que permiten actualizar solo una parte del vector get_sn
22 Comandos Etapas de programación de los robots Nomad 200 y Super Scout II Establecer comunicación con el robot Inicializar al robot y sus sensores Repetir comandos con secuencias del tipo: Enviar al robot comandos de movimiento y sensado Capturar datos de movimiento y sensado del robot A Desconectar al robot
23 Comandos de comunicación int create_robot(long robot_id) crea un robot con identificador robot_id, además abre una ventana del simulador para este nuevo robot. Este comando regresa un 1 si se ejecuta exitosamente o 0 en caso contrario int connect_robot(long robot_id) crea una conexión mediante un socket, para comunicar a la aplicación con el servidor o el robot. Solamente se pueden enviar comandos al robot si este comando se ejecuta normalmente. El comando regresa un 1 si se ejecuta exitosamente o 0 en caso contrario
24 Comandos de comunicación int disconnect_robot(long robot_id) desconecta la aplicación del servidor o del robot. Regresa un TRUE si se ejecuta exitosamente o FALSE en caso contrario int tk(char *talk_string) envía la cadena talk_string al sintetizador del robot. Este comando permite al robot hablar unsigned int conf_tm(int timeout) establece el tiempo muerto del robot a timeout segundos. Si el robot no recibe ningún comando despu ₫ s de este periodo el robot se detiene
25 Comandos de movimiento int ac(int t_ac, int s_ac, int r_ac) (aceleración) establece la aceleración de los tres ejes. Las unidad que se maneja es velocidad dividida por segundos. Las aceleraciones deben ser menores que: -300(0.1 pulgadas/s 2 ) para el eje de traslación -300(0.1 pulgadas/s 2 ) para el eje de rotación -300(0.1 pulgadas/s 2 ) para el eje de la torreta
26 Comandos de movimiento int vm(int t_vm, int s_vm, int r_vm) (velocidad de movimiento) controla la velocidad de movimiento de los tres ejes del robot. Los argumentos son las velocidades deseadas de los tres ejes del robot Cuando se utiliza el comando vm, el robot moverá sus tres ejes a la velocidad establecida, y continuara hasta que se presente otro comando de movimiento o se cumpla el tiempo muerto Despu₫s del comando vm debe utilizar el comando st y ws antes de ejecutar un comando pr
27 Comandos de movimiento int pr(int t_pr, int s_pr, int r_pr) (posición relativa) controla los tres ejes del robot en la posición Los argumentos son la posición deseada relativa a la posición actual. Así pr(100, 200, 200) moverá los ejes al mismo tiempo int st(void) el robot se detendrá despu₫s de recibir este comando. Sin embargo se debe proporcionar un momento para que se frene, por eso debe utilizar el comando ws
28 Comandos de movimiento int zr(void) alinea la torreta y las llantas en la misma dirección. Este comando se debe ejecutar al principio de cualquier programa int dp(void) establece la posición del robot (x,y)
29 Comandos para sensar int gd(void) actualiza los valores del vector State int conf_sn(int rate, int order[16]) configura los sonares int get_sn() actualiza las lecturas de los sonares en el vector State int get_bp() actualiza las lecturas del bumper en el vector State float voltCpuGet(void) regresa el valor del voltaje en la batería que suministra energía al robot
30 Ejemplo de programación