¿Cómo usar quaternions para alimentar un bucle de estabilización de quadcopter PID?

9

Estoy haciendo un quadcopter. He configurado un bucle PID para estabilizarlo en un ángulo de Euler dado (cabeceo y balanceo). El problema surge cuando el rollo se acerca a los 90 grados (45 grados y más). Los valores ya no tienen sentido, ya que se acerca al bloqueo del cardán. Tengo la intención de hacer maniobras complejas como bucles, etc., que excede el límite de balanceo de 45 grados.

¿Cómo puedo usar quaternions para superar este problema? (Obtengo cuaterniones del MPU-9150.) He leído muchos artículos sobre el tema de los cuaterniones, pero todos hablan de rotaciones en software 3D y de interpolaciones entre dos puntos de rotación. Esto tiene poco sentido ya que no conozco números y matrices imaginarios.

Amigo de kim
fuente
¿Resolviste tu problema? Si no es así, háganos saber cómo va, de lo contrario, puede aceptar una de las respuestas.
marcv81
1
@ marcv81 Sí, está funcionando bastante bien ahora :) Gracias por recordarme aceptar una respuesta :)
Amigo de Kim
Me alegra que esté funcionando. Me hizo pensar en mi propio código y corregir un error también :)
marcv81

Respuestas:

6

Un quadcopter contiene (entre otras cosas) dos algoritmos separados e independientes: un algoritmo de estimación de actitud y un algoritmo de control.

El algoritmo de estimación de actitud calcula información sobre la orientación del quadcopter: los ángulos de balanceo, cabeceo y guiñada.

El algoritmo de control es responsable de conducir los motores para que la orientación del quadcopter coincida con lo que espera el piloto (o el software del piloto automático). Este algoritmo es el que leería los ángulos estimados del cuadricóptero (del algoritmo de estimación de actitud) y cambiaría la velocidad de los motores para intentar igualar los ángulos deseados. Los PID son un algoritmo de control común y adecuado para cuadricópteros.

El bloqueo de cardán es un fenómeno que puede ocurrir en el algoritmo de estimación de actitud. No tiene nada que ver con el algoritmo de control. Como tal, no necesita ESC, motores o hélices para probar el bloqueo del cardán: puede modificar su código para mostrar sus ángulos de balanceo, inclinación y guiñada, y probar que los valores correctos se calculan a medida que mueve manualmente su quadcopter. Es posible que pueda hacer esto con el quadcopter conectado a su computadora, a través de Bluetooth, o utilizando otros métodos dependiendo de su plataforma.

Si los ángulos se calculan correctamente, no necesita preocuparse por los cuaterniones. Si no se calculan correctamente, los cuaterniones podríanayudarte. El algoritmo de estimación de actitud generará 3 ángulos para que el algoritmo de control los use, sin embargo, podría usar una representación interna diferente, como cuaterniones o matrices 3x3. En ese caso, todavía convertiría la información de actitud en ángulos para proporcionar datos utilizables al algoritmo de control. En términos generales, los cuaterniones no son intuitivos pero son computacionalmente eficientes. Esto los hace muy adecuados para plataformas lentas como Arduino. Las matrices o ángulos pueden ser una opción más fácil para un hardware más rápido. Si necesita que elabore una u otra solución, avíseme, pero sería bastante prematuro dar detalles en esta etapa, ya que no estoy convencido de que necesite implementar cuaterniones.

Finalmente, si los ángulos se calculan correctamente, la forma de hacer su bucle quadcopter es controlar la velocidad angular en lugar del ángulo. Si sus palos representan el ángulo del cuadricóptero, no hay forma de hacer un bucle completo: intente visualizar la posición de los palos como los bucles del cuadricóptero y debe entender por qué. Sin embargo, si los palos controlan la velocidad angular, entonces puede controlar la velocidad a la que gira.

¡Buena suerte con tu proyecto!

Nota: En aras de la simplicidad, no he mencionado la opción teórica de manipular los datos como matrices o cuaterniones tanto en el algoritmo de estimación de actitud como en el algoritmo de control. Nunca he visto un quadcopter implementando tales algoritmos.

marcv81
fuente
Gracias por tu respuesta completa! Una persona que trabaja en InvenSense dijo que, en la mayoría de las aplicaciones, los cuaterniones eran más fáciles y mejores que los ángulos de Euler. Al observar los datos atados, parece que es posible corregir un eje para detener el bloqueo del cardán cuando esto está por suceder.
Amigo de Kim
1
Los ángulos de Euler son una mala elección para la representación interna de la orientación. Son simples de visualizar, pero muy difíciles de manipular correctamente para evitar el bloqueo del cardán. Los cuaterniones son mejores porque no te encontrarás con un bloqueo de cardán, pero son difíciles de visualizar. Las matrices son de alguna manera más fáciles de visualizar que los cuaterniones, pero no tan eficientes si su plataforma es lenta. Mi quadcopter usa cuaterniones internamente, pero se convierte en ángulos de Euler para que los PID los usen.
marcv81
3

Primero, creo que necesitas regresar y mirar tu código. El bloqueo de cardán es solo un problema cuando te acercas mucho (dentro de un par de grados) de 90. Si ves un comportamiento extraño a 45 grados, otra causa es otra.

