0% encontró este documento útil (0 votos)
341 vistas21 páginas

Gabs

G.A.B.S. (Get Another Boe-bot Selfbalanced)

Cargado por

Nelson Lombardo
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
341 vistas21 páginas

Gabs

G.A.B.S. (Get Another Boe-bot Selfbalanced)

Cargado por

Nelson Lombardo
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

G.A.B.S.

(GET ANOTHER BOE-BOT SELFBALANCED)

NELSON LOMBARDO

Resumen. El problema del péndulo invertido es un ejercicio clásico para el


estudio de sistemas de control, en este caso se aborda el problema desde una
aproximación utilizando un control PID en un Boe-Bot, logrando que el ro-
bot pueda balancearse sobre sus dos ruedas. Este trabajo intenta sortear los
inconvenientes de un hardware limitado, un sistema de control que necesita
linealizar el problema a una región muy acotada, falta de fundamentos teóri-
cos, pero con el objetivo de ser exitoso en la resolución del problema propuesto
con los conocimientos adquiridos en otras materias de la carrera de Ingeniería
Electrónica basándose en la flexibilidad que otorgan los microcontroladores y
el boe-bot utilizado.

Date: Noviembre de 2010.


i
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) ii

Í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.2. Problema a resolver. Al comenzar con el proyecto, existieron varios in-


convenientes. Uno de ellos fue implementar un sensor para obtener el ángulo de
la varilla. Para que el proyecto no se estancará y nunca lograr hacerlo andar, se
comenzó a trabajar en un problema derivado, que el robot pudiera mantener el
equilibrio sobre sus ruedas, buscando una posición vertical. En la figura 1.1, pode-
mos ver el boe-bot y el tipo de problema que se busco solucionar. Como se dijo
antes, la solución al péndulo clásico admite problemas de la misma naturaleza.

1
Benchmark.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 2

Figura 1.1. Posición de equilibrio del boe-bot self-balanced.

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

Figura 2.1. Diagrama de fuerzas que actúan sobre el péndulo


invertido clásico.

F fuerza aplicada al carro


X coordenadas de posición del carro
Θ ángulo del péndulo respecto de la vertical
Para obtener la ecuación que describe el movimiento del péndulo, sumamos las
fuerzas perpendiculares al péndulo. Si resolvemos el sistema a lo largo de este
eje nos ahorramos un montón de álgebra. De esta forma obtenemos la siguiente
ecuación:

P sin (θ) + N cos (θ) − m g sin (θ) = m ẍ cos (θ) + F rv


Aquí es donde realizamos un análisis de nuestro contexto. Existe mucha bibli-
ografía y (ya lo he dicho) muchos sistemas que se basan en la teoría del péndulo
invertido. Puesto que las soluciones a este sistema son “complicadas” y no son úni-
cas, se propone entender que tenemos hasta el momento y buscamos comprender
estrategias alternativas más amigables.
2.2. PID. En la figura 2.2 se puede observar el diagrama de flujo que representa
un controlador PID. En primer lugar existe un setpoint que es ingresado por el
usuario, la diferencia entre él y la salida nos da un error (e(t) ) momento a momento.
El error se procesa para obtener la corrección a la salida, el primer cálculo es
el proporcional, también denominado ganancia, y básicamente actúa directamente
sobre la salida proporcionalmente al error.
Luego existe la contribución de la parte integral, a veces llamada reset. Esta es
proporcional a la magnitud del error como así del tiempo de duración del mismo.
Sumando el error a cada momento (integrando el error) acumulamos el offset 2 que
se fue corrigiendo previamente. El término integral trabajando con el término pro-
porcional, acelera la llegada del proceso al setpoint y elimina los errores residuales
que provoca el control proporcional. El problema resulta cuando una acumulación
importante del error provoca un desborde de la respuesta.
Por último, el término derivativo, trabaja sobre la razón de cambio del error sobre
el tiempo. Este término, a veces denominado también rate, contribuye a anticipar
el posible error futuro y actuar en consecuencia. El inconveniente radica en que de
existir mediciones espurias el aporte puede llevar a una oscilación sobre el sistema.
El control PID trabaja gracias a tres términos, el proporcional (P), el integral
(I) y el derivativo (D). Estos tienen la siguiente forma matemática:

