Tesis PDF
Tesis PDF
TESIS
QUE PARA OPTAR POR EL GRADO DE:
MAESTRO EN INGENIERÍA
PRESENTA:
ING. CARLOS FERNANDO ORTEGA NAVA
TUTOR PRINCIPAL
M.I. JESÚS ÁLVAREZ CASTILLO
I
JURADO ASIGNADO:
TUTOR DE TESIS:
--------------------------------------------------
FIRMA
II
RESUMEN
III
Dedicado a
IV
AGRADECIMIENTOS
En especial a mi mama Araceli Nava quien me ha inculcado valores, principios, disciplina con
su ejemplo, me ha dado todo su amor, cuidado y confianza sin descanso durante toda mi vida.
A mi papa Agustín Ortega quien me enseño liderazgo e inculco el orgullo y amor por la
UNAM. A mis hermanas Areli y Nadia por ayudarme a ser mejor persona, y valoraré cada
instante que compartimos juntos y mientras esté vivo cuidare de ustedes como prometí a
papa.
Al M. I. Jesús Álvarez por las clases en el semestre en curso, por dirigir y apoyarme durante mi
estancia en la maestría, así como impulsar mis logros académicos y motivar proyectos a futuro.
También a la Dra. Graciela Velasco por el tiempo dedicado en cada clase, asesorías,
aportaciones en este proyecto de tesis y apoyo la realización de un artículo y presentación para
el congreso SOMIXXX.
Por supuesto quiero agradecer a la Dra. Margarita Navarrete, al Dr. Jorge Prado por compartir
su experiencia, dedicarle el tiempo necesario revisando cuidadosamente y proponiendo mejoras
en mi trabajo de Tesis. También gracias al Dr. Saúl de la Rosa por las asesorías, revisiones,
consejos y aportes en este trabajo.
Finalmente quiero agradecer al Conacyt por el apoyo financiero para realizar mis estudios de
maestría.
V
ÍNDICE
AGRADECIMIENTOS ............................................................................................................................................ V
1 INTRODUCCIÓN ........................................................................................................................................... 3
1.1 Objetivo principal .............................................................................................................................. 7
1.2 Objetivos particulares ..................................................................................................................... 7
1.3 Justificación.......................................................................................................................................... 7
1.4 Metodología ......................................................................................................................................... 8
1.5 Metas....................................................................................................................................................... 8
1.6 Resultados esperados ...................................................................................................................... 9
2 ESTADO DEL ARTE ................................................................................................................................... 10
3 DINÁMICA DEL CUADROROTOR ........................................................................................................ 21
3.1 Momento angular ............................................................................................................................ 22
3.2 Momento de fuerza ......................................................................................................................... 24
3.3 Ángulos de Euler .............................................................................................................................. 27
3.4 Fuerza de sustentación y momentos en el cuadrorotor .................................................. 28
3.5 Modelo del motor ............................................................................................................................ 30
4 CONTROLADOR PID ................................................................................................................................. 32
5 DESCRIPCIÓN DEL SISTEMA ............................................................................................................... 36
6 IMPLEMENTACIÓN DE LA PROGRAMACIÓN Y CIRCUITOS .................................................... 39
6.1 Controlador Electrónico de velocidad ESC ........................................................................... 41
6.1.1 Calibración del ESC ............................................................................................................... 42
6.1.2 Modo programación del ESC ............................................................................................. 45
6.1.3 Modo normal del ESC ........................................................................................................... 46
6.2 Sensor Hub Booster Pack ............................................................................................................. 47
7 PRUEBAS EXPERIMENTALES .............................................................................................................. 51
8 RESULTADOS DE LA IMPLEMENTACIÓN ....................................................................................... 57
9 CONCLUSIONES ......................................................................................................................................... 64
10 APÉNDICE................................................................................................................................................ 66
10.1 Apéndice A Programa principal ............................................................................................... 66
10.2 Apéndice B Diagramas eléctricos.............................................................................................. 79
10.3 Apéndice C Datos técnicos ........................................................................................................... 82
11 REFERENCIAS ........................................................................................................................................ 85
VI
ÍNDICE DE FIGURAS
1
ÍNDICE DE TABLAS
2
1 INTRODUCCIÓN
Para el ámbito militar los usos se dividen en tres áreas (Tabla1-1) una
acuática, una terrestre y una aérea.
Tabla 1-1 Aplicaciones militares de los UAVS
Naval
Detección de flotas enemigas.
Señuelo de misiles emitiendo señales artificiales.
Inteligencia electrónica.
Retransmisión de señales de radio.
Protección de los puertos de ataques en altamar.
Colocación y seguimiento de boyas de sonar y posiblemente otras formas de
guerra antisubmarina.
Armada
Reconocimiento.
Inspección de la actividad enemiga.
Monitoreo de armas nucleares, biológicas o químicas contaminantes (NBC).
Inteligencia electrónica.
Detección y seguimiento de blancos.
Ubicación y detección de minas terrestres.
Fuerza aérea
Vigilancia de largo alcance y grandes alturas.
Sistema de interferencia de radar y destrucción del sistema.
Inteligencia electrónica.
Seguridad del aeródromo base.
Evaluación de los daños del aeródromo.
Eliminación de bombas sin explotar.
3
Tabla 1-2 Aplicaciones civiles de los UAS
Los términos que actualmente se usan para clasificar los UAV cubren una
amplia gama de sistemas (R. Austin et al, 2010). Que son clasificados de
acuerdo a su altitud, duración en vuelo continuo y peso (Tabla 3-1):
Tabla 1-3 Clasificación de los UAV
4
Mini UAV o MUAV. Por debajo de 20Kg capaz de operar en rangos de hasta
30 Km.
Micro UAV o MAV. Fue originalmente definida con hélices no más grandes
de 150 mm de radio y un peso por debajo de los 2Kg. Su uso principalmente
es para ambientes urbanos.
Nano vehículos aéreos (NAV Nano air vehicles). Del tamaño de una semilla.
5
marcadores o sensores externos. Su método consiste en tres componentes
principales. El primero; un sistema para la estimación de posición conocido
como localización simultánea y mapeo (SLAM Simultaneous localization and
mapping). Segundo; emplean un filtro Kalman extendido el cual incluye un
modelo completo del drone y la dinámica de control para fusionarlo y
sincronizar todos los datos y compensar los retardos derivados de los
procesos de comunicación y cálculos necesarios, para alimentar el siguiente
proceso. En tercer lugar un controlador PID (Proporcional Integral
Derivativo) para controlar la posición y la orientación del cuadrorotor. Con
este método generan un mapa a escala real del entorno que visualiza el
cuadrorotor (D. Cremers et al, 2014).
6
1.1 Objetivo principal
1.3 Justificación
7
1.4 Metodología
1.5 Metas
8
1.6 Resultados esperados
9
2 ESTADO DEL ARTE
10
En este trabajo (C. Diao et al, 2011) se propone una nueva ley de control
adaptable para cuadrorotor sujeto a incertidumbres asociadas con la masa
del vehículo, matriz de inercia y coeficientes aerodinámicos amortiguados. A
través de un análisis basado en Lyapunov, demuestran que la posición y los
errores en la guiñada son forzados cerca del cero. Los resultados numéricos
muestran el buen desempeño del controlador. El autor propone en trabajos
futuros desarrollar controladores adaptables, que proporcionarán al
cuadrorotor, la habilidad de rechazar la perturbación. El tiempo de
respuesta es entre 3 a 5 segundos.
11
En este trabajo (D. Lee et al, 2009) se presentan dos tipos de controladores
no lineales para UAV cuadrorotor. Un controlador por linealización
retroalimentada (LF linealization feedback) fue derivado de una manera
convencional con una dinámica simplificada para reducir el número de
términos derivativos de alto orden involucrados en el proceso de diseño.
Como alternativa se introduce una nueva aproximación para el controlador
por modos deslizantes.
12
maniobrar en espacios cerrados. La propuesta del algoritmo será
implementada en la plataforma STARMAC.
13
encuentra en el suelo. La estimación del algoritmo se compara con otros
métodos en una simulación y demuestra que es menos sensible a errores. Se
estudian dos métodos de control, uno utilizando una serie de controladores
retroalimentados y otro usando backsteeping como leyes de control. Los
controladores propuestos son implementados en un sistema para pruebas y
muestran la efectividad del sistema basado en visión para el cuadrorotor. El
cuadrorotor puede hacer equipo con un robot móvil. El robot móvil será
responsable del transporte, comunicación, asistencia para el aterrizaje y
proporcionará los cálculos de información visual. Estas funciones serán
útiles para la detección, caza y otras tareas de cooperación aeroterrestre.
En este trabajo (J. Normey et al, 2001) presenta una solución sencilla y
eficaz para el problema de seguimiento de trayectoria para robot móvil
utilizando un controlador PID. El método propuesto utiliza un modelo
linealizado simple del robot móvil, compuesto de un integrador y un retardo.
El procedimiento de síntesis es simple y permite al controlador PID ser
sintonizado considerando el rendimiento nominal y la robustez como
especificaciones de control. El procedimiento de síntesis es fácil y las reglas
obtenidas son similares al método de Ziegler/Nichols para controladores
PID. El ajuste robusto del controlador puede ser tener en cuenta el uso de
un solo parámetro de sintonía. El ajuste de este parámetro es intuitivo y
permite un buen equilibrio entre rendimiento y robustez, principalmente
cuando el proceso exhibe incertidumbres en los tiempos muertos.
Finalmente los PD propuestos fueron probados usando un robot móvil y
algunos resultaos experimentales han mostrado un buen desempeño a pesar
de las incertidumbres del retardo.
14
En este trabajo (B. Xian et al, 2015), un banco de pruebas de bajo costo para
simulación del cuadrorotor UAV e implementación de esquemas de control
no lineales. El diseño y pruebas de algoritmos de control de vuelo para
cuadrorotor no es una tarea sencilla, debido al riesgo de un posible peligro y
daños durante la práctica de vuelo. Se desarrolla HILS (HILS Hardware in
the loop simulation) a fin de mejorar la seguridad y eficiencia de la
implementación del control de vuelo, a bajo costo y en tiempo real. Para
realizar el banco de pruebas HILS, se usa un mini cuadrorotor como cuerpo
principal, equipado con una micro unidad AHRS (Alttitude Heading
Reference System) y una tarjeta con un DSP (Digital Signal Procesor). El
HILS es implementado usando la trajeta xPC. Una computadora compacta
PC/104 es utilizada como el equipo de destino y una PC portátil se usa como
servidor. Una computadora de escritorio es usada para visualizar el vuelo en
el cual corre el entorno Flight Gear (simulador de vuelo) y Google Earth,
para visualizar los datos tales como la orientación y trayectoria de vuelo del
cuadrorotor. Este banco de datos sirve para simular diversos algoritmos de
control de vuelo sin perder seguridad y confianza. Se muestra la eficacia del
banco de pruebas en un nuevo algoritmo de control basado en modos
deslizantes. Para reducir el costo del banco de pruebas, integrarán algunos
sensores nuevos giróscopos, acelerómetros y magnetómetros basados en
MEMS (Micro-Electro-Mechanical Systems) en la tarjeta DSP y se
desarrollaran algoritmos para fusionar los sensores y obtener mediciones de
posición en lugar de la unidad AHRS. Esto proporcionará un buen enfoque
para validar diferentes metodologías de fusión de sensores. Como trabajo
futuro se investigará un novedoso controlador no lineal para el vuelo del
cuadrorotor y se comprobarán esos algoritmos en el banco de pruebas HILS
comparándolos contra una verdadera prueba de vuelo.
En este trabajo (H. Xie et al, 2015) se propone una dinámica basada en
control visual (IBVS Image-Based Visual Servoing) para un UAV de ala
rotatoria. El objetivo del control de movimiento es seguir las líneas paralelas
y está motivada por tareas de inspección de líneas eléctricas donde la
posición relativa al UAV y la orientación a las líneas son controladas. El
diseño está basado en una cámara cuyo movimiento sigue una cámara física
abordo, pero que está limitada a apuntar hacia abajo independientemente
de los ángulos de rotación y cabeceo. Un conjunto de imágenes es propuesto
para las líneas proyectadas en la cámara virtual. Estas características son
dadas para simplificar la matriz de interacción que a su vez conduce a un
diseño de control IBVS simple. A pesar de que los resultados de la
15
simulación presentadas, demuestran que el diseño todavía funciona con
líneas en un plano no horizontal, no se proporciona ninguna prueba
rigurosa.
16
calculadas. La simulación y los resultados experimentales en un robot
PIONNER 2DX son presentados mostrando el desempeño de los cuatro
controladores propuestos. De los resultados experimentales se concluye que
la metodología propuesta es muy simple para seleccionar los parámetros del
controlador con el fin de lograr un buen rendimiento del sistema durante la
navegación del robot móvil. La metodología propuesta para el diseño del
controlador puede ser aplicada a otros tipos de sistemas. La precisión
requerida del método numérico propuesto para la aproximación del sistema
es más pequeña que la que se necesita para simular su comportamiento. La
principal contribución es que los cuatro controladores son obtenidos con la
misma metodología y no son necesarios cálculos complejos para obtener la
señal de control.
17
este trabajo se describe un conjunto de muestras de experimentos de control
de retroalimentación para este tipo de cuadrorotor, para reforzar la noción
lineal y no lineal con un estudio completo de literatura. Proporcionando a los
investigadores, una visión general y algoritmos de control adaptativos para
la estabilización y la trayectoria de seguimiento para el cuadrorotor, que
describe un conjunto de criterios de rendimiento frecuentemente utilizados
en un UAV.
18
En este trabajo (D. Mellinger et al, 2012) se estudia el problema de diseño
factible de trayectorias y controladores que conducen a un cuadrorotor a una
posición deseada en el espacio. Enfocándose en el desarrollo de una familia
de trayectorias definidas como una secuencia de segmentos, con cada
controlador parametrizado por una posición como objetivo. Cada controlador
es desarrollado del modelo dinámico del cuadrorotor y después
iterativamente refinado a través de experimentos sucesivos para dar cuenta
de los errores en el modelo dinámico y ruido de los actuadores y sensores. Se
muestra que este enfoque permite el desarrollo de trayectorias y los
controladores realizan maniobras agresivas, como volar a través de huecos
estrechos, verticales y posarse en superficies invertidas con alta precisión.
En este trabajo (C. Powers et al, 2013) se modelan los efectos aerodinámicos
de proximidad a superficies horizontales y cercano a otros vehículos
(formaciones en equipo) para MAV cuadrorotor. Se explica la dependencia
de la fuerza de sustentación generada por las hélices y empíricamente se
determinan los coeficientes para el modelo del cuadrorotor presentado. Se
muestra como se debe puede mejorar el desempeño de vuelo en un
cuadrorotor sin sensores adicionales utilizando efectos aerodinámicos. Con
equipos de vehículos que vuelan a 15,10, 6 cm de altura a una velocidad
constante de 6 cm/s con una separación entre cada vehículo de 60 cm y
grabando las velocidades requeridas de los rotores durante el experimento,
se crea un mapa de la superficie del terreno usando el efecto de proximidad
19
de superficie. En el futuro se esperan aplicar los resultados de este trabajo
para la estimación de problemas más complicados, el cual permita una
operación de cuadrorotores en diferentes ambientes. El estudio de la
influencia aerodinámica en la operación de los multirotores permitirán a los
ingenieros hacer mejores diseños y por tanto, controles.
20
3 DINÁMICA DEL CUADROROTOR
21
3.1 Momento angular
⃗ = ∫ ⃗ × ⃗̇ (3.1)
Donde
⃗ - vector de posición.
⃗̇ - velocidad absoluta.
⃗ = ⃗+ ⃗ (3.2)
⃗̇ = ⃗̇ + ( ⃗ × ⃗ ) (3.3)
Donde
⃗=∫ ⃗ + ⃗ × ⃗̇ + ( ⃗ × ⃗ ) (3.4)
⃗=∫ ⃗× ⃗̇ + ( ⃗ × ⃗ ) + ⃗ × ⃗̇ + ⃗ × ( ⃗ × ⃗ ) (3.5)
⃗=∫ ⃗× ⃗̇ + ( ⃗ × ⃗ ) + ⃗ × ⃗̇ + ( ⃗ ∙ ⃗ ) ⃗ − ( ⃗ ∙ ⃗ ) ⃗ (3.6)
⃗= ⃗× ⃗̇ + ( ⃗ × ⃗ ) + ⃗ × ⃗̇ + [( ⃗ ∙ ⃗ ) ⃗ − ( ⃗ ∙ ⃗ ) ⃗ ] (3.7)
22
Donde M es la masa total que coincide con la masa del cuadrorotor.
[( ⃗ ∙ ⃗ ) ⃗ − ( ⃗ ∙ ⃗ ) ⃗ ] = ∙ ⃗ (3.8)
⃗ = ⃗× ⃗̇ + ( ⃗ × ⃗ ) + ⃗ × ⃗̇ + ∙ ⃗ (3.9)
− −
= − − (3.10)
− −
23
3.2 Momento de fuerza
⃗̇ = (3.11)
Donde:
⃗̇ = ∫ ⃗ × ⃗̇ (3.13)
⃗̇ = ∫ ⃗̇ × ⃗̇ + ⃗ × ⃗̈ (3.14)
⃗̇ = ∫ ⃗ × ⃗̈ (3.15)
⃗̈ = ⃗̈ + ⃗̇ × ⃗ + ⃗ × ̇ ⃗ (3.16)
⃗̇ = ∫ ⃗+ ⃗ × ⃗̈ + ⃗̇ × ⃗ + ⃗ × ̇⃗ (3.17)
24
⃗̇ = ∫ ⃗× ⃗̈ + ⃗̇ × ⃗ + ⃗ × ̇⃗ + ⃗× ⃗̈ + ⃗̇ × ⃗ + ⃗ × ̇⃗ (3.18)
⃗̇ = ⃗ × ⃗̈ + ⃗ × ⃗̇ × ⃗ + ⃗ × ⃗ × ⃗̇ + ⃗ × ⃗̈ +
⃗× ⃗̇ × ⃗ + ⃗ × ⃗ × ⃗̇ (3.19)
⃗̇ = ⃗ × ⃗̈ + ⃗ × ⃗̇ × ⃗ + ⃗ × ⃗ × ⃗̇ + ⃗ × ⃗̈ +
⃗× ⃗̇ × ⃗ + ⃗ × ⃗ × ( ⃗ × ⃗) (3.20)
⃗̇ = ⃗ × ⃗̈ + ⃗ × ⃗̇ × ⃗ + ⃗ × ⃗ × ⃗̇ + ⃗ × ⃗̈ +
⃗× ⃗̇ × ⃗ + ⃗ × ⃗ × ( ⃗ × ⃗) (3.21)
⃗̇ = ⃗ × ⃗̈ + ⃗ × ⃗̇ × ⃗ + ⃗ × ⃗ × ⃗̇ +
⃗ × ⃗̈ + ∙ ⃗̇ + ⃗ × ∙ ⃗ (3.22)
= ⃗ × ⃗̈ + ∙ ⃗̇ + × ∙ (3.23)
̈ = (3.24)
= + ⃗× (3.25)
25
En el caso particular de que el polo sea el mismo que el origen del sistema
inercial. El único cambio que se percibe es respecto al polo.
= ∙ ̇+ × ∙ (3.26)
Usando los ejes principales de inercia como direcciones para los vectores
base, esta ecuación matricial equivale a:
̇ − − = ,
̇ −( − ) = ,
̇ − − = (3.27)
26
3.3 Ángulos de Euler
̅ = ̅ , ̅ = ̅ , ̅ = ̅ (3.29)
0
= − 0 (3.30)
0 0 1
1 0 0
= 0 (3.31)
0 −
27
0
= − 0 (3.32)
0 0 1
= (3.33)
− +
= − − − + (3.34)
−
̅ = ̅ (3.35)
La figura 3-3 describe el modelo del cuadrorotor que se usa para su análisis.
28
Figura 3.3 Sistema de coordenadas, fuerzas y momentos en el cuadrorotor (D. Mellinger et al, 2010)
0 0
̈= 0 + 0 (3.36)
− ∑
0 − ̇
= 0 1 ̇ (3.37)
0 ̇
̇ ( − )
̇ = ( − ) − × (3.38)
̇ − + −
29
3.5 Modelo del motor
= (3.39)
Donde:
= Fuerza de sustentación [ ].
= Velocidad angular [ ].
= Constante .
= (3.40)
Donde:
= Momento de fuerza [ ].
= Constante .
=∑ (3.41)
= (3.42)
1 0 −1 1 ⎡ +Δ
⎡ ⎤ ⎤
⎢ ⎥ 1 1 0 −1 ⎢ Δ
⎥
⎢ ⎥= 1 0 1 1 ⎢ Δ ⎥
(3.43)
⎢ ⎥
⎣ ⎦ 1 −1 0 −1 ⎣ Δ ⎦
Δ = , ( − )+ , ( − ) (3.44)
Δ = , ( − )+ , ( − ) (3.45)
Δ = , ( − )+ , ( − ) (3.46)
31
4 CONTROLADOR PID
Donde
( ): Error de la señal.
: Ganancia proporcional.
( )= 1+ + ( ) (4.2)
( )= (4.3)
( )
32
Figura 4.1 Respuesta de salida en lazo abierto.
Donde:
= − (4.4)
= − (4.5)
= (4.6)
=2 (4.8)
= 0.5 (4.9)
( )= ( ) 1+ ( )
+ (4.10)
33
Agrupando términos:
( )
( )
= +( )
+ (1 − ) (4.11)
Donde:
= (4.12)
= (4.13)
= (4.14)
34
Existe un problema asociado a este diseño llamado “integral windup”, el
cual provoca largos períodos de sobre impulsos, a causa de los valores
excesivos que alcanza la señal de control debido a la acumulación en el
integrador. Esto se evita limitando la señal de control entre un valor mínimo
y un máximo, es decir estableciendo un intervalo.
35
5 DESCRIPCIÓN DEL SISTEMA
Para los propósitos de este trabajo se escoge un cuadrorotor que este dentro
de la categoría MAV. Los requerimientos para entrar en esta categoría son:
un peso menor a 2 Kg, hélices de longitud menor a 150mm de radio y rango
de vuelo menor de 30Km.
Para este sistema se usó el SK-450 conocido así por su diseño. La estructura
del cuadrorotor consiste en una plataforma central en donde se coloca la
electrónica para el control y la batería. La estructura central está unida a
cuatro largueros equidistantes formando una cruz. Al extremo de cada
larguero en la parte superior se encuentran los motores y en la parte
inferior el tren de aterrizaje. Los largueros son de nylon y la plataforma
central que los une está hecha de fibra de vidrio. El tamaño es de 450 mm de
ancho, 80 mm de altura; lleva cuatro motores MT2213-935KV sin escobillas
(BL) de 55 g de peso cada uno; los motores con los que cuenta son modelos
recientes específicamente para usarlos en multirotores y se les puede
adaptar hélices de 10 x 4.5 y 8 x 4.5 in; cuatro hélices de plástico de 10 x 4.5
in que equivale a 127 mm que es menor a 150 mm de radio, dos para giro en
sentido horario y dos para sentido anti horario; cuatro controladores
electrónicos de velocidad (ESC) de 20 A de la marca Turnigy; una batería de
polímero de Litio de 2200 mAh, con un arreglo interno tres serie uno
paralelo (3s1p) de 11.1v.
36
Para el controlador de vuelo se utiliza la tarjeta de desarrollo TivaC Launch
Pad de Texas Instruments que tiene los módulos necesarios para la
implementación de un piloto automático. Utiliza un microcontrolador
TM4C123GH6PMI de última generación de 32 bits ARM CortexM4 con
manejo de punto flotante con una velocidad de 80 MHz. Cuenta con 8
módulos PWM (Pulse Width Modulation), que son suficientes ya que el
cuadrorotor solo necesita 4, uno por cada motor. Cuenta con 10 módulos I2C
para poder comunicarse con sensores para navegación que utilicen este
protocolo. Para una comunicación con la computadora se dispone de 8
módulos UART para protocolo serial y un módulo USB. Además de 2
módulos CAN, 4 SPI, 3 comparadores analógicos, 2 perro guardián, 8
temporizadores de 32bits cada uno, 12 convertidores analógico digital
(ADC). Una memoria de programa de 256 KB, memoria de datos de 32 KB
SRAM y memoria de datos de 2 KB EEPROM.
37
Figura 5.1 Componentes del cuadrorotor SK450
38
6 IMPLEMENTACIÓN DE LA PROGRAMACIÓN Y
CIRCUITOS
39
Figura 6.2 Implementación física y su relación con el diagrama a bloques
40
6.1 Controlador Electrónico de velocidad ESC
41
Los motores BL no funcionan al conectarlos directamente a una fuente de
poder. Los ESC se encargan de la secuencia de conmutación que por medio
de un puente h trifásico, permite el funcionamiento del motor (Microchip
AN885).
Esta dentro del modo programación. Cuando es la primera vez que se utiliza
el ESC, es necesario calibrarlo. Este procedimiento sirve para reconocer la
señal PWM de entrada, esto es porque los transmisores comerciales en
ocasiones manejan diferentes periodos entre 10 a 20 ms, de esta forma
puede ser compatible con varios tipos de transmisores.
42
Figura 6.4 Señal PWM para el ESC
43
Para la calibración de ESC, se debe seguir la siguiente secuencia según el
diagrama de flujo de la figura 6-5.
44
6.1.2 MODO PROGRAMACIÓN DEL ESC
45
6.1.3 MODO NORMAL DEL ESC
46
6.2 Sensor Hub Booster Pack
El sensor Hub fue diseñado por el fabricante como expansión del Tiva
launch pad. En la tabla 10-2 Interfaz de conexión del TivaC Launch Pad, se
muestra la disposición de pines que utiliza para su conexión con el TivaC. El
Sensor Hub cuenta con los siguientes sensores: TI TMP006 Infrared
Temperature, Bosch BMP180 Digital Pressure, Invensense MPU-9150 9-
axis Motion, Intersil ISL29023 Ambient & Infrared Light Sensor, Sensirion
SHT21 Humidity & Ambient Temperature Sensor de los cuales para este
propósito únicamente se necesita el MPU-9150 que contiene los 3 giróscopos,
3 acelerómetros, 3 magnetómetros y el BMP180 que contiene el sensor de
presión (barómetro), ambos se comunican al TivaC por medio de protocolo
I2C.
47
Figura 6.8 Comunicación con Sensor Hub Booster Pack
48
La adquisición de datos para los ángulos , y se muestran en las
siguientes gráficas (figuras 6-9, 6-10, 6-11). Para el eje de las abscisas
representa el tiempo donde cada 50 muestras representa un segundo. Tanto
para como para , la variación está entre -0.15 y 0.15 grados. Mientras
que para la variación entre 1 a 8 grados. Esto significa que para la
rotación y el cabeceo hay lecturas más precisas que para la guiñada.
49
Figura 6.11 Adquisición para en 4 grados
50
7 PRUEBAS EXPERIMENTALES
Para este experimento se colocó para cada motor BL una hélice de plástico
EPP1045 y se le conectó un multímetro línea a línea para medir el voltaje
con carga mientras se varía el ancho del pulso en la salida PWM en un
motor para regular su velocidad.
EPP1045 VOLTAJES
PWM MOTOR1 MOTOR2 MOTOR3 MOTOR4
0 0 0 0 0
50 0 0 0 0
100 0 0 0 0
150 2,77 1,63 1,7 1,7
200 4,4 3,01 3,08 3,09
250 5,33 3,83 3,82 3,84
300 6,01 4,49 4,48 4,5
350 6,29 4,98 5 5,04
400 6,56 5,43 5,4 5,47
450 6,83 5,74 5,75 5,81
500 7,09 6,11 6,12 6,21
550 7,23 6,38 6,38 6,49
600 7,34 6,65 6,65 6,77
650 7,47 6,95 6,95 7,06
700 7,6 7,24 7,27 7,35
750 7,72 7,49 7,51 7,62
800 7,85 7,75 7,79 7,9
850 7,97 8,01 8,07 8,19
900 8,04 8,22 8,25 8,41
950 8,04 8,22 8,25 8,39
1000 8,04 8,22 8,25 8,39
1050 8,04 8,22 8,25 8,39
1100 8,04 8,22 8,25 8,39
1150 8,04 8,22 8,25 8,39
1200 8,04 8,22 8,25 8,39
1250 8,04 8,22 8,25 8,39
51
Figura 7.1 PWM - Voltaje
52
Según las especificaciones del motor, la constante de velocidad es de
= 935[ / ] con lo que se puede encontrar la velocidad angular en
RPM
= × (7.1)
= + (7.3)
Donde:
es la ecuación de la recta.
es la pendiente.
= + (7.4)
=0.005488485; =3.349273
53
450 5.81909091
9
500 6.09351515
550 6.36793939 8
600 6.64236364 7
650 6.91678788
6
700 7.19121212
750 7.46563636 5
800 7.74006061 4
850 8.01448485
3
900 8.28890909
2
0
0 200 400 600 800 1000
=( + )935 (7.5)
= (7.6)
se obtiene = 74.8 10 .
54
Para determinar la constante se repitieron las pruebas en 5 ocasiones con
la batería recientemente cargada y el valor de PWM se observaba por medio
de una interfaz serial a través de la computadora, mientras el cuadrorotor
empezaba a entrar en vuelo. Cabe mencionar que estas pruebas se realizan
con un control manual, en donde desde la pc se envía el ancho de pulso
adecuado para que el cuadrorotor entre en vuelo y este valor es visualizado
en tiempo real por medio de la computadora.
55
Figura 7.4 Algoritmo del programa principal
56
8 RESULTADOS DE LA IMPLEMENTACIÓN
57
Se hace la programación para la comunicación I2C con los sensores de
medición, utilizando funciones del Tiva Ware. Con las pruebas realizadas
con los sensores de medición, giróscopos, acelerómetros y magnetómetros del
MPU-9150 a través del software, se obtuvo una adquisición de datos a una
taza de muestreo de 50 Hz para los giróscopos, acelerómetros y
magnetómetros, que entregan una velocidad angular rad/s, una
aceleración lineal a m/s2 y la densidad de flujo magnético T
respectivamente, además, de los ángulos de Euler para rotación, cabeceo y
guiñada.. Las lecturas tomadas se pueden observar en las gráficas de las
figuras 6-9, 6-10, 6-11.
El primer paso para evaluar la ejecución del programa fue capturando los
valores que el Tiva C calcula y entrega a los módulos PWM para corregir las
velocidades angulares de los motores, mandando esos valores por puerto
serial (figura 8-1) para graficar. Las condiciones son posición = 0, = 0 y
= 0 en el cuadrorotor y el programa = 0°, = 0° y = 0° de igual forma.
Las gráficas de las figuras, muestran valores muy aproximados a 560 de
PWM que corresponde al valor de las pruebas experimentales donde el
cuadrorotor comienza a volar. También se observa la sincronía entre las
salidas PWM enviadas a los motores (figura 8-1 y 8-3).
58
Figura 8.1 Visualización por puerto COM2 de las 4 salidas PWM.
59
Figura 8.3 Comparación de las salidas PWM
60
De forma similar para = 30°, = 0° y = 0° se observa que el motor 1
aumenta su valor de PWM y 3 disminuye para corregir el ángulo ,
mientras que 2 y 4 varían en valores de 550 y 560.
61
En pruebas de vuelo, el cuadrorotor trata de estabilizarse pero tiende a caer
y estrellarse si no hay ninguna intervención. Esto se debe a que no se tiene
perfectamente caracterizados los motores BL, por lo que no se tiene la
gráfica de la función de transferencia para sintonizar las constantes PID de
forma matemática. En el caso de las hélices, no se tiene perfectamente
caracterizado el modelo de hélices EPP1045 que se utilizó. La sintonización
de manera práctica de la constante proporcional y derivativa mejoró el
desempeño en la estabilización. El cuadrorotor oscila en vuelo estacionario,
el uso en espacio libre sin ayuda de los hilos con que se sujetó, se puede
evitar al ir sintonizando el control para que no resulte peligroso ya que
puede estrellarse, romperse y/o dañar a alguna persona.
Por otra parte, el Tiva C cumplió con las necesidades ya que el tiempo que
tarda para realizar todas las tareas y cálculos que fueron programados en
lenguaje C, no rebasa los 20 ms del que dispone entre cada muestra que
envían los sensores de navegación.
62
Figura 8.7 Uso de memoria FLASH y SRAM en el Tiva C
63
9 CONCLUSIONES
64
Respecto a la circuitería, quedan pines para implementar otros dispositivos
como un GPS para diseñar un control de posición y agregar una trayectoria
3D para la navegación del cuadrorotor. También un transmisor y receptor
para una comunicación inalámbrica para enviar los datos a una estación
terrena.
65
10 APÉNDICE
/************************************************************
* PROGRAMA PRINCIPAL
* Creado: 2/01/2016
*
* Carlos Fernando Ortega Nava
*
*************************************************************/
//CABECERA
#include <math.h>
#include <stdint.h> //tipos de variable
#include <stdbool.h>
#include "inc/hw_memmap.h" //direcciones de memoria
#include "inc/hw_ints.h" //dirección de interrupción
#include "driverlib/debug.h"
#include "driverlib/gpio.h" //funciones y definiciones GPIO
#include "driverlib/interrupt.h" //funciones de interrupción
#include "driverlib/pin_map.h" //direcciones para pines
#include "driverlib/rom.h" //
#include "driverlib/sysctl.h" //funciones para el reloj
#include "driverlib/uart.h" //funciones para uart
#include "utils/uartstdio.h" //funciones para imprimir
#include "sensorlib/hw_mpu9150.h" //prototipos
#include "sensorlib/hw_ak8975.h"
#include "sensorlib/i2cm_drv.h"
#include "sensorlib/ak8975.h"
#include "sensorlib/mpu9150.h" //Macros
#include "sensorlib/comp_dcm.h" //Filtro complementario de matriz de cosenos
directores
#include "drivers/rgb.h"
//For UART
#include "driverlib/fpu.h"
//For pressure sensor
#include "driverlib/fpu.h"
#include "inc/hw_types.h"
#include "driverlib/systick.h"
#include "sensorlib/hw_bmp180.h"
#include "sensorlib/bmp180.h"
//For PWM module
#include "driverlib/pwm.h"
#include "inc/hw_gpio.h"
//DEFINICIONES
//***************************************************************************
// MPU9150 I2C Dirección de esclavo
//***************************************************************************
#define MPU9150_I2C_ADDRESS 0x68
//**************************************************************************
// BMP180 I2C Dirección de esclavo
//**************************************************************************
#define BMP180_I2C_ADDRESS 0x77
//**************************************************************************
66
// Periodo de muestreo
// Distancia motor al centro de masa
//**************************************************************************
#define defMuestreo 0.02
#define defDistancia 0.24
//**************************************************************************
// Matriz de inercia
//**************************************************************************
#define defI11 0.058
#define defI22 0.058
#define defI33 0.76
//**************************************************************************
// PD Constantes
//**************************************************************************
#define def_kp 3
#define def_kd 1
//**************************************************************************
// Constantes del modelo del motor
//**************************************************************************
#define def_kF 0.00000660693425f//sustentación
#define def_kM 0.0000001367835979f//momento
#define def_km 0.05//motor
//**************************************************************************
// PI
//**************************************************************************
#define M_PI 3.14159265358979323846
//**************************************************************************
// Estructura para el driver I2C maestro
//**************************************************************************
tI2CMInstance g_sI2CInst;
//**************************************************************************
// Estructura para el driver del sensor ISL29023
//**************************************************************************
tMPU9150 g_sMPU9150Inst;
//**************************************************************************
// Estructura para el driver del sensor BMP180
//**************************************************************************
tBMP180 g_sBMP180Inst;
//***************************************************************************
// Bandera para el BMP180
//***************************************************************************
volatile uint_fast8_t g_vui8DataFlag;
//***************************************************************************
// Estructura para el manejo de DCM
//***************************************************************************
tCompDCM g_sCompDCMInst;
//***************************************************************************
// Bandera para indicar que la transmisión del MPU9150 I2C está completa
//***************************************************************************
volatile uint_fast8_t g_vui8I2CDoneFlag;
//***************************************************************************
// Bandera para indicar que hay un error en la transmisión del MPU9150
//***************************************************************************
volatile uint_fast8_t g_vui8ErrorFlag;
//***************************************************************************
// Bandera para indicar que el dato del MPU9150 está listo para ser
// recuperado
//***************************************************************************
volatile uint_fast8_t g_vui8DataFlag;
67
//***************************************************************************
//
// Subrutina de interrupción del MPU9150.
//
//***************************************************************************
void
MPU9150AppCallback(void *pvCallbackData, uint_fast8_t ui8Status)
{
// Si la transmisión es exitosa fija la bandera para indicar que la
// transmisión esta completa y el dato está listo
if(ui8Status == I2CM_STATUS_SUCCESS)
{
g_vui8I2CDoneFlag = 1;
}
// Almacena la más reciente condición de estado, en caso de que fuera un
// error
g_vui8ErrorFlag = ui8Status;
}
//**************************************************************************
//
// Rutina de interrupción del BMP180
//
//***************************************************************************
void BMP180AppCallback(void* pvCallbackData, uint_fast8_t ui8Status)
{
if(ui8Status == I2CM_STATUS_SUCCESS)
{
g_vui8DataFlag = 1;
}
}
//***************************************************************************
//
// Función que espera que las transmisiones estén completas para el MPU9150
//
//***************************************************************************
void
MPU9150AppI2CWait(char *pcFilename, uint_fast32_t ui32Line)
{
// Procesador a dormir mientras índice que la transmisión esta completa
while((g_vui8I2CDoneFlag == 0) && (g_vui8ErrorFlag == 0))
{
}
// Llama al manejador de errores
if(g_vui8ErrorFlag)
{
MPU9150AppErrorHandler(pcFilename, ui32Line);
}
// Borra la bandera para un siguiente uso
g_vui8I2CDoneFlag = 0;
}
//***************************************************************************
//
// Configuración del UART
//
//***************************************************************************
68
void
ConfigureUART(void)
{
// Habilitar periferico UART
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
// Habilitar UART
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
// Configurar pines para UART
ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
// Usar el oscilador interno de 16MHz
UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
// Baudaje
UARTStdioConfig(0, 115200, 16000000);
}
//***************************************************************************
//
//Configurar el I2C BMP180
//
//***************************************************************************
void
Init_BMP180(void)
{
// Inicializar BMP180.
BMP180Init(&g_sBMP180Inst, &g_sI2CInst, BMP180_I2C_ADDRESS,
BMP180AppCallback, &g_sBMP180Inst);
// Esperar a que la solicitud de inicialización este completa
while(g_vui8DataFlag == 0)
{
// Esperar a que la transmisión I2C este completa
}
// Reiniciar bandera
g_vui8DataFlag = 0;
}
//***************************************************************************
//
// Configurar I2C MPU9150
//
//***************************************************************************
void
Init_MPU9150(void)
{
// Inicialiar el Driver.
MPU9150Init(&g_sMPU9150Inst, &g_sI2CInst, MPU9150_I2C_ADDRESS,
MPU9150AppCallback, &g_sMPU9150Inst);
// Esperar a que la transmisión este completa
MPU9150AppI2CWait(__FILE__, __LINE__);
// Configurar características de filtrado del sensor
g_sMPU9150Inst.pui8Data[0] = MPU9150_CONFIG_DLPF_CFG_94_98;
g_sMPU9150Inst.pui8Data[1] = MPU9150_GYRO_CONFIG_FS_SEL_250;
g_sMPU9150Inst.pui8Data[2] = (MPU9150_ACCEL_CONFIG_ACCEL_HPF_5HZ |
MPU9150_ACCEL_CONFIG_AFS_SEL_2G);
MPU9150Write(&g_sMPU9150Inst, MPU9150_O_CONFIG, g_sMPU9150Inst.pui8Data,
3,MPU9150AppCallback, &g_sMPU9150Inst);
69
MPU9150AppI2CWait(__FILE__, __LINE__);
// Configurar pin de interrupción del MPU9150
g_sMPU9150Inst.pui8Data[0] = MPU9150_INT_PIN_CFG_INT_LEVEL |
MPU9150_INT_PIN_CFG_INT_RD_CLEAR |
MPU9150_INT_PIN_CFG_LATCH_INT_EN;
g_sMPU9150Inst.pui8Data[1] = MPU9150_INT_ENABLE_DATA_RDY_EN;
MPU9150Write(&g_sMPU9150Inst, MPU9150_O_INT_PIN_CFG,
g_sMPU9150Inst.pui8Data, 2, MPU9150AppCallback,
&g_sMPU9150Inst);
// Esperar a que la transmisión este completa
MPU9150AppI2CWait(__FILE__, __LINE__);
}
//***************************************************************************
//
// Configurar las salidas PWM
//
//**************************************************************************
void
Init_PWM(void)
{
// Configurar el reloj para el módulo PWM
SysCtlPWMClockSet(SYSCTL_PWMDIV_64);//40MHz/64=625KHz
// Habilitar los periféricos usados por el módulo PWM
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1);
// Configurar los pines como salidas PWM
GPIOPinConfigure(GPIO_PF1_M1PWM5); //ROTOR1
GPIOPinConfigure(GPIO_PF2_M1PWM6); //ROTOR2
GPIOPinConfigure(GPIO_PF3_M1PWM7); //ROTOR3
GPIOPinConfigure(GPIO_PB5_M0PWM3); //ROTOR4
GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 |
GPIO_PIN_3);//ROTOR1|ROTOR2|ROTOR3
GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_5 ); //ROTOR4
// Configurar el generador de PWM para el modo count down mode
PWMGenConfigure(PWM1_BASE, PWM_GEN_2, PWM_GEN_MODE_DOWN |
PWM_GEN_MODE_NO_SYNC); //ROTOR1
PWMGenConfigure(PWM1_BASE, PWM_GEN_3, PWM_GEN_MODE_DOWN |
PWM_GEN_MODE_NO_SYNC); //ROTOR2,ROTOR3
PWMGenConfigure(PWM0_BASE, PWM_GEN_1, PWM_GEN_MODE_DOWN |
PWM_GEN_MODE_NO_SYNC); //ROTOR4
// Fijar el periodo
PWMGenPeriodSet(PWM1_BASE, PWM_GEN_2, 12500); //ROTOR1
PWMGenPeriodSet(PWM1_BASE, PWM_GEN_3, 12500); //ROTOR2,ROTOR3
PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, 12500); //ROTOR4
// Fijar el ciclo de trabajo
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5, 0); //ROTOR1
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_6, 0); //ROTOR2
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_7, 0); //ROTOR3
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, 0); //ROTOR4
// Iniciar los timer para el generador de PWM
PWMGenEnable(PWM1_BASE, PWM_GEN_2); //ROTOR1
PWMGenEnable(PWM1_BASE, PWM_GEN_3); //ROTOR2,ROTOR3
PWMGenEnable(PWM0_BASE, PWM_GEN_1); //ROTOR4
}
//***************************************************************************
70
//
// Habilitar las salidas PWM
//
//***************************************************************************
void
PWM_ON(void)
{
PWMOutputState(PWM1_BASE, PWM_OUT_5_BIT | PWM_OUT_6_BIT |
PWM_OUT_7_BIT, true); //ROTOR1,ROTOR2,ROTOR3
PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, true); //ROTOR4
}
//***************************************************************************
//
// Retardo en milisegundos
//
//***************************************************************************
void delayms(int ms) {
SysCtlDelay( (SysCtlClockGet()/(3*1000))*ms ) ;
}
//***************************************************************************
//
// Funciones prototipo para el ESC
//
//***************************************************************************
// Fijar el ciclo de trabajo a 10%
void StartESC (void){
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5, 1250); //ROTOR1
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_6, 1250); //ROTOR2
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_7, 1250); //ROTOR3
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, 1250); //ROTOR4
delayms(4000); //5sec
}
//***************************************************************************
//
// Programa principal
//
//***************************************************************************
int
main(void)
{
71
//Contenedores
int_fast32_t i32IPart[16], i32FPart[16];
uint_fast32_t ui32Idx, ui32CompDCMStarted;
float pfData[16];
float *pfAccel, *pfGyro, *pfMag, *pfEulers;
//Para el sensor de presión
float fPressure, fAltitude;
int32_t i32IntegerPart;
int32_t i32FractionPart;
//Para instrumentar el cuadrorotor
int32_t i32IntPart[4];
int32_t i32FraPart[4];
int i=0;
int iconta;
// Inicializar punteros
pfAccel = pfData;
pfGyro = pfData + 3;
pfMag = pfData + 6;
pfEulers = pfData + 9;
//Para limitar lecturas en el sensor de presión
char conta=0;
//Modelo del motor
float fF1Sustentacion,fF2Sustentacion,fF3Sustentacion,fF4Sustentacion;
float fM1Momento,fM2Momento,fM3Momento,fM4Momento;
//Orientación
float fDeltaOmegaFi,
fDeltaOmegaTheta,
fDeltaOmegaPsi;
//Entradas de control manual
float fFi_des = 0;
float fTheta_des = 0;
float fPsi_des;
float fp_des = 0;
float fq_des = 0;
float fr_des = 0;
float fErr_p,
fErr_q,
fErr_r;
float fgErr_p,
fgErr_q,
fgErr_r;
float fOmega1des,
fOmega2des,
fOmega3des,
fOmega4des;
float fFi, fTheta, fPsi;
float fPWM[4];
//Componentes angulares
float fAngular_p,
fAngular_q,
fAngular_r;
float fAngular_pder,
fAngular_qder,
fAngular_rder;
float fretAngular_p,
fretAngular_q,
fretAngular_r;
72
//
float fcTheta, fsTheta;
float fcFi, fsFi;
//
// Configurar reloj principal a 80 Mhz
//
ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ
|SYSCTL_OSC_MAIN);
// Inicialiar PWM
//
Init_PWM(); //Configurar los módulos PWM
PWM_ON();
ConfigGPIO_Instrum();
// Inicializar UART.
ConfigureUART();
73
//
Init_MPU9150();
Init_BMP180();
ui32CompDCMStarted = 0;
//Inicializar el ESC
StartESC ();
iconta=0;
while(1)
{
// Borrar bandera
g_vui8I2CDoneFlag = 0;
74
pfGyro[2]);
CompDCMStart(&g_sCompDCMInst);
}
else
{
// Realiza una actualización
CompDCMMagnetoUpdate(&g_sCompDCMInst, pfMag[0], pfMag[1],
pfMag[2]);
CompDCMAccelUpdate(&g_sCompDCMInst, pfAccel[0], pfAccel[1],
pfAccel[2]);
CompDCMGyroUpdate(&g_sCompDCMInst, -pfGyro[0], -pfGyro[1],
-pfGyro[2]);
CompDCMUpdate(&g_sCompDCMInst);
}
// Reiniciar bandera.
g_vui8DataFlag = 0;
75
// del aire en formato float.
BMP180DataPressureGetFloat(&g_sBMP180Inst, &fPressure);
// Cálculo de altura
fAltitude = 44330.0f * (1.0f - powf(fPressure /
101325.0f, 1.0f / 5.255f));
// Convertir flotante a enteros para imprimir
i32IntegerPart = (int32_t) fAltitude;
i32FractionPart =(int32_t) (fAltitude * 1000.0f);
i32FractionPart = i32FractionPart - (i32IntegerPart *
1000);
if(i32FractionPart < 0)
{
i32FractionPart *= -1;
}
UARTprintf("A %3d.%03d", i32IntegerPart,
i32FractionPart);
// retorno de carro
UARTprintf("\n");
/***********************************************************************
*
*IMPLEMENTACIÓN DE ECUACIONES DINÁMICAS PARA EL CONTROL DEL CUADROROTOR
*
**************************************************************************/
//Error en Componentes angulares de velocidad
fErr_p=(fp_des-fretAngular_p);
fErr_q=(fq_des-fretAngular_q);
fErr_r=(fr_des-fretAngular_r);
fFi = pfEulers[0];
fTheta = pfEulers[1];
fPsi = pfEulers[2];
//PD control
fDeltaOmegaFi = def_kp*(fFi_des-fFi)+def_kd*(fErr_p-
fgErr_p)/defMuestreo;
fDeltaOmegaTheta = def_kp*(fTheta_des-fTheta)+def_kd*(fErr_q-
fgErr_q)/defMuestreo;
fDeltaOmegaPsi = def_kp*(fPsi_des-fPsi)+def_kd*(fErr_r-
fgErr_r)/defMuestreo;
//Control de orientación
fOmega2des = (629+32*0)-(fDeltaOmegaTheta)+ (fDeltaOmegaPsi);
fOmega1des = (629+32*0)+(fDeltaOmegaFi)- (fDeltaOmegaPsi);
fOmega4des = (629+32*0)+(fDeltaOmegaTheta)+ (fDeltaOmegaPsi);
fOmega3des = (629+32*0)-(fDeltaOmegaFi)- (fDeltaOmegaPsi);
//velocidad a PWM
fPWM[0] = (60/(2*M_PI*935))*fOmega1des-3.349273f;
fPWM[1] = (60/(2*M_PI*935))*fOmega2des-3.349273f;
76
fPWM[2] = (60/(2*M_PI*935))*fOmega3des-3.349273f;
fPWM[3] = (60/(2*M_PI*935))*fOmega4des-3.349273f;
fPWM[0] /= 0.005488485f;
fPWM[1] /= 0.005488485f;
fPWM[2] /= 0.005488485f;
fPWM[3] /= 0.005488485f;
//Salidas PWM
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5, 1250+fPWM[0]); //ROTOR1
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_6, 1250+fPWM[1]); //ROTOR2
PWMPulseWidthSet(PWM1_BASE, PWM_OUT_7, 1250+fPWM[2]); //ROTOR3
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, 1250+fPWM[3]); //ROTOR4
fM1Momento = def_kM*(fOmega1des*fOmega1des);
fM2Momento = def_kM*(fOmega2des*fOmega2des);
fM3Momento = def_kM*(fOmega3des*fOmega3des);
fM4Momento = def_kM*(fOmega4des*fOmega4des);
//Componentes angulares
fAngular_p =pfGyro[0]*fcTheta-pfGyro[2]*fcFi*fsTheta;
fAngular_q =pfGyro[1]+pfGyro[2]*fsFi;
fAngular_r =pfGyro[0]*fsTheta+pfGyro[2]*fcFi*fcTheta;
fVb1 = defI11*fAngular_p;
fVb2 = defI22*fAngular_q;
fVb3 = defI33*fAngular_r;
77
fAngular_pder = defDistancia*(fF3Sustentacion-
fF1Sustentacion)-(fVa2*fVb3-fVa3*fVb2);
fAngular_qder = defDistancia*(fF2Sustentacion-
fF4Sustentacion)-(fVa3*fVa1-fVa1*fVb3);
fAngular_rder = (fM1Momento-fM2Momento+fM3Momento-
fM4Momento)-(fVa1*fVb2-fVa2*fVb1);
fAngular_pder /= defI11;
fAngular_qder /= defI22;
fAngular_rder /= defI33;
fretAngular_p = defMuestreo*fAngular_pder;
fretAngular_q = defMuestreo*fAngular_qder;
fretAngular_r = defMuestreo*fAngular_rder;
//////////////////////////////////////////////////////////////////
//Instrumentación. Imprimir salidas PWM
UARTprintf("%03d.%03d\n",i32IntPart[0], i32FraPart[0]);
UARTprintf("%03d.%03d ",i32IntPart[2], i32FraPart[2]);
UARTprintf("%03d.%03d ",i32IntPart[1], i32FraPart[1]);
UARTprintf("%03d.%03d \n",i32IntPart[3], i32FraPart[3]);
}
}
78
10.2 Apéndice B Diagramas eléctricos
79
Figura 10.3 Headers JI, J2, J3 y J4 de la Tiva
80
Figura 10.5 Unidad de medición inercial MPU-9150
81
Figura 10.6 Headers J1, J2, J3, J4 del Sensor Hub
CARACTERÍSTICAS
CARACTERÍ DEL CUADROROTOR
Plataforma SK450
Ancho 450mm
Alto 80mm
Peso 300g
BL Multistar Motor
Constante de Velocidad KV 2213 – 935 RPM/V
Máxima Corriente 15 A
Corriente sin carga 0.4 A
Resistencia 180 ohm
Potencia 200 W
Peso 55g
Sustento máximo 850g
Turnigy ESC
82
Constante de Corriente 20 A
Voltaje de entrada 2-6 V
Salida del BEC 5V/4A
PWM 8KHz
Peso 30g
Hélices EPP1045
Diámetro 8 pulgadas
Inclinación 4.5 pulgadas
Peso c/u 8 gramos
Baterías
Capacidad 2200 mAh
Voltaje 11.1 V
Corte de carga 12.6 V
Corte de descarga 9.0 V
Constante de descarga 1.5 C (3.3A)
Taza de carga máxima 1C (2.2 A)
Taza estándar 0.5C (1.1 A)
Largo 100mm
Ancho 33mm
Altura 22mm
Tiva C Lanch Pad TM4C123G
ARM Cortex M4 Con punto flotante
Frecuencia 80MHz
Arquitectura 32 bits
Memoria de programa 256KB Flash
Memoria de datos 32KB SRAM
Memoria de datos 2KB EEPROM
PWM 8 módulos
ADC 12 canales – 12 bits
UART 8 módulos
USB Full/Hight Speed
I2C 10 módulos
SPI 4 módulos
CAN 2 módulos
Comparadores analógicos 3 módulos
Perro Guardián 2 módulos
Temporizadores 8 módulos - 32bits
Sensor Hub Booster Pack
Sensor de movimiento MPU-9150
Acelerómetro 3-ejes
Giróscopo 3-ejes
Magnetómetro 3-ejes
Sensor de temperatura TMP006
Sensor de presión barométrica Bosh BMP180
Sensor de ambiente y luz infrarroja ISL29023
Sensor de humedad SHT21
83
La interfaz de conexión Sensor Hub está diseñada para ser ensamblada con
la tarjeta de desarrollo Tiva C, ésta última cuenta con cuatro conectores de
10 pines cada uno denominados J1, J2, J3, J4 y corresponde a los cuatro
conectores del Sensor Booster Pack conectados uno a uno, J1 con J1, J2 con
J2, J3 con J3 y J4 con J4. Se presentan las interfaces correspondientes en
las tablas 10-2 y 10-3.
Tabla 10-2 Interfaz de conexión del Sensor Hub Booster Pack
En la tabla 10-4 se muestran los pines de la tarjeta TIVA Launch Pad y los
recursos asociados a esos pines como botones y LEDs.
Tabla 10-4 Botones y LED para el usuario
84
11 REFERENCIAS
A. Modirrousta and M. Khodabandeh (2015). Adaptive non-singular terminal sliding mode controller: new
design for full controlof the quadrotor with external disturbances
Transactions of the Institute of Measurement and Control, [Link]/[Link]
DOI: 10.1177/0142331215611210
A. L. Salih, M. Moghavvemi, H. A. F. Mohamed and K. Sallom Gaeid, (2010). Modelling and pid controller design
for a quadrotor unmanned air vehicle.
Procedings of 2010 Cluj-Napoca Conference. Volume 1. pp 1-5
DOI: 10.1109/AQTR.2010.5520914
C. Diao, B. Xian, Q. Yin, W. Zeng, H. Li, and Y. Yang (2011). A nonlinear adaptive control approach for quadrotor
uavs.
Proceedings of 2011 8th Asian Control Conference (ASCC),2011.
Vol. MoA6.4, pp. 223-228
C. Rosales, D. Gandolfo, G. Scaglia, M. Jordan and R. Carelli (2015). Trajectory tracking of a mini four-rotor
helicopter in dynamic environments - a linear algebra approach.
Robotica, 33, pp 1628-1652 doi:10.1017/
S0263574714000952
D. Lee, H. Jin Kim, S. Sastry (2009). FeedBack Linearization vs. Adaptive Sliding Mode Control for a Quadrotor
Helicopter,
Publisher Institute of Control, Robotics and Systemsand The Korean Intitute of Electrical Engineers, Volume 7,
ISSN 1598-6446, pp 419 - 418
D. Mellinger, N. Michael, M. Kumar. (2012). Trajectory Generation and Control for Precise Aggressive
Maneuvers with Quadrotors. The international Journal of Robotics Research April 2012, Vol 31 No. 5, pp. 664-
674
E. García Breijo (2010), COMPILADOR C CCS Y SIMULADOR PARA PROTEUS PARA MICROCONTROLADORES
PIC
Primera Edición, pp. 153-163
E. Altug, J. P. Ostrowsk, C. J. Taylor (2005). Control of a Quadrotor Helicopter Using Dual Camera Visual
Feedback
The International Journal of Robotics Research Vol. 24, No. 5, pp. 329-341
DOI: 10.1177/0278364905053804
85
G. M. Hoffmann, S. L. Waslander (2008). Quadrotor Helicopter Trajectory Tracking Control
American Institute of Aeronautics and Astronautics, pp 1-14
ISBN:9781605608082
G. Scaglia, L. Q. Montoya, V. Mut and Fernando di Sciascio (2009). Numerical methods based controller design
for mobile robots. Robotica, 27, pp 269-279
doi:10.1017/S0263574708004669
G. V. Raffo, M. G. Ortega and F. R. Rubio (2008) Backstepping/Nonlinear Control for path Tracking of
Quadrorotor Unmanned Aerial Vehicle.
2008 American Control Conference Westin Seattle Hotel, Seattle,
Washington, USA. ISBN 978-1-4244-2078-0 Vol ThC12.6 pp. 3356-3361
G. J. E. Scaglia, V. A. Mut, M. Jordan, C. Calvo, L. Quintero (2008). Robust-control-based controller design for a
mobile robot
© Springer Science+Business Media B.V. 2008, J Eng Math (2009) 63:17–32
DOI 10.1007/s10665-008-9252-0
H. Romero, S. Salazar and R. Lozano (2012). Visual servoing applied to real-time stabilization of a multi-rotor
UAV. Robotica, 30, pp 1203-1212
doi:10.1017/S026357471200001X
H. Xie, A. F. Lynch and M. Jagersand (2015). Dynamic IBVS of a rotary wing UAV using line features.
Robotica, Available on CJO, pp 1-18
doi:10.1017/S0263574714002707
I. Henderson (2010). Civilian Intelligence Agencies and the Use of Armed Drones.
Yearbook of International Humanitarian Law, 13, pp 133-173
doi:10.1007/978-90-6704-811-8_4
J. A. Guerrero, J. A. Escareno, Y. Bestaoui, (2013). Quad-Rotor Mav Trayectory Planning in Wind Fields.
Publisher IEEE, 2013IEEE International Conference on Robotics and Automation (ICRA), ISBN 978-1-4673-
5641-1, pp. 778 - 783
J. Engel and T. Schöps and D. Cremers (2014). LSD-SLAM: Large-Scale Direct Monocular SLAM
13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part II,
ISBN 978-3-319-10604-5, DOI 10.1007/978-3-319-10605-2_54
J. Engel, J. Stückler, D. Cremers (2014). Large-Scale Direct SLAM with Stereo Cameras
13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part II,pp 834-849
ISBN 978-3-319-10604-5, DOI 978-3-319-10605-2_54
J. E. Gómez-Balderas, S. Salazar, J. A. Guerrero and R. Lozano (2014). Vision-based autonomous hovering for a
miniature
quad-rotor. Robotica, 32, pp 43-61
doi:10.1017/S0263574713000611
J. E. Normey-Ricoa, I. Alcala, J. Gomez-Ortega, E. [Link] (2001). Mobile robot path tracking using a robust
PID controller
Control Engineering Practice 9 (2001) pp 1209–1214 2001 Published by Elsevier Science Ltd.
PII: S0967-0661(01)00066-1
K. J. Yonn and N. S. Goo, (2011). Development of Small Autonomous Flying Robot With Four-Rotor System,
Print The 15th International Conference on Advanced Robotics,
ISBN 978-1-4577-1158-9, pp. 150 - 154
86
M. A. M. Basri, A. R. Husain and K. A. Danapalasingam (2014). Intelligent adaptive backstepping control for
MIMO uncertain non-linear quadrotor helicopter systems
Transactions of the Institute of Measurement and Control, [Link]/[Link]
DOI: 10.1177/0142331214538900
M. S. Grewal, L. R. Weill, A. P. Andrews (2001). Global Positioning Systems, Inertial Navigation, and Integration.
Copyright 2001 John Wiley & Sons, Inc. Print ISBN 0-0471-35032-X.
N. Sinan Özbek, M. Önkol3 and M. Önder Efe (2015). Feedback control strategies for quadrotor-type aerial
robots: a survey
Transactions of the Institute of Measurement and Control, [Link]/[Link]
DOI: 10.1177/0142331215608427
O. J. Oguntoyinbo, (2009). PID Control of Brushhless DC Motor and Robot Trayectory Planing and Simulation
whith MATLAB®/SIMULINK®, University of applied Sciences
R. Austin (2010). UNMANNED AIRCRAFT SYSTEMS UAVS DESIGN, DEVELOPMENT AND DEPLOYMENT
A John Wiley and Sons, Ltd., Publication
ISBN 9780470058190 (H/B)
S. Bouabdallah, P. Murrieri, R. Siegwart (2004). Design and Control of an Indoor Micro Quadrotor
Proceedings of the 2004 IEEE, International Conferenceon Robotics8 Automation pp 4393-4398
0-7803-8232-3/04/$17.0002004 IEEE
S. Bouabdallah and R. Siegwart, (2005). Backstepping and Sliding-Mode Techniques Applied to an Indoor
Micro Quadrotor, Proceedings of the 2005 IEEE, International Conference on Robotics and Automation ISBN 0-
7803-8914-X, pp. 2247 - 2252
S. Bouadallah, A. Noth, R. Siegwart (2004). PID VS LQ Control Techniques Applied to an Indoor Micro
Quadrotor.
Proceedings of 2004 IEEE/RSJ International Conference on Intelligent
Robots and Systems, Volume 3 ISBN 0-7803-8463-6, pp. 2451 – 2456
V. K. R. Singh Patel, A. K. Pandey,(2013). Modeling and Performance Analysis of PID Controlled BLDC Motor
and Differents Schemes of PWM Controlled BLDC Motor, International Journal of Scientific and Reserch
Publications, Volume 3, ISSN 2250 – 3153
V. Usenko, J. Engel, J. Stückler, and D. Cremers (2015). Reconstructing Street-Scenes in Real-Time From a
Driving Car
Proc. of the Int. Conference on 3D Vision (3DV), pp 1-8
Z. Zuo (2012). Adaptive trajectory tracking control design with command filtered compensation for a
quadrotor
Journal of Vibration and Control 19(1), pp 94–108
DOI: 10.1177/1077546311431270
87
Bosch BMP180 Digital Pressure Sensor Data Sheet Document Number BST-BMP180-DS000-12, Revison2.8
Technical Reference Code 0 273 300 244
Fabricante: Bosch
88