capÍtulo 5: programas para el nxt desde...

13
CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRS

Upload: others

Post on 13-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

CAPÍTULO 5:

PROGRAMAS PARA EL NXT

DESDE MSRS

Page 2: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

5.1 - PROGRAMA DE TRIBOT EXPLORADOR POR

ULTRASONIDOS

Ahora podemos pasar a comentar cómo realizar un programa mediante el cual, nuestro

robot se moverá de forma autónoma esquivando obstáculos11

.

Al igual que el programa anterior (de control mediante joystick), podemos ejecutarlo en

simulación o sobre un robot real. Puesto que vamos a ir enfocando cada vez más nuestro

trabajo al diseño del Lego NXT, partiremos del módulo específico que MSRS posee

para este robot: el NxtBrick Service.

Es muy importante notar que en función de que usemos un manifiesto real o de

simulación deberemos configurar las propiedades iniciales del módulo. En concreto, el

puerto serie por el que se debería conectar mediante Bluetooth con el robot real.

En principio, trataremos el problema como si fuera una conexión de este tipo con

nuestro propio tribot NXT.

Paso uno: Añadir un módulo de ultrasonidos.

El módulo en cuestión se denomina "Lego NXT Ultrasonic Sensor (v2)" e irá conectado

al puerto de sensores número 4 (esta especificación viene dada por el manual adjunto al

brick del NXT).

Le daremos al sensor un nombre y dejaremos la frecuencia de sondeo (Polling

Frequency) ajustada a 0, valor por defecto.

Page 3: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

Paso dos: Diferenciación de situaciones y toma de decisión.

La señal que emita el sensor de ultrasonidos será recibida por el programa, que deberá

distinguir entre tres casos: si tenemos un obstáculo a corta distancia, a media distancia o

si el terreno aparece despejado.

Para ello, seleccionamos un bloque “if” y diferenciamos entre una distancia inferior a 50

cm (corta), inferior a 90 cm (media) o superior a 90 cm (terreno despejado).

La orden mandada a los motores estará condicionada por la señal que se reciba desde el

sensor según el paso tres.

Seleccionaremos el nodo de notificaciones redondo del sensor de ultrasonidos y lo

arrastraremos para conectarlo al bloque “if”. Esto indica que capturaremos

notificaciones del sensor para su evaluación.

Al realizar la conexión se abrirá el cuadro correspondiente a las opciones de la misma.

Seleccionamos “From SonarSensorUpdate” y pulsamos OK.

Page 4: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

En el cuadro “if” escribiremos un espacio. Eso hará aparecer un menú desplegable que

indica los valores que están disponibles desde el sensor. Seleccionaremos “Distance <

50”, lo que significa “cuando la distancia sea inferior a 50 cm”.

Si presionamos el signo “+” en la esquina superior izquierda del bloque “if” podemos

añadir las otras dos condiciones: "Distance < 90" y "Else"

Page 5: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

Paso tres: Órdenes enviadas a los motores.

Usaremos tres módulos NxtDrive (uno para cada caso descrito anteriormente).

Obsérvese cómo se configuran las propiedades iniciales de estos módulos para hacerlos

compatibles con el diseño del tribot NXT: se conectará el motor izquierdo al puerto C y

el motor derecho al puerto B. Se ajustará la distancia entre ruedas

(DistanceBetweenWheels) a 0.112 y ambos diámetros de rueda (WheelDiameters) a

0.055. Se mantendrá el PollingFrequencyMs a 0 (valor que aparece por defecto).

Obviamente, si el diseño del robot es otro, habrá que tener en cuenta la nueva distancia

entre ruedas.

Ahora, para el caso de obstáculo a corta distancia, haremos que el robot gire 45 grados

para esquivarlo. Para ello, introducimos un valor entero de 45 como “RotateDegrees”.

Para ello, al conectar el bloque “if” con el motor seleccionaremos la siguiente opción en

el cuadro de diálogo:

Page 6: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

De esta forma, accederemos al menú de Data Connections, donde seleccionaremos

“Edit values directly”, 45 grados y media potencia (0.5)

Page 7: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

Para el caso de obstáculo a media distancia, se dará un valor del 30% de potencia al

motor izquierdo y otro del 60% al derecho (haciendo así que el tribot gire a la

izquierda). La conexión entre estos módulos será realizada como “SetDrivePower”.

Por último, en ausencia de nada que interfiera con el avance, se dará una potencia del

80% a los motores para que la marcha sea veloz en línea recta.

Page 8: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

El esquema general se puede ver a continuación para una mayor claridad del conjunto:

Está claro que el diseño está abierto a múltiples modificaciones. Por ejemplo, si

quisiéramos que el robot girase a la derecha en lugar de la izquierda, no habría más que

intercambiar los valores otorgados a los motores izquierdo y derecho en el caso de

obstáculos situados a distancias entre 50 y 90 cm.

5.2 - CONTROL MEDIANTE PID

Es obvio que podemos realizar cualquier tipo de control sobre nuestro robot desde un

programa realizado en MSRS. Un ejemplo típico sería el control PID.

Las tres componentes de un controlador PID son: parte Proporcional, acción Integral y

acción Derivativa. El peso de la influencia que cada una de estas partes tiene en la suma

final, viene dado por la constante proporcional, el tiempo integral y el tiempo

derivativo, respectivamente.

Page 9: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

La parte proporcional consiste en el producto entre la señal de error y la constante,

