Tamaño: 7964
Comentario:
|
Tamaño: 7240
Comentario:
|
Los textos eliminados se marcan así. | Los textos añadidos se marcan así. |
Línea 3: | Línea 3: |
Línea 5: | Línea 4: |
Línea 7: | Línea 5: |
Línea 10: | Línea 7: |
Línea 13: | Línea 9: |
{{attachment:trama.png | "" | width="250" }} | {{attachment:trama.png|""|width="250"}} |
Línea 24: | Línea 20: |
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 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. |
Línea 27: | Línea 23: |
* '''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 |
* '''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 |
Línea 37: | Línea 35: |
||'''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) || |
|
Línea 38: | Línea 65: |
|| '''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 || k || 0x6B || 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 || K || 0x4B || - || - || 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 valore 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) || |
|
Línea 69: | Línea 69: |
||'''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) || |
|
Línea 70: | Línea 81: |
|| '''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) || |
|
Línea 83: | Línea 85: |
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/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.
<img width="250" alt="" src="%ATTACHURL%/trama1.png"></img>
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