Robots Móviles
Software y documentación para robots móviles

Mobile Robot Simulator

Mobile Robot Simulator es una aplicación servidor que simula la navegación de un robot móvil en un entorno configurable. El controlador del robot móvil es una aplicación cliente que se conecta con el servidor a través de sockets para enviar órdenes de movimiento y recibir información del sistema sensorial.

El controlador se ayuda de un componente para la comunicación con el servidor. De esta forma, se libera al programador de las tareas relacionadas con el establecimiento de la conexión y con la codificación de los mensajes, encargándose únicamente de la lógica para el control del robot móvil.

Modelo del robot

En la versión actual de Mobile Robot Simulator el robot que se toma como base para establecer el modelo es un Nomad-200 ligeramente modificado y simplificado para una mayor eficiencia del simulador.

[ Robot Nomad-200 ]

El radio del robot es de 10 pulgadas y es aproximadamente igual al radio del robot real considerando el bumper (anillos situados en la parte inferior donde están colocados los sensores de contacto). Este parámetro junto con la medida mínima de los sensores deberá ser contemplado a la hora de definir nuevos entornos por los que el robot pueda acceder sin problemas de colisión. La altura del robot no se tiene en cuenta ya que se trata de una simulación en dos dimensiones.

Movimiento del robot

El movimiento del robot se realiza mediante comandos de movimiento en el que se especifican las velocidades de avance y de giro del robot.

La velocidad de avance se interpreta en pulgadas por segundo que según la definición de los entornos se corresponde con pixels por segundo. Una velocidad con signo positivo hace que el robot avance y una con signo negativo hace que el robot retroceda.

La velocidad de giro se interpreta en grados por segundo. Una velocidad con signo positivo hace que el robot gire a la derecha y una con signo negativo hace que el robot gire a la izquierda. En el simulador no se limita la velocidad hasta 40 grados por segundo en cualquier sentido como ocurre en el robot real.

Sensores

Se han definido dos tipos de sensores para recibir información del exterior: sensores de largo alcance y sensores de contacto.

Los sensores de largo alcance pueden corresponderse con los sensores de ultrasonidos del robot real. En este caso, el eco emitido por el sensor se modeliza como lineal con la dirección y sentido de la posición del sensor en el robot y no cónico como ocurre en la realidad.

Se disponen de 16 sensores de este tipo situados alrededor del robot sobre su superficie. El sensor 0 está situado en el sentido de avance del robot, el sensor 1 a 22'5 grados a la derecha del sentido de avance, el sensor 2 a 45 grados y así sucesivamente hasta el sensor 15 que está situado a 22'5 grados a la izquierda del sentido de avance.

La lectura mínima que devuelve cada sensor es de 5 pulgadas medida desde la superficie del robot (15 pulgadas desde el centro del robot). La lectura máxima es de 110 pulgadas (120 pulgadas desde el centro del robot).

Los sensores de contacto se modelizan como "abierto-cerrado". Estará en posición de "cerrado" cuando el sensor esté en contacto con algún objeto del entorno y en "abierto" en caso contrario.

Se han definido 20 sensores en torno al robot como ocurre en el robot real tomado como modelo. El sensor 0 está situado en el sentido de avance del robot, el sensor 1 a 13 grados a la derecha del sentido de avance, el sensor 2 a 26 grados y así sucesivamente hasta el sensor 19 que está situado a 13 grados a la izquierda del sentido de avance.

Servidor: Simulador del robot móvil

Las operaciones sobre el servidor Mobile Robot Simulator se efectúan mediante un menú de aplicación o un menú contextual en la ventana principal, al que se accede pulsando el botón derecho del ratón, aunque algunas acciones se realizan directamente con el ratón.

[ Ventana principal del simulador ]
[ Ventana con información relativa al robot ]

Cliente: Controlador del robot móvil

Con la ayuda de un componente para la comunicación con el servidor Mobile Robot Simulator y un compilador que soporte ese tipo de componentes, pueden desarrollarse distintos tipos de controladores del robot móvil.

A modo de ejemplo, aquí presentamos un sencillo controlador manual que muestra los comandos básicos necesarios para taratr con el servidor, realizar movimientos en el robot y leer información de los sensores. El código completo de este controlador puede obtenerse en el apartado de Download.

[ Ventana del controlador de ejemplo ]

Servidor

Los botones de conexión y desconexión están asociados a dos llamadas del cliente: Connect y Disconnect, respectivamente. La primera requiere la dirección de la máquina en la que se está ejecutando el servidor (localhost en el ejemplo). ShowMessage muestra un mensaje en la línea de estado del servidor.


	ClientRobot->Connect("localhost");
	ClientRobot->Disconnect();
	ClientRobot->ShowMessage("Hello world!");

Movimientos del robot

Los comandos de movimiento utilizan dos llamadas del cliente: SetVel, para fijar las velocidades de avance y giro del robot, y Stop, para detener su movimiento. Éstos son algunos ejemplos de llamadas posibles. La primera hace que el robot avance a 10 pulgadas por segundo, la segunda que avance a esa misma velocidad y que gire a la izquierda a 30 grados por segundo, la tercera que gire a la derecha y la cuarta que se detenga.


	ClientRobot->SetVel(10, 0);
	ClientRobot->SetVel(10, -30);
	ClientRobot->SetVel(10, +30);
	ClientRobot->Stop();

Información sensorial

Hay cuatro posibles llamadas para leer la información sensorial. La primera GetSonar requiere que se le pase como parámetro el sensor del que se quiere conocer su medida. GetBumper indica si el robot está chocándose con algún objeto. GetBumperReal devuelve el sensor de contacto sobre el que se está produciendo la colisión. GetPos devuelve tres parámetros: la posición en x, la posición en y y la orientación del robot en el entorno.


	s = GetSonar(0);
	if (ClientRobot->GetBumper())
		b = ClientRobot->GetBumperRel();
	ClientRobot->GetPos(x, y, a);

