#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/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. {{attachment:trama1.png|""|width="250"}} '''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 ===