#acl BecariosGrupo:read,write,revert All:read = 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: {{attachment:trama.png|""|width="250"}} * 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/escavo, 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 ===