i
Equation Chapter 1 Section 1
Proyecto Fin de Carrera
Ingeniería Industrial
Diseño y control de un sistema Ball and Beam con
realimentación visual con Raspberry-Pi
Autor: Anabel Araujo Puerta
Tutor: Carlos Vivas Venegas / Ignacio Alvarado Aldea
Dep. Ingeniería de Sistemas y Automática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2018
iii
Proyecto Fin de Carrera
Ingeniería Industrial
Diseño y control de un sistema Ball and Beam con
realimentación visual con Raspberry-Pi
Autor:
Anabel Araujo Puerta
Tutor:
Carlos Vivas Venegas
Ignacio Alvarado Aldea
Profesor titular
Dep. Ingeniería de Sistemas y Automática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2018
v
Proyecto Fin de Carrera: Diseño y control de un sistema Ball and Beam con realimentación visual con
Raspberry-Pi
Autor: Anabel Araujo Puerta
Tutor: Carlos Vivas Venegas / Ignacio Alvarado Aldea
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Acuerdan otorgarle la calificación de:
Sevilla, 2018
El Secretario del Tribunal
vii
A quienes se fueron, a quienes
están, a quienes vendrán
ix
Resumen
El experimento de balanceo de bola en placa es uno de los sistemas de control más comunes y simples ya que
puede utilizarse para aplicar los conceptos de control, como el tiempo de asentamiento, sobreimpulso, tiempo
de subida y error de estado estacionario. Además, demuestra el sistema de bucle cerrado de retroalimentación y
cómo la entrada afecta el comportamiento de la salida. Además, muestra el efecto de las no linealidades,
discrepancias con el modelo teórico y cómo podemos tratar estas no linealidades mediante la introducción de
parámetros adicionales como el factor de integración que fuerza al error de estado estacionario a cero.
El objetivo de este experimento es responder y equilibrar la bola en la placa en un punto determinado desde
cualquier posición inicial y velocidad con un error de estado estacionario cero. Para modelar este sistema, la
detección de la posición de la pelota se realiza mediante una cámara. El plato se puede orientar a través de dos
brazos articulados gobernados cada uno por un servomotor. Como controlador se ha utilizado la placa basada
en microcontrolador Raspberry Pi. Finalmente, se ha aplicado un control PID para estabilizar la posición de la
pelota en el centro del plato.
xi
Índice
Resumen ix
Índice xi
Índice de Tablas xiii
Índice de Figuras xv
1 Introducción 1 1.1. Propósito y objetivos 1 1.2. Ámbito, alcance y límites 1
2 Estado del arte 3 2.1 Plataformas comerciales 3
2.1.1 Quanser 3 2.1.2 Feedback Instruments 4
2.2 Prototipos no comercializables 5
3 Diseño mecánico 7 3.1 Planteamiento de la estructura 7
3.1.1 Descripción conjunto plataforma 7 3.1.2 Descripción conjunto cámara 10
3.2 Diseño de la estructura 11 3.2.1 Base 12 3.2.2 Plato 12 3.2.3 Eje central 13 3.2.4 Soporte de los servomotores 15 3.2.5 Brazos articulados 16 3.2.6 Uniones al plato 17 3.2.7 Estructura y soporte cámara 18
4 Modelado del sistema 21 4.1 Modelado de la planta 21
4.1.1 Ecuaciones de Lagrange-Euler 21 4.1.2 Equilibrio de fuerzas en el sistema 26
4.2 Consideraciones físicas 28 4.2.1 Cálculo de grados de libertad del sistema 28 4.2.2 Relaciones entre los ángulos de los actuadores y el plato 29 4.2.2.1 Método 1: Teorema de Pitágoras 29 4.2.2.2 Método 2: Considerando la posición inicial 31 4.2.2.3 Método 3: Mecanismo de barras 32 4.2.2.4 Método 4: Intersección de trayectorias 33
5 Diseño de controladores 37 5.1 Puntos de equilibrio naturales del sistema 37 5.2 Aproximación lineal del sistema alrededor de un punto de equilibrio 38 5.3 Simplificación del modelo de la planta 39
5.4 Realimentación de estado: Regulación 40 5.5 Controladores desarrollados 41
6 Elección de componentes y conexionado 45 6.1 Sistema de detección de la pelota 45
6.1.1 Panel táctil resistivo 45 6.1.2 Cámara 46 6.1.3 Selección del sistema de detección de la pelota 46
6.2 Controlador 47 6.2.1 Arduino 47 6.2.2 Raspberry Pi 48 6.2.3 Elección de controlador 48
6.3 Actuadores 48 6.3.1 Motor DC 48 6.3.2 Servomotor 49 6.3.3 Motor paso a paso 50 6.3.4 Elección de actuador 50
7 Programación 51 7.1 Estructura del programa 51 7.2 Obtención y tratamiento de imágenes 52 7.3 Evaluación del control del sistema 62 7.4 Funcionamiento y control de los actuadores 63
8 Pruebas y Resultados 67 8.1 Pruebas realizadas con Raspberry Pi 3 67 8.2 Diseño de controladores mediante Matlab 73
8.2.1 Método Mejorado de Ajuste por Respuesta al Escalón (Approximate MIGO step response) 78 8.2.2 Método Mejorado de Ajuste por Respuesta frecuencial (Approximate MIGO frequency response) 83 8.2.3 Método de Ziegler-Nichols en base a la Respuesta en Frecuencia 87
9 Conclusiones 93
Referencias 95
xiii
ÍNDICE DE TABLAS
Tabla 1. Unidades y descripción de las variables empleadas. 25
Tabla 2. Tabla de los distintos valores de HSV para diversos colores. 54
Tabla 3. Tiempos de ejecución para la librería “raspicam.h”. 61
Tabla 4. Tiempos de ejecución para la librería “RaspiCamCV.h” 62
Tabla 5. Parámetros de controladores según Ziegler-Nichols en base a la respuesta en frecuencia. 88
xv
ÍNDICE DE FIGURAS
Figura 2.1. Sistema Ball and Beam de Quanser. 3
Figura 2.2. Sistema “2 DOF Ball balancer” de Quanter. 4
Figura 2.3. Digital Pendulum comercializado por Feedback Instruments. 4
Figura 2.4. Sistema Ball and Plate comercializado por Feedback Instrumets. 5
Figura 2.5. Ejemplo de un sistema Ball and Plate no comercializado. 5
Figura 3.1. Diseño del sistema bola-plato. 7
Figura 3.2. Movimiento del sistema bola-plato alrededor del eje x. 8
Figura 3.3. Ejemplo de plataforma con soportes articulados. 8
Figura 3.4. Prototipo no comercial de la plataforma con soportes articulados. 9
Figura 3.5. Sistema bola-plato con brazos articulados. 10
Figura 3.6. Prototipo no comercial del sistema bola-plato con brazos articulados. 10
Figura 3.7. Sistemas bola-plato con visión artificial. 11
Figura 3.8. Ejemplo diseño de la estructura. 11
Figura 3.9. Tablón DM. 12
Figura 3.10. Plancha de metacrilato. 12
Figura 3.11. Eje central de la plataforma. 13
Figura 3.12. Articulación esférica o rótula. 14
Figura 3.13. Articulación universal. 14
Figura 3.14. Articulaciones en la plataforma. 15
Figura 3.15. Sistema de sujeción de los servos. 15
Figura 3.16. Solución para el correcto funcionamiento del servo. 15
Figura 3.17. Esquema de los brazos articulados. 16
Figura 3.18. Brazos universales de los servos. 16
Figura 3.19. Unión brazo del servomotor y varilla articulada. 17
Figura 3.20. Unión de la rótula al plato. 17
Figura 3.21. Racor. 18
Figura 3.22. Detalle del pasante utilizado en las rótulas. 18
Figura 3.23. Ranura realizada en el soporte vertical. 19
Figura 3.24. Detalle de la escuadra utilizada. 19
Figura 3.25. Detalle de la posición de la cámara. 20
Figura 3.26. Estructura final. 20
Figura 4.1. Esquema mecánico sistema bola-plato. 21
Figura 4.2. Sistema de fuerzas existentes sobre la estructura. 26
Figura 4.3. Esquema del sistema utilizado. 26
Figura 4.4. Diagrama de barras. 29
Figura 4.5. Teorema de Pitágoras en el sistema. 30
Figura 4.6. Sistema bola -plato de referencia utilizado. 31
Figura 4.7. Distribución de la estructura bola-plato utilizada. 32
Figura 4.8. Situación espacial del sistema bola-plato. 33
Figura 4.9. Intersección entre trayectorias. 34
Figura 5.1. Diagrama de bloques del sistema en lazo cerrado con realimentación de estados. 41
Figura 5.2. Diagrama de bloques de un sistema con controlador PID. 42
Figura 5.3. Diagrama de bloques de un sistema realimentado con controlador PID. 42
Figura 6.1. Principio de funcionamiento del panel táctil resistivo. 45
Figura 6.2. Panel táctil. 46
Figura 6.3. Webcam/cámara. 46
Figura 6.4. Microprocesador Arduino. 47
Figura 6.5. Microprocesador Raspberry Pi 3. 48
Figura 6.6. Motor DC 49
Figura 6.7. Servomotor. 49
Figura 6.8. Motor paso a paso. 50
Figura 7.1. Estructura de programación. 51
Figura 7.2. Diagrama HSV. 52
Figura 7.3. Ventana de control de los parámetros HSV. 53
Figura 7.4. Detección del color verde. 53
Figura 7.5. Detección del color azul. 53
Figura 7.6. Detección del color magenta. 54
Figura 7.7. Detección del color amarillo. 54
Figura 7.8. Detección de la posición para el color verde. 56
Figura 7.9. Detección de la posición para el color magenta. 56
Figura 7.10. Detección de la posición para el color magenta en diferente disposiciñon. 56
Figura 7.11. Funcionamiento de los servos utilizados 64
Figura 8.1. Lazo de control realimentado. 73
Figura 8.2. Simulación de un sistema a lazo cerrado con control proporcional. 73
Figura 8.3. Simulación de un sistema a lazo cerrado con control prporcional integrador (PI). 74
Figura 8.4. Simulación de un sistema a lazo cerrado con controlador PID. 74
Figura 8.5. Comparación del efecto predictivo de la acción derivadora y su relación con la dinámica del sistema.
74
Figura 8.6. Ventana de ejecución sisotool(). 75
xvii
Figura 8.7. Elección del método de ajuste automático. 76
Figura 8.8. Elección del tipo de controlador. 77
Figura 8.9. Selección del tipo estimación deseada. 78
Figura 8.10. Preferencias formato controlador. 78
Figura 8.11. Respuestas al escalón de procesos esencialmente monótonos. 79
Figura 8.12. Respuesta al escalón unitario de un proceso y procesamiento empleado para determinar los
parámetros 𝐾𝑝, 𝑇, 𝐿, 𝐾𝑣. 80
Figura 8.13. Controlador hallado (MIGO step response). 80
Figura 8.14. Controlador hallado expresado según sus polos y ceros (MIGO step response). 80
Figura 8.15. Diagrama del lugar de las raíces sin cumplir especificaciones (MIGO step response). 81
Figura 8.16. Respuesta ante escalón sin cumplir especificaciones (MIGO step response). 81
Figura 8.17. Valor de las especificaciones de la respuesta ante escalón (MIGO step response). 82
Figura 8.18. Respuesta ante escalón cumpliendo especificaciones (MIGO step response). 82
Figura 8.19. Valor de las especificaciones de la respuesta ante escalón (MIGO step response). 83
Figura 8.20. Diagrama del lugar de las raíces cumpliendo especificaciones (MIGO step response). 83
Figura 8.21. Valor del controlador con reajuste de la ganancia (MIGO step response). 83
Figura 8.22. Controlador hallado (MIGO frequency response). 84
Figura 8.23. Controlador hallado expresado según sus polos y ceros (MIGO frequency response). 84
Figura 8.24. Diagrama del lugar de las raíces si cumplir especificaciones (MIGO frequency response). 84
Figura 8.25. Respuesta ante escalón sin cumplir especificaciones (MIGO frequency response). 85
Figura 8.26. Valor de las especificaciones de la respuesta ante escalón (MIGO frequency response). 85
Figura 8.27. Respuesta ante escalón cumpliendo especificaciones (MIGO frequency response). 86
Figura 8.28. Valor de las especificaciones de la respuesta ante escalón (MIGO frequency response). 86
Figura 8.29. Diagrama del lugar de las raíces cumpliendo especificaciones (MIGO frequency response). 87
Figura 8.30. Valor del controlador con reajuste de la ganancia (MIGO frequency response). 87
Figura 8.31. Caracterización de la respuesta en frecuencia según Ziegler-Nichols. 87
Figura 8.32. Controlador hallado (Método de Ziegler-Nichols). 88
Figura 8.33. Diagrama del lugar de las raíces si cumplir especificaciones (Método de Ziegler-Nichols). 88
Figura 8.34. Respuesta ante escalón sin cumplir especificaciones (Método de Ziegler-Nichols). 89
Figura 8.35. Valor de las especificaciones de la respuesta ante escalón (Método de Ziegler-Nichols). 89
Figura 8.36. Diagrama del lugar de las raíces cumpliendo especificaciones (Método de Ziegler-Nichols). 90
Figura 8.37. Respuesta ante escalón cumpliendo especificaciones (Método de Ziegler-Nichols). 90
Figura 8.38. Valor de las especificaciones de la respuesta ante escalón (Método de Ziegler-Nichols). 91
Figura 8.39. Valor del controlador con reajuste de la ganancia (Método de Ziegler-Nichols). 91
Figura 9.1. Estructura final del sistema Ball and Plate. 93
1 INTRODUCCIÓN
n el presente proyecto se lleva a cabo la implementación y el control del sistema mecatrónico denominado
“Ball and Plate”. Dicho conjunto de bola y plataforma se caracteriza por ser un sistema electromecánico
hoy en día se encuentra presente en muchas universidades para el estudio de las técnicas básicas y
avanzadas de control impartidas en las mismas.
El sistema formado por una plataforma cuadrada únicamente apoyada en su centro geométrico, por la cual la
bola es capaz de rodar libremente, recrea perfectamente el concepto de sistema inestable en lazo abierto,
demostrando con ello, el carácter no lineal en el funcionamiento del mismo.
Asimismo, al inicio del presente proyecto se realizará un análisis del estado actual sobre las diferentes técnicas
empleadas para realizar el diseño y desarrollo de diversos prototipos para estudiar la respuesta de los sistemas
estudiados.
1.1. Propósito y objetivos
Para poder conceptualizar la evolución de todo el proceso diseñado y desarrollado durante el transcurso del
presente proyecto, es necesaria la definición de los diferentes objetivos que alcanzar a lo largo del mismo. Es
por lo cual, que seguidamente se enumeran los principales conceptos a implementar según su orden de aparición
en el proyecto:
• Análisis conceptual del sistema bola-plato y su correspondiente modelado. Estado del arte.
• Diseño y desarrollo del dispositivo físico para la implementación del sistema de control desarrollado.
• Estudio de los diferentes microprocesadores óptimos a utilizar en el desarrollo (Arduino, LabView,
Raspberry Pi, etc.).
• Pruebas de tiempo de simulación de diferentes lenguajes de programación.
• Programación e implementación de varios softwares de control mediante el microprocesador elegido
(C, C++, Python).
• Implementación de los programas desarrollados en la estructura física.
El diseño y desarrollo del presente proyecto pretende aportar una solución de bajo coste para la experimentación
y estudio de diversas técnicas de control automático. Con la consecución de dicho trabajo, estudiantes y
profesores serán capaces de llevar a cabo diversas técnicas de control que se pueden aplicar para estabilizar un
sistema no lineal.
1.2. Ámbito, alcance y límites
Como se ha mencionado previamente, el presente proyecto pretende dar soporte a la parte teórica
correspondiente a la teoría de control impartida en los centros de enseñanza, de una manera económica y sencilla.
Es por lo cual que se plantea la posibilidad de fabricar una estructura física en la cual se puedan implementar e
instaurar todos los conceptos asimilados.
Básicamente, el sistema “Ball and Plate” desarrollado se constituye de una plataforma con un único punto de
E
Introducción
2
apoyo en su centro geométrico, gobernada por dos servomotores que dirigen el movimiento de la misma a lo
largo de los ejes X e Y. Asimismo, se incorpora la visión artificial en tiempo real como entrada del sistema de
control gracias a la incorporación de una cámara.
Paralelamente, después del estudio y análisis de las características de diversos microprocesadores, se determina
que el más adecuado para las prestaciones buscadas es el famoso Raspberry Pi, e igualmente, se incorpora su
módulo de cámara, supliendo la necesidad anteriormente citada.
Dicho microprocesador posee diferentes lenguajes de programación, como puede ser Python (en diferentes
versiones), C o C++. Razonablemente, se analizan los tiempos de ejecución de cada uno de los mismos para la
misma tipología de programa, decidiendo el más adecuado para la aplicación en cuestión.
Por otro lado, como punto de partida es fundamental conocer el estado actual de la técnica, las posibilidades que
aporta el mercado y los ámbitos de aplicación de las tecnologías empleadas. Consecuentemente, el avance del
presente proyecto estará ligado a las limitaciones encontradas durante el progreso del mismo, habiendo analizado
todas las posibles soluciones para el alcance de los objetivos marcados.
2 ESTADO DEL ARTE
ctuamente en el mercado se dispone de gran variedad de productos que implementan las técnicas de
control analizadas, pero cabe destacar la necesaria diferenciación debido a la finalidad de la aplicación.
Es posible realizar una catalogación según dichos criterios, plataformas comercializadas por parte de
empresas privadas, y por el contrario, prototipos diseñados y desarrollados por universidades, estudiantes o
simplemente personal sin ningún fin económico.
2.1 Plataformas comerciales
Hoy en día, varias empresas disponen entre sus productos comercializados prototipos o maquetas que
implementan el sistema Ball and Plate. Éstas están diseñadas principalmente para el estudio por parte del usuario
de las diferentes técnicas para poder controlar un sistema y poderlas aplicar en un sistema real.
Dada la finalidad de dichas plataformas, es lógico pensar que estos prototipos estén dirigidos a estudiantes y/o
profesores interesados por la técnica de control. El principal inconveniente es el elevado precio que conlleva la
adquisición de una plataforma de estas características, por lo que cobra más fuerza la idea de realizar una
plataforma de bajo coste para el estudio de las técnicas de control en sistemas reales.
A continuación, se describen las plataformas comercializadas por las principales empresas del sector en el
mercado.
2.1.1 Quanser
Si el sistema Ball and Plate se remonta a sus orígenes, se llega al sistema más primitivo denominado Ball and
Beam, consistente en una barra de acero conectada en paralelo a una resistencia bobinada construyendo una guía
por donde rueda libremente una pelota. Por consiguiente, se determina que la propia guía se trata de un
potenciómetro el cual proporciona un voltaje proporcional a la posición de la bola.
Asimismo, la guía permanece fija en uno de sus extremos, mientras el otro tiene acoplado el brazo de un
servomotor que permite rotar a la guía respecto al eje fijo anteriormente nombrado. Para realizar el control de
dicho sistema, la empresa ha dispuesto la posibilidad de utilizar Matlab/Simulink y NI LabVIEW.
Figura 2.1. Sistema Ball and Beam de Quanser.
Fuente: https://www.quanser.com/products/ball-and-beam/
Por otro lado, Quanser también dispone de un modelo llamado “2 DOF Ball balancer”. Este modelo es
controlado mediante visión artificial, determinando la posición de la bola gracias a la captura de imágenes. El
A
Estado del arte
4
plato está montado sobre un eje central articulado por una junta universal o de cardán, la cual permite rotar el
plato sobre dos ejes, por otro lado, la rotación sobre cada eje está controlada por un servomotor respectivamente.
Similarmente al caso anterior, se dispone la opción de controlar al sistema mediante Matlab/Simulink o NI
LabVIEW.
Figura 2.2. Sistema “2 DOF Ball balancer” de Quanter.
Fuente: https://www.quanser.com/products/2-dof-ball-balancer/
2.1.2 Feedback Instruments
La empresa Feedback Instruments también ofrece a sus usuarios varias soluciones para la investigación y
análisis de la teoría de control. Un claro ejemplo es el péndulo invertido denominado “Digital Pendulum”. Se
caracteriza por ser un péndulo doble, aunque se especifica que los dos péndulos son solidarios entre sí, lo cual
de cara a controlar el sistema no varía en exceso. El control se puede realizar como en casos anteriores con
Matlab/Simulink.
Figura 2.3. Digital Pendulum comercializado por Feedback Instruments.
Fuente: https://es.mathworks.com/products/connections/product_detail/feedback-instruments-digital-pendulum.html
Por otro lado, y más relacionado con el presente proyecto, se expone el sistema Ball and Plate comercializado
por la empresa. De manera similar a lo citado por parte de la empresa Quanser, la posición de la pelota viene
determinada por una cámara, monitorizada a través de una pantalla de ordenador en tiempo real. Como novedad
sustancial, el movimiento del plato está gobernado por unos campos electromagnéticos. En cada esquina del
5 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
plato cuadrado se dispone de un actuador magnético que posibilita varias la posición en el eje z, de tal manera
que, controlando las cuatro esquinas del plato, es posible alcanzar el ángulo deseado en el mismo. En este caso,
el control se lleva a cabo a través de NI LabVIEW.
Figura 2.4. Sistema Ball and Plate comercializado por Feedback Instrumets.
Fuente: http://imex.co.uk/epages/20249b99-f30f-43a5-8f50-a5e2562eae4e.sf/en_GB/?ObjectPath=/Shops/20249b99-
f30f-43a5-8f50-a5e2562eae4e/Products/FB-33-052
2.2 Prototipos no comercializables
Paralelamente a las plataformas comercializadas por empresas privadas, existen prototipos realizados por
universidades y alumnos, o incluso simples aficionados a la automática. Normalmente se basan en los ejemplos
anteriormente nombrados, pero hay casos donde los diferentes prototipos de los usuarios sirven de inspiración
para lograr sistemas de control más elaborados y posteriormente comercializados.
Figura 2.5. Ejemplo de un sistema Ball and Plate no comercializado.
Fuente: https://www.youtube.com/watch?v=K-F_T59ZDPw
Estado del arte
6
3 DISEÑO MECÁNICO
n este capítulo se detallan cada uno de los pasos llevados a cabo para la fabricación de la plataforma física,
es decir, el diseño mecánico del sistema Ball and Plate. Para ello, inicialmente se analizan las posibles
estructuras y distribuciones existentes, así como sus puntos críticos, inconvenientes y ventajas. En función
de las mismas, se toma una decisión para la ejecución del presente proyecto.
Seguidamente, se especifican y detallan cada uno de los componentes empleados en la fabricación del sistema
final, incurriendo en los materiales que los conforman.
Cabe destacar la importancia del sistema de detección de la pelota y los actuadores incorporados, ya que
desempeñarán el papel principal en la plataforma fabricada. De este modo, en el presente capítulo es necesario
la mención a los mismos, siendo imprescindible el uso de una cámara para el sistema de detección de la bola y
dos servomotores como actuadores, correspondiéndose cada uno a los ejes X e Y. Finalmente, en la consecución
de capítulos posteriores, se puntualiza el por qué de dicha decisión tomada.
3.1 Planteamiento de la estructura
Inicialmente, es necesario el estudio y análisis de las principales partes que conforman la estructura. En primer
lugar, se encuentra el conjunto plataforma, constituido por el propio plato y los elementos que le permiten rotar
sobre sí misma (soportes, articulaciones, actuadores, etc.). Por otro lado, cabe destacar la necesidad de un soporte
adicional para la sujeción de la cámara en el lugar adecuado, de tal manera que se capten todos los posibles
movimientos realizados por el anterior conjunto nombrado.
3.1.1 Descripción conjunto plataforma
Una vez determinada la diferenciación entre las principales partes que forman la estructura global, se define en
primer lugar el conjunto de la plataforma. Éste debe ser capaz de permitir la rotación del plato sobre los ejes X
e Y, logrando así abarcar todos los movimientos posibles. Como se puede observar en la siguiente imagen,
dichos ejes se encuentran ligados solidariamente al plato y, a su vez, perpendiculares entre sí, formando un eje
de coordenadas, factor importantísimo para los cálculos futuros desarrollados en el presente proyecto.
Figura 3.1. Diseño del sistema bola-plato.
Consecuentemente a lo apuntado en el párrafo previo, el simple hecho que los ejes elegidos sean perpendiculares
entre sí, aporta una notoria facilidad a la hora de implementar la estrategia de control elegida. Dicho de otro
E
Diseño mecánico
8
modo, además de simplificar el análisis del sistema, cada eje solo influye en cada coordenada de la posición de
la pelota, convirtiéndolas totalmente en variables independientes. Para poder mover la bola a través del eje X, el
plato debe rotar sobre sí mismo a lo largo del eje Y, y viceversa. Para realizar una conceptualización visual de
lo explicado, se adjunta el siguiente esquema de movimiento del conjunto:
Figura 3.2. Movimiento del sistema bola-plato alrededor del eje x.
Seguidamente, habiendo especificado el principal requisito a cumplir por el conjunto, se comienza a estudiar las
diversas posibilidades de fabricación del mismo. Es por lo cual, que se procede a investigar sobre las diferentes
configuraciones de estructuras Ball and Plate ofertadas en el mercado, considerando la viabilidad de las mismas
manteniendo el concepto de bajo coste planteado al inicio del proyecto.
En primer lugar, se halla en realizar la plataforma con soportes articulados, es decir, el plato se mueve gracias al
movimiento de un soporte ligado a ella. Dicho soporte está diseñado para que el plato pueda rotar libremente
sobre un eje.
Figura 3.3. Ejemplo de plataforma con soportes articulados.
Fuente: https://www.gunt.de/en/products/mechatronics/automation-and-process-control-engineering/fuzzy-control/fuzzy-
control-ball-on-plate/080.12300/rt123/glct-1:pa-148:ca-86:pr-1052
Como se advierte en la imagen previa, la estructura consta de un marco exterior gobernado por un actuador que
será el encargado de hacer rotar a la plataforma en el eje X. Asimismo, el plato se encuentra incrustado en un
marco interior dirigido por el otro actuador, que lo hace rotar a lo largo del eje Y. De este modo quedan definidos
todos los grados de libertad de la estructura, asegurando la perpendicularidad de los ejes de coordenadas y su
independencia de movimiento.
En la siguiente imagen se muestra un prototipo no comercial de la maqueta, habiéndose incorporado una
webcam para el control del sistema:
9 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 3.4. Prototipo no comercial de la plataforma con soportes articulados.
Fuente: http://kyb.fei.tuke.sk/laben/modely/gnk.php
Aunque afortunadamente dicha configuración cumple con los objetivos buscados, destacan varios
inconvenientes a tener en cuenta a la hora de realizar la construcción de la estructura. El principal de éstos
aparece con el planteamiento de la disposición de los servomotores, ya que deben permitir el movimiento
descrito anteriormente.
Como se ha descrito, la solución comúnmente realizada es la colocación de un actuador sobre la plataforma para
dirigir el giro del plato, y por otro lado, un segundo actuador localizado en el marco exterior para gobernar el
movimiento del conjunto de plataforma y plato.
Por otra parte, otra solución posible sería la colocación de los actuadores en el marco exterior y diseñar un
sistema de traslación para poder orientar el conjunto completo. Los principales inconvenientes que presenta
dicha solución es un aumento de la dificultad en montaje, así como en el coste incurrido. De manera
independiente de la disposición de los actuadores, éstos tienen que tener la suficiente potencia para mover el
conjunto plataforma y plato. Finalmente, en dicho sistema es necesario modelar la base, la plataforma y el
previamente nombrado sistema de traslación de movimiento de los servomotores.
Consecutivamente, se sigue en la investigación de las posibles configuraciones existentes. De esta forma, se
localiza la opción de utilizar brazos articulados, vertiente más utilizada en la fabricación del presente proyecto.
El plato se sitúa sobre un eje central gobernado por una articulación pasiva, permitiendo a éste obtener los dos
grados de libertad ineludibles para rotar sobre los ejes X e Y.
En este caso, el brazo articulado desempeña el papel fundamental del movimiento. En un extremo se encuentra
conectado al actuador, el cual se sitúa en la base de la estructura; y en el otro extremo se encuentra el plato. En
el siguiente esquema se representa la configuración explicada:
Diseño mecánico
10
Figura 3.5. Sistema bola-plato con brazos articulados.
A continuación, se realiza un estudio más exhaustivo de la estructura completa. Es importante destacar la
perpendicularidad mostrada entre los brazos articulados y los actuadores, ya que gracias a la rotación de estos
últimos, es posible la variación de la posición de la unión del plato con el brazo. Debido a la invariabilidad de la
posición del punto de unión del plato con el eje central, se alcanza el giro deseado sobre el eje correspondiente.
Analizando las ventajas e inconvenientes de dicha distribución, hay que hacer hincapié en que los actuadores
serán los encargados de mover el conjunto brazo articulado y plato, pero teniendo en cuenta que en este caso el
plato está apoyado en su centro geométrico, reduciendo así el peso a mover. Dicho decremento, influye
directamente en la potencia de los actuadores, no siendo unos servomotores tan potentes como en el caso
anterior.
Por otro lado, la elección de las articulaciones pasivas entre plato, eje central y los propios brazos se debe realizar
con especial cuidado, ya que se debe garantizar la correcta libertad de movimiento en el plato. Asimismo, se
debe ratificar la fluidez en el movimiento de los actuadores, evitando incurrir en sobreesfuerzos en los mismos
debidos a movimientos incongruentes.
Figura 3.6. Prototipo no comercial del sistema bola-plato con brazos articulados.
Fuente: http://www.hobbyprojects.com/projects/ball-on-plate-control.html
Finalmente, comprobadas las ventajas e inconvenientes de ambas soluciones, se decide optar por la segunda,
debido a la mayor facilidad de montaje de la estructura, así como su menor coste.
3.1.2 Descripción conjunto cámara
Otro de los conceptos fundamentales a desarrollar en el presente proyecto es la localización de la cámara, ya que
será la única entrada de control en todo el sistema. Se pretende diseñar y fabricar un soporte que permita la
colocación de la cámara sobre el plato, capturando toda la superficie del plato y controlándose cada movimiento
de la bola.
A lo largo de todos los trabajos analizados, el objetivo común es obvio: la cámara debe captar la superficie
completa del plato. Para ello se consideran varias posibilidades de soporte, como se pueden advertir en las
siguientes fotografías de prototipos comercializados.
11 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 3.7. Sistemas bola-plato con visión artificial.
Fuente : http://www.googoltech.com/web/eng/product_details_frame.jsp?gid=1326&module=Educational%20Products
En el presente proyecto, para aportar un mayor rango de operación, se decide realizar dicho soporte con
variabilidad en la posición. Dicho concepto consiste en la disponer de una holgura en la situación de la cámara,
pudiendo variar su posición en el eje vertical como horizontal gracias a un tornillo sin fin. Por otro lado, cabe
destacar que la altura de la estructura viene determinada por la altura a la que se sitúa el plato, regulando la
distancia entre éste y la propia cámara.
3.2 Diseño de la estructura
Una vez analizadas y contempladas las posibles soluciones a llevar a cabo para el desarrollo de la estructura, se
procede al diseño, parametrización y elección de los elementos mecánicos que conforman el sistema Ball and
Plate.
Consecuentemente a la manera que se ha trabajado anteriormente, se irán exponiendo cada uno de los
componentes que conciertan la estructura fabricada, detallando el por qué de las elecciones tomadas. Asimismo,
se toma como referencia el siguiente diseño para la ejecución de los trabajos, mostrando dichos elementos: plato,
brazos articulados, actuadores y base.
Figura 3.8. Ejemplo diseño de la estructura.
Fuente:http://www.instructables.com/id/Ball-and-Plate-Arduino-PID-Control/
Diseño mecánico
12
3.2.1 Base
La base es uno de los primeros elementos seleccionado en la fabricación de la estructura, ya que es donde van
montados el resto de los componentes que conforman el Ball and Plate. Además, es imprescindible decidir de
manera correcta el tamaño de la misma, debido a que la distribución de los componentes en la misma debe ser
adecuada a las prestaciones deseadas.
Figura 3.9. Tablón DM.
Fuente:https://www.bricomart.es/moldura-jamba-dm-crudo-2550-x-70-x-10-mm.html
Por otro lado, cabe destacar la importancia del grosor del tablero empleada, ya que se realizan taladros para la
fijación de los distintos elementos, como puede ser por ejemplo el eje central.
Planteado todo lo anterior, se decide utilizar un table de DM, aglomerado elaborado con fibras de madera
aglutinadas con resinas sintéticas mediante fuerte presión y calor, en seco, hasta alcanzar una densidad media.
Las medidas del mismo serán de 400x400x15mm, asegurando la integridad del mismo después de los trabajos
realizados sobre ella.
3.2.2 Plato
En primer lugar, se decide que el plato sea de metacrilato, debido a sus principales propiedades físicas: ligereza
y dureza. Al tratarse de un factor determinante el peso total de la estructura, ya que se relaciona directamente
con la potencia de los servomotores (a mayor potencia, mayor costo), el metacrilato aporta la solución idónea
para el presente proyecto.
Figura 3.10. Plancha de metacrilato.
Fuente: https://www.bricomart.es/metacrilato-transparente-200-x-100-x-0-5-cm.html
Es de vital importancia que la superficie del plato sea lo suficientemente grande como para que la bola pueda
rodar libremente a lo largo de la misma. Sin embargo, hay que tener presente que cuanto mayor sea la superficie
13 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
de la misma, implica un aumento de peso, por lo que hay que considerar la potencia que pueden suministrar los
actuadores.
Finalmente, se decide que las medidas adecuadas para que la plataforma sean 300x300x2 mm. Igualmente, el
material deseado solo se consiguió en color blanco, así que para facilitar la detección de la bola por parte del
sistema de control implementado creando un mayor contraste, se elige una bola de un color adecuado.
3.2.3 Eje central
El eje central del sistema Ball and Plate compone uno de los pilares fundamentales para la correcta rotación del
plato debido al movimiento de los actuadores. Asimismo, debe soportar el peso del plato.
Cabe destacar que la prestación más relevante que debe realizar dicho soporte es dotar al giro del plato sobre
dicho eje de dos grados de libertad, por lo que es una necesidad inamovible que la unión entre el plato y el eje
debe disponer de dichos grados de libertad.
En consecuencia, con la idea de realizar una plataforma de bajo coste, el eje central se trata de una aguja de tejer
cortada a la medida deseada mediante una radial. Dicha varilla tiene dimensiones de 5 mm de radio y 100 mm
de altura.
Figura 3.11. Eje central de la plataforma.
Del mismo modo, para poder fijar dicho eje a la base de la estructura, se realiza un taladro de un diámetro algo
inferior al radio del mismo, para poder incorporarlo mediante presión, asegurando de esta manera tanto la
verticalidad como su posición. Además, previamente se rellena dicho taladro con pegamento, y acto seguido se
incorpora la varilla, dando una mayor estabilidad al eje.
Paralelamente, se incurre en la búsqueda del elemento que desempeñe la unión entre el eje central con el plato,
hallándose dos tipos de articulación pasiva que encaja perfectamente en desarrollo del presente proyecto:
articulación esférica o rótula y articulación universal.
• Articulación esférica o rótula
Gracias a la rótula, es posible la unión entre dos sólidos con un movimiento relativo de rotación entre todos los
planos ligados a los mismos. Se debe hacer hincapié en que siempre existe un punto de unión entre ambos
sólidos, por lo que se determina que, si uno de estos sólidos es fijo, el otro será incapaz de realizar un movimiento
de traslación respecto al primero. Este tipo de articulación posee tres grados de libertad, o tres ángulos de
rotación; sin embargo, dos de los mismos ostentan limitaciones.
Diseño mecánico
14
Figura 3.12. Articulación esférica o rótula.
Fuente:http://www.directindustry.es/prod/ganter/product-15596-411368.html
• Articulación universal
Se trata de un elemento mecánico capaz de realizar la unión de dos ejes no colineales, transmitiendo el
movimiento de rotación de un eje al otro. Aunque al igual que el caso anterior de la rótula, a pesar de poseer tres
grados de libertad, tiene limitado el movimiento en 2 de ellos.
Como se advierte en la siguiente fotografía, la articulación consta de una cruceta formada por dos brazos
perpendiculares, en los cuales se encuentran articuladas unas horquillas en las que terminan los ejes a unir.
Figura 3.13. Articulación universal.
Fuente: https://www.ebay.es/itm/GE2950-Articulacion-Universal-de-1-4-de-Ingenieria-Mecanica-de-la-Herramienta-
/141230151323
Seguidamente, una vez analizados los diversos tipos de articulaciones existentes en el mercado, se decide
elaborar de manera totalmente casera una articulación esférica. Dicha articulación se realiza con una pelota de
plástico, característica de los collares de bolas que se pueden encontrar en cualquier tienda de complementos. A
dicha bola, se le incorpora como soporte una tuerca macho-hembra para fijar su movimiento al plato. Por otro
lado, se le realiza un taladro para la incrustación del eje central en la misma.
La rótula fabricada de manera casera se muestra en la siguiente fotografía. Cabe destacar que la unión
posteriormente explicada entre los brazos articulados y el plato se realizan de manera similar. Habiendo realizado
dichas modificaciones, se reducen notoriamente los costes de fabricación de la plataforma.
15 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 3.14. Articulaciones en la plataforma.
3.2.4 Soporte de los servomotores
Debido al movimiento de los brazos articulados unidos a los servomotores, se halla la necesidad de elevación
de los mismos. Para dicho propósito se aprovecha los retales sobrantes de la construcción de la base, pegándolos
en el sitio adecuado sobre la misma.
Para el agarre de los servomotores, a dichos tacos de DM se le realizan unos taladros interiores por los cuales se
incorporan unas bridas de agarre hasta los actuadores, fijándolos finalmente a la base.
Figura 3.15. Sistema de sujeción de los servos.
En un momento posterior, se percata del choque entre el brazo del servomotor con la propia base, debido a la
escasa altitud aportada por el taco de DM posicionado, por lo que se realizan unos “escalones” en la base para
facilitar el movimiento, como se muestra en la siguiente imagen:
Figura 3.16. Solución para el correcto funcionamiento del servo.
Diseño mecánico
16
3.2.5 Brazos articulados
A continuación, tras haber definido el eje central, y como anteriormente se ha adelantado, se realiza de manera
muy similar los brazos articulados que transmiten los movimientos de los servos al plato, tanto en el eje X como
en el Y.
Dado que el diseño de ambos brazos es exactamente igual, en el presente apartado solo se describe la realización
de uno de ellos. Para dar soporte de toda la explicación relatada, se muestra seguidamente un esquema de
funcionamiento de dichos brazos:
Figura 3.17. Esquema de los brazos articulados.
Haciendo un breve resumen del funcionamiento del mecanismo, se detalla que cada actuador gobierna la
rotación del plato a través de las dos varillas, dichas varillas en este caso son del mismo material que el eje
central. Como se aprecia en el esquema anterior, la barra L1 gira solidariamente con el eje del servomotor O1,
es decir, cuando dicho actuador gire un ángulo α, la barra girará con el mismo ángulo.
Por otra parte, la varilla L2 se encuentra unida por un extremo a L1, y por el otro al plato, siendo la encargada
de la transmisión del movimiento generado por la rotación de la barra L1.
Para la barra L1 se busca una pieza comercializada para el acople directo en el servomotor, simplificando en este
sentido la construcción de este brazo. Similarmente al eje central, la barra L2 se construye a partir de una aguja
de tejer, aplanándola y realizándole taladros para la unión entre ambas barras.
Figura 3.18. Brazos universales de los servos.
Fuente: http://www.todohobby.net/es/servos/18322-brazos-largo-servo-futaba-dubro-8-unds-2204206700254.html
Seguidamente, dichas uniones llevadas a cabo, se utilizan diversos métodos totalmente caseros para la
consecución de las mismas. Para la unión del brazo del servomotor con la varilla, se ha utilizado unos pasadores
17 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
apoyados en unas arandelas para permitir el movimiento de rotación entre ellos, transmitiendo el movimiento
de forma adecuada. Dicha configuración se muestra en la siguiente fotografía:
Figura 3.19. Unión brazo del servomotor y varilla articulada.
3.2.6 Uniones al plato
Por consiguiente, manteniendo la idea de fabricar la plataforma en bajo coste, y habiendo citado la construcción
de las rótulas mediante bolas de plástico, en el presente apartado se desarrolla la idea con mayor detalle de
definición.
El eje y los brazos articulados L2 se encuentran unidos a las bolas mediante un taladro en las mismas, realizando
la unión mediante presión. Como se muestra en la fotografía, la manipulación de la bola en la realización del
taladro ha sido más complicado de lo esperado, ya que el material de la misma es más rígido y frágil de lo
inicialmente pensado.
Figura 3.20. Unión de la rótula al plato.
Por otro lado, el soporte de la bola, para la fijación al plato, es un racor macho y hembra, mecanizándolo de tal
forma que se rija a las especificaciones buscadas. Inicialmente se parte de la pieza mostrada en la siguiente
fotografía:
Diseño mecánico
18
Figura 3.21. Racor.
Fuente: http://fluidwork.es/index.php?id_category=500&controller=category
Con la ayuda de una radial, se corta una de las roscas no necesarias del racor, para su posterior lijado y fijado en
el plato. Posteriormente, se introduce en la bola en la abertura restante y se fija con ayuda de una tuerca macho.
Cabe destacar el caso del brazo articulado, ya que debido al movimiento de rotación del mismo la rosca se va
aflojando progresivamente, distorsionando el movimiento que debe realizar el plato. Como solución, se realiza
un pequeño taladro que atraviesa a la tuerca por una de sus caras, a la roscas del racor y a la propia bola, y se
introduce un pequeño pasante para fijar el movimiento deseado, de esta manera, la tuerca no podrá desenroscarse
con el tiempo.
Figura 3.22. Detalle del pasante utilizado en las rótulas.
3.2.7 Estructura y soporte cámara
Finalmente, para poder colocar la cámara en el lugar pertinente, se opta por situarla sobre el plato gracias a un
listón de madera de pino. El soporte se trata de una escuadra que se puede regular según se convenga, es decir,
la cámara se puede colocar manualmente según se desee.
Para ello, el listón vertical se ancla a la base mediante unos tacos de madera incrustados en él, así como un
tornillo para mayor fijación con la base. En el otro extremo, se realiza una ranura para dar un mayor margen en
la regulación de la altura de la cámara, como se muestra a continuación:
19 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 3.23. Ranura realizada en el soporte vertical.
Por otra parte, para realizar la unión entre los dos listones perpendiculares, en un extremo del listón horizontal,
se incorpora una vara roscada de radio inferior a la ranura anteriormente citada. De tal manera que la fijación se
realiza debido a dos tuercas dispuestas en cada uno de los lados del listón vertical.
Figura 3.24. Detalle de la escuadra utilizada.
Finalmente, para la fijación de la cámara y la Raspberry Pi al listón, se crea otra pequeña ranura en el extremo
contrario de éste con tal de poder pasar el conector de la cámara al microprocesador. Asimismo, gracias a los
taladros ya realizados en la placa de la cámara, se puede atornillar la misma al listón para anclar su posición.
Diseño mecánico
20
Figura 3.25. Detalle de la posición de la cámara.
Finalmente, la estructura final muestra la siguiente morfología, quedando totalmente definida:
Figura 3.26. Estructura final.
4 MODELADO DEL SISTEMA
n este capítulo se van a tratar las diversas maneras de afrontar el problema de modelización de un sistema
Ball and Plate. Se desarrollan diferentes maneras de abordar un mismo problema, aportando un gran rango
de soluciones. Los principales hitos por superar son el conseguir un modelo fiable y robusto del prototipo
fabricado para posteriormente poder desarrollar un sistema de control que pueda alcanzar las prestaciones
exigidas al inicio del presente proyecto.
4.1 Modelado de la planta
4.1.1 Ecuaciones de Lagrange-Euler
Una parte fundamental para el correcto control de un sistema es su modelado. Para poder diseñar un controlador
que desempeñe correctamente su función adecuadamente y realizar una predicción consecuente del
comportamiento de la pelota, es necesario un modelo del sistema lo más preciso posible. Tal es así, que en el
presente proyecto para obtener las ecuaciones necesarias para determinar el movimiento de la bola se parte del
método de Lagrange:
𝐿(𝑡) = 𝐸𝑐(𝑡) − 𝐸𝑝(𝑡) (4.1)
Donde se relaciona la energía cinética 𝐸𝑐(𝑡) y la energía potencial 𝐸𝑝(𝑡).
Figura 4.1. Esquema mecánico sistema bola-plato.
En el esquema previo se representa el diagrama de cuerpo libre del sistema, habiéndose despreciado los
siguientes factores que podrían complicar la resolución del modelado innecesariamente:
• Movimiento de rodamiento suave en el cuerpo rígido uniforme.
• Coeficiente de rozamiento entre el plato y la pelota.
• Trayectoria circular seguida por una partícula en movimiento.
E
Modelado del sistema
22
En primer lugar, la energía cinética de un sistema se trata de la suma de las energías de rotación y de traslación
del mismo, y a su vez, cada una de ella como el sumatorio de la cantidad de movimientos que se produzcan en
el sistema de dicho tipo:
(4.2)
Donde:
(4.3)
En segundo lugar, la otra energía que forma parte de la ecuación es la potencial. Tomándose como referencia el
plato, la energía potencial se describe de la siguiente manera:
(4.4)
Es por lo cual, que una vez sustituyendo las anteriores ecuaciones en la ecuación de Lagrange se obtiene:
(4.5)
Asimismo, si se desarrollan cada uno de los términos que forman el teorema:
(4.6)
Una vez descritas las ecuaciones involucradas en el teorema de Lagrange, es necesaria ahondar aún más en el
tratamiento del modelado del sistema. Consecuentemente, se recurren a la ecuación de Lagrange-Euler para
determinar el movimiento de la pelota y la inclinación del plato.
(4.7)
Seguidamente, sobre cada objeto de estudio del proyecto, ángulo de inclinación del plato y posición de la bola,
se aplica la ecuación de Lagrange-Euler sobre las coordenadas del eje X e Y.
(4.8)
(4.9)
(4.10)
23 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
(4.11)
Partiendo de la ecuación (4.8), se halla la aceleración lineal de la pelota sobre el eje X, determinando así la
posición de la misma en dicho eje de coordenadas:
(4.12)
Exactamente igual, evaluando la ecuación (4.9), se obtiene la aceleración lineal de la pelota sobre la coordenada
Y:
(4.13)
De manera similar, a partir de la ecuación (4.10), se averigua la aceleración angular del plato sobre el eje de
coordenadas X, es decir, también se determina el ángulo de giro del plato respeto a dicho eje:
(4.14)
Igualmente, se procede sobre el eje de coordenadas Y:
(4.15)
Modelado del sistema
24
(4.16)
Como conclusión, a partir de las ecuaciones anteriores, se obtienen las aceleraciones angulares del plato y
lineales de la bola respecto a los ejes X e Y, quedando definido el movimiento del sistema completo:
(4.17)
(4.18)
(4.19)
(4.20)
Seguidamente, se enfoca el modelado para el control del sistema, por lo que es necesario las entradas de control
del mismo, siendo 𝑈 = [𝑈𝐴 𝑈𝐵]𝑇 , que corresponde a �̈�𝑥 y �̈�𝑦. Asimismo, se muestran las variables de espacio
de estado que determinan al sistema:
Organizando todas las ecuaciones halladas en los pasos anteriores, la dinámica de la bola y el plato en espacio
de estados se representa en (4.21). Hay que hacer especial hincapié en la existencia de acoplamiento entre las
componentes X e Y en la velocidad lineal, dicho hecho implica la dependencia entre las variables de estados,
por lo que el sistema es no lineal. Por otro lado, se determina el desprecio de la masa y el radio de la bola, ya
que una vez evaluadas la inercia (Ib) de la pelota, se simplifican.
(4.21)
Seguidamente, se realizan ciertas hipótesis para facilitar el diseño del controlador del sistema, tales que se asume
que:
• La bola no se separa del plato en ningún momento, es decir, siempre habrá contacto entre ambos sólidos.
• El movimiento de la bola se llevará a cabo mediante rotación sin deslizamiento, la bola no patina.
• La aceleración de rotación del plato y la velocidad angular del mismo, serán escasas
Dichas suposiciones dan como resultado las siguientes simplificaciones:
25 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
(4.22)
Debido a esta asunción, se ha determinado el desacoplamiento de las coordenadas, siguiendo el espacio de
estados mostrado:
(4.23)
Gracias a las hipótesis y suposiciones realizadas para la simplificación del modelo, se obtienen dos espacios de
estados desacoplados para cada eje de coordenadas, permitiendo el control
• Movimiento sobre el eje X.
(4.24)
• Movimiento sobre el eje Y.
(4.25)
Tabla 1. Unidades y descripción de las variables empleadas.
Modelado del sistema
26
4.1.2 Equilibrio de fuerzas en el sistema
Otro método de poder definir el modelado del sistema estudiado, es el análisis de las fuerzas que actúan a lo
largo de toda la estructura fabricada. En los siguientes esquemas se representan las posibles fuerzas ejercidas
sobre la bola y el plato:
Figura 4.2. Sistema de fuerzas existentes sobre la estructura.
Fuente: https://www.semanticscholar.org/paper/Modelling-of-ball-and-plate-system-based-on-first-Dux0161ek-
Honc/5da58bb88b96aee8571d048df662c42b9af21266
Para ayudar a simplificar las ecuaciones para facilitar el modelado, se plantea la realización de un sistema de
ecuaciones gracias a la dinámica de la pelota sobre el sistema no inercial del plato.
Figura 4.3. Esquema del sistema utilizado.
Dicho esto, se desprecian la fricción y se realiza la suposición de que no ocurrirá ningún deslizamiento entre la
bola y la placa, es decir, sin patinar. Usando estas restricciones, la ecuación de fuerza centrada en el movimiento
de la pelota es:
(4.26)
Seguidamente, si se considera la hipótesis de pequeños desplazamientos para los ángulos considerados:
(4.27)
27 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Además, puede ser conveniente tener el ángulo del servomotor como variable en lugar de ángulo de placa. Una
relación entre los dos está dada por:
(4.28)
Sustituyendo esta relación en la ecuación (4.48) y resolviendo para la coordenada x:
(4.29)
Ésta es una representación matemática del sistema considerando únicamente un eje de coordenadas. Dado que
se asumen pequeños movimientos de ángulo, las dos direcciones, x e y, están desacopladas. Esto significa que
el modelo anterior se aplicará a ambas direcciones de forma independiente. Por lo tanto, las ecuaciones son las
direcciones x e y son:
(4.30)
Donde αy es el ángulo del motor alrededor del eje x y αx es el ángulo del motor alrededor del eje y. Para el
sistema desarrollado, el ángulo del motor y el ángulo de la placa están en relación directa debido a una relación
1:1 utilizada en el engranaje.
Por otro lado, se debe tener en cuenta que la inercia de una bola viene dada por ecuaciones para una bola sólida
o una bola hueca.
(4.31)
Finalmente, sustituyendo esta relación en las ecuaciones anteriores y simplificando los resultados obtenidos:
(4.32)
Modelado del sistema
28
4.2 Consideraciones físicas
4.2.1 Cálculo de grados de libertad del sistema
El grado de libertad de un mecanismo es un parámetro que determina el número de variables independientes o
ecuaciones necesarias para obtener libertad de movimiento en el espacio que tiene un sistema, es decir, para
definir su posición. En el actual proyecto, también se puede interpretar como la cantidad de servomotores
necesarios para la correcta definición de la posición del mecanismo. Dicho parámetro va determinado por el
conjunto de barras y uniones en los diversos componentes del sistema.
La realización de este cálculo puede suponer alcanzar el éxito en el proyecto, debido que dicho cálculo supone
la comprobación del correcto diseño planteado anteriormente sobre las articulaciones pasivas que se han elegido.
Antes de iniciar la explicación de las ecuaciones a utilizar, es necesario la definición de varios conceptos
utilizados. Un claro ejemplo es el denominado eslabón, siendo cada uno de los sólidos rígidos que forman el
sistema, conectados entre sí a partir de pares cinéticos. En el presente proyecto dicho papel lo desempeñarían el
plato, las barras de los brazos articulados o el eje central.
Por otro lado, un par cinético se define como la unión entre sólidos rígidos que impide ciertos movimientos y
permite otros. Como ejemplos, se tendrían las rótulas implementadas en la plataforma.
El criterio de Grübler-Kutzbach para mecanismos espaciales es por el cual se realiza el cálculo de los grados de
libertad de un sistema:
(4.33)
Donde:
n: número de enlaces.
j: número de pares cinéticos.
∑ 𝑓𝑖𝑗𝑖=1 : sumatorio de los grados de libertad de cada par cinético.
Igualmente, expresando el criterio en su versión extendida:
𝐺 = 6(𝑛 − 1) − 𝑗5 − 2𝑗4 − 3𝑗3 − 4𝑗2 − 5𝑗1 (4.34)
Donde:
n: número de enlaces.
j1: número de pares cinéticos de un grado de libertad.
j2: número de pares cinéticos de dos grados de libertad.
j3: número de pares cinéticos de tres grados de libertad.
j4: número de pares cinéticos de cuatro grados de libertad.
j5: número de pares cinéticos de cinco grados de libertad.
En el siguiente esquema conceptual se puede advertir la distribución del acoplamiento mecánico que componen
el plato con las articulaciones a los actuadores y a la base del prototipo.
29 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 4.4. Diagrama de barras.
Mèmoria.pdf
A partir de dicha imagen, se puede determinar que la estructura del sistema Ball and Plate utilizada en el presente
proyecto tiene:
n = 6
j1 = 2 (pares 1-2 y 6-1)
j2 = 1 (par 4-1)
j3 = 4 (pares 2-3, 3-4, 4-5 y 5-6)
Por otro lado, se detecta que el giro de las barras verticales 3 y 5 sobre sí mismas, aportan dos grados de libertad,
sin embargo, no tienen repercusión alguna en la orientación del plato.
Finalmente, teniendo en cuenta estos grados de libertad no esenciales, se obtienen los grados de libertad que
posee el plato:
(4.35)
(4.36)
Asimismo, el sistema global posee dos grados de libertad adicionales gracias al movimiento de la bola en los
ejes X e Y.
4.2.2 Relaciones entre los ángulos de los actuadores y el plato
Tras el análisis del modelado de la plataforma, una de las relaciones fundamentales que se debe determinar para
la correcta definición del sistema es la relación existente entre los ángulos de los actuadores y el plato. Dada las
diversas metodologías empleadas para la determinación de dicho parámetro, se realiza un pequeño estudio de
las mismas, reflejados en los próximos apartados.
4.2.2.1 Método 1: Teorema de Pitágoras
Debido a la compleja geometría de la estructura realizada, el sistema Ball and Plate presenta una desviación que
debe ser considerada a la hora de realizar los cálculos. El plato presenta un ángulo θ cuando el servomotor se
encuentra en la posición de 0º. Una posible solución es alcanzada gracias al análisis del siguiente esquema de
los enlaces entre los diversos elementos del sistema, en este caso habiendo considerado el eje X (se actúa de
manera exacta para el eje Y).
Modelado del sistema
30
Figura 4.5. Teorema de Pitágoras en el sistema.
Planteando el teorema de Pitágoras para la geometría analizada, representado en rojo, se pueden sacar las
relaciones trigonométricas entre las barras y enlaces que forman el prototipo, es decir, la relación entre los
ángulos αx y θ𝑥.
(4.37)
Dado que se considera que el ángulo β es aproximadamente igual a 0, las ecuaciones se pueden simplificar de
la siguiente manera:
(4.38)
Por consiguiente, se utiliza el Teorema de Pitágoras1 aplicado al triángulo anteriormente nombrado para hallar
la correspondencia entre los ángulos:
(4.39)
Realizando la hipótesis de pequeños desplazamientos sobre el ángulo θ𝑥, es decir, considerando que los
desplazamientos del plato serán muy pequeños, la ecuación se puede simplificar de tal manera que sinθ𝑥 ≈ θ𝑥 y cos θ𝑥 ≈ 1. Paralelamente aplicando también la identidad trigonométrica sin𝜑2 + cos𝜑2 = 1:
(4.40)
Finalmente, despejando las ecuaciones, se obtiene que la relación entre el ángulo del plato y el ángulo del
actuador para la coordenada X se rigen por la siguiente ecuación:
(4.41)
Similarmente, la ecuación hallada para la coordenada Y es la que sigue:
1 𝑎2 + 𝑏2 = ℎ2 donde h es la hipotenusa y a y b los catetos del triángulo
31 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
(4.42)
4.2.2.2 Método 2: Considerando la posición inicial
De manera similar al método anterior, se tiene la siguiente distribución geométrica del sistema objeto de estudio:
Figura 4.6. Sistema bola -plato de referencia utilizado.
Las relaciones entre α y θ vienen dadas por las siguientes cadenas geométricas cerradas (despreciando el
coeficiente de elasticidad del plato de la estructura):
(4.43)
Asimismo, el ángulo γ puede ser despreciado por la hipótesis de pequeños desplazamientos, quedando la
ecuación de tal manera:
(4.44)
Por otro lado, si se considera la plataforma en el momento de equilibrio, el ángulo θ debe ser nulo, pudiendo
simplificar la ecuación (4.44) de la manera siguiente. Cabe destacar que de dicha ecuación se sacará el parámetro
α0, indicando la posición del brazo del servomotor cuando la plataforma se encuentra totalmente horizontal:
(4.45)
Volviendo a la expresión (4.44), al desarrollar los polinomios como entidades notables, se obtiene:
(4.46)
Seguidamente, se linealiza alrededor del punto de equilibrio determinado al inicio del presente desarrollo, es
decir, en el punto (𝜃, 𝛼) = (0, 𝛼0) se obtiene:
Modelado del sistema
32
(4.47)
Simplificando (4.53), finalmente se obtiene la relación entre los diversos ángulos del sistema, habiendo hallado
la siguiente ecuación:
(4.48)
4.2.2.3 Método 3: Mecanismo de barras
En el siguiente método para hallar la relación entre ángulos de las plataforma y el servomotor, cabe destacar la
disposición de este último, ya que el eje central del actuador se encuentra en un plano paralelo al eje central del
plato, es decir, girado 90º respecto a la distribución anterior.
En este caso, se utiliza la metodología empleada para averiguar las relaciones en un mecanismo de 4 barras,
siendo 𝛼(𝑠) y 𝛽(𝑠) los ángulos de inclinación del plato, controlados de forma indirecta por los actuadores. En el
siguiente esquema se representan las coordenadas correspondiente al eje X.
Figura 4.7. Distribución de la estructura bola-plato utilizada.
Consiguientemente, se detecta que los ángulo 𝛼(𝑠) y 𝛽(𝑠) no se corresponden con los ángulos de rotación de los
actuadores 𝜃𝑥 y 𝜃𝑦, debido a que el mecanismo de cuatro barras detectado en la estructura no es un
paralelepípedo.
Para poder llegar a definir completamente el sistema objeto de estudio, es necesario incurrir en un cálculo
adicional para averiguar los ángulos demandados en los actuadores para alcanzar los ángulos 𝛼(𝑠) y 𝛽(𝑠)
buscados. Finalmente, las ecuaciones utilizadas para el cálculo del ángulo de inclinación requerido 𝛼(𝑠), y así
hallar el ángulo de giro del actuador 𝜃𝑥:
(4.49)
(4.50)
33 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
(4.51)
(4.52)
(4.53)
4.2.2.4 Método 4: Intersección de trayectorias
Como se ha detallado en métodos anteriores, a causa de la geometría del prototipo fabricado, cuando el ángulo
del actuador se encuentra en la posición de 0º, el ángulo del plato no se corresponde, ya que no se obtiene 0º de
inclinación. Es por lo cual que se analizan las posibles soluciones cinemáticas del sistema, siendo los mismos el
problema cinemático directo e inverso.
Inicialmente, en el problema cinético directo se define la inclinación del plato con respecto a un sistema de
coordenadas de referencia, partiendo del ángulo de los servomotores. Por otro lado, el problema cinemático
inverso consiste en, como bien su nombre indica, justamente lo contrario, a partir de la inclinación del plato,
cuantificar el ángulo que deben alcanzar los actuadores. En el presente capítulo se resuelve el segundo caso, ya
que será bastante provechoso para conocer que ángulo deben lograr los servomotores para que el plato se
mantenga en 0º.
De tal modo, se prosiguen los trabajos desarrollando dicho problema utilizando matrices de transformación
homogénea (MTH) o por el método geométrico, indicado en el siguiente esquema, tratándose del método elegido
dada su mayor facilidad de implementación.
El método geométrico elegido trata de averiguar las relaciones existentes que permiten hallar la situación
espacial del sistema a partir de sus coordenadas articulares.
Figura 4.8. Situación espacial del sistema bola-plato.
Si se sigue la designación mostrada en la figura anterior, el ángulo β es conocido, aportando la solución para el
hallazgo de las coordenadas del punto de unión P del brazo con el plato. Por otro lado, es relevante destacar que
las coordenadas buscadas son las de la unión J, para poder determinar el ángulo de rotación θ del actuador.
El objetivo principal es hallar las coordenadas de la anteriormente citada unión J como la intersección de la
trayectoria realizada por el brazo R1 y por el brazo R2, considerándose estas dos circunferencias de radio R1 con
centro en M, y otra circunferencia de radio R2 y centro P respectivamente.
Modelado del sistema
34
Figura 4.9. Intersección entre trayectorias.
Consecutivamente, considerándose los puntos 𝑀 = (𝑥𝑀 , 0) y 𝑃 = (𝑥𝑝, 𝑧𝑝) representan los centros de las
trayectorias circulares anteriormente expuestas, es posible plantear el siguiente sistema de ecuaciones:
(4.54)
(4.55)
Desarrollando y expandiendo las entidades anteriores, se obtiene:
(4.56)
(4.57)
A continuación, si se realiza la resta de las ecuaciones anteriores:
(4.58)
Donde:
(4.59)
(4.60)
Como conclusión, sustituyendo estos valores en las ecuaciones previas:
(4.61)
(4.62)
Finalmente, resolviendo para la ecuación (4.62) se halla la posición del enlace J, y por consecuencia, se cuantifica
el valor del ángulo θ. Por otro lado, se sustituyen las coordenadas de los puntos M y P.
35 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
(4.63)
(4.64)
(4.65)
Para la coordenada del eje Y, se realizan los mismos cálculos, obteniendo las ecuaciones idénticas.
Modelado del sistema
36
5 DISEÑO DE CONTROLADORES
lo largo de la presente sección, se detallan los controladores que se han diseñado para poder controlar el
movimiento del plato según la trayectoria de la bola. Por consiguiente, tras los cálculos llevados a cabo
en capítulos anteriores, los controladores se han planificado a partir de la aproximación lineal del sistema
alrededor de un punto de equilibrio.
5.1 Puntos de equilibrio naturales del sistema
El punto de equilibrio de un sistema se puede definir como aquel en el que el estado del sistema permanece
inalterado, es decir, el estado no cambia, no hay ningún tipo de variación y de mantiene estable indefinidamente.
Por otro lado, un punto de equilibrio natural se reduce a aquel en el cual la señal de control es nula. Tal es la
importancia de la determinación de dichos puntos, que el punto inicial para calcular los controladores es la
averiguación de dichos puntos de equilibrio que posee el sistema.
(5.1)
(5.2)
Con
Naturalmente, para el sistema Ball and Plate planteado, se aplica la ecuación (5.1) sobre el conjunto de
ecuaciones que determinan el sistema no lineal, partiendo del sistema (4.21) desarrollado en el capítulo previo:
(5.3)
Seguidamente, resolviendo el sistema de ecuaciones, se determinan los puntos naturales de equilibrio que posee
el sistema. En el caso objeto de estudio, siempre y cuando sean nulos los valores de la velocidad lineal de la
pelota, el ángulo de giro y la velocidad angular, el sistema tendrá infinitos puntos de equilibrio, ya que cualquier
posición sobre el plato es considerada como un punto de equilibrio.
(5.4)
A
Diseño de controladores
38
5.2 Aproximación lineal del sistema alrededor de un punto de equilibrio
Dada la no linealidad del sistema, es necesario la linealización entorno a un punto de equilibrio. En ese caso, el
controlador es diseñado mediante la metodología desarrollada en el control lineal, para más adelante ser
implementada en el sistema no lineal. Consecuentemente, se aplica la linealización (5.5), donde �̂� y �̂� se
corresponden con el cambio de variable detallado en (5.6); y las constantes 𝑋0 y 𝑈0 el punto de equilibrio fijado.
(5.5)
(5.6)
Finalmente, a partir del punto de equilibrio (5.4) correspondiente al centro del plato, se realiza la siguiente
aproximación lineal del sistema. Asimismo, implementando sobre la aproximación del sistema Ball and Plate
(5.5) determinada, a falta de evaluar sobre el punto de equilibrio, se halla:
(5.7)
Seguidamente, evaluando (5.7) sobre el punto de equilibro fijado, el centro del plato, y haciendo hincapié que
dicho punto de equilibrio es 𝑃. 𝐸.= 0⃗ , el cambio de variable necesario se realiza directamente como �̂� = 𝑋 y
�̂� = 𝑈. Finalmente, se obtiene el siguiente espacio de estados para determinar el sistema:
(5.8)
Analizando detalladamente dicho espacio de estados, se detecta la independencia de las distintas coordenadas
del sistema implicadas, realizando un desacoplamiento de las mismas. Cabe destacar que dichos subsistemas
tienen el mismo comportamiento, por lo que a partir de ahora, solo será realizado el desarrollo de una de ellas.
• Movimiento sobre el eje X.
39 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
(5.9)
• Movimiento sobre el eje Y.
(5.10)
5.3 Simplificación del modelo de la planta
En el prototipo diseñado hasta ahora, es evidente que como entrada de control se toma la aceleración angular del
plato, es decir, la aceleración angular de los motores que gobiernan el movimiento del mismo. Pero cabe destacar
que el ángulo del plato, y en consecuencia la posición de la bola es regido por el movimiento de los actuadores
a través de un dispositivo PWM.
Seguidamente, se representan dos dobles integradores en el modelo lineal del Ball and Plate para la coordenada
x, representados en la ecuación (5.9). Uno de ellos marcado en color naranja para las variables de estado x1 y x2,
y, por otro lado, marcado en rojo, para las variables 𝑥3 y 𝑥4. Por lo cual, el sistema en espacio de estados para
un doble integrador se expone a continuación:
(5.11)
(5.12)
Si se parte de la variable de estado 𝑥4 para la obtener la señal de control, pasando por el doble integrador
especificado anteriormente en color rojo, se alcanza la variable 𝑥3:
(5.13)
Prosiguiendo con dicho planteamiento, se puede hallar una nueva variable de control 𝑥3 = 𝑈𝑥 que alimenta al
modelo desde la variable 𝑥2:
(5.14)
Por consiguiente, se ha logrado una nueva variable de control válida para controlar la posición de los actuadores
del prototipo ya que se trata del ángulo de inclinación del plato. Representando según estas premisas en el
modelo simplificado del sistema para la coordenada x:
Diseño de controladores
40
(5.15)
Rigiéndose por el mismo criterio, se determinan igualmente las ecuaciones que describen el movimiento sobre
la coordenada y:
(5.16)
De manera similar, para el sistema no lineal (4.21), se toman las nuevas entradas de control definidas (𝑥3 = 𝑈𝑥
y 𝑥7 = 𝑈𝑦):
(5.17)
(5.18)
Finalmente, como 𝑥3, 𝑥4, 𝑥7 y 𝑥8 no tienen repercusión alguna en el modelo simplificado, se obtienen las
siguientes ecuaciones en el espacio de estados del sistema:
• Modelo lineal:
(5.19)
• Modelo no lineal con acoplamiento:
(5.20)
• Modelo no lineal sin acoplamiento:
(5.21)
5.4 Realimentación de estado: Regulación
La función de transferencia del sistema puede ser hallada a partir de las matrices que describen el sistema Ball
and Plate, descritas a continuación:
41 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
(5.22)
Tras el análisis de la función de transferencia, se detecta que el sistema en lazo abierto posee dos polos en 0, lo
que denota además de la no linealidad del sistema, su inestabilidad. Por lo cual es de suma importancia realizar
un controlador para poder paliar los efectos de la citada inestabilidad:
(5.23)
Los primeros pasos a seguir es determinar un controlador para regulación, o dicho de otro modo, un controlador
que conduzca al sistema bajo control a su punto de equilibrio. Dicha regulación se alcanza gracias a la
realimentación de la planta mediante una señal de control regida por la siguiente ley:
(5.24)
En el siguiente diagrama de bloques se expone el control de un sistema en lazo cerrado con realimentación de
estados.
Figura 5.1. Diagrama de bloques del sistema en lazo cerrado con realimentación de estados.
5.5 Controladores desarrollados
Como estudio concluyente a todo lo citado anteriormente, en el presente apartado se describen la metodología
del control definitivo que se va a implementar en el sistema, para en los apartados siguiente explicar su
compilación y resultados en el prototipo desarrollado.
Diseño de controladores
42
Figura 5.2. Diagrama de bloques de un sistema con controlador PID.
Fuente: http://dronesdecarreras.com/pid-para-cuadricopteros-que-es/
El controlador elegido es el más extendido usualmente para el control de sistemas con lazo cerrado en los cuales
no se tiene conocimiento del proceso, el PID. El control proporcional, integral y derivativo (PID) es un
mecanismo de control por realimentación caracterizado por su gran sencillez, eficacia y robustez. Cada término
incluido en el controlador desempeña una función relevante en todo el proceso, tal es así que el término
proporcional depende del error actual, el integral de los errores pasado y el derivativo es una predicción de
errores futuros.
Figura 5.3. Diagrama de bloques de un sistema realimentado con controlador PID.
Fuente: https://upload.wikimedia.org/wikipedia/commons/d/d9/PID_es_updated_feedback.svg
El funcionamiento de dicho controlador es bastante simple en cuanto a concepto: el controlador recibe una señal
externa denominada punto de referencia, punto de consigna o set-point, la cual posee las mismas propiedades
que la señal que suministra el sensor, en el caso de estudio, la cámara.
A continuación, el controlador resta la señal del punto de referencia con la señal recibida, obteniendo así el error
cometido por el sistema, que determina la diferencia entre ambas señales. Dicha señal de error será al utilizada
por cada componente del controlador para poder alcanzar el punto deseado en el sistema.
Seguidamente, se analiza por separado cada término que compone el controlador elegido, aportando un mayor
empaque a la elección tomada:
• Término proporcional
El término proporcional basa su cálculo en el producto del error cometido 𝑒(𝑡)y una constante
proporcional ajustable 𝑘𝑝, intentando en este caso alcanzar que el error estacionario se aproxime a cero.
Este error estacionario se trata de la diferencia entre la variable a controlar con el punto de referencia cuando
el sistema se encuentra en régimen permanente.
(5.25)
43 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
• Término integral
Dicho término es el encargado de disminuir y suprimir el error en régimen estacionario, compensando
las perturbaciones externas que el control proporcional no es capaz de mitigar. El control integral es el
encargado de atenuar la desviación existente entre la variable de entrada y el set-point, integrando la
desviación en el tiempo y realizando un sumatorio con la acción proporcional.
(5.26)
En la expresión teórica de la acción integral destaca el término 𝑇𝑖, siendo el tiempo integral. Se trata del
tiempo incurrido para que la acción integral surja efecto en la salida del controlador de igual manera que el
término derivativo. Asimismo, se puede definir la contante de integración como la velocidad con la que se
repite la acción proporcional 𝐾𝑖 = 𝐾𝑝 𝑇𝑖⁄ .
• Término derivativo
Se trata de la acción de control más rápida de todas las descritas, debida a su carácter de previsión. Hace su
aparición cuando hay una modificación el valor absoluto del error, es decir, si el error es contante, no actúa.
Como principal inconveniente, debido a su rapidez de actuación, es posible que amplifique el ruido y pueda
saturar a los actuadores.
(5.27)
Donde 𝑇𝑑 representa el tiempo necesario para que la acción proporcional de igual medida que la acción
derivativa en la salida del controlador. Igualmente al caso anterior, se puede definir la constante de
derivación como 𝐾𝑑 = 𝐾𝑝𝑇𝑑.
Una vez detallado cada término implicado en la acción del controlador, se procede a la suma de cada uno de
ellos, formando el controlador PID definitivo. Es por lo tanto, que la ley de control en tiempo continuo del
controlador se puede definir como:
(5.28)
Como bien se ha puntualizado anteriormente, se ha llegado a la expresión en tiempo continuo, sin embargo, para
implementar dichas expresiones en el microprocesador Raspberry Pi, dispositivo que capta las imágenes cada
tiempo determinado, es necesario trabajar en modo discreto. Para la discretización del sistema, es factor
fundamental la determinación de un tiempo de muestreo 𝑇𝑠.
Procediendo en primer lugar con el término integral aproximándolo por rectángulos y discretizando para 𝑇𝑠 se
obtiene la siguiente expresión:
(5.29)
Operando de manera similar para el término derivativo, se alcanza:
(5.30)
Finalmente, realizando el sumatorio de los términos anteriores, integral y derivativo, y sacando como factor
común la constante proporcional, se halla la sucesiva expresión que determina la ley de control del PID en modo
Diseño de controladores
44
discreto:
(5.31)
Una vez definido cada una de las partes del controlador diseñado, se determinan experimentalmente cada uno
de los valores de dicho controlador.
6 ELECCIÓN DE COMPONENTES Y
CONEXIONADO
ara llevar a cabo el prototipo descrito en capítulos anteriores, previamente se ha realizado un estudio
preliminar de la actual tecnología ofertada en el mercado de cada uno de los componentes que conforma
la estructura final.
Por otro lado, siguiendo la filosofía de bajo costo seguida en el presente proyecto, se han elegido los elementos
que para un coste menor, pudieran aportar las soluciones buscadas sin tener que sacrificar ninguna de las
especificaciones y objetivos marcados.
6.1 Sistema de detección de la pelota
Investigando sobre la oferta actual existente en el mercado, se determina que hay dos claras vertientes en cuanto
a la detección de la posición de la bola en el plato. Una de ella se trata de que el mismo plato se trate de un panel
táctil resistivo, o de otro modo, haciendo uso de la visión artificial, utilizar una cámara como entrada de señal
del sistema desarrollado.
6.1.1 Panel táctil resistivo
La opción de utilizar un panel táctil resistivo como plato del prototipo es una de las vertientes más utilizadas en
el mercado actual. Dicho éxito se debe a su facilidad de transmitir una señal externa en una señal de control. La
composición de los paneles táctiles se caracteriza por estar formada por varias capas, siendo las más
significativas dos capas compuestas por un material conductor entre las cuales se halla un pequeño espacio. El
funcionamiento es sencillo, cuando se presiona algún punto de la propia pantalla, estas dos capas entraran en
contacto creando una variación en la corriente eléctrica.
Figura 6.1. Principio de funcionamiento del panel táctil resistivo.
Fuente: https://www.informatica-hoy.com.ar/electronica-consumo-masivo/Diferencias-pantallas-resistivas-
capacitivas.php
P
Elección de componentes y conexionado
46
Esta señal es la utilizada por el controlador para determinar cuál es la posición de la pelota sobre el panel gracias
a la medición de la resistencia en dicho punto de contacto. Asimismo, para pantallas más sofisticadas en posible
medir la presión que se ha ejercido sobre el panel.
Figura 6.2. Panel táctil.
Fuente:http://www.matrix.es/display-touch-panel/paneles-tactiles-resistivos
6.1.2 Cámara
Seguidamente, se estudia la otra opción más utilizada, la instalación de una cámara sobre el plato, de tal manera
que se vayan captando imágenes cada un determinado espacio de tiempo o intervalo. Cada una de las imágenes
que se capturan, deben tratarse posteriormente para la determinación de la bola sobre el plato, por lo que se
detecta que evidentemente el tiempo del tratamiento de dichas imágenes dependerá de la velocidad del
microprocesador utilizado, pudiendo incurrirse en un tiempo de muestreo más alto que el caso anterior.
Figura 6.3. Webcam/cámara.
Fuente: https://www.pccomponentes.com/logitech-hd-webcam-c270
Sin embargo, el coste de las cámaras es mucho más inferior que el de los paneles táctiles, por lo que es la opción
que más fuerza entre la elección de ambas.
6.1.3 Selección del sistema de detección de la pelota
Consecuentemente a lo expuesto previamente, es evidente la rapidez superior del procesado de la posición de la
bola en el caso del panel táctil, ya que se analiza la señal directamente; sin embargo, en el caso de hacer uso de
la cámara, se han de tener en cuenta el tiempo del post-procesamiento de las imágenes para la detección de la
pelota sobre el plato.
Aunque a simple vista la opción más viable sería la utilización del panel táctil, en el presente proyecto se ha
47 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
decidido hacer uso de la cámara, ya que resulta tener un coste inferior, así como más interesante a nivel
académico.
6.2 Controlador
La estrategia de control elegida para el diseño y desarrollo del sistema Ball and Plate es una de las decisiones
más relevantes que tomar, ya que es la encargada de regular la posición de la bola en el plato. El mecanismo
explicado brevemente se trata de la recepción de la señal del sensor sobre la posición real de la pelota sobre el
plato, la cual se compara con el punto de referencia o consigna deseada, hallando de este modo el error cometido
por sistema. Consecutivamente, dicho error se corrige enviando una señal a los actuadores para el movimiento
del plato, lo que hace que la pelota se dirija a la posición deseada.
Para la implementación del controlador las opciones más utilizadas se pueden llevar a cabo a través de dos
caminos diferenciados. El primero de ellos se trata de hacer uso de un ordenador, formado normalmente por
potentes hardware y software que facilitan el control del sistema, como podrían ser Matlab/Simulink o NI
LabVIEW. Por otro lado, se tiene la opción de utilizar la cámara a través de los puertos USB del ordenador, así
como también se posee un procesador lo suficientemente rápido para realizar el tratamiento de la imagen. Sin
embargo, el principal inconveniente recae en el control de los actuadores, ya que sería necesario el uso de un
hardware externo para poder controlarlos desde el ordenador, por lo que se desecha esta opción.
Paralelamente, otra opción considerada igualmente eficiente, es el uso de un microcontrolador. El
microcontrolador es un circuito integrado programable, encargado de realizar los programas almacenados en su
memoria interna, constituido por una unidad central de procesamiento (CPU), unidades de memoria (RAM y
ROM), puertos de entrada, de salida y periféricos.
Actualmente, los microprocesadores más vendidos en el mercado se tratan de Arduino y Raspberry Pi. La fama
de estos controladores recae en la facilidad de programación, así como su gran versatilidad para el uso de diversas
aplicaciones.
6.2.1 Arduino
Arduino se trata de una plataforma de hardware de código abierto. Su programación se realiza desde un
ordenador, escribiendo y cargando códigos en la placa física, gracias a un entorno de desarrollo integrado (IDE).
El hardware del microprocesador consiste en una placa donde se integra el microcontrolador, además de salidas
y entradas, tanto analógicas como digitales.
Figura 6.4. Microprocesador Arduino.
Fuente: http://www.niltech.in/product/arduino-uno-r3/
En comparación con otros microcontroladores existentes, la carga de los programas se realiza mediante un cable
USB, sin necesidad del uso de un hardware adicional. Otra característica destacable de Arduino es el lenguaje
de programación usado, ya que se trata de una versión simplificada de C++, haciendo mucho más fácil la
programación del citado microprocesador.
Elección de componentes y conexionado
48
6.2.2 Raspberry Pi
Por otro lado, otro microcontrolador que actualmente se encuentra en auge en el mercado es la Raspberry Pi,
siendo un ordenador de bajo coste del tamaño de una tarjeta de crédito. Fue originalmente diseñada en 2011 para
estimular la enseñanza de la informática en las escuelas, pero hasta 2012 no empezó a fabricarse. En realidad,
se trata de una diminuta placa base de 85 x 54 milímetros que aloja un chip Broadcom BCM2836 con procesador
ARM hasta 1 GHz de velocidad, GPU VideoCore IV y hasta 1 Gigabytes de memoria RAM. Por lo tanto, se
puede considerar la Raspberry Pi como un microcomputador.
Figura 6.5. Microprocesador Raspberry Pi 3.
Fuente: http://tienda.bricogeek.com/placas-raspberry-pi/811-raspberry-pi-3.html
6.2.3 Elección de controlador
Consiguientemente, se realiza una comparativa de las ventajas e inconvenientes en los que se puede incurrir
según la elección tomada entre un microprocesador u otro. En cuanto a potencia del procesador de cada uno,
Raspberry PI posee uno más potente y de más memoria RAM que Arduino, sin embargo, los pines de entrada y
salida contienen mayores limitaciones que los pines de Arduino. Dicho inconveniente es el principal de todos,
ya que en el sistema Ball and Plate es necesario el uso de señales PWM para el control correcto de los actuadores
utilizados, por lo que se debe tener en cuenta si es necesario el uso de un hardware intermedio para poder
controlarlos, o si simplemente es suficiente a partir de la programación. Arduino, en cambio, dispone de varios
pines PWM que permiten conectar y controlar simultáneamente más de un servomotor.
Paralelamente, se debe tener en consideración el tratamiento de imágenes anteriormente descrito, obteniendo la
principal restricción de Arduino, el cual no dispone de entrada para poder conectar una cámara, por lo que obliga
a hacer uso de un ordenador para el uso de la misma. Detectado dicho inconveniente, resulta indiscutible que el
microprocesador que mejor encaja con las especificaciones del sistema deseado se trata de la Raspberry Pi.
Igualmente, se detalla que se hace uso de la cámara Pi, siendo un módulo propio comercializada especialmente
para el uso con este microprocesador.
6.3 Actuadores
Los actuadores son los encargados de realizar el movimiento del plato en el sistema. Usualmente, la solución
más usada se trata de la incorporación de motores de tipo rotativo, destacando los motores DC, los motores paso
a paso y los servomotores. A continuación, se analiza cada uno de ellos para determinar cuál de ellos es el que
más se ajusta a las necesidades encontradas.
6.3.1 Motor DC
El motor de corriente continua o DC es un mecanismo capaz de convertir la energía eléctrica en energía
49 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
mecánica, generando un campo magnético que induce un movimiento giratorio. El motor se constituye de dos
cables, correspondientes a alimentación y tierra, los cuales proporcionan la electricidad necesaria para el correcto
funcionamiento del motor. Una vez activada la alimentación del motor, éste empieza a girar, deteniéndose
únicamente en el momento de la retirada de dicha alimentación.
Figura 6.6. Motor DC
Fuente: http://www.directindustry.es/prod/chiaphua-components/product-61070-575565.html
Una de las características más significativas de los motores DC son las altas velocidades (revoluciones por
minuto, rpm) que les es posible alcanzar, pudiendo ser controlada mediante la modulación por ancho de pulso
(PWM).
6.3.2 Servomotor
El servomotor se caracteriza principalmente por la posibilidad de un control de la posición mucho más preciso,
poseyendo en este caso tres cables, siendo uno para la alimentación (rojo), otro para masa (marrón) y el último
para el control (amarillo). El servomotor se trata de un potente dispositivo compuesto por cuatro elementos
distintivos: un motor DC, un reductor de velocidad y multiplicador de fuerza, un circuito de control y un sensor
de posición, que generalmente es un potenciómetro.
Cabe destacar que el ángulo de giro de los servomotores normalmente está limitado a 180º, por lo que no es
posible que giren libremente. La señal de control que reciben determina la posición que debe adoptar el motor y
le aplica tensión hasta que el brazo alcanza la posición deseada.
Aquí destacan de nuevo las señales PWM, encargadas de controlar la posición del servomotor gracias a un tren
de pulso, a comparación de los motores DC donde se regulaba la velocidad. Si se describe genéricamente el
funcionamiento de un servo, se determina que con el envío de un pulso con una frecuencia de 50 Hz de 1,5 ms
el servo se sitúa en su posición central, 90º. Por otro lado, si se incrementa el pulso se tiene una rotación horaria,
y si se decrementa antihoraria.
Figura 6.7. Servomotor.
Fuente: https://www.nextiafenix.com/producto/servo-motor-mg995/
Elección de componentes y conexionado
50
Cuando se le envía una señal de referencia de posición a un servomotor, éste se mueve hasta esa posición y la
mantiene, incluso si una fuerza externa empuja en sentido contrario, siempre y cuando el tren de pulsos sea
enviado continuamente. El servomotor mantendrá la posición si no supera el torque máximo que puede ejercer.
6.3.3 Motor paso a paso
Un motor paso a paso (motor PaP en adelante) es comparable con un servomotor, tan solo destacando que utiliza
un mecanismo de motorización distinto. Mientras que un servomotor utiliza un motor DC controlando la
posición del giro con el circuito de control, los motores PaP poseen múltiples electroimanes dentados dispuestos
en torno a un engranaje central para determinar su posición.
Figura 6.8. Motor paso a paso.
Fuente: http://tienda.bricogeek.com/motores/75-motor-paso-a-paso-24kg-cm.html
Los motores PaP requieren un circuito de control externo o microcontrolador para alimentar individualmente
cada electroimán, para poder mover el brazo del motor. Cuando el electroimán ‘A’ es alimentado, éste atrae al
engranaje y lo alinea ligeramente desplazado del siguiente electroimán ‘B’. Cuando se desconecta el electroimán
‘A’ y se alimenta el ‘B’, el engranaje se alinea con el ‘B’, y así sucesivamente hasta completar el círculo. Cada
rotación entre un electroimán y el siguiente se denomina ‘paso’. El motor puede girar tantos ‘pasos’ estén
predefinidos a lo largo de los 360º de rotación.
6.3.4 Elección de actuador
Finalmente, recopilando lo citado para cada tipo de motor se debe tomar una decisión. En primer lugar, se
determina que los motores DC son los más rápidos, tienen rotación continua y completa en los 360º, siendo los
más utilizados normalmente para aplicaciones donde son necesarias altas revoluciones.
Por otro lado, los servomotores son rápidos, pero no tanto como los motores DC, tienen un torque elevado,
posición precisa y ángulo de rotación limitado. Comúnmente se consideran una mejor solución que los motores
PaP, aunque poseen el inconveniente de una mayor dificultad a la hora de configurarlos con la señal PWM.
Finalmente, los motores PaP son los más lentos, tienen una rotación muy precisa y son fáciles de configurar y
controlar. Los motores PaP controlan la posición a través de su naturaleza de rotación por elementos
fraccionales, es decir, por pasos, mientras que un servomotor requiere de un circuito de control y
retroalimentación.
Concluyentemente, habiendo analizado en profundidad cada motor, se determina la elección de los servomotores
gracias a su rapidez y a su mayor torque, aun teniendo los motores PaP una mayor precisión de la posición, pero
su lentitud los ha descartado. Por otro lado, los motores DC se descartan por su dificultad de control de la
posición.
7 PROGRAMACIÓN
no de los principales puntos del presente proyecto es la implementación de lo estudiado teóricamente en
los capítulos anteriores, donde se desarrollan todas las ecuaciones necesarias para la consecución y
alcance de los objetivos planteados al comienzo del presente proyecto.
Asimismo, se trata de los capítulos con mayor complicación, ya que el tiempo empleado en el diseño de los
diversos programas no se puede cuantificar exactamente. Tal es así, que a la finalización del presente proyecto
no se han podido comprobar los programas desarrollados debido a un fallo de compilación en la incorporación
de las librerías explicadas posteriormente, por lo que el programa final, expuesto no se ha podido comprobar
correctamente, habiéndose hecho una estimación en todo momento según otros programas de referencias
empleados.
7.1 Estructura del programa
Uno de los primeros pasos a la hora de realizar una correcta estructura de un programa, es la realización del
diagrama de bloques que define las etapas a seguir durante la realización del mismo, así como de manera
cuantitativa cómo funcionará dicho programa. Es por lo cual, que se expone el siguiente esquema en el cual se
diferencia claramente cuál será el proceso iterativo que realizar por el mismo.
Figura 7.1. Estructura de programación.
Dado que para el control del sistema es necesaria una realimentación del mismo, ya que se parte de un punto de
referencia, al cual se obligará al sistema a tender, es decir, se intenta que la pelota siempre se encuentre en dicha
posición, es de vital importancia la determinación del tiempo de muestreo.
El tiempo de muestreo se define como el tiempo que transcurre entre la captación de una muestra y su
consecutiva en la señal medida, por lo cual, si este intervalo es excesivo se puede incurrir en una inestabilidad
del sistema.
U
Programación
52
Por otro lado, otro factor relevante en el control del sistema es el tiempo de cómputo del mismo, tiempo que
emplea el microprocesador en realizar un ciclo completo del programa implementado. Es decir, si el
microprocesador no es lo suficientemente rápido para incidir en un tiempo de cómputo bajo, el tiempo de
muestro también deberá ser elevado, pudiéndose llegar a un control inestable.
En los próximos apartados se realiza el estudio y análisis de la técnica existente en el mercado, eligiendo en cada
caso la mejor opción para las prestaciones y requisitos estipulados al inicio del presente proyecto, y además,
como se ha hecho hincapié, lo más rápidas posibles, con un bajo tiempo de cómputo.
7.2 Obtención y tratamiento de imágenes
En la presente sección, se toma el tema de la obtención y el tratamiento de imágenes por parte del
microprocesador a través de la cámara elegida para el proceso. Debido a estar utilizando el microprocesador
Raspberry Pi 3, se dispone de una amplia gama de lenguajes de programación, siendo los comúnmente utilizados
Python, C y C++. Con el transcurso de los trabajos realizados, se tomará la decisión de cual lenguaje es el más
adecuado para la aplicación buscada.
Consecuentemente, se procede con el lenguaje de programación Python, ya que se trata del lenguaje en auge en
el momento del desarrollo del presente proyecto. Asimismo, la mayoría de los programas desarrollados se
realizan gracias a la librería dispuesta para el tratamiento de imágenes OpenCV.
La librería OpenCV se trata de una librería de código abierto diseñada por Intel, la cual permite la visión artificial
por ordenador y el procesamiento de imágenes, gracias a una gran variedad de funciones para el dicho procesado
de imagen.
Inicialmente, se procede con la captura de imágenes y su enmascarado en tiempo real. Para ello se realiza un
programa que utiliza el modelo de color HSV (Hue, Saturation, Value – Matiz, Saturación, Valor) para la
creación de una máscara adecuada. El modelo elegido se representa como sigue en la siguiente imagen:
• Matiz: representado por una región circular.
• Saturación y Valor: gobernados por una región triangular. Usualmente, el eje vertical de dicha región se
corresponde con el valor del color, y por otro lado, el eje horizontal con la saturación.
Figura 7.2. Diagrama HSV.
Fuente: https://es.wikipedia.org/wiki/Modelo_de_color_HSV
Para una mayor facilidad en el tratamiento de imágenes y de los valores adecuados, se implementa en el
programa una ventana emergente con diversos indicadores ajustables. A continuación, se muestra el formato
que dispone dicha ventana:
53 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 7.3. Ventana de control de los parámetros HSV.
Asimismo para averiguar los distintos valores de HSV de los posibles colores a hallar en programas postetiores,
se realiza un ejemplo con diferentes rotuladores de colores, obteniendo como resultado las distintas máscaras
mostradas seguidamente:
• Color verde:
Figura 7.4. Detección del color verde.
• Color azul:
Figura 7.5. Detección del color azul.
• Color magenta:
Programación
54
Figura 7.6. Detección del color magenta.
• Color amarillo:
Figura 7.7. Detección del color amarillo.
Dicho de otro modo, se recopilan los siguientes datos relevantes sobre los valores de HSV de los diversos colores
captados por la cámara del microprocesador:
Tabla 2. Tabla de los distintos valores de HSV para diversos colores.
Finalmente, cabe destacar que el enmascara se realiza en tiempo real en todo momento, es decir, la cámara se
sitúa en modo de video reproduciendo continuamente lo que se capta, y en la ventana de la máscara se realiza
en el instante el filtrado de la imagen recibida.
El programa implementado queda finalmente de la siguiente forma:
import serial
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
def nothing(x):
pass
Máx. Mín. Máx. Mín. Máx. Mín.
Verde 0 43 77 255 45 255
Azul 80 147 35 255 42 202
Magenta 161 255 49 176 0 166
Amarillo 40 80 26 168 31 145
H S V
55 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
#Creamos una ventana llamada ‘image’ en la que habra todos los
sliders
cv2.namedWindow(‘image’)
cv2.createTrackbar(‘Hue Minimo’,’image’,0,255,nothing)
cv2.createTrackbar(‘Hue Maximo’,’image’,0,255,nothing)
cv2.createTrackbar(‘Saturation Minimo’,’image’,0,255,nothing)
cv2.createTrackbar(‘Saturation Maximo’,’image’,0,255,nothing)
cv2.createTrackbar(‘Value Minimo’,’image’,0,255,nothing)
cv2.createTrackbar(‘Value Maximo’,’image’,0,255,nothing)
while(1):
_,frame = cap.read() #Leer un frame
frame = cv2.resize(frame, (0,0), fx=0.9, fy=0.9)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #Convertirlo a
espacio de color HSV
#Los valores maximo y minimo de H,S y V se guardan en funcion
de la posicion de los sliders
hMin = cv2.getTrackbarPos(‘Hue Minimo’,’image’)
hMax = cv2.getTrackbarPos(‘Hue Maximo’,’image’)
sMin = cv2.getTrackbarPos(‘Saturation Minimo’,’image’)
sMax = cv2.getTrackbarPos(‘Saturation Maximo’,’image’)
vMin = cv2.getTrackbarPos(‘Value Minimo’,’image’)
vMax = cv2.getTrackbarPos(‘Value Maximo’,’image’)
#Se crea un array con las posiciones minimas y maximas
lower=np.array([hMin,sMin,vMin])
upper=np.array([hMax,sMax,vMax])
#Deteccion de colores
mask = cv2.inRange(hsv, lower, upper)
#Mostrar los resultados y salir
cv2.imshow(‘camara’,frame)
cv2.imshow(‘mask’,mask)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
Una vez compilado y asegurado el correcto funcionamiento dicho programa, se va un paso más allá, localizando
el centro y la posición del objeto localizado por la máscara. La metodología a seguir parte de una idea básica:
hallar el centro de la región diferenciada en la máscara, y a su vez localizar el píxel que corresponde para
determinar la posición del mismo.
Consecuentemente, ahora cobra sentido el programa realizado anteriormente para la determinación de los
valores de HSV, ya que como se muestra en las siguientes imágenes, una vez aplicado el filtro, es cuando se
realiza la detección de la distribución de píxeles, para así localizar su centro.
• Color verde:
Programación
56
Figura 7.8. Detección de la posición para el color verde.
• Color magenta:
Figura 7.9. Detección de la posición para el color magenta.
Como se ha remarcado anteriormente, todo el proceso se realiza en tiempo real, por lo que es posible modificar
la posición del objeto del color deseado, de tal manera que se irá recalculando en todo momento el centro del
objeto. Como ejemplo ilustrativo, se ha modificado la posición del rotulador para demostrar dicha premisa.
Figura 7.10. Detección de la posición para el color magenta en diferente disposiciñon.
De igual manera que el caso anterior, se muestra el programa utilizado para llevar a cabo el filtrado de las
imágenes, así como su posicionamiento:
import cv2
import numpy as np
#Iniciamos la camara
captura = cv2.VideoCapture(0)
while(1):
57 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
#Capturamos una imagen y la convertimos de RGB -> HSV
_, imagen = captura.read()
# Para reducir la resolucion y asi que la imagen vaya mas
rapido
imagen = cv2.resize(imagen, (0,0), fx=0.5, fy=0.5)
hsv = cv2.cvtColor(imagen, cv2.COLOR_BGR2HSV)
#Establecemos el rango de colores que vamos a detectar
#En este caso de verde oscuro a verde-azulado claro
verde_bajos = np.array([0,115,110], dtype=np.uint8)
verde_altos = np.array([52, 255, 255], dtype=np.uint8)
#Crear una mascara con solo los pixeles dentro del rango de
verdes
mask = cv2.inRange(hsv, verde_bajos, verde_altos)
#Encontrar el area de los objetos que detecta la camara
moments = cv2.moments(mask)
area = moments[’m00’]
#Descomentar para ver el area por pantalla
#print area
if(area > 2000):
#Buscamos el centro x, y del objeto
x = int(moments[’m10’]/moments[’m00’])
y = int(moments[’m01’]/moments[’m00’])
#Mostramos sus coordenadas por pantalla
#print “x = “, x
#print “y = “, y
#Dibujamos una marca en el centro del objeto
cv2.rectangle(imagen, (x-5, y-5), (x+5, y+5),(0,0,255),
2)
cv2.putText(imagen, “pos:”+ str(x)+”,”+str(y),
(x+10,y+10), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2)
#Mostramos la imagen original con la marca del centro y
#la mascara
cv2.imshow(‘mask’, mask)
cv2.imshow(‘Camara’, imagen)
#tecla = cv2.waitKey(5) & 0xFF
if cv2.waitKey(1) & 0xFF == ord(‘q’):
captura.release()
break
Programación
58
cv2.destroyAllWindows()
Definido el tratamiento de imágenes, el siguiente paso es combinar dicho proceso con el movimiento de los
servomotores. Aquí es donde se halla el primer problema en todo el planteamiento del proyecto, ya que resulta
complicada la captación de imagen en tiempo real a la vez que la realización el movimiento en los actuadores
para el control del plato. Igualmente, los tiempos de ejecución se disparan si se combinan ambos procedimientos.
Debido a lo anteriormente demostrado, se decide modificar el lenguaje de programación a C++, siendo un
lenguaje mucho más rápido que el anterior. C++ se trata de un lenguaje compilado, sin embargo; Python se
caracteriza por ser un lenguaje interpretado, lo que de antemano pronostica una mayor eficiencia en el lenguaje
C++. Aun así, se decide instaurar un programa, el cual para un mismo resultado final, se programe con los dos
lenguajes planteados.
La estructura a seguir por el programa es básica; en primer lugar se captura una imagen gracias a la cámara de
la Raspberry Pi, se le realiza un filtrado para pasar del modelo RGB al blanco y negro, y finalmente se le somete
a un filtro gaussiano.
• Python:
El programa es realizado en varias ocasiones y el tiempo de ejecución coincide en todas, 50 ms.
#Se importan librerias
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
from time import time
import cv2
#Inicializar camara
camera=PiCamera()
camera.resolution=(640,480)
camera.framerate=32
rawCapture = PiRGBArray(camera, size = 640,480)
#Se toma tiempo inicial
tiempo_inicial=time()
for frame in camera.capture_continuous(rawCaputre,
format=’bgr’, use_video_port=True):
image=frame.array #Se toma un frame de la camara
image=cv2.cvtColor(image,cv2.COLOR_RGB2GRAY) #Se pasa a
escala de grises
image=cv2.GaussianBlur(image,ksize=(9,9), sigmax=0) #Filtro
gausiano
tiempo_final=time() #Se toma tiempo final
tiempo ejecucion=tiempo_final – tiempo_inicial #Se calcula
tiempo total
print ‘El tiempo de ejecucion fue: ‘, tiempo_ejecucion #Se
muestra tiempo total
break
• C++:
Compilando el programa varias veces, se alcanza un tiempo de ejecución de 30 ms.
59 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
#include <stdio.h>
#include <time.h>
//Libreria camara
#include “RaspiCamCV.h”
//Librerias tratamiento imagen OpenCV
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/imgproc_c.h>
using namespace cv;
using namespace std;
//Resolucion de la foto
int width = 640;
int height = 480;
//Declaracion de estructura camara
RaspiCamCvCapture * camara;
//Variables para calcular el tiempo
long int start_time=0;
long int time_difference=0;
struct timespec gettime_now;
//Variables de tipo imagen
Mat imagen, imagen2;
//PROGRAMA PRINCIPAL
int main(int argc, char** argv){
//Parametros de configuracion de la camara
RASPIVID_CONFIG *
config=(RASPIVID_CONFIG*)malloc(sizeof(RASPIVID_CONFIG));
config->width=width;
config->height=height;
config->bitrate=0;
config->framerate=0;
config->monochrome=1;
//Configuracion de camara
camara = raspiCamCvCreateCameraCapture2(0,config);
//Se empieza a contar tiempo
clock_gettime(CLOCK_REALTIME,&gettime_now);
start_time = gettime_now.tv_nsec / 1000000; //Obtener tiempo en
microsegundos
//Capturar imagen en gris
imagen=cv::cvarrToMat(raspiCamCvQueryFrame(camara));
//Funcion para aplicar filtro gaussiano
GaussianBlur (imagen, imagen2, Size(9,9),2 ,2);
clock_gettime(CLOCK_REALTIME,&gettime_now);
time_difference = gettime_now.tv_nsec / 1000000 - start_time;
printf( “El tiempo de ejecucion fue: %li \n” ,
time_difference);
}
Finalmente, se halla una pequeña diferencia entre tiempos de ejecución entre los dos lenguajes. Es cierto que la
Programación
60
variación no es notablemente significativa, pero aunado con el hecho de la inalcanzable unión entre el
movimiento de los servomotores y la detección en tiempo real de la posición de la bola, se decide definitivamente
la programación en C++.
Consecuentemente, se inicia de nuevo el proceso de implementación de un programa para el procesado de
imágenes. Para ello, se consta de la librería anteriormente nombrada OpenCV, y además, tras una búsqueda por
las diversas opciones desarrolladas en el mercado, se localiza una librería que cumple indudablemente con las
prestaciones buscadas en el presente proyecto, se trata de la librería “Raspicam”, desarrollada en la Universidad
de Córdoba. Con la incorporación de ésta a los programas desarrollados, se consigue el control de la cámara en
el lenguaje C++.
“Raspicam” dispone de un conjunto de funciones que permiten operar con la cámara según se convenga, como
puede ser el encendido y apagado de la misma, la captura de imágenes o simplemente la implementación de
varios filtros para el correcto tratamiento de la imagen captada.
Para la consecución del programa, se realizan varias etapas en el proceso, ya que como es casos anteriores, es
muy importante el tiempo de ejecución del cada una de ellas:
• Configuración de la cámara.
Esta operación se realiza a través de la función Camera.set(). En dicho proceso se determina el tamaño de
la imagen capturada, considerando que cuanto más pequeña sea la misma, menos píxeles será necesario
analizar en un futuro para el proceso de control.
• Iniciación de la cámara.
Camera.open() es la función que desempeña el encendido de la cámara para que comience a capturar
imágenes. Su valor de retorno de trata de una variable booleana, siendo 1 en caso satisfactorio, y 0 en caso
contrario.
• Captación y guardado de frames.
El siguiente paso natural del programa es capturar y guardar una imagen. Para dicho proceso se hace uso de
la función Camera.grab() para almacenar una única imagen de todas las posibles detectadas por la cámara.
Consecutivamente se utiliza la función Camera.retrieve(image) para poder asignar a la variable image dicha
imagen guardada en el paso anterior.
• Aplicación de filtros: B&N y gaussiano.
Como se vio en el desarrollo de los programas desarrollados en el entorno Python, el tratamiento de
imágenes mediante máscaras es importantísimo para un posterior procesado de la imagen, y conllevando
con ello un adecuado control. Tal es así, que se exponen las funciones cvtColor y GaussianBlur() para la
aplicación de un filtro B&N y otro gaussiano respectivamente.
• Búsqueda de la bola.
61 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Una función muy útil para alcanzar el objetivo marcado al principio del proyecto, es la denominada
HoughCircles(). Ésta es la encargada de buscar circunferencia sobre una imagen pasada por parámetro,
almacenado los valores de las coordenadas X e Y del centro y el radio de la misma.
Para una determinación de dichos parámetros de manera más visual, se realiza el remarcado de la
circunferencia y su centro gracias a la función circle().
Finalmente, una vez realizados todos los pasos anteriores, habiéndose hallado satisfactoriamente la posición de
la pelota, se calcula el tiempo de ejecución de cada uno de ellos. Gracias a la función clock_gettime(), incluida
en la librería time.h, se determinan los tiempos empleados en la captura y tratamiento de la imagen guardada:
Tabla 3. Tiempos de ejecución para la librería “raspicam.h”.
A la vista de los resultados obtenidos, con los excesivamente elevados tiempos de procesamiento de la imagen,
resulta de vital importancia la búsqueda de un nuevo método de ejecución. El principal inconveniente de la
librería utilizada es causado por las funciones de tratamiento de imagen, las cuales ocupan casi las dos tercias
partes del tiempo empleado.
Consecutivamente, se prosigue en la búsqueda de una librería aún más rápida que la anterior, localizándose la
llamada “RaspiCamCV” desarrollada por Robidouille. Se trabaja de manera similar al caso anterior, iniciándose
con el encendido de la cámara.
Como factor característico, cabe destacar la posibilidad de la captura directa de la imagen en blanco y negro
gracias a la variable monochrome, eliminando así una etapa respecto al caso anterior. La cámara se inicia debido
a la función raspiCamCvCreateCameraCapture2().
Por otro lado, para ser capaces de capturar la imagen se hace uso de la función raspicamCVQueryFrame(),
obteniéndose la imagen en formato IplImage. Desgraciadamente, la librería OpenCV trabajo bajo el formato
Mat, por lo que es necesario transformar la imagen gracias a la función cv::cvarrToMat().
Similarmente al caso anterior, se determinan los tiempos de ejecución de cada una de las fases desarrolladas en
la captura y procesado de imágenes según diversos ejemplos encontrados:
Tiempo (ms)
Captura de la imagen 100
RGB --> B&N 10
B&N --> Gaussiano 17
Posición de la bola 34
TOTAL 161
Programación
62
Tabla 4. Tiempos de ejecución para la librería “RaspiCamCV.h”
Como conclusión y dados los resultados obtenidos, no cabe duda en utilizar la última librería explicada.
7.3 Evaluación del control del sistema
Una vez determinado todo el proceso de modelado computacional del sistema Ball and Plate, dada la captación
y el tratamiento de imágenes, se procede a la implementación del sistema de control en tiempo discreto expuesto
en la ecuación (5.31).
En primer lugar, es necesario la determinación del punto de referencia o consigna del sistema objeto de estudio.
De manera lógica, se toma el centro del plato para dicho propósito, ya que se buscará que la pelota se mantenga
siempre en dicho lugar.
Asimismo, para la definir el error cometido en la posición de la pelota respecto al centro del plato, se hace uso
de la función anteriormente descrita HoughCircles() que devuelve como variables las coordenadas x e y de la
posición de la pelota. El error viene determinado por la diferencia entre el valor de referencia y el valor medido
por dicha función:
Seguidamente, se aplica la ley de control del PID en modo discreto a partir de los errores calculados. Resaltar el
hecho que en las próximas demostraciones solo se tendrá en cuenta la coordenada x, ya que el procedimiento
para la variable y es exactamente igual.
Para realizar una estructura de control lo más limpia y legible posible, se decide desarrollar una función
denominada PIDX(float inputX) la cual recibe como parámetro el error medido según el punto de referencia, y
determina qué posición debe alcanzar el actuador que gobierna la coordenada x (servoX).
Consecuentemente al proceso detallado, el primer paso que llevar a cabo es el cálculo de los términos que
conforman el controlador según la ley de control (5.31).
La acción proporcional se halla como el producto entre el error medido inputX y la constante de proporcionalidad
PX:
A continuación, para la acción integral se realiza el sumatorio de la acción integral de la etapa previa y el error
cometido multiplicado por la constante de integración IX, así como por el tiempo de muestreo T, como se muestra
en la siguiente expresión:
En último lugar, se calcula el término correspondiente a la acción derivativa, cuantificado como la diferencia
entre el error medido y el error cometido en la etapa previa, multiplicado por la constante derivativa DX y
finalmente dividido entre el tiempo de muestreo T estipulado:
Tiempo (ms)
Captura de la imagen 2
Filtro Gaussiano 17
Posición de la bola 34
TOTAL 53
63 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Gracias al uso de bucles iterativos, se pueden determinar las variables necesarias de las etapas previas para
realizar los cálculos necesarios en la definición de cada término. Estos valores son los almacenados en sus
correspondientes variables:
Consecuentemente, para determinar la salida del controlador, es decir, el ángulo que debe ser enviado al
actuador, se realiza el sumatorio de los términos proporcional, integral y derivativo:
Paralelamente, se detecta que es posible dañar los servomotores si el valor de la salida excede un valor máximo
o mínimo, ya que podrían forzar un ángulo inalcanzable por los servomotores. Para solucionar dicho
inconveniente, se limita la salida según un rango de valores, sobrescribiendo sobre la variable si se produce el
caso:
Como conclusión, se retorna el ángulo que debe gobernar al actuador:
Cabe destacar, que el ángulo que se produce tras esta acción está referenciado según la posición inicial, por lo
que para realizar el correcto control de los actuadores se debe restar la acción de control calculada a la posición
de referencia inicial anguloX y anguloY.
7.4 Funcionamiento y control de los actuadores
El servomotor se trata de un motor eléctrico donde es posible controlar tanto la velocidad como el giro del motor.
Para nuestra aplicación, se fijará la velocidad de movimiento de los servos en todo momento y se tomará como
variable de control de salida el ángulo de dicho actuador.
El funcionamiento del servomotor se caracteriza por ser regido por un tren de pulsos, es decir, el ángulo de salida
depende únicamente de la duración del pulso que recibe como señal de entrada. Ciertamente, se sabe que cada
servomotor tiene sus propios valores de pulso máximo y mínimo, pero los usualmente usados son los expuestos
en el siguiente esquema de operación:
Programación
64
Figura 7.11. Funcionamiento de los servos utilizados
Fuente: http://www.areatecnologia.com/electricidad/servomotor.html
Para un pulso de 1 ms de duración, el servomotor se mantendrá en 0º, en cambio, para un pulso de 2 ms, cambiará
su posición hasta los 180º. Las posiciones intermedias se realizan mediante una extrapolación de esta relación,
como, por ejemplo, para un pulso de 1,25 ms el servomotor fijará su posición en 45º. Cabe destacar que es
necesario mandar continuamente el tren de pulsos con la longitud deseada, ya que una vez que deje de tomar
como señal de entrada dicho pulso, se volverá a la posición de reposo. Asimismo, si existiese una fuerza externa
que pretendiese modificar la posición de dicho servo, él mismo opondría resistencia al cambio gracias a la
continuada orden de estar en dicha posición.
Una vez explicado brevemente el funcionamiento de los actuadores, se requiere el análisis de su programación
con el microprocesador Raspberry Pi. Al igual que en casos anteriores, se realiza una extensa búsqueda en la
red para localizar la librería de generación de señales PWM más adecuada para las prestaciones del prototipo
desarrollado, hallando la denominada Pigpio.
La librería Pigpio aporta un sinfín de funciones capaces de configurar los pines GPIO para ser usados como una
salida de PWM. En primer lugar, se deben definir cuales pines desempeñarán dichas salidas PWM, que cotejando
el diagrama de los diversos pines del microcontrolador se determina que serán los pines GPIO4 y GPIO17.
Seguidamente, gracias a la función gpioInitialise() es posible inicializar los pines elegidos como pines de PWM.
Simplemente destacar el hecho que si se encontrase algún error, la función devuelve el valor -1.
Una vez inicializados los pines como pines PWM, se procede a la generación de la señal, gracias a la función
gpioServo(). Las señales PWM generadas se caracterizan por tener una frecuencia de 50 Hz, la cual es la misma
a la que trabajan los actuadores, suprimiendo el hecho de tener que cambiarla, consiguiendo el correcto
funcionamiento de los mismos. Para poder invocar a la función, es necesario pasar como parámetro el pin GPIO
donde se quiere generar la señal, servoX y servoY, y el tiempo del pulso en microsegundos, posx y posy
respectivamente.
Paralelamente, se debe tener en cuenta que el plato tiene que estar en posición inicial, por lo que dicho de otra
manera, los ángulos medidos con referencia al sistema de coordenadas considerado, eje x e y, deben ser nulos.
Dichos valores se toman empíricamente resultando ser los siguientes:
Una vez desarrollada la estructura principal del programa que gobierna el movimiento de los actuadores, hay
65 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
que hacer hincapié en un hecho que se descubre en la implementación del mismo. Cuando se realizan variaciones
pequeñas de los ángulos de entrada, aproximadamente menores de 15º, los servomotores no son capaces de
asumirlas debido a que la librería Pigpio genera las señales PWM por programa.
La Raspberry Pi realiza la normal compilación y ejecución del programa línea por línea, generando la señal
PWM. Dicha metodología no incurriría en problema si no se estuviese tratando con un sistema multitasking, ya
que se producen interrupciones y otras operaciones que es preciso atender, lo que provoca que los tiempos de la
señal PWM puedan verse afectados y así incurrir en un leve ruido.
Consiguientemente, se busca una solución para poder imputar todo el rango de ángulos deseados como entradas
al servomotor. Se determina que para que el actuador sea capaz de lograr alcanzar el ángulo requerido,
inicialmente se le enviará un ángulo mayor del final, en el caso del programa implementado sería ampliar el
pulso unos 30 µs, para posteriormente poder rectificar y enviar de nuevo el ángulo deseado.
Finalmente, cabe puntualizar el hecho de la incorporación de la función time_sleep(), que hace un pausado en la
ejecución del programa. Dicha pausa permite al actuador alcanzar la posición demandada desde cualquier punto
en que se encuentre. Asimismo, posteriormente se demuestra que el tiempo en exceso que se le incorpora al
programa, es totalmente asumible por el control de sistema.
Programación
66
8 PRUEBAS Y RESULTADOS
inalmente para la comprobación de todos los trabajos llevados a cabo a lo largo del proyecto, se realizan
diversas pruebas en cuando a la programación realizada, así como la aplicación de la teoría de control para
el diseño de los controladores mostrados en el capítulo 5 del presente documento.
Cabe destacar el inconveniente de la implementación del programa desarrollado para su prueba en el prototipo
real, debido a la imposibilidad de instalación de una librería necesaria para todo el proceso. Es por lo cual, que
se decide realizar un estudio teórico de la respuesta del sistema ante escalón unitario una vez controlado por
diferentes métodos que ofrece la herramienta Matlab.
8.1 Pruebas realizadas con Raspberry Pi 3
En el presente proyecto se han llevado a cabo diversos lenguajes de programación para la implementación de
los programas desarrollados a lo largo de todo el desarrollo, resultando finalmente el siguiente programa para
concluir el perfecto desarrollo de todos los trabajos desarrollados:
// -I/home/pi/git/robidouille/raspicam_cv
// -L/home/pi/git/robidouille/raspicam_cv -lraspicamcv
// -L/home/pi/git/raspberrypi/userland/build/lib -lmmal_core -lmmal -l
mmal_util -lvcos -lbcm_host
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <vector>
#include <unistd.h>
#include <time.h>
#include <fstream>
//Libreria camara
#include “RaspiCamCV.h”
//Librerias tratamiento imagen OpenCV
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/imgproc_c.h>
//Librerias servomotor
#include <pigpio.h>
F
Pruebas y Resultados
68
using namespace cv;
using namespace std;
//Resolucion de la foto
int width=480;
int height=360;
//Declaracion de estructura camara
RaspiCamCvCapture*camara;
int run=1; //Variable para bucle infinito
int ciclo=0; //Contador de ciclos dentro del reacuadro consigna
//Variables para calcular el tiempo
long int start_time=0;
long int time_difference=0;
struct timespec gettime_now;
//Numero total de ciculos en imagen
int numcirculos=0;
//Pines de los servomotores
int servoX=17, servoY=4;
int controlX=0, controlY=0;
//Error en X y en Y
float eX=0.0, eY=0.0;
//Posicion de la pelota
float medida_1X=0, medida_2X=0, medida_1Y=0,medida_2Y=0;
//Varables PID en X
float PX=0.45, IX=0.2, DX=0.47, T=0.1, maxOutputX=100.0, minOutputX=-100.0;
float proporcionalX=0, integralX=0, derivativoX=0, lastInputX=0,
integralSumX=0, salidaX=0;
//Varables PID en Y
float PY=0.47, IY=0.2, DY=0.5, maxOutputY=100.0, minOutputY=-100.0;
float proporcionalY=0, integralY=0, derivativoY=0, lastInputY=0,
integralSumY=0, salidaY=0;
//Posicion consigna
const float consignaX=220, consignaY=180;
//Angulos de posicion 0
const int anguloX=1755;
const int anguloY=1760;
//Funcion para detener el bucle principal del programa al pulsar Ctrl+C
void stop(int signum){
run=0;
}
//Cabecera funciones
void iniciar_camara(); //Funciones para iniciar la camara
void posicion_bola(); //Funcion para obtener posicion pelota
bool iniciar_servos(); //Funcion para iniciar servomotores
void posicion_servos(int posx, int posy); //Funcion para colocar los servos
en posicion deseada
69 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
void desconectar(); //Funcion para desconectar camara y servomotores
float PIDX(float inputX); //Calculo control PID de la posicion X
float PIDY(float inputY); //Calculo control PID de la posicion y
//Variables de tipo imagen
Mat imagen, imagen2;
//PROGRAMA PRINCIPAL
int main(int argc, char** argv){
iniciar_camara(); //LLamada a funcion de inicializar camara
iniciar_servos(); //Llamada a funcion de inicializar motores
while(run){
//Se empieza a contar tiempo
clock_gettime(CLOCK_REALTIME,&gettime_now);
start_time=gettime_now.tv_nsec / 1000000; //Obtener tiempo en
microsegundos
//Funcion para tomar una imagen y obtener coordenadas X e Y de la
bola
posicion_bola();
//Caso 1: Hay pelota en el plato
if (numcirculos>0){
//Calculo del error
eX=consignaX-medida_2X;
eY=consignaY-medida_2Y;
cout<<”Error en x: “ <<” || Error en y : “<<eY<<endl;
//Control PID
controlX=anguloX-PIDX(eX);
controlY=anguloY+PIDY(eY);
//Si la pelota esta situada dentro del recuadro consigna durante
25 ciclos seguidos, se asume que la pelota esta
// quieta y se coloca el plato en posicion 0
if((eX<15)&&(eX>-15)&&(eY<15)&&(eY>-15)){
ciclo=ciclo+1; //El plato esta dentro del recuadro y se
cuenta 1 ciclo
if (ciclo>25) ciclo=25;
}else ciclo=0; //Si se sale del recuadro se pone el contador a 0
if(ciclo==24){
Pruebas y Resultados
70
posicion_servos(anguloX,anguloY);
}
//Si no se han contado 25 ciclos seguidos dentro del recuadro, se
aplica control
if(ciclo<24){
//Se aplica la posicion calculada por los servomotores
posicion_servos(controlX,controlY);
}
}
//Caso 2: No hay pelota
if(numcirculos==0){
//Plato con angulos 0
posicion_servos(anguloX,anguloY);
integralSumX=0;
integralY=0;
cout<<”****NO SE DETECTA PELOTA****”<<endl;
}
//Obtener tiempo al finalizar todas las operaciones en milisegundos
clock_gettime(CLOCK_REALTIME,&gettime_now);
//Se calcula el tiempo que ha pasado desde que se empieza a contar
time_difference=gettime_now.tv_nsec/1000000-start_time;
cout<<”Tiempo: “<<time_difference<<” ms”<<endl;
}//Fin del bucle
desconectar(); //Funcion para desconectar motores
}// Fin del main
void iniciar_camara(){
//Parametros de configuracion de la camara
RASPIVID_CONFIG*config=(RASPIVID_CONFIG*)malloc(sizeof(RASPIVID_CONFIG))
;
config->width=width;
config->height=height;
config->bitrate=0;
config->framerate=0;
config->monochrome=1;
//Configuracion de camara
camara = raspiCamCvCreateCameraCapture2(0,config);
}
void posicion_bola(){
//Capturar imagen en gris
imagen=cv::cvarrToMat(raspiCamCvQueryFrame(camara));
//Funcion para aplicar filtro Gaussiano
GaussianBlur(imagen,imagen2,Size(9,9),2,2);
71 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
//Parametro donde se guarda las coordenadas del centro y el radio de la
pelota
vector<Vec3f>circles;
//Funcion para encontrar la pelota
HoughCircles(imagen2, circles, CV_HOUGH_GRADIENT, 2, 100, 100, 75, 0,
40);
//Número de circulos encontrados en la imagen, solo deberia encontrar uno
numcirculos=circles.size();
//Para cada circulo que encuentra en la imagen
for(size_t i=0; i<circles.size();i++){
//Obtener coordenadas del centro del circulo y guardarlas en la
variable circles
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
//Obtener posicion del centro de la pelota
medida_2X=circles[i][0];
medida_2Y=circles[i][1];
cout<<”Posicion pelota [x,y]:
[”<<circles[i][0]<<”,”<<circles[i][1]<<”]”<<endl;
}
}
//Funcion para inicializar los servomotores
bool iniciar_servos(){
//Preparacion de los pines GPIO
if (gpioInitialise()<0) return -1;
//Funcion que permite terminar el bucle principal cuando se pulsa Ctrl+C
gpioSetSignalFunc(SIGINT, stop);
printf(“Enviando señal PWM al puerto GPIO”);
printf(“\nPulsar control+C para detener.\n”);
//Servomotores en posicion inicial
posicion_servos(anguloX,anguloY);
return 0;
}
//Funcion para colocar los motores en la posicion deseada
void posicion_servos(int posx, int posy){
gpioServo(servoX, posx+30);
gpioServo(servoY, posy+30);
time_sleep(0.025);
gpioServo(servoX,posx);
gpioServo(servoY,posy);
}
//Funcion para desconectar camara y servomotores
Pruebas y Resultados
72
void desconectar(){
printf(“\nDesconectando\n”);
//Se desconectan los servomotores
gpioServo(servoX,0);
gpioServo(servoY,0);
//Sedesconectan los pines GPIO
gpioTerminate();
}
//Control PID en variable X
float PIDX(float inputX){
proporcionalX=PX*inputX; //Calculo parte proporcional
integralX=integralSumX+IX*inputX*T; //Calculo parte integral
derivativoX=DX*(inputX-lastInputX)/T; //Calculo parte derivativa
integralSumX=integralX; //Se acumula valor integral
lastInputX=inputX; //Se guarda el valor del error anterior
salidaX=proporcionalX+integralX+derivativoX; //Suma de las tres partes
if(salidaX>maxOutputX) salidaX=maxOutputX; //Limite maximo
if(salidaX<minOutputX) salidaX=minOutputX; //Limite minimo
return(salidaX); //Se devuelve valor de control
}
//Control PID en variable Y
float PIDY(float inputY){
proporcionalY=PY*inputY; //Calculo parte proporcional
integralY=integralSumY+IY*inputY*T; //Calculo parte integral
derivativoY=DY*(inputY-lastInputY)/T; //Calculo parte derivativa
integralSumY=integralY; //Se acumula valor integral
lastInputY=inputY; //Se guarda el valor del error anterior
salidaY=proporcionalY+integralY+derivativoY; //Suma de las tres partes
if(salidaY>maxOutputY) salidaY=maxOutputY; //Limite maximo
if(salidaY<minOutputY) salidaY=minOutputY; //Limite minimo
return(salidaY); //Se devuelve valor de control
}
Una vez diseñada la estructura del programa, indicando parámetros de las variables del controlador
aleatoriamente, ya que se pretenden hallar experimentalmente, se hallan diversos problemas con la instalación
de la librería de control “RaspiCamVC.h”, siendo posible su instalación y por lo tanto el correcto desarrollo del
programa, siendo imposible su correcta verificación de funcionamiento. Para suplir los problemas surgidos en
la misma, se pretende que al menos se pueda calcular la ley de control teóricamente, por lo que se procede a
73 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
realizar el trabajo de los próximos capítulos.
8.2 Diseño de controladores mediante Matlab
El presente apartado se comienza retomando la expresión teórica correspondiente al controlador PID, cuyas
variables se ven representadas en el diagrama de bloques expuesto a continuación:
(8.1)
De dicha expresión resulta la señal de control, viniendo determinada por el sumatorio de tres términos:
- El término proporcional P, siendo proporcional al error cometido y relacionada con la ganancia proporcional
K.
- El término integral I, proporcional a la integral del error y relacionado con el tiempo de integración 𝑇𝑖.
- El término derivativo D, proporcional a la derivada del error y relacionada con el tiempo de derivación 𝑇𝑑.
Figura 8.1. Lazo de control realimentado.
Asimismo, para poder demostrar los efectos de las acciones que dota el controlador al sistema se representan las
siguientes gráficas, donde se ha considerado la respuesta temporal 𝑦(𝑡) de un sistema de tercer orden para una
variación en escalón unitario de la variable de referencia o punto de referencia.
Figura 8.2. Simulación de un sistema a lazo cerrado con control proporcional.
Si se analiza la respuesta del sistema ante la acción únicamente proporcional, se ve que el aumento de la
sobreoscilación del sistema se encuentra directamente relacionado con el aumento de la constante proporcional
K, es decir, al aumentar K el sistema se hace más oscilatorio.
Pruebas y Resultados
74
Figura 8.3. Simulación de un sistema a lazo cerrado con control prporcional integrador (PI).
Por otro lado, al incluir la acción del término integral, se denota que el sistema tiene tendencia a la oscilación de
modo que el tiempo de integración se va reduciendo. Igualmente, a medida que dicho tiempo disminuye se
incrementa el efecto de dicha componente, desapareciendo progresivamente el error en régimen permanente.
Figura 8.4. Simulación de un sistema a lazo cerrado con controlador PID.
Finalmente, en el esquema anterior se muestra el efecto derivador. Cabe destacar que en el ejemplo observado,
tras la elección de los parámetros K y 𝑇𝑖 hacen del sistema posea una sobreoscilación cuando se analiza en lazo
cerrado. Por otro lado, al añadir la acción derivativa, se ratifica que a medida que crece el término derivativo 𝑇𝑑,
aumenta el amortiguamiento, teniendo en cuenta que si el valor del mismo se ve excedido, el amortiguamiento
vuelve a decrecer.
Seguidamente, si se considera que la acción derivadora es posible interpretarse como una predicción basada en
una extrapolación lineal durante el tiempo 𝑇𝑑, como se ha puntualizado previamente, la predicción resulta
inservible si dicho tiempo derivativo se aumente excesivamente respecto del período de oscilación no
amortiguado. A continuación, se muestra la dinámica del sistema relacionada con el 𝑇𝑑 .
Figura 8.5. Comparación del efecto predictivo de la acción derivadora y su relación con la dinámica del sistema.
Consiguientemente, dada la casuística de la imposible instalación de las librerías adecuadas para el correcto
75 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
funcionamiento del sistema Ball and Plate, se opta por desarrollar los controladores de manera teórica gracias a
la herramienta de Matlab para el estudio y análisis de sistemas lineales según el lugar de las raíces SISOTOOL().
Partiendo de la función de transferencia (5.23) calculada en el capítulo 5 del presente proyecto, se puede empezar
a trabajar la respuesta del sistema ante un escalón unitario, para así poder determinar la estabilidad del mismo.
Asimismo, se toman como especificaciones del sistema las siguientes:
𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑒𝑠𝑡𝑎𝑏𝑙𝑒𝑐𝑖𝑚𝑖𝑒𝑛𝑡𝑜 → 𝑡𝑠 = 0.7 𝑠 𝑆𝑜𝑏𝑟𝑒𝑜𝑠𝑐𝑖𝑙𝑎𝑚𝑖𝑒𝑛𝑡𝑜 → 𝑆𝑂(%) ≤ 31%
(8.2)
La morfología de dicha función es la mostrada en la siguiente imagen, representando el diagrama de bloques de
la planta a controlar:
Figura 8.6. Ventana de ejecución sisotool().
Analizando las diversas posibilidades que ofrece la citada función, se decide utilizar el subprograma “Automated
Tuning”, permitiendo la creación de diversos controladores según el sistema implementado.
De este modo, se entiende como ajuste automático de parámetros un método que posibilita el ajuste de las
variables de un controlador de forma automática de tal manera que desee el usuario. Cabe destacar entonces la
gran diferencia entre las técnicas adaptativas, ya que gracias a las mismas se somete a las variables a una
modificación permanente para adecuarlos a las variaciones del proceso controlado.
Pruebas y Resultados
76
Figura 8.7. Elección del método de ajuste automático.
La ventana de utilización de dicha función es la mostrada en la imagen anterior. Como se aprecia, permite la
elección de diversas metodologías de control, como puede ser la optimización de los controladores diseñados
manualmente, indicando las especificaciones deseadas, hasta por ejemplo un controlador LQG. En el presente
proyecto se hace uso de la opción “PID Tuning” que da la opción de elección entre el simple controlador
proporcional P, hasta el controlador PID con filtro derivativo.
77 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 8.8. Elección del tipo de controlador.
El siguiente paso una vez determinado el método elegido, es seleccionar la fórmula a utilizar el “autotuning” del
controlador, siendo los llevados a cabo en el presente proyecto los citados a continuación:
- Approximate MIGO frequency response: calcula los parámetros del controlador en bucle cerrado, dominio
de la frecuencia y utilizando la optimización de ganancia integral restringida en M de bucle cerrado (“M-
constrained integral gain optimization”).
- Approximate MIGO step response: calcula los parámetros del controlador usando la optimización de
ganancia integral restringida de M de bucle abierto, dominio de tiempo.
- Ziegler-Nichols frequency response: calcula los parámetros del controlador desde una tabla de búsqueda de
Ziegler-Nichols, en función de la ganancia final y la frecuencia del sistema.
Pruebas y Resultados
78
Figura 8.9. Selección del tipo estimación deseada.
Cabe destacar que la representación del controlador se puede determinar según los siguientes criterios elegidos:
Figura 8.10. Preferencias formato controlador.
En los siguientes capítulos se muestran los resultados de cada uno de los métodos utilizados descritos
anteriormente en la función SISOTOOL() de Matlab.
8.2.1 Método Mejorado de Ajuste por Respuesta al Escalón (Approximate MIGO step response)
Como el propio nombre del mismo controlador describe, el procedimiento llevado a cabo por el mismo define
mediante tres parámetros distintivos la respuesta ante escalón del proceso. Haciendo uso de diversas
consideraciones de robustez, se considera recomendable utilizar dicho método de control para sistemas
monótonos, cuya respuesta característica ante escalón se ve representada por las diferentes salidas mostradas en
79 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
la siguiente imagen:
Figura 8.11. Respuestas al escalón de procesos esencialmente monótonos.
Consecuentemente, resulta evidente la necesidad de la descripción de lo que resulta ser el concepto de
monotonicidad, para determinar claramente si un sistema posee o no dicha propiedad ante la respuesta al escalón.
Asimismo, sea 𝑔(𝑡) la respuesta impulsiva de un proceso estable, el término monotonicidad 𝑚 se describe
como:
(8.3)
Describiendo brevemente las cualidades del parámetro, el mismo puede tomar valores entre 0 y 1, es decir, si
𝑚 = 1 la respuesta ante escalón resulta ser estrictamente monótona. Por lo tanto, se especifica el valor 𝑚 = 0.8
como valor a partir del cual se trata de un proceso estrictamente monótono.
Asimismo, otro parámetro a tener en cuenta es el módulo máximo de la función de sensibilidad 𝑀𝑠. Gracias al
mismo se realiza una restricción de robustez, por la cual está sujeta la maximización de la ganancia de integración
del controlador 𝑃𝐼, objetivo principal del método descrito. Por consiguiente, se determina que un rango aceptable
tal que 𝑀𝑠 ∈ [1.2 , 2.0], determinando una dependencia indirectamente proporcional, es decir, para menores
valores se produce una mejora en la robustez, penalizada por una disminución de la tasa de rechazo de
perturbaciones de carga.
Por otro lado, asumiendo varias hipótesis para sistemas esencialmente monótonos dados por un conjunto de
funciones de transferencia analizando su respuesta ante escalón, se rigieron unas pautas de ajustes para
controladores 𝑃𝐼 nombradas como MIGO (Approximated MS-constrained Integral Gain Optimization). Como
se pronosticaba inicialmente, dichas reglas o pautas vienen determinadas por tres parámetros obtenidos gracias
a la respuesta al escalón:
• KP: ganancia estática,
• T: constante de tiempo aparente.
Pruebas y Resultados
80
• L: tiempo muerto o retardo aparente
Representando gráficamente dichos parámetros determinantes, se obtiene el siguiente esquema del sistema
analizado:
Figura 8.12. Respuesta al escalón unitario de un proceso y procesamiento empleado para determinar los parámetros
𝐾𝑝, 𝑇, 𝐿, 𝐾𝑣.
Consecuentemente, una vez explicado el método teórico utilizado en el diseño de dichos controladores, se
procede a la ejecución del comando de Matlab, aportando la siguiente función de transferencia:
Figura 8.13. Controlador hallado (MIGO step response).
Igualmente, expresando el controlador de otra manera diferente como se especifica en la Figura 8.10.
Preferencias formato controlador. se obtiene:
Figura 8.14. Controlador hallado expresado según sus polos y ceros (MIGO step response).
Se puede observar que el controlador definido por la función posee dos polos reales y un integrador,
caracterizado por una ganancia negativa, compensado la propia ganancia negativa del sistema sin controlador.
Asimismo, se representa el lugar de las raíces del sistema, así como su Bode, con la ganancia y la fase
correspondientes:
81 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 8.15. Diagrama del lugar de las raíces sin cumplir especificaciones (MIGO step response).
Seguidamente, se representa la respuesta ante escalón del sistema controlado, notándose una ligera
sobreoscilación al principio de la respuesta:
Figura 8.16. Respuesta ante escalón sin cumplir especificaciones (MIGO step response).
De manera más específica, se muestran los valores del sistema correspondientes al tiempo de subida, la
sobreoscilación y el tiempo de establecimiento. Comparándolos con los valores inicialmente requeridos, se
detecta unos tiempos excesivamente altos para las prestaciones que se buscan en el sistema, siendo necesario
que responda rápidamente ante cualquier perturbación surgida.
Pruebas y Resultados
82
Figura 8.17. Valor de las especificaciones de la respuesta ante escalón (MIGO step response).
Ajustando la ganancia del controlador en el lugar de las raíces para llegar a un sistema con las especificaciones
marcadas al principio del presente capítulo. Para el ajuste de dicha ganancia se hace uso de gráfica de la respuesta
antes escalón del sistema, donde modificando la ganancia en el lugar de las raíces se va modificando la respuesta
de dicho sistema hasta llegar a las especificaciones deseadas:
Figura 8.18. Respuesta ante escalón cumpliendo especificaciones (MIGO step response).
Mostrando el valor de dichas especificaciones, se obtiene:
83 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 8.19. Valor de las especificaciones de la respuesta ante escalón (MIGO step response).
Paralelamente, una vez habiendo realizado las modificaciones en la ganancia del sistema en el lugar de las raíces,
queda de la siguiente manera:
Figura 8.20. Diagrama del lugar de las raíces cumpliendo especificaciones (MIGO step response).
Concluyentemente, el controlador hallado muestra la siguiente estructura, aportando un tiempo de
establecimiento de 0,7 segundo y una sobreoscilación menor del 31%:
Figura 8.21. Valor del controlador con reajuste de la ganancia (MIGO step response).
8.2.2 Método Mejorado de Ajuste por Respuesta frecuencial (Approximate MIGO frequency response)
De manera similar al caso anterior, la simulación calcula los parámetros del controlador en bucle cerrado, pero
en este caso en el domino de la frecuencia y utilizando la optimización de ganancia integral restringida en M de
bucle cerrado (“M-constrained integral gain optimization”).
Si se realiza el cálculo del controlador se llega a la siguiente expresión, obteniendo un integrador y dos polos en
Pruebas y Resultados
84
el controlador, así como lógicamente una constante proporcional negativa:
Figura 8.22. Controlador hallado (MIGO frequency response).
O lo que expresado de otra manera:
Figura 8.23. Controlador hallado expresado según sus polos y ceros (MIGO frequency response).
Como se observa, tanto en la expresión del controlador, como en la siguiente representación del lugar de las
raíces, el controlador posee un polo doble y un integrador, repitiéndose el caso de una ganancia negativa:
Figura 8.24. Diagrama del lugar de las raíces si cumplir especificaciones (MIGO frequency response).
Consiguientemente, se analiza la respuesta ante escalón del sistema, mostrándose un sistema oscilatorio con una
respuesta la cual posee una excesiva sobreoscilación, así como unos valores elevados de tiempo de
establecimiento para los requisitos buscados inicialmente para el sistema, tal y como se aprecia en la siguiente
simulación:
85 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 8.25. Respuesta ante escalón sin cumplir especificaciones (MIGO frequency response).
Concretamente, resaltando los valores de las especificaciones buscadas del sistema:
Figura 8.26. Valor de las especificaciones de la respuesta ante escalón (MIGO frequency response).
Tal es así, que se cree en la necesidad de rediseñar el controlador para poder cumplir al menos la especificación
de tiempo de establecimiento, teniendo así un sistema con una respuesta más rápida ante escalón. Similarmente
al caso previo, se hace uso de la respuesta antes escalón y el lugar de las raíces para ir modificando la ganancia
del controlador, obteniendo la respuesta deseada.
Una vez realizado el ajuste necesario, se obtiene la siguiente respuesta frente a escalón:
Pruebas y Resultados
86
Figura 8.27. Respuesta ante escalón cumpliendo especificaciones (MIGO frequency response).
Asimismo, si se exponen los valores de las especificaciones alcanzadas, se detecta una sobreoscilación del 7.15%
y un tiempo de establecimiento de 0,7 segundos:
Figura 8.28. Valor de las especificaciones de la respuesta ante escalón (MIGO frequency response).
Igualmente, el lugar de las raíces del sistema finalmente controlado queda la siguiente forma:
87 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 8.29. Diagrama del lugar de las raíces cumpliendo especificaciones (MIGO frequency response).
Finalmente, se ha obtenido el siguiente controlador, aumentando la ganancia del mismo significativamente para
una respuesta antes escalón mucho más rápida:
Figura 8.30. Valor del controlador con reajuste de la ganancia (MIGO frequency response).
8.2.3 Método de Ziegler-Nichols en base a la Respuesta en Frecuencia
Por último, pero no por ello menos importante, se expone un método basado en una básica caracterización de la
respuesta en frecuencia del sistema controlado, el método desarrollado por Ziegler y Nichols. El diseño del
controlador se caracteriza por localizar un solo punto del lugar de Nyquist del proceso, siendo éste el punto
donde 𝑃(𝑗𝜔) corta por primera vez al eje real negativo, correspondiente a la frecuencia 𝜔180.
Los valores de los parámetros del citado punto es posible determinarlos experimentalmente procediendo de la
siguiente manera: se diseña y conecta al sistema un controlador puramente proporcional cerrando el lazo del
proceso y aumentando de manera gradual la ganancia del controlador hasta que el sistema empieza a oscilar. Es
así, como se halla la ganancia 𝐾0, siendo el periodo de oscilación 𝑇0.
Figura 8.31. Caracterización de la respuesta en frecuencia según Ziegler-Nichols.
Asimismo, los parámetros sugeridos por el método de Ziegler y Nichols que determinan al controlador son los
Pruebas y Resultados
88
expuestos en la siguiente tabla, donde además se muestra un valor orientativo del periodo 𝑇𝑝 del modo dominante
de la respuesta a lazo cerrado.
Tabla 5. Parámetros de controladores según Ziegler-Nichols en base a la respuesta en frecuencia.
Seguidamente, una vez determinado el método teórico, se procede a realizar la simulación gracias a la
herramienta sisotool(), determinando un controlador con ganancia negativa, un polo real doble y un integrador,
como se muestra a continuación:
Figura 8.32. Controlador hallado (Método de Ziegler-Nichols).
Representando el sistema con la incorporación del controlador en el lugar de las raíces y su bode
correspondiente:
Figura 8.33. Diagrama del lugar de las raíces si cumplir especificaciones (Método de Ziegler-Nichols).
Consiguientemente, como se ha venido procediendo, se analiza la respuesta ante un escalón unitario del sistema
controlado. Como se observa, se obtiene un sistema oscilatorio no encajando en las especificaciones deseadas:
89 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 8.34. Respuesta ante escalón sin cumplir especificaciones (Método de Ziegler-Nichols).
Exponiendo los valores de dichos parámetros característicos:
Figura 8.35. Valor de las especificaciones de la respuesta ante escalón (Método de Ziegler-Nichols).
Finalmente, actuando de la misma manera que en casos previos, se va incrementando suavemente el valor de la
ganancia en el lugar de las raíces hasta encontrar el valor de la que más se ajusta a las especificaciones deseadas:
Pruebas y Resultados
90
Figura 8.36. Diagrama del lugar de las raíces cumpliendo especificaciones (Método de Ziegler-Nichols).
Consecuentemente, el sistema finalmente controlado con la ganancia ajustada muestra la siguiente respuesta
ante un escalón unitario:
Figura 8.37. Respuesta ante escalón cumpliendo especificaciones (Método de Ziegler-Nichols).
Determinando y detallando las diferentes especificaciones del sistema se denotan en la siguiente gráfica del
sistema controlado:
91 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
Figura 8.38. Valor de las especificaciones de la respuesta ante escalón (Método de Ziegler-Nichols).
Finalmente, el controlador elegido se muestra a continuación, habiéndose incrementado su ganancia para poder
apaliar de dicho modo el grado de sobreoscilamiento del sistema controlado inicialmente en lazo cerrado:
Figura 8.39. Valor del controlador con reajuste de la ganancia (Método de Ziegler-Nichols).
Pruebas y Resultados
92
9 CONCLUSIONES
omo conclusión para el presente proyecto, se puede concluir que no se han alcanzado los objetivos
estipulados al inicio del presente proyecto en cuando al sistema de control establecido, ya que no se ha
podido llevar a cabo la implementación de los programas desarrollados para la correcta utilización de la
cámara del microprocesador Raspberry Pi.
Por otro lado, y desde un punto de vista más optimista, se ha desarrollado completamente el prototipo físico de
la plataforma, conservando como premisa principal el bajo costo de todos los elementos utilizados para la
correcta consecución del prototipo final.
Figura 9.1. Estructura final del sistema Ball and Plate.
Por otro lado, es usual encontrar un ruido característico en las señales PWM de los servomotores, hecho por el
cual se debe incurrir en un tiempo de espera de 25 milisegundos que podría penalizar la rapidez del sistema. Para
ello, se ha investigado sobre diferentes soluciones ofertadas actualmente y se ha llegado a la conclusión que la
medida más adecuada para el caso que nos compete sería incorporar al sistema una extensión de la Raspberry
Pi denominada “16-Channel PWM Servo Hat”. Gracias a dicha extensión las señales se generan por hardware,
reduciendo notablemente el ruido que conlleva una señal generada por la propia Raspberry Pi. Por lo tanto, se
podría eliminar el tiempo de pausa implementado en el programa.
A nivel de programación, es evidente que se podrían realizar mejoras para optimizar el programa, siendo la
principal de ellas la elección de otra librería para el uso de la cámara. Una de ella podría ser la extendida OpenCV,
diseñada especialmente para la obtención y el tratamiento de imágenes; sin embargo, hay que tener en cuenta
que debido a la gran cantidad de funciones que porta, se podría incurrir en tiempo de muestreo excesivamente
elevados, por lo que la mejor opción sería la generación de una propia librería a partir de las funciones deseadas
de la misma.
C
Conclusiones
94
Finalmente, como un avance más allá del presente proyecto, se podría crear una interfaz gráfica en la cual el
usuario pudiera seguir en tiempo real el movimiento de la pelota sobre el plato. Hacer hincapié que dicho hecho
aumentaría el tiempo de ejecución del programa, pudiendo poner en peligro la correcta consecución del propio
programa.
REFERENCIAS
[ 1 ] Quanser – Real time control experiments for education and research.
Disponible en:
http://www.quanser.com. [Último acceso junio 2018].
[ 2 ] Feedback Instruments.
Disponible en:
http://www.feed-backinstruments.com. [Último acceso junio 2018].
[ 3 ] Quanser – Ball and Beam.
Disponible en:
http://www.quanser.com/Products/ball_beam. [Último acceso junio 2018].
[ 4 ] Quanser – Linear Servo Base Unit with Inverted Pendulum.
Disponible en:
http://www.quanser.com/Products/linear_servo_IP02. [Último acceso junio 2018].
[ 5 ] Quanser – 2 DOF Ball and Plate.
Disponible en:
http://www.quanser.com/Products/2dof_ball_balancer [Último acceso junio 2018].
[ 6 ] Feedback Instruments – Digital Pendulum.
Disponible en:
http://www.feedback-instruments.com/products/education/control_instrumentation/digital_pendulum. [Último
acceso junio 2018].
[ 7 ] Feedback Instruments – Ball & Plate Control System.
Disponible en:
http://www.feedbackinstruments.com/products/education/control_instrumentation/ball_plate_control_system
[Último acceso junio 2018].
[ 8 ] DávidH344, proyecto “Ball and Plate Arduino PID control” desarrollado en instructables.
Disponible en:
http:// http://www.instructables.com/id/Ball-and-Plate-Arduino-PID-Control/. [Último acceso junio 2018].
[ 9 ] Análisis y síntesis estructural. Conceptos Generales, Ingeniería Mecánica Aplicada y Computacional
(IMAC).
Disponible en:
http://www.imac.unavarra.es/web_imac/pages/docencia/asignaturas/tm/pdfdoc_th/apuntes/apuntes_tema2.pdf.
[Último acceso junio 2018].
[ 10 ] Vivas Venegas, Carlos. Geometría y Cinemática: Control y Programación de Robots. Escuela Superior de
Referencias
96
Ingenieros de Sevilla.
Disponible en:
http://www.esi2.us.es/~vivas/ayr2iaei/CIN_ROB.pdf [Último acceso junio 2018].
[ 11 ] Lucas Pastor Duran y Hector Rubio Gracia. Diseño e implementación de un sistema de levitación
magnética. Trabajo de final de grado, UPC junio 2015.
Disponible en:
http://docplayer.es/58494819-Indice-memoria-capitulo-1-introduccion-5-capitulo-2-ingenieria-de-la-
concepcion-capitulo-3-ingenieria-del-desarrollo.html [Último acceso junio 2018].
[ 12 ] RS-Online.
Disponible en:
http://es.rs-online.com/web/ [Último acceso junio 2018].
[ 13 ] Arduino.
Disponible en:
http://www.arduino.cc [Último acceso junio 2018].
[ 14 ] Raspberry Pi.
Disponible en:
https://www.raspberrypi.org/ [Último acceso junio 2018].
[ 15 ] Ronald Roa, Diseño de fuentes conmutadas.
Disponible en:
http://disenodefuentesclasedelenguaje.blogspot.com.es/2012_10_01_archive.html [Último acceso junio 2018].
[ 16 ] Tienda on-line BricoGeek.
Disponible en:
http://tienda.bricogeek.com [Último acceso junio 2018].
[ 17 ] OpenCv library.
Disponible en:
http://www.code.open.cv.org [Último acceso junio 2018].
[ 18 ] Valkov, E. Raspberry Pi Camera with OpenCV. Robot taming Services, 2014.
Disponible en:
https://robidouille.wordpress.com/2013/10/19/raspberry-pi-camera-with-opencv/ [Último acceso junio 2018].
[ 19 ] Abyz. “The pigpio library”.
Disponible en:
http://abyz.co.uk/rpi/pigpio/index.html [Último acceso junio 2018].
[ 20 ] Muñoz Salinas, Rafael. Raspicam: c++ API for using Raspberry camera with/without OpenCV.
Disponible en:
https://www.uco.es/investiga/grupos/ava/node/40 [Último acceso junio 2018].
[ 21 ] Solarian Programmer, “Raspberry Pi – Install GCC 4.9 and compile C++14 programs”. Solarian
Programmer, 2015.
Disponible en:
https://solarianprogrammer.com/2015/01/13/raspberry-pi-rapsbian-install-gcc-compile-cpp-14-programs/
97 Diseño y control de un sistema Ball and Beam con realimentación visual con Raspberry-Pi
[Último acceso junio 2018].
[ 22 ] Oneleggedredoc. “C++ Tutorial – Hello Raspberry Pi”, Code Exchange, 2013.
Disponible en:
http://www.element14.com/community/community/code_exchange/blog/2013/01/02/c-tutorial--hello--
raspberry-pi [Último acceso junio 2018].
[ 23 ] Ing. Walter J. D. Cova, “Control pid, un enfoque descriptivo” Universidad Tecnológica Nacional, Facultad
Regional La Rioja, Departamento de Electrónica, Diciembre 2005
Disponible en:
http://www.frlr.utn.edu.ar/archivos/alumnos/electronica/catedras/38-sistemas-de-control-
aplicado/Publicaciones/Control_PID_Enfoque_Descriptivo.pdf [Último acceso junio 2018].
[ 24 ] Design Compensator Using Automated Tuning Methods Disponible en:
https://es.mathworks.com/help/control/ug/design-compensator-using-automated-tuning-
methods.html#bu8qz8x-2 [Último acceso junio 2018].
[ 25 ] Daniel Rodríguez Ramírez, Carlos Bordóns Alba, “Apuntes de ingeniería de control” Disponible en:
http://www.esi2.us.es/~danirr/apuntesIC4.pdf [Último acceso junio 2018].
Referencias
98
Top Related