programación de los robots nomad 200 y super scout ii marco antonio lópez trinidad laboratorio de...
TRANSCRIPT
Programación de los robots Nomad 200 y Super Scout II
Marco Antonio López TrinidadLaboratorio 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
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
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
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
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
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
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
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
Programación en modo directo y en modo cliente
Aplicación 1
Aplicación 2
Server
Simulador
Demoniodel robot Robot
Cliente Servidor Robot
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)
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
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)
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
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
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
Vectores Globales
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
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
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
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
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
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
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
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
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
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
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)
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
Ejemplo de programación