Deux choses.
Si vous prévoyez de faire du mappage, vous avez besoin d'un algorithme SLAM (Full Simultaneous Localisation and Mapping) à part entière. Voir: Localisation et cartographie simultanées (SLAM): Partie I Les algorithmes essentiels . Dans SLAM, l'estimation de l'état du robot n'est que la moitié du problème. Comment faire est une question plus importante que celle à laquelle on peut répondre ici.
Concernant la localisation (estimation de l'état du robot), ce n'est pas un travail pour un filtre de Kalman. La transition de
à x ( t + 1 )x(t)=[x,y,x˙,y˙,θ,θ˙]x(t+1)n'est pas une fonction linéaire en raison des accélérations et des vitesses angulaires. Par conséquent, vous devez considérer des estimateurs non linéaires pour cette tâche. Oui, il existe des moyens standard de procéder. Oui, ils sont disponibles dans la littérature. Oui, généralement toutes les entrées sont placées dans le même filtre. La position, la vitesse, l'orientation et la vitesse angulaire du robot sont utilisées comme sorties. Et oui, je vais présenter ici une brève introduction à leurs thèmes communs. Les principaux plats à emporter sont
- inclure le biais Gyro et IMU dans votre état ou vos estimations divergent
- Un filtre Kalman étendu (EKF) est couramment utilisé pour ce problème
- Les implémentations peuvent être dérivées de zéro et n'ont généralement pas besoin d'être "recherchées".
- Des implémentations existent pour la plupart des problèmes de localisation et de SLAM, alors ne faites pas plus de travail que vous n'en avez. Voir: Robot Operating System ROS
Maintenant, pour expliquer l'EKF dans le contexte de votre système. Nous avons un IMU + Gyro, un GPS et une odométrie. Le robot en question est un entraînement différentiel comme mentionné. La tâche de filtrage est de prendre l'estimation de pose actuelle du robot
x t , les entrées de commande u t , et les mesures de chaque capteur, z t , et produire l'estimation à l'étape suivante du temps
x t + 1 . Nous appellerons les mesures IMU I t , le GPS est G t et l'odométrie, O t .x^tutztx^t+1ItGtOt
Je suppose que nous souhaitons estimer la pose du robot comme
. Le problème avec IMU et Gyros est la dérive. Il y a un biais non stationnaire dans les accélérations dont vous devez tenir compte dans l'EKF. Cela se fait (généralement) en plaçant le biais dans l'état estimé. Cela vous permet d'estimer directement le biais à chaque pas de temps.
x t = x , y , ˙ x , ˙ y , θ , ˙ θ , bxt=x,y,x˙,y˙,θ,θ˙xt=x,y,x˙,y˙,θ,θ˙,b, pour un vecteur de biais .b
Je suppose:
- = deux mesures de distance représentant la distance parcourue par les marches dans un petit incrément de tempsOt
- = trois mesures d'orientation α , β , θ et trois mesures d'accélération ¨ x , ¨ y , ¨ z .Itα,β,θx¨,y¨,z¨
- = la position du robot dans lecadreglobal,
G x t , G y t .GtGxt,Gyt
En règle générale, le résultat des entrées de contrôle (vitesses souhaitées pour chaque bande de roulement) est difficile à associer aux sorties (le changement de pose du robot). Au lieu de , il est courant (voir Thrun , Question d'odométrie) d'utiliser l'odométrie comme "résultat" du contrôle. Cette hypothèse fonctionne bien lorsque vous n'êtes pas sur une surface presque sans frottement. L'IMU et le GPS peuvent aider à corriger le glissement, comme nous le verrons.u
Ainsi , la première tâche consiste à prédire l'état suivant de l'état
. Dans le cas d'un robot à entraînement différentiel, cette prédiction peut être obtenue directement à partir de la littérature (voir On the Kinematics of Wheeled Mobile Robots ou le traitement plus concis dans n'importe quel manuel de robotique moderne), ou dérivée de zéro comme indiqué ici: Odometry Question .x^t+1=f(x^t,ut)
Ainsi, nous pouvons maintenant prédire x t + 1 = f ( x t , O t ) . Il s'agit de l'étape de propagation ou de prédiction. Vous pouvez faire fonctionner un robot en propageant simplement. Si les valeurs O t sont tout à fait exact, vous n'avez une estimation x qui ne correspond pas exactement à votre véritable état. Cela ne se produit jamais dans la pratique.x^t+1=f(x^t,Ot)Otx^
Cela ne donne qu'une valeur prédite à partir de l'estimation précédente et ne nous dit pas comment la précision de l'estimation se dégrade avec le temps. Donc, pour propager l'incertitude, vous devez utiliser les équations EKF (qui propagent l'incertitude sous forme fermée sous des hypothèses de bruit gaussien), un filtre à particules (qui utilise une approche basée sur l'échantillonnage) *, l'UKF (qui utilise une méthode ponctuelle approximation de l'incertitude), ou l'une des nombreuses autres variantes.
Dans le cas de l'EKF, nous procédons comme suit. Soit la matrice de covariance de l'état du robot. Nous linéarisons la fonction f en
utilisant l'expansion de la série Taylor pour obtenir un système linéaire. Un système linéaire peut être facilement résolu en utilisant le filtre de Kalman. Supposons que la covariance de l'estimation au temps t est P t , et la covariance supposée du bruit dans l'odométrie est donnée comme la matrice U t
(généralement une matrice diagonale 2 × 2 , comme .1 × I 2 × 2 ). Dans le cas de la fonction f , on obtient le jacobienPtftPtUt2×2.1×I2×2f
etFu=∂fFx=∂f∂x , puis propagez l'incertitude comme,Fu=∂f∂u
Pt+1=Fx∗Pt∗FTx+Fu∗Ut∗FTu
Nous pouvons maintenant propager l'estimation et l'incertitude. Notez que l'incertitude augmentera de façon monotone avec le temps. C'est attendu. Pour résoudre ce problème, ce qui est généralement fait, est d'utiliser les et G t pour mettre à jour l'état prévu. C'est ce qu'on appelle l'étape de mesure du processus de filtrage, car les capteurs fournissent une mesure indirecte de l'état du robot.ItGt
hg()hi()RRgRih
szs
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
zg=hg()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
Ce domaine est suffisamment mature pour que Google (érudit) puisse probablement vous trouver une implémentation fonctionnelle. Si vous allez faire beaucoup de travail dans ce domaine, je vous recommande de vous procurer un manuel solide. Peut-être quelque chose comme Probablistic Robotics par S. Thrun de la renommée de Google Car. (Je l'ai trouvé une référence utile pour ces implémentations de fin de soirée).
* Il existe plusieurs estimateurs basés sur PF disponibles dans le
Robot Operating System (ROS). Cependant, ceux-ci ont été optimisés pour une utilisation en intérieur. Les filtres à particules traitent les fichiers PDF multimodaux qui peuvent résulter d'une localisation basée sur une carte (suis-je près de cette porte ou de cette porte). Je crois que la plupart des implémentations en extérieur (en particulier celles qui peuvent utiliser le GPS, au moins par intermittence) utilisent le filtre Kalman étendu (EKF). J'ai utilisé avec succès le filtre Kalman étendu pour un mobile d'extérieur au sol avec entraînement différentiel.
Vous pouvez grandement simplifier le problème dans les cas les plus courants:
La solution "typique" pour nous consiste à utiliser l'odométrie + IMU pour obtenir une estimation du mouvement de l'ego, puis à utiliser le GPS pour corriger les biais X, Y, Z et cap.
Voici une implémentation EKF que nous avons largement utilisée. Si vous avez besoin d'estimer l'orientation de l'IMU (c'est-à-dire s'il n'a pas déjà de filtre intégré), vous pouvez également utiliser l'un de ces deux filtres: UKF et EKF .
la source