Sistemas Robóticos Móviles (Práctica 7: Planificación de Trayectorias) Antonio Falcón Martel Facultad de Informática Universidad de Las Palmas de Gran Canaria
Objetivos La práctica 7 se desarrollará en utilizando el simulador en MATLAB SIMROBOT (Autonomous Mobile Robotics Toolbox) desarrollado en la Universidad de Brno (república de Chequia). http://www.fee.vutbr.cz/uamt/robotics/simulations/amrt/simrobot_en.html Los objetivos principales son: Familiarizarse con el entorno de simulación Analizar las diferentes estrategias posibles sobre un problema de planificación global Desarrollar estrategias para el control reactivo local en el caso de coexistir múltiples robots móviles en el mismo entorno.
Autonomous Mobile Robotics Toolbox La toolbox Autonomous mobile robotics SIMROBOT (SIMulated ROBOTs) permite: Simular comportamientos de uno o mas robots en movimiento en un entorno virtual. Cada robot puede estar equipado con varios sensores ultrasónicos y láser que pueden utilizarse para algoritmos de control (pueden combinarse con Lógica Difusa y Redes Neuronales) La toolbox incluye dos aplicaciones independientes: El EDITOR que permite crear y modificar la simulación, crear mapa, definir robots y editar sus algoritmos de control. El SIMULADOR que permite ejecutar la simulación donde cada robot se desplaza según su propio algoritmos de control.
Autonomous Mobile Robotics Toolbox Simulator Window
SIMROBOT: Características Características relevantes de la TOOLBOX Edición y simulación Menu de contexto para los robots Editor para el subsistema sensorial de cada robot (tipo, número, posición y parámetros) Edición de algoritmos de control como m-functions que pueden utilizar otras toolbox de MATLAB Soporta simulación paso a paso y detección de colisiones Cada robot tiene una memoria disponible para el usuario.
SIMROBOT Notas de interés: El entorno virtual de simulación se representa como una matriz, que puede crearse desde ficheros bitmap de 1-bit (*.bmp) Los robot admiten sensores ultrasónicos y láser para evaluar distancias cortas y largas. Están simulados utilizando el algoritmo de Bresenham (este algoritmo está escrito en C y compilado en una DLL un fichero mex- para una ejecución más rápida) El simulador asume que los robots tienen dos ruedas motrices y una o dos ruedas tipo castor (conducción diferencial). Este tipo de plataforma tiene dos grados de libertad para la locomoción.
SIMROBOT Programación Orientada a Objetos
SIMROBOT: Detalles de la Estructura name - user-defined name of the robot number - unique ID number af - control algorithm file name scale - scale of the robot - size of the robot can be adjusted without new shape definition position - actual position of the robot in virtual environment map heading - heading of the robot (in degrees) userdata - this is the robot s "memory" and any user data can be stored here crashed - flag, set when a collision is detected power - on/off switch flag color - color of the robot ([R G B] vector)
SIMROBOT: Detalles de la Estructura patch - data for a patch (polygon) visually representing the robot xdata - data of x-coordinates for the patch definition ydata - data of y-coordinates for the patch definition history - record of position and heading data of the robot in each simulation step velocity - angular velocity of left and right actuated wheel accel - angular acceleration of left and right actuated wheel sensors - structure defining sensorial subsystem of the robot (sensor data = position on the robot, angle of axis, beamwidth (in degrees), range, sensor name)
Autonomous Mobile Robotics Toolbox Mapa Virtual del Entorno El mapa se representa internamente como una matriz de uint8 (unsigned 8-bit integer). El valor máximo de cada elemento es 255 según: 0 1 2-255 empty space solid obstacle robot Se deberá rodear al mapa de una pared limitadora pues se admite la opción de que los robots pueden salir de este..
Autonomous Mobile Robotics Toolbox Sistema de Coordenadas La posición básica para el robot es con orientación de la cabecera = 0 Los sensores se definen sobre esta posición La unidad básica de longitud es un centímetro Un punto del mapa (un elemento de la matriz) viene representado por un centímetro cuadrado en el entorno del mundo real
Autonomous Mobile Robotics Toolbox Modelo cinemático (directo e inverso) Se asume una plataforma diferencial con dos grados de libertad (DOFs): traslación y rotación. Velocidad traslacional en [m.s-1] = 2 1 1 1 2 W W a a b b a B B B l l l l l R v v z y x ω ω ω Velocidad rotacional(z) [rad.s-1] ( ) + = z y x B B B a b b a a b b a a W W v v l l l l l l l l R l ω ω ω 1 1 1 1 2 2 2 2 1 Velocidad rotación de las ruedas en [rad.s-1]
Autonomous Mobile Robotics Toolbox Variables y parámetros La solución de la ecuación anterior se implementa con una m-function denominada mmodel.m. Las constantes l a,l b y R deben establecerse de acuerdo con las proporciones del robot. Los valores implícitos son l a =3 cm, l b =0 cm y R=1 cm. Se deberá guardar consistencia con los valores que se utilicen en la función de cinemática inversa invmodel.m. Un paso de simulación representa un segundo en tiempo real.
SimRobot Editor Robots
SimRobot Editor Subsistema Sensorial
SimRobot Algoritmos de Control Los algoritmos de control son m-functions estandar de MATLAB. Cada robot tiene un algoritmo que puede ser compartido por varios robots. Cuando un nuevo robot se crea se le añade un algoritmo por defecto (algtemp.m),que se enceuntra vacio: function new = alg_name(simrobot,matrix,step) % your algorithm starts here %end of your algorithm new = simrobot;
SimRobot Algoritmos de Control La variable step es el paso de simulación actual y puede utilizarse dentro del algoritmo. Para el algoritmo de control pueden también utilizarse los comandos de SimRobot. % sensor reading [dist,num] = readusonic(simrobot,'sens1',matrix); % num, the nearest obstacle number, is not used if dist<20 simrobot = setvel(simrobot,[0 0.5]); % turn left else simrobot = setvel(simrobot,[0.5 0.5]); % go straight on end
SimRobot : Comandos prestablecidos Comando: clearcf Propósito: borrar el crash-flag del robot. Sintáxis: new = clearcf(simrobot) Comando: getaccel/setaccel Propósito : Porporciona/pone la aceleración angular de las ruedas derecha e izquierda. Sintáxis: [left_accel,right_accel] = getaccel(simrobot) new = setaccel(simrobot,[left_accel right_accel]) Devuelve un vector de dos elementos (double).
SimRobot : Comandos prestablecidos Comando: gethead/sethead Purpose: Returns/sets the heading of the robot. Sintáxis: heading = gethead(simrobot) new = sethead(simrobot,name) El valor que devuelve está en grados. El ángulo de 0 se retorna cuando el robot encara el este."name" puede ser cualquier string Comando: getname Propósito: Devuelve el nombre del robot. Sintáxis: name = getname(simrobot) name es el nombre del robot (string).
SimRobot : Comandos prestablecidos Comando: getpos Propósito: Devuelve la posición actual del robot. Sintáxis: position = getpos(simrobot) El valor que se obtiene es la posición actual del robot ([x y], double). La esquina izquierda del mundo virtual tiene como coordenadas [0,0] Comando: getpower/setpower Propósito: Retorna/pone el "power switch state" del robot (el robot está activo/no activo). Sintáxis: power = getpower(simrobot) new = setpower(simrobot,power) El valor del estado de energía del robot (boolean/double), "power" puede ser 0/1 o 'on'/'off'.
SimRobot : Comandos prestablecidos Comando: getvel/setvel Propósito: Devuelve/pone las velocidades <ngulares de las ruedas derecha e izquierda. Sintáxis: [left_vel,right_vel] = getvel(simrobot) new = setvel(simrobot,[left_vel right_vel]) El valor que se devuelve es un vector de dos elementos (double). Comando: invmodel Propósito: Representa el modelo de cinemática inversa. Sintáxis: [left_angular_vel,right_angular_vel] = invmodel(movspd, rotspd) Donde: left_angular_vel,right_angular_vel son las velocidades angulares de las ruedas, movspd es la velocidad traslacional del cerpo del robot y rotspd es la velocidad rotacional
SimRobot : Comandos prestablecidos Comando: iscrashed Propósito: Devuelve el crash-flag. Sintáxis: flag = iscrashed(simrobot) Si el robot se colapsa por colisión, se devuelve un 1, y en cualquier otro caso un 0. Comando: getnum Propósito: Devuelve el número de identificación ID del robot. Sintáxis: number = getnum(simrobot) E valor del ID del robot es double, pero entero.
SimRobot : Comandos prestablecidos Comando: readlaser Propósito: Leer los datos desde un scanner láser. Sintáxis: [data,num] = readlaser(simrobot,sensor_name,matrix) Donde: data es un vector que contiene las distancias a los obstáculos medidos por un haz dado. Los haces se len en sentido de las agujas del reloj num es el número de los obstáculos detectados (1 para los obstáculos sólidos (the "wall"), otros números para los robots. Si no hay obstáculos se devuelve un 0), sensor_name es el nombre del sensor. matrix es la matriz que representa el entorno virtual.
SimRobot : Comandos prestablecidos Comando: readusonic Propósito: Simula las lecturas desde un sensor ultrasónico. Sintáxis: [distance,num] = readusonic(simrobot,sensor_name,matrix) Donde distance es la distancia al obstáculo más próximo. num es el número de los obstáculos detectados (1 para los obstáculos sólidos (the "wall"), otros números para los robots. Si no hay obstáculos se devuelve un 0), matrix es la matriz que representa el entorno virtual.
SimRobot : Comandos prestablecidos Comando: readmem/writemem Propósito: Lee/escribe la memoria del robot. Sintáxis: data = readmem(simrobot) new = writemem(simrobot,data) Donde data es el contenido de la memoria que se lee/escribe.
Práctica 7: (Planificación de trayectorias en sistemas multirobots) a) Utilizando MATLAB y SIMROBOT diseñar un robot que permita ir del punto A al B del laberinto de la figura, incluyendo aquellos sensores que se estimen oportunos. A B
Práctica 7: (Planificación de trayectorias en sistemas multirobots) b) Definir el algoritmo de control que permita realizar la planificación local y global. c) El robot coexistirá con otros robots en el entorno que llevan otros objetivos finales (ir de B a A). Si se produce algún tipo de colisión identificar si esta es con un robot en movimiento. A B
Práctica 7: (Materiales y Documentación) Material: a) MATLAB 5.3 (toolbox: Fuzzy Systems, Neural Networks, SIMULINK) b) Toolbox SimRobot c) PC WinXX d) El entorno virtual de trabajo: Laberinto.bmp (páginas asignatura) Recursos On-line: a) SimRobot: http://www.fee.vutbr.cz/uamt/robotics/simulations/amrt/simrobot_en.html b) Manuales MATLAB&SIMULINK: http://serdis.dis.ulpgc.es/~ii-srm Referencias de interés: a) [Mur00] Murphy R., "Introduction to AI Robotics", MIT Press, 2000. b) [Pru96] Pruski, A. "Robotique Mobile. La Planification de Trajectorie", Hermes, 1.996.
! Hasta la Próxima