Acelerómetros en un robot de equilibrio automático, ¿no podemos hacerlo mejor?

9

Actualmente estoy leyendo sobre robots autoequilibrados que usan una IMU (giroscopios + acelerómetros) para estimar su ángulo de inclinación actual.

La mayoría de los documentos que he encontrado dicen lo mismo:

  • No puede simplemente tomar la tangente de arco de los datos del acelerómetro para encontrar la dirección de la gravedad porque se ven afectados por "ruidos de inercia".
  • No puede integrar la salida del giroscopio con el tiempo porque se desplaza.
  • Hay dos soluciones generalmente aceptadas para fusionar esos datos:
    1. Un filtro de Kalman que estima la inclinación actual junto con el sesgo actual del giroscopio .
    2. Un filtro complementario que aplica un filtro de paso bajo en los datos del acelerómetro (se puede confiar en ellos a largo plazo) y un filtro de paso alto en los datos del giroscopio (se puede confiar en el corto plazo).

Todas las fuentes que he encontrado parecen utilizar los datos sin procesar de los acelerómetros en esos filtros, sin tener en cuenta el hecho de que, en un robot de autoequilibrio, podemos tener una muy buena estimación del "ruido de inercia" mencionado anteriormente.

Aquí está mi aunque

Modelemos nuestro robot con un péndulo invertido con un punto de apoyo móvil y usemos este dibujo pobre como referencia.

ingrese la descripción de la imagen aquí

Las fuerzas de inercia que sienten los acelerómetros en C se pueden derivar de (si no cometí ningún error)

(Cr¨CΘ¨)=(-X¨pecado(Θ)-RΘ˙2-X¨cos(Θ)+RΘ¨)

Asumiendo que

  • Nuestro robot está rodando sin resbalar
  • Podemos medir x (ya sea usando motores paso a paso o motores DC con codificadores)

Entonces podemos tener una buena estimación de todas esas variables:

  • X¨^k : Diferencias finitas sobre nuestras medidas actuales y anteriores de X
  • Θ˙^k : La lectura actual del giroscopio
  • Θ^k : Estimación previa de Θ más la integración de Θ˙^k y Θ˙^k-1 más de una Δt
  • Θ¨^k : Diferencias finitas sobre Θ˙^k y Θ˙^k-1

Una vez que tenemos eso, podemos negar el efecto de las fuerzas de inercia en los acelerómetros, dejando solo una medida mucho mejor de la gravedad.

Probablemente todavía sea una buena idea usar esto como la entrada del filtro Kalman habitual como en 1. arriba.

¿Quizás podamos incluso construir un filtro de Kalman que pueda estimar todas esas variables a la vez? Voy a intentar eso

¿Qué piensas? ¿Me estoy perdiendo de algo?

Creo que el robot de autoequilibrio podría ser una buena etiqueta, pero no puedo crearlo

Julien
fuente
Un telémetro láser sería increíblemente útil.
holmeski

Respuestas:

1

Si construye correctamente un filtro de Kalman con una entrada 'x', entonces sí, será mejor. En particular, el sensor de inercia no puede darle un valor absoluto para x en cualquier caso, porque (esencialmente) está tratando de integrar una señal de acelerómetro en una posición, y eso es extremadamente sensible al ruido en la salida del acelerómetro.

Algunas cosas que puede considerar en sus viajes:

  1. Un filtro Kalman completo es computacionalmente intenso, pero un Kalman en estado estacionario es básicamente un filtro complementario con frecuencias de rolloff seleccionadas por construcción en lugar de b'guess y b'gosh.
  2. Hablando de b'guess y b'gosh, si quieres que un Kalman funcione bien (y, a veces, en absoluto) debes tener en cuenta con mucha precisión todo lo que entra en tus variaciones. Los Kalman son conocidos por no responder bien a los desajustes entre su modelo y la realidad. Si está dispuesto a hacer los cálculos, busque en H-infinity y otras técnicas robustas de estimación de estado.
  3. Si sigue el camino del infinito H, también puede encontrar el filtro de infinito H en estado estable y obtener la misma ventaja computacional (y, de hecho, la estructura del filtro real en su código incrustado será la misma; solo tendré diferentes valores en los coeficientes).
TimWescott
fuente
Creo que está exagerando el costo computacional de un filtro kalman completo. Julien probablemente tendrá menos de 6 estados, lo que no sería un problema en la mayoría de las juntas.
holmeski
1

Si bien esta no es una respuesta completa a su pregunta, quiero dejar algunos de mis pensamientos. Creo que te perdiste:

  1. Gravedad en sí, que apunta hacia abajo y generalmente es de aproximadamente 9.81 m / s², pero puede ser diferente dependiendo de su ubicación (solo mide la gravedad 0 cuando el robot está en caída libre)
  2. Los sensores generalmente no están alineados al 100% con su eje x / y / z (el chip no está totalmente horizontal en la PCB ... la PCB no está montada totalmente horizontal / verticalmente en su robot, etc.); necesitas compensar esto
  3. Los sensores de acelerómetro tienen un valor de compensación y ganancia, que debe compensar. Se ven afectados, por ejemplo, por la temperatura y las tolerancias de fabricación. Hay algoritmos de calibración en línea para esto; pero también puede poner estas variables desconocidas en un filtro de Kalman.
  4. Los giroscopios tienen una deriva, que también depende de la temperatura. No es una constante, pero puede cambiar con el tiempo. Esta deriva se puede compensar ligeramente con la ayuda de un magnetómetro.
  5. Los magnetómetros, también conocidos como sensores de brújula en 3D, se pueden utilizar para compensar la deriva de los giroscopios. Sin embargo, a veces se ven afectados por campos electromagnéticos (motores, imanes, acero en paredes, etc.). Entonces no se puede confiar totalmente en ellos.

Un modelo de filtro de Kalman es un buen enfoque. Cuanto más conocimiento sobre el modelo de movimiento que pones en el modelo, mejor funcionará. También necesita saber (co) variaciones de todas las variables ... Qué tan seguro cree que son las mediciones de cada sensor.

SDwarfs
fuente
Buenos puntos sobre problemas del mundo real como calibración, deriva, temperatura, etc.
Ben