J'essaie de mettre en œuvre un filtre kalman pour obtenir l'orientation d'un objet, en utilisant un accéléromètre 3 axes et un gyroscope 3 axes comme capteurs.Implémentation d'un filtre kalman sensible au débordement
Le choix du modèle dynamique pour la prédire phase de ce filtre est simple, il est:
new_angle = angle + angular_velocity * time
new_angular_velocity = angular_velocity
Mais je n'ai pas flottant appui ponctuel à portée de main, et je dois chaque bit de précision pour modéliser la angle. Par conséquent, mon plan était de représenter l'angle comme des données entières de 32 bits, représentant un tour complet de 2 pi
en 2^32 petites étapes. En conséquence, le débordement d'entier gère l'enveloppe (2 pi
étant la même orientation que 0
) gratuitement. Mais cela pose également un problème au filtre: si l'angle estimé serait, disons 359°
, et que ma mesure est 0°
, alors le filtre suppose une énorme innovation, conduisant à des incertitudes et des valeurs impaires.
Y a-t-il un moyen de rendre le filtre conscient de ce phénomène d'enroulement? Donner une innovation de seulement 1°
dans le cas ci-dessus? Pour contourner le problème, j'ai pensé à utiliser des différences d'angles au lieu des angles, mais je ne trouve pas de modèle approprié.