P = kp ∗ e(t)

2Corrimiento, desviación entre el setpoint ideal y el setpoint real.


G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 4

Figura 2.2. Diagrama de flujo del control PID.


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]

I = ki ∗ (e[n] + e[n − 1] + ... + e[n − N ]) ∗ ∆t ∗ 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

2.5. Retrasos en sistemas de control basados en micropocesadores. Además


de la longitud de palabra finita, los microprocesadores5 son máquinas de cálculo dig-
ital relativamente lentos. En muchas aplicaciones de cómputo digital, tal vez la baja
velocidad de cómputo no tenga importancia; sin embargo, en aplicaciones de sis-
temas de control, a menudo es necesario el cálculo en tiempo real y los retrasos
encontrados en el manejo de los datos pueden tener efectos significativos sobre el
desempeño del sistema. En general, es importante saber cuán grandes son estos
retrasos, a fin de tratar con ellos de manera analítica. Cabe atribuir dos problemas
inmediatos a los retrasos en los sistemas de control. Uno es que si el retraso es muy
grande, no hay tiempo suficiente para llevar a cabo todos los cálculos necesarios
a fin de ejecutar los algoritmos de control; el otro es el efecto adverso del retraso
sobre la estabilidad de los sistemas de control a lazo cerrado.
Cada programa está formado por un conjunto de instrucciones, y cada una re-
quiere un determinado número de estados de la máquina. El tiempo necesario para
que el microprocesador ejecute una instrucción en particular es directamente pro-
porcional al número total de estados de la máquina por los que debe pasar el
microprocesador a fin de completar la instrucción; por ejemplo, para el interprete
del BS2 del boe-bot ser requiere un tiempo por instrucción de:

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”.

5Y los microcontroladores en especial.


G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 6

Aunque es necesario hallar los coeficientes de los términos PID, no esta


estrictamente ligado a modelos complicados, y se puede utilizar un seteo
empírico.
Esta estrategia es bastante utilizada, y se hallan muchos proyectos de difer-
ente índole que así lo demuestran.
Algunos de los inconvenientes más importantes que posee:
Aunque el seteo de los coeficientes pueden obtenerse en base a la experiencia
y de ciertas pruebas de interpretación, no siempre es factible hallarlos así.
Existen algunos inconvenientes derivados de los sobreimpulsos, como el
windup.
Las oscilaciones del control no están exentas de desaparecer, y hasta pueden
incrementarse por una mala actuación del término derivativo.
No todos los problemas pueden solucionarse por medio de este control.
3.2. Trabajo a realizar.
Entender las limitaciones de velocidad de procesamiento del “cerebro” del
robot.
Establecer un control proporcional y mejorar el mismo refinando su com-
portamiento.
Comprender los inconvenientes que apareja controlar un sistema analógico
a través de un control digital.
Escribir el control PID completo.
3.3. Inconvenientes de la implementación.
3.3.1. Optimización. Uno de los mayores problemas es escribir un código capaz
de ser modular, simple, efectivo y que este optimizado para el procesamiento del
mismo.
Uno de los factores determinantes en la respuesta del control sobre el robot, es
la comunicación con la P.C.. En este caso, existen dos limitantes, el primero es la
baja frecuencia de procesamiento de las instrucciones de pbasic en el cerebro a lo
que se le suma los tiempos que requiere la comunicación con la P.C.. Una de las
instrucciones a eliminar definitivamente es DEBUG, esta instrucciones permiten
visualizar en el P.C. ciertos datos que se pueden configurar, esto es un consumo
excesivo de tiempo.
El “tamaño” de las variables, el tipo de variable puede contener longitudes ade-
cuadas pero al utilizarlas discriminando el signo acorta a la mitad la longitud, lo
que genera otro problema. Se debe cuidar el tipo de variable a asignar.
3.3.2. Signado. El interprete del boe-bot, aunque trabaje a un “alto” nivel, nos
limita en el uso de signado de las variables. La mejor solución es generar una
escritura del código tipo árbol balanceado, que, aunque parezca no muy modular,
establece una pérdida de tiempo mínima en comparación a la cantidad de código
que se escribió.
3.3.3. Windup. Uno de los problemas comunes resultantes de las implementa-
ciones del control PID es el windup. Este efecto indeseable sucede cuando se da
un corrimiento muy grande del punto de seteo entonces el termino integral acu-
mula un error significativamente grande que se convierte en una sobrecarga en la
realimentación lo que produce un mayor error provocando así en un incremento
incontrolado de la parte integral.
Existen algunas técnicas para corregir esto:
Inicializar el término integral en un valor conocido.
Incrementar el punto de seteo de forma lineal.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 7

