Actualmente estoy implementando un quadcopter autónomo que recientemente volé y que era estable, pero no puede corregirse en presencia de perturbaciones externas significativas. Supongo que esto se debe a las ganancias PID insuficientemente ajustadas que deben modificarse aún más durante el vuelo.
Progreso actual:
- Descarté un barómetro ya que el alcance de mi investigación es solo el vuelo en interiores y el barómetro tiene una desviación de + -5 metros según mi colega.
- Actualmente estoy usando un sensor ultrasónico (HC-SR04) para la estimación de altitud que tiene una resolución de 0.3 cm. Sin embargo, descubrí que la frecuencia de actualización del sensor ultrasónico de 20Hz es demasiado lenta para obtener una respuesta lo suficientemente rápida para la corrección de altitud.
- Traté de usar las aceleraciones en el eje Z desde el acelerómetro para obtener datos de altura integrando la aceleración para obtener la velocidad que se utilizará para el PID de velocidad en un esquema de controlador pid en cascada. La implementación actual para el controlador PID de altitud es un controlador pid de bucle único que utiliza un controlador P con la entrada de posición del sensor ultrasónico.
- Había tenido en cuenta las mediciones de aceleración negativas debido a la gravedad, pero no importa cuánto calcule el desplazamiento, todavía existe la existencia de una aceleración negativa (por ejemplo, -0.0034). Calculé el desplazamiento gravitacional configurando el quadcopter para que aún esté en una superficie plana y luego recolectando 20,000 muestras del eje z del acelerómetro para promediarlas para obtener el "desplazamiento" que se almacena como una variable constante. Esta variable se resta de la salida del eje z del acelerómetro para eliminar el desplazamiento y llevarlo a "cero" si no está acelerando. Como se dijo en la pregunta, todavía existe la existencia de una aceleración negativa (por ejemplo, -0.0034). Mi quad luego procede a escalar constantemente en altitud. Con solo el controlador del sensor ultrasónico P, mi quad oscila 50 cm.
¿Cómo puede tratarse efectivamente esta lectura de aceleración negativa consistente?
Solución posible : estoy planeando hacer un controlador PID en cascada para la retención de altitud con el bucle interno (controlador PID) usando el acelerómetro y el bucle externo (controlador P) usando el sensor de sonda. Mi consejero dijo que incluso un solo controlador P de bucle es suficiente para hacer que el quadcopter mantenga su altitud incluso con un sensor lento. ¿Es suficiente? Noté que con solo la ganancia de P, el quadcopter sobrepasaría su altitud.
Integrador con fugas: Encontré este artículo que explica cómo manejó las aceleraciones negativas utilizando un integrador con fugas, sin embargo, tengo algunos problemas para entender por qué funcionaría, ya que creo que el error negativo se convertiría en un error positivo sin resolver el problema. No estoy muy seguro. http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
Controlador PD de bucle único con sensor ultrasónico solamente: ¿es factible utilizar la retroalimentación de un sensor lento?
Fuentes:
Hoja de datos de LSM303DLHC: http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf
Integrador con fugas: http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
ArduPilot PID Loop: http://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg