Paso 5: sensores. Extra
Como un bono voy a explicar el sensor que he usado y cómo utiliza para obtener un buen resultado. Por un lado, la fusión entre el giroscopio y el acelerómetro es muy útil para controlar la horizontalidad quadcopter, y por otro lado, la altitud de lo quadcopter es también un buen de datos a obtener y se mide usando el sensor de presión y el sensor de temperatura.
Fusión de sensores
Para mantener la horizontalidad del dispositivo, se utilizan dos ángulos, la echada y del rodillo. Estos dos ángulos se miden utilizando dos sensores: acelerómetro y giroscopio. Ambos tienen sus ventajas y desventajas. El acelerómetro puede medir la fuerza de la gravedad, y con esa información podemos obtener el ángulo del dispositivo. El problema del acelerómetro es que también puede medir el resto de las fuerzas que se somete el dispositivo a, por lo que hace un montón de errores y ruido. El giróscopo mide la velocidad angular, por lo que si integramos estos datos podemos obtener el ángulo de cuánto se mueve. El problema de esta medida es que no son perfectos y la integración tiene una desviación. Eso significa que en un lapso corto de tiempo la medida es muy buena, pero para palmos más largos del ángulo de medida se desviará mucho del ángulo real.
La combinación de ambos sensores puede resolver estos problemas. Es sensor llamado fusión, y hay un montón de métodos para combinarlos. En este proyecto he probado dos de ellos: el filtro de Kalman y el filtro complementario.
- El filtro de Kalman es un algoritmo muy extendido en robótica y ofrece un buen resultado con bajo costo computacional. Hay un Arduino biblioteca que implementa este método, pero si quieres aprender más sobre ese método o implementar por ti mismo, mira esta página.
- El filtro complementario es una combinación de dos o más filtros que se conectan a la información de diferentes fuentes y obtiene una estimación del valor real. Se puede aplicar en una única línea de código. Para más información visite esta página.
ángulo = A * (ángulo + gyro * dt) + (1 - A) * accel;
donde A es normalmente es igual a 0.98.
Primero intenté usar un filtro de Kalman pero no obtengo buenos resultados. Se calculó el ángulo con un poco de retraso y afectó el control. El Kalman filtro tiene tres variables que se pueden cambiar basadas en los parámetros de sus sensores y de esta manera usted puede obtener mejores resultados. He intentado cambiar los valores pero no consigo mejores resultados así que decidí implementar el filtro complementario. Pasó a ser mucho más fácil y tenía un coste computacional menor. El filtro complementario funcionó bien para mí.
Altura del nivel del mar
Con el fin de controlar la posición de nuestro quadcopter que necesitamos saber la altitud. Esto se puede medir por la combinación de un sensor de presión y un sensor de temperatura. Se puede obtener solamente de los datos de presión, utilizando la siguiente ecuación:
H = 44330 (1 - (Pressure_measured / 101325) ^ (1 / 5.25588))
Obtuve la forma de la ecuación de la hoja de datos del sensor utiliza (BMP085) esta ecuación se basa en la Fórmula barométrico utilizando los datos de la atmósfera estándar que significa que no es cierto en todos los casos, pero para aplicaciones no precisa es suficiente. Para usos más precisos tenemos que usar la temperatura y presión, utilizando la siguiente fórmula:
H = (((101325 / P) ^ (1 / 5.257) - 1) * (T + 273.15)) / 0.0065
No estoy seguro si esta fórmula es correcta, pero parece que funciona. Hay una Página donde puedes calcular la altura que proporciona la presión a nivel del mar y a la presión y temperatura en el punto que desea calcular la altitud.
Nota: En esta dos fórmulas la altura se calcula en relación con el nivel del mar, así que si usted quiere conseguir la altitud en relación con la tierra tienes que medir primero la altitud al nivel del suelo y restar de las medidas posteriores.