TITULACIÓN: Máster en Ingeniería...
Transcript of TITULACIÓN: Máster en Ingeniería...
DISEÑO, SIMULACIÓN Y CONSTRUCCIÓN DE UN SISTEMA CARRO‐PÉNDULO MEDIANTE LA TECNOLOGÍA LEGO
TITULACIÓN: Máster en Ingeniería Electrónica
AUTOR: Alex Calvó Gallego DIRECTOR: Albert Oller Pujol
FECHA: Septiembre de 2012
Prólogo y agradecimientos
Este proyecto ha sido realizado debido al interés personal acerca de diversos temas
relacionados con la robótica y con mis estudios cursados, de entre los que cabe destacar:
En primer lugar, un interés en los sistemas self-balancing en general, que se ha
acrecentado por el reciente auge de los vehículos personales Segway
(http://www.segway.com/) y muchas de sus variantes que están apareciendo actualmente.
En segundo lugar, la motivación por integrar los nuevos conocimientos adquiridos en la
realización del Máster en Ingeniería Electrónica y enlazarlos con los conocimientos
previamente adquiridos en la carrera Técnica.
En tercer lugar, el interés por realizar un proyecto en el que se trabaje con alguna
técnica de control. El motivo de este interés es una consecuencia del nuevo plan de estudios,
puesto que en el Máster en Ingeniería Electrónica se han extinguido dos asignaturas de control
que estaban presentes en la carrera Superior.
En cuarto y último lugar, el deseo de realizar un proyecto que surgiera de una
propuesta personal por el hecho de realizar una variación respecto al proyecto presentado en
la carrera Técnica, cuya temática estaba predeterminada.
Todos los intereses y motivaciones anteriores han hecho posible la realización de este
proyecto, en el que debo destacar la tutela realizada por el Dr. Albert Olleg Pujol, a quien
agradezco la ayuda prestada y los conocimientos que ha compartido a lo largo de la realización
del proyecto.
Índice
Índice
1. Introducción ............................................................................................... 6
1.1. ¿Qué es Lego Mindstorms NXT 2.0? ...........................................................................7
1.2. ¿Porqué se ha escogido la plataforma Lego Mindstorms NXT 2.0? .............................8
1.3. Antecedentes del sistema carro-péndulo con LEGO Mindstorms ...............................9
1.3.1. A LEGO-Based Control Experiment.....................................................................9
1.3.2. NXTWay-G, Ryo Watanabe .............................................................................. 10
1.3.3. Otros proyectos................................................................................................ 11
1.4. Factor diferenciador de este proyecto ..................................................................... 12
2. Modelo teórico del sistema carro-péndulo .......................................... 13
2.1. Introducción al sistema carro-péndulo (cart-pole) ................................................... 13
2.2. El péndulo como masa puntual o el péndulo como varilla ........................................ 14
2.3. Tipos de modelos utilizados para la descripción del sistema .................................... 15
2.4. Análisis del sistema carro-péndulo........................................................................... 16
2.4.1. Ecuaciones que describen el sistema carro-péndulo.......................................... 17
3. Simulación del sistema carro-péndulo .................................................. 22
3.1. Matlab como herramienta de simulación................................................................. 22
3.2. Obtención de los parámetros del modelo ................................................................ 26
3.2.1. Obtención de la masa del péndulo.................................................................... 26
3.2.2. Obtención de la masa del carro ........................................................................ 27
3.2.3. Determinación de la longitud del péndulo ........................................................ 28
3.3. Simulaciones ........................................................................................................... 31
3.3.1. Lugar geométrico de las raíces con la planta linealizada ................................ 31
3.3.1.1. Linealización de la planta .......................................................................... 31
3.3.1.2. Simulación con Sisotool ............................................................................ 33
3.3.1.3. Verificación del LGR mediante el análisis de la respuesta .......................... 35
3.3.1.3.1. Modelo en Simulink creado ................................................................... 35
3.3.1.3.2. Simulación de la planta linealizada con control proporcional ................. 37
3.3.2. Simulación en dominio temporal continuo de la planta no linealizada ........... 39
3.3.2.1. Modelo que se va a simular ...................................................................... 39
Índice
3.3.2.2. Sintonizador de PID de Matlab ................................................................. 41
3.3.2.3. Restricciones de nuestro sistema.............................................................. 44
3.3.2.3.1. Restricciones en el ángulo del péndulo .................................................. 44
3.3.2.3.2. Restricciones en el actuador (motor LEGO Minstorms NXT 2.0) .............. 44
3.3.2.4. Sintonizador PID de Matlab con las restricciones de nuestro modelo........ 46
3.3.2.5. Simulación del sintonizador de PID ........................................................... 48
3.3.2.6. Verificación de los valores obtenidos del sintonizador .............................. 50
3.3.2.6.1. Respuesta a un ángulo inicial ................................................................ 50
3.3.2.6.2. Respuesta a una perturbación ............................................................... 54
3.3.2.7. Adición de restricciones en el actuador .................................................... 56
3.3.3. Simulación en dominio temporal continuo de la planta linealizada ................ 59
3.3.3.1. Respuesta de la planta linealizada utilizando el PID anterior ..................... 59
3.3.3.2. Modificación de los parámetros del PID.................................................... 61
3.3.4. Discretización del sistema y simulación ........................................................... 64
3.3.4.1. Discretización de la planta y del controlador............................................. 64
3.3.4.2. Simulaciones con la planta y el controlador discretizados ......................... 66
3.3.4.2.1. Simulación con el PID obtenido de la planta no linealizada .................... 66
3.3.4.2.2. Simulación con el PID obtenido de la planta linealizada ......................... 67
4. Pruebas en el sistema real ..................................................................... 72
4.1. Construcción física del robot.................................................................................... 72
4.2. Entorno de programación ........................................................................................ 74
4.3. Programación del sistema de control del robot ........................................................ 75
4.4. El sensor: el giroscopio ............................................................................................ 76
4.4.1. HiTechnic Gyro Sensor ..................................................................................... 76
4.4.1.1. Pruebas estáticas realizadas con el giroscopio de HiTechnic ..................... 78
4.4.1.2. Pruebas dinámicas realizadas con el giroscopio de HiTechnic ................... 81
4.5. Código final ............................................................................................................. 85
4.6. Pruebas finales del robot ......................................................................................... 89
4.6.1. Comportamiento del robot sin perturbaciones ................................................. 89
4.6.2. Comportamiento del robot frente a perturbaciones.......................................... 93
5. Conclusiones............................................................................................. 95
5.1. Posibles mejoras ...................................................................................................... 96
6. Anexos ...................................................................................................... 98
Índice
6.1. Anexo 1: Información sobre LEGO Mindstorms NXT 2.0 ........................................... 98
6.2. Anexo 2: Códigos de Bricx Command Center.......................................................... 100
6.2.1. Código para la prueba de velocidad del robot................................................. 100
6.2.2. Código para la prueba de velocidad del robot................................................. 100
6.2.3. Código para las pruebas del giroscopio de HiTechnic ...................................... 101
6.2.4. Código final para mantener en equilibrio el robot........................................... 102
6.3. Anexo 3: Instrucciones de montaje del robot ......................................................... 105
6.4. Anexo 4: Documentos de Microsoft Excel .............................................................. 105
6.5. Anexo 5: Simulaciones de Matlab .......................................................................... 105
7. Referencias............................................................................................. 107
Introducción
6
1. Introducción
Este proyecto, titulado Diseño, simulación y construcción de un sistema carro-péndulo
mediante la tecnología Lego, tiene por objetivo el desarrollo del proceso completo de
modelización, simulación e implementación de un sistema de control automático de la
oscilación de un péndulo sobre una base móvil (también conocido como Cart-pole), aplicado
sobre un robot construido con la plataforma Lego Mindstorm.
Los apartados en los que se ha estructurado son los siguientes:
Figura 1: Esquema básico
1. Obtención de un modelo teórico: Es la descripción mediante ecuaciones de la dinámica
del sistema cart-pole que se propone realizar, la modelización del sistema real.
2. Simulación del sistema: A partir de las ecuaciones obtenidas para la descripción del
sistema, se realizará una simulación de su comportamiento y se obtendrá el sistema de
control que permitirá al robot mantener el equilibrio.
3. Implementación en el sistema real: Comprende la construcción física del modelo y la
utilización del control obtenido en la simulación del sistema para actuar sobre el modelo
real.
Los tres apartados se realizarán de forma secuencial, aunque entre la simulación y la
implementación existirá una estrecha relación bidireccional, puesto que ciertos parámetros de
la simulación se obtendrán mediante experimentos con el sistema real, con la finalidad de
aumentar la similitud en cuanto a resultados entre ambos apartados.
Quizá el hecho que más pueda sorprender en un primer momento es la elección de
una plataforma como Lego Mindstorm NXT 2.0, puesto que existe una gran diversidad de
implementaciones físicas para realizar un montaje con el que llevar a cabo el objetivo de
controlar un sistema carro-péndulo. Por ello, el primer paso realizado será conocer esta
plataforma para poder justificación su elección.
Introducción
7
1.1.¿Qué es Lego Mindstorms NXT 2.0?
LEGO Mindstorms es un kit de robótica educativa desarrollado por LEGO en
colaboración con National Instruments. Concretamente, la versión NXT 2.0 es la evolución de
la anterior versión NXT, que a su vez era la evolución de la versión RCX.
Figura 2: Evolución desde LEGO Mindstorm RCX hasta LEGO Mindstorm NXT 2.0
Información acerca de LEGO Mindstorms existe y en grandes cantidades en internet,
por lo que únicamente se ha consultado los aspectos de mayor interés a lo largo de la
realización de este proyecto.
En resumen, se trata de un sistema completo de sensores (algunos básicos de LEGO y
otros desarrollados por fabricantes externos), actuadores (básicamente motores) y CPU, que
junto con la sencillez en la construcción física gracias a los bloques LEGO, permite disponer de
una herramienta de programación y experimentación muy potente y con un coste
relativamente bajo respecto con algunas maquetas de laboratorio actuales. Para más
información acerca de los sensores, actuadores y CPU consultar [1].
Contrariamente a lo que se pueda imaginar en un primer momento, no se trata de un
juguete, y se puede demostrar simplemente con una rápida búsqueda en Internet para
encontrar proyectos de ingeniería de control avanzada [2], tal y como se pretende hacer en
este proyecto.
Por ello esta herramienta está siendo aceptada como una herramienta para la
docencia y se están realizando actualmente competiciones a nivel preuniversitario, como la
FIRST LEGO League [3].
Una vez conocemos qué es LEGO Mindstorms NXT 2.0, la siguiente cuestión será
justificar su elección en la realización de este proyecto, como se muestra a continuación.
Introducción
8
1.2.¿Porqué se ha escogido la plataforma Lego Mindstorms NXT 2.0?
Como se ha comentado anteriormente, una de las principales ventajas de la elección
de Lego Mindstorms NXT 2.0 es que es un “ecosistema”: dispone de todos los elementos
necesarios para la realización de este proyecto, con un coste relativamente asequible.
Figura 3: Ecosistema LEGO Mindstorms NXT 2.0
Si intentáramos montar el sistema carro-péndulo con componentes individuales, de
distintos fabricantes, etc. el trabajo sería realmente muy extenso y de una dificultad muy
elevada, no únicamente por el montaje mecánico, sino por el funcionamiento conjunto de
todos los elementos, por su compatibilidad, etc.
El objetivo de este proyecto no es el montaje del robot que simula el sistema carro-
péndulo, sino su programación. Nos vamos a centrar en el estudio y la programación de este
sistema, por lo que la implementación física debe ser lo más sencilla posible. La estructura
física no va a ser el centro de atención en este proyecto.
Por lo tanto se ha determinado que la elección de la plataforma LEGO Mindstorm NXT
2.0 es la opción más adecuada por los siguientes motivos:
- En primer lugar, por la sencillez de la implementación física del robot.
- En segundo lugar, por la compatibilidad entre sensores, actuadores y CPU.
- En tercer lugar, por la facilidad de programación puesto que existe una gran
variedad de entornos para programar el Brick (CPU).
En el anexo 1 se encuentra disponible la información más importante sobre LEGO
Mindstorms NXT 2.0 para la realización de este proyecto.
Por lo tanto, tras justificar la elección de este sistema para desarrollar este proyecto, a
continuación veremos algunos de los antecedentes que existen relacionados con el desarrollo
del sistema que se propone.
Introducción
9
1.3.Antecedentes del sistema carro-péndulo con LEGO Mindstorms
Desde la aparición de la plataforma LEGO Mindstorms en todas sus versiones (RCX,
NXT y NXT 2.0), se ha desarrollado multitud proyectos, cada uno con su propia metodología,
cuyo objetivo era la construcción y programación de un robot equilibrista.
1.3.1. A LEGO-Based Control Experiment
Sin duda el primer referente que apareció fue el
siguiente artículo: A LEGO-Based Control Experiment [4],
que apareció posteriormente en la revista de automática y
control IEEE Control Systems Magazine, a finales de 2004.
Sus autores eran Peter Gawthrop, miembro y profesor del
Departamento de Ingeniería Mecánica de la Universidad de
Glasgow, y Euan McGookin, tambien profesor y miembro
del Departamento de Ingeniería Eléctrica y Electrónica de la
misma universidad.
El experimento que realizaron era un sistema carro-
péndulo montado sobre la plataforma LEGO Mindstorms
RCX, el modelo más avanzado en ese momento. Sin entrar
en muchos detalles, surgieron problemas muy variados
debido a las limitaciones de los sensores del RCX. Por
ejemplo, el sensor de ángulo tenía una resolución muy baja,
de 22,5°; los motores no disponían de tacómetros para
determinar la velocidad angular y la posición (necesarios
para el caso de querer realizar un control de posición), etc.
Todas las dificultades que surgieron se superaron gracias a la utilización de elementos
externos al entorno RCX, y el modelo resultó ser operativo.
Como se ha comentado, la mayoría de dificultades surgieron debido a las limitaciones
en cuanto a sensores y actuadores de la plataforma existente en ese momento, el RCX. A
medida que salieron al mercado los nuevos modelos, como el NXT, el NXT 2.0 actual, y el
futuro NXT 3.0, estos problemas se fueron solucionando gracias a la compatibilidad de
sensores de fabricantes externos.
Avanzando temporalmente, uno de los experimentos más importantes de un carro-
péndulo con una versión más moderna de Mindstorm NXT es el experimento realizado por Ryo
Watanabe: el NXTWay-G, que se muestra a continuación.
Figura 4: A LEGO-Based Control Experiment
Introducción
10
1.3.2. NXTWay-G, Ryo Watanabe
Este experimento, realizado por el japonés Ryo Watanabe a principios de 2007, fue una de las grandes atracciones de LEGO Mindstorm para un público más interesado en la robótica.
En este experimento, como se puede observar en la imagen ya se utiliza la versión NXT
de Mindstorms. La principal novedad es la utilización de un giroscopio para la obtención de la velocidad angular de caída del robot para realizar el control. También se utiliza una cámara para evitar el choque contra paredes u otros objetos.
Pese a ser una versión más avanzada de Mindstorms NXT, algunos de los sensores
utilizados, como el giroscopio, tuvieron que adecuarse a la plataforma de LEGO de forma casera, puesto que todavía no existía el sensor giroscópico de Hi-Technic (el que se utilizará en este proyecto).
El robot equilibrista presentado por Ryo Watanebe supuso un antes y un después en la
creación experimental con LEGO Mindstorm. Este robot, además de mantener el equilibrio sobre dos ruedas, también tenía un control de posición. Mediante un mando de videoconsola conectado por USB a un ordenador, se le enviaba a través de una conexión Bluetooth las órdenes de movimiento.
Ryo Watanabe también realizó un estudio completo del comportamiento de los
motores de Lego NXT. Los datos obtenidos de estos experimentos se utilizaron en muchos experimentos posteriores para la modelización de los motores.
Lamentablemente la página web de Ryo Watanabe donde exponía todo el estudio realizado, así como el diseño y construcción del NXTWay-G se ha cerrado recientemente debido al fracaso del proyecto de la nube MobileMe, lugar donde se encontraba alojado el proyecto.
Figura 5: NXTWay-G de Ryo Watanabe
Introducción
11
1.3.3. Otros proyectos
Los dos proyectos comentados anteriormente son los más conocidos de todos los que
se han realizado con la plataforma LEGO Mindstorms.
Otros ejemplos de proyectos similares al que se va a realizar son los siguientes:
- NXT Two Wheels balancing robot tricks & keys [5]: se trata de un proyecto muy
similar al que se va a realizar. Utiliza el sensor giroscópico de Hi-Technic y un PID
para realizar el control.
- Get up, NXTway! [6]: en este caso es un proyecto que utiliza el sensor de luz para
mantener el equilibrio, del mismo modo que el famoso NXT Segway with Rider [7].
- NXTway-GS (Self-Balancing Two-Wheeled Robot) Controller Design [8]: este
proyecto es el más completo que podemos encontrar en internet. Se trata de la
simulación del sistema en Matlab, con el añadido que a partir de la simulación, en
Matlab se compila el código y se puede grabar en el brick de LEGO. Además cuenta
con una simulación visual de la dinámica del robot.
- Steve’s Legway [9]: se trata de un segway creado con LEGO Mindstorm RCX.
Además de mantenerse sobre dos ruedas, es capaz de realizar también la función
sigue-lineas (line follower).
Figura 6: de izquierda a derecha: NXT Two Wheels balancing robot tricks & keys [5], Get up, NXTway! [6], NXT Segway with Rider [7], NXTway-GS (Self-Balancing Two-Wheeled Robot) Controller Design [8], Steve’s Legway [9]
Introducción
12
1.4.Factor diferenciador de este proyecto
Ahora ya conocemos que es LEGO Mindstorms NXT 2.0, porqué se ha decidido utilizar
esta plataforma y los antecedentes en cuanto a proyectos similares. La pregunta que nos podríamos plantear es la siguiente: ¿Por qué realizar este proyecto si ya se han realizado proyectos muy similares?
La respuesta a esta pregunta es la siguiente: La principal novedad que supone este proyecto respecto a los anteriormente
comentados es el deseo de realizar y cerrar un ciclo completo: En la mayoría de proyectos anteriores, no se ha unido la simulación con la
implementación, es decir, no ha habido un apartado de simulación teórica, y por lo tanto, los valores obtenidos para realizar el control del sistema carro-péndulo se han determinado experimentalmente, mediante un método de prueba-error. No se ha realizado el estudio teórico del sistema para determinar los valores del sistema de control.
Como se ha comentado anteriormente, en la mayoría de proyectos no se ha realizado
este estudio, pero ha habido algunos en los que sí se ha realizado. Pese a ello, cada estudio realizado ha sido diferente, ya sea por diferencias en el modelo teórico realizado o por diferencias en el sistema de control utilizado para mantener el equilibrio del sistema.
Por lo tanto, el objetivo de este proyecto no es únicamente conseguir que el robot se
mantenga en equilibrio, sino conocer el comportamiento del sistema mediante las simulaciones y poder implementar el control obtenido en las simulaciones sobre el sistema real.
Para ello, el primer paso que se realizará en este proyecto será la obtención de un
modelo matemático con el que se describirá la dinámica del sistema cart-pole, para poder llevar a cabo posteriormente una simulación.
Modelo teórico del sistema carro-péndulo
13
2. Modelo teórico del sistema carro-péndulo
2.1.Introducción al sistema carro-péndulo (cart-pole)
El sistema carro-péndulo es una variante del sistema de péndulo invertido.
El péndulo invertido es un problema clásico que se formula en dinámica y en teoría de
control, y que consiste en mantener una cierta masa en equilibrio por encima del eje de
rotación del sistema.
El sistema carro-péndulo es un sistema de péndulo invertido en el cual se utiliza una
base móvil (el carro) para conseguir mantener la masa (el péndulo) en equilibrio.
Figura 7: Sistema carro-péndulo
El análisis teórico que se va a realizar de este sistema ya se ha tratado en muchas
ocasiones. Sobre la modelización de este sistema ya existe mucha información, desde
contenido web hasta la publicación de diversos artículos en revistas especializadas.
Se trata de un sistema complejo sobre el que existen diversas soluciones para
modelarlo. Todas las soluciones son válidas pero presentan ciertas diferencias, ya sea por el
método utilizado para la representación de la dinámica del sistema o por el grado de
aproximación utilizado. Por ello, los resultados son distintos aunque conservan un cierto grado
de similitud.
Pese a la variedad en cuanto a la modelización del sistema se refiere, existe una
primera distinción que debemos realizar con la finalidad de centrarnos en mayor medida en un
tipo de modelización o en otro: la distinción entre un sistema en el que el péndulo se modele
como una masa puntual o un sistema en el cual la masa del péndulo se reparta a lo largo de
una varilla, como se explicará a continuación.
Modelo teórico del sistema carro-péndulo
14
2.2.El péndulo como masa puntual o el péndulo como varilla
Es la primera distinción que debemos realizar con la finalidad de obtener el modelo
teórico deseado del sistema.
En primer lugar, se puede considerar el péndulo
como una masa puntual, es decir, toda la masa del péndulo
se encuentra concentrada en un punto, y la unión entre este
punto de masa (el péndulo) y la base del sistema (el carro)
es una barra de masa despreciable.
Como consecuencia, al tratarse de una barra de
masa despreciable el único factor de importancia de esta
barra es la longitud a la que se encuentra el péndulo
respecto del carro. En cuanto a dinámica se refiere, esta
barra no añadiría ningún término a las ecuaciones puesto
que su masa es nula.
En segundo lugar, se puede considerar el péndulo
como una varilla, es decir, la masa del péndulo se reparte
uniformemente a lo largo de una varilla de longitud
determinada pero sin anchura ni profundidad. Esta varilla
está conectada en uno de sus extremos a la base del
sistema, el carro.
Como consecuencia, al realizar la modelización de
este sistema, aparecen términos de inercias relacionados
con la dinámica de la varilla, y por ello las ecuaciones del
sistema se complican respecto a la consideración anterior
del péndulo como masa puntual.
Pese a que las ecuaciones que describen el sistema se compliquen, este último será el
sistema utilizado para llevar a cabo la modelización del sistema por el hecho de que permite
obtener un mayor grado de aproximación al sistema real que se pretende montar y analizar.
Aún así la modelización del sistema no dejará de ser una aproximación al modelo real,
puesto que en el modelo real el péndulo (que corresponde al cuerpo del robot) no será una
varilla, aunque se intentará realizar un montaje con el que se obtenga una mayor similitud a
una varilla.
El siguiente paso a realizar será el análisis del sistema carro-péndulo considerando el
péndulo como una varilla.
Figura 8: Péndulo como masa puntual
Figura 9: Péndulo como varilla
Modelo teórico del sistema carro-péndulo
15
2.3.Tipos de modelos utilizados para la descripción del sistema
Como se ha comentado con anterioridad, este sistema ha sido objeto de numerosos
estudios documentados. Pese a que en cada uno de estos estudios se utiliza una metodología
concreta, las soluciones obtenidas presentan dos tendencias.
En primer lugar, tenemos las soluciones que representan la dinámica del sistema
mediante utilizando el Lagrangiano [10], que es una función matemática a partir de la cual
podemos obtener la evolución temporal del sistema.
Como ejemplo de la descripción matemática del modelo utilizando el Lagrangiano
podemos ver el artículo Cart-pole system: Equations of motion [11], de la asignatura Robot
Locomotion de la Universidad de Santa Bárbara, California.
En segundo lugar, existen los modelos en los que las ecuaciones de movimiento del
sistema se describen en variables de estado pero no se representan mediante el Lagrangiano.
La opción que se ha escogido para la representación del modelo carro-péndulo ha sido
la segunda, y los motivos de esta elección son los siguientes:
El primer y principal motivo es el desconocimiento en la representación del sistema
mediante el modelo Lagrangiano, puesto que no la he tratado en ninguna asignatura de los
estudios cursados.
El segundo motivo es el conocimiento sobre la descripción del sistema mediante las
variables de estado del mismo, contenido que he cursado recientemente en la asignatura de
Modelización y simulación de sistemas dinámicos del Máster en Ingeniería Electrónica.
Por lo tanto, el siguiente paso será realizar la descripción del sistema carro-péndulo,
considerando el péndulo como una varilla y obteniendo las ecuaciones en variables de estado.
Modelo teórico del sistema carro-péndulo
16
2.4.Análisis del sistema carro-péndulo
Como se ha comentado anteriormente, la obtención de las ecuaciones que nos
permitan simular la evolución temporal del sistema ha sido objeto de numerosos estudios.
Además, se trata de un sistema complejo que requiere unos conocimientos de física
avanzados. Por estos motivos, para la descripción del sistema se recurrirá a uno de los estudios
realizados.
Para analizar el sistema carro-péndulo y obtener las ecuaciones que describen su
dinámica se utilizará el documento realizado por Razvan V.Florian [12], del Center for Cognitive
and Neural Studies (Coneural, Romania).
El análisis de este sistema se realizó debido a que uno de los posibles usos de un
sistema carro-péndulo es el testeo de algoritmos de aprendizaje.
El estudio que se realizó es una reformulación de estudios anteriores debido a que en
éstos se detectaron algunos errores que se propagaron a estudios posteriores.
Concretamente, uno de los estudios de mayor importancia en el que aparecían algunos errores
fue el que realizó Andrew G. Barto [13].
A continuación se describirá el proceso a seguir para la obtención de las ecuaciones
correctas de la dinámica del sistema carro-péndulo.
Modelo teórico del sistema carro-péndulo
17
2.4.1. Ecuaciones que describen el sistema carro-péndulo
En primer lugar se muestra el dibujo esquemático del sistema que vamos a analizar:
Figura 10: Esquema del sistema carro-péndulo con fuerzas que intervienen
Las fuerzas y los parámetros que intervienen en el sistema carro-péndulo son:
Variable Descripción
N Fuerza normal de reacción del carro sobre el péndulo en la unión entre ambos.
-N Fuerza normal de reacción del péndulo sobre el carro (debido a la ley de acción-reacción).
Nc Fuerza normal de la superficie sobre el carro.
F Fuerza aplicada para mover el carro.
Ff Fuerza de fricción entre el carro y la superficie sobre la que se desplaza.
Gc Fuerza de la gravedad sobre el carro.
Gp Fuerza de la gravedad sobre el péndulo.
θ Ángulo de desviación del péndulo respecto a la posición de equilibrio.
ω Velocidad angular del péndulo.
Aceleración angular del péndulo.
mc Masa del carro.
mp Masa del péndulo.
ac Aceleración lineal del carro.
ap Aceleración lineal del péndulo.
l Distancia desde la unión entre el carro y el péndulo hasta el centro de masas del péndulo.
g Aceleración gravitatoria.
µc Coeficiente de fricción entre la superficie y el carro.
µp Coeficiente de fricción de la articulación que une el carro con el péndulo.
I Momento de inercia del péndulo relativo a la articulación
M Sumatorio de los pares no inerciales que actúan en el péndulo respecto a la articulación que lo une con el carro.
Tabla 1: Fuerzas y parámetros del sistema carro-péndulo
Modelo teórico del sistema carro-péndulo
18
A continuación se describe el proceso para la obtención de las ecuaciones de
movimiento del sistema en variables de estado:
En primer lugar, aplicando la segunda ley de Newton [14] al movimiento lineal del carro
obtenemos la siguiente ecuación:
El siguiente paso consiste en descomponer las fuerzas y la aceleración de la ecuación
(1) en sus términos correspondientes en eje ‘x’ y en eje ‘y’. Teniendo en cuenta que ux y uy son
los vectores unitarios.
De este modo, podemos reescribir la ecuación (1) separándola en dos ecuaciones, una
para cada eje:
De las ecuaciones anteriores debemos encontrar expresiones para los términos Ff, Nx,
Ny y Nc.
Podemos reescribir la fuerza de fricción utilizando el modelo de Coulomb de fricción
[15], teniendo en cuenta que la superficie limita el movimiento del carro hacia arriba y hacia
abajo. La fuerza de fricción será:
En segundo lugar, aplicando la segunda ley de Newton [14] al movimiento lineal del
péndulo obtenemos la siguiente ecuación:
(6)
Del mismo modo que en el caso del carro, procedemos a descomponer las fuerzas y la
aceleración de la ecuación (6) en sus términos correspondientes en eje ‘x’ y en eje ‘y’.
En primer lugar descompondremos la fuerza ejercida por la gravedad sobre el péndulo:
A continuación descompondremos la aceleración del péndulo, ap. Esta aceleración se
sitúa en el centro de masas del péndulo, y es debida a la composición de:
- La aceleración del carro al que está unido el péndulo:
Modelo teórico del sistema carro-péndulo
19
- La rotación del péndulo a una velocidad angular, que podemos escribirla como:
- La aceleración angular del péndulo, que podemos escribirla como:
Por lo tanto, podemos reescribir la aceleración del péndulo de la siguiente manera:
Donde:
Es el vector que representa la posición del centro de masa del péndulo respecto a la
articulación sobre la cual rota el péndulo. Sustituyendo todas las equivalencias anteriores en
(7) obtenemos:
A continuación realizamos el producto vectorial de los vectores unitarios para
simplificar la ecuación anterior:
Y obtenemos el siguiente resultado:
El siguiente paso consiste en introducir la ecuación (15) en la ecuación (6) y
descomponer las fuerzas y la aceleración de la ecuación (6) en sus términos correspondientes
en eje ‘x’ y en eje ‘y’:
En tercer lugar, aplicando la segunda ley de Newton [14] al movimiento rotatorio del
péndulo alrededor de la articulación obtenemos la siguiente ecuación:
Modelo teórico del sistema carro-péndulo
20
Donde:
Es el sumatorio de los pares no inerciales actuando en el péndulo respecto de la
articulación que lo une con el carro.
Es el momento de inercia del péndulo respecto de la articulación que lo une con el
carro.
Se puede interpretar como el par generado por la fuerza inercial causada por la
aceleración del carro.
Sustituyendo (20), (21) y (22) en (19), obtenemos:
Una vez hemos llegado a este punto del análisis, el siguiente paso será reordenar y
agrupar las ecuaciones obtenidas. En primer lugar, sustituiremos Nx de la ecuación (16) en la
ecuación (3):
Y a continuación sustituimos la expresión obtenida de la aceleración lineal de la
ecuación (24) en la ecuación (23) y obtenemos:
El siguiente paso es aislar Ny de la ecuación (17) y sustituirla en la ecuación (4):
Y a continuación sustituimos Nc de la ecuación (26) en la ecuación (5):
Modelo teórico del sistema carro-péndulo
21
Finalmente, el último paso a realizar es introducir la expresión encontrada para la
fuerza de fricción de la ecuación (27) en las ecuaciones (24) y (25):
Las ecuaciones anteriores son las ecuaciones finales a partir de las cuales podremos
simular y representar la dinámica del sistema.
La primera ecuación nos permite obtener y representar el movimiento lineal del
sistema puesto que podemos obtener la aceleración lineal, que se puede integrar para obtener
la velocidad lineal, y si se vuelve a integrar podemos obtener la posición del robot.
La segunda ecuación nos permite obtener y representar el movimiento angular del
péndulo puesto que tenemos la aceleración angular, que se puede integrar para obtener la
velocidad angular, y si se vuelve a integrar podemos obtener el ángulo de desviación respecto
al punto de equilibrio.
Si suponemos nulos los términos de fricción, obtenemos las siguientes ecuaciones:
De estas dos ecuaciones, únicamente se utilizará la que permite obtener el
movimiento angular del péndulo, puesto que el control que se va a realizar en este proyecto
únicamente permite al robot mantener el equilibrio sin tener en cuenta el movimiento lineal
del robot, es decir, sin realizar un control de posición.
Una vez se ha obtenido las ecuaciones que permiten describir el comportamiento
dinámico del sistema carro-péndulo, el siguiente paso que se realizará será la simulación del
sistema carro-péndulo utilizando las ecuaciones obtenidas.
Simulación del sistema carro-péndulo
22
3. Simulación del sistema carro-péndulo
En este capítulo se va a simular el modelo obtenido en las ecuaciones formuladas
anteriormente. Para ello primero en primer lugar se escogerá el entorno en el que se realizará
la simulación. A continuación se llevará a cabo la obtención de los parámetros necesarios para
la simulación, y por último se realizará un conjunto de simulaciones del sistema.
3.1.Matlab como herramienta de simulación
El software más adecuado para llevar a cabo el análisis y la simulación este sistema es
Matlab debido a la facilidad de implementación de funciones matemáticas, de diseño y análisis
de modelos y de representación gráfica de este programa. La versión utilizada es la 7.9.0
(R2009B).
Concretamente, se utilizará Simulink: es un entorno para la simulación multidominio y
el diseño basado en modelos para sistemas dinámicos y embebidos [16].
Simulink incluye un ejemplo de gran interés para este proyecto. Se trata de una
simulación de un péndulo invertido. Para acceder a él, debemos teclear el comando slcp en el
Command Window de Matlab.
A continuación, se abrirá una ventana con el siguiente modelo de Simulink:
Figura 11: Ejemplo en Matlab de la simulación de un sistema carro-péndulo
Simulación del sistema carro-péndulo
23
Este modelo cuenta con una animación para el comportamiento del sistema:
Figura 12: Animación del sistema carro-péndulo del modelo sldp de Matlab
En este modelo el control que se utiliza para mantener el sistema en equilibrio es un
Fuzzy. Además, también dispone de un control de posición, y gracias a él, en la animación
podemos mover libremente el péndulo con el ratón del ordenador.
Lo importante de este ejemplo es lo siguiente: si accedemos al bloque Cart & Pole
Dynamics (Clic derecho, Explore), encontramos el siguiente subsistema:
Figura 13: Subsistema Cart & Pole Dynamics
A continuación se analizará este subsistema, y veremos que es la modelización de las
dos ecuaciones que habíamos obtenido anteriormente en el análisis matemático del sistema.
En primer lugar, distinguiremos entre las dos ecuaciones: la ecuación a partir de la cual
obtenemos la aceleración angular es (1) y la ecuación a partir de la cual se obtiene la
aceleración lineal es (2):
Simulación del sistema carro-péndulo
24
Figura 14: Ecuaciones del subsistema Cart & Pole Dynamics
La primera ecuación nos permite realizar el control para mantener el sistema en
equilibrio y la segunda ecuación nos permite realizar el control de posición del sistema.
Como se ha explicado con anterioridad, en este proyecto únicamente vamos a realizar
un control para mantener el sistema en equilibrio, por lo que únicamente vamos a analizar la
primera ecuación.
Tenemos el siguiente diagrama de bloques:
Figura 15: Diagrama de bloques para mantener el equilibrio del sistema
En primer lugar, en (1) tenemos un multiplexor que nos agrupará cuatro señales, con la
finalidad de reducir el número de entradas al bloque (2).
Las entradas de este multiplexor serán:
Entrada Variable Descripción
u(1) F Fuerza que aplica el controlador sobre el actuador para mover el carro.
u(2) sin(θ) Seno del ángulo de desviación del péndulo respecto a la posición de equilibrio.
u(3) cos(θ) Coseno del ángulo de desviación del péndulo respecto a la posición de equilibrio.
u(4) Velocidad angular del péndulo.
Tabla 2: Entradas del multiplexor de la Figura 20
Simulación del sistema carro-péndulo
25
En segundo lugar (2), tenemos un bloque que es un Function Block. En él, se ha
implementado la siguiente ecuación:
(g*u(2)+u(3)*((-u(1)-m*l*u(4)*u(4)*u(2))/(mc+m)))/(l*(4/3-(m*u(3)*u(3))/(mc+m)))
Si procedemos a reescribir esta ecuación de una forma más visual:
Si ahora sustituimos las entradas por su variable descritas en la tabla 2, obtenemos:
Como podemos ver, es la misma ecuación que habíamos determinado anteriormente,
teniendo en cuenta que la masa del péndulo en este caso es m y en la modelización que
habíamos realizado era mp:
La importancia de esta equivalencia es la siguiente: un software de la trascendencia de
Matlab utiliza el mismo modelo de ecuaciones para la simulación del sistema que el que se va
a utilizar en este proyecto, y que se había definido previamente al conocimiento de este
ejemplo.
Como vemos en la ecuación anterior, la salida del bloque (2) corresponde a la
aceleración angular. Si integramos la aceleración angular mediante el bloque (3) obtenemos la
velocidad angular. Si integramos la velocidad angular mediante el bloque (4) obtenemos la
posición angular, es decir, el ángulo de desviación respecto al punto de equilibrio.
Una vez analizado este subsistema, se ha decidido utilizar el diagrama de bloques de la
Figura 20 como planta del sistema que vamos a simular porque las ecuaciones son las mismas
que se habían planteado.
Simulación del sistema carro-péndulo
26
3.2.Obtención de los parámetros del modelo
Una vez escogido el entorno de simulación, el siguiente paso consiste en obtener los
parámetros que aparecen en la ecuación que describe el comportamiento dinámico del
sistema, la ecuación de la planta del sistema. Esta ecuación es la que se ha obtenido
anteriormente:
3.2.1. Obtención de la masa del péndulo
Tenemos la constante mp, que es la masa del péndulo.
Este valor se ha obtenido utilizando una báscula de precisión. En este caso se ha
utilizado una báscula de precisión de cocina, modelo Fagor BC 300 X. Se puede consultar sus
características técnicas en [17].
Para la obtención de este parámetro, en primer lugar debe realizarse el montaje del
robot y excluir el “carro” del robot, que son las ruedas. Este montaje se encuentra disponible
en el anexo 3, y se explicará posteriormente en el capítulo 5.
Se ha obtenido dos valores para mp, distinguiendo entre si la alimentación del robot es
con pilas alcalinas (6) o con batería oficial de LEGO Mindstorms NXT 2.0 [18].
- Valor de mp para alimentación con pilas alcalinas: 557 g.
Figura 16: Masa del péndulo con pilas alcalinas: 557 g.
Simulación del sistema carro-péndulo
27
- Valor de mp para alimentación con batería oficial de LEGO: 531 g.
Como se puede observar, existe una pequeña diferencia de peso entre ambos tipos de
alimentación, aproximadamente de 30 gramos.
Para la realización de las simulaciones, se utilizará el parámetro más restrictivo, que en
este caso es cuando se alimenta el sistema mediante pilas alcalinas, puesto que el peso del
péndulo es superior.
3.2.2. Obtención de la masa del carro
Tenemos la constante mc, que es la masa del carro. Su valor se determinará utilizando
el mismo instrumento de medición que en el caso anterior.
En este caso, la masa del carro corresponderá al peso de ambas ruedas.
- Valor de mc obtenido: 68 g.
En último lugar, tenemos la constante l, que es la distancia desde la articulación que
une el carro con el péndulo hasta el centro de masas del péndulo.
Figura 17: Masa del péndulo con batería oficial LEGO: 531 g.
Figura 18: Masa del carro: 68 g.
Simulación del sistema carro-péndulo
28
La obtención de este parámetro comporta una mayor dificultad. El problema es el
siguiente: al realizar la modelización del sistema, el péndulo se modela como una varilla cuya
masa está uniformemente distribuida en toda su longitud.
Por lo tanto, lo más lógico sería pensar que el centro de masas se encuentra a la mitad
de la longitud del péndulo.
Pero en el caso real, el péndulo no tiene su masa uniformemente distribuida, y por lo
tanto, se requiere la utilización de un método para obtener este parámetro, tal y como se
explica a continuación.
3.2.3. Determinación de la longitud del péndulo
Para obtener el parámetro l necesitamos encontrar el periodo natural de oscilación del
péndulo (Tn). La ecuación que nos permitirá encontrar l conociendo Tn es la siguiente [19]:
Para obtener el periodo natural de oscilación recurriremos a la siguiente prueba:
Colocaremos el robot apoyado únicamente de los ejes de las ruedas. A continuación, lo
inclinaremos y lo dejaremos oscilar libremente, sin actuación de los motores, al mismo tiempo
que vamos leemos los datos del ángulo de oscilación gracias a un giroscopio.
(En este apartado vamos a obviar el código utilizado para llevar a cabo tal experimento
y el funcionamiento del giroscopio, que ya será comentado posteriormente)
Aunque el peso total del robot no intervenga en la ecuación anterior, se ha realizado
esta prueba para el caso de la alimentación del robot con batería LEGO y con pilas alcalinas.
Por lo tanto, los resultados de ambos experimentos deberían coincidir.
Los datos de los experimentos realizados se pueden consultar en el anexo 4.
Figura 19: Obtención del parámetro Tn
Simulación del sistema carro-péndulo
29
En primer lugar la gráfica obtenida correspondiente a la prueba realizada utilizando la
batería LEGO para la alimentación del Brick es la siguiente:
Gráfico 1: Datos obtenidos con batería para la determinar el periodo natural de oscilación
Para determinar el periodo natural de oscilación, se ha contado el número de mínimos relativos: 28, que se encuentran en un tiempo entre 3 y 19,5 segundos.
Por lo tanto, el periodo natural de oscilación resultante es de 0,589 segundos,
aproximadamente 0,6 segundos.
A continuación se muestran los resultados de la misma prueba utilizando pilas alcalinas
para la alimentación del Brick:
Gráfico 2: Datos obtenidos con pilas alcalinas para la determinar el periodo natural de oscilación
-25
-20
-15
-10
-5
0
5
10
15
20
25
0,0
10
,81
1,6
12
,41
3,2
14
,01
4,8
15
,61
6,4
17
,21
8,0
18
,81
9,6
11
0,4
11
1,2
11
2,0
11
2,8
11
3,6
11
4,4
11
5,2
11
6,0
11
6,8
11
7,6
11
8,4
11
9,2
1
Án
gulo
(°)
Tiempo (s)
Determinación del período natural de oscilación
-30
-20
-10
0
10
20
30
0,0
10
,85
1,6
92
,53
3,3
74
,21
5,0
55
,89
6,7
37
,57
8,4
19
,25
10
,09
10
,93
11
,77
12
,61
13
,45
14
,29
15
,13
15
,97
16
,81
17
,65
18
,49
19
,33
Án
gulo
(°)
Tiempo (s)
Determinación del período natural de oscilación
Simulación del sistema carro-péndulo
30
Para determinar el periodo natural de oscilación, se ha contado el número de mínimos
relativos: 27, que se encuentran en un tiempo entre 4 y 20 segundos.
Por lo tanto, el periodo natural de oscilación resultante es de 0,592 segundos,
aproximadamente 0,6 segundos.
Como se ha podido comprobar, el resultado es prácticamente el mismo en ambos
casos. Por lo tanto, se ha determinado que el periodo natural de oscilación es de 0,6 segundos.
Por lo tanto, si recurrimos a la ecuación presentada anteriormente:
Para tener una idea de donde se encuentra situado el centro de masas recurriremos a
la representación en 3D realizada con Lego Digital Designer [20]:
Figura 20: Centro de masas del robot
Como se puede observar en la figura anterior, el centro de masas del robot
corresponde a una posición ligeramente inferior al centro del Brick.
Una vez hemos determinado todos los parámetros necesarios, el siguiente paso
consistirá en simular el comportamiento del sistema.
Simulación del sistema carro-péndulo
31
3.3.Simulaciones
Se ha realizado un conjunto de simulaciones con las que se pretende conocer con la
máxima exactitud posible el comportamiento dinámico del sistema, con la finalidad de
encontrar un control PID con el que conseguir mantener el péndulo en equilibrio.
El primer paso que se realizará es comprobar si el sistema puede mantenerse en
equilibrio con un control proporcional, tal y como se explica a continuación.
3.3.1. Lugar geométrico de las raíces con la planta linealizada
La primera simulación que se realizará será la obtención del diagrama de polos y ceros
de la planta linealizada con la herramienta Sisotool de Matlab. En este caso se utiliza la planta
linealizada porque con la planta no linealizada no sería posible realizar esta simulación.
La finalidad de esta simulación es poder determinar si el sistema se podría mantener
en equilibrio con el control más básico de un PID: el control proporcional [21].
Para ello, lo primero que se debe hacer es linealizar la planta obtenida anteriormente.
3.3.1.1. Linealización de la planta
Recordamos la ecuación que teníamos:
El primer paso es pasar el denominador de la parte derecha multiplicando a la
aceleración angular:
Simulación del sistema carro-péndulo
32
A continuación aplicaremos las siguientes equivalencias, teniendo en cuenta que el
ángulo θ es un ángulo de valor cercano a cero:
Si aplicamos las anteriores equivalencias, obtenemos la siguiente ecuación:
A continuación aplicamos la transformada de Laplace y agrupamos términos:
Y finalmente obtenemos la siguiente función de transferencia:
Se puede observar el siguiente problema: teniendo un numerador negativo,
necesitaríamos que el sistema tuviera una realimentación positiva.
Este problema se puede solucionar de la siguiente forma: podemos definir que la
fuerza F es una fuerza negativa. De esta forma podríamos reeescribir la función de
transferencia como:
El siguiente paso consistirá en simular esta planta linealizada con Sisotool para
determinar el lugar geométrico de las raíces.
Simulación del sistema carro-péndulo
33
3.3.1.2. Simulación con Sisotool
Para realizar la simulación se ha escrito el siguiente código, disponible en el anexo 5:
clear;
%Parámetros: g=9.82; l=0.089; mc=0.068; m=0.557;
%Planta linealizada: num=1; den = [l*((4*(mc+m)/3)-m) 0 -g*(mc+m)]; planta=tf(num,den);
%Simulación: sisotool(planta);
Si ejecutamos este código se abrirá en una nueva ventana de Sisotool en la cual
podemos ver el siguiente LGR:
Figura 21: LGR con la planta linealizada
Se puede observar en la imagen el LGR marcado en color azul oscuro y los polos
marcados en un color magenta.
En la imagen anterior el sistema es inestable: tiene un polo real negativo y un polo real
positivo (este último es el que hace que sea inestable), ambos con parte compleja nula (reales
puros).
Simulación del sistema carro-péndulo
34
Si aumentamos la ganancia, la parte real de los polos en valor absoluto se va
acercando a cero. Concretamente, para una ganancia de 6,13 los polos pasan de ser reales
puros a convertirse en un doble polo con parte real e imaginaria nulas:
Figura 22: LGR de la planta linealizada, polo doble
Si continuáramos aumentando la ganancia, los polos tendrían la parte real nula y la
parte imaginaria no nula, del mismo módulo pero de signo contrario. Se trataría de un sistema
marginalmente estable.
El siguiente paso que se realizará será la verificación de esta simulación. Para ello, se
creará un modelo en Simulink con la planta linealizada. Se realimentará la planta y se le
añadirá una ganancia. Es decir, se realizará un control P.
Simulación del sistema carro-péndulo
35
3.3.1.3. Verificación del LGR mediante el análisis de la respuesta
3.3.1.3.1. Modelo en Simulink creado
El modelo Simulink creado es el siguiente, disponible en el anexo 5:
Figura 23: Modelo Simulink para la verificación del LGR
En primer lugar tenemos el ángulo de referencia para que el sistema se mantenga en
equilibrio. Este ángulo debe introducirse en radianes, y su valor en este caso será 0 radianes,
pero en otros casos puede ser interesante que sea un valor no nulo, por ejemplo, sería
interesante si quisiéramos realizar un control de posición.
A continuación tenemos un sumador cuya salida es la señal de error, la diferencia
entre la consigna (referencia) y el ángulo actual del péndulo.
En tercer lugar tenemos otro sumador. En este caso, este sumador nos servirá para
“despertar” al sistema, como se explica a continuación:
En el sistema con la planta linealizada, no podemos introducir condiciones iniciales.
Por lo tanto, como el sistema se encuentra inicialmente en equilibrio, el sistema no se moverá
a no ser que introduzcamos una perturbación.
El método que se ha utilizado para introducir la perturbación es una suma de señales,
como se muestra en el siguiente diagrama (siguiente página):
Simulación del sistema carro-péndulo
36
Figura 24: Obtención de la señal de perturbación
Tenemos dos parámetros que podemos variar para hacer que la perturbación desplace
el péndulo a un ángulo determinado: la amplitud de la perturbación y el tiempo durante el que
mantenemos la perturbación a nivel alto.
Después de añadir la perturbación, el siguiente elemento que encontramos es la
ganancia, que será el parámetro que utilizaremos para comprobar el funcionamiento del
sistema y comparar los resultados con los que se esperan por la simulación del LGR.
La salida del bloque de ganancia es la entrada de la planta linealizada, que ya se ha
tratado anteriormente.
La salida de la planta linealizada es el ángulo de inclinación en un determinado
instante de tiempo del péndulo, en unidades de radianes. Este ángulo se satura en ±π/2
radianes para simular que el péndulo choca contra la superficie al caer.
La salida del limitador será el ángulo que se utiliza en la realimentación.
Por último, guardamos el valor del ángulo y del clock del sistema en el workspace para
poder representarlos gráficamente.
Una vez explicado el modelo, el siguiente paso que se realizará será la comprobación
de la respuesta del sistema para distintos valores de ganancia.
Simulación del sistema carro-péndulo
37
3.3.1.3.2. Simulación de la planta linealizada con control proporcional
Para realizar esta simulación debemos ejecutar el fichero constantes.m (anexo 5).
Para verificar el resultado obtenido en el LGR realizado se utilizarán distintas ganancias.
En primer lugar, para una ganancia inferior a 6,3 el sistema debería ser inestable. Por
ejemplo, utilizando una ganancia de 5 se obtiene el siguiente resultado:
Figura 25: Gráfica temporal del ángulo para una ganancia de 6
El sistema no logra mantenerse en equilibrio y el ángulo se satura en +90°.
A continuación se utiliza una ganancia de 6,3 y obtenemos el siguiente resultado:
Figura 26: Gráfica temporal del ángulo para una ganancia de 6,3
Simulación del sistema carro-péndulo
38
En este caso el sistema no se caería, y se mantendría oscilando indefinidamente con la
misma amplitud, aproximadamente de 5,6 º.
Por último, podemos ver que si aumentamos la ganancia del sistema (por ejemplo, a
un valor de 10), las oscilaciones son más rápidas y de menor amplitud:
Figura 27: Gráfica temporal del ángulo para una ganancia de 10
Por lo tanto, se verifica el resultado obtenido con el LGR. Además, este resultado nos
permite afirmar que si el sistema tuviera exactamente la misma dinámica que de la planta
linealizada, con un control proporcional podría mantenerse en equilibrio.
El problema es el siguiente:
Recapitulando, en primer lugar hemos realizado una modelización del sistema real lo
más precisa posible, pero aún así el sistema real y el modelo no son idénticos, por ejemplo, por
la construcción física: en la simulación hablamos de una varilla ideal y el sistema real difiere
mucho de este modelo (aunque sea la mejor aproximación que se pueda realizar).
A continuación, hemos anulado los términos de fricción del modelo, y por último
hemos linealizado la planta sin fricción que habíamos obtenido.
Todo ello quiere decir que a nivel de simulación el resultado es correcto, pero si
llevamos a cabo la implementación de un control P en el sistema real con una determinada
ganancia superior a 6,3, el sistema no se mantendrá en equilibrio, debido a las diferencias
existentes entre la planta linealizada y el sistema real.
Por lo tanto, el siguiente paso será trabajar con la planta sin linealizar, con la finalidad
de utilizar un modelo más parecido al sistema real que se pretende simular.
Simulación del sistema carro-péndulo
39
3.3.2. Simulación en dominio temporal continuo de la planta no linealizada
3.3.2.1. Modelo que se va a simular
En este apartado se realiza la simulación de la planta obtenida anteriormente (sin
linealizar) con la finalidad de obtener unos valores de control con los que poder mantener el
péndulo en equilibrio.
En primer lugar, se ha realizado el siguiente modelo en Simulink (anexo 5):
Figura 28: Modelo Simulink de la simulación de la planta no linealizada
El modelo es muy similar al que se había realizado anteriormente (planta linealizada).
En primer lugar tenemos el ángulo de referencia.
A continuación, tenemos un sumador cuya salida es la señal de error, que es la
diferencia entre el ángulo de referencia y el ángulo en el que se encuentra el péndulo.
Esta señal de error es la entrada al bloque del controlador PID. Por lo tanto,
deberemos determinar las constantes correspondientes a cada uno de los términos del PID
como se explicará posteriormente. En el siguiente subcapítulo se justificará le elección de este
controlador.
La salida del controlador PID es la entrada de la planta no linealizada, que es la misma
que incluye Matlab en el ejemplo de péndulo invertido tratado anteriormente. Únicamente se
ha añadido un bloque de saturación del ángulo a ±π/2 rad.
Simulación del sistema carro-péndulo
40
En este modelo no tenemos el sumador con el que introducíamos la perturbación en el
sistema. Esta diferencia es debida a que la planta que tenemos es la siguiente:
Figura 29: Modelo Simulink de la planta no linealizada
Tenemos dos bloques integradores.
El primer integrador nos permite obtener la velocidad angular mediante la integración
de la aceleración angular.
El segundo nos permite obtener la posición angular mediante la integración de la
velocidad angular.
En estos bloques integradores podemos introducir unas condiciones iniciales, por
ejemplo, en el segundo integrador podemos introducir un ángulo inicial con el que podemos
“despertar” al sistema:
Figura 30: Cuadro de diálogo del bloque integrador
Una vez visto el modelo Simulink de este sistema, el siguiente paso será obtener los
parámetros necesarios para realizar el control del péndulo.
En este caso, trabajamos con un controlador PID, y los parámetros que necesitaremos
obtener son las constantes Kp, Ki y Kd.
Para la obtención de cada uno de estos parámetros se recurrirá al bloque sintonizador
de PID de Matlab.
Simulación del sistema carro-péndulo
41
3.3.2.2. Sintonizador de PID de Matlab
Existe una gran variedad de sistemas de control que podríamos utilizar [22]. Como se
ha comentado anteriormente, uno de los objetivos de este proyecto es aplicar los
conocimientos adquiridos a lo largo de la titulación.
Por lo tanto, el sistema de control que se va a utilizar en este proyecto es un PID
puesto que es el sistema que más se ha tratado, y como consecuencia, es sobre el que he
adquirido un mayor conocimiento.
Un PID (Proporcional Integral Derivativo) es un mecanismo de control
por realimentación [23] que calcula la desviación o error entre un valor medido y el valor que
se quiere obtener, para aplicar una acción correctora que ajuste el proceso [24].
En nuestro caso, el valor que se quiere obtener es el ángulo en el que se pretende
equilibrar el sistema, que será de 0°, y el valor medido será el valor del ángulo del péndulo en
un determinado instante de tiempo.
El algoritmo de cálculo del control PID se da en tres parámetros distintos: el
proporcional, el integral, y el derivativo.
- El valor Proporcional determina la reacción del error actual.
- El Integral genera una corrección proporcional a la integral del error, esto nos
asegura que aplicando un esfuerzo de control suficiente, el error de seguimiento se
reduce a cero.
- El Derivativo determina la reacción del tiempo en el que el error se produce.
Para poder implementar un PID vamos a necesitar tres elementos:
- Un sensor con el que obtendremos el valor del ángulo del péndulo
periódicamente.
- Un controlador en el que se implemente el PID para transformar la señal de error
entre el ángulo de equilibrio y el ángulo del péndulo a un valor para enviar a los
actuadores.
- Un o unos actuadores con los que provocaremos un cambio en el movimiento del
sistema con la finalidad de corregir el ángulo del péndulo.
El siguiente paso a realizar será la simulación del sistema con la finalidad de encontrar
las constantes del controlador PID para poder mantener en equilibrio el sistema real. Para ello
recurriremos al sintonizador de PID que tenemos disponible en Matlab.
Simulación del sistema carro-péndulo
42
Como se había comentado previamente, la elección de Matlab como entorno para
realizar las simulaciones correspondientes del sistema se debía a otros motivos, además de los
citados.
Uno de estos motivos es que incluye un bloque con el que podemos sintonizar un PID
[25]. El modelo de este sintonizador es el siguiente:
Figura 31: Modelo Simulink del sintonizador de PID de Matlab
En este sintonizador observamos los siguientes bloques:
En primer lugar el Step, que será el ángulo de referencia en nuestro sistema.
En segundo lugar, el controlador PID, cuyos valores de Kp, Ki y Kd se determinarán en
la simulación de este sintonizador.
En tercer lugar, la planta que queremos controlar.
Y por último, los bloques más importantes de este sintonizador son los bloques con los
que añadiremos las restricciones: Output Constraint y Actuator Constraint.
En primer lugar, tenemos un bloque para añadir restricciones a la salida de la planta.
En el caso de nuestro sistema, se trata de la restricción en el ángulo de oscilación del sistema.
En segundo lugar, tenemos un bloque para añadir restricciones al actuador. En el caso
de nuestro sistema, se trata de las restricciones que tengan los motores de la plataforma Lego
Mindstorms NXT 2.0.
Simulación del sistema carro-péndulo
43
Si abrimos un bloque de restricciones, nos encontramos ante la siguiente ventana:
Figura 32: Restricciones del sintonizador de PID de Matlab
En la figura anterior, podemos ver una zona coloreada en blanco en la parte central y
una zona coloreada en un tono más oscuro de blanco en la parte superior e inferior.
Estas zonas están delimitadas por segmentos marcados en color negro. Estos
segmentos son las restricciones que podemos añadir/modificar.
De estas restricciones podemos modificar varios parámetros, como se muestra en el
siguiente cuadro de diálogo:
Figura 33: Parámetros que se pueden modificar de las restricciones
Cada línea de valores corresponde a un segmento. Podemos agregar/eliminar
segmentos, y podemos modificar sus parámetros: amplitud, tiempo de inicio y de fin, peso,
etc.
Simulación del sistema carro-péndulo
44
3.3.2.3. Restricciones de nuestro sistema
Para añadir las restricciones en la simulación debemos conocer las restricciones de
nuestro sistema físico real para que estos parámetros nos permitan sintonizar el PID que
controle la planta con el mayor grado de aproximación a la realidad posible.
3.3.2.3.1. Restricciones en el ángulo del péndulo
En este caso la restricción que vamos a introducir será la amplitud máxima de
oscilación que queremos que tenga el sistema.
La idea es que esta amplitud máxima de oscilación sea lo más pequeña posible cuando
el sistema se haya estabilizado.
Debemos tener en cuenta que para despertar al sistema utilizamos un ángulo inicial.
Por lo tanto, la amplitud máxima de oscilación debe ser mayor que el ángulo inicial durante un
tiempo. Este tiempo será el necesario para que el ángulo de oscilación sea menor que el
ángulo inicial.
Por lo tanto, podemos utilizar una restricción en el ángulo de un valor que iremos
variando en función del ángulo inicial utilizado para despertar al sistema.
Como se verá posteriormente, esta restricción se cumple con mayor facilidad que la
restricción en el actuador, puesto que el sistema se equilibra en un ángulo prácticamente nulo
en muy poco tiempo.
3.3.2.3.2. Restricciones en el actuador (motor LEGO Minstorms NXT 2.0)
En este caso se utilizará la construcción física para comprobar las limitaciones que
tienen los motores de LEGO Mindstorms NXT 2.0.
Sobre estos motores se han realizado diversos estudios, de entre los que cabe destacar
el estudio realizado por Philo en su página web [26].
Al margen de los estudios realizados, la mejor forma de conocer las limitaciones de los
actuadores es realizando un experimento.
Simulación del sistema carro-péndulo
45
La finalidad de este experimento es determinar la velocidad lineal máxima de nuestro
sistema por el siguiente motivo:
En nuestro modelo, el controlador aplica una fuerza F sobre el actuador, que es el que
provoca el movimiento de la planta. Sabemos que:
La masa total del sistema la conocemos, y la velocidad lineal del sistema la podemos
determinar mediante el experimento que vamos a realizar.
El experimento consiste en colocar el robot sobre una superficie plana y sin inclinación,
introducir un ciclo del 100% en los motores durante un tiempo determinado y medir la
distancia que ha recorrido el robot. El código de este experimento se encuentra disponible en
el anexo 2.
Conociendo el tiempo empleado y la distancia recorrida podemos determinar la
velocidad lineal.
El resultado experimental obtenido es el siguiente:
Tiempo definido: 5 s.
Distancia recorrida: 3,6 m.
El valor obtenido no deja de ser una aproximación, debido a que estamos suponiendo
que en el momento en que los actuadores empiezan a mover al robot, la velocidad ya será
0,72 m/s, no contemplamos el tiempo necesario para adquirir esta velocidad.
Una vez conocidas ambas restricciones, el siguiente paso consistirá en introducirlas en
el sintonizador de PID de Simulink.
Simulación del sistema carro-péndulo
46
3.3.2.4. Sintonizador PID de Matlab con las restricciones de nuestro modelo
A continuación se adjunta el modelo Simulink del sintonizador de PID modificado con
las restricciones que se han expuesto anteriormente disponible en el anexo 5:
Figura 34: Modelo Simulink del sintonizador de PID con restricciones de nuestro sistema
Se ha modificado el modelo original introduciendo los siguiente cambios:
En primer lugar, la salida de la planta (el ángulo de desviación del péndulo en unidades
de radianes) se multiplica por una constante para convertir el valor del ángulo de unidades de
radianes a unidades de grados.
Esta conversión se realiza para introducir la restricción de la salida de la planta
directamente en grados.
En segundo lugar, el valor de la salida del controlador PID se divide por la masa total
del sistema, que es la suma de la masa del carro y la masa del péndulo.
A continuación se integra esta señal y obtenemos la velocidad lineal sobre la cual
podremos aplicar la restricción que se ha determinado experimentalmente.
A continuación se muestran las restricciones utilizadas en ambos casos.
Simulación del sistema carro-péndulo
47
En primer lugar, las restricciones en el ángulo del péndulo:
Figura 35: Restricciones en el ángulo del péndulo
Se utilizan dos segmentos:
El primer segmento se inicia en 0 segundos y como tiempo final 5 segundos. Su
amplitud dependerá del valor del ángulo inicial que utilicemos para despertar al sistema. Se ha
decidido utilizar la siguiente relación para determinar esta amplitud:
El segundo segmento se inicia en 5 segundos y finaliza en 20 segundos. La amplitud de
este segmento será de ±1°, para reducir las oscilaciones cuando el sistema se estabilice.
En segundo lugar, las restricciones en el actuador:
Figura 36: Restricciones en el actuador
En el caso del actuador, la restricción que se utiliza es de ±0,72 m/s. Esta restricción es
independiente del ángulo de perturbación que utilicemos.
Una vez conocidas las restricciones, el siguiente paso será ejecutar la simulación para
obtener unos valores de Kp, Ki y Kd para nuestro controlador.
Simulación del sistema carro-péndulo
48
3.3.2.5. Simulación del sintonizador de PID
Para realizar la simulación del sintonizador de PID tenemos dos parámetros variables
que afectarán a los valores de las constantes Kp, Ki y Kd: el ángulo inicial de la restricción y el
ángulo inicial del péndulo.
Como se ha comentado anteriormente, se ha decidido que el ángulo de la restricción
se obtenga a partir del ángulo inicial del péndulo, y que la relación entre ambos sea un offset
para que siempre exista la misma diferencia.
Por lo tanto, la única variable que tenemos es el ángulo inicial del péndulo.
Para la obtención de Kp, Ki y Kd se ha realizado un conjunto de pruebas utilizando
distintos valores iniciales del ángulo. El motivo es el siguiente:
Para cada valor de ángulo inicial que se le da al sistema, se obtiene un valor distinto de
Kp, Ki y Kd. Los valores obtenidos son muy dispares entre sí. De hecho, se obtiene un valor
distinto si utilizamos un valor positivo o negativo de ángulo inicial, aunque el módulo sea el
mismo.
Por lo tanto, existen muchas constantes para realizar un control PID teórico con el que
se podría mantener en equilibrio el péndulo.
Realizar el análisis con cada uno de los posibles controles PID supondría un trabajo
muy extenso, por lo que se ha optado por la siguiente solución:
Se realizará un conjunto de pruebas en las que el ángulo inicial del péndulo irá desde
10° hasta -10° en incrementos de 1° (obviando el caso concreto en que el ángulo inicial sea de
0°), por lo que se obtendrán 20 valores distintos para cada constante.
Se obtendrá el valor medio de cada una de las constantes del PID y se comprobará el
funcionamiento del control PID obtenido con la planta del sistema.
En primer lugar se adjunta la tabla de los valores obtenidos en cada una de las
simulaciones para los distintos valores del ángulo inicial del péndulo (siguiente página).
Simulación del sistema carro-péndulo
49
Ángulo inicial (°) Kp Ki Kd Restricción de ángulo hasta 5 s (°)
-10 23,21 -5,76 9,31 15
-9 59,80 -19,82 0,37 14
-8 384,95 -164,76 1,68 13
-7 -12,79 1,08 58,26 12
-6 -0,61 -4,79 79,01 11
-5 74,00 11,16 80,19 10
-4 -17,58 2,26 53,40 9
-3 13,94 -2,54 0,01 8
-2 -493,61 156,53 652,14 7
-1 15,21 -1,70 19,18 6
1 18,00 -5,30 172,60 6
2 75,16 -8,01 29,48 7
3 -7,67 72,53 18,59 8
4 705,40 -17,41 91,43 9
5 -0,28 -2,55 59,69 10
6 9,99 -1,10 0,03 11
7 184,82 -25,35 23,39 12
8 -16,65 19,78 45,11 13
9 0,92 25,28 34,50 14
10 20,10 -1,87 3,53 15
Valor medio: 51,8155 1,383 71,595
Tabla 3: Valores de las constantes del PID obtenidos en la simulación del sintonizador de PID
Como se puede observar en la tabla anterior y como se había comentado previamente,
los valores obtenidos son muy dispares entre sí; de hecho, en ningún caso coinciden. Además,
tampoco coinciden los valores obtenidos para ángulos inicales de igual módulo pero de
distinto signo.
Los valores medios obtenidos son los siguientes:
Kp = 51,8155; Ki = 1,3830; Kd = 71,5950
El siguiente paso consistirá en simular la planta con estos valores obtenidos y
comprobar su correcto funcionamiento. Además, se reajustaran ligeramente las constantes
para adecuar la respuesta del sistema a nuestros intereses.
Simulación del sistema carro-péndulo
50
3.3.2.6. Verificación de los valores obtenidos del sintonizador
3.3.2.6.1. Respuesta a un ángulo inicial
Para verificar que los valores obtenidos anteriormente permiten mantener el péndulo
en equilibrio, se aplicarán sobre el modelo Simulink mostrado en el apartado 5.3.2.1.
El ángulo inicial del sistema es de 10° y los valores de las constantes del PID aplicados
son:
Kp = 51,8155; Ki = 1,3830; Kd = 71,5950
La respuesta del sistema que se obtiene es la siguiente:
Figura 37: Respuesta del sistema para Kp=51,8155; Ki=1,3830; Kd=71,5950 y ángulo inicial 10°
Como podemos observar, el sistema logra mantenerse en equilibrio y presenta las
siguientes características:
En primer lugar, el tiempo necesario para estabilizarse es de 5 segundos. Es un tiempo
muy elevado. Para reducir este tiempo de estabilización se puede aumentar Kp o disminuir Kd.
En segundo lugar, el error que presenta el péndulo: pese a que al final se llega a
anular, el tiempo necesario está por encima de 20 segundos. Es decir, la constante Ki cumple
con su cometido (anular el error) pero hay que modificar las constantes Kp o Kd para acelerar
el proceso.
En tercer lugar, se puede observar como el sistema es ligeramente subamortiguado
[27]. Esta es una buena característica, pero sería más razonable conseguir disminuir el tiempo
de estabilización aunque el sistema tuviera una menor amortiguación.
Simulación del sistema carro-péndulo
51
Por lo tanto, el siguiente paso que se realizará será modificar las constantes Kp y Kd
con la finalidad de acelerar el proceso de estabilización.
En primer lugar se modificará la constante Kd puesto que parece ser dominante
respecto a Kp. Se debe reducir su valor para acelerar la respuesta del sistema.
Se ha realizado un conjunto de pruebas para distintos valores de Kd, como se muestra
en la siguiente figura:
Figura 38: Respuesta del sistema a distintos valores de Kd
A medida que se reduce el valor de la constante Kd la respuesta del sistema es más
rápida. Podríamos plantear el hecho de anularla y realizar únicamente un control PI. Veamos
cual sería la consecuencia en la respuesta del sistema:
Figura 39: Respuesta del sistema para Kp=51,8155; Ki=1,3830; Kd=0 y ángulo inicial 10°
Simulación del sistema carro-péndulo
52
La consecuencia de anular el término derivativo es que el sistema se inestabiliza y las
oscilaciones cada vez presentan una mayor amplitud, hasta que para un tiempo prolongado el
péndulo caerá.
Por lo tanto, debemos reducir la constante Kd pero sin llegar a anularla. Observando la
figura 38, la decisión que se ha tomado es utilizar un valor Kd = 10 o Kd = 20. Con el primer
valor (Kd=10) se obtiene una mayor velocidad de respuesta y con el segundo valor (Kd=20) se
obtiene una mayor estabilidad frente a perturbaciones.
La diferencia en el tiempo de estabilización del péndulo entre ambos valores de Kd es
inferior a 1 segundo.
La decisión que se ha tomado es utilizar un valor para la constante Kd = 20 con la
finalidad de tener una mayor estabilidad frente a posibles perturbaciones.
A continuación se ha realizado un estudio sobre distintos valores para Kp, fijando el
valor de Kd = 20 y Ki = 1,3830. El conjunto de respuestas obtenidas es la siguiente:
Figura 40:Respuesta del sistema a distintos valores de Kp
A medida que aumenta Kp el sobrepico de la respuesta se reduce. Por lo tanto, el caso
óptimo sería un valor de Kp infinito.
Observando el comportamiento de la simulación, se ha optado por utilizar un valor de
Kp=60, con el que se consigue estabilizar el sistema en aproximadamente 2 segundos.
Por último, pese a que el término integral del PID cumple con su cometido, se realizará
una prueba con distintos valores de Ki con la finalidad de optimizar la respuesta del sistema.
Simulación del sistema carro-péndulo
53
En este caso se ha optado por escalar el eje de las ordenadas para poder visualizar con
mayor precisión la respuesta para los distintos valores de Ki. La gráfica correspondiente a la
prueba realizada es la siguiente:
Figura 41: Respuesta del sistema a distintos valores de Ki
A medida que aumentamos el valor de la constante Ki, el sistema es menos
amortiguado y presenta un mayor tiempo de estabilización. Como se puede observar en la
imagen, el valor óptimo en este caso es Ki=1.
Por lo tanto se ha determinado que el control óptimo del PID para este sistema es:
Kp = 60; Ki = 1; Kd = 20
Por último, si comparamos el comportamiento del sistema con este control y el
comportamiento del sistema con el control original obtenido del sintonizador:
Figura 42: Gráfica comparativa entre los valores obtenidos con el sintonizador de PID y los valores finales seleccionados
Simulación del sistema carro-péndulo
54
Como se puede observar, la respuesta que se obtiene con los valores modificados es
mejor que la respuesta obtenida con los valores originales del sintonizador de PID
principalmente porque mejora el tiempo de estabilización del sistema.
Por lo tanto, tenemos un control con el que podemos mantener en equilibrio el
sistema carro-péndulo, pero no sabemos si este control funcionará en nuestro sistema real con
el robot Lego Mindstorms NXT 2.0.
Por otro lado, la introducción de la perturbación en el sistema en este caso ha sido un
ángulo inicial. Debemos comprobar que el sistema actuará correctamente en el caso de que la
perturbación que se introduzca sea una fuerza, por ejemplo, un pequeño golpe que para que
el robot reaccione.
El siguiente paso consistirá en anular el ángulo inicial que le hemos dado al sistema e
introducir una perturbación en forma de fuerza, para ver cómo reacciona el robot y volver a
optimizar los valores de Kp, Ki y Kd.
3.3.2.6.2. Respuesta a una perturbación
Si introducimos una señal entre la salida del controlador PID y la planta del sistema
carro-péndulo estaremos introduciendo una perturbación en el sistema, puesto que esta salida
es la fuerza que actúa sobre el carro.
Para introducir la perturbación utilizaremos el mismo método que se ha utilizado en la
verificación del LGR con la planta linealizada. El modelo Simulink correspondiente a esta
simulación es el siguiente, que se encuentra disponible en el anexo 5.
Figura 43: Modelo Simulink para analizar la respuesta de la planta no linealizada frente a una perturbación
Simulación del sistema carro-péndulo
55
Se han ajustado los parámetros de la perturbación para que el ángulo del péndulo se
desvíe 10° de la posición de equilibrio. El resultado obtenido de la simulación es el siguiente:
Figura 44: Respuesta de la planta linealizada frente a una perturbación de 10°
A continuación añadiremos un ángulo inicial y retrasaremos la aparición de la
perturbación hasta los 5 segundos para comparar la respuesta del sistema en los dos casos:
Figura 45: Respuesta de la planta linealizada frente a ánglo inicial y a perturbación
Como se puede observar, la respuesta del sistema es prácticamente la misma en los
dos casos. La única diferencia es que con la perturbación se produce un ligero
subamortiguamiento (inferior a 0,1°) que no se produce con el ángulo inicial.
Una vez validado el funcionamiento del sistema frente a perturbaciones, el siguiente
paso consiste en introducir algunas restricciones sobre el sistema, con la finalidad de tener en
cuenta algunas no linealidades del actuador.
Simulación del sistema carro-péndulo
56
3.3.2.7. Adición de restricciones en el actuador
Anteriormente se había determinado la primera no linealidad del actuador, que era la
saturación de la velocidad a un valor máximo 0,72m/s (en módulo).
Esta restricción se considera constante, sin tener en cuenta el tiempo de aceleración
que necesite el sistema para adquirir esta velocidad.
La siguiente no linealidad que se añadirá es la zona muerta del actuador.
Nuestro actuador serán dos motores de Lego Mindstorms NXT 2.0. Para actuar sobre
los motores se introduce un ciclo de trabajo comprendido entre -100 y +100.
Si actuamos sobre estos motores sin ningún tipo de carga, únicamente con un ciclo de
trabajo del 1% ya rotarían. Pero cuando unimos los motores al montaje físico del robot, el
robot en sí es una carga puesto que tiene una masa que hace que con un ciclo de trabajo del
1% los motores no roten.
Por lo tanto, la prueba que se ha utilizado para determinar el ciclo de trabajo mínimo
que debemos introducir en los motores para provocar el movimiento del sistema es la
siguiente:
Se ha colocado el robot en posición horizontal sobre una superficie plana. Utilizando el
código disponible en el anexo 2 se ha ido incrementando el ciclo de trabajo de los motores en
+1 a cada segundo (arranque de motor utilizando una rampa). En el momento en que el robot
ha empezado a moverse, se ha pulsado utilizado un sensor de contacto como pulsador para
finalizar el programa y obtener el último valor del ciclo de trabajo introducido.
Tras la realización de esta prueba, al detener el sistema cuando inicia el movimiento, el
valor de ciclo de trabajo es del 10%. Como las restricciones en el sistema las introducimos en
forma de velocidad, tendremos:
Una vez determinadas ambas restricciones, volveremos a comprobar el
funcionamiento del sistema en presencia de estas.
El modelo Simulink que se ha utilizado es una modificación del modelo que se había
utilizado en el apartado anterior. Este modelo con las restricciones se encuentra disponible en
el anexo 5.
Simulación del sistema carro-péndulo
57
Figura 46: Modelo Simulink de la planta no linealizada con restricciones
El resultado obtenido de la simulación es el siguiente:
Figura 47: Simulación del sistema con restricciones, introduciendo ángulo inicial y perturbación
Como podemos observar, el sistema es capaz de responder adecuadamente al ángulo
inicial, aunque con una mayor lentitud. El problema se produce cuando introducimos la
perturbación, que desestabiliza el péndulo hasta que cae.
Por lo tanto, reduciremos el ángulo que introduce la perturbación para ver cuál es el
valor máximo de perturbación con el que el sistema podría mantener el péndulo en equilibrio.
Tras la realización de diversas pruebas se ha determinado que el valor máximo de
perturbación que puede soportar el péndulo sin caer es ligeramente inferior a 9°, como se
muestra en la siguiente figura:
Simulación del sistema carro-péndulo
58
Figura 48: Máxima perturbación que se puede introducir en el sistema con restricciones
Por lo tanto, se ha realizado una mayor aproximación al sistema real, añadiendo
algunas restricciones en los actuadores.
El siguiente paso consistirá en discretizar el sistema, porque aunque la dinámica de la
planta sea en tiempo continuo, las muestras del ángulo y el envío de los valores de control a
los actuadores se realizan de forma periódica.
El problema que se presenta es que para discretizar el sistema debemos recurrir a la
planta linealizada. Como consecuencia, la aproximación a la realidad no será tan cercana como
con el modelo no linealizado.
Al utilizar la planta linealizada, el control óptimo obtenido en las pruebas realizadas
anteriormente (la planta no linealizada) es posible que no funcione correctamente. Por ello,
deberemos modificar los parámetros del controlador PID con la finalidad de obtener una
respuesta óptima para la planta linealizada.
Simulación del sistema carro-péndulo
59
3.3.3. Simulación en dominio temporal continuo de la planta linealizada
3.3.3.1. Respuesta de la planta linealizada utilizando el PID anterior
En este primer apartado se comprobará el funcionamiento de la planta linealizada
utilizando las constantes del PID obtenidas para la planta no linealizada.
Debemos tener en cuenta que la planta linealizada solo puede “despertar” utilizando
la perturbación, no podemos utilizar un ángulo inicial.
El modelo Simulink para esta simulación es el siguiente, disponible en el anexo 5:
Figura 49: Modelo Simulink de la planta linealizada con restricciones y perturbación
En primer lugar, utilizando la máxima perturbación que admitía la planta no
linealizada, obtenemos la siguiente respuesta:
Figura 50: Comportamiento de la planta linealizada frente a una perturbación
Simulación del sistema carro-péndulo
60
En la figura anterior podemos observar que la perturbación que para la planta no
linealizada suponía una desviación del ángulo de equilibrio inferior a 9°, en este caso supone
una perturbación de casi 20°. En un primer momento parece que el sistema puede llegar a
mantener al péndulo en equilibrio, pero finalmente cae.
Por lo tanto, se va a modificar la perturbación para que sea de una amplitud similar a
la simulada con la planta no linealizada.
El resultado obtenido tras la simulación es el siguiente:
Figura 51: Comportamiento de la planta linealizada frente a una perturbación de 9°
En este caso, el sistema es capaz de mantenerse estable pero se mantiene oscilando
indefinidamente, nunca consigue que el error en el ángulo del péndulo sea nulo. La amplitud
de la oscilación es de aproximadamente 0,2°.
El problema ante el que nos encontramos es el siguiente: si se utiliza el mismo valor
para las constantes del PID que en la planta no linealizada, es posible que al discretizar el
sistema no se consiga mantener el péndulo en equilibrio.
Por otra parte, si se modifican los parámetros del controlador PID, nos estaremos
alejando del modelo real, puesto que la planta no linealizada presenta una mayor similitud que
la planta linealizada.
La solución por la que se ha optado es la siguiente: se modificará los valores del
controlador PID para obtener unos valores que mejoren la respuesta del sistema, y
posteriormente se discretizarán los dos controladores: el de la planta no linealizada y el de la
planta linealizada.
Por lo tanto, el siguiente paso será modificar los valores de las constantes del PID con
la finalidad de optimizar la respuesta de la planta linealizada frente a perturbaciones.
Del mismo modo que con la planta no linealizada, se utilizarán distintos valores para
cada una de las constantes del controlador PID hasta obtener la mejor respuesta posible del
sistema.
Simulación del sistema carro-péndulo
61
3.3.3.2. Modificación de los parámetros del PID
La desventaja de esta simulación es que debido a que las oscilaciones que se producen
son muy rápidas, no podemos añadir la respuesta del sistema para varias constantes en una
misma gráfica.
Por lo tanto, se probará con distintos valores para cada una de las constantes del PID,
se explicará brevemente cómo afecta la modificación de cada constante a la respuesta del
sistema y se mostraran dos gráficas: la primera será la respuesta del sistema con el valor
original de la constante y la segunda la respuesta del sistema con el valor optimizado de la
constante.
En primer lugar, recordamos cuales son las constantes con las que hemos trabajado
hasta el momento: Kp = 60; Ki = 1; Kd = 20
Para estos valores, la respuesta del sistema es la siguiente:
Figura 52: Respuesta de la planta linealizada con las constantes de PID originales
Vemos que el sistema presenta muchas oscilaciones. Para reducirlas, podemos actuar
sobre dos parámetros: la constante proporcional o la constante derivativa. Las acciones que se
deberían realizar sobre estas constantes son: reducir la constante proporcional o reducir la
constante derivativa, o ambas.
La primera acción que llevaremos a cabo será reducir la constante proporcional.
Tras probar diversos valores para la constante proporcional, se observa que a medida
que disminuimos su valor, la primera oscilación presenta una mayor amplitud, pero a
continuación la atenuación de la respuesta es mayor. En régimen permanente presenta una
amplitud de oscilación de ±0,1°.
Simulación del sistema carro-péndulo
62
El valor óptimo que se ha determinado para la constante proporcional es 20. Para
valores inferiores a 15 el sistema no es capaz de mantener el equilibrio. El margen que va
desde 15 hasta 20 es un margen de seguridad para no utilizar el valor de la constante
proporcional con el que el sistema podría perder el equilibrio.
La respuesta obtenida es la siguiente:
Figura 53: Respuesta de la planta linealizada con Kp=20, Ki=1, Kd=20
Una vez se ha modificado la constante proporcional, podemos observar en la figura
anterior que el sistema sigue presentando muchas oscilaciones pero su amplitud se ha
reducido.
Para reducir el número de oscilaciones del sistema modificaremos la constante
derivativa. Es posible que el valor de 20 sea un valor muy alto que hace que la respuesta del
sistema sea lenta y como consecuencia aparecen tantas oscilaciones.
De hecho, si observamos la figura 53, podemos ver como en un primer momento
parece que el sistema se vaya a equilibrar en un ángulo de aproximadamente +1°, y
lentamente el error va disminuyendo hasta que el ángulo es de 0°.
En las pruebas realizadas, se ha disminuido el valor de la constante derivativa,
observando que conforme disminuimos su valor, la respuesta del sistema presenta menos
oscilaciones y se estabiliza en menos tiempo.
El valor óptimo que se ha determinado para la constante derivativa es 2. Para valores
inferiores, el sistema no era capaz de mantener el equilibrio. Para valores superiores la
respuesta del sistema era muy lenta y presentaba oscilaciones en régimen permanente.
Simulación del sistema carro-péndulo
63
La respuesta obtenida es la siguiente:
Figura 54: Respuesta de la planta linealizada con Kp=20, Ki=1, Kd=2
Una vez modificadas las constantes Kp y Kd, el siguiente paso consistiría en retocar la
constante Ki. Pero como podemos observar en la respuesta anterior (figura 54), el error en
régimen permanente es nulo, por lo que no es necesario retocar este valor.
De esta manera podemos determinar que los valores óptimos para el control de la
planta linealizada son:
Kp = 20; Ki = 1; Kd = 2
Si comparamos la respuesta óptima que presenta la planta linealizada (figura 54) y la
respuesta óptima que presenta la planta no linealizada (figura 48) podemos ver una gran
diferencia, puesto que la estabilización de la planta no linealizada es más rápida y sin
oscilaciones.
Pese a esta diferencia existente, cabe recordar que la simulación principal del sistema
ha sido la que se ha llevado a cabo previamente con la planta no linealizada, puesto que
supone una mayor aproximación a la realidad, por lo que es de esperar que el
comportamiento del robot sea más parecido al de la figura 48.
Una vez hemos obtenido el control óptimo para mantener en equilibrio el sistema con
la planta linealizada, el siguiente paso consiste en discretizarlo.
Para ello utilizaremos de nuevo las posibilidades que nos ofrece el software Matlab, tal
y como se explica a continuación.
Simulación del sistema carro-péndulo
64
3.3.4. Discretización del sistema y simulación
3.3.4.1. Discretización de la planta y del controlador
Este es el último paso a realizar en cuanto a simulaciones se refiere. En esta simulación
lo que haremos será realizar una discretización del sistema. Para ello los dos elementos clave
que se va a utilizar son la planta linealizada y el controlador.
Para la discretización utilizaremos una herramienta de matlab, concretamente el
comando c2d [28]. Se encarga de transformar la función de transferencia que introduzcamos
de dominio temporal continuo a dominio discreto, y dispone de diversos métodos para realizar
esta transformación.
Para la función de transferencia de la planta se utilizará el método ‘zoh’: zero order
hold. Con esta opción suponemos que la entrada de la planta se mantiene constante durante
el período de muestreo [29].
Para la función de transferencia del controlador utilizaremos el método ‘tustin’. Este
método conserva la dinámica del sistema. Es decir, la dinámica del sistema es como si fuera en
tiempo continuo, pero la obtención de los datos se realiza en dominio discretizado [30].
Por lo tanto, lo único que necesitamos es obtener la función de transferencia del
controlador PID, puesto que la de la planta linealizada ya la tenemos.
La función de transferencia del controlador PID es la siguiente:
Una vez obtenidas ambas funciones de transferencia, procedemos a ejecutar los
siguientes comandos en Matlab:
%Discretización de la planta y del controlador:
Dz = c2d (control,Tm,'tustin')
Gpz = c2d (planta,Tm,'zoh');
Para agilizar el proceso de simulación y verificación del resultado, se ha creado un
archivo .m desde el que se realiza la conversión anterior a dominio discretizado y a
continuación se simula el comportamiento del sistema discretizado.
Simulación del sistema carro-péndulo
65
Para realizar esta simulación se ha creado el siguiente modelo Simulink:
Figura 55: Modelo Simulink para la simulación en dominio discretizado
Como podemos ver es muy similar a los modelos presentados anteriormente. Las
diferencias son las siguientes:
En primer lugar, la planta y el controlador son bloques Function Block. Las dos líneas
de código adjuntadas anteriormente crearán una función de transferencia en el Workspace y
con estos bloques insertaremos ambas funciones de transferencia en el modelo.
En segundo lugar, la perturbación que introducimos en el sistema: en este caso se
utiliza un bloque Discrete Impulse, que es un impulso de amplitud unitaria. Por ello a
continuación añadimos un bloque de ganancia, para poder modificar la amplitud del impulso.
Los bloques restantes son los mismos que en anteriores simulaciones, con la diferencia
que en todos ellos se ha introducido el periodo de muestreo en la opción Sample Time.
La última y principal diferencia que distingue este modelo de los anteriores reside en
los parámetros de configuración de la simulación.
En este caso se utiliza la siguiente opción:
Figura 56: Parámetros de configuración de la simulación del sistema discretizado
Se utiliza un solver con intervalos de tiempo fijos, y entre cada punto de las muestras y
el siguiente no se realiza ningún tipo de aproximación.
El periodo utilizado es de 10 ms. Este valor es el mismo que se utilizará en la
implementación sobre el robot LEGO, y es debido a la velocidad de lectura recomendada por el
fabricante del sensor.
El siguiente paso consiste en simular el sistema y comprobar su funcionamiento con los
controladores PID determinados anteriormente.
Simulación del sistema carro-péndulo
66
3.3.4.2. Simulaciones con la planta y el controlador discretizados
Como se ha explicado anteriormente, se simulará el sistema discretizado con dos
posibles configuraciones del PID con la finalidad de determinar cual permite obtener una
mejor respuesta del sistema.
3.3.4.2.1. Simulación con el PID obtenido de la planta no linealizada
En esta primera simulación se utilizará las constantes del PID obtenidas utilizando el
modelo de planta no linealizada.
Los valores de las constantes del PID son:
Kp = 60; Ki = 1; Kd = 20
Y la respuesta obtenida del sistema es la siguiente:
Figura 57: Simulación del sistema discretizado para Kp=60, Ki=1 y Kd=20
Como se puede observar en la imagen anterior, el sistema no es capaz de mantener el
equilibrio del péndulo. Cuando cae, el control adquiere un valor máximo de forma que es
capaz de levantar al sistema pero sin equilibrarlo, por lo que a continuación el péndulo cae en
la dirección contraria.
Como se había comentado previamente, cabía la posibilidad que el sistema no fuese
capaz de mantener el equilibrio con estas constantes del PID puesto que la respuesta de la
planta linealizada con el controlador obtenido para la planta no linealizada presentaba muchas
oscilaciones.
Simulación del sistema carro-péndulo
67
3.3.4.2.2. Simulación con el PID obtenido de la planta linealizada
En esta segunda simulación se utilizará las constantes del PID obtenidas utilizando el
modelo de planta no linealizada. Estos valores son:
Kp = 20; Ki = 1; Kd = 2
Y la respuesta obtenida del sistema es la siguiente:
Figura 58: Simulación del sistema discretizado para Kp=60, Ki=1 y Kd=20
En este caso el sistema es capaz de mantener el equilibrio, y si recordamos, la
respuesta obtenida es muy similar a la que se obtenía con la planta no linealizada.
Para apreciar la diferencia que existe entre la simulación discretizada y la simulación
continua debemos aproximar la imagen, para visualizar los segmentos que unen cada dato.
La imagen de detalle obtenida es la siguiente:
Figura 59: Zoom de la simulación del sistema discretizado para Kp=60, Ki=1 y Kd=20
Simulación del sistema carro-péndulo
68
Como podemos observar en esta imagen, en este caso no se realiza una interpolación
[31] entre los datos sino que se unen de forma escalonada, como corresponde a un sistema
discretizado.
El último paso es ajustar las constantes de este sistema, del mismo modo que se
procedió en las simulaciones de la planta linealizada y de la planta no linealizada, con la
finalidad de optimizar la respuesta del sistema.
El problema que se puede observar en la figura 58 es que el sistema tarda mucho en
llegar a estabilizarse en un ángulo de 0°.
Para mejorar este aspecto deberemos aumentar la constante proporcional para
aumentar la velocidad de respuesta del sistema o también podemos reducir la constante
derivativa, que tendrá un efecto similar.
En primer lugar, reduciremos la constante derivativa. Se utilizarán varios valores para
determinar cuál es el óptimo, como se muestra a continuación:
Figura 60: Respuesta del sistema discretizado para distintos valores de Kd
Como se puede observar en la figura anterior, una disminución de Kd comporta un
aumento del sobrepico inicial y una reducción del tiempo de estabilización. Aún así, la
respuesta a partir de 2,5 segundos es muy similar en los tres casos.
Si ampliamos la imagen en régimen permanente podemos observar la siguiente
característica (página siguiente):
Simulación del sistema carro-péndulo
69
Figura 61: Detalle de la dinámica de la planta discretizada para distintos valores de Kd
En la figura anterior se observa que la diferencia entre las 3 respuestas es muy
pequeña. Por lo tanto, se ha determinado que el valor óptimo para la constante Kd es 1
puesto que con este valor el sistema se estabiliza más rápidamente.
A continuación analizaremos el efecto de la modificación de la constante Kp. Se
utilizarán varios valores para ver cuál es el óptimo, como se muestra a continuación:
Figura 62: Respuesta del sistema discretizado para distintos valores de Kp
En la imagen anterior podemos observar que un aumento de Kp comporta una
disminución del sobrepico inicial y una reducción del tiempo de estabilización. Si utilizamos
una imagen para ver en detalle la respuesta en régimen permanente:
Simulación del sistema carro-péndulo
70
Figura 63: Detalle de la dinámica de la planta discretizada para distintos valores de Kp
Se puede observar como los valores más altos de Kp comportan un error más pequeño
en régimen permanente. Este error se va aproximando cada vez más al ángulo de referencia de
0°.
Por lo tanto, podemos determinar que un valor adecuado para la constante Kp puede
ser Kp=30. Si comparamos la respuesta original del sistema con la respuesta tras modificar las
constantes del PID:
Figura 64: Respuesta del sistema discretizado con el PID original y el PID modificado
Podemos observar que la respuesta del sistema mejora en el tiempo de estabilización
y en el tiempo que necesita para anular el error del ángulo. Por otro lado, empeora en cuanto
al sobrepico inicial y en amortiguación.
Simulación del sistema carro-péndulo
71
Recapitulando:
Se ha realizado la simulación del modelo que describe el comportamiento de un
sistema carro-péndulo, realizando una aproximación progresiva en cuanto a la similitud del
modelo simulado con el sistema real.
Se ha obtenido tres posibles conjuntos de constantes de un control PID para controlar
el sistema real:
En primer lugar, las constantes obtenidas con la planta no linealizada:
Kp = 60; Ki = 1; Kd = 20
El aspecto positivo de la utilización de la planta linealizada es que presenta una mayor
similitud con el sistema real.
Por el contrario, la simulación se realiza en tiempo continuo, por lo que difiere del
sistema real en el que la adquisición de los valores del ángulo y la actuación sobre los motores
se realizan periódicamente.
En segundo lugar, las constantes obtenidas con la planta linealizada:
Kp = 20; Ki = 1; Kd = 2
Esta simulación se encuentra en un punto intermedio entre la planta no linealizada y el
sistema discretizado, puesto que se realiza en tiempo continuo pero la planta utilizada es la del
sistema discretizado.
En tercer lugar, los valores obtenidos con la planta discretizada:
Kp = 30; Ki = 1; Kd = 1
El aspecto positivo de esta simulación es que es un sistema discretizado, por lo tanto,
tiene una mayor similitud con el sistema real en cuanto a que la adquisición de los valores del
ángulo y la actuación sobre los motores se realizan periódicamente.
Por el contrario, la planta discretizada tiene una menor similitud con el sistema real
que la planta no linealizada.
Por lo tanto, lo más posible es que los valores para el control del sistema que se han
obtenido no funcionen tan bien como en las simulaciones, pero deberían permitir mantener el
equilibrio durante un corto periodo de tiempo.
El siguiente paso a realizar consiste en la implementación del sistema de control en
nuestro robo LEGO Mindstorms NXT 2.0.
Pruebas en el sistema real
72
4. Pruebas en el sistema real
En este capítulo se llevará a cabo la verificación de las simulaciones realizadas
anteriormente. Para ello, se realizará la construcción física de un sistema carro-péndulo
utilizando la plataforma LEGO Mindstorms NXT 2.0 y posteriormente se realizará el código
para programarlo en un lenguaje similar al lenguaje C.
4.1.Construcción física del robot
El primer paso para llegar a implementar el algoritmo de control obtenido en las
simulaciones es construir físicamente el robot.
Para la construcción física se utiliza la plataforma de LEGO Mindstorms NXT 2.0, sobre
la cual ya se ha realizado una gran variedad de modelos.
La construcción física que se llevará a cabo en este proyecto parte de la base del
modelo NXTway-GS [32]. Sobre este modelo se han realizado ciertas modificaciones,
como se explica a continuación.
La construcción física del NXTway-GS es la siguiente:
Figura 65: Construcción física del NXTway-GS
De la anterior construcción física se van a realizar las siguientes modificaciones por los
motivos que se exponen a continuación:
En primer lugar se va a modificar la posición del Brick respecto a los motores. En las
imágenes de perfil se puede observar que si se dibujara un segmento vertical en la posición del
eje de rotación de los motores, este segmento no pasaría por el centro del Brick.
Pruebas en el sistema real
73
El problema que supone es que el Brick es el elemento de mayor masa del sistema, y
con bastante diferencia. Por lo tanto, en la construcción física anterior el sistema tiende a caer
en dirección a la parte frontal del Brick, debido a que el peso está descentrado.
Si no se modificara, el sistema tendería a caer siempre en la misma dirección, y el
punto de equilibrio no sería un ángulo de 90° respecto a la superficie por la que se desplaza el
robot.
Por lo tanto, la primera modificación que se va a realizar será centrar el peso del robot
en el eje vertical que parte del eje de rotación de los motores. No solo supone cambiar la
posición del Brick, sino también la de algunas piezas aisladas como la barra de unión entre los
dos motores que sobresale varios centímetros respecto del eje de equilibrio.
La segunda modificación que se realizará será centrar el sensor giroscópico en el eje
vertical que parte del eje de rotación de los motores. Se realizará por dos motivos:
El primer motivo es el que se ha expuesto anteriormente: la necesidad de centrar la
masa del robot. El sensor es el elemento de mayor masa después del controlador Brick.
El segundo motivo es la adquisición de los valores que realiza este sensor. Para poder
obtener la medida correcta del ángulo de desplazamiento, debemos centrar la posición del
sensor con el eje que parte del eje de rotación del sistema.
En tercer lugar se va a modificar la posición de las ruedas debido a que al modificar la
posición de la barra de unión entre ambos motores no disponemos del espacio suficiente en el
segmento que une ambos motores. Por lo tanto, se colocará las ruedas en la parte exterior.
Tras las modificaciones realizadas, el aspecto de nuestro robot es el siguiente:
Figura 66: Construcción física del robot de este proyecto
Pruebas en el sistema real
74
Ambos diseños expuestos anteriormente se han realizado con el software de
construcción virtual Lego Digital Designer [33].
Se puede observar en la figura 66, concretamente en las imágenes de perfil, que el
peso del robot queda más centrado en el eje vertical que parte del eje de rotación de los
motores.
También se puede observar como se ha colocado el sensor en este mismo eje. El
problema que podría existir con la construcción que se ha realizado para este proyecto es
debido a la posición del sensor: como se ha colocado en un lateral, el robot ya no es simétrico,
y como consecuencia estamos cargando un motor con un peso ligeramente superior al peso
que carga al otro motor.
El problema que puede existir es que uno de los dos motores tenga una mayor zona
muerta que el otro, o bien que al mantener el equilibrio el robot tienda a girar.
Pese a la existencia de este posible problema, las ventajas que supone el cambio son
mayores que los inconvenientes.
Una vez presentada la construcción física del robot que se ha utilizado, el siguiente
paso que se realizará será exponer brevemente el software utilizado para su programación.
4.2.Entorno de programación
Existen muchos softwares y lenguajes de programación para la plataforma LEGO
Mindstorms NXT 2.0.
En primer lugar tenemos el software que viene en el kit de LEGO: NXT-G [34]. Es un
software creado por National Instruments y el lenguaje de programación es como el de
Labview: con bloques.
Por otro lado también se ha creado diversas toolbox para distintos softwares, como
por ejemplo para Matlab [35] y para Labview [36].
Y por último tenemos softwares cuya programación es muy parecida al lenguaje C [37].
El lenguaje que utilizaremos en este proyecto para llevar a cabo la programación del
robot es NXC (Not eXactly C) [38], y el entorno de programación utilizado será Bricx Command
Center [39].
Esta elección se ha tomado en base a los conocimientos previos sobre el lenguaje C y
por otro lado porque este lenguaje y este entorno son los más utilizados para la programación
del Brick de LEGO.
Una vez conocido el sistema físico y el entorno y lenguaje de programación, a
continuación se describirá el funcionamiento general del robot.
Pruebas en el sistema real
75
4.3.Programación del sistema de control del robot
Para explicar cómo se realizará la programación del robot y para enlazar el sistema real
con las simulaciones realizadas se recurrirá al siguiente esquema:
Figura 67: Esquema del funcionamiento general del robot
En el esquema anterior podemos observar los siguientes elementos:
En primer lugar, el ángulo de referencia del robot. Este ángulo será el ángulo en el que
esté posicionado cuando se realice la calibración del sensor.
En segundo lugar, la señal de error que será la diferencia entre el ángulo de referencia
y el ángulo que leamos con el sensor.
En tercer lugar, el controlador. El control PID estará implementado en un programa
que se enviará al Brick.
En cuarto lugar, la señal de control, que será un ciclo de trabajo de los motores, que
está comprendido entre -100 y +100. Este ciclo de trabajo se obtiene con el PID implementado.
En quinto lugar, lo que era la planta del sistema en las simulaciones, en este caso es el
robot en sí. Como se ha comentado, la actuación se realizará sobre los motores.
En sexto lugar, en el robot tenemos el sensor con el que obtendremos el ángulo del
robot en un determinado instante de tiempo. Este sensor es un giroscopio, y el valor que
devuelve es la velocidad angular.
Por último, para obtener el ángulo del robot deberemos integrar la medida obtenida
del giroscopio.
Si recapitulamos, prácticamente se han visto todos los elementos anteriores. Los
elementos que faltan por explicar son: el giroscopio, la integración de la medida del giroscopio
y el código realizado para mantener en equilibrio el robot, que se explicarán a continuación.
Pruebas en el sistema real
76
4.4.El sensor: el giroscopio
La definición técnica con la que podemos explicar que es un giroscopio y como
funciona es la siguiente:
El giróscopo o giroscopio es un dispositivo mecánico formado
esencialmente por un cuerpo con simetría de rotación que gira
alrededor de su eje de simetría. Cuando se somete el giróscopo a
un momento de fuerza que tiende a cambiar la orientación del eje de
rotación su comportamiento es aparentemente paradójico ya que el
eje de rotación, en lugar de cambiar de dirección como lo haría un
cuerpo que no girase, cambia de orientación en una dirección
perpendicular a la dirección «intuitiva» [40].
Si se le añade la circuitería adecuada se puede convertir fácilmente en un sensor que
transforme una magnitud física (un momento de fuerza) en una señal eléctrica que podrá ser
transformada en un valor numérico.
El giroscopio que se va a utilizar en este proyecto es el siguiente:
4.4.1. HiTechnic Gyro Sensor
Se trata de un sensor giroscópico fabricado por HiTechnic [41]. Este sensor ya está
adaptado a la plataforma LEGO Mindstorms NXT 2.0, es decir, la conexión del sensor al Brick se
realiza con el cable estándar utilizado en esta plataforma. Además, visualmente se utilizado un
encapsulado como el de los sensores oficiales de LEGO.
Figura 69: HiTechnic Gyro Sensor
Se trata de un sensor giroscópico de un único eje de medida, por lo que es suficiente
para nuestro robot. Según el fabricante, el sensor devuelve un valor que representa el número
de grados por segundo de rotación, es decir, la velocidad angular. El sensor puede llegar a
medir rotaciones de más de ±360° por segundo.
Figura 68: Giroscopio de tres ejes
Pruebas en el sistema real
77
También especifica que la información del sensor puede ser leída a más de,
aproximadamente, 300 veces por segundo.
Esta información es muy importante para la realización de este proyecto puesto que el
periodo de muestreo de nuestro sistema es un elemento clave: si leemos el valor del ángulo
con un período muy elevado, el sistema podría caer debido a que los motores no habrían
actuado a tiempo.
300 veces por segundo supone un periodo de 1/300, que es 3,33 milisegundos
aproximadamente. Se ha decidido utilizar un periodo de lectura del sensor de 10 milisegundos,
por situarnos un poco por encima del valor límite que establece el fabricante.
La rotación que puede leer el sensor es la siguiente:
Figura 70: Rotación que lee el girosocipio de HiTechnic
El problema principal que tiene este giroscopio son las derivas. Se ha escrito artículos
[42] en los que se explican las causas de estas posibles derivas y se dan algunas soluciones para
mitigarlas, pero por lo general suele ser muy difícil anularlas complemente.
Estas derivas dependen de diversos factores, de entre los que se destacan los
siguientes: la fabricación del sensor y el nivel de voltaje de alimentación del Brick.
Esos son los motivos principales que se suelen exponer, pero además existe otro y de
una gran importancia: las vibraciones, en nuestro caso, las vibraciones que causan los motores
debido a su funcionamiento.
Por lo tanto, a continuación se realizará un breve estudio sobre el sensor giroscópico
de HiTechnic con la finalidad de intentar conocer el funcionamiento del sensor frente a
variaciones de algunos de los parámetros anteriores.
Pruebas en el sistema real
78
4.4.1.1. Pruebas estáticas realizadas con el giroscopio de HiTechnic
Se ha realizado diversas pruebas con la finalidad de comprobar el funcionamiento del
sensor giroscópico. El código utilizado para estas pruebas se encuentra disponible en el anexo
2.
Las pruebas se han realizado para el caso de la alimentación del Brick con pilas
alcalinas y la alimentación con la batería oficial de LEGO.
Se ha situado el robot sobre una superficie horizontal de forma que quede inmóvil.
Cuando se requiera realizar una actuación sobre los motores, se posiciona el robot de forma
que las ruedas no entren en contacto con la superficie.
En primer lugar, en la mayoría de documentaciones sobre el giroscopio y en general,
sobre cualquier sensor, se realiza una calibración con la finalidad de intentar reducir las
posibles derivas posteriores.
Para calibrar el giroscopio se tomará un conjunto de medidas y se realizará el
promedio [43] de estas. El código correspondiente a la calibración es el siguiente:
//Obtención del offset del sensor:
for(int i = 0; i < muestras_offset; i++)
{
offset += SensorHTGyro(GYRO_PORT);
Wait(T_calibracion);
}
offset = offset / muestras_offset;
En la siguiente tabla se adjunta los resultados obtenidos. Se ha realizado 5 mediciones
de 1000 muestras cada una con un periodo de muestreo de 10 ms, obteniendo el promedio de
todas las muestras de cada medición. Por último se ha obtenido el promedio de estas 5
mediciones. También se incluye los valores de voltaje de alimentación del Brick en cada caso.
Valores de offset obtenidos
Alimentación: Pilas alcalinas Batería LEGO
DC motores: 0% 0%
Parámetros: Vel. Angular (°/s) Voltaje (V) Vel. Angular (°/s) Voltaje (V)
-1,18 8,198 -1,09 8,281
-1,19 8,17 -1,13 8,267
-1,25 8,156 -1,13 8,294
-1,24 8,156 -1,12 8,308
-1,19 8,156 -1,13 8,322
Promedio: -1,21 8,1672 -1,12 8,2944
Tabla 4: Medidas del offset del giroscopio de HiTechcnic
Pruebas en el sistema real
79
Se puede observar los siguientes resultados:
El valor medio final obtenido para ambos sistemas de alimentación es muy similar: la
diferencia es inferior a 1 décima.
Se debe tener en cuenta que los niveles de alimentación del sistema con batería oficial
de LEGO son ligeramente superiores a los niveles de alimentación con pilas alcalinas.
También debemos tener en cuenta que los valores de voltaje tomados son el valor
medio de varias lecturas: si observamos el nivel de voltaje del Brick, tenemos la opción de
refresh: actualizar el valor del nivel de voltaje. Al actualizar este valor, prácticamente nunca
vamos a obtener el mismo valor.
Se observa que los resultados obtenidos con la batería oficial de LEGO son más
constantes ante los cambios de voltaje de alimentación del sistema.
Por lo tanto, en la tabla anterior podemos determinar que la alimentación del sistema
con batería es la mejor opción puesto que la calibración del offset es más constante frente a
variaciones del nivel de voltaje.
El siguiente paso será comprobar el funcionamiento de ambos sistemas de
alimentación en la medición del ángulo.
Para realizar la medición del ángulo debemos integrar el valor obtenido del sensor,
que es la velocidad angular.
Para integrar esta medida, multiplicaremos el valor obtenido del sensor por el tiempo
que transcurre entre muestras, que será un delay creado con el período de muestreo que
escojamos. En este caso el periodo de muestreo es de 10 ms. Este tipo de integral es una
fórmula de Newton-Cotes utilizando la regla del rectángulo [44].
El código correspondiente a la integración de la medida del giroscopio es el siguiente:
//Lectura del giroscopio (velocidad angular) y obtención del
ángulo:
lectura_gyro = SensorHTGyro(GYRO_PORT);
velocidad = lectura_gyro - offset;
angulo_actual += velocidad*T;
//Delay para la lectura del giroscopio:
Wait(T*1000);
Para comprobar el funcionamiento del giroscopio en la medición del ángulo, en primer
lugar se ha realizado dos conjuntos de pruebas: sin actuación sobre los motores (sin vibración)
y con actuación sobre los motores (con vibración). Estas pruebas se encuentran disponibles en
el anexo 4.
Del mismo modo que para la obtención del offset, se ha realizado 5 mediciones y se ha
obtenido el promedio de estas. Para obtener el ángulo final de desviación se he ejecutado el
programa de adquisición de muestras del sensor durante 60 segundos.
Pruebas en el sistema real
80
La tabla de resultados obtenidos es la siguiente:
Valores de ángulo obtenidos
Alimentación: Pilas alcalinas Batería LEGO
DC motores: 0% 0%
Parámetros: Ángulo (°) Voltaje (V) Ángulo (°) Voltaje (V)
-1,8 8,031 0,98 8,308
1,87 8,031 0,42 8,336
1,8 8,031 -1,6 8,322
-2,9 8,031 0,44 8,308
0,16 8,017 0,31 8,294
Promedio: -0,174 8,0282 0,11 8,3136
DC motores: 100% 100%
Parámetros: Ángulo (°) Voltaje (V) Ángulo (°) Voltaje (V)
-6,82 8,239 0,13 8,294
-6,53 8,128 -2,39 8,211
-2,19 8,087 -5,45 8,225
-6,18 8,045 -4,36 8,225
-3,82 7,99 -5,27 8,198
Promedio: -5,108 8,0978 -3,468 8,2306
Tabla 5: Medidas del ángulo de desviación del giroscopio de HiTechcnic en 60 segundos
Se puede observar los siguientes resultados:
- En el caso sin actuación sobre los motores:
Los niveles de voltaje del sistema alimentado con baterías alcalinas se mantienen más
constantes que en la alimentación del sistema con batería oficial de LEGO.
Aún así, el ángulo final de desviación obtenido alimentando el sistema con la batería
LEGO es en casi todos los casos inferior (en módulo) a la desviación obtenida alimentando el
sistema con pilas alcalinas.
- En el caso con actuación máxima sobre los motores:
En este caso se puede observar la gran ventaja de la batería LEGO: los motores
trabajan al 100% durante 60 segundos, y podemos ver cómo decae el nivel de voltaje de las
pilas alcalinas. En cambio, el nivel de voltaje de la batería se mantiene bastante constante.
El promedio del ángulo de desviación obtenido en la alimentación con batería también
es favorable a la alimentación del sistema con batería, puesto que la desviación del ángulo es
menor que para la alimentación del sistema con pilas alcalinas.
Si comparamos los resultados obtenidos en el caso de actuar sobre los motores y en el
caso de no actuar sobre ellos, podemos ver como la vibración de los motores es el factor más
importante en el funcionamiento del giroscopio.
Pruebas en el sistema real
81
Una vez analizado el funcionamiento del giroscopio, podemos concluir que pese a
realizar una calibración previa del sensor, la lectura al cabo de 60 segundos supone una
desviación importante respecto al valor ideal (0°). Esta desviación se incrementa si se realiza
una actuación sobre los motores.
También debemos tener en cuenta que el robot no estará siempre trabajando con un
ciclo de trabajo del 100%, sino que el ciclo de trabajo dependerá del ángulo de inclinación.
Por lo tanto, es bastante difícil realizar un cálculo certero del comportamiento del
giroscopio de HiTechnic, por lo que la solución utilizada para minimizar este error de
desviación será realizar pruebas sobre el sistema en funcionamiento.
La realización de estas pruebas ha servido para determinar que seguramente el
sistema funcione mejor si se alimenta con la batería oficial de LEGO.
El siguiente paso que se llevará a cabo será realizar una serie de mediciones con el
giroscopio en movimiento para comprobar su funcionamiento tras la calibración.
4.4.1.2. Pruebas dinámicas realizadas con el giroscopio de HiTechnic
En este apartado se comprobará el funcionamiento del giroscopio, inclinando el robot
manualmente y sin realizar la actuación sobre los motores. Los datos de cada una de las
simulaciones se encuentran disponibles en el anexo 4.
En primer lugar se situará el cuerpo del robot apoyado sobre una superficie. A
continuación se realizará una rotación de -180° y una rotación de +180° para devolverlo a la
posición inicial y comprobar la desviación respecto al ángulo esperado (0°).
Figura 71: Diagrama esquemático de la primera prueba dinámica del giroscopio
Pruebas en el sistema real
82
La gráfica temporal obtenida es la siguiente:
Gráfico 3: Respuesta del giroscopio a oscilaciones de ±180°
Si ampliamos la gráfica anterior a la zona de nuestro interés:
Gráfico 4: Respuesta del giroscopio a oscilaciones de ±180° (ampliación)
Se puede observar como después de cada oscilación completa el ángulo cada vez
difiere más del valor inicial. De hecho, tras la última oscilación podemos ver claramente como
empieza a actuar el valor del drift del giroscopio.
La segunda prueba consiste en intentar simular el comportamiento del robot con
oscilaciones de menor amplitud: inicialmente se sitúa el cuerpo del robot sobre una superficie.
A continuación se realiza una rotación de 90° para llevar el robot a la posición teórica de
equilibrio. Una vez equilibrado, se realizan pequeñas rotaciones (±20°). Finalmente se
devuelve el robot a su posición inicial para comprobar el ángulo de desviación respecto a 0°.
-200
-180
-160
-140
-120
-100
-80
-60
-40
-20
0
20
0,0
1
0,8
81
,75
2,6
2
3,4
9
4,3
65
,23
6,1
6,9
7
7,8
48
,71
9,5
8
10
,45
11
,32
12
,19
13
,06
13
,93
14
,81
5,6
7
16
,54
17
,41
18
,28
19
,15
Án
gulo
(°)
Tiempo(s)
-5
-4
-3
-2
-1
0
1
0,0
10
,85
1,6
92
,53
3,3
7
4,2
15
,05
5,8
9
6,7
37
,57
8,4
19
,25
10
,09
10
,93
11
,77
12
,61
13
,45
14
,29
15
,13
15
,97
16
,81
17
,65
18
,49
19
,33
Án
gulo
(°)
Tiempo(s)
Pruebas en el sistema real
83
Figura 72 Diagrama esquemático de la segunda prueba dinámica del giroscopio
La gráfica temporal obtenida es la siguiente:
Gráfico 5: Respuesta del giroscopio a pequeñas oscilaciones (±10°)
Como se puede observar en la figura anterior, tras la realización de oscilaciones de
±20° aproximadamente, el sensor presenta una desviación importante. Consultando los datos
obtenidos podemos ver que esta desviación es de casi 5°.
La última prueba que se va a realizar es similar a la anterior, con la diferencia que las
oscilaciones de esta prueba serán mucho más pequeñas en un intento por aproximarnos al
comportamiento real del robot, puesto que se espera que el robot responda con la suficiente
velocidad para que las oscilaciones sean lo más pequeñas posibles.
-120
-100
-80
-60
-40
-20
0
0,0
10
,88
1,7
5
2,6
23
,49
4,3
65
,23
6,1
6,9
7
7,8
4
8,7
19
,58
10
,45
11
,32
12
,19
13
,06
13
,93
14
,8
15
,67
16
,54
17
,41
18
,28
19
,15
Án
gulo
(°)
Tiempo(s)
Pruebas en el sistema real
84
Figura 73: Diagrama esquemático de la tercera prueba dinámica del giroscopio
La gráfica temporal obtenida es la siguiente:
Gráfico 6: Respuesta del giroscopio a pequeñas oscilaciones (±3°)
Se puede observar que en este caso el error que presenta el sistema es menor que en
el caso anterior, pero aun así sigue existiendo. En este caso la desviación final es de 2°.
Por lo tanto, el método que se utilizará para intentar reducir esta deriva será la
realización de pruebas utilizando el código final creado para mantener al robot en equilibrio.
Una vez analizado el comportamiento dinámico del giroscopio, el siguiente paso
realizado será describir brevemente el código con el que se pretende mantener en equilibrio
este sistema.
-100
-80
-60
-40
-20
0
20
0,0
10
,88
1,7
5
2,6
23
,49
4,3
65
,23
6,1
6,9
7
7,8
4
8,7
19
,58
10
,45
11
,32
12
,19
13
,06
13
,93
14
,8
15
,67
16
,54
17
,41
18
,28
19
,15
Án
gulo
(°)
Tiempo(s)
Pruebas en el sistema real
85
4.5.Código final
A continuación se describirá brevemente el código final realizado, detallando
únicamente las partes más importantes. Este código no es muy extenso por lo que no se ha
creído que sea necesario crear funciones con la finalidad de optimizar su estructura.
En primer lugar tenemos las inicializaciones, tanto de constantes como de variables.
//Constantes:
#define GYRO_PORT S4
#define T_muestreo_ms 10
#define muestras_offset 1000
//Constantes del PID:
#define Kp 60
#define Ki 1
#define Kd 20
//Variables:
float velocidad=0.0;
float angulo_actual=0.0;
float motor_actual=0.0;
//Variables del PID:
float error=0.0;
float error_old=0.0;
float P_error=0.0;
float I_error=0.0;
float D_error=0.0;
//Variables del giroscopio:
float offset_gyro=0.0;
float lectura_gyro = 0.0;
//Variables para guardar datos en un fichero datalog:
byte fileHandle;
short bytesWritten;
En segundo lugar tenemosla función principal. Definiremos el puerto en el que se
encuentra el giroscopio conectado:
//Función principal:
task main ()
{
//Definimos el puerto del giroscopio:
SetSensorHTGyro(GYRO_PORT);
A continuación preparamos el sistema para la calibración. Esta preparación incluye
asegurarnos que no hay actuación sobre los motores y esperar un tiempo prudencial para
colocar adecuadamente el robot. Una vez finalizada la preparación se utilizará un indicador
acústico para informar sobre el inicio de la calibración.
Pruebas en el sistema real
86
Debemos recordar que el proceso de calibración es muy importante para un
funcionamiento lo más correcto posible posteriormente, por lo que durante la calibración el
robot deberá permanecer completamente inmóvil.
//Nos aseguramos que no haya actuación sobre los motores:
Off(OUT_AC);
//Esperamos 10 segundos para poder colocar el robot
adecuadamente. Este paso
//es muy importante debido a que a continuación se realizará la
calibración
//del giroscopio, y necesitamos que el robot esté sin movimiento
y en la
//posición adecuada, que es en un ángulo de 90º respecto a la
superficie.
Wait(SEC_10);
//Aviso acústico para informar que empieza la calibración del
sensor.
PlaySound(SOUND_CLICK);
El siguiente paso será realizar la calibración del sensor, que ya se ha explicado
previamente. Una vez finalizado el proceso de calibración se indicará con una señal acústica.
//Obtención del offset del sensor:
for(int i = 0; i < muestras_offset; i++)
{
offset_gyro += SensorHTGyro(GYRO_PORT);
Wait(T_muestreo_ms);
}
offset_gyro = offset_gyro / muestras_offset;
//Aviso acústico conforme ha finalizado la obtención del offset.
PlaySound(SOUND_CLICK);
El último paso previo a la ejecución del bucle principal del programa será crear un
archivo de datalog en el que iremos guardando los valores de la variable o variables que
deseemos representar gráficamente para estudiar el comportamiento del robot.
//Borramos el archivo de datos anterior y lo creamos de nuevo:
DeleteFile("Dades.txt");
CreateFile("Dades.txt", 30000, fileHandle);
A continuación empieza el bucle principal en el que se realiza la adquisición de valores
del sensor, la ejecución del controlador PID y la actuación sobre los motores.
Pruebas en el sistema real
87
En primer lugar se realiza la adquisición de valores del sensor. El valor adquirido se
integra con la finalidad de obtener el ángulo de desviación del robot respecto a la posición de
equilibrio en la que se ha calibrado.
//Bucle para mantener el sistema en equilibrio:
for (int i=0;i<4000;i++)
{
//Lectura del giroscopio (velocidad angular) y obtención del
ángulo:
lectura_gyro = SensorHTGyro(GYRO_PORT);
velocidad = lectura_gyro - offset_gyro;
angulo_actual += velocidad*(T_muestreo_ms/1000) -(13.7/2000);
El tiempo durante el que se quiere ejecutar el programa para mantener en equilibrio el
robot dependerá del número de iteraciones del bucle for y del periodo de muestreo que
tengamos. En este caso tenemos 4000 iteraciones con un periodo de muestre de 10 ms con lo
que obtenemos un tiempo de ejecución de 40 s.
En la obtención del ángulo de desviación podemos observar que se ha añadido un
valor de 13.7/2000. Este valor es muy importante porque ayuda a minimizar el efecto del drift
(aunque no lo elimine completamente).
La obtención de este valor ha sido experimental: una vez obtenido el controlador PID
adecuado para mantener el sistema en equilibrio, se observa que existe un drift que hace que
el robot vaya avanzando en una determinada dirección.
Se han realizado diversas pruebas con un tiempo de 20 segundos y se ha ido
corrigiendo el valor que se le añade al ángulo de lectura del giroscopio hasta reducir este
desplazamiento del robot.
El siguiente paso es transformar el ángulo del PID en la señal de actuación que
enviaremos a los motores, que será el ciclo de trabajo, comprendido entre -100 y +100.
El código correspondiente al PID es el siguiente:
//PID:
error_old = error;
error = 0 - angulo_actual;
P_error = error;
I_error += error_old;
D_error = error - error_old;
motor_actual = Kp*P_error + Ki*I_error + Kd*D_error;
A continuación se satura el ciclo de trabajo en sus valores extremos y se envía a los
motores:
//Saturación del actuador:
if (motor_actual > 100.0) {motor_actual = 100.0;}
if (motor_actual < -100.0) {motor_actual = -100.0;}
//Actuación sobre el motor:
OnFwd(OUT_AC,motor_actual);
Pruebas en el sistema real
88
Por último guardamos las variables que deseemos en el datalog. Posteriormente el
archivo datalog lo podremos abrir desde el ordenador para representar gráficamente los
datos.
//Guardamos los datos en el datalog:
string ang = NumToStr(angulo_actual);
string dc = NumToStr(motor_actual);
string write = StrCat(ang,",",dc);
WriteLnString(fileHandle,write, bytesWritten);
Una vez finalizada la ejecución del bucle for se indica mediante una señal acústica. Se
para la actuación sobre los motores y se cierra el fichero de datos creado. Si no lo cerráramos
no podríamos abrirlo posteriormente.
//Una vez finalizado el bucle, apagamos los motores y cerramos
el fichero
//de datos para poder leerlo posteriormente. También se utiliza
un indicador
//acústico para informar que ha finalizado el programa.
Off(OUT_AC);
CloseFile(fileHandle);
PlaySound(SOUND_CLICK);
Wait(SEC_1);
}
El código completo se encuentra disponible en el anexo 2.
A continuación se realizará la comprobación del funcionamiento del programa para los
valores de las constantes del PID obtenidas en las simulaciones.
Pruebas en el sistema real
89
4.6.Pruebas finales del robot
Por último se comprobará el funcionamiento del robot con los controladores PID
determinados en las simulaciones. Para ello, se utilizará el código del anterior apartado y
únicamente se modificará el valor de las constantes Kp, Ki y Kd.
Se ha realizado dos tipos de pruebas: sin perturbar el sistema y perturbando el
sistema.
El parámetro escogido para comprobar el funcionamiento del robot es el ángulo de
desviación respecto al punto de equilibrio, tal y como se había realizado anteriormente en las
simulaciones.
Los valores de cada una de las pruebas se encuentran disponibles en el anexo 4.
4.6.1. Comportamiento del robot sin perturbaciones
En primer lugar se utilizará las constantes obtenidas en la simulación de la planta no
linealizada. Los valores de estas constantes son:
Kp = 60; Ki = 1; Kd = 20
La respuesta obtenida del robot es la siguiente:
Gráfico 7: Respuesta del robot para las constantes Kp=60; Ki=1; Kd=20
El sistema oscila indefinidamente. La amplitud de las oscilaciones es de 4° y la
frecuencia es bastante elevada, aproximadamente 5 oscilaciones por segundo.
-10
-8
-6
-4
-2
0
2
4
6
8
10
0,0
10
,71
,39
2,0
82
,77
3,4
64
,15
4,8
45
,53
6,2
26
,91
7,6
8,2
98
,98
9,6
71
0,3
61
1,0
51
1,7
41
2,4
31
3,1
21
3,8
11
4,5
15
,19
15
,88
16
,57
17
,26
17
,95
18
,64
19
,33
Án
gulo
(°)
Tiempo(s)
Pruebas en el sistema real
90
El motivo de este comportamiento podría ser que el valor de la constante Kp sea muy
elevado, o que el valor de la constante Kd sea muy reducido.
En segundo lugar se utilizará las constantes obtenidas en la simulación de la planta
linealizada. Los valores de estas constantes son:
Kp = 20; Ki = 1; Kd = 2
La respuesta obtenida del robot es la siguiente:
Gráfico 8: Respuesta del robot para las constantes Kp=20; Ki=1; Kd=2
La respuesta del sistema mejora bastante respecto al caso anterior por los siguientes
motivos:
- En primer lugar, la amplitud máxima de las oscilaciones oscilación es de 2,2°.
- En segundo lugar, aunque las oscilaciones no cesen, el sistema es bastante más
estable que en el caso anterior puesto que las oscilaciones de amplitud elevada
(caídas del robot) se corrigen hasta que prácticamente se anula el error en el
ángulo.
El problema que se observa en este caso es el número de oscilaciones que necesita el
robot para mantenerse en equilibrio: pese a que su amplitud se va reduciendo, la frecuencia
sigue siendo elevada: 4 oscilaciones por segundo.
Para mejorar este comportamiento la solución sería similar a la comentada en el caso
anterior: se podría reducir la constante Kp o bien aumentar la constante Kd.
-2,5
-2
-1,5
-1
-0,5
0
0,5
1
1,5
2
0,0
10
,71
,39
2,0
82
,77
3,4
64
,15
4,8
45
,53
6,2
26
,91
7,6
8,2
98
,98
9,6
71
0,3
61
1,0
51
1,7
41
2,4
31
3,1
21
3,8
11
4,5
15
,19
15
,88
16
,57
17
,26
17
,95
18
,64
19
,33
Án
gulo
(°)
Tiempo(s)
Pruebas en el sistema real
91
En tercer lugar se utilizará las constantes obtenidas en la simulación de la planta
discretizada. Los valores de estas constantes son:
Kp = 30; Ki = 1; Kd = 1
La respuesta obtenida del robot es la siguiente:
Gráfico 9: Respuesta del robot para las constantes Kp=30; Ki=1; Kd=1
En este caso podemos observar un comportamiento muy similar al de la planta no
linealizada con una diferencia:
Al cabo de aproximadamente 5 segundos, las oscilaciones se reducen y adquieren un
valor medio negativo. Con este controlador el robot no es capaz de mantener el equilibrio y
cae.
Para completar la simulación se ayuda al robot a que no caiga, con la finalidad de
observar la respuesta.
El robot (con ayuda) oscila indefinidamente. Las oscilaciones son de mayor amplitud
que en el caso de la planta no linealizada, y con una frecuencia de aproximadamente 4
oscilaciones por segundo.
Como las respuestas del robot son similares, si comparamos los valores del controlador
PID de la planta no linealizada y de la planta discretizada podemos observar que:
- La constante proporcional de la planta discretizada (Kp=30) es la mitad que la de la
planta no linealizada (Kp=60). Por lo tanto, en teoría las oscilaciones de la planta
discretizada deberían tener menor amplitud, pese a que el resultado de la prueba
sea el contrario.
-10
-8
-6
-4
-2
0
2
4
6
8
10
0,0
10
,71
,39
2,0
82
,77
3,4
64
,15
4,8
45
,53
6,2
26
,91
7,6
8,2
98
,98
9,6
71
0,3
61
1,0
51
1,7
41
2,4
31
3,1
21
3,8
11
4,5
15
,19
15
,88
16
,57
17
,26
17
,95
18
,64
19
,33
Án
gulo
(°)
Tiempo(s)
Pruebas en el sistema real
92
- La constante derivativa de la planta no linealizada (Kd=20) es veinte veces mayor
que la de la planta discretizada (Kd=1).
El significado de la comparación anterior es el siguiente: la importancia de la reducción
de la constante derivativa es mucho mayor a la de la reducción de la constante proporcional.
Este resultado se aplicará a continuación con la finalidad de optimizar la respuesta del robot.
Tras estas tres primeras simulaciones, el controlador PID que mejor funciona en el
robot es el que se había obtenido con la planta linealizada.
El siguiente paso será la optimización del comportamiento del robot. Para ello,
utilizaremos como base los valores originales del controlador PID de la planta linealizada:
Kp = 20; Ki = 1; Kd = 2
Se llevará a cabo dos acciones: reducir la constante proporcional y aumentar la
constante derivativa.
Tras la realización de varias pruebas con distintos valores para ambas constantes, el
comportamiento óptimo del robot se ha obtenido con los siguientes valores:
Kp = 10; Ki = 1; Kd = 20
La respuesta obtenida del robot es la siguiente:
Gráfico 10: Respuesta del robot para las constantes Kp=10; Ki=1; Kd=20
Como se puede observar en el gráfico anterior, la respuesta del robot es más
constante que en los casos anteriores y presenta menos oscilaciones. Además, la frecuencia de
oscilación se reduce a 1 oscilación cada 2,5 segundos.
-2,5
-2
-1,5
-1
-0,5
0
0,5
1
1,5
2
2,5
0,0
10
,71
,39
2,0
82
,77
3,4
64
,15
4,8
45
,53
6,2
26
,91
7,6
8,2
98
,98
9,6
71
0,3
61
1,0
51
1,7
41
2,4
31
3,1
21
3,8
11
4,5
15
,19
15
,88
16
,57
17
,26
17
,95
18
,64
19
,33
Án
gulo
(°)
Tiempo(s)
Pruebas en el sistema real
93
El siguiente paso consiste en analizar el comportamiento del robot frente a
perturbaciones.
4.6.2. Comportamiento del robot frente a perturbaciones
Como se ha determinado en las pruebas anteriores, el controlador PID obtenido con la
planta discretizada no permitía al robot mantener el equilibrio, por lo que se descarta utilizarlo
para comprobar la respuesta del robot frente a perturbaciones.
Por lo tanto se realizará las pruebas con el controlador PID de la planta no linealizada,
el de la planta linealizada y el óptimo que se ha obtenido en el apartado anterior.
En primer lugar se utiliza el controlador PID de la planta no linealizada. El problema
que existe es que el robot está oscilando indefinidamente. No es capaz de responder a la
perturbación y cae.
Por lo tanto, este controlador no es válido.
El siguiente controlador que se utilizará es el de la planta linealizada. La respuesta
obtenida del robot es la siguiente:
Gráfico 11: Respuesta del robot frente a una perturbación con constantes Kp=20; Ki=1; Kd=2
El robot soporta perturbaciones de aproximadamente 9° sin caer. El robot presenta
bastantes oscilaciones hasta que consigue equilibrarse, como se había visto en la simulación
sin perturbación.
-6
-4
-2
0
2
4
6
8
10
0,0
10
,71
,39
2,0
82
,77
3,4
64
,15
4,8
45
,53
6,2
26
,91
7,6
8,2
98
,98
9,6
71
0,3
61
1,0
51
1,7
41
2,4
31
3,1
21
3,8
11
4,5
15
,19
15
,88
16
,57
17
,26
17
,95
18
,64
19
,33
Án
gulo
(°)
Tiempo(s)
Pruebas en el sistema real
94
Pese a la gran cantidad de oscilaciones, el robot se mantiene en equilibrio.
Por lo tanto, se demuestra que con un controlador PID obtenido en las simulaciones
podemos mantener el robot en equilibrio frente a perturbaciones de amplitud similar a las
introducidas en las simulaciones.
Por último se utilizará el controlador optimizado del apartado anterior con el que se
espera obtener un mejor comportamiento.
La respuesta obtenida del robot es la siguiente:
Gráfico 12: Respuesta del robot frente a una perturbación con constantes Kp=10; Ki=1; Kd=20
La respuesta del robot mejora respecto al caso anterior. Por ejemplo, para una
perturbación de 10° se estabiliza en menos de 2 segundos y únicamente necesita 2
oscilaciones.
Por lo tanto, el control PID con el que se ha optimizado el comportamiento del robot
es el siguiente:
Kp = 10; Ki = 1; Kd = 20
Recapitulando, se ha demostrado que es posible mantener en equilibrio el robot frente
a perturbaciones con un controlador obtenido en las simulaciones.
Debido a la diferencia entre el modelo real y las simulaciones, debemos modificar el
controlador PID obtenido de las simulaciones para optimizar el comportamiento del robot.
-15
-10
-5
0
5
10
15
0,0
10
,71
,39
2,0
82
,77
3,4
64
,15
4,8
45
,53
6,2
26
,91
7,6
8,2
98
,98
9,6
71
0,3
61
1,0
51
1,7
41
2,4
31
3,1
21
3,8
11
4,5
15
,19
15
,88
16
,57
17
,26
17
,95
18
,64
19
,33
Án
gulo
(°)
Tiempo(s)
Conclusiones
95
5. Conclusiones
A continuación se resumen las conclusiones más importantes que se han extraído en la
realización de este proyecto:
- En primer lugar, a modo de resumen, las tareas realizadas en este proyecto han sido
las siguientes:
Se ha realizado la modelización del sistema real, obteniendo las ecuaciones
que describen su dinámica.
Con el modelo obtenido se ha realizado diversas simulaciones con
diferentes grados de aproximación a la realidad.
Se ha obtenido un controlador para cada modelo simulado.
Se ha comprobado el funcionamiento de estos controladores sobre el
sistema real. El resultado final ha sido satisfactorio puesto que con un
controlador obtenido en las simulaciones se puede mantener el robot en
equilibrio.
- En segundo lugar, se debe recordar que la modelización del sistema real que se ha
realizado ha sido con el sistema carro-péndulo. En esta modelización se ha
considerado varios elementos ideales, destacando el ejemplo el cuerpo del robot,
modelado como una varilla de masa uniformemente distribuida.
Pese a haber introducido ciertos parámetros restrictivos con la finalidad de realizar
una mejor aproximación del modelo a la realidad (por ejemplo, las restricciones en
los motores), el controlador óptimo obtenido para el control del robot no es ninguno
de los obtenidos en las simulaciones.
Todo ello quiere decir que los dos factores clave en la modelización del sistema son:
la modelización física del péndulo y las restricciones de los motores del robot.
- En tercer lugar, se puede concluir que existe una estrecha relación entre simulación y
pruebas en el sistema real, puesto que se realimentan mutuamente para que el
modelo y el sistema real sean lo más parecidos posibles.
- En cuarto lugar, uno de los aspectos de mayor importancia en la implementación
sobre el sistema real es el sensor giroscópico. Como se ha estudiado, el sensor
utilizado dista mucho de la idealidad utilizada en las simulaciones, principalmente
por las derivas provocadas por las vibraciones de los motores.
- En quinto y último lugar, pese a que existan diferencias entre el modelo realizado y el
sistema real, se ha comprobado que con uno de los controles obtenidos en las
simulaciones el sistema se mantiene en equilibrio y es capaz de responder a
perturbaciones por lo que parece que el modelo y el sistema real tienen similitudes.
Posibles mejoras
96
5.1.Posibles mejoras
Aunque los resultados finales obtenidos hayan sido satisfactorios, a continuación se
detallan algunas posibles mejoras que se podrían realizar:
En primer lugar, se podría realizar una mejor aproximación del sistema real al modelo.
Esta mejora debería ir encaminada en dos direcciones:
1. Realizar una descripción física más detallada del cuerpo robot con la finalidad de
obtener un modelo del péndulo más similar al cuerpo del robot, en vez de utilizar
como modelo de péndulo una varilla ideal.
2. Realizar una descripción dinámica más detallada de los motores de LEGO
Mindstorms. Esta mejora debe centrarse principalmente en la obtención de las
curvas de arranque del motor.
En segundo lugar, se podría estudiar con mayor profundidad el comportamiento del
sensor giroscópico de HiTechnic, con la finalidad de poder linealizar su comportamiento en el
mayor grado posible.
Debemos tener en cuenta que aunque el factor que más deriva provoca es la vibración
de los motores, puede ser que esta deriva afecte en distinto grado a cada sensor. Es decir,
podría ser que por motivos de fabricación cada sensor tenga una deriva distinta frente a la
vibración de los motores.
En tercer y último lugar, la mejora más importante que se puede realizar es el control
de posición del robot.
Para llevar a cabo el control de posición del robot deberemos utilizar la segunda
ecuación obtenida en las ecuaciones que describen la dinámica del sistema. Esta ecuación
describe el movimiento lineal del robot.
Para llevar a cabo el control de posición, en las simulaciones se debería realizar otro
lazo de control. Es decir, el lazo de control principal sería el que se ha realizado en este
proyecto, cuya finalidad es mantener el robot en equilibrio. El siguiente lazo de control sería el
que utilizaríamos para desplazar al robot, como se muestra en el siguiente diagrama:
Posibles mejoras
97
Figura 74: Control de posición y control de ángulo
En la figura anterior, la parte más importante es que la dinámica de la planta que
describe el comportamiento lineal del sistema servirá para obtener el ángulo de referencia del
robot. El motivo es el siguiente:
Si queremos que el robot avance, no podemos mantenerlo con un ángulo de 90°
respecto a la superficie sobre la que se desplaza, debemos inclinarlo ligeramente en la
dirección de avance para que pueda desplazarse sin caer, es decir, el punto de equilibrio del
robot no será de 90° respecto a la superficie sobre la que se desplaza.
En la realización práctica, para obtener el desplazamiento recorrido por el robot
podemos recurrir a los tacómetros de los que disponen los motores de LEGO Mindstorms.
Conociendo la rotación de estos, el radio de las ruedas utilizadas y el tiempo de rotación
podemos determinar el ciclo de trabajo que se enviará a los motores para realizar el control de
posición. Este control de posición también puede realizarse con un controlador PID.
Anexos
98
6. Anexos
6.1.Anexo 1: Información sobre LEGO Mindstorms NXT 2.0
La plataforma LEGO Mindstorms NXT 2.0 es un sistema formado por una unidad
central procesadora (conocida como Brick) y un conjunto de elementos con los que puede
interactuar: sensores, actuadores y comunicaciones.
En primer lugar, tenemos la unidad central que utiliza dos microcprocesadores:
- En primer lugar, un microprocesador principal de la compañía Atmel, serie ARM7,
modelo AT91SAM7S256. Este microprocesador es de 32 bits, incluye 256 Kb de
memoria Flash, 64 Kb de RAM externa y trabaja a una frecuencia de 48 MHz.
- En segundo lugar, un microprocesador secundario de la compañía Atmel, serie AVR,
modelo ATmega48. Este microprocesador es de 8 bits, incluye 4 Kb de memoria
Flash, 512 bytes de RAM externa y trabaja a una frecuencia de 8 MHz.
Esta unidad central cuenta con cuatro puertos de entrada para señales analógicas o
digitales (aunque se pueden aumentar mediante la conexión de un multiplexor no oficial) y
tres puertos de salida que además son capaces de obtener una señal de entrada de los
encoders de los motores.
Los sensores que se pueden conectar a los puertos de entrada son los siguientes:
- Oficiales de LEGO: Sensor de luz, sensor de contacto, sensor de color y sensor
de ultrasonidos.
- No oficiales: Sensor de temperatura, sensor de sonido, sensor de ángulo de
rotación, sensor de aceleración, sensor barométrico, sensor giroscópico,
sensor de infrarrojos, sensor electro-óptico de proximidad, sensor para la
detección de persona o animales, sensor magnético y sensor de brújula. La
mayoría de estos sensores son fabricados por HiTechnic.
Por otro lado, a los puertos de salida lo más usual es conectar los motores oficiales de
LEGO Mindstorms NXT 2.0.
Todas las comunicaciones entre unidad central y sensores/actuadores se realizan
mediante una interfaz de conexión 6-wire (twisted pair).
Anexos
99
La unidad central también es capaz de comunicarse con otros elementos mediante dos
tipos de comunicación:
- USB 2.0: la unidad central dispone de un puerto de entrada y salida con el estándar
USB 2.0 con Full Speed (12 Mbit/s). Este puerto se suele utilizar para recibir
programas realizados desde un ordenador y para enviar los datos recogidos por
algún sensor.
- Bluetooth: la unidad central dispone de comunicación Bluetooth mediante el
módulo Bluecore 4 v2.0 +EDR System de la compañía CSR. Este modulo cuenta con
una memoria RAM interna de 48 Kb, una memoria externa FLASH de 8 Mbit y
funciona a una frecuencia de 26 MHz. Esta comunicación se suele utilizar o bien
para transmitir datos a un ordenador o bien para comunicarse con un dispotivo
como puede ser un teléfono movil para interactuar.
El esquema básico de interacción del Brick de LEGO es el siguiente:
Figura 75: Esquema básico de interacción del Brick de LEGO.
Anexos
100
6.2.Anexo 2: Códigos de Bricx Command Center
6.2.1. Código para la prueba de velocidad del robot
// Explicación: Este código sirve para determinar la velocidad lineal
// máxima de desplazamiento del robot. Para ello, colocamos el robot
// sobre una superficie plana y sin inclinación. El robot se moverá
// durante 5 segundos con un ciclo de trabajo de los motores máximo.
// Conociendo la distancia recorrida (la medimos) y el tiempo,
// podremos conocer la velocidad máxima de los motores.
task main()
{
OnFwd(OUT_AC,100);
Wait(SEC_5);
Off(OUT_AC);
}
// Resultado experimental: distancia recorrida = 3.6 m
// 3.6 m / 5 s = 0.72 m/s
6.2.2. Código para la prueba de velocidad del robot
// Explicación: arrancamos el motor con una rampa, modificando el
// ciclo de trabajo desde 0 hasta 100, y cuando vemos que el robot ya
// se mueve activamos el sensor de contacto del puerto 1, y finalmente
// visualizamos el ciclo de trabajo mínimo para el cual el robot se
// mueve.
int ciclo;
task main()
{
SetSensor(IN_1,SENSOR_TOUCH);
ciclo = 0;
do
{
OnFwd(OUT_AC,cicle);
cicle++;
TextOut(0, LCD_LINE1, "Ciclo: ");
NumOut (7*6, LCD_LINE1, ciclo);
Wait(SEC_5);
}
while (SENSOR_1 == 0 && ciclo<100)
Off(OUT_AC);
TextOut(0, LCD_LINE1, "Ciclo: ");
NumOut (7*6, LCD_LINE1, ciclo);
Wait(SEC_5);
}
//Resultado obtenido: ciclo de trabajo mínimo para que se mueva el
robot: 10%
Anexos
101
6.2.3. Código para las pruebas del giroscopio de HiTechnic
//Constantes:
#define GYRO_PORT S4
#define T 10/1000
#define muestras_offset 1000
#define T_calibracion 10
//Variables:
float velocidad=0.0;
float angulo_actual=0.0;
//Variables del giroscopio:
float offset=0.0;
float lectura_gyro = 0.0;
//Variables para guardar datos en un fichero datalog:
byte fileHandle;
short bytesWritten;
//Menú principal:
task main ()
{
//Definimos el puerto del giroscopio:
SetSensorHTGyro(GYRO_PORT);
//Nos aseguramos que no haya actuación sobre los motores:
Off(OUT_AC);
//Esperamos 1segundo
Wait(1000);
//Aviso acústico para informar que empieza la calibración del sensor.
PlaySound(SOUND_CLICK);
//Obtención del offset del sensor:
for(int i = 0; i < muestras_offset; i++)
{
offset += SensorHTGyro(GYRO_PORT);
Wait(T_calibracion);
}
offset = offset / muestras_offset;
//Aviso acústico conforme ha finalizado la obtención del offset.
PlaySound(SOUND_CLICK);
//Borramos el archivo de datos anterior y lo creamos de nuevo:
DeleteFile("Dades.txt");
CreateFile("Dades.txt", 30000, fileHandle);
//Bucle para la lectura del sensor:
for (int i=0;i<6000;i++)
{
//Lectura del giroscopio y obtención del ángulo:
lectura_gyro = SensorHTGyro(GYRO_PORT);
velocidad = lectura_gyro - offset;
angulo_actual += velocidad*T;
Anexos
102
//Delay para la lectura del giroscopio:
Wait(T*1000);
}
//Guardamos los datos en el datalog:
string ang = NumToStr(angulo_actual);
WriteLnString(fileHandle,ang, bytesWritten);
//Una vez finalizado el bucle, apagamos los motores y cerramos el
//fichero de datos para poder leerlo posteriormente. También se
//utiliza un indicador acústico para informar que ha finalizado el
//programa.
Off(OUT_AC);
CloseFile(fileHandle);
PlaySound(SOUND_CLICK);
Wait(1000);
}
6.2.4. Código final para mantener en equilibrio el robot
//Alumno: Alex Calvó Gallego
//Tutor: Albert Oller Pujol
//Máster en Ingeniería Electrónica de la Universidad Rovira y Virgili.
//Septiembre de 2012
//Constantes:
#define GYRO_PORT S4
#define T_muestreo_ms 10
#define muestras_offset 1000
//Constantes del PID:
#define Kp 30
#define Ki 1
#define Kd 1
//Variables:
float velocidad=0.0;
float angulo_actual=0.0;
float motor_actual=0.0;
//Variables del PID:
float error=0.0;
float error_old=0.0;
float P_error=0.0;
float I_error=0.0;
float D_error=0.0;
//Variables del giroscopio:
float offset_gyro=0.0;
float lectura_gyro = 0.0;
Anexos
103
//Variables para guardar datos en un fichero datalog:
byte fileHandle;
short bytesWritten;
//Función principal:
task main ()
{
//Definimos el puerto del giroscopio:
SetSensorHTGyro(GYRO_PORT);
//Nos aseguramos que no haya actuación sobre los motores:
Off(OUT_AC);
//Esperamos 10 segundos para poder colocar el robot adecuadamente.
//Este paso es muy importante debido a que a continuación se realizará
//la calibración del giroscopio, y necesitamos que el robot esté sin
//movimiento y en la posición adecuada, que es en un ángulo de 90º
//respecto a la superficie.
Wait(SEC_10);
//Aviso acústico para informar que empieza la calibración del sensor.
PlaySound(SOUND_CLICK);
//Obtención del offset del sensor:
for(int i = 0; i < muestras_offset; i++)
{
offset_gyro += SensorHTGyro(GYRO_PORT);
Wait(T_muestreo_ms);
}
offset_gyro = offset_gyro / muestras_offset;
//Aviso acústico conforme ha finalizado la obtención del offset.
PlaySound(SOUND_CLICK);
//Borramos el archivo de datos anterior y lo creamos de nuevo:
DeleteFile("Dades.txt");
CreateFile("Dades.txt", 50000, fileHandle);
//Bucle para mantener el sistema en equilibrio:
for (int i=0;i<2000;i++)
{
//Lectura del giroscopio y obtención del ángulo:
lectura_gyro = SensorHTGyro(GYRO_PORT);
velocidad = lectura_gyro - offset_gyro;
angulo_actual += velocidad*(T_muestreo_ms/1000) -(13.75/2000);
//PID:
error_old = error;
error = 0 - angulo_actual;
P_error = error;
I_error += error_old;
D_error = error - error_old;
motor_actual = Kp*P_error + Ki*I_error + Kd*D_error;
//Saturación del actuador:
if (motor_actual > 100.0) {motor_actual = 100.0;}
if (motor_actual < -100.0) {motor_actual = -100.0;}
Anexos
104
//Actuación sobre el motor:
OnFwd(OUT_AC,motor_actual);
//Guardamos los datos en el datalog:
string ang = NumToStr(angulo_actual);
string dc = NumToStr(motor_actual);
string write = StrCat(ang,",",dc);
WriteLnString(fileHandle,write, bytesWritten);
//Delay para la lectura del giroscopio:
Wait(T_muestreo_ms);
}
//Una vez finalizado el bucle, apagamos los motores y cerramos el
//fichero de datos para poder leerlo posteriormente. También se
//utiliza un indicador acústico para informar que ha finalizado el
//programa.
Off(OUT_AC);
CloseFile(fileHandle);
PlaySound(SOUND_CLICK);
Wait(SEC_1);
}
Anexos
105
6.3.Anexo 3: Instrucciones de montaje del robot
Las instrucciones de montaje del robot se encuentran disponibles en un documento
PDF que se encuentra en el CD que contiene la documentación realizada en este proyecto. Este
documento PDF se encuentra en la carpeta Anexo 3 (BUILDING INSTRUCTIONS).
6.4.Anexo 4: Documentos de Microsoft Excel
Los documentos con los datos utilizados para la realización de las gráficas de este
proyecto se encuentran disponibles en el CD que contiene la documentación realizada en este
proyecto.
Estos documentos se encuentran en la carpeta Anexo 4 (EXCELS). Los documentos de
Microsoft Excel disponibles son los siguientes:
1. Tn con pilas: datos obtenidos para determinar el periodo natural de oscilación del
robot alimentado con pilas alcalinas.
2. Tn con batería: datos obtenidos para determinar el periodo natural de oscilación
del robot alimentado con la batería oficial de LEGO.
3. Pruebas sintonizador planta no linealizada: constantes Kp, Ki y Kd obtenidas en
las simulaciones para determinar los parámetros del controlador.
4. Calibración y desviación del giroscopio: datos obtenidos para calibrar y
determinar la desviación del giroscopio (sin movimiento).
5. Pruebas dinámicas del girosopio: datos obtenidos moviendo manualmente el
robot para comprobar el funcionamiento del giroscopio.
6. Pruebas robot: datos obtenidos para distintos valores de Kp, Ki y Kd para el
controlador PID del robot.
6.5.Anexo 5: Simulaciones de Matlab
Las simulaciones con Matlab utilizadas en la realización de este proyecto se
encuentran disponibles en el CD que contiene la documentación realizada en este proyecto.
Estas simulaciones se encuentran en la carpeta Anexo 5 (MATLAB). Las simulaciones de
Matlab disponibles son las siguientes:
Anexos
106
1. LGR: Contiene dos simulaciones del LGR:
a. Planta linealizada LGR: Simulación utilizada para visualizar el LGR con la
planta linealizada.
b. Verificación LGR: Simulación utilizada para verificar el funcionamiento de
la planta linealizada con un controlador proporcional.
2. Tiempo continuo: Contiene las simulaciones realizadas en tiempo continuo.
a. Planta no linealizada: Simulaciones realizadas con el modelo de planta sin
linealizar.
i. Modelo original: Modelo original que se va a simular.
ii. Sintonizador PID: Modelo utilizado para sintonizar el PID.
iii. Modelo con perturbación: Modelo utilizado para verificar el
comportamiento de la planta no linealizada frente a
perturbaciones.
iv. Modelo con restricciones: Modelo con perturbación al que se le
añaden las restricciones de los actuadores.
b. Planta no linealizada:
i. Modelo con perturbación y restricciones: Modelo utilizado para
comprobar el funcionamiento de la planta no linealizada frente a
perturbaciones, añadiendo las restricciones de los actuadores.
3. Discretización: Contiene el archivo en el que se realiza la discretización de la planta
y del controlador y su simulación.
NOTA: Para ejecutar cualquier simulación en primer lugar se debe ejecutar el archivo
.m que contiene las constantes necesarias para la simulación. Una vez ejecutado este archivo,
la simulación se iniciará automáticamente (excepto en el caso del Sintonizador PID).
Referencias
107
7. Referencias
[1] Lrobotikas. [Página web online]. Última actualización: 28 de diciembre de 2012 [fecha de consulta: 13-01-2012] [Acceso gratuito]
<http://lrobotikas.net/wiki/index.php?title=P%C3%A1gina_Principal>
[2] NXTLOG 2.0 Projects. [Página web online]. Última actualización: 2 de marzo de 2012 [fecha de consulta: 7-12-2011] [Acceso gratuito]
<http://us.mindstorms.lego.com/en-us/Community/NXTLog/DisplayProjectList.aspx?tag=gyro>
[3] FIRST LEGO League. [Página web online]. Última actualización: 11 de marzo de 2012 [fecha de consulta: 16-01-2012] [Acceso gratuito]
<http://www.firstlegoleague.es/ >
[4] A LEGO-Based Control Experiment. [Página web online, documento PDF]. Peter Gawthrop y Euan McGookin publicado en octubre de 2004 [fecha de consulta: 22-01-2012] [Acceso gratuito]
<http://eprints.gla.ac.uk/588/1/GawMcG04.pdf >
[5] NXT Two Wheels balancing robot tricks & keys. [Página web online, Blog]. Tomas Arribas, publicado el 4 de enero de 2011 [fecha de consulta: 17-01-2012] [Acceso gratuito]
<http://nxttwowheels.blogspot.com.es/ >
[6] NXT Two Wheels balancing robot tricks & keys. [Página web online]. Publicado en 2007 [fecha de consulta: 17-01-2012] [Acceso gratuito]
<http://www.philohome.com/nxtway/nxtway.htm>
[7] NXT Segway with Rider. [Página web online]. Dave Parker, publicado en 2008 [fecha de consulta: 17-01-2012] [Acceso gratuito]
<http://www.nxtprograms.com/NXT2/segway/index.html>
Referencias
108
[8] NXTway-GS (Self-Balancing Two-Wheeled Robot) Controller Design. [Página web online]. Yorihisa Yamamoto, publicado el 11 de marzo de 2008, última actualización el 1 de mayo de 2009 [fecha de consulta: 19-01-2012] [Acceso gratuito]
<http://www.mathworks.com/matlabcentral/fileexchange/19147 >
[9] Steve’s Legway. [Página web online]. Yorihisa Yamamoto, publicado en 2002 [fecha de consulta: 18-01-2012] [Acceso gratuito]
<http://www.teamhassenplug.org/robots/legway/ >
[10] Lagrangiano (Wikipedia). [Página web online]. Última actualización 26 de julio de 2012 [fecha de consulta: 14-02-2012] [Acceso gratuito] <http://es.wikipedia.org/wiki/Lagrangiano> [11] Cart-pole system: Equations of motion. [Página web online, documento PDF]. Fecha de publicación: 2010 [fecha de consulta: 16-02-2012] [Acceso gratuito] <http://es.wikipedia.org/wiki/Lagrangiano>
[12] Correct equations for the dynamics of the cart-pole system. [Página web online, documento PDF]. Razvan V.Florian. Fecha de publicación: 11 de julio de 2005, última actualización: 10 de febrero de 2007 [fecha de consulta: 20-02-2012] [Acceso gratuito]
<http://www.coneural.org/florian/papers/05_cart_pole.pdf>
[13] Neuronlike Adaptive Elements That Can Solve Difficult Learning Control Problems. [Página
web online, documento PDF]. Andrew G.Barto. Fecha de publicación: 1 de agosto de 1982,
revisado el 20 de abril de 1983 [fecha de consulta: 20-02-2012] [Acceso gratuito]
<http://webdocs.cs.ualberta.ca/~sutton/papers/barto-sutton-anderson-83.pdf>
[14] Newton’s laws of motion. [Página web online]. Última actualización el 19 de julio de 2012
[fecha de consulta: 23-02-2012] [Acceso gratuito]
<http://en.wikipedia.org/wiki/Newton%27s_laws_of_motion#Newton.27s_first_law>
Referencias
109
[15] Coulomb model of friction. [Página web online]. Última actualización el 24 de agosto de
2011 [fecha de consulta: 24-02-2012] [Acceso gratuito]
<http://mech.subwiki.org/wiki/Coulomb_model_of_friction>
[16] Simulink. [Página web online]. Mathworks [fecha de consulta: 20-02-2012] [Acceso gratuito]
<http://www.mathworks.es/products/simulink/>
[17] Fagor. [Página web online]. [fecha de consulta: 02-03-2012] [Acceso gratuito] <http://pdf.archiexpo.com/pdf/fagor/small-domestic-appliances/474-5585-_40.html>
[18] NXT DC Rechargable Battery. [Página web online]. Página oficial de Lego mundial [fecha de consulta: 03-02-2012] [Acceso gratuito] <http://shop.lego.com/en-US/NXT-DC-Rechargeable-Battery-9693> [19] El péndulo simple. [Página web online]. Universidad del País Vasco [fecha de consulta: 03-02-2012] [Acceso gratuito] <http://www.sc.ehu.es/sbweb/fisica/dinamica/trabajo/pendulo/pendulo.htm> [20] Lego Digital Designer. [Página web online]. Página oficial de LEGO en España [fecha de consulta: 10-02-2012] [Acceso gratuito]
<http://ldd.lego.com/>
[21] Sistema de control (Wikipedia). [Página web online]. Última actualización 25 de julio de 2012 [fecha de consulta: 27-02-2012] [Acceso gratuito] <http://es.wikipedia.org/wiki/Sistema_de_control> [22] Retroalimentación (Wikipedia). [Página web online]. Última actualización 13 de agosto de 2012 [fecha de consulta: 27-02-2012] [Acceso gratuito] <http://es.wikipedia.org/wiki/Realimentaci%C3%B3n> [23] Sistema de control (Wikipedia). [Página web online]. Última actualización 10 de agosto de 2012 [fecha de consulta: 27-02-2012] [Acceso gratuito] <http://es.wikipedia.org/wiki/Proporcional_integral_derivativo>
Referencias
110
[24] El control proporcional. [Página web online]. Instrumentación y control [fecha de consulta: 28-02-2012] [Acceso gratuito]
<http://www.instrumentacionycontrol.net/es/curso-control-pid-practico/364-el-control-
proporcional-definiciones-practicas-y-precisas>
[25] Automatic PID Tuning. [Página web online]. Mathworks [fecha de consulta: 05-03-2012] [Acceso gratuito]
<http://www.mathworks.es/help/sldo/examples/pid-tuning-with-actuator-constraints.html>
[26] NXT Motor Internals. [Página web online]. Publicado en febrero de 2007, última actualización en noviembre de 2008 [fecha de consulta: 10-03-2012] [Acceso gratuito]
<http://www.philohome.com/nxtmotor/nxtmotor.htm>
[27] Sistemas de Segundo orden (Wikipedia). [Página web online]. Última actualización: 27 de junio de 2012 [fecha de consulta: 26-03-2012] [Acceso gratuito] <http://es.wikipedia.org/wiki/Sistemas_de_segundo_orden>
[28] c2d. [Página web online]. Mathworks [fecha de consulta: 10-04-2012] [Acceso gratuito]
<http://www.mathworks.es/help/toolbox/ident/ref/c2d.html>
[29] Zero-order hold (Wikipedia). [Página web online]. Última actualización: 30 de abril de 2012 [fecha de consulta: 10-04-2012] [Acceso gratuito]
<http://en.wikipedia.org/wiki/Zero-order_hold>
[30] Bilinear transform (Wikipedia). [Página web online]. Última actualización: 15 de junio de 2012 [fecha de consulta: 10-04-2012] [Acceso gratuito]
<http://en.wikipedia.org/wiki/Bilinear_transform>
[31] Interpolación (Wikipedia). [Página web online]. Última actualización: 14 de agosto de 2012 [fecha de consulta: 22-04-2012] [Acceso gratuito]
<http://es.wikipedia.org/wiki/Interpolaci%C3%B3n>
Referencias
111
[32] NXTway-GS (Self-Balancing Two-Wheeled Robot) Controller Design. [Página web online]. Yorihisa Yamamoto, publicado el 11 de marzo de 2008, última actualización el 1 de mayo de 2009 [fecha de consulta: 19-01-2012] [Acceso gratuito]
<http://www.mathworks.com/matlabcentral/fileexchange/19147 >
[33] Lego Digital Designer. [Página web online]. Página oficial de LEGO en España [fecha de consulta: 10-02-2012] [Acceso gratuito]
<http://ldd.lego.com/>
[34] NXT-G (Wikipedia). [Página web online]. Última actualización: 17 de agosto de 2012 [fecha de consulta: 02-05-2012] [Acceso gratuito]
<http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT#NXT-G>
[35] LEGO Mindstorms NXT support for Matlab. [Página web online]. MathWorks [fecha de consulta: 02-05-2012] [Acceso gratuito]
<http://www.mathworks.es/academia/lego-mindstorms-nxt-software/legomindstorms-
matlab.html?sec=start>
[36] LABVIEW Add-ons for LEGO MINDSTORMS NXT. [Página web online]. National Instruments [fecha de consulta: 02-05-2012] [Acceso gratuito]
<http://www.ni.com/white-paper/4435/en>
[37] Programming Languages (Wikipedia). [Página web online]. Última actualización: 17 de agosto de 2012 [fecha de consulta: 02-05-2012] [Acceso gratuito]
<http://en.wikipedia.org/wiki/Lego_Mindstorms#Programming_languages_2>
[38] Next Byte Codes, Not eXactly C, and SuperPro C. [Página web online]. Última actualización: 2011 [fecha de consulta: 02-05-2012] [Acceso gratuito]
<http://en.wikipedia.org/wiki/Lego_Mindstorms#Programming_languages_2>
[39] Bricx Command Center 3.3. [Página web online]. Última actualización: 13 de marzo de 2011 [fecha de consulta: 02-05-2012] [Acceso gratuito]
<http://bricxcc.sourceforge.net/>
Referencias
112
[40] Giróscopo (Wikipedia). [Página web online]. Última actualización: 31 de julio de 2012 [fecha de consulta: 09-05-2012] [Acceso gratuito]
<http://es.wikipedia.org/wiki/Gir%C3%B3scopo>
[41] NXT Gyro Sensor. [Página web online]. HiTechnic [fecha de consulta: 09-05-2012] [Acceso gratuito]
<https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NGY1044>
[42] Gyro offset and drift. [Página web online]. Fecha de publicación: 3 de noviembre de 2010 [fecha de consulta: 11-05-2012] [Acceso gratuito]
<http://nxttime.wordpress.com/2010/11/03/gyro-offset-and-drift/>
[43] Media aritmética (Wikipedia). [Página web online]. Última actualización: 8 de agosto de 2012 [fecha de consulta: 12-05-2012] [Acceso gratuito]
<http://es.wikipedia.org/wiki/Media_aritm%C3%A9tica>
[44] Integración numérica: regla del rectángulo (Wikipedia). [Página web online]. Última actualización: 9 de junio de 2012 [fecha de consulta: 14-05-2012] [Acceso gratuito]
<http://es.wikipedia.org/wiki/Integraci%C3%B3n_num%C3%A9rica#Regla_del_rect.C3.A1ngulo>