Entornos vectoriales y de mapa de bits

Mobile Robot Simulator soporta dos tipos de ficheros para representar entornos: los vectoriales y los de mapa de bits. En los dos tipos de entornos, el espacio libre por el que puede moverse el robot se representa en blanco mientras que los obstáculos se representan en color negro.

Tanto en uno como en otro caso deben determinarse los límites del entorno mediante obstáculos ya que si no el robot podría salir de la ventana del servidor.

Entornos vectoriales

En los entornos vectoriales los objetos existentes en el entorno se indican mediante un fichero de texto en el que su primera línea indica las dimensiones del entorno y las restantes las coordenadas de los rectángulos utilizados para representar los objetos en el orden x1 (coordenada izquierda), y1 (coordenada superior), x2 (coordenada derecha) y y2 (coordenada inferior).

La ventaja de estos entornos es que pueden utilizarse en combinación de la opción Merge para mezclar varios entornos y así modificar parcialmente el entorno que se está utilizando.

El entorno que se muestra a continuación, tiene unas dimensiones de 300x300 pixels (cada pixel se corresponde con una pulgada). El primer objeto (el que delimita el entorno por la parte de arriba) se representa mediante un rectángulo desde la posición (0, 0) hasta la (300, 1). El resto de objetos siguen la misma norma.

[ Entorno vectorial ]   Ejemplo de entorno
300 300
0 0 300 1
0 298 300 300
0 0 1 300
298 0 300 300
50 98 250 103
0 200 100 205
200 200 300 205
100 0 105 53
100 155 105 250
200 155 205 250

Entornos de mapa de bits

Los entornos de mapa de bits se almacenan en ficheros BMP que pueden realizarse con la ayuda de cualquier editor gráfico compatible con este formato. La ventaja de este tipo de entornos es que pueden definirse fácilmente objetos cuyos lados no sean rectos. En la siguiente figura se muestran ejemplos de esta característica.

Los objetos se representan en negro y cualquier otro color (se recomienda el blanco) se interpreta como espacio libre. Por lo tanto, pueden utilizarse otros colores para pintar objetos o poner leyendas en diferentes zonas.

[ Entorno de mapa de bits ]

Protocolo de mensajes

Los mensajes intercambiados entre el servidor Mobile Robot Simulator y el programa cliente son cadenas de caracteres de diferente longitud y se dividen en tres tipos:

Mensajes de movimiento

Petición
Descripción
Respuesta
Vsaaasggg
El cliente solicita que el robot se desplace a una velocidad de avance a y a una velocidad de giro g.

El servidor responde con la etiqueta del comando cuando el robot ha pasado a la velocidad solicitada.

V = etiqueta que identifica el tipo de comando
s = signo que puede ser + o -
a = 3 dígitos para la velocidad de avance por 10
g = 3 dígitos para la velocidad de avance por 10
V
A
El cliente solicita que el robot se pare inmediatamente. Puede conseguirse el mismo resultado con el comando anterior.

El servidor responde con la etiqueta del comando cuando el robot se ha detenido.

A = etiqueta que identifica el tipo de comando
A

Mensajes de sensores

Petición
Descripción
Respuesta
Sxx El cliente solicita la medida del sensor de larga distancia x.

El servidor responde con la etiqueta del comando, el indicativo del sensor x y con la medida p.

S = etiqueta que identifica el tipo de comando
x = 2 dígitos para indicar el sensor
p = 3 dígitos para indicar la distancia en pulgadas

Sxxppp
B El cliente solicita la situación de los sensores de contacto.

El servidor responde con la etiqueta del comando y con el estado de los sensores c.

B = etiqueta que identifica el tipo de comando
c = 0 no hay colisión, 1 hay colisión

Bc
R El cliente solicita la situación de los sensores de contacto.

El servidor responde con la etiqueta del comando y con el indicativo del sensor cerrado x.

R = etiqueta que identifica el tipo de comando
x = 2 dígitos para indicar el sensor

Rxx
P El cliente solicita la posición y orientación del robot a partir de la realimentación odométrica.

El servidor responde con la etiqueta del comando la posición en x, la posición en y y la orientación a.

P = etiqueta que identifica el tipo de comando
x = 5 dígitos para la posición en x por 10 (pulgadas)
y = 5 dígitos para la posición en y por 10 (pulgadas)
a = 5 dígitos para la orientación por 10 (grados)

P(x5)(y5)(a5)

Mensajes del servidor

Petición
Descripción
Respuesta
Mtexto El cliente solicita que se visualice el texto en la línea de estado de la ventana del servidor.

El servidor responde con la etiqueta del comando cuando se ha visualizado el texto.

M = etiqueta que identifica el tipo de comando
texto = mensaje a visualizar

M

Créditos

Mobile Robot Simulator es completamente freeware aunque los usuarios que lo crean interesante y útil pueden enviar un e-mail a la dirección abajo indicada con comentarios, sugerencias y críticas. En breve se dispondrá de una versión bajo licencia GPL.

La distribución en cualquier medio está permitida siempre y cuando se mantengan el formato de ficheros y los mensajes de copyright y se avise previamente al autor del motivo por el que se va a distribuir y formato en el que tendrá lugar la distribución.

El autor no se responsabiliza de los daños que pueda llegar a ocasionar en los sistemas informáticos en los que se ejecute. La aplicación que se distribuye en estas páginas ha sido probada en diferentes entornos y plataformas mostrando el funcionamiento esperado.

Download


© Javier de Lope Asiaín 1998-2001
Última modificación
16-Oct-1998

FastCounter by bCentral