Dos cosas.
Si planea hacer un mapeo, necesita un algoritmo completo de localización y mapeo simultáneo (SLAM). Ver: Localización y mapeo simultáneo (SLAM): Parte I Los algoritmos esenciales . En SLAM, estimar el estado del robot es solo la mitad del problema. Cómo hacerlo es una pregunta más grande de la que se puede responder aquí.
En cuanto a la localización (estimación del estado del robot), este no es un trabajo para un filtro de Kalman. La transición de
a no es una función lineal debido a aceleraciones angulares y velocidades. Por lo tanto, debe considerar estimadores no lineales para esta tarea. Sí, hay formas estándar de hacer esto. Sí, están disponibles en la literatura. Sí, generalmente todas las entradas se colocan en el mismo filtro. La posición, la velocidad, la orientación y la velocidad angular del robot se utilizan como salidas. Y sí, presentaré una breve introducción a sus temas comunes aquí. Las principales conclusiones sonx ( t + 1 )x(t)=[x,y,x˙,y˙,θ,θ˙]x(t+1)
- incluya el sesgo de Gyro e IMU en su estado o sus estimaciones divergirán
- Un filtro de Kalman extendido (EKF) se usa comúnmente para este problema
- Las implementaciones pueden derivarse desde cero y, por lo general, no necesitan ser "buscadas".
- Existen implementaciones para la mayoría de los problemas de localización y SLAM, así que no haga más trabajo del que tiene que hacer. Ver: sistema operativo del robot ROS
Ahora, para explicar el EKF en el contexto de su sistema. Tenemos un IMU + Gyro, GPS y odometría. El robot en cuestión es un accionamiento diferencial como se mencionó. La tarea de filtrado es tomar la estimación de pose actual del robot
, las entradas de control y las mediciones de cada sensor, , y producir la estimación en el próximo paso de tiempo
. Llamaremos a las mediciones de IMU , GPS es y odometría, .utzt x t+1ItGtOtx^tutztx^t+1ItGtOt
Supongo que estamos interesados en estimar la pose del robot como
. El problema con IMU y Gyros es la deriva. Hay un sesgo no estacionario en las aceleraciones que debe tener en cuenta en el EKF. Esto se hace (generalmente) poniendo el sesgo en el estado estimado. Esto le permite estimar directamente el sesgo en cada paso de tiempo.
, para un vector de sesgos . x t = x , y , ˙ x , ˙ y , θ , ˙ θ , b bxt=x,y,x˙,y˙,θ,θ˙xt=x,y,x˙,y˙,θ,θ˙,bsi
Estoy asumiendo:
- Ot = dos mediciones de distancia que representan la distancia que han recorrido las huellas en un pequeño incremento de tiempo
- α , β , θ ¨ x , ¨ y , ¨ zyot = tres medidas de orientación y tres medidas de aceleración .α , β, θX¨, y¨, z¨
- G x t , G y tsolt = la posición del robot en el marco global ,
.solXt,solyt
Normalmente, el resultado de las entradas de control (velocidades deseadas para cada banda de rodadura) es difícil de asignar a las salidas (el cambio en la postura del robot). En lugar de , es común (vea Thrun , Odometry Question ) usar la odometría como el "resultado" del control. Esta suposición funciona bien cuando no se encuentra en una superficie casi sin fricción. La IMU y el GPS pueden ayudar a corregir el deslizamiento, como veremos.tu
Entonces, la primera tarea es predecir el siguiente estado desde el estado actual:
. En el caso de un robot de accionamiento diferencial, esta predicción se puede obtener directamente de la literatura (ver Sobre la cinemática de los robots móviles con ruedas o el tratamiento más conciso en cualquier libro de texto de robótica moderno), o derivar desde cero como se muestra aquí: Pregunta de odometría .X^t + 1= f( x^t, ut)
Entonces, ahora podemos predecir . Este es el paso de propagación o predicción. Usted puede operar un robot simplemente propagando. Si los valores son completamente precisos, nunca tendrá una estimación que no sea exactamente igual a su estado real. Esto nunca sucede en la práctica.Ot xX^t + 1= f( x^t, Oht)OtX^
Esto solo da un valor predicho de la estimación anterior, y no nos dice cómo la precisión de la estimación se degrada con el tiempo. Entonces, para propagar la incertidumbre, debe usar las ecuaciones EKF (que propagan la incertidumbre en forma cerrada bajo supuestos de ruido gaussianos), un filtro de partículas (que usa un enfoque basado en muestreo) *, el UKF (que usa un punto aproximación de la incertidumbre), o una de muchas otras variantes.
En el caso del EKF, procedemos de la siguiente manera. Deje ser la matriz de covarianza del estado del robot. Linealizamos la función
usando la expansión de la serie Taylor para obtener un sistema lineal. Un sistema lineal se puede resolver fácilmente con el filtro Kalman. Suponga que la covarianza de la estimación en el tiempo es , y la covarianza supuesta del ruido en la odometría se da como la matriz
(generalmente una matriz diagonal , como ) . En el caso de la función , obtenemos el jacobiano y f t P t U t 2 × 2 .1 × I 2 × 2 f F x = ∂ fPAGStFtPAGStUt2 × 2.1 × I2 × 2F
Fu=∂fFX= ∂F∂XFtu= ∂F∂tu, luego propague la incertidumbre como,
PAGSt + 1= FX∗ Pt∗ FTX+ Ftu∗ Ut∗ FTtu
Ahora podemos propagar la estimación y la incertidumbre. Tenga en cuenta que la incertidumbre aumentará monotónicamente con el tiempo. Esto se espera. Para solucionar esto, lo que generalmente se hace es usar y para actualizar el estado predicho. Esto se llama el paso de medición del proceso de filtrado, ya que los sensores proporcionan una medición indirecta del estado del robot.G tyotsolt
Primero, use cada sensor para estimar alguna parte del estado del robot como alguna función y para GPS, IMU. Forme el residuo o innovación que es la diferencia de los valores predichos y medidos. Luego, calcule la precisión para cada estimación del sensor en forma de una matriz de covarianza para todos los sensores ( , en este caso). Finalmente, encuentre los jacobianos de y actualice la estimación del estado de la siguiente manera:h i ( ) R R g R i hhsol( )hyo( )RRsolRyoh
Para cada sensor con estado estimado ( Siguiendo la entrada de wikipedia )z sszs
S s = H s * P t + 1 * H T s + R s K = P t + 1 * H T s S - 1 s x t + 1 = x t + 1 - K * v
vs= zs- hs( x^t + 1)
Ss= Hs∗ Pt + 1∗ HTs+ Rs
K= Pt + 1∗ HTsS- 1s
X^t + 1= x^t + 1- K∗ v
PAGSt + 1= ( I- K∗ Hs) ∗ Pt + 1
En el caso del GPS, la medida probablemente sea solo una transformación de la latitud y la longitud al marco local del robot, por lo que la jacobiana será casi Identidad. es reportado directamente por la unidad GPS en la mayoría de los casos.zsol= hsol( )HsolRsol
En el caso de IMU + Gyro, la función es una integración de aceleraciones y un término de sesgo aditivo. Una forma de manejar la IMU es integrar numéricamente las aceleraciones para encontrar una estimación de posición y velocidad en el momento deseado. Si su IMU tiene un pequeño término de ruido aditivo para cada estimación de aceleración, entonces debe integrar este ruido para encontrar la precisión de la estimación de posición. Entonces la covarianza es la integración de todos los pequeños términos de ruido aditivo, . Incorporar la actualización para el sesgo es más difícil y está fuera de mi experiencia. Sin embargo, dado que está interesado en el movimiento plano, probablemente pueda simplificar el problema. Tendrás que buscar en la literatura para esto.zyo= hyo( )pagsyoRyopagsyo
Algunas referencias extravagantes:
Mejora de la precisión de la odometría inercial visual basada en EKF
Estimadores EKF consistentes basados en la observabilidad para la localización cooperativa de múltiples robots
Adaptable EKF de dos etapas para el sistema INS-GPS acoplado libremente con sesgo de falla desconocido
Este campo es lo suficientemente maduro como para que google (académico) probablemente pueda encontrar una implementación que funcione. Si va a hacer mucho trabajo en esta área, le recomiendo que tome un libro de texto sólido. Tal vez algo como Probablistic Robotics por S. Thrun de la fama de Google Car. (Lo he encontrado una referencia útil para esas implementaciones nocturnas).
* Hay varios estimadores basados en PF disponibles en el
Sistema Operativo de Robot (ROS). Sin embargo, estos han sido optimizados para uso en interiores. Los filtros de partículas tratan con los archivos PDF multimodales que pueden resultar de la localización basada en mapas (estoy cerca de esta puerta o de esa puerta). Creo que la mayoría de las implementaciones al aire libre (especialmente aquellas que pueden usar GPS, al menos de manera intermitente) usan el Filtro Kalman Extendido (EKF). He utilizado con éxito el filtro Kalman extendido para un rover de tierra al aire libre con accionamiento diferencial.
Puede simplificar enormemente el problema en los casos más comunes:
La solución "típica" para nosotros es usar odometría + IMU para obtener una estimación del movimiento del ego y luego usar el GPS para corregir X, Y, Z y el sesgo de rumbo.
Aquí hay una implementación de EKF que utilizamos ampliamente. Si necesita estimar la orientación de la IMU (es decir, si aún no tiene un filtro incorporado), también puede usar uno de estos dos filtros: UKF y EKF .
fuente