programación de los robots nomad 200 y super scout ii marco antonio lópez trinidad laboratorio de...

30
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

Upload: odalys-canal

Post on 23-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 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

Programación de los robots Nomad 200 y Super Scout II

Marco Antonio López TrinidadLaboratorio de Sistemas Inteligentes

Tec de Monterrey Campus Cuernavaca

Page 2: 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

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

Page 3: 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

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

Page 4: 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

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

Page 5: 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

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° cada sensor tiene una sensibilidad de 8 onzas control del sistema por un microcontrolador 68HC11

Page 6: 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

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° sistema controlado por un microcontrolador 68HC11

Page 7: 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

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

Page 8: 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

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

Page 9: 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

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

Page 10: 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

Programación en modo directo y en modo cliente

Aplicación 1

Aplicación 2

Server

Simulador

Demoniodel robot Robot

Cliente Servidor Robot

Page 11: 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

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)

Page 12: 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

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

Page 13: 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

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)

Page 14: 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

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

Page 15: 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

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

Page 16: 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

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

Page 17: 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

Vectores Globales

Page 18: 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

Vectores Globales

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

Page 19: 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

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

Page 20: 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

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

Page 21: 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

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

Page 22: 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

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

Desconectar al robot

Page 23: 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

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

Page 24: 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

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

Page 25: 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

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/s2) para el eje de traslación -300(0.1 pulgadas/s2) para el eje de rotación -300(0.1 pulgadas/s2) para el eje de la torreta

Page 26: 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

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

Page 27: 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

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

Page 28: 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

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)

Page 29: 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

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

Page 30: 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

Ejemplo de programación