¿Cuáles son los métodos para tratar el retraso de la brújula (histéresis dependiente de la frecuencia)?

12

Tengo un robot accionado por la banda de rodadura, con codificadores de rueda de baja precisión para el seguimiento de la distancia y una brújula electrónica para determinar el rumbo. La brújula tiene un retraso significativo (> 1 segundo) cuando el robot gira rápidamente, por ejemplo, después de alcanzar un punto de referencia, girando en su lugar para apuntar a su nuevo rumbo.

¿Cuáles son las formas de lidiar con el retraso? Creo que uno podría tomar muchas medidas y modelar la respuesta de la brújula. Sin embargo, esto parece problemático ya que depende de la velocidad y no sé la velocidad instantánea.

Como un enfoque simple pero lento, hago que el robot gire hasta que apunte más o menos en la dirección correcta, luego hago giros incrementales muy pequeños con breves pausas de medición hasta que apunte en la dirección correcta. ¿Hay otras formas de lidiar con esto?

ViennaMike
fuente

Respuestas:

12

El retraso en la brújula se debe a un filtro de paso bajo, para suprimir el ruido de alta frecuencia.

  • Existen magnetómetros más caros que tienen menos ruido y, por lo tanto, menos retraso.
  • También es posible usar un giroscopio para mejorar la precisión. De hecho, esto es lo que hacen las Unidades de Medición Inercial (IMU). Esto se puede lograr mediante el uso de un filtro de Kalman. Mejorar la precisión ayuda a disminuir el retraso, porque una mayor precisión reduce la dependencia de un filtro de paso bajo para suprimir el ruido. El filtro Kalman fusiona los datos del magnetómetro y también el giroscopio (que mide la velocidad de cambio en el rumbo).

Si sigue con su brújula actual, hay dos soluciones posibles (Advertencia, esto se hace cada vez más avanzado, pero la opción 1 debería ser accesible para la mayoría de las personas sin demasiado trabajo).

  1. Puedes intentar cancelar el filtro. Esto puede eliminar el retraso, pero también aumenta el ruido de alta frecuencia. Después de hacer esto, puede intentar controlar el robot en función de la nueva estimación de rumbo. Para hacer esto, debe experimentar para resolver los parámetros del filtro de paso bajo. Por ejemplo, en un tiempo discreto, puede encontrar:

    donde θ ( t ) es el título estimado (salida de brújula) en el tiempo t , θ es el título real (verdad básica) en el tiempo t .

    θ^(t)=a0θ(t)+a1θ(t1)++akθ(tk)
    θ^(t)tθt

    Puede encontrar los parámetros haciendo un experimento en el que mide la verdad básica utilizando algún otro medio externo. Dadas n + k + 1 muestras, tiene esta ecuación: ain+k+1

    [θ^(k)θ^(k+n)]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)][a0a1ak]

    Y puede resolverlo encontrando: , dondeM+es la matriz pseudo-inversa deM. No hay una forma definitiva de hacer ejerciciok

    [a0a1ak]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)]+[θ^(k)θ^(k+n)]
    M+Mk, así que probablemente solo adivinarás. Para los puntos de bonificación, esto supone que el ruido es blanco e independiente, pero puede blanquearlo primero para eliminar el sesgo y, por lo tanto, mejorar su estimación de los parámetros.

    Puede convertir esto en una función de transferencia (también conocida como transformación Z en el dominio de tiempo discreto):

    Θ^(z)Θ(z)=a0+a1z1+...+akzk

    θ¯(t)

    Θ¯(z)Θ^(z)=1a0+a1z1++akzk

    Convertir de nuevo al dominio del tiempo:

    a0θ¯(t)+a1θ¯(t1)++akθ¯(tk)=θ^(t)

    θ¯(t)=θ^(t)a1θ¯(t1)akθ¯(tk)a0

    θ¯

    θ¯

  2. La solución anterior todavía no es la mejor manera. La estimación ruidosa puede no ser muy útil. Si ponemos esto en una ecuación de espacio de estado, podemos diseñar un filtro de Kalman y un controlador de retroalimentación de estado completo usando LQR (regulador cuadrático lineal). La combinación de un filtro Kalman y un controlador LQR también se conoce como un controlador LQG (gaussiano cuadrático lineal), y utiliza la recuperación de transferencia de bucle para obtener un buen controlador.

    Para hacer esto, invente las ecuaciones de espacio de estado (tiempo discreto):

    x(t)=Ax(t1)+Bu(t1)y(t)=Cx(t)

    x(t)=[θ(t)θ(t1)θ(tk)]=[A1A200010000010000010000010]x(t1)+[B0B1000]u(t1)

    y(t)=[θ^(t)]=[a0a1ak]x(t)

    dónde u(t1)A0A1B0B1BA

    QoRo

    QcRcQc=[100000000000]Rc=[1]J=(xTQx+uTRu)

    Luego, simplemente lo pones a través de la ecuación algebraica Riccati de tiempo discreto:

    P=Q+AT(PPB(R+BTPB)1BTP)A

    P

    Por lo tanto, su ley de control puede ser dada por:

    u(t)=K(x(t)xref(t))

    K=(R+BTPB)1(BTPA)

    θ¯

    Qo=Q0+q2BVBTQ0QVV=IqqQo la matriz se desintoniza, lo que significa que se vuelve menos óptima.

    qRcQc

Los conceptos en esta publicación son bastante avanzados, pero si necesita resolver cosas como la ecuación de Riccati, puede usar MATLAB u otro software para hacer esto. También puede haber bibliotecas que ya estén implementando el filtro de Kalman (de nuevo, creo que MATLAB también hace esto).

Para una aplicación integrada, es posible que deba implementar el filtro Kalman usted mismo, aunque probablemente haya una implementación en C.

ronalchn
fuente
Gracias por su excelente y profunda respuesta. Sigo la esencia de tu primera solución y estoy seguro de que puedo superarla. El segundo, como dices, es más desafiante y tendré que trabajar para ver si puedo seguirlo todo.
ViennaMike
4

Un giroscopio es la respuesta simple. Siempre he escuchado, giroscopio para las mediciones cortas, brújula para las largas. Y de manera realista, una taza de filtro de Kallman entre los dos la mayor parte del tiempo. El precio de una placa de giroscopio / acc 6DOF es menos de $ 20 en estos días, demasiado barato para no usarlo.

En un momento, trabajé a través del filtro Kallman de otra persona . y lo puse a trabajar. Un filtro de Kallman es en realidad más un enfoque, no una implementación exacta, y en el caso del giroscopio, el resultado final no necesita usar matemáticas de matriz. Hace que el código sea mucho más simple.

Claveteado3
fuente