Due cose.
Se si prevede di eseguire la mappatura, è necessario un algoritmo di localizzazione e mappatura simultanea (SLAM) completo. Vedere: Localizzazione e mappatura simultanea (SLAM): Parte I Gli algoritmi essenziali . In SLAM, stimare lo stato del robot è solo metà del problema. Come farlo è una domanda più grande di quella a cui si può rispondere qui.
Per quanto riguarda la localizzazione (stima dello stato del robot), questo non è un lavoro per un filtro Kalman. La transizione da
a x ( t + 1x(t)=[x,y,x˙,y˙,θ,θ˙]x(t+1)non è una funzione lineare a causa delle accelerazioni e velocità angolari. Pertanto, è necessario considerare gli stimatori non lineari per questa attività. Sì, ci sono modi standard per farlo. Sì, sono disponibili in letteratura. Sì, in genere tutti gli input vengono inseriti nello stesso filtro. Posizione, velocità, orientamento e velocità angolare del robot vengono utilizzati come uscite. E sì, presenterò una breve introduzione ai loro temi comuni qui. I principali take-away sono
- includi il pregiudizio giroscopio e IMU nel tuo stato o le tue stime divergeranno
- Un filtro Kalman esteso (EKF) viene comunemente utilizzato per questo problema
- Le implementazioni possono essere derivate da zero e in genere non è necessario "cercare".
- Le implementazioni esistono per la maggior parte dei problemi di localizzazione e SLAM, quindi non fare più lavoro del necessario. Vedere: Sistema operativo robot ROS
Ora, per spiegare l'EKF nel contesto del tuo sistema. Abbiamo un IMU + Gyro, GPS e odometria. Il robot in questione è un azionamento differenziale come menzionato. Il compito filtraggio è prendere la stima posa corrente del robot
x t , gli ingressi di controllo u t , e le misurazioni da ogni sensore, z t , e produrre la stima al passo temporale successivo
x t + 1 . Chiameremo le misurazioni IMU I t , il GPS è G t e l'odometria, O t .x^tutztx^t+1ItGtOt
Suppongo che siamo interessati a stimare la posa del robot come
. Il problema con IMU e Gyros è la deriva. Vi è una propensione non stazionaria nelle accelerazioni di cui è necessario tenere conto nell'EKF. Questo viene fatto (di solito) ponendo la distorsione nello stato stimato. Ciò consente di stimare direttamente il bias in ogni fase del tempo.
x t = x , y , ˙ x , ˙ y , θ , ˙ θ , bxt=x,y,x˙,y˙,θ,θ˙xt=x,y,x˙,y˙,θ,θ˙,b, per un vettore di pregiudizi .b
Presumo:
- = due misurazioni della distanza che rappresentano la distanza percorsa dai gradini con un piccolo incremento di tempoOt
- = tre misure di orientamento α , β , θ e tre misure di accelerazione ¨ x , ¨ y , ¨ z .Itα,β,θx¨,y¨,z¨
- = la posizione del robot nelframeglobale,
G x t , G y t .GtGxt,Gyt
In genere, il risultato degli ingressi di controllo (velocità desiderate per ciascun battistrada) è difficile da mappare alle uscite (il cambiamento nella posa del robot). Al posto di , è comune (vedi Thrun , Domanda sull'odometria ) usare l'odometria come "risultato" del controllo. Questa ipotesi funziona bene quando non ci si trova su una superficie quasi senza attrito. L'IMU e il GPS possono aiutare a correggere lo slittamento, come vedremo.u
Quindi il primo compito è quello di prevedere il prossimo stato dallo stato
. Nel caso di un robot con azionamento differenziale, questa previsione può essere ottenuta direttamente dalla letteratura (vedere Sulla cinematica dei robot mobili su ruote o il trattamento più conciso in qualsiasi manuale di robotica moderno), oppure derivata da zero come mostrato qui: Domanda sull'odometria .x^t+1=f(x^t,ut)
Quindi, possiamo ora prevedere x t + 1 = f ( x t , O t ) . Questa è la fase di propagazione o previsione. È possibile utilizzare un robot con la semplice moltiplicazione. Se i valori O t sono completamente accurato, non avrete mai una stima x che non esattamente uguale il tuo vero stato. Questo non succede mai in pratica.x^t+1=f(x^t,Ot)Otx^
Ciò fornisce solo un valore previsto dalla stima precedente e non ci dice in che modo l'accuratezza della stima si riduce con il tempo. Quindi, per propagare l'incertezza, è necessario utilizzare le equazioni EKF (che propagano l'incertezza in forma chiusa sotto ipotesi di rumore gaussiano), un filtro antiparticolato (che utilizza un approccio basato sul campionamento) *, UKF (che utilizza un punto di vista approssimazione dell'incertezza) o una delle tante altre varianti.
Nel caso dell'EKF, procediamo come segue. Sia la matrice di covarianza dello stato del robot. Linearizziamo la funzione f
usando l'espansione della serie Taylor per ottenere un sistema lineare. Un sistema lineare può essere facilmente risolto utilizzando il filtro Kalman. Supponiamo che la covarianza della stima al momento t sia P t , e la presunta covarianza del rumore nell'odometria è data come matrice U t
(di solito una matrice diagonale 2 × 2 , come .1 × I 2 × 2 ). Nel caso della funzione f , otteniamo il giacobinoPtftPtUt2×2.1×I2×2f
Fx=∂f∂xFu=∂f∂u
Pt+1=Fx∗Pt∗FTx+Fu∗Ut∗FTu
ItGt
hg()hi() for GPS, IMU. Form
the residual or innovation which is the difference of the
predicted and measured values.
Then, estimate the accuracy for each sensor estimate in
the form of a covariance matrix R for all sensors (Rg, Ri in
this case). Finally, find the Jacobians of h and update the state
estimate as follows:
For each sensor s with state estimate zs (Following wikipedia's entry)
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
Pt+1=(I−K∗Hs)∗Pt+1
In the case of GPS, the measurement zg=hg() it is probably just a
transformation from latitude and longitude to the local frame of the
robot, so the Jacobian Hg will be nearly Identity. Rg is
reported directly by the GPS unit in most cases.
In the case of the IMU+Gyro, the function zi=hi() is an integration of
accelerations, and an additive bias term. One way to handle the IMU is
to numerically integrate the accelerations to find a position and
velocity estimate at the desired time. If your IMU has a small
additive noise term pi for each acceleration estimate, then you
must integrate this noise to find the accuracy of the position
estimate. Then the covariance Ri is the integration of all the
small additive noise terms, pi. Incorporating the update for the
bias is more difficult, and out of my expertise. However, since you are interested in planar motion, you can probably simplify the problem.
You'll have to look in literature for this.
Some off-the-top-of-my-head references:
Improving the Accuracy of EKF-Based Visual-Inertial
Odometry
Observability-based Consistent EKF Estimators for Multi-robot
Cooperative
Localization
Adaptive two-stage EKF for INS-GPS loosely coupled system with
unknown fault bias
This field is mature enough that google (scholar) could probably find
you a working implementation. If you are going to be doing a lot of
work in this area, I recommend you pick up a solid textbook. Maybe
something like Probablistic Robotics by S. Thrun of Google Car fame.
(I've found it a useful reference for those late-night
implementations).
*There are several PF-based estimators available in the
Robot Operating System (ROS). However, these have
been optimized for indoor use. Particle filters deal with the
multi-modal PDFs which can result from map-based localization (am I
near this door or that door). I believe most outdoor
implementations (especially those that can use GPS, at least
intermittently) use the Extended Kalman Filter (EKF). I've
successfully used the Extended Kalman Filter for an outdoor, ground
rover with differential drive.