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.

1 Programación de los robots Nomad 200 y Super Scout II M...
Author: Odalys Canal
0 downloads 0 Views

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