Hola, como estai?
me pareció interesante tu post por 3 cosas:
- Estoy trabajando en algo parecido y puedo usufructuar de lo que has avanzado en el MPU 6050 (jejeje)
- Respecto de los filtros si nos vamos a topar con un problema similar, nos podemos ayudar... nota: un filtro de Kalman me parece un poco sofisticado (sin tener mayores antecedentes de lo que sale Gyroscopio) para filtro de datos.
- Finalmente en los PID ahí si que soy bueno y te puedo ayudar. De hecho te agregue lo mas desarrollado que tengo que es un PI y funciona bastante decente. La D la verdad que me dio lata y no la implementé ya que probé lo que quería.
Antes de empezar con el PID, te quiero hacer un comentario:
- Si es para una variable, es muy fácil. matriz ce 1x1
- Si es para 3 variables, se puede tratar como 3 variables independientes (con sus riesgos) ya que igualas a 0 la interacción que pueda tener la una sobre la otras, que resulta matriz de 3x3 no diagonal.
Para ayudarte algo más:
- Tienes conocimientos de básicos de calculo, Electrónica, control automático o algo así???? para adecuar el lenguaje.
Que es un controlador (regulador) PID ? es un controlador que trabaja en lazo cerrado luego el Error (E) (diferencia entre la referencia (R) y la salida (Y). Lo que genera una Actuacion (U) que puede ser un servo para arriba/abajo, más potencia al motor lo que sea.
Luego tienes:
E = R - Y
U = PID* E (es algo más que una multiplicación, pero te lo explico luego)
Y = TuDron * U
en palabras:
Voy a suponer que controlamos la altura de tu Dron, con la potencia de los motores, asumiendo que medimos de alguna manera y actuamos de alguna manera.
- El error sera la diferencia entre la altura que seteaste y la altura medida. (supongamos que esta bajo la referencia)
- este error se mete al bloque PID y se obtiene una actuación U (que en este caso será ponerle más potencia a los motores)
- finalmente esta U cambio de potencia, actuará sobre tu Dron y subirá agrandando la Y y achicando el error.
Si se pasa funciona al revés.
Ahora el PID (proporcional, integrador y derivador)
su forma es:
U = Kp * E + (Kp/Ti) INT( E) + Kp*Td DER(v) //INT = integral DEV(derivada)
Para los que somos flojos
U = Kp * E + Ki INT( E) + Kd DER(v) (es mas fácil para el ajuste y te ahorras código si quieres que un modo no esté)
Como estos es digital hay que maestrear y el ideal es hacerlos a frecuencia fija (me imagino que lo estas haciendo) yo uso una librería que saque del foro MSTimer2 creo que se llama
En términos gruesos pero suficientes para un PI:
- la Integral es INT(E)(n) = INT(E)(n-1) + E(n) * deltaT (o sea un acumulador)
para la D es un poco más complicado por los ruidos y me imagino que aquí entra el filtro famoso.
- la derivada DEV(E)(n) = (E(n) - E(n-1))/deltaT
Si te fijas el ruido es te deja la escoba (si eres chileno) un Quilombo (si eres argentino) o un lio.
Como viste el PID tiene 3 modos:
-
P proporcional: el U es proporcional al error, luego necesita del error para hacer algo. Es importante ya que es el que actúa "primero" en teoría con Kp infinito error 0. Pero eso es teoría.
-
I Integrador: Es el que te permite tener error 0 y puede funcionar solo como Ki sin modo P, la gracia es que cuando el error es 0 este ha acumulado error y mantiene actuación (U) con E = 0.
-
D derivador: actúa con la tendencia del error. Luego ayuda a apurar cuando nos desviamos y a suavizar cuando llegamos cerca del Error 0. (es prescindible muchas veces).
ya... eso sería por ahora. Si te interesa te puedo seguir explicando, por que el PID tiene varios detallitos:
- Estabilidad, que tiene que ver con que tan histérico son los parámetros, y el modelo de la planta (dron) si lo hay
- Saturación (windup o enrrollamiento) que tiene que ver cuando la actuación (U) llega a su máximo y el integrador sigue acumulando error.
- los retardos (no creo que aplique mucho en este caso)
- Y el ajuste.
Saludos José Miguel
PD: si tienes algo de como preguntarle al MPU te lo agradecería y me ahorrarías algunas horas de investigación.
Test_PI_Com_04.rar (4.54 KB)