Figura 3.1. Diagrama simplificado del programa.

Deshabilitar el control integral cuando el sistema se encuentre en la región


más lineal.
Limitar el tiempo que se dedica para el cálculo del término integral.
Limitar los valores que puede alcanzar el término, reduciendo así los “re-
botes”.

3.3.4. Debug. Lamentablemente al experiencia nos determino que utilizar la in-


strucción DEBUG no es una opción para depurar los errores o comprender algunos
de los estados por los que pasa el sistema, por lo que hay que valerse de las expe-
riencias que se conocen sobre este tipo de sistemas y realizar las interpretaciones
que vengan al caso.

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.

3.5. Ancho de pulso para el control y velocidad de los motores servo-


continuos. Supongamos que se necesita mover el boe-bot a máxima velocidad,
entonces uno de los motores debe girar en sentido horario a velocidad máxima y el
otro en sentido antihorario, por lo tanto, de lo que se observa en las figuras 3.6 y
3.7:
6Número de parte 555-27401 para el pedido en parallax.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 8

Figura 3.2. Diagrama de flujo del programa principal.

Figura 3.3. Rutina de medición.

1,7ms = 2µs ∗ rigth

1,7ms
rigth = = 850
2µs

1,3ms = 2µs ∗ left

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

Figura 3.4. Rutina de cálculos.

Figura 3.5. Rutina de modulación.

Figura 3.6. Un tren de pulsos de 1.3 ms hace rotar el servo a


máxima velocidad en sentido de las agujas del reloj.

Figura 3.7. Un tren de pulsos de 1.7 ms hace rotar el servo a


máxima velocidad en sentido contrario al de las agujas del reloj.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 10

Parámetro Tiempo subida Sobreimpulso Tiempo seteado Error de estadía Estabilidad

kp Decrece Se incrementa Cambio Decrece Se degrada


pequeño
ki Decrece Se incrementa Se incrementa Decrece Se degrada
significativamente
kd Decrece Decrece Decrece No tiene efecto Mejora si
mínimamente mínimamente mínimamente en teoría kd es pequeño
Cuadro 1. Efectos de incrementar cada parámetro independientemente.

Pin: Es la variable o constante que indica el pin entrada/salida a donde se


dirige el pulso.
Duración: Es la relación entrel el pulso que queremos y los 2µs7.

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.

3.6. Obtención de los coeficientes de los términos PID. Existen muchas


formas de obtener los coeficientes. Una excelente referencia inicial es los descripto
en el artículo de wikipedia, que podemos hallar en el texto 1 de la bibliografía.
En este proyecto se opto por la configuración manual, puesto que esto es muy
relativo, se propone buscar sobre este puesto que tal vez puede ser confuso como
lograrlo. Por lo pronto el texto antes recomendado fue el utilizado para el trabajo.
Una rápida diferencia es la del cuadro 1.

3.6.1. Procedimiento manual. Si el sistema debe estar corriendo, primero debemos


poner kd y ki a cero. Incrementar kp hasta que la salida del lazo comience a oscilar,
entonces kp debe setearse aproximadamente a la mitad de valor para la cual la
repuesta decayó un cuarto. Se incrementar ki hasta que se pueda corregir el offset
de la respuesta del sistema. Sin embargo aumentar demasiado ki puede causar
inestabilidad. Finalmente se incrementa kd, hasta que el lazo tengo una respuesta
aceptablemente rápida a los impulsos imprevistos. Si se incrementa mucho kd puede
causar una respuesta excesiva y sobre impulso perdiendo así la estabilidad. Un lazo
PID bien seteado usualmente no trabaja tan rápido a los impulsos no previstos para
dar lugar a una búsqueda rápida del punto de seteo.

