TFG - Jimenez Cortes, Carmen
TFG - Jimenez Cortes, Carmen
CONTROL DE UN VEHÍCULO
EQUILIBRISTA MEDIANTE UNA
RASPBERRY PI
MADRID
junio 2019
Copyright © 2019 by Carmen Jiménez Cortés
➢ La Universidad informará a los usuarios del archivo sobre los usos permitidos, y no
garantiza ni asume responsabilidad alguna por otras formas en que los usuarios hagan un
uso posterior de las obras no conforme con la legislación vigente. El uso posterior, más allá
de la copia privada, requerirá que se cite la fuente y se reconozca la autoría, que no se
obtenga beneficio comercial, y que no se realicen obras derivadas.
➢ La Universidad no revisará el contenido de las obras, que en todo caso permanecerá bajo
la responsabilidad exclusive del autor y no estará obligada a ejercitar acciones legales en
nombre del autor en el supuesto de infracciones a derechos de propiedad intelectual derivados
del depósito y archivo de las obras. El autor renuncia a cualquier reclamación frente a la
Universidad por las formas no ajustadas a la legislación vigente en que los usuarios hagan uso
de las obras.
➢ La Universidad adoptará las medidas necesarias para la preservación de la obra en un futuro.
➢ La Universidad se reserva la facultad de retirar la obra, previa notificación al autor, en
supuestos suficientemente justificados, o en caso de reclamaciones de terceros.
20 de …………………………...
Madrid, a ……….. Junio 2019
de ……….
ACEPTA
Giménez
Fdo………………………………………………
Motivos para solicitar el acceso restringido, cerrado o embargado del trabajo en el Repositorio
Institucional:
Declaro, bajo mi responsabilidad, que el Proyecto presentado con el título
Control de un vehículo mediante
.………..…………………………………………………………………….……
equilibrista
una Pi
……………………………………………………………………………………
Raspberry
31314
en la ETS de Ingeniería - ICAI de la Universidad Pontificia Comillas en el
Iota
Amund
a 06
Fdo.: Fecha: ……/ ……/ ……
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
Grado en Ingeniería en Tecnologías Industriales (GITI)
CONTROL DE UN VEHÍCULO
EQUILIBRISTA MEDIANTE UNA
RASPBERRY PI
MADRID
junio 2019
Copyright © 2019 by Carmen Jiménez Cortés
En primer lugar, agradecer el apoyo incondicional de mis padres, que confiaron siempre en
mí, incluso en esas primeras semanas de carrera, cuando yo me creía incapaz de sobrevivir ni
siquiera a los primeros exámentes intercuatrimestrales.
A todos los amigos y amigas que esta carrera me ha dado la oportunidad de hacer. Hemos
sido compañeros de fatigas en los momentos más duros, y también compañeros de celebración
cada vez que despedíamos un curso más.
A todo el personal docente que me han formado tanto personal como profesionalmente a lo
largo de estos cuatro años, para que pueda convertirme en una gran profesional en el futuro.
En especial a mi director de proyecto, Dr. Juan Luis Zamora Macho, que desde que comenzamos
con este trabajo de fin de grado, no ha dejado de plantearme retos para mostrarme todo aquello
que soy capaz de hacer. Trabajar con él ha hecho que este proyecto sea una gran experiencia,
de la cual me llevo infinidad de recuerdos, anécdotas y conocimientos, y ha hecho de él la
despedida perfecta para cerrar esta primera etapa.
Gracias también a mi familia de Crossfit G2, por proporcionarme esa vía de escape que
necesitaba en los momentos de mayor estrés. Gracias a mi entrenador, Pedro, que ha estado al pie
del cañón en cada temporada de exámenes, para asegurarse de que no perdía la cabeza.
No puedo olvidarme de José y Antonio, ya que sin ellos aún seguiría intentando averiguar
como ensamblar las piezas del vehículo. Ni tampoco puedo terminar estas palabras sin
mencionar a Javier García Aguilar, que siempre que ha tocado echar horas extra ha estado
presente, dispuesto a ayudar en lo que fuera posible.
Una última vez, gracias a todos, espero estar un pasito más cerca de convertirme en esa
ingeniera de quién podáis sentiros orgullosos.
The aim of this project has been to develop all the tools required for being able to control
the Balboa32U4 balancing vehicle, manufactured by the american company Pololu.
All the controls required both for the stabilization and navigation of the vehicle have
been developed. To achieve this goal, the control logic, and the specific drivers used by
the vehicle hardware have been programmed using Matlab-Simulink. Then, the controls
have been optimized and eventually implemented in the vehicle.
Introduction
A balancing vehicle is one of the examples of the classic control problem known as the
“Inverted Pendulum”. The vehicle balance is unstable, because if a perturbation shifts the vehicle
from its equilibrium position it drops, unless an external action prevents it.
Two magnetic encoders: Located at each motor shaft. These sensors have been the most
critical hardware element, as they are magnetic instead of optical encoders, they are less
accurate, and when the vehicle moves provide a too noisy signal, that made it necessary
to program advanced filtering and processing tools to get an usable signal.
Two lateral sensors: Using the FlightSense™ technology that measures the distance to an
object with 1 mm of precision. Using an infrared sensor, a distance sensor and an ambient
light sensor, estimates the distance to the object based on the amount of reflected light
and time of flight.
Three pushbuttons A, B and C: Used to go from one state to another within the state
machine.
Figure 1 shows how the vehicle looks like when all sensors, the microcontrollers and actuators
previously described are installed.
Objectives
The main objectives of this project have been:
Control system design: To develop a precise dynamic model of the vehicle, and to optimize
the control system and the state estimator.
Implementation in the vehicle: To design and to program the controls, the state estimator
and the state machine which enable the vehicle control.
Solution
The vehicle dynamic model that has been used is an state space model. To develop the model
multiple tests were performed of both with the hardware elements standalone, and with them
integrated in a balanced vehicle. For the latter, as a model was not available yet, an stabilization
control was tuned using many trial and error tests.
Only then, it was possible to identify the unknown dynamic parameters using simula-
tion.
As translation and pitch are an unstable dynamic, they have been uncoupled of the yaw
turning movement.
All controls have been designed as state feedback controls, but eventually, they become
cascade PIDs for their implementation.
In the control system, it has been a must to add an state estimator, due to the fact that one
of the state variables is impossible to be measured: the pitch angle. An extended Kalman filter
has been the estimator used.
All the blocks that build the control system have been integrated in one unique Simulink
diagram, which runs in the Raspberry Pi and enables the vehicle monitorization while it is
operating. Figure 2 shows this diagram.
Results
Figure 3 shows the results obtained from the identification of the vehicle translation and
pitch movement. The results are very satisfactory, as the simulated variables accurately match
the test actual measurements.
On Figure 3, the actual value, red colored, the simulated one, blue colored, are compared
for the pitch rate on the upper figure, and on the lower one, for the forward speed.
Similarly, the controls optimizing for translation and pitch, and yaw turn were also very
good.
Figure 4 shows the state variables for the PI-PD control simulation for the optimum
translation and pitch control. This control was implemented in the vehicle as well.
The first graphic shows the forward speed in cm/s, the second one shows the pitch rate in
°/s and the last one shows the pitch angle in °.
Additionally, the yaw turn control was optimized and implemented in the vehicle. The wall
follower control was optimized but due to time restrictions it was not possible to implement in
the vehicle.
Figura 3. Actual measurement, the simulated one and the error for the pitch rate and the forward speed.
Contributions
The main contributions of this project are:
Hardware implementation: An operating vehicle has been set to work, it can be used in
the Digital Control and Advanced Control laboratories.
Software programming: The developed software can be used in future projects that use
the same sensors and actuators.
Optimization: Complex and sofisticated tools for the model identification and for the
optimization of the control system and state estimator have been coded. Such tools might
be useful in future projects.
Implementation: Most of the designed controls have been implemented in the vehicle.
Este trabajo de fin de grado ha consistido en desarrollar todas las herramientas necesarias
para poder controlar el vehículo equilibrista Balboa32U4, de la empresa americana
Pololu.
Se han programado controles que permiten controlar tanto la estabilización del vehículo
como su navegación. Para ello ha sido necesario programar en Matlab-Simulink toda
la lógica de control, los drivers específicos para el hardware que compone el vehículo,
optimizar los controles y finalmente implantarlos en el vehículo.
Introducción
Un vehículo equilibrista constituye un ejemplo más del problema clásico de control
conocido como “Péndulo invertido”. El equilibrio del vehículo es inestable, porque si alguna
perturbación desplaza al vehículo de dicha posición se cae, salvo que se actúe externamente
para impedirlo.
Dos encoders magnéticos: Ubicados en el eje de cada motor. Estos sensores han sido
el elemento hardware más problemático, ya que al tratarse de encoders magnéticos y
no ópticos, son menos precisos, y durante el movimiento del vehículo proporcionaban
una medida demasiado ruidosa, por lo que fue necesario programar herramientas de
procesado y filtrado avanzadas para obtener una señal útil.
Dos motores de corriente continua de 6V, que son los principales actuadores del vehículo.
El aspecto del vehículo con todos los sensores, los dos microcontroladores y actuadores
previamente descritos se puede ver en la Figura 5.
Objetivos
Los objetivos fundamentales de este proyecto han sido:
Solución
El modelo dinámico del vehículo que se ha empleado es un modelo en espacio de estado.
Para obtener el modelo fue necesario llevar a cabo ensayos de los elementos hardware aislados,
y también del vehículo completo en equilibrio. Para este segundo tipo de ensayos, al no
disponerse de un modelo, fue necesario ajustar un control de estabilización por tanteo y
mediante numerosas pruebas.
Una vez realizados todos los ensayos, fue posible identificar los parámetros dinámicos
desconocidos mediante simulación.
Se han desacoplado los movimientos de avance y cabeceo del movimiento de giro, ya que el
primero se trata de una dinámica inestable. Todos los controles se han diseñado como controles
con realimentación del estado, pero posteriormente se transformaban en PIDs en cascada para
su implementación.
Todos los elementos que componen el sistema de control se han integrado en un único
diagrama de Simulink, el cual se ejecuta en la Raspberry Pi y permite monitorizar el vehículo
durante su funcionamiento. Este diagrama se muestra en la Figura 6.
Resultados
Los resultados que se obtuvieron de la identificación del movimiento de avance y cabeceo del
vehículo se pueden ver en la Figura 7. Los resultados son muy satisfactorios, ya que las variables
simuladas se corresponden de una forma bastante precisa con las reales medidas durante el
ensayo.
Figura 7. Medida real, la generada por el simulador y el error entre ambas para la velocidad angular de
cabeceo y la velocidad lineal de avance.
Lás gráficas que aparecen en la Figura 7 son las siguientes: En la figura superior se comparan
el valor real, en color rojo, y el simulado, en color azul, de la velocidad angular de cabeceo, y
en la figura inferior, los valores real y simulados de la velocidad lineal de avance.
En la Figura 8 se muestra el valor de las variables de estado en simulación del control PI-PD
de avance y cabeceo óptimo. Este control también se llegó a implementar en el vehículo.
La primera gráfica se corresponde con la velocidad lineal de avance en cm/s, la segunda con
la velocidad angular de cabeceo en º/s y la tercera con el ángulo de cabeceo en º.
Aportaciones
Las principales aportaciones de este proyecto son:
Programación del software: Que podrán resultar de utilidad para futuros proyectos que
utilicen los mismos sensores y actuadores.
Resumen XV
1. Introducción 1
1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4. Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Estado del Arte 7
2.1. El Péndulo Invertido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Soluciones al problema de control . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3. El EKF y la navegación autónoma . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3. Hardware 11
3.1. Descripción del vehículo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2. Raspberry Pi 3B+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3. ATMega32U4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.2. Comunicación entre los dos microcontroladores . . . . . . . . . . . . . . . 17
3.4. IMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4.2. Modo de empleo de la IMU . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4.3. Procesamiento de la información . . . . . . . . . . . . . . . . . . . . . . . 18
3.5. Motores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5.2. Funcionamiento del driver DRV8838 . . . . . . . . . . . . . . . . . . . . . 21
3.6. Sensores laterales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.6.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.6.2. Comunicación con la Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . 24
3.6.3. Modo de empleo de la información de distancia . . . . . . . . . . . . . . . 24
3.7. Encoders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.7.1. Descripción y funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.7.2. Estimación de la velocidad de avance y velocidad angular de guiñada . . . 26
3.7.3. Corrección de la medida de los encoders . . . . . . . . . . . . . . . . . . . 28
6. Resultados 73
6.1. Identificación de los parámetros de los motores . . . . . . . . . . . . . . . . . . . 74
6.1.1. Medida de la resistencia interna del motor . . . . . . . . . . . . . . . . . . 74
6.1.2. Medida de la relación Ganancia-Tensión-Incremento de encoder . . . . . . 74
6.2. Resultados de la identificación del movimiento de avance y cabeceo . . . . . . . . 78
6.3. Resultados de la identificación del movimiento de giro . . . . . . . . . . . . . . . 80
6.4. Resultados de la identificación del ruido . . . . . . . . . . . . . . . . . . . . . . . 81
6.5. Iteraciones del control del vehículo . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.5.1. Control P-PD para el avance y cabeceo . . . . . . . . . . . . . . . . . . . . 82
6.5.2. Control PI-PD para el avance y cabeceo . . . . . . . . . . . . . . . . . . . . 82
6.6. Controles optimizados mediante simulación . . . . . . . . . . . . . . . . . . . . . 83
6.6.1. Control P-PD para los movimientos de avance y cabeceo . . . . . . . . . . 83
6.6.2. Control PI-PD para los movimientos de avance y cabeceo . . . . . . . . . . 83
6.6.2.1. Caso 1: Velocidad de avance nula . . . . . . . . . . . . . . . . . . 83
6.6.2.2. Caso 2: Escalones en la referencia de velocidad de avance . . . . 85
6.6.3. Control de guiñada para “Navegación Libre” . . . . . . . . . . . . . . . . . 88
7. Conclusiones, aportaciones y futuros desarrollos 91
7.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.2. Aportaciones y objetivos alcanzados . . . . . . . . . . . . . . . . . . . . . . . . . 92
7.3. Futuros desarrollos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
7.3.1. Optimización del sistema de control . . . . . . . . . . . . . . . . . . . . . . 93
7.3.2. Control para seguimiento de linea . . . . . . . . . . . . . . . . . . . . . . . 93
7.3.3. Navegación autónoma mediante cámaras . . . . . . . . . . . . . . . . . . . 93
7.3.4. Control para elevar al vehículo desde posición horizontal hasta la de equilibrio 93
7.3.5. Diseño 3D de un nuevo soporte para los sensores . . . . . . . . . . . . . . 94
A. Filtro de Kalman 95
A.1. Modelado en Espacio Estado Lineal . . . . . . . . . . . . . . . . . . . . . . . . . . 95
A.2. Filtro de Kalman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
A.3. Proceso de cálculo del Filtro de Kalman . . . . . . . . . . . . . . . . . . . . . . . 98
B. Configuración de la Raspberry Pi 3B+ 99
B.1. Raspi-Config para habilitar las comunicaciones . . . . . . . . . . . . . . . . . . . 99
B.1.1. Comunicación I2C a 400 kHz . . . . . . . . . . . . . . . . . . . . . . . . . 100
C. Librerías de Arduino 101
C.1. Librerías a instalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Referencias 103
HZ Hercio (Hertz)
IR Infrarrojos
PID Proporcional-Integral-Derivativo
En este capítulo de introducción se presenta el proyecto fin de grado que lleva por
título Control de un vehículo equilibrista mediante una Raspberry Pi. En la Sección 1.1 se
exponen los motivos por los cuales se decidió realizar este proyecto. A continuación, en
la Sección 1.2, se plantean cuáles han sido los objetivos fundamentales del proyecto y
en qué ha consistido cada uno de ellos. Posteriormente en la Sección 1.4 se describen
cuáles han sido las tareas para llegar a alcanzar dichos objetivos. En la Sección 1.3 se
expresan qué recursos hardware y software han sido utilizados a lo largo del proyecto,
tanto para constituir el vehículo como para programar el código que se ejecuta en los
dos microcontroladores disponibles.
1.1. Motivación
Las motivaciones para realizar este trabajo de fin de grado son ampliar los conocimientos
adquiridos en asignturas previas, participar en un proyecto totalmente multidisciplinar y
proporcionar una nueva herramienta que pueda ser empleada en los laboratorios de asignatura
del área de control en la universidad.
El vehículo equilibrista es un ejemplo más del problema clásico de control conocido como
Problema del péndulo invertido. Este problema consiste en mantener la verticalidad de un objeto
en una posición de equilibrio inestable. Por equilibrio inestable se entiende aquella situación
en la que si cualquier perturbación desplaza al objeto de dicha posición de equilibrio, este es
incapaz de recuperar dicha posición salvo que haya alguna actuación externa.
Para este trabajo de fin de grado se ha elegido como planta un vehículo equilibrista, que
mediante la acción de los motores debe ser capaz de corregir la inclinación del vehículo para que
permanezca en posición vertical. El vehículo elegido es el Balboa32U4 de la empresa americana
Pololu. Este vehículo no se había utilizado antes en la universidad, lo que suponía un desafio
atractivo.
en otras asignaturas cursadas a lo largo de estos cuatro años, entre las que se podrían destacar
las siguientes:
Finalmente, una motivación adicional para llevar a cabo este proyecto fue el poder
proporcionar una nueva herramienta para los laboratorios de las asignaturas de Regulación
Automática, Control Digital y Control Avanzado, e incluso servir de punto de partida para
futuros trabajos de fin de grado y máster.
1.2. Objetivos
Los tres grandes objetivos planteados para este proyecto han sido:
intervienen en dichas ecuaciones no aparecen en las fichas técnicas de los componentes ni del
vehículo, por lo que fue necesario llevar a cabo diferentes ensayos que permitieran caracterizar
completamente a este. Tanto las ecuaciones como los ensayos realizados se encuentran recogidos
en el Capítulo 4 de este documento.
Este segundo objetivo aúna el diseño de todos los elementos, que junto con la planta, forman
el lazo de control.
El diseño del control empleado se basa en la realimentación del estado, que posteriormente
se transforma en dos controles PID en cascada para su implantación, como se explica en el
Capítulo 5.
Una vez diseñado el lazo de control, ha sido necesario realizar numerosos ensayos que
permitieran analizar las discrepancias entre el comportamiento real y simulado del vehículo,
para así corregir y mejorar el modelo, o modificar las dinámicas en lazo cerrado fijadas en el
control para su optimización. Los ensayos y los resultados obtenidos se encuentran recogidos
en el Capítulo 6.
1.3. Recursos
Al tratarse de un proyecto de mecatrónica emplea numerosos elementos hardware, que
necesitan ser integrados con el software que permita su utilización y la implantación de la lógica
de control.
Recursos hardware
Debido a la complejidad de la planta del vehículo equilibrista han sido necesarios numerosos
elementos hardware que permitieran controlar el vehículo de la forma deseada. Estos recursos
han sido, fundamentalmente, los siguientes:
Dos motores 75:1 Micro Metal Gear Motor HPCB 6V, Sección 3.5. Básicamente son motores
de corriente continua con escobillas de carbono. En la Sección 3.5.2 se describe el
funcionamiento del driver de estos motores.
Dos sensores de distancia VL6180X, Sección 3.6, que permiten medir distancias a objetos
ubicados entre 5 y 200 milímetros.
Multiplexador de canales I2C TCA9548A, necesario para poder leer los dos sensores de
distancia, ya que tienen la misma dirección en el bus de I2C. El uso de este multiplexador
se detalla en la Sección 3.6.
Dos encoders magnéticos, o codificadores de pulsos incrementales, Sección 3.7, con sus
respectivos sensores de efecto Hall. Se trata de dos encoders absolutos, con dos canales
ubicados en el eje de giro de los motores, de tal forma que permiten determinar así la
velociad y sentido de giro de cada motor.
Piezas auxiliares fabricadas mediante impresión 3D. Para poder sujetar los sensores de
distancia en el lateral del vehículo, fue necesario fabricar un separador y un soporte, que
permitieran conectar ambos sensores al multiplexador de I2C y este a la extensión de
placa de la Raspberry Pi.
Recursos software
Arduino IDE: Se ha empleado para programar la estructura que intercambian, a través del
bus I2C, la Raspberry Pi y el ATMega32U4. En la Sección 3.3.2 se explican los diferentes
campos que componen la estructura.
SolidWorks: Para el diseño de las piezas en 3D y la obtención los ficheros .STL para su
posterior impresión.
Recursos adicionales
Para obtener todos los parámetros físicos del vehículo y poder utilizar el resto de sensores
y actuadores, se han requerido todas las fichas técnicas disponibles del vehículo y los
componentes.
Finalmente, para conocer el estado del arte del problema de control del Péndulo Invertido,
Capítulo 2, se han utilizado numerosos documentos de IEEE, revistas de Regulación
Automática y Control de Sistemas, presentaciones en conferencias, y publicaciones de
otras universidades, que se entuentran el la Bibliografía de este documento.
1.4. Metodología
Dada la extensión del proyecto, para satisfacer todos los objetivos planteados en la
Sección 1.2, ha sido necesario tener una planificación clara y ordenada desde el primer momento.
Aún así fue necesario reajustarla conforme iban apareciendo inconvenientes y dificultades.
La tarea más extensa ha sido la obtención del modelo de la planta, pues se comenzó con
ello en los primeros días del proyecto y hasta el último momento, no se ha dejado de mejorar y
perfeccionar dicho modelo. Durante el primer mes se reunió toda la documetación disponible
tanto del vehículo como de los sensores y los actuadores, para poder empezar a caracterizar
parámetros clave del modelo. En los meses siguientes se comenzaron a realizar ensayos para
obtener los parámetros pendientes de identificar, empezando por ensayos a elementos hardware
aislados, como los necesarios para obtener las relaciones tensión-velocidad de giro o ganancia
aplicada-tensión de los motores, hasta que finalmente se pudieron realizar pruebas con el
vehículo en equilibrio para conseguir los valores de las inercias en los tres ejes y los valores de
las fricciones viscosas. Todos estos ensayos se encuentran recogidos en el Capítulo 6.
Una vez caracterizados los elementos hardware que componían el vehículo, se pasó a
integrarlos y caracterizar los parámetros del robot completo, como las inercias del cuerpo en
los ejes Y y Z. Para obtener datos que permitieran conocer algunos de estos parámetros, era
necesario mantener al vehículo en equilibrio y registrar las medidas de la IMU y los encoders.
Por lo tanto, se comenzó a diseñar la máquina de estados, que controla las tareas que deben
llevarse a cabo en cada momento, desde el encendido del robot hasta que este se deja libre en
equilibrio.
Como en esta etapa del proyecto aún no se disponía de un modelo lo suficientemente preciso
como para poder utilizarlo para simular y optimizar el control, se recuperaron los archivos
utilizados durante el laboratorio de Control Digital, se estudiaron los valores de las ganancias
del regulador que habían dado un buen resultado con el vehículo de Lego y por observación y
comparación se dedujeron unas primeras ganancias que pudieran funcionar para el Balboa32U4.
Evidentemente este control inferido a partir de otro robot tan distinto, no era adecuado, pero
proporcionó un punto de partida para reajustar dichas ganancias mediante ensayos hasta que el
vehículo fuera capaz de equilibrarse, tanto con velocidad de avance nula o constante.
Una vez se consiguió tener el vehículo equilibrado, se pudieron registrar los últimos ensayos
necesarios para identificar la dinámica del vehículo por completo.
Posteriormente, se optó por una herramienta más sofisticada para la estimación del estado:
un filtro extendido de Kalman, Sección 5.4.4. La implementación del EKF se realizó de
forma escalonada, ya que los pesos de la matriz de corrección y los ruidos eran inicialmente
Otro de los grandes objetivos de este proyecto era conseguir que el vehículo completara una
vuelta a uno de los circuitos disponibles en los laboratorios de la universidad, lo que planteaba
nuevas dificultades: el vehículo debía ser capaz de seguir una referencia de distancia y ángulo
respecto de la pared, para poder seguir la pared, y además debía ser capaz de subir y bajar las
rampas de forma equilibrada.
Como paso previo, fue necesario diseñar un control de navegación. Este control permite que
el vehículo se desplace en línea recta o gire siguiendo una determinada referencia de guiñada.
Se diseñaron dos controles:
Control PI: Para garantizar error de seguimiento a referencia nulo en régimen permanente.
Para que el vehículo siguiera la pared, primero se instalaron los dos sensores de distancia en
el lateral izquierdo del vehículo. Esto supuso tener que diseñar y fabricar las piezas en 3D que
sujetaban los sensores al lateral.
Una vez instalados los sensores, se amplió el diagrama de simulink, la máquina de estados
y la lógica de control para que a partir de sus medidas, se estimara la distancia y el ángulo
respecto de la pared. De nuevo se utilizó un control por realimentación del estado, que se
transformó en dos PIDs en cascada para su implementación. En esta ocasión se ha utilizado un
control P-PD en lugar de un PI-PD porque cuando el vehículo toma las curvas, es conveniente
que se pegue algo más a la pared que cuando baja por la rampa.
Antes de finalizar esta sección de metodología, cabe mencionar que una parte no despreciable
de la duración de este proyecto se ha invertido en desarrollar esta memoria descriptiva y los
anexos previos que se tuvieron que entregar.
A lo largo de este capítulo se describe el estado del arte del proyecto. En primer lugar,
en la Sección 2.1, se introduce el problema de control, diferentes sistemas en los que se
plantea y una breve reflexión acerca de su importancia dentro de la teoría de control.
Finalmente, en la Sección 2.3 se muestran otras posibles aplicaciones del Filtro Extendido
de Kalman dentro de la navegación autónoma de vehículos.
Este problema consiste en controlar un sistema dinámico inestable que tiene una posición
estable, cuando el péndulo se ha caído o se encuentra en posición horizontal, y una posición
de equilibrio inestable, que es la que se desea mantener, cuando el péndulo se encuentra
en vertical. Por equilibrio inestable se quiere expresar aquella situación en la que si una
perturbación desplazara al cuerpo, este saldría de dicha posición de equilibrio y no sería capaz
de recuperarla salvo que se actuara externamente.
Este problema se presenta en plantas muy diversas, desde una simple varilla sujeta por uno
de sus extremos [1], o la propia acción de caminar de un humano, hasta plantas mucho más
complejas, como triples péndulos, que suponen controlar tres brazos articulados entre sí [2], o
también en aplicaciones industriales, como en el equilibrado de un cohete durante la fase de
lanzamiento, en el cual mediante las toberas laterales se corrigen las posibles desviaciones en el
ángulo.
Dentro del sector docente, la empresa americana Quanser, líder mundial en equipamiento
para laboratorios de control, mecatrónica y robótica oferta dos péndulos invertidos distintos.
El primero se trata de una varilla sujeta sobre un carro, que se mueve mediante un motor de
corriente continua y un sistema de piñón-cremallera, usando exclusivamente el movimiento de
traslación para equilibrarlo, y el segundo consiste en cambio, en un servo rotatorio al cual se le
ha acoplado un eje y mediante movimientos de rotación trata de mantenerlo en equilibrio. Los
sensores fundamentales empleados en ambos sistemas son encoders, que permiten controlar
tanto la rotación de la varilla como el avance del carro o la rotación del servo.
Pese a todo ello, la planta más extendida para el estudio del problema del Péndulo Invertido
actualmente consiste en vehículos equilibristas, como el planteado en el libro [3], donde
se recogen todas las posibles estrategias de control que podrían ser útiles para este tipo de
vehículos en exclusivo.
En [4] se pone de manifiesto por qué pese a ser un problema tan ampliamente estudiado,
el control de un péndulo invertido sigue actualmente siendo un objetivo desafiante para
investigadores y educadores. Y es que permite ilustrar grandes retos vigentes en la teoría de
control, tales como:
Conseguir sacar un cuerpo de su posición de equilibrio estable, para llevarlo a una posición
de equilibrio inestable. La transición entre estas dos posiciones no es linealizable, por
lo que la matemática requerida para su modelado dificulta notablemente el diseño del
control.
Conseguir mantener el equilibrio inestable del péndulo, que permite explicar a estudiantes
universitarios en qué consiste la linealización de sistemas inestables en torno a un punto
de operación y el control por posicionamiento de polos.
Gracias al problema del péndulo invertido, en robótica se han conseguido grandes avances
en los últimos años: El desarrollo de vehículos autoequilibrados y el modelado y control de la
acción de caminar en humanoides.
Vehículos autoequilibrados
Entre los cuales cabe destacar el famoso “Segway”, que plantea una nueva alternativa de
movilidad en las ciudades, y también un vehículo auxiliar para los cuerpos de seguridad en
interiores.
También son conocidos vehículos equilibristas como el JOE [5], desarrollado por la
universidad de Lausanne en Suiza o el I-PENTAR [6], que es además un pseudo asistente
humanoide.
Humanoides
que responden dinámicamente a estos modelos son el WABOT-1, que fue el primer humanoide
existente, desarrollado por la universidad de Waseda en 1973, la Androide HRP-4C de la
empresa japonesa Honda [8], o el WABIAN-2R [9], desarrollado también por la universidad de
Waseda y que se trata del humanoide más complejo diseñado hasta la fecha.
El control por realimentación del estado no es la única solución posible al problema, desde
aproximadamente 2010 hasta la actualidad la mayoría de las publicaciones se centran en las
siguientes dos corrientes: el uso de redes neuronales en el lazo de control junto con controladores
clásicos, tales como el PID, y sobre todo, el diseño de controles de lógica difusa. Esta tendencia
dentro de las estrategias de control es un claro ejemplo de la línea evolutiva de la investigación
tecnológica de los últimos años, que busca soluciones basadas en Machine Learning, Inteligencia
Artificial, etc., para conseguir sistemas cada vez más robustos y autónomos.
Entre el uso de redes neuronales destacan estudios como el de [13]. Que en lugar de invertir
tiempo y recursos en conocer en profundidad las dinámicas de la planta, para implantar un
controlador PID convencional, proponen utilizar una red neuronal que controle un sistema de
única entrada y múltiples salidas para aplicarlo a la estabilización del péndulo invertido y así
prescindir del modelo del vehículo.
Se pueden encontrar trabajos basados en el modelo predictivo grey para controlar el péndulo
[15]. La teoría del control predictivo grey se emplea para mejorar la labor del controlador en
sistemas sin la suficiente información o con propiedades altamente no lineales. El objetivo de
esta investigación es mediante la combinación del modelo predictivo grey y un controlador
Proporcional-Derivativo (PD), conseguir elevar el péndulo desde su posición estable (vertical
hacia abajo) hasta la posición vertical invertida.
Otro acercamiento a este problema, que dista mucho de los anteriormente planteados
y del elegido para este proyecto de fin de grado, es [16] quienes decidieron controlar un
doble péndulo invertido mediante las técnicas de transformación lineal fraccionaria y técnicas
politópicas, que son parte de los denominados controles por planificación de ganancias (Linear
Parameter- Varying control, LPV). Este tipo de controles constituyen una de las formas más
simples e intuitivas de control adaptativo.
El uso del EKF está altamente extendido en proyectos de navegación autónoma. En [17] se
utilizó junto con las técnicas SLAM (Simultaneous Localization and Mapping) para el control
de la navegación autónoma de un coche. En este proyecto no se conoce con anterioridad el
mapa del recinto por el que se va a navegar, por lo que el EKF estima puntos de referencia y
localizaciones seguras a medida que el vehículo se desplaza.
Otro ejemplo sería [18], donde se empleó un EKF para la navegación autónoma de un camión
de carga y descarga, bajo tierra. El EKF se encargaba de estimar el movimiento cinemático del
vehículo, incluyendo el deslizamiento con el suelo, a partir de las medidas de un sensor láser
ubicado en el cojinete y los vértices del mapa de polilínea del terreno.
En este capítulo se describen cuáles han sido los elementos hardware empleados en el
proyecto, su funcionalidad y cómo se utilizan en el vehículo.
En primer lugar, en la Sección 3.1 se realiza una breve introducción al robot y a todos
los elementos hardware que lo componen. A continuación, se explican en detalle
el funcionamiento de los dos microcontroladores, comenzando por la Raspberry Pi,
Sección 3.2, que es la tarjeta encargada de las tareas de mayor carga computacional,
tales como la gestión de las comunicaciones y la lógica de control. Después se describe el
ATMega32U4, Sección 3.3, cuya función consiste en interactuar con los sensores y los
actuadores.
La IMU, Sección 3.4, proporciona las medidas de las aceleraciones lineales y las
velocidades angulares necesarias para el control.
Los motores, Sección 3.5, su driver y la aplicación de los valores del mando
calculados por el control.
Los sensores laterales, Sección 3.6, y cómo estimar a partir de sus medidas la
distancia a la pared y el ángulo respecto de la misma.
Adicionalmente, se ha soldado una extensión de placa que permite conectar dos sensores
laterales, indispensables para que el vehículo sea capaz de seguir la pared. Los sensores se
encuentran sujetos al lateral del vehículo. El aspecto del vehículo una vez se han incorporado
todos los elementos adicionales se muestra en la Figura 3.2.
Figura 3.2. Balboa 32U4 con todos los elementos hardware empleados.
Dos encoders magnéticos, ubicados en los ejes de los motores, Figura 3.15. Estos encoders
permiten medir la velocidad y sentido en el que giran los motores, para posteriormente
estimar la velocidad de avance y la velocidad de guiñada del vehículo.
Dos sensores de distancia VL6180X, Figura 3.12, que devuelven la distancia en milímetros
en un rango de 5 a 200 milímetros. Gracias a esta información se puede calcular tanto la
distancia a la pared del circuito como el ángulo respecto de la misma.
Tres pulsadores ubicados en la parte inferior de la placa ATMega, como se puede ver en la
Figura 3.4. Estos pulsadores se emplean como señales digitales de entrada en la máquina
de estados.
Dos motores de corriente continua con escobillas de carbono ("High Power Long Life
Carbon Brushes", HPCB) de 6 V, Figura 3.7.
Tres leds: amarillo, verde y rojo. Ubicados también en el ATMega, Figura 3.4.
Las comunicaciones entre los dos microcontroladores, los sensores y los actuadores se realiza
a través del bus de comunicaciones I2C, siendo la Raspberry Pi el máster de la comunicación, y
todo el resto de elementos esclavos I2C.
Desde 2012, cuando la primera Raspberry Pi salió al mercado con un único núcleo, 700 MHz
de CPU y 256 MB de RAM, hasta hoy en día el dispositivo ha evolucionado exponencialmente,
y es por ello que se pueden encontrar en todo tipo de proyectos de electrónica, automática y
domótica, tanto a nivel docente como industrial.
En este proyecto se emplea el último modelo disponible: la Raspberry Pi 3B+, Figura 3.3,
que cuenta con un procesador de cuatro núcleos de 64 bits, 1.4 GHz de CPU y 1GByte de
memoria SDRAM. Estas especificaciones, sus prestaciones de conectividad de red, y su pequeño
tamaño (85.60mm ⇥ 53.98mm), convierten a la Raspberry Pi 3B+ en el microcontrolador ideal
para soportar la gran parte de la carga computacional del proyecto.
El código de todas ellas se encuentra recogido en diferentes scripts de Matlab, que se integran en
un mismo Simulink, el cual es volcado en la Raspberry Pi, donde se ejecutará constantemente
hasta que el usuario decida finalizar el proceso. En el proceso de compilado del diagrama de
Simulink se genera el código C que interpretará la Raspberry Pi.
3.3. ATMega32U4
3.3.1. Descripción
El microcontrolador ATMega32U4 es un microcontrolador de la familia AVR, de la empresa
americana Atmel. La línea ATmega se caracteriza por tener una memoria flash programable,
entre 28 y 100 pines y numerosos conjuntos de instrucciones y periféricos. Concretamente, el
ATMega32U4, Figura 3.4, empleado en este proyecto dispone de 32 KBytes de memoria flash y
2.5 KBytes de RAM a 16 Mhz. Por ello, al tratarse de un dispositivo de menor capacidad que la
Raspberry Pi, se le han asignado las tareas más simples:
Interacción con los los encoders, Figura 3.15, aunque el procesamiento de su información
se realiza en la Raspberry Pi.
pertenecen a dos librerías propias del fabricante, Pololu, que han sido expresamente diseñadas
para el Balboa 32U4. Estas librerías son:
Balboa32U4.h: Recoge las funciones necesarias para poder interacturar con el hardware
implementado en la tarjeta del Balboa.
El programa consiste en definir, escribir y leer una estructura que recoge toda la información
necesaria para interacturar con el resto de elementos hardware del vehículo. Los campos que se
han incluido en esta estructura son:
Batería en mV: Campo de tipo int16 escrito por el ATMega, que registra el valor en tiempo
real de la tensión proporcionada por las seis baterías que utiliza el robot. Es un dato de
gran importancia ya que al disponer de tantos elementos hardware, este proyecto tiene
un consumo bastante elevado. Permite así disponer de una alarma por batería baja, que
detenga la operación del vehículo equilibrista.
Cuentas del encoder izquierdo: Elemento de tipo int16 escrito por el ATMega. Almacena
el valor absoluto de las cuentas del encoder izquierdo. El proceso de lectura del mismo se
explica en detalle en la Sección 3.7.
Cuentas del encoder derecho: Elemento de tipo int16 escrito por el ATMega. Almacena
el valor absoluto de las cuentas del encoder derecho. El proceso de lectura del mismo se
explica en detalle en la Sección 3.7.
Error de lectura del encoder izquierdo: Dato de tipo boolean escrito por el ATMega,
habitualmente denominado "Flag". Se pone a uno cuando se ha producido algún error
en la medida del encoder izquierdo, como por ejemplo, que ambos canales del encoder,
Figura 3.16, hayan cambiado de valor a la vez y por tanto no es posible determinar en
qué dirección se encuentra girando el motor.
Error de lectura del encoder derecho: Dato de tipo boolean escrito por el ATMega, habi-
tualmente denominado "Flag". Se pone a uno cuando se ha producido algún error en la
medida del encoder derecho.
Leds amarillo, verde y rojo: Elementos de tipo boolean escritos por la Raspberry Pi. El
ATMega encenderá los leds para los que la Raspberry Pi haya escrito un 1 en su posición
dentro de la estructura.
Tensión a aplicar al motor izquierdo: Dato tipo int16 entre -300 y +300. Multiplicando
este dato por 0.018, se obtiene la tensión que el ATMega debe aplicar al motor izquierdo.
Tensión a aplicar al motor derecho: Dato tipo int16 entre -300 y +300. Multiplicando
este dato por 0.018, se obtiene la tensión que el ATMega debe aplicar al motor derecho.
Pese a que la estructura definida en Arduino dispone de diferentes tipos de elementos, al ser
enviada a la Raspberry Pi, es recibida como una estructura de dieciocho elementos tipo uint8,
por lo que la información resulta organizada de la siguiente forma:
Nº Byte Campo de la estructura
0 Batería mV LSB
1 Batería mV MSB
2 Encoder izquierdo LSB
3 Encoder izquierdo MSB
4 Encoder derecho LSB
5 Encoder derecho MSB
6 Error lectura encoder izquierdo
7 Error lectura encoder derecho
8 Pulsador A
9 Pulsador B
10 Pulsador C
11 Led amarillo
12 Led verde
13 Led rojo
14 Tensión motor izquierdo LSB
15 Tensión motor izquierdo MSB
16 Tensión motor derecho LSB
17 Tensión motor derecho MSB
Esta nueva distribución de la información pone de manifiesto la necesidad de reconstruir los
datos del tipo int16 para obtener el valor real. Con este fin se ha utilizado la función typecast de
Matlab, que recibe como entrada los dos bytes que definen el dato, concatenados en un único
vector [LSB MSB], y devuelve el número resultante en 16 bits.
3.4. IMU
3.4.1. Descripción
La unidad de medidas inerciales, o más comúnmente llamada IMU(Inertial Measurement
Unit), consiste en un giróscopo y un acelerómetro de tres ejes. Ambos se encuentran integrados
en el chip LSM6DS33. Este CI dispone de múltiples opciones de escala:
En este proyecto se han utilizado las escalas de ±2 g y ±125 dps, para así obtener la máxima
resolución.
El CI LSM6DS33 también incluía una serie de filtros digitales paso bajo, que se configuraron a
la frecuencia de corte menos restrictiva (mayor frecuencia de corte), para no alterar las medidas
crudas y así poder filtrar las mismas con los filtros programados en Matlab-Simulink.
La IMU se muestrea cada milisegundo, para así poder calcular un valor medio de cada
medida con diez muestras. Este dato será de gran utilidad al control.
Como se puede ver en la Figura 3.5, los ejes por defecto de la IMU no se corresponden con
los ejes del sistema de referencia del vehículo, Figura 3.6, por lo que las medidas recibidas a
través del bus I2C deben ser transformadas para obtener las medidas en los ejes del vehículo.
Esta transformación consta de los siguientes dos pasos:
Acelerómetro
2 3 2 3 2 3
ax 0 0 1 ax
6 7 6 7 6 7
4 ay 5 = 4 0 1 05 · 4 a y 5 (3.1)
az 1 0 0 az
Balboa0 IM U
Giróscopo
2 3 2 3 2 3
gx 0 0 1 gx
6 7 6 7 6 7
4 gy 5 = 4 0 1 05 · 4 g y 5 (3.2)
gz 1 0 0 gz
Balboa0 IM U
Siendo [ax ay az ]Balboa0 y [gx gy gz ]Balboa0 las medidas de la IMU expresadas en el sistema de
referencia del vehículo si estuviera en equilibrio en posición vertical.
Rotación del sistema de referencia Entre la posición de equilibrio del vehículo y la posición
vertical de la IMU existe un ángulo de 15º. Por lo tanto, se aplica la siguiente matriz de
rotación tanto al acelerómetro como al giróscopo:
2 3 2 3T 2 3
X cos(✓) 0 sen(✓) X
6 7 6 7 6 7
4Y 5 =4 0 1 0 5 · 4Y 5 (3.3)
Z sin(✓) 0 cos(✓) Z
Balboa Balboa0
Siendo [XY Z]Balboa los valores de la lectura de la IMU en el sistema de referencia definitivos
del vehículo, y ✓ el ángulo de inclinación de la IMU con respecto a la posición de equilibrio
(15º).
Una vez se han filtrado y transformado las medidas, se almacenan en el bus de control, para
que puedan ser empleadas por el EKF y el resto de la lógica del control.
3.5. Motores
3.5.1. Descripción
Los actuadores del Balboa 32U4 son dos motores HPCB de 6V, Figura 3.7. Entre todos los
modelos disponibles se ha elegido el modelo 75:1, que proporciona una relación de transmisión
de 75.81:1, y que tiene una resistencia interna de 4 ⌦.
Entre las especificaciones clave destaca que sin carga, alimentado a 6 V, gira a una velocidad
de 430 rpm, consumiendo una corriente de 100 mA. Con el motor bloqueado ofrece un par de
1.1 kg ⇤ cm y consume una corriente de 1.5 A.
Pin digital 15: Controla la dirección de giro del motor derecho. A nivel bajo, mueve el
motor en sentido positivo y a nivel alto en dirección contraria.
Pin digital 16: Controla la dirección de giro del motor izquierdo. A nivel bajo, mueve el
motor en sentido positivo y a nivel alto en dirección contraria.
Pin digital 9: Controla la velocidad de giro del motor derecho, es el encargado de modular
el PWM generado con el Timer 1 del ATMega32U4.
Pin digital 10: Controla la velocidad de giro del motor izquierdo mediante la modulación
del PWM generado con el Timer 1 del ATMega32U4.
El setido positivo de giro del motor se corresponde con aquella que haría avanzar al vehículo en
el sentido en el que se encuentra ubicada la tapa de la batería.
En la Figura 3.8 aparece el driver que controla uno de los dos motores. Se trata de un Puente
en H formado por cuatro FETs de pequeña resistencia parásita, alrededor de 2.8 m⌦, y con un
diodo de recirculación. Soportan una corriente máxima de 1.8 A de corriente directa. Este driver
está especialmente indicado para alimentar cargas tales como cámaras, lentes DSLR, robótica,
juguetes, equipos médicos y cargas similares que se comporten como solenoides.
La lógica de control de los cuatro FETs se integran en un único circuito. Además, dispone
de elementos adicionales de protección frente a bloqueos por infratensión, sobrecorriente o
apagado por sobretemperatura. Estas protecciones saltan, respectivamente, cuando la tensión
de alimentación (VCC ) es menor a 1.7 V, IOU T es superior a 1.9 A, y cuando la temperatura
excede los 150ºC.
Los diferentes círculos de color rosa que aparecen en la Figura 3.10 hacen referencia a todos
los retrasos que se producen en la conmutación del estado de los diferentes pines.
Una implementación de este driver en una placa, como la del ATMega32U4 se puede observar
en la Figura 3.11
Como sensores se han empleado los VL6180X, de la empresa STMicroelectronics, Figura 3.12.
Estos sensores incorporan una tecnología patentada por STMicroelectronics, denominada
FlightSense™. Esta tecnología permite medir distancias absolutas independientemente de la
reflectancia del objeto a medir, en lugar de estimar la distancia midiendo la cantidad de luz
reflejada desde el cuerpo, se mide el tiempo que tarda la luz en viajar al cuerpo y volver al
sensor. Este tiempo es conocido como tiempo de vuelo. Gracias a ello, el color o la superficie del
objeto dejan de ser posibles fuentes de error en la medida.
Para llevar a cabo el proceso de medida previamente descrito, VL6180X integra en un mismo
CI un emisor de infrarrojos, un sensor de distancia y un sensor de luz ambiente.
Cada sensor nos proporciona la distancia al objeto más cercano en milímetros, en un rango
de 5 a 200 milímetros, con una incertidumbre de ±1 milímetro.
El principal inconveniente es que ambos sensores tienen la misma dirección en el bus I2C,
por lo que ha sido necesario utilizar adicionalmente un multiplexador I2C. El multiplexador
empleado es el TCA9548A de Texas Instruments, que dispone de ocho canales para conectar
diferentes dispositivos I2C, Figura 3.13
Gracias al TCA, en vez de tener dos dispositivos con la misma dirección en el bus de I2C,
aparece el propio multiplexador como esclavo. Cada vez que se quiera utilizar uno de los
sensores, basta con escribir un 1 en el registro de control correspondiente al canal que se quiere
habilitar.
d1 d2
✓ = atan( ) (3.4)
distsens · cos( )
Siendo:
La distancia entre los sensores se multiplica por el coseno de 15º porque en la ecuación
interviene la distancia que separa a los sensores, proyectada sobre el eje horizontal, y la posición
de equilibrio del vehículo se corresponde con una inclinación de 15º hacia atrás.
Distancia a la pared
d1 + d2
d= · cos(✓) (3.5)
2
Figura 3.14. Imagen auxiliar del cálculo del ángulo y la distancia respecto a la pared.
Una vez obtenidos estos dos datos, se almacenan en el bus de control para que puedan ser
empleados por la lógica del control de seguimiento de la pared.
3.7. Encoders
3.7.1. Descripción y funcionamiento
El Balboa cuenta con dos encoders de cuadratura magnéticos, situados en cada uno de los
ejes de los motores, Figura 3.15. Estos encoders consisten en dos discos magnéticos sujetos a
una extensión del eje de giro del motor y un par de sensores de efecto Hall, ubicados en la
placa.
Los sensores de efecto Hall son un tipo de transductores que en presencia de un campo
magnético variable, generan una tensión de salida. Los encoders de cuadratura funcionan gracias
al principio del efecto Hall, generando dos señales cuadradas desfasadas 90º entre sí.
Los encoders son incrementales y poseen una resolución de 12 cuentas por revolución del eje
del motor.
En primer lugar se transforma el valor recibido a través del bus I2C de cuentas de encoder a
grados. Para ello, a partir de la información de los encoders del datasheet del Balboa, se calcula
la resolución del encoder según la Ecuación 3.7:
Siendo:
Siendo:
4encl + 4encr 1 ⇡
vc = · · ·R (3.9)
2 ts 180
Siendo:
1 ⇡ 1
vd = (4encl 4encr ) · · ·R· (3.10)
ts 180 D
Siendo:
Debido a esta falta de precisión en la medida, ha sido necesario implementar tres filtros
consecutivos para conseguir una medida de la velocidad que fuera útil para el control. Los
dos primeros son filtros no lineales, encargados de eliminar los picos tan característicos de
la Figura 3.17. El tercero en cambio es un filtro paso bajo habitual, para eliminar ruido
parásito.
20
10
-10
-20
-30
-40
0 5 10 15 20 25 30 35
Para llevar a cabo este filtrado, basta con comparar el valor actual del incremento del encoder
con un umbral de 180º. Si el valor es superior a 180º, entonces se descarta y se emplea como
valor actual del encoder el último dato válido que se haya almacenado en el buffer. Tras esta
operación, se obtiene un incremento de encoder que presenta el aspecto de la Figura 3.18.
25
20
15
10
0
0 5 10 15 20 25 30 35 40
El segundo filtro también es un filtro no lineal, responsable de eliminar los picos provocados
por un aumento desmesurado en el incremento del encoder en un tiempo de muestreo, es decir,
si el vehículo se desplaza a una velocidad constante de 5 cm/s, que de pronto se produzca un
aumento de esta velocidad a 20 cm/s denota claramente que se ha producido una anomalía en
la medida de la misma.
Para eliminar este conjunto de medidas erróneas se definió un valor umbral para los
incrementos de segundo orden de las cuentas del encoder. Por incremento de segundo orden
se entiende la diferencia entre el incremento de encoder actual y el incremento calculado
anteriormente. El valor de este umbral se dedujo de manera experimental, sometiendo a los
motores a diferentes variaciones de velocidad, y finalmente se fijó a un valor de 10 cm/s2 .
Todos aquellos incrementos de segundo orden que resulten por debajo de este valor umbral,
son almacenados en un vector auxiliar que permitirá reconstruir finalmente la medida del
encoder.
Finalmente, tras haber eliminado todas las muestras que generaban los picos, se calcula
la medida incremental del encoder que será posteriormente empleada en el cálculo de las
velocidades lineales común y diferencial.
Se ordenan de menor a mayor los elementos del vector auxiliar con los incrementos del
encoder.
El resultado tras este segundo filtro no lineal se puede observar en la Figura 3.19
0
0 5 10 15 20 25 30 35 40
En este ensayo se aplicó una tensión común cuadrada de amplitud 0.15 V y valor medio 0.45
V. El valor de la tensión diferencial aplicada era de 0 V. El vehículo no se estaba equilibrando,
sino que se desplazaba en posición horizontal sobre su tercer punto de apoyo. El resultado se
puede observar en la Figura 3.22.
0
0 5 10 15 20 25 30 35 40
Figura 3.20. Incremento definitivo de encoder sin acumular el incremento de segundo orden.
0
0 5 10 15 20 25 30 35 40
En este ensayo se aplicó una tensión diferencial cuadrada de amplitud 0.4 V y valor medio
0 V. El valor de la tensión común aplicada era de 0 V. Pero en esta ocasión el vehículo si se
encontraba en equilibrio mientras giraba sobre su eje z, por eso la medida resulta más ruidosa.
El resultado se muestra en Figura 3.23.
0.6
0.5
0.3
0.2
0.1
0
0 5 10 15 20 25 30 35 40
Tiempo (s)
0.6
0.4
Velocidad de guiñada (rad/s)
0.2
-0.2
-0.4
-0.6
40 42 44 46 48 50 52 54 56 58 60
Tiempo (s)
En la Figura 3.24 se pueden ver el modelo 3D del separador, que sujeta el soporte al
vehículo.
Para terminar este capítulo, se explica cómo se ha llevado a cabo la caracterización del
vehículo, Sección 4.2. Fueron necesarios dos procesos independientes de identificación:
uno para los parámetros que intervienen en las ecuaciones de avance y cabeceo,
Sección 4.2.3, y otro para los parámetros del movimiento de giro, Sección 4.2.4.
Para una mayor simplicidad matemática, se ha optado por desacoplar los movimientos que
intervienen cuando el vehículo se encuentra desplazándose por el circuito:
Giro: Que corrige la guiñada para que el vehículo pueda desplazarse en línea recta,
siguiendo una pared, o una referencia de guiñada.
Momento de inercia de cabeceo del chasis respecto a un eje principal que pasa por su cdg
I✓ [kgm2 ]
Momento de inercia de giro del vehículo respeto al eje vertical o guiñada I [kgm2 ]
Conocidas estas variables, se pueden definir una serie de variables auxiliares que serán útiles
en la definición de las ecuaciones del modelo:
Las ecuaciones que definen el modelo del motor son las siguientes:
el = Ke · !ml (4.1)
er = Ke · !mr (4.2)
ul sig(ul el ) · Vdrop el
il = (4.3)
Rm
ur sig(ur er ) · Vdrop er
ir = (4.4)
Rm
En la Ecuación 4.3 y en la Ecuación 4.4 es importante destacar que el signo de Vdrop debe
ser el resultante de la diferencia ul el o ur er , según corresponda.
ul + ur
uc = (4.5)
2
ud = ul ur (4.6)
Tmc = Kt · ic (4.7)
Tmd = Kt · id (4.8)
Trlim = Tmr · (|Tmr | < Trmax ) Trmax · (Tmr <= Trmax ) + Trmax · (Tmr >= Trmax ) (4.11)
Tllim = Tml · (|Tml | < Trmax ) Trmax · (Tml <= Trmax ) + Trmax · (Tml >= Trmax ) (4.13)
Trl + Trr
Trc = (4.15)
2
Y se obtienen finalmente los pares netos común y diferencial en el eje de cada motor:
La ecuación dinámica de traslación del conjunto del sistema de tracción y el chasis debido al
mando común resulta entonces:
dvRc d!✓
2 · FRc = (2 · m + M ) · +M ·h· · cos(✓) M · !✓2 · h · sen(✓) (4.21)
dt dt
En la ecuación anterior se considera que la aceleración del centro de masas del sistema de
tracción es:
dvRc
= aRc
dt
Y que la aceleración en la dirección de avance del centro de gravedad del chasis es:
dvRc d!✓
+h· · cos(✓) !✓2 · h · sen(✓)
dt dt
Finalmente, se plantean las ecuaciones que gobiernan el cabeceo del chasis. El cuerpo se
encuentra sometido a su propio peso, las fuerzas totales de reacción Nx , Ny y al par neto de
reacción del motor 2 · Tc (dos veces la componente común del par). Las fuerzas y aceleraciones
que intervienen en estas ecuaciones se pueden ver en la Figura 4.2
dvRc d!✓
Nx + M · g · sen(✓) = M · · cos(✓) + M · h · (4.23)
dt dt
d!✓
h · Nx 2 · Tc = I ✓ · (4.24)
dt
dvRc d!✓
2 · Tc + M · g · h · sen(✓) = M · h · · cos(✓) + (I✓ + M · h2 ) · (4.26)
dt dt
Una vez eliminadas las variables intermedias de las ecuaciones previas ,se obtiene el siguiente
modelo no lineal:
Kt mrt · vRc
Tmc = · (uc Ke · ( !✓ )) (4.27)
Rm R
!mc
mrt · Tc = mrt · Tmc Trc Dm · (4.28)
mrt
dvRc d!✓
2 · Tc + M · g · h · sen(✓) = M · h · · cos(✓) + (I✓ + M · h2 ) · (4.30)
dt dt
Las ecuaciones anteriores, Ecuación 4.29 y Ecuación 4.30, forman un sistema de ecuaciones
no lineal que permiten despejar las derivadas temporales de la velocidad de avance vRc y la
velocidad angular de cabeceo !✓ .
Figura 4.3. Representación del giro del vehículo alrededor de un eje vertical .
Sabiendo que la fuerza de rozamiento diferencial con el suelo, FRd es la única fuerza externa
que provoca una aceleración angular, la ecuación dinámica del giro del vehíchulo con respecto
a un eje vertical resulta:
W d!
FRd · =I · +D ·! (4.31)
2 dt
W mrt · Td Imr · W d! W d!
FRd · =( 2
· )· =I · +D ·! (4.32)
2 R R dt 2 dt
W Imr · W 2 d!
mrt · Td · = (I + )· +D ·! (4.33)
2·R 2 · R2 dt
Finalmente, agrupando todos los parámetros resulta una única ecuación diferencial de
primer orden:
d! 1 Km Rm
= ·! + · (ud · TRd ) (4.36)
dt ⌧m ⌧m mrt · Kt
Imr ·W 2
I + 2·R2
⌧m = m2rt ·Kt ·Ke
(4.37)
W2
2·R2
· ( Rm + Dm ) +D
mrt ·W ·Kt
2·R·Rm
Km = m2rt ·Kt ·Ke
(4.38)
W2
2·R2
· ( Rm + Dm ) +D
Como la Ecuación 4.38 es una ecuación diferencial de primer orden, no resulta complicado
resolverla y obtener así el valor de la derivada de la velocidad angular de guiñada ! .
4.2. Identificación
Todos los parámetros que se describen en la Sección 4.1.2 se han obtenido a partir de las
hojas técnicas de los diferentes componentes y también mediante el método de optimización
Gauss-Newton, empleando datos registrados en diferentes ensayos.
Medida de la tensión aplicada a cada motor para diferentes valores de ganancia. Con este
ensayo pudimos verificar que la relación ganancia-tensión era realmente de la ecuación
teórica: Vbat /mg = 6/300 = 0.02. Donde Vbat es la tensión nominal del motor (6V) y mg la
ganancia máxima que se puede aplicar al motor, 300, que se correspondería a una tensión
de 6V.
Medida de la velocidad con los encoders para diferentes valores de ganancia. Con este
ensayo se puede verificar el valor teórico de la resolución del encoder.
Tiempo del transitorio desde que se retira la tensión del motor hasta que el mismo se
detiene, para determinar su incercia Imr [kgm2 ]. Este dato finalmente no se ha utilizado,
y en su lugar en el modelo aparece el obtenido en la Sección 4.2.3.
En la Sección 6.1 se muestran los resultados de estos ensayos en detalle, para los motores de
50:1, que eran los que inicialmente se querían haber empleado. Como finalmente se usaron los
motores de 75:1 se repitieron sendos ensayos, pero de una forma menos elaborada y por tanto
se ha preferido no incluirlos en este documento.
m
X
S(p) = (fi (p))2 (4.39)
i=1
Siendo:
m funciones f1 , ..., fm
pk+1 = pk + k
(4.41)
Jf (pk )T · Jf (pk ) k
= Jf (pk )T · f (pk ) (4.42)
pk+1 = pk + ↵k · k
(4.43)
Momento de inercia de cabeceo del chasis respecto a un eje principal que pasa por su cdg
I✓ [kgm2 ]
Se registraron el valor de las variables de estado en dos ensayos de equilibrio del vehículo
distintos: equilibrándolo mediante un control P-PD y mediante un PI-PD, ambos con referencia
nula de velocidad.
Una vez registrados ambos ensayos, el proceso para llevar a cabo la optimización consta de
las siguientes etapas:
Con ayuda de Matlab, se selecciona una parte del ensayo, que será la empleada en la
optimización. Es importante seleccionar una parte del ensayo representativa del comportamiento
del vehículo cuando trata de equilibrarse, pero también se debe evitar seleccionar partes con
anomalías que pudieran corromper los resultados obtenidos.
Optimización
Cabe destacar que el algoritmo empleado no calcula el valor absoluto de los parámetros
descritos al inicio de esta sección, sino los nueve coeficientes que multiplican al valor inicial del
parámetro.
Para la obtención de los parámetros del modelo de avance y cabeceo no fue suficiente con
simular la respuesta del vehículo a partir del modelo no lineal descrito en Sección 4.1. Fue
necesario duplicar este modelo, y trabajar de forma separada con la velocidad de avance y la
velocidad angular de cabeceo. Este modelo se puede ver en la Figura 4.4.
Cada modelo contribuye a la salida del sistema con una variable distinta: El primer modelo
se encarga de la velocidad lineal de avance, y el segundo de la velocidad angular de
cabeceo.
Se llegó a la conclusión de que era necesario tratar de forma separada las velocidades
lineal de avance y angular de cabeceo tras varios intentos de obtener los parámetros con el
modelo completo. El resultado que se obtenía con la optimización no era admisible y por eso se
comenzaron a investigar nuevas alternativas.
Momento de inercia de giro del vehículo respeto al eje vertical o guiñada I [kgm2 ]
Figura 4.4. Diagrama de Simulink empleado en la identificación de los parámetros del avance y cabeceo.
Se registraron los valores de las variables de estado en un ensayo con el vehículo en equilibrio,
siguiendo una referencia cuadrada en la velocidad de guiñada, lo que hacía que el vehículo
fuera girando alrededor de su eje z en ambos sentidos alternativamente.
Una vez registrado este ensayo el proceso de optimización de los parámetros es idéntico al
descrito en la Sección 4.2.3, salvo en el modelo empleado para las simulaciones en el proceso
de optimización.
En esta ocasión sí fue suficiente con utilizar un único modelo que recogiera todas las
ecuaciones que describen el movimiento de giro del vehículo. Estas ecuaciones son las
expresadas en la Sección 4.1.6. Este modelo se muestra en la Figura 4.5.
Para poder conocer el ruido de la IMU es necesario realizar un ensayo en el que, sin necesidad
de que se esté equilibrando el vehículo, sencillamente los motores giren un determinado tiempo
en un sentido y después en el contrario, a diferentes velocidades. Así aparecerán ruidos en la
IMU, debidos a su propio error de medida y también a las vibraciones del vehículo.
Con esta información y con ayuda de un osciloscopio de Matlab, se mide la amplitud del
ruido respecto del valor que debería tener la medida en régimen permanente. Esta varianza del
ruido será la que se utilice dentro del simulador.
Para caracterizar el ruido del encoder se emplea el mismo ensayo que para identificar el
ruido de la IMU.
De nuevo, se analiza la amplitud del ruido respecto del valor de la medida en régimen
permanente y se registra su varianza para incluirla en la simulación.
A lo largo de este capítulo se describe cuál ha sido la estrategia de control elegida para
el vehículo equilibrista, Sección 5.1; el optimizador del control, Sección 5.2; la máquina
de estados que gobierna los procesos, Sección 5.3 y el estimador de estado empleado,
Sección 5.4.
De la máquina de estados se han detallado todas las variables que intervienen en los
diferentes estados y transiciones, Sección 5.3.1, determinando así el comportamiento del
vehículo. También se ha incluido un esquema y se ha explicado su funcionamiento en
detalle, Sección 5.3.2.
En el caso de querer que el vehículo siga alguna referencia, como podría ser la pared o
una línea, habría que incluir las distancias a los objetivos como variables de estado dentro del
modelo de giro.
El aspecto global de lazo de control para la estabilización del vehículo equilibrista sería el
que se muestra a continuación, en la Figura 5.1.
La principal ventaja del diseño de controles por realimentación de estado reside en que
permite fijar las dinámicas de lazo cerrado en tiempo continuo, mediante el posicionado de
los autovalores de la matriz de estado (Matriz A). Esta estrategia resulta de gran interés
cuando la planta tiene polos con parte real positiva (inestables), aparecen integradores, el
sistema es muy poco amortiguado o se trata de un sistema resonante, ya que permite eliminar
completamente estas dinámicas conflictivas. Esta ventaja es a su vez su mayor inconveniente,
ya que al fijar los polos en una determinada posición, como resultado varían los elementos de
Figura 5.1. Esquema teórico de la implantación del control integral por realimentación del estado.
la matriz de ganancias del control, mientras que con un control PID se disponen de diferentes
parámetros y ganancias que resultan mucho más intuitivos de modificar y analizar su efecto en
la planta.
Se comienzan fijando unos autovalores de la matriz de estado que cumplan los requisitos
de estabilidad y amortiguamiento indispensables.
Una vez alcanzado dicho objetivo, se comienza a tratar de mejorar la respuesta, haciéndola
más rápida, por ejemplo. Hasta que finalmente se obtienen la mejor combinación de polos
para el sistema.
Las primeras iteraciones para ajustar el control se llevaron a cabo por prueba y error
sobre el propio vehículo, hasta que se consiguió un modelo lo suficientemente preciso como
para optimizar el control mediante simulación. El optimizador del control se explica en la
Sección 5.2, y los resultados del ajuste del control en las secciones 6.5 para el ajuste por tanteo,
y las secciones 6.6.1 y 6.6.2 para los controles obtenidos con el optimizador.
Es importante realizar esta distinción, pues la forma de construir los dos controles es
diferente. En esta sección se van a desarrollar ambos, comenzando con el regulador.
En primer lugar, al tratarse de una planta no lineal, es necesaio linealizar el sistema en torno
a un punto de trabajo. El punto de trabajo será el que se corresponde con el vehículo quieto en
equilibrio. Las ecuaciones de estado linealizadas resultan:
d X dF dF
= |X ,U · X+ |X ,U · U (5.1)
dt dX 0 0 dU 0 0
dG dG
Y = |X ,U · X+ |X ,U · U (5.2)
dX 0 0 dU 0 0
d X
=A· X +B· U (5.3)
dt
El vector de salidas:
h i
Y = v v0 (5.6)
Y el vector de mandos:
h i
U= u u0 (5.7)
Finalmente, se fijan las dinámicas deseadas en lazo cerrado y tiempo continuo. Como se
verá en la Sección 6.5, el control más adecuado para el vehículo es un control con 2 polos
dominantes, en una configuración muy similar aun Butterworth de 2º orden. Con ayuda del
comando place de Matlab, se obtiene la matriz de ganancias del regulador K.
La matriz de ganancias K garantiza que el valor de las variables de mando del control U [k]
serán aquellas que garanticen las dinámicas deseadas en tiempo contínuo y lazo cerrado:
Resultando la nueva matriz de estado en tiempo discreto: (Ad Bd · K). Se observa cómo
en el cálculo de los nuevos autovalores de la matriz de estado interviene K, si no fuera de esta
forma, resultaría imposible modificar las dinámicas de la planta.
Control por realimentación del estado con seguimiento a referencia mediante acción integral
Si se quiere que el vehículo tenga una determinada velocidad de avance, se debe incluir
la acción integral para el seguimiento de dicha referencia dentro del diseño del regulador.
No se ha contemplado la posibilidad de utilizar como herramienta para el seguimiento de
referencia un simple ajuste de ganancia, porque no garantiza error de seguimiento nulo en
régimen permanente, y además es muy dependiente del modelo del vehículo.
" # " #
X[k + 1] X[k]
= Aad · + Duad · U [k] + Brad · Yref [k] (5.13)
Xi [k + 1] Xi [k]
En la Figura 5.2, uc es la tensión común a aplicar a los motores, x(1), x(2) y x(3) son las
variables de estado: velocidad lineal de avance, velocidad angular de cabeceo y ángulo de
cabeceo, respectivamente.
En la Sección 5.1.3 se describe cómo se relacionan los términos de la matriz de ganancias del
regulador con los parámetros de un control P-PD en cascada, y en la Sección 5.1.4, la relación
de las ganancias del control integral por realimentación de estados con un control PI-PD.
El lazo interior controla el ángulo de cabeceo mediante un control PD, por lo que debe
contener tanto a x(3), que es el ángulo de cabeceo, como a x(2), que es la velocidad
angular de cabeceo, su derivada.
Figura 5.4. Equivalencia entre ganancias del regulador y control P-PD en cascada.
K1
Ti = (5.14)
K4
K1
Ki = (5.15)
K3
1
Ki = ⇤ K1 (5.16)
Ti
Figura 5.5. Equivalencia entre ganancias del regulador y control PI-PD en cascada.
Este control es el que usa habitualmente el vehículo, ya que es conveniente que mantenga
una velocidad concreta según la aplicación.
Este control es simplemente un control PD, no existen dos controles en cascada, ya que las
variables de estado que intervienen en el giro son, como se ha dicho anteriormente:
Y como la velocidad angular de guiñada es la derivada del ángulo, es suficiente con un único
lazo de control.
El proceso de diseño del regulador es el mismo que se expresó en Sección 5.1.2, con las
diferencias de que el mando del control es ahora la tensión diferencial de los motores, y
que el vector de estado ahora lo componen la velocidad angular de guiñada y el ángulo de
guiñada.
El circuito consiste en dos curvas de 180º y dos rampas. Las dificultades de completar el
circuito residen en que el vehículo debe ser capaz de inclinarse hacia delante en la rampa de
subida, frenar en el instante anterior a entrar en la curva, conseguir completar dicha curva,
frenar e inclinarse hacia atrás para superar la rampa de bajada, y finalmente completar la última
curva para llegar al punto de origen. Por lo que se deduce que el control debe ser muy robusto,
para conseguir mantener al vehículo en equilibrio en condiciones tan diversas.
Seguimiento de pared
Para el seguimiento de pared, se ha añadido al control de la Sección 5.1.5 una nueva variable
de estado: la distancia a la pared [m].
Cabría esperar que la estrategia de control elegida fuera un control integral por
realimentación de estados (que posteriormente se transformaría en un PI-PD en cascada). Pero
se ha observado que resulta más conveniente emplear un simple control por realimentación del
estado, y transformarlo en un P-PD, ya que se obtienen mejores resultados si se permite que el
vehículo se aproxime más a la pared cuando trata de tomar las curvas.
Una vez obtenido el regulador, al igual que se hizo en la Sección 5.1.3, se despejan los
coeficientes de los controles P y PD.
El lazo exterior debe ser el de control de la distancia, ya que la referencia del ángulo de
guiñada depende del error existente entre la referencia de distancia y la real medida.
La velocidad angular de guiñada es la derivada del ángulo de guiñada, por lo que se deben
encontrar en el mismo lazo de control y relacionadas a través de la acción diferencial.
Poniendo todo esto en conjunto, resulta un esquema como el de la Figura 5.7, en la que se
muestran las correspondencias entre las ganancias y los parámetros de los controles PID.
Figura 5.7. Equivalencia entre ganancias del regulador y control P-PD en cascada para el movimiento de
giro.
Este optimizador se emplea para todos los parámetros de los distintos controles que se
encuentran programados para el vehículo y también para las varianzas y los ruidos del EKF. Por
lo que en total dispone de una lista de 39 posibles parámetros.
También es posible escoger el modo de ajuste a través de la variable F itM ode , que determina
qué variables se utilizan en el proceso de optimización. Estas dependen de si lo que se pretende
ajustar es el control o el EKF y de qué control se trate. Los siete posibles modos de ajuste son
los siguientes:
1. Control - Cabeceo.
5. EKF - Cabeceo.
Los parámetros a optimizar se eligen al inicio del código y pueden combinarse entre sí. Una
vez ejecutado, el programa llama al Simulink de la Sección 5.5, dentro de un bucle while y
comienza a realizar simulaciones para diferentes combinaciones de los parámetros previamente
indicados, y cuando obtiene un mejor valor de la función de coste lo muestra por pantalla, y
queda a la espera de que se lance una nueva iteración. El programa se detiene cuando bien la
función de coste no es capaz de reducirse más de un 1 % o alguno de los parámetros no varía
tampoco en más de un 1 %.
De nuevo, destacar que el valor que muestra el optimizador, no es el valor absoluto del
parámetro, si no el coeficiente por el que hay que multiplicar el valor inicial del mismo en la
iteración.
Los resultados obtenidos para el control P-PD se encuentran en la Sección 6.6.1 y para el
PI-PD en la Sección 6.6.2.
Tiene asociada la variable denominada ControlM ode , que puede tomar los siguientes
valores:
ControlM ode = 0: Inicialización. Implica que el control se está inicializando y, por tanto,
no actúa.
ControlM ode = 1, Estimación. El control utiliza la información de los sensores y del EKF
para calcular los mandos, pero no los aplica.
ControlM ode = 2, Control activo. Igual que en el modo de estimación, con la diferencia de
que ahora sí se escriben los valores del mando en sus correspondientes variables.
Modos de estabilización
Tiene asociada la variable denominada StabM ode , que puede tomar los siguientes valo-
res:
StabM ode = 0, Lazo abierto. Los valores de los actuadores no se escriben en el lazo de
control, si no directamente en la máquina de estados. Se utiliza cuando no se quiere
equilibrar el vehículo, por ejemplo al hacer pruebas de hardware.
StabM ode = 1, P-PD en cascada. Equilibra al Balboa con un control proporcional para la
velocidad y porporcional-diferencial para el ángulo de cabeceo.
Modos de navegación
Tiene asociada la variable denominada N avM ode , que puede tomar los siguientes valo-
res:
N avM ode = 0, Sin Navegación. Este modo de navegación omite el control de guiñada. Se
utiliza cuando se quieren realizar ensayos en los que no es relevante el control del giro
del vehículo.
N avM ode = 4, Navegación libre. Permite mantener el vehículo en equilibrio sin necesidad
de estar completando el circuito y además implementar un control de guiñada, que corrija
posibles desviaciones del vehículo, o seguir una referencia de velocidad de guiñada fijada
externamente, por ejemplo para que el vehículo gire sobre su eje z mientras se equilibra.
El motivo por el cual no existen los modos de navegación correspondientes a N avM ode = 2
y N avM ode = 3 ,es porque requerían de elementos hardware que no fue posible implementar
antes de la entrega del proyecto.
Modos de EKF
Tiene asociada la variable denominada EKFM ode , que puede tomar los siguientes
valores:
EKFM ode = 0, Sin EKF. Desactiva el EKF, por lo que se utilizarán las medidas reales.
EKFM ode = 1, Estabilización. El EKF estima las variables necesarias para mantener al
Balboa en equilibrio, es decir, el ángulo de cabeceo, la velocidad angular de cabeceo y la
velocidad lineal de avance.
EKFM ode = 2, Seguidor de pared. Además de las anteriores, se estiman también las
variables de estado que permiten seguir la pared: ángulo de guiñada y velocidad angular
de guiñada.
EKFM ode = 4, Navegación libre. El EKF estima las variables necesarias para mantener al
Balboa en equilibrio mientras se desplaza, es decir, el ángulo de cabeceo, la velocidad
angular de cabeceo y la velocidad lineal de avance.
En este caso, EKFM ode = 3 se correspondería con N avM ode = 3, por lo que no se llegó a
diseñar.
Tiene asociada la variable denominada M otorM ode , que puede tomar los siguientes
valores:
M otorM ode = 1, Motores habilitados. Estado que permite mover los motores.
Tiene asociada la variable denominada SensorCalibM ode , que puede tomar los siguientes
valores:
SensorCalibM ode = 0: Sin calibrar. Es el estado por defecto al encender el vehículo, sin
corregir posibles desviaciones de las medidas.
SensorCalibM ode = 1, Calibrando. En este estado, los sensores están midiendo y se está
calculando la variación media de su medida, para después restarlo, pues se trata de una
desviación constante.
SensorCalibM ode = 2, Calibrados. Una vez que se ha corregido el posible error constante
en la medida, los sensores están listos para ser utilizados con normalidad.
De todas las variables previamente mencionadas, las que condicionan el salto de un estado a
otro dentro de la máquina de estados son únicamente: N avM ode y StabM ode .
Button A = 1
start Booting SensorCalibration
Timer 5s
Button A = 1
Button B = 1
Button B = 1 Button B = 1
Stop
Button C = 0
1. Inicialización: Cuando se enciende el vehículo, por defecto está en este estado de reposo.
Todas las variables de la Sección 5.3.1 permanecen a cero. Al pulsar el botón A, se pasa al
estado Calibración de Sensores.
2. Calibración de Sensores: Al entrar en este estado SensorCalibM ode pasa a valer 1. En este
estado permanece durante 5 segundos, para así eliminar el offset del girósocopo. Pasado
este tiempo, la variable SensorCalibM ode se pone a 2, y se salta al estado Listo.
3. Listo: En este estado, el valor de las variables N avM ode y StabM ode condicionará cuál será
el siguiente estado, una vez se haya pulsado el botón A.
Si se cumple que N avM ode = 0 y StabM ode = 0, entonces el siguiente estado será
Test Hardware.
Si se cumple que N avM ode = 1 y StabM ode 1, el siguiente estado será Seguidor de
Pared.
Si se cumple que N avM ode = 4 y StabM ode 1, el siguiente estado será Navegación
Libre.
5. Test Hardware: En este estado, se actualizan las variables a los siguientes valores:
ContolM ode = 1 y M otorM ode = 1. El resto permanecen a cero.
6. Navegación Libre: En este estado, se actualizan las variables a los siguientes valores:
ContolM ode = 2, EKFM ode = 1 y M otorM ode = 1. El resto permanecen a cero.
Además de todos los estados previamente descritos, existen también un par de estados
especiales:
2. EKF y Control Tunning: A este estado solo es posible acceder cuando el programa en
lugar de estar ejecutándose en el Balboa, se ejecuta en el ordenador mediante simulación.
Permite modificar el control y el EKF con la ayuda de un simulador para poder optimizar
los parámetros de forma más eficiente.
de estado. Las medidas de estos sensores son ruidosas y pese a que se hayan diseñado filtros
digitales que limpian la señal, siguen sin ser tan precisas como sería deseable para obtener la
mejor respuesta del control. Además, como se trata de una planta con dinámicas inestables, es
necesario utilizar un observador con el fin de estabilizar y amortiguar dichas dinámicas, para
que así no tengan una influencia negativa sobe la respuesta del control.
En este proyecto se han usado dos estimadores de estado distintos: Un Filtro complementario,
Sección 5.4.2 , y un Filtro Extendido de Kalman o EKF, Sección 5.4.4.
El giróscopo mide la velocidad angular del vehículo en sus tres ejes, pero tiene dos
inconvenientes:
El primero es que la medida tiene un bias inicial, que altera el valor real de la medida.
Durante la fase de calibración, se toman muestras durante 5 segundos, se calcula dicho
valor medio y se resta en las medidas siguientes.
El segundo problema es que dicho error, con el paso del tiempo, vuelve a aparecer y por
tanto la medida se vuelve cada vez menos fiable, siendo indispensable corregirla.
Como el acelerómetro es capaz de medir las proyecciones de la gavedad en los tres ejes,
cuando el vehículo se desplaza a velocidad constante se usan sus medidas para estimar los
ángulos de inclinación del vehículo en cada eje, compararlos con la medida del giróscopo y
corregir así la medida del giróscopo.
La forma de realizar dicha corrección consiste en realizar una media ponderada de las
medidas del giróscopo y acelerómetro y tomarlo como valor verdadero de la inclinación. Esto
recibe el nombre de Filtro Complementario, y es la primera aproximación que se empleó para
estimar el ángulo de cabeceo del vehículo.
Los valores elegidos para la ponderación fueron de 0.98 para la medida del giróscopo y
1 0.98 = 0.02 para el acelerómetro. No es posible asignarle un mayor peso al acelerómetro,
porque es muy poco habitual que el vehículo se desplace a velocidad constante.
R.E. Kalman publicó en 1960 su descubrimiento como una solución recursiva para el filtrado
de datos discretizados linealmente. Desde entonces y gracias a los avances en computación, el
filtro de Kalman se ha convertido en una herramienta ampliamente utilizada, sobre todo en el
sector de la navegación autónoma o asistida.
Es una de las herramientas más sofisticadas para estimar el vector de estado de un sistema,
y por ello se ha decidido incluirlo en este proyecto. En concreto, se ha utilizado para mejorar
todas aquellas medidas con demasiado ruido o incluso estimar aquellas que no se pueden
medir de manera directa, como el ángulo de cabeceo. Además, ha sido posible optimizarlo por
medio de simulaciones con ayuda de Matlab-Simulink, lo que ha maximizado su eficiencia y
precisión.
zk = G(xk , uk , vk ) (5.18)
Siendo:
K: La matriz de corrección
es lo mismo, se trata de un sistema lineal. Esto no ocurre en el problema del péndulo invertido,
por lo que es necesario utilizar el Filtro extendido de Kalman, o EKF.
Para construir un EKF, en primer lugar se debe linealizar el sistema en torno a un punto de
trabajo, de la misma forma que se hizo en la Sección 5.1.2.
zk = h(xk , uk , vk ) (5.21)
Como es habitual en estos sistemas que los ruidos wk y vk no sean conocidos, se pueden
aproximar el estado y las salidas como:
Para estimar el estado del proceso no lineal, se comienzan definiendo unas nuesvas
ecuaciones que linealicen la estimación de la Ecuación 5.22 y de la Ecuación 5.23.
En estas ecuaciones:
F[i]
A0[i,j] = (x̂k , uk , 0) (5.26)
x[j]
F[i]
W[i,j] = (x̂k , uk , 0) (5.27)
w[j]
G[i]
H[i,j] = (x̃k , 0) (5.28)
x[j]
G[i]
V[i,j] = (x̃k , 0) (5.29)
v[j]
Y el residuo de la medida:
ẽk ⌘ zk z̃k (5.31)
Usando las equaciones 5.30 y 5.31, las ecuaciones que gobiernan el error del proceso
resultan:
Cabe destacar que tanto la Ecuación 5.32 como la Ecuación 5.33 son lineales, por lo que
se puede utilizar el residuo actual de la medida ẽzk en un hipotético segundo filtro de Kalman,
para estimar así el error en la predicción ẽxk . Esta estimación, denominada êzk , permite obtener
una estimación a posteriori del estado para el proceso no lineal original:
Dadas todas las aproximaciones para que êk sea cero, se obtiene una ecuación para estimar
êk
La Ecuación 5.36 puede usarse para actualizar la medida y la matriz de ganancias de Kalman
Kk junto con x̃k y z̃k de las ecuaciones 5.22 y 5.23.
1. Para los valores iniciales de x̃k y P̃k se calcula la matriz de ganancias de Kalman en la
muestra k:
Kk = P̃k · HkT · (Hk · P̃k · HkT + Vk · Rk · VkT ) 1 (5.37)
Pk = (I Kk · Ck ) · P̃k (5.39)
3. Con estas nuevas estimaciones de x̃k+1 y P̃k+1 se repiten los procesos de Corrección y
Predicción.
Todos estos cálculos se realizan mediante Matlab y es el proceso que supone una mayor
carga computacional de todo el proyecto, ya que deben realizarse para cada muestra, siendo la
frecuencia de muestreo de la IMU 1 ms.
Para intregrar el EKF en el lazo de control, se comenzó en primer lugar con el ángulo de
cabeceo y la velocidad de cabeceo. Mientras el vehículo se equilibraba, y mediante Matlab-
Simulink, se compararon en un mismo osciloscopio las medidas obtenidas a partir de la IMU y
las estimadas por el EKF. Se fueron modificando los diferentes pesos hasta que finalmente se
obtuvieron unas estimaciones de dichas variables de estado muy similares a las reales pero con
menos ruido.
Una vez conseguido este primer objetivo con el EKF, y cuando ya se disponía de un modelo
lo suficientemente preciso como para poder diseñar y optimizar mediante simulaciones, se
comenzaron a integrar el resto de variables a estimar.
La información se almacena en buses, que son los tres Data Store Memory que aparecen en
la parte superior del diagrama. Trabajar de esta forma permite leer y escribir todas las variables
que almacena cada bus desde cualquier otra parte del programa. Para una mayor claridad, todas
las variables que contienen estos buses se inicializan desde los scripts de configuración, para así
definir claramente sus dimensiones y tipo de dato almacenado.
El bus de Control contiene todas las variables que son necesarias para la actuación del
control. Esto abarca desde las medidas de los sensores hasta los valores estimados por el
EKF, y también los valores de las salidas y mandos generados por el control.
El bus del modelo contiene todos los parámetros que identifican al vehículo, los sensores,
los actuadores e incluso al circuito del laboratorio.
El bus de Mavlink contiene todas las variables que intervienen en las comunicaciones entre
la estación base del PC y la Raspberry Pi cuando se encuentra ejecutando el programa en
modo autónomo.
El subsistema de Hardware está a su vez formado por otros dos subsistemas: Sensores y
Actuadores, que respectivamente contienen las diferentes funciones de Matlab encargadas
de controlar cada uno de estos elementos Hardware. Las funciones de Matlab de cada
sensor y actuador se encentran también recogidas en un subsistema propio para una
mayor claridad del diagrama.
A lo largo de este capítulo se recogen todos los resultados de los ensayos que se han
mencionado en secciones anteriores.
En primer lugar, en la Sección 6.1 se explican los primeros ensayos realizados a los
motores: Medición de la resistencia interna del motor y obtención de la curva de
caracterización Ganancia-Tensión.
A continuación, en las secciones 6.2, 6.3 y 6.4 se muestran los resultados obtenidos al
caracterizar los parámetros mecánicos del vehículo que intervienen en las ecuaciones de
los movimientos de avance y cabeceo, Sección 6.2, y de giro, Sección 6.3. También la
identificación de la varianza del ruido de la IMU y del encoder, útil para poder realizar
simulaciones más precisas, Sección 6.4.
Finalmente, en la Sección 6.5 se exponen los resultados y valores para el control obtenidos
en las primeras iteraciones por tanteo, hasta que se consiguió caracterizar el vehículo.
Para cada motor se comenzó el ensayo con baterías nuevas y se aplicaron las mismas
ganancias, con el objetivo de que ambos ensayos se hubieran realizado en igualdad de
condiciones. Los resultados de estos ensayos se muestran en las siguientes tablas:
Motor izquierdo
Los resultados del ensayo para el motor izquierdo se muestran en la Figura 6.1. Los cuadros
en rojo indican que para dicho valor de ganancia, el motor comenzó a moverse.
Representando los datos anteriores en una gráfica, se obtienen la Figura 6.2 para valores de
ganancia positivos, y la Figura 6.3 para los negativos.
Se concluye entonces que los valores de la relación ganancia-tensión para el motor izquierdo
son:
Tensión (V)
0
0 50 100 150 200 250 300
Ganancia
Figura 6.2. Recta de calibración Ganancia-Tensión para el motor izquierdo, ganancias positivas.
-1
-2
Tensión (V)
-3
-4
-5
-6
-300 -250 -200 -150 -100 -50 0
Ganancia
Figura 6.3. Recta de calibración Ganancia-Tensión para el motor izquierdo, ganancias negativas.
Se han separado en las gráficas las ganancias positivas de las negativas, porque realmente
fueron dos ensayos distintos. Ambos empezaban con baterías nuevas y tras un periodo de
inactividad del motor.
Motor derecho
Los resultados del ensayo para el motor derecho se muestran en la Figura 6.4. Los cuadros
en rojo indican que para dicho valor de ganancia, el motor comenzó a moverse.
Representando los datos anteriores en una gráfica, se obtienen la Figura 6.5 para valores de
ganancia positivos, y la Figura 6.6 para los negativos.
Se concluye entonces que los valores de la relación ganancia-tensión para el motor derecho
son:
-1
-2
Tensión (V)
-3
-4
-5
-6
0 50 100 150 200 250 300
Ganancia
Figura 6.5. Recta de calibración Ganancia-Tensión para el motor derecho, ganancias positivas.
4
Tensión (V)
0
-300 -250 -200 -150 -100 -50 0
Ganancia
Figura 6.6. Recta de calibración Ganancia-Tensión para el motor derecho, ganancias negativas.
De nuevo, se han separado en las gráficas las ganancias positivas de las negativas, porque
realmente fueron dos ensayos distintos. Ambos empezaban con baterías nuevas y tras un periodo
de inactividad del motor.
Figura 6.7. Medida real, la generada por el simulador y el error entre ambas para la velocidad angular
de cabeceo y velocidad lineal de avance.
Se puede observar que las discrepancias entre las variables medidas y estimadas son poco más
que el propio ruido de los sensores, por lo que se concluye que los parámetros proporcionados
por el algortimo Gauss-Newton serán adecuados. El valor de estos parámetros es de:
Momento de inercia de cabeceo del chasis respecto a un eje principal que pasa por su cdg
I✓ = 1.511 · 10 4 [kgm2 ]
Distancia del eje de la rueda al centro de gravedad del vehículo h = 1.414 · 10 4 [m]
Llama la atención que las constantes Ke y Kt no sean iguales, que es una aproximación
bastante habitual cuando se trata de estudiar el modelo dinámico de un motor de corriente
continua.
De nuevo, en la Figura 6.8 se muestra una gráfica de la velocidad angular de guiñada [rad/s],
en donde aparece:
Figura 6.8. Medida real, la generada por el simulador y el error entre ambas para la velocidad angular
de guiñada.
Dada la pequeña diferencia o error que existe entre ambas gráficas, se han considerado
buenos los parámetros obtenidos en el proceso de optimización, cuyos valores son de:
Momento de inercia de giro del vehículo respeto al eje vertical o guiñada I = 1.497 · 10 3
[kgm2 ]
Aunque en este ensayo también se identificaba el valor de la caída de voltaje del motor, se
ha decidido mantener el dato obtenido en la identificación del avance y cabeceo.
-1
-2
0 1000 2000 3000 4000 5000 6000 7000
Solo cuando se llegó a esta conclusión y se descubrió también cómo de sensibles eran los
parámetros por separado y en conjunto, fue posible llegar a equilibrar el vehículo. Los mejores
controles que se obtuvieron fueron los presentados en las seciones 6.5.1 y 6.5.2.
2 3T
10.946
6 7
Kcd = 4 4.1332 5
8.0569
K = 8.0569
T d = 0.513
K = -1.3586
2 3T
11.625
6 4.1584 7
6 7
Kcd = 6 7
4 9.5072 5
1.6146
K = 9.5072
T d = 0.486
K = -1.3586
Ti = 8
2. Se optimizan los parámetros del EKF que intervienen en la estimación del estado para
este control, manteniendo el control óptimo obtenido en la etapa anterior.
3. Partiendo del control y parámetros del EKF óptimos, se trata de optimizar todo junto.
Durante estas tres etapas, el control de guiñada que se empleó fue un control PI calculado
previamente y que se había observado que era estable en simulación. Este control era el
siguiente:
K = 0.58504
T i = 0.050853
b = 2.5926
K = 16.934
T d = 0.7583
K = -0.89621
T i = 82.946
b=0
Se puede observar como la constante de tiempo de la acción integral, T i, es muy grande. Por
lo que realmente el optimizador ha ajustado un control P, no un PI, como se ha expresado en
Sección 6.6.1. Esto se debe a que al no existir una variación en el valor inicial de la referencia,
no es necesario un control integral para garantizar error de seguimiento nulo en régimen
permanente.
Frecuencia de corte del filtro paso bajo del encoder = 8.1170 [Hz]
El eje de tiempos (eje X) llega hasta 45 segundos, pese a que realmente se simularon
únicamente 15. Esto se debe a que en la Figura 6.11 se muestran, una a continuación de otra,
las tres variables de estado en el orden: Ángulo de cabeceo (segundos del 0 al 15), velocidad
angular de cabeceo (segundos del 15 al 30) y velocidad lineal de avance (segundos del 30 al
45).
60
Real value
Simulated value
Error
40
Simulated and real variables
20
-20
-40
-60
0 5 10 15 20 25 30 35 40 45 50
Time (s)
En color rojo aparece el valor real de cada variable de estado, en azul su valor simulado y en
verde el error existente entre las dos señales anteriores.
Las señales simuladas resultan tan ruidosas porque se han incluido en el modelo los ruidos
de los sensores calculados en la Sección 6.4.
La simulación tuvo una duración total de 80 segundos, y las etapas que se llevaron a cabo
fueron las mismas que las descritas anteriormente, en la Sección 6.6.2.1.
Una vez concluido el proceso de optimización, el único parámetro que varió fue la constante
de tiempo de la acción integral para la velocidad de avance:
Ti = 8
60
Real value
Simulated value
Error
40
Simulated and real variables
20
-20
-40
-60
0 50 100 150 200 250
Time (s)
De nuevo, en la Figura 6.12, se muestran las tres variables de estado en el orden: Ángulo
de cabeceo (segundos del 0 al 80), velocidad angular de cabeceo (segundos del 80 al 160) y
velocidad lineal de avance (segundos del 160 al 240).
de una simulación para una señal cuadrada de igual amplitud y valor medio, pero periodo 40
segundos:
La primera gráfica se corresponde con la velocidad lineal de avance en cm/s, la segunda con
la velocidad angular de cabeceo en º/s y la tercera con el ángulo de cabeceo en º.
20
10
Velocidad de avance (cm/s)
-10
-20
-30
-40
-50
-60
0 20 40 60 80 100 120 140 160
Tiempo (s)
10
8
Ángulo de cabeceo (º)
-2
-4
0 20 40 60 80 100 120 140 160
Tiempo (s)
De nuevo, las simulaciones resultan ruidosas porque se han incluido en el modelo los ruidos
identificados en la Sección 6.4.
Para llevar a cabo esta optimización, se utilizó un único caso, que consistía en una simulación
de 60 segundos en la cual:
A partir del segundo 30 y hasta el final de la simulación, se aplica una referencia para la
velocidad de guiñada cuadrada, de periodo 2 segundos, valor medio nulo y amplitud 30º.
Las etapas llevadas a cabo en el proceso de optimización fueron las mismas que se han
descrito en la Sección 6.6.2.1, y los resultados obtenidos:
K = 0.73262
T i = 0.060158
b = 2.2727
80
Real value
Simulated value
60 Error
40
Simulated and real variables
20
-20
-40
-60
-80
0 50 100 150 200 250
Time (s)
En la Figura 6.16 se muestran en orden las cuatro variables de estado: Ángulo de cabeceo
(segundos del 0 al 60), velocidad angular de cabeceo (segundos del 60 al 120), velocidad
lineal de avance (segundos del 120 al 180) y velocidad angular de guiñada (segundos del 10 al
240).
Ampliando la velocidad angular de guiñada, Figura 6.17, se puede observar como sigue
mejor los escalones de referencia que cómo lo hacía el control integral de la velocidad lineal de
avance. Esto se debe a que el giróscopo ayuda a corregir la medida del encoder, mientras que en
el control de la velocidad de avance, el acelerómetro perjudicaba a la medida del encoder.
30 Real value
Simulated value
Error
20
Simulated and real variables
10
-10
-20
-30
En este último capítulo se expresan cuáles han sido las conclusiones finales del proyecto,
Sección 7.1, las mejores aportaciones que se han realizado, Sección 7.2 y los futuros
desarrollos que podrían realizarse en próximos trabajos de fin de grado y máster,
Sección 7.3.
7.1. Conclusiones
Por todo lo anteriormente descrito en este documento, las principales conclusiones de este
proyecto son las siguientes:
Como se ha explicado en la Sección 3.7.3, la medida del encoder resultaba tan ruidosa, que
no era suficiente con un filtro paso bajo habitual para poder trabajar con ella. Fue necesario
invertir varios días en exclusiva a conseguir corregirla, lo que ralentizó el avance del resto
del proyecto. Se han diseñado y programado herramientas de filtrado más sofisticadas que
pueden resultar de gran utilidad en un futuro, cuando se vuelva a trabajar con este tipo de
sensores.
Como el vehículo equilibrista es una planta inestable, era indispensable conseguir un primer
control que lo mantuviera en equilibrio para poder realizar ensayos más complejos. Conseguir
entender las dinámicas del vehículo por mera observación y ensayos hasta poder inferir cuál
era el camino para modificar el control, no ha sido una tarea sencilla ni liviana.
Finalmente se consiguió un punto de partida, y como se puede ver comparando las secciones
6.5 y 6.6, este no era muy distinto del control óptimo.
Se han realizado todos los ensayos necesarios para poder caracterizar todos los elementos
hardware que forman el vehículo. Esta información es útil tanto para este proyecto como para
cualquier otro que emplee los mismos elementos hardware.
Además, este nuevo vehículo se encuentra controlado por una Raspberry Pi 3B+, y Matlab
en cada actualización amplia el soporte para este microcontrolador, por lo que cabe esperar que
pueda seguirse utilizando en los próximos años.
Programación de la Raspberry Pi 3B+ para que sea compatible con el resto de elementos hardware
Dadas las numerosas aproximaciones que se tuvieron que realizar hasta conseguir obtener
todos los valores de los parámetros físicos del vehículo, se han terminado diseñando simuladores
y optimizadores más complejos y precisos, que a partir de ensayos son capaces de inferir todos
los parámetros que intervienen en las ecuaciones dinámicas de los mismos.
Esto proporciona una nueva herramienta para todos los futuros trabajos de fin de grado y
máster que necesiten identificar plantas complejas.
Para poder utilizar los elementos hardware que componen el sistema ha sido necesario
programar en scripts de Matlab todos los mapas de registros y configuraciones necesarios para
su uso en el proyecto. De nuevo, estos ficheros de configuración son de gran utilidad para
futuros proyectos que empleen alguno de estos elementos.
Todo el sistema de control se encuentra recogido en una interfaz intuitiva, que mediante
buses permite trabajar con toda la información necesaria de forma sencilla y ordenada. Por lo
que es adecuada para ser incorporada a proyectos de docencia.
También, con un control más óptimo se podrían ajustar de forma más precisa las covarianzas
de la matriz de Kalman, en el estimador de estado, para así obtener una mejor estimación de
las variables de estado, que pudieran contribuir en la mejora de la actuación del control.
Una vez que se lleve a cabo este objetivo, el vehículo estaría listo para incluirse en los
laboratorios de Control Digital y de Control Avanzado de la universidad.
Este desarrollo plantea un nuevo problema de control de gran interés para la docencia:
conseguir mantener en equilibrio el vehículo mientras recorre un circuito completamente
customizable.
Para con lograr este objetivo, bastaría con colocar varios receptores de las cámaras sobre el
chasis del vehículo y modificar el código en simulink que actualmente se utiliza para monitorizar
el vuelo de los drones.
suficientemente rápido y eficaz como para, partiendo con el vehículo en posición horizontal,
acelerar enérgicamente para llevarlo hasta su verticalidad, y entonces que comenzaran a actuar
todos los controles mencionados en este documento, Capítulo 5.
Este objetivo tiene sentido porque en paralelo a este proyecto, se han estado desarrollando los
controles que permitirían controlar al vehículo en horizontal sobre su tercer apoyo y funcionar
así como un coche. Concretamente, se pretende sustituir el actual coche empleado en los
laboratorios de Regulación Automática de la universidad, ya que este también utiliza el kit de
Lego Mindstorm, y como se indicó en la Sección 1.1, no existe soporte de Matlab-Simulink para
el mismo desde 2015.
Este anexo se ha decidido incluir como complemento a la teoría del Filtro Extendido de
Kalman presentada en la Sección 5.4.3, ya que los conceptos teóricos y matemáticos que
lo fundamentan resultan mucho más sencillos de comprender para sistemas lineales. En
la Sección A.1 se introduce cómo es la representación de estado de un sistema lineal,
para a continuación, en la Sección A.2 explicar qué es la matriz de ganancias de Kalman
y cómo conseguir su valor óptimo. Finalmente se describen las ecuaciones que componen
el proceso de cálculo del filtro, en la Sección A.3.
zk = G(xk , uk , vk ) (A.2)
xk+1 = A · xk + B · uk + wk (A.3)
zk = C · x k + D · u k + v k (A.4)
Donde A, B, C y D son matrices de coeficientes que recogen la relacion entre las variables de
estado en la muestra actual y las variables de estado en la muestra anterior, matriz A, entre las
variables de estado en la muestra actual y el vector de entradas, matriz B, entre las salidas y las
variables de estado actuales, matriz C, y entre las salidas y el vector de entradas en la muestra
actual, matriz D.
Siendo:
K: La matriz de corrección
ek = xk x̂k (A.8)
La matriz K de la Ecuación A.5 se elige de tal forma que minimize la covarianza del
error a posteriori, Ecuación A.10, es decir, aquella que proporcione la estimación de máxima
verosimilitud. Para ello se sustituye la Ecuación A.9 en la Ecuación A.5 y tras manipular la
ecuación, resulta la siguiente expresión para K:
Pk · CkT
Kk = (A.11)
Ck · Pk · CkT + Rk
Cuando la covarianza del error en la medida, Rk , tiende a cero, K hace que el residuo tenga
mayor importancia.
lı́m Kk = Ck 1 (A.12)
Rk !0
Por otro lado, cuando la covarianza del error estimado a priori, Pk 1 tiende a 0, el residuo
interviene en menor medida en la Ecuación A.5.
lı́m Kk = 0 (A.13)
Pk !0
En una primera iteración, los pesos de la matriz K se estiman por observación de la precisión
de los sensores y la exactitud del modelo matemático disponible. Posteriormente se realizan
ensayos donde se comparan ambas salidas yk y zk y se reajustan los pesos hasta que son
similares. La salida estimada, yk , al ser digital estará libre de ruidos analógicos, a diferencia de
zk .
1. Para los valores iniciales de x̂k y P̃k se calcula la matriz de ganancias de Kalman en la
muestra k:
Kk = Pk · HkT · (Hk · Pk · HkT + Rk ) 1 (A.14)
Pk = (I Kk · Ck ) · P̃k (A.16)
3. Con estas nuevas estimaciones de x̃k+1 y P̃k+1 se repiten los procesos de Corrección y
Predicción.
Bajo las hipótesis de que Qk y Rk son constantes, tanto matriz de covarianzas del error en la
estimación Pk y la ganancia de Kalman Kk , convergerán pronto y permanecerán constantes. El
ruido del proceso, Qk , en cambio, no suele permanecer constante.
1. Habilitar el acceso remoto SSH a la Raspberry Pi, de lo contrario será imposible controlarla
desde Matlab-Simulink.
2. Habilitar las comunicaciones SPI, si se emplea algún elemento hardware que las utilice.
En este proyecto no sería necesario.
3. Habilitar las comunicaciones I2C, si se emplea algún elemento hardware que las
utilice. En este proyecto es indispensable para permitir la comunicación entre los dos
microcontroladores.
4. Deshabilitar la consola de Linux sobre el puerto serie y habilitar el puerto serie. Para ello,
a la pregunta ’Would you like a login shell to be accessible over serial?’ responder No.
Una vez hecho esto, reiniciar la Raspberry Pi para guardar todos los cambios.
4. Salir del fichero pulsando Ctrl + X, guardar los cambios en el propio fichero y reiniciar la
Raspberry Pi.
Por algún motivo, desconocido actualmente, puede llegar a ocurrir que por inactividad
o por algún uso indebido de la Raspberry Pi es posible que desaparezca de la línea el
i2c_arm_baudrate = 400000, por lo que si se detecta algún fallo en la comunicación
I2C, es altamente recomendable revisar que no haya desaparecido la misma del archivo de
configuración.
En este anexo se recogen las librerías que han sido empleadas para escribir la estructura
que intercambian entre sí los dos microcontroladores: La Raspberry Pi 3B+, máster en la
comunicación, y el ATMega32U4, esclavo en el bus I2C.
Servo.h
PololuRPiSlave.h
Balboa32U4.h
AStar32U4.h
LSM6.h
LIS3MDL.h
wire.h
[3] Z. Li, C. Yang, and L. Fan, Advanced control of wheeled inverted pendulum systems, 2013,
vol. 9781447129.
[5] F. Grasser, A. D’Arrigo, S. Colombi, and A. C. Rufer, “JOE: A mobile, inverted pendulum,”
IEEE Transactions on Industrial Electronics, vol. 49, no. 1, pp. 107–114, 2002.
[6] S. Jeong and T. Takahashi, “Wheeled inverted pendulum type assistant robot: Design
concept and mobile control,” Intelligent Service Robotics, vol. 1, no. 4, pp. 313–320, 2008.
[7] S. Kajita, F. Kanehiro, K. Kaneko, K. Yokoi, and H. Hirukawa, “The 3D linear inverted
pendulum mode: a simple modeling for a biped walking pattern generation,” pp. 239–246,
2002.
[10] C. C. Lee, “Fuzzy logic in control systems: fuzzy logic controller, Part II,” IEEE Transactions
on Systems, Man, and Cybernetics, vol. 20, no. 2, pp. 419–435, 1990.
[11] C. H. Huang, W. J. Wang, and C. H. Chiu, “Design and implementation of fuzzy control
on a two-wheel inverted pendulum,” IEEE Transactions on Industrial Electronics, vol. 58,
no. 7, pp. 2988–3001, 2011.
[13] S. Omatu, T. Fujinaka, and M. Yoshioka, “Neuro-PID control for inverted single and double
pendulums,” pp. 2685–2690, 2002.
[14] Seul Jung and Sung Su Kim, “Control Experiment of a Wheel-Driven Mobile Inverted
Pendulum Using Neural Network,” IEEE Transactions on Control Systems Technology, vol. 16,
no. 2, pp. 297–303, 2008.
[15] Shiuh-Jer Huang and Chien-Lo Huang, “Control of an inverted pendulum using grey
prediction model,” IEEE Transactions on Industry Applications, vol. 36, no. 2, pp. 452–458,
2002.
[16] H. Kajiwara, P. Apkarian, and P. Gahinet, “LPV Techniques for Control of an Inverted
Pendulum,” IEEE Control Systems, pp. 44–54.
[20] G. B. Greg Welch, “An Introduction to the Kalman Filter,” Department of Computer Science,
University of North Carolina at Chapel Hill, 2018.
[21] K. Reif, S. Günther, E. Yaz, and R. Unbehauen, “Stochastic stability of the discrete-time
extended Kalman filter,” IEEE Transactions on Automatic Control, vol. 44, no. 4, pp. 714–
728, 1999.