En cuanto a su pregunta, los cuaterniones generalmente no se usan directamente en el control PID básico, ya que tienen un comportamiento complicado que resulta en resultados no intuitivos. Por lo general, se convierten a ángulos de Euler y luego se usan en el controlador PID normal, o se diseñan controladores no lineales especiales para usarlos.

Tenga en cuenta que, para sus maniobras en bucle, el PID generalmente no es un buen controlador: las ganancias que funcionan bien cerca del vuelo estacionario ya no funcionan bien en ángulos grandes. Por lo general, cuando alguien quiere hacer un bucle, pasa a "bucle abierto", es decir, comienza la maniobra bajo control y luego, una vez que pasa un cierto ángulo, simplemente aplica una serie fija de comandos hasta que haya completado el bucle. Averiguar qué serie fija de comandos usar es la parte difícil y, a menudo, usa el aprendizaje de refuerzo (algo así como una forma formal de hacer prueba y error).

ryan0270
fuente
Gracias por tu perspicacia. Soy completamente nuevo en la programación de metal desnudo. Solo he hecho programación de alto nivel. También estoy muy interesado en física y matemáticas, aunque acabo de terminar la escuela secundaria, así que todavía no sé demasiado ...
Amigo de Kim
Estoy haciendo esto con un amigo, y nosotros "inventamos" el circuito PID nosotros mismos. Al estar acostumbrados a una respuesta "correcta", fue muy difícil para nosotros usarla sin saber que esta era una forma común de resolver nuestro problema. Y cuando descubrimos el bucle PID en Wikipedia, nuestro propio bucle PID inventado fue "aprobado".
Amigo de Kim
Así que realmente aprecio su comprensión de cómo esto se hace comúnmente en proyectos de trabajo. El comportamiento extraño del que estoy hablando se reveló al mirar el gráfico en Serial Chart( code.google.com/p/serialchart ). La entrada es la salida directa de Euler del I2CDevLib (MPU-9150). Probaré un poco más. El "error" podría haber sido causado por movimientos imprecisos de mi parte.
Amigo de Kim
El rollo es la línea azul. El rojo es la guiñada, el verde es el tono, el azul es el rollo. Como puede ver, los problemas comienzan desde aproximadamente pi / 4 y hacia afuera. ¿Es este un problema con el I2CDevLib, o se supone que es así? screencast.com/t/svPV3C8B Estoy girando el giroscopio 360 grados alrededor del eje del rodillo.
Amigo de Kim
He visto a AeroQuad poder estabilizarse incluso después de ser lanzado al aire. ¿Esto se debe a que primero se encarga del balanceo, luego del tono y luego del guiñada?
Amigo de Kim
3

Este documento, Control de actitud basado en un cuaternión completo para un Quadrotor por Emil Fresk y George Nikolakopoulos, demuestra lo que está tratando de lograr.

Resumen : el objetivo de este artículo es presentar un nuevo esquema de control basado en el cuaternión para el problema de control de actitud de un quadrotor. Un cuaternión es un número hipercomplejo de rango 4 que se puede utilizar para evitar la singularidad geométrica inherente al representar la dinámica rígida del cuerpo con ángulos de Euler o la complejidad de tener ecuaciones diferenciales acopladas con la Matriz de coseno de dirección (DCM). En el enfoque presentado, tanto el modelo de actitud del cuadrotor como el cuadrado proporcional no lineal propuesto ( P 2), el algoritmo de control se ha implementado en el espacio de cuaternión, sin ninguna transformación y cálculo en el espacio de ángulo de Euler o DCM. A lo largo del artículo, se analizan y discuten los méritos del enfoque novedoso propuesto, mientras que la eficacia del nuevo controlador basado en cuaternión sugerido se evalúa mediante resultados de simulación ampliados.

jgkim2020
fuente
2
Gracias por el artículo relevante @ jgkim2020. ¿Pero puedes dar más detalles? ¿Quizás resumir los hallazgos del artículo? (Los enlaces pueden quedar obsoletos después de todo). También puede consultar Cómo responder
Ben
1
Estoy de acuerdo con Ben: un resumen del documento sería excelente, ya que la muerte de enlace generalmente ocurre después de un tiempo.
Greenonline
2

Este curso gratuito de MOOC, ¡ Bienvenido a AUTONAVx de TUMx! Navegación autónoma para Flying Robots , puede ayudar. Cubre:

  • Teoría del aprendizaje
  • Programación de Quadcoptor de ejercicio que se ejecuta tanto en estimulador como en hardware real
EEd
fuente
El enlace no funciona.
Amigo de Kim
El enlace funciona si está conectado.
Amigo de Kim
El video 1.4 tiene una demostración de muchos quadrotor, realizando acciones sorprendentes. Espero que te interese el tema.
EEd
Puede verificar el software FreeIMU, que proporciona a) datos fusionados de múltiples sensores (giroscopio de velocidad, brújula, acelerómetro), brindando datos más estables, de menor deriva y precisos que solo leer datos sin procesar del chip b) proporcionó múltiples formatos de salida, incluido el tono, rodar y guiñar, que puede ser más sencillo de visualizar, comprender y usar.
EEd
Gracias por tu ayuda. Estoy usando el MPU-9150 que tiene un DMP integrado (fusión de sensores) tanto del giroscopio como de un acelerómetro. Fusionar esto con el magnetómetro debe hacerse manualmente.
Amigo de Kim