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
fuente
Respuestas:
El barómetro que lleva el pixhawk tiene una resolución de altitud de 10 cm. Si eso no es suficiente, podría escribir un filtro kalman que use los datos del acelerómetro en el paso de predicción y el sensor ultrasónico y / o el barómetro en el paso de corrección.
Pero no veo que esto resuelva tu problema. Una medición precisa de la altitud a 20hz debería ser suficiente si todo lo que intenta hacer es mantener la altitud.
¿Cuál es la frecuencia constante / natural y la amortiguación en su controlador?
Supongo que no había terminado de leer tu pregunta esta mañana (fue antes de mi café). La aceleración del imu es la medida de la aceleración más la gravedad. Para obtener la aceleración inercial del imu, reste el vector de gravedad de la medición. Nunca podrá controlar las mediciones de aceleración integradas. El ruido corrompe las mediciones y no tiene forma de corregirlo.
--- responde a la parte de control de la pregunta
Supongamos que todo lo que está tratando de hacer es mantener una altitud y no le preocupa mantener una posición por ahora (aunque este enfoque también funcionará para eso). Y suponiendo que pueda ordenar cualquier empuje que desee (dentro de lo razonable), esto se convierte en un problema fácil.
Un primer paso en la dinámica del sistema parece
donde positivo está arriba. Agreguemos un componente de desplazamiento a nuestro acelerador que se ocupa de la gravedad. Entoncesz
Nuestra nueva dinámica se parece a
¡Frio! Ahora diseñamos una ley de control para poder alcanzar la altitud deseada.
Nuestro sistema de control será un resorte virtual y un amortiguador entre nuestro quad y la altitud deseada (este es un controlador pd).
El sistema ahora debería comportarse como un sistema de segundo orden. pueden elegir y para lograr la relación de amortiguamiento y la frecuencia natural que está buscando.kp kd
En este punto, quisiera reiterar que la integración de datos del acelerómetro no es una forma correcta de generar estimaciones estatales. Si realmente quiere hackear algo rápidamente, alimente las mediciones del sonar a través de un filtro de paso bajo con una frecuencia de caída apropiada. Su vehículo no va a oscilar a 20 hz, por lo que controlar solo los datos de la sonda estará bien.
fuente