Bienvenido: Ingresar
location: Diferencias para "LabElectronica/ControlRomaaIIWeb"
Diferencias entre las revisiones 5 y 9 (abarca 4 versiones)
Versión 5 con fecha 2010-06-01 19:20:08
Tamaño: 7964
Comentario:
Versión 9 con fecha 2010-11-12 22:00:00
Tamaño: 7243
Editor: localhost
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 23: Línea 19:
Línea 24: Línea 21:
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/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.
Línea 27: Línea 24:
   * '''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 36:
||'''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 66:
|| '''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 70:
||'''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 82:
|| '''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 86:

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.

<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

Diagrama de flujo

None: LabElectronica/ControlRomaaIIWeb (última edición 2010-11-14 14:52:20 efectuada por TiN)