4. Materiales
4.1. Software utilizado.

4.1.1. Procesador de texto. Para ir documentando y realizar este informe sobre


el proyecto, se decidió utilizar un procesador de texto. Las ventajas del mismo son
la optimización de la presentación para documentos estándares y poco o nada de
interacción con el formateo del mismo. De gran utilidad para este proyecto. Se
utilizo el software LYX en su versión 1.5.5, el cual es software de licencia GPL como
así gratuito. El sitio oficial es [Link]

4.1.2. Graficador de diagramas. Para la realización de los diferentes diagramas se


utilizo un graficador de diagramas estructurados llamado DIA, en su versión 0.96.1.
Este software esta también amparado bajo la GPL y es de distribución gratuita. El
sitio oficial es [Link]

7Este valor es el especificado para un BS2.


G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 11

Figura 4.1. Boe-bot.

4.1.3. Entorno de desarrollo. Respecto al entorno, se intento trabajar con alter-


nativas al entorno oficial del que nos otorga la compañía Parallax (quien desarrolla
el boe bot) pero existen pocas opciones y no se tenían las librerías para la compi-
lación. Se decidió utilizar directamente el IDE Basic Stamp, versión 2.5 de código
propietario y distribución gratuita. Para la descarga buscar en el sitio oficial de la
empresa: [Link]
4.1.4. Adaptación a un sistema GNU/Linux. Para poder utilizar el IDE de paral-
lax sobre un sistema GNU/Linux se utilizo el software WinE (Windows Emulator)
en su versión 1.0.1-174-gc4039bd. El sitio oficial de este proyecto de licencia GPL
y distribución gratuita es [Link]
4.2. Plataforma robótica. La plataforma donde se implemento el proyecto es el
robot boe-bot (figura 4.1), producido por la compañía Parallax. Se decidió utilizar
el mismo porque había sido una adquisición reciente del departamento de elec-
trónica en la Universidad, y ningún equipo de trabajo estaba utilizándolo. Además,
su sensillez y facilidad de transferencia del programa lo hace ideal para trabajos
experimentales.
Componentes activos de la plataforma:
4.2.1. Parallax (Futaba) Continuous Rotation Servo:
Rotación continua bidireccional de 0 a 50 RPM, con respuesta linear al
control PWM para una fácil rampa.
• Requerimientos de tensión: de 4 a 6 Vdc.
• Comunicación: PWM.
• Dimensiones: 55.8 x 19 x 406 mm.
• Rango de temperatura operativa: -10 a +50 °C.

4.2.2. Motherboard. En la figura 4.2 se encuentra el motherboard del boebot. A


continuación una pequeña descripción:
1. Conector para una pila de 9 voltios.
2. Condensadores del filtro del regulador de voltaje de 5 voltios en corriente
continua.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 12

Figura 4.2. Tarjeta electrónica del boe-bot.

3. Conector del puerto serie/usb para la comunicación con el ordenador.


4. Zócalo de 24 pines para insertar el módulo BASIC Stamp.
5. Pulsador para reiniciar el programa cargado en el Boe-Bot.
6. Interruptor de tres posiciones. En la posición 0 el Boe-Bot está desconecta-
do, en la posición 1 el Boe-Bot está conectado, pero los servomotores que
mueven las ruedas están desconectados y en la posición 2 tanto el Boe-Bot
como los servos están conectados.
7. LED verde que nos indica que el Boe-Bot está encendido.
8. Conector de las entradas/salidas del microcontrolador BASIC Stamp para
su uso en la placa protoboard situada a continuación.
9. Placa protoboard para el montaje de los componentes electrónicos necesar-
ios para los sensores e indicadores luminosos o acústicos.
10. Conector de alimentación. Los cinco primeros pines (Vdd) proporcionan una
tensión positiva de 5 voltios, los tres siguientes (Vin) una tensión positiva
del voltaje que proporcionen las pilas o el adaptador de corriente (6 - 9
voltios) y los cinco últimos (Vss) proporcionan la masa, el polo negativo a
una tensión de 0 voltios.
11. Conectores para cuatro servomotores asociados a las salidas P12, P13, P14
y P15.
12. Jumper para la selección de la alimentación de los servomotores según se
realice mediante el portapilas de 6 voltios del Boe-Bot o mediante un adap-
tador de corriente exterior.
13. Regulador de voltaje que proporciona a los circuitos electrónicos 5 voltios
positivos (Vdd) y la masa (Vss).
14. Conector para tarjetas de ampliación. Permite conectar las 16 entradas/salidas
de la P0 a la P15 y los pines de la alimentación Vdd, Vin y Vss.
15. Conector para el portapilas de 6 voltios o el adaptador de corriente exterior
de 6 - 9 voltios. La varilla central de 2,1 milímetros corresponde al polo
positivo.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 13

Figura 4.3. BS2, uno de los “cerebros” del boebot.

4.2.3. Cerebro BS2. En la siguiente enumeración, se describen los componentes


que se hallan en el “cerebro” BS2 del boebot utilizado, lo que se puede apreciar en
la figura 4.3:
1. Cuatro pines para la comunicación con el ordenador mediante el puerto
serie.
2. Memoria EEPROM de una capacidad de 2K en donde se almacena el código
fuente del programa editado en PBASIC.
3. Condensador del filtro del regulador de voltaje de 5 voltios.
4. Ocho pines de las entradas/salidas desde la P0 hasta la P7.
5. Microcontrolador PIC16C57C que actúa de interprete del lenguaje PBA-
SIC, ejecutando el programa a una velocidad de 4.000 instrucciones por
segundo.
6. Ocho pines de las entradas/salidas desde la P8 hasta la P15.
7. Oscilador de cuarzo de 20 megahercios para proporcionar la frecuencia al
reloj interno.
8. Pin de alimentación de 5 voltios positivos (Vcc).
9. Regulador de voltaje que estabiliza la tensión desde los 6 - 9 voltios de la
alimentación a los 5 voltios utilizados por los circuitos electrónicos.
10. Pin para reiniciar el programa.
11. Dos pines de alimentación a la tensión de 6 - 9 voltios (Vin) y la masa
(Vss).
12. Detector de la tensión de alimentación del módulo BASIC Stamp.
13. Circuito de gestión de la comunicación mediante el puerto serie/usb.

4.3. Lenguaje de programación. El boe-bot utiliza un interprete para su pro-


gramación, basado en el lenguaje pbasic. Este lenguaje es muy similar al Basic,
lo que le agrega mucho facilidad a la programación de estos equipos limitados en
procesamiento. La referencia para utilizar este lenguaje esta totalmente documen-
tada por parallax en el texto 5 que se halla en la bibliografía utilizada.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 14

Figura 5.1. Modificaciones al boe-bot, posición del módulo QTI.

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

5.5. Transferencia de los programas. Utilizando el IDE es muy sencillo,


puesto que posee un herramienta para “correr el programa” y lo transfiere al boe-
bot por medio del puerto USB como también puede ser a través del puerto serial
o una combinación de los mismos. La configuración es muy sencilla y no requiere
mucho más esfuerzo.
5.6. Programa para el stamp BS2. El siguiente es el programa definitivo es-
crito para controlar la posición de equilibrio vertical del boe-bot:

’ {$STAMP BS2}

’ {$PBASIC 2.5}
’ Licensed under GPLv2 o higher

’BS2 Mapa de las ent./sal. usadas.

’P3 Sensor de distancia frontal.

Leftservo CON 12 ’P12 Servo izquierdo

Rightservo CON 13 ’P13 Servo derecho

front VAR Word ’Distancia que mide el sensor de contraste.

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.

setpoint VAR Word ’Este dato es el setpoint del control PID.

kp CON 199/100 ’Valor de la constante de proporcional utilizada.

ki CON 399/100 ’Valor de la constante de integración utilizada.

kd CON 190/100 ’Valor de la constante del término derivativo utilizada.

error VAR Word ’Almacena el error que se va obteniendo.

p VAR Word ’Se almacena el ancho del pulso a sumar al estado estacionario.

offsetf VAR Word ’Desplaza la medición de la distancia.


G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 16

sum1 VAR Word ’Representa el error anterior al actual.

sum2 VAR Word ’Representa el error anterior al anterior del actual.

integrate VAR Word ’Término integral.

derivate VAR Word ’Término derivativo.