constante proporcional como para que hagan que el error permanente sea casi nulo

pero, en la mayoría de los casos, estos valores solo serán óptimos en una determinada

porción del rango total de control, siendo distintos los valores óptimos para cada

porción del rango. Sin embargo, existe también un valor límite en la constante

proporcional a partir del cual, en algunos casos, el sistema alcanza valores superiores a

los deseados.

El modo de control Integral tiene como propósito disminuir y eliminar el error en estado

estacionario, provocado por el modo proporcional. El error es integrado, lo cual tiene la

función de promediarlo o sumarlo por un periodo de tiempo determinado; luego es

multiplicado por una constante I. I representa la constante de integración.

Posteriormente, la respuesta integral es adicionada al módulo Proporcional para formar

el control P+I con el propósito de obtener una respuesta estable del sistema sin error

estacionario.

La acción derivativa se manifiesta cuando hay un cambio en el valor absoluto del error;

(si el error es constante, solamente actúan los modos proporcional e integral). El error

es la desviación existente entre el punto de medida y el valor consigna, o "Set Point". La

función de la acción derivativa es mantener el error al mínimo corrigiéndolo

proporcionalmente con la velocidad misma que se produce; de esta manera evita que el

error se incremente.

Se deriva con respecto al tiempo y se multiplica por una constante D y luego se suma a

las señales anteriores (P+I).

Puesto que existen multitud de proyectos de este tipo detallados en internet, no es objeto

de este trabajo desarrollar uno aparte. No obstante, comentaremos uno para dar una idea

de las posibilidades en este campo.

El robot APRIL (A Pid Robot Implemented with Lego)12

está compuesto por los

elementos típicos del tribot descrito anteriormente, incluyendo el sensor de ultrasonidos.

Este robot se ha programado con NXC13

, un lenguaje muy parecido a C, orientado a la

programación concurrente del NXT.

El objetivo del robot APRIL es mantener su posición relativa respecto a un objeto. Para

ajustar los parámetros que determinan el comportamiento del sistema, se realizaron

cambios basados en la observación del comportamiento en diversas pruebas.

Una vez iniciado el programa, el sensor mide la distancia inicial hasta el objeto de

referencia (setpoint). Cada vez que se ejecuta el bucle de programación, se mide la

distancia actual, se compara con el setpoint y se calcula el error con respecto al mismo.

Page 10: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

El término proporcional se calcula multiplicando este error por la constante de ganancia

proporcional. El término integral viene dado por la suma de los errores de cada

ejecución del bucle, lo que nos da una suma creciente y continua de errores que será

multiplicada por la constante de la ganancia integral. Por último, el término derivativo

se calcula usando la diferencia entre el error actual y el error del bucle previamente

ejecutado, multiplicado por su correspondiente constante.

Una vez que estos tres términos han sido generados, se suman y dividen por una cuarta

constante. Esta constante extra es requerida porque NXC no soporta valores flotantes.

La salida combinada representa el nivel de potencia al que será usado el motor. Por

tanto, este valor puede estar tanto por encima del 100% como ser negativo. Así pues, es

necesario el uso de una función de escalado que nos devuelva un valor positivo truncado

a un máximo del 100% y con un mínimo del 20%. Este mínimo del 20% es debido a

que un nivel de potencia inferior no permite mover el robot.

Finalmente, como conclusiones obtenidas de la experimentación con este robot, se

obtuvo un tiempo de reacción al error inicial bastante elevado. Aunque en un principio

se confió en que el término derivativo ayudase a reducirlo, resultó muy complicado

ajustar su valor (quizás debido al breve espacio de tiempo en que se ejecuta el bucle).

Finalmente, el valor óptimo de tiempo para el bucle parece haberse hallado entre 5Hz y

20Hz.

El código de programación con el que se realizaron estos experimentos14

es libre de ser

usado y modificado. Del mismo modo, su autor (Kevin McLeod) se muestra interesado

en cualquier uso que se le dé a su trabajo y ofrece su ayuda a través de su página.

5.3 - TRIBOT QUE ENCARE EL NORTE MEDIANTE BRÚJULA

HITECHNIK15

Este programa tiene como objetivo hacer que nuestro robot se encuentre siempre

apuntando hacia el Norte, mediante el uso de una brújula de la marca HiTechnic16

.

La señal que devuelve la brújula es la notificación CompassSensorUpdate, que retorna

la desviación en grados del sensor respecto del Polo Norte magnético. Si no encaramos

el Norte, calcularemos la velocidad de las ruedas en correlación a cómo de desviados

estamos del Norte y giraremos el Tribot hacia la dirección deseada.

Como se puede observar, el tipo de control ejercido es proporcional (mayor velocidad

en las ruedas para mayor desviación).

Page 11: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

Si estamos en movimiento, y ahora apuntamos al Norte, mostraremos un mensaje,

sonará un tono, y las ruedas se pararán. Después, actualizaremos el estado Moving a

false.

Page 12: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico
Page 13: CAPÍTULO 5: PROGRAMAS PARA EL NXT DESDE MSRSbibing.us.es/proyectos/abreproy/4566/fichero/CAPÍTULO+5+(PROGR… · trabajo al diseño del Lego NXT, partiremos del módulo específico

Es importante precisar que para poder ejecutar este archivo es necesario haber

actualizado el firmware del NXT a una versión 1.03 o superior.