Sistema de control de a bordo del robot !RoMAA-II

Objetivos

Modos de funcionamiento

Comunicación

Trama

La trama de petición de datos de la PC de abordo, está representada en el siguiente gráfico:

Representa el byte de Inicio de Trama.

# Es un número entero, que indica la cantidad de bytes que se envian (no se tiene en cuenta el Inicio de Trama).

C Representa los distintos Comandos de Petición de la PC de abordo.

Datos son los datos, los cuales pueden ser, ninguno, 1 char, 2 float (8 char), 3 float (12 char) o 2 int (8 char)

Borrador

La comunicación entre la PC a bordo y el controlador embebido del robot !RoMAA se realiza a través del puerto serie (RS232), utilizando una trama predefinida. La comunicación es del tipo maestro/esclavo, siendo la PC a bordo el maestro y el controlador embebido el esclavo. La trama utilizada varía ligeramente dependiendo si corresponde de un comando enviado de la PC al controlador embebido o si son datos que devuelve el controlador.

La trama de comandos de la PC a bordo al controlador tiene el siguiente formato

primer byte : comienza siempre con un byte de inicio de trama, más precisamente el caracter ASCII del asterisco ('*' = 0x2A)

segundo byte : indica el tamaño de la trama sin incluir el byte de inicio de trama

tercer byte : indica el comando que debe ejecutar el controlador embebido utilizando, si es debido, los bytes de datos de la trama

el siguiente esquema muestra la trama.

La trama enviada por el controlador embebido a la PC no tiene el campo "comando" (3er byte) .

Los comandos disponibles se indican en la siguiente tabla

comando	ASCII	hexa	*# bytes de datos*	bytes de datos	descripción
Reset	r	0x72	-	-	Reset general de todas las variables del controlador
Modo de lazo abierto	o	0x6F	-	-	En lazo abierto se controla mediante comandos de PWM
Modo de lazo cross-coupling	c	0x63	-	-	Fija el modo lazo cerrado para comandos de (v,w)
Modo lazo cerrado de motores	f	0x66	-	-	Lazo cerrado de motors (sin cross-coupling), funciona con comandos de vel. de motores
Petición de modo	e	0x65	-	-	Petición del modo actual del funcionamiento
Habilitación de motores	h	0x68	-	-	Habilita los motores, para responder a los comandos
Deshabilitación de motores	H	0x48	-	-	Deshabilita los motores
Fijar PID de los motores	m	0x6D	12	3 números en punto flotante (Kp,Ki,Kd)	Fijar fila las constantes Kp, Ki y Kd de los controladores PID de los motores
Petición de PID de los motores	M	0x4D	-	-	Petición de las constantes Kp, Ki, y Kd de los controladores PID de los motores
Fijar PID del lazo cross-coupling	v	0x76	12	3 números en punto flotante (Kp,Ki,Kd)	Fijar fila las constantes Kp, Ki y Kd de los controladores PID del cross-coupling
Petición de PID de los motores	V	0x56	-	-	Petición de las constantes Kp, Ki, y Kd de los controladores PID del cross-coupling
Fijar velocidad	s	0x73	1.	2 números en punto flotante, (v,w)	Fijar la velocidad lineal y angular del robot
Petición de velocidad	S	0x53	-	-	Petición de la velocidad lineal y angular actual del robot
Fijar velocidad de los motores	w	0x77	1.	2 números en punto flotante (v1,v2)	Fijar velocidad lineal de cada uno de los motores indep.
Fijar PWM	p	0x70	1.	2 números enteros de PWM	Fija el valor de PWM para cada motor (pwm1,pwm2) en modo lazo abierto
Petición PWM	P	0x50	-	-	Petición de los valores de PWM de cada motor
Fijar valores de odometría	y	0x79	12	3 números en punto flotante (x,y,theta)	Fijar valor de odometría, posición y orientación (x,y,theta)
Petición de odometría	Y	0x59	-	-	Petición del valor de odometría (x,y,theta)
Reset de odoemtría	z	0x7A	-	-	Borrar los valores de odometría (x,y,theta)=(0,0,0)
Fijar tiempo de cierre de lazo	t	0x74	1.	Valor de 0-255 en milisegundos	Fijar el tiempo en el que se ejecuta el lazo de control
Petición tiempo de cierre de lazo	T	0x54	-	-	Petición de tiempo de cierre de lazo
Fijar tiempo de logging	l	0x6C	1.	Valor de 0-255 en milisegundos	Fijar el tiempo en que el controlador envía los datos en logging
Petición de tiempo de logging	L	0x4C	-	-	Petición del tiempo de logging de datos
Fijar tiempo de calc. de odom.	x	0x78	1.	Valor de 0-255 en milisegundos	FIjar el tiempo en el que se calcula la odometría
Petición tiempo de calc. de odom.	X	0x58	-	-	Petición del tiempo del cálculo de odometría
Fijar constantes cinemáticas	k	0x6B	1.	2 números en punto floatante (r,b)	Fijar valores cinemáticos, r:radio de la rueda y b:dist. entre ruedas
Petición de const. cinemáticas	K	0x4B	-	-	Petición de valores cinemáticos
Petición de la geometría del robot	G	0x47	-	-	Petición de las dimensiones geométricas del robot (w,l,h)

La trama de datos utilizada por el controlador embebido para responder a los comandos (de petición) de la PC de abordo difiere de la anterior únicamente en la ausencia del tercer byte (byte de comando). Las tramas disponibles son

resp. al comando	*# bytes de datos*	bytes de datos	descripción
Petición del modo de lazo	1	1 byte que indica el modo	modo
Petición de PID de motores	12	3 números en punto flotante	El controlador responde enviando los valores Kp, Ki, y Kd del controlador PID de los motores
Petición de PID de cross-coupling	12	3 números en punto flotante	El controlador responde enviando los valores Kp, Ki, y Kd del controlador PID de cross-coupling
Petición de velocidad	1.	2 números en punto flotante	El controlador responde enviando la velocidad lineal y angular actual del robot
Petición de PWM	1.	2 números enteros	El controlador responde enviando los valores de PWM de cada motor
Petición de odometría	12	3 números en punto flotante (x,y,theta)	El controlador responde enviando el valor de odometría (x,y,theta)
Petición de contadores de encoders	1.	2 números enteros	El controlador responde con las cuentas de los encoder (enc1,enc2)
Petición de vel. lineal de las ruedas	1.	2 números en punto flotante	El controlador responde las velocidades lineales de cada rueda (v1,v2)
Petición de vel. angular de las ruedas	1.	2 números en punto flotante	El controlador responde con las velocidades angulares de cada rueda (w1,w2)
Petición de despl. lineal de las ruedas	1.	2 números en punto flotante	El controlador responde con los despl. lineales de cada rueda (l1,l2)

Comandos

Software embebido

Diagrama de flujo