time CON 25/10000 ’Tiempo estimativo entre la obtención de cada término.

’------Comienzo del programa principal-------

’ Incialización de las variables.

offset = pulseZero

sum1 = 0

sum2 = 0

offsetf = 0

PAUSE 2000 ’Pausa de 2 segundos.

SetPoint = 170 ’Seteo manual de la posición a buscar.

offsetf = SetPoint

DO ’Bucle del programa principal.

GOSUB Measure ’Medición de la distancia.

GOSUB PID ’Algoritmo de control PID.

GOSUB Send_Pulse ’Modulación de pulso en los motores.

LOOP

’-------Subrutinas--------

PID:

IF (front <setpoint) THEN ’Hay que revisar el signo y actuar según para la corrección.

error = setpoint - front

integrate = (sum1 + sum2 - error) * time * 3 ’Término integral

IF error >sum1 THEN ’Revisamos el signo y calculamos el término derivativo.

derivate = (error - sum1) / time ’El término derivativo es en realidad la secante mínima
que podemos hallar

ELSE

derivate = (sum1 - error) / time

ENDIF

p = error * kp + integrate * ki + derivate * kd ’Control PID completo.

pulseLeft = p + offset ’Modulando el ancho del pulso según se necesite corregir

pulseRight = - p + offset ’hacia adelante o hacia atrás.

ENDIF

IF (front >setpoint) THEN ’Esta parte del programa realiza lo mismo que la anterior sólo que
adecua el signo

error = front - setpoint

integrate = (sum1 + sum2 + error) * time * 3

IF error >sum1 THEN


G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 17

derivate = (error - sum1) / time

ELSE

derivate = (sum1 - error) / time

ENDIF

p = error * kp + integrate * ki + derivate * kd

pulseLeft = p + offset

pulseRight = - p + offset

ENDIF

sum2 = sum1

sum1 = error

RETURN

’ Esta subrutina devuelve la distancia utilizando el sensor de contraste.

Measure:

HIGH 5

RCTIME 5,1,front

front = front - offsetf

RETURN

’ Esta subrutina se encarga de enviar el PWM correcto hacia los motores.

Send_Pulse:

PULSOUT Leftservo, pulseRight

PULSOUT Rightservo, pulseLeft

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.

6.2. Aceptación. El programa de control PID logró el objetivo, permitió re-


alizar el proyecto en tiempo y forma, además de sortear una gran cantidad de
inconvenientes.

8En este caso el seteo de los coeficientes de los términos PID.


G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 18

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

1.1. Posición de equilibrio del boe-bot self-balanced. 2


2.1. Diagrama de fuerzas que actúan sobre el péndulo invertido clásico. 3
2.2. Diagrama de flujo del control PID. 4
3.1. Diagrama simplificado del programa. 7
3.2. Diagrama de flujo del programa principal. 8
3.3. Rutina de medición. 8
3.4. Rutina de cálculos. 9
3.5. Rutina de modulación. 9
9Caso clásico de control.
10Sobre sistemas de control.
11Tipo de Arquímedes.
12Lógica difusa.
G.A.B.S. (GET ANOTHER BOE-BOT SELFBALANCED) 19

3.6. Un tren de pulsos de 1.3 ms hace rotar el servo a máxima velocidad en


sentido de las agujas del reloj. 9
3.7. Un tren de pulsos de 1.7 ms hace rotar el servo a máxima velocidad en
sentido contrario al de las agujas del reloj. 9
4.1. Boe-bot. 11
4.2. Tarjeta electrónica del boe-bot. 12
4.3. BS2, uno de los “cerebros” del boebot. 13
5.1. Modificaciones al boe-bot, posición del módulo QTI. 14

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.

G.A.B.S. (Get Another Boe-bot Selfbalanced)


© CopyLeft 2010, Nelson G. Lombardo.
Primera edición: Noviembre 2010.
Esta documentación esta licenciada bajo los términos de la Licencia GNU para
la Documentación Libre. Ver en http:/[Link]/copyleft/
This documentation is licensed under the terms of the GNU Free Documentation
License. See http:/[Link]/copyleft/

E-mail address: [Link]@[Link]


URL: [Link]
Current address: Neuquén Capital, Neuquén.

También podría gustarte