Gabs
Gabs
NELSON LOMBARDO
Índice
1. Introducción 1
1.1. Problema 1
1.2. Problema a resolver 1
1.3. Alcance 2
1.4. Objetivos 2
2. Marco teórico 2
2.1. Péndulo clásico 2
2.2. PID 3
2.3. PID digital 4
2.4. Concepto PID en referencia al proyecto 4
2.5. Retrasos en sistemas de control basados en micropocesadores 5
3. Diseño metodológico 5
3.1. Elección del control 5
3.2. Trabajo a realizar 6
3.3. Inconvenientes de la implementación 6
3.4. Diagrama de flujo del control PID digital 7
3.5. Ancho de pulso para el control y velocidad de los motores servo-
continuos 7
3.6. Obtención de los coeficientes de los términos PID 10
4. Materiales 10
4.1. Software utilizado 10
4.2. Plataforma robótica 11
4.3. Lenguaje de programación 13
5. Implementación 14
5.1. Modificaciones al boe-bot 14
5.2. Sensor de distancia 14
5.3. Alimentación eléctrica 14
5.4. Posición de equilibrio natural del boe-bot 15
5.5. Transferencia de los programas 15
5.6. Programa para el stamp BS2 15
6. Resultados 17
6.1. Trabajo observado 17
6.2. Aceptación 17
7. Conclusión 18
8. Trabajo a futuro 18
Índice de figuras 18
Referencias 19
Revisión 19
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 1
1. Introducción
1.1. Problema. Este sistema constituye un caso concreto de un sistema físico
en el que se ponen de manifiesto importantes problemas, lo que ha hecho de él un
banco de pruebas1 para sistemas de control.
El interés en el estudio de este tipo de sistema radica en que, salvando las partic-
ularidades de cada caso, su modelo matemático presenta una formulación basada
en ecuaciones diferenciales, que guarda cierta analogía con procesos reales de mayor
complejidad, como por ejemplo: el generador sincrónico conectado a un bus infinito
y el sistema de control de vuelo para aeronaves, etc. Por tanto, su estudio sirve
como una primera aproximación a los problemas que plantean sistemas de mayor
complejidad.
El control del péndulo invertido presenta una enorme variedad de problemas que
han hecho de él uno de los sistemas concretos para el ensayo de leyes de control
más analizados en estos últimos tiempos. Los primeros péndulos invertidos se con-
struyeron en los años 70, y aún hoy, treinta años después, se sigue experimentando
con el péndulo invertido y tratando de analizarlo desde un punto de vista teórico. Es
notable que después de tantos años aún no se haya conseguido un estudio unitario
y satisfactorio de dicho problema.
En el control del péndulo invertido se presentan básicamente dos problemas:
el problema de la estabilidad local en torno a la posición de equilibrio, que es
análogo al problema del malabarista que pretende mantener un palo en la punta
de un dedo; y el problema de levantar el péndulo desde su posición de reposo hasta
la posición en la que se mantiene erguido hacia arriba. Este último problema se
conoce con su denominación inglesa de problema del swing up. El primero de los
problemas, el de la estabilización local, puede resolverse satisfactoriamente mediante
la legalización en torno a la posición de equilibrio. Sin embargo, la ley de control así
obtenida tiene un carácter exclusivamente local. Para perturbaciones de una cierta
magnitud el control del péndulo se pierde. En el problema del swing up es necesario
considerar todo el espacio de estados, de modo que el problema no puede abordarse
con una perspectiva local. Se trata, por tanto, de un problema al que se aplican las
consideraciones realizadas a lo largo de este capítulo, relativas a la imposibilidad
de linealizar el sistema y de tratarlo exclusivamente en forma local. El problema
del swing up es, por su propia naturaleza, un problema no lineal que se desenvuelve
en una amplia región del espacio y que, por tanto, no admite una reducción local
y hay que abordarlo con toda la problemática inherente a su globalidad y a su
no linealidad. Por último, para terminar esta sección sobre el problema de control
del péndulo invertido, conviene resaltar que se puede considerar como un problema
arquetipo de lo que es la ingeniería. No existe un método universal para resolverlo,
y ante él el ingeniero tiene que desarrollar sus facultades imaginativas y creativas,
combinando diferentes métodos para resolver los distintos aspectos del complejo
problema que representa el control de este sistema, aparentemente simple, pero en
realidad muy complejo en sus formas de comportamiento.
1
Benchmark.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 2
1.3. Alcance. Este trabajo resuelve un problema similar al del péndulo invertido
clásico en una pequeña región lineal alrededor del punto de seteo, utilizando como
estrategia de control un algoritmo PID empírico y un boebot como plataforma para
el proyecto.
El proyecto se basa fuertemente en la administración conceptual del problema y
de la implementación, basándose en la flexibilidad que otorga la programación en
general.
1.4. Objetivos. Intentar realizar un estudio sobre el problema del péndulo inver-
tido, utilizando para su implementación un boe-bot como la base para la instalación
del problema.
En la primera parte se estudia el problema de forma teórica y se aprecia los
inconvenientes que se tiene. Luego en base a esto se define una estrategia de control
para la solución del problema y se trabaja en ella.
En una segunda parte, se decide hacer la implementación basándose en un control
PID empírico. En esta parte se trabaja fuertemente en la obtención de un programa,
que permite correr el control PID eliminando la mayor cantidad de inconvenientes
posibles y posibilitando una exitosa solución en torno a la búsqueda de la posición
de seteo.
2. Marco teórico
2.1. Péndulo clásico. En la figura 2.1, podemos observar las fuerzas que inter-
vienen en el sistema de péndulo invertido clásico. Donde:
M masa del carro
m masa del péndulo
Bc fricción del carro
Bv fricción del péndulo
L longitud al centro de masa del péndulo
I inercia del péndulo
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 3
P = kp ∗ e(t)
Zτ
I = ki ∗ e(t) dt
0
de(t)
D = kd ∗
dt
Si bien estas definiciones son correctas, son poco prácticas en nuestro caso.
2.3. PID digital . Para ello tomaremos en cuenta que nuestro control es digital:
P = kp ∗ e[n]
e[n] − e[n − 1]
D = kd ∗
∆t
Donde:
e[n] es el error actual en el tiempo discreto.
e[n−1] es el error en el tiempo discreto que se obtuvo antes del error actual.
e[n − N ] es el error en el tiempo discreto que se obtuvo ene3 veces antes del
error actual.
N es la cantidad de momentos desde que el sistema comenzó a funcionar
hasta llegar al momento actual.
∆t es el tiempo que existe entre los momentos discreto.
2.4. Concepto PID en referencia al proyecto. El PID resulta ser de vital
importancia al momento de poder abstraer el problema, aunque posee limitaciones
como todo sistema de control. El PID puede “ver” a nuestro sistema como sólo una
entrada, un proceso y una devolución, y trabajar para lograr que la devolución se
lo más parecida posible a la entrada.
En el caso del robot equilibrista, este sistema es inestable por naturaleza como
el péndulo invertido. El PID “desconoce” esta inestabilidad4 y sólo busca corregir
la desviación que se produce en el sistema. En este caso particular, intenta llevar a
la posición deseada (la de equilibrio natural del cuerpo del boe-bot vertical, la cual
seteamos). En este caso no debemos olvidarnos que esto es aplicable a respuestas
lineales, por lo tanto ángulo dentro del cual puede trabajar es limitado pero tal ves
suficiente.
3Desde que el sistema comenzó a funcionar en el momento cero.
4Es una de las formas de actuar en la implementación.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 5
1[s]
= 250µs
4000[inst]
Esto permite que el “cerebro” BS2 pase por 2000 instrucciones por segundo.
Si bien puede parecer bastante, a comparación de nuestra labor, el programa más
sencillo requiere de miles de estado de la máquina, puesto que cada instrucción
de pbasic se debe decodificar a lenguaje máquina y a su vez cada instrucción de
lenguaje máquina a µinstrucciones.
Es un echo bien conocido que los retrasos son a menudo causa de inestabili-
dad en sistemas de lazo cerrado, digitales o continuos, es esencial considerar estas
condiciones imperfectas cuando se diseña un sistema de control digital.
3. Diseño metodológico
3.1. Elección del control. Determinados a resolver el problema como se nos
había pedido en la cátedra, se opta por enumerar las dificultades:
No conozco las constante del motor.
Falta de conocimiento y preparación formal sobre sistemas de control.
Control digital de un sistema analógico.
Limitaciones de procesamiento por parte del “cerebro” del robot.
Falta de tiempo principalmente impuestas por el comienzo del proyecto
luego del primer cuatrimestre de cursado y la cantidad de proyectos anexos
a las demás materias del mismo año.
Acceso a internet limitado.
Falta total de experiencia en el uso de este robot.
Grupo de trabajo de una persona.
Esto llevo a tomar la decisión sobre el tipo de estrategia. Basándome en los in-
convenientes anteriores, decidí que programar un controlador PID sería la mejor
solución. Algunas de las ventajas:
Puede utilizarse de forma de abstraer el problema base y así, disminuir drás-
ticamente la complejidad del sistema a resolver. Puede llegar a funcionar a
“prueba de concepto”.
3.4. Diagrama de flujo del control PID digital. Una de las mejores maneras
de abordar el desarrollo de un programa es realizando un diagrama de flujo. El punto
de partida fue básico pero necesario, y lo apreciamos en la figura 3.1.
Se debe utilizar una cantidad mínima de variables pero sin dejar de ser lo suficien-
temente cómodo el programa para su modificación. El programa principal adopta
la forma de la figura 3.2.
Se utilizan tres rutinas, las cuales pueden ser estudiadas de las figuras 3.3, 3.4 y
3.5.
La rutina de medición, establece los requerimientos desde el punto de vista del
boe-bot y la utilización del sensor que en nuestro caso será el módulo QTI6.
La sección de cálculo representa lo escrito en 2.3, pero teniendo en cuenta que
la parte integral sólo “integrará” en el modelo de aproximación por rectángulos
el momento actual y dos momentos anteriores. El tiempo es representativo del
tiempo que toma en el código final pasar de realizar todos los cálculos a comenzar
a realizarlos.
La rutina de modulación sólo hace referencia a el envío del impulso necesario
para mover el boe-bot en sentido de buscar el equilibrio. En 3.5, se trata sobre este
tema.
1,7ms
rigth = = 850
2µs
1,3ms
left = = 650
2µs
Procedemos a utilizar estos valores en pbasic, a través de la instrucción:
PULSOUT Pin, Duración
Donde:
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 9
3.5.1. Impulso cero de los motores. Al utilizar la Duración del PULSOUT en 750
los motores quedan estaticos. Existe el procedimiento descripto en el manual de
boe-bot para esto.
4. Materiales
4.1. Software utilizado.
5. Implementación
5.1. Modificaciones al boe-bot. La única modificación que se realizo al boe-
bot clásico, es la inversión de la posición física de los servos, para que el cuerpo del
boe-bot pudiera adoptar la posición vertical de la figura 1.1 libremente. Esto puede
apreciarse en la figura 5.1
5.2. Sensor de distancia. El módulo QTI esta diseñado para la detección cer-
cana infrarroja. El corazón de este módulo es el QRD1114 que es un sensor reflectivo
de objetos. Utiliza un diodo emisor infrarrojo y un phototransistor BJT. El mó-
dulo esta diseñado para utilizarse con la función RCTIME, que posee la siguiente
sintaxis:
RCTIME Pin, State, Variable
Donde:
Pin es alguna de las entradas/salidas del puerto.
State es una constante que puede adoptar el valor 1 o 0 lógicos.
Variable es justamente el registro en memoria donde queremos almacenar
el resultado.
Esta función mide el tiempo que le toma llegar al estado definido en State. Usual-
mente se utiliza para medir el tiempo de carga o descarga de un circuito RC.
En nuestro caso, la utilizamos para obtener una “medida” de la distancias entre
el sensor y la superficie donde esta haciendo equilibrio el robot.
La posición que se adopto para el sensor fue en la parte inferior del boe-bot, a no
más de 1 cm de la superficie, con una distancia al eje de pivoteo (eje de las ruedas)
de no más de 1.5cm.
La conexión de este sensor es muy sencilla, el pin W del módulo se conecta a uno
de los pines de alimentación del motherboard del robot, el pin B al gnd que otorga
la placa y el R a una de las entradas/salidas del puerto de trabajo que deseemos,
en nuestro caso utilizamos el 5. Para una mayor comprensión referirse a la figura
5.1.
5.3. Alimentación eléctrica. Se elimino el porta pila del boe-bot y se utilizo
alimentación externa con una fuente de voltaje regulable de 3A como máximo tra-
bajando a 9V. Para no producir una invasión al sistema, la alimentación se hizo
a través de cables muy finos y maneables, en una posición relajada por encima de
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 15
la altura del boe-bot y con el largo suficiente para que el mismo se pudiera mover
libremente.
5.4. Posición de equilibrio natural del boe-bot. Para encontrar la posición
de equilibrio se utilizo la siguiente metodología:
Se escribió un programa que iba mostrando en la pantalla de debug del IDE
la medición de la distancia del sensor a la superficie.
Manualmente se adoptaba la posición para la cual se notaba el equilibrio
del robot.
Se anota el valor y se utiliza luego en el programa de control.
Todo el trabajo previamente descripto derivo en este programa escrito para tal fin
fue:
’ {$STAMP BS2}
’ {$PBASIC 2.5}
front VAR Word
DO
HIGH 5
RCTIME 5,1,front
PAUSE 1000
DEBUG ? front
LOOP
’ {$STAMP BS2}
’ {$PBASIC 2.5}
’ Licensed under GPLv2 o higher
pulseLeft VAR Word ’Variable que envía el ancho del pulso al motor izquierdo.
pulseRight VAR Word ’Variable que envía el ancho del pulso al motor derecho.
pulseZero CON 750 ’Este es el pulso para el cúal los motores no giran.
p VAR Word ’Se almacena el ancho del pulso a sumar al estado estacionario.
offset = pulseZero
sum1 = 0
sum2 = 0
offsetf = 0
offsetf = SetPoint
LOOP
’-------Subrutinas--------
PID:
IF (front <setpoint) THEN ’Hay que revisar el signo y actuar según para la corrección.
derivate = (error - sum1) / time ’El término derivativo es en realidad la secante mínima
que podemos hallar
ELSE
ENDIF
ENDIF
IF (front >setpoint) THEN ’Esta parte del programa realiza lo mismo que la anterior sólo que
adecua el signo
ELSE
ENDIF
pulseLeft = p + offset
pulseRight = - p + offset
ENDIF
sum2 = sum1
sum1 = error
RETURN
Measure:
HIGH 5
RCTIME 5,1,front
RETURN
Send_Pulse:
RETURN
6. Resultados
6.1. Trabajo observado. El sistema termino realizando equilibrio y a medida
que el control progresaba en funcionalidad como en tunning8 fue mostrando una
clara mejora. No se pudo implementar un sistema que permitiera cotejar las mejoras
más que por el método de la observación. Eventualmente el equilibrio en torno a
la posición de equilibrio se obtuvo y demostró ser significativamente mejor de las
primeras pruebas utilizando un control proporcional.
7. Conclusión
Aunque el objetivo inicial de lograr un péndulo invertido9 no se alcanzo, esta
aproximación es evidentemente un claro progreso hacia la resolución del mismo.
Aunque el trabajo podría haber sido más “exitoso”, en lo personal fue satisfactorio
lograr una solución, y que además la misma es bastante aceptable.
La estrategia de control PID dejo en evidencia ser a prueba de concepto, y logró
un importante objetivo a un costo de tiempo, dinero y conocimientos10 muy bajos.
El boe-bot demostró ser una plataforma muy simple pero no así despreciable.
Permitió trabajar rápidamente al momento de la programación, pero como contra
las limitaciones son algunas veces numerosas, pero lo cierto es que es un hardware
diseñado para hobbistas y que intenta ser fiel a ello. Sin embargo, fue muy intere-
sante trabajar con el mismo para lograr un “prototipo” de solución al problema.
Hace muchos años, trabaje en instrumentación en la industria del petróleo, y me
topaba con sistemas PID de control en muchos de los equipos que se reparaban, que
controlaban desde válvulas electro-hidráulicas hasta motores de bombas y tornil-
los11 para transportar arena. Cuando puede estudiar Ing. Electrónica fue en gran
medida por la fascinación que me producían estos sistemas. Así que esta experien-
cia fue muy gratificante y me demostró el trabajo que conlleva realizar algunas de
estas tareas.
8. Trabajo a futuro
Muchos puntos no se pudieron estudiar ni tratar, los siguientes son los más im-
portantes según un criterio personal que se fue generando a medida que el proyecto
avanzaba:
Modelizar el hardware con los conocimientos que se adquieren en la materia
sistema de control.
Estudiar la utilización de otros tipos de sensores para la medición de la
distancia posicional.
Lograr un equipo de trabajo para incrementar la productividad.
Aunque se abordo una solución de fuzzy logic12, basada en un ejemplo
realizado en python, no se pudo implementar. Lo ideal sería presentar una
solución de sistemas híbridos.
Ayudar a la física del problema resuelta agregando más peso en la parte
inferior, cerca al eje de pivoteo.
Índice de figuras
Referencias
[1] [Link]
[2] “Modelado y control del péndulo invertido sobre carro mediante sistemas híbridos.” por Fer-
nando Bote Ortega. Universidad de Sevilla.
[3] ”Control of an Inverted Pendulum” por Johnny Lam.
[4] [Link]
[5] ”BASIC Stamp Syntax and Reference Manual”, Version 2.2, ISBN #1-928982-32-8.
[6] ”PBASIC Language Basics”, Dhinesh Sasidaran. Octubre 14, 2002.
[7] ”Microbot PARALLAX Boe - Bot”, Cándido García Barrón.
[8] ”Robotics with the Boe-Bot Student Guide VERSION 2.2” [Link]/dl/docs/
books/edu/roboticsv2_2.pdf
[9] ”Método básico para implementar un controlador digital PID en un microcontrolador PIC
para el desarrollo de aplicaciones de bajo costo (Aplicaciones en control de Potencia y la
Industria)”, Ilber Adonayt Ruge Ruge. Universidad de Cundinamarca. Grupo de Investigación
en Tecnologías de la Información y las Comunicaciones GITEINCO Fusagasuga – Colombia.
[10] ”¿Cómo realizar un informe de invetigación?”, [Link] Terán.
[11] ”Digital PID Controllers”, [Link] Toochinda. [Link]/docs/ecs/[Link]
[12] ”Sistemas de control digital”, Benjamin C. Kuo. Editorial Grupo Patria Cultural. ISBN 968-
26-1292.
[13] ”Sistemas de control moderno”, Richard C. Dorf y Robert H. Bishop. Décima edición. Edi-
torial Pearson Prentice Hall. ISBN 84-205-4401-9
Revisión
10/12/10 - El presente texto es una adaptación de la versión original titula-
da “Aproximación a la solución del péndulo invertido clásico”. Esta modifi-
cación fue realizada con el propósito de poder publicar mi trabajo con más
soltura.