Quelles sont les méthodes pour gérer le décalage de la boussole (hystérésis dépendante de la vitesse)?

12

J'ai un robot à bande de roulement, avec des encodeurs de roue de faible précision pour suivre la distance et une boussole électronique pour déterminer le cap. La boussole a un retard important (> 1 seconde) lorsque le robot tourne rapidement, par exemple après avoir atteint un waypoint - pivotant en place pour pointer vers son nouveau cap.

Quels sont les moyens de gérer le décalage? Je pense que l'on pourrait prendre beaucoup de mesures et modéliser la réponse de la boussole. Cependant, cela semble problématique car il dépend du taux et je ne connais pas le taux instantané.

En tant qu'approche simple mais lente, je fais tourner le robot jusqu'à ce qu'il soit très grossièrement pointé dans la bonne direction, puis je fais de très petits virages incrémentiels avec de brèves pauses de mesure jusqu'à ce qu'il soit pointé dans le bon sens. Y a-t-il d'autres façons de gérer cela?

VienneMike
la source

Réponses:

12

Le décalage dans la boussole est dû à un filtre passe-bas, pour supprimer le bruit haute fréquence.

  • Il existe des magnétomètres plus chers qui ont moins de bruit et donc moins de décalage.
  • Il est également possible d'utiliser un gyroscope pour améliorer la précision. En fait, c'est ce que font les unités de mesure inertielle (IMU). Cela peut être accompli en utilisant un filtre de Kalman. L'amélioration de la précision permet de réduire le décalage, car une précision accrue réduit la dépendance à l'égard d'un filtre passe-bas pour supprimer le bruit. Le filtre de Kalman fusionne les données du magnétomètre et du gyroscope (qui mesure le taux de changement de cap).

Si vous vous en tenez à votre boussole actuelle, il y a deux solutions possibles (Attention, cela devient de plus en plus avancé, mais l'option 1 devrait être accessible à la plupart des gens sans trop de travail).

  1. Vous pouvez essayer d'annuler le filtre. Cela peut éliminer le décalage, mais augmente également le bruit haute fréquence. Après cela, vous pouvez essayer de contrôler le robot en fonction de la nouvelle estimation du cap. Pour ce faire, vous devez expérimenter pour déterminer les paramètres du filtre passe-bas. Par exemple, en temps discret, vous pourriez trouver:

    θ (t)tθt

    θ^(t)=a0θ(t)+a1θ(t1)++akθ(tk)
    où est le cap estimé (sortie de la boussole) à le temps , est le cap réel (vérité fondamentale) au temps .θ^(t)tθt

    Vous pouvez trouver les paramètres en faisant une expérience où vous mesurez la vérité du sol en utilisant d'autres moyens externes. Étant donné échantillons, vous avez cette équation: n + k + 1 [ θ ( k ) θ ( k + n ) ] = [ θ ( k ) θ ( k - 1 ) θ ( 0 ) ain+k+1

    [θ^(k)θ^(k+n)]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)][a0a1ak]

    Et vous pouvez résoudre en trouvant: où est la matrice pseudo-inverse de . Il n'y a aucun moyen définitif de calculer , vous devinerez donc probablement. Pour les points bonus, cela suppose que le bruit est blanc et indépendant, mais vous pouvez d'abord le blanchir pour supprimer le biais, et donc améliorer votre estimation des paramètres.

    [a0a1ak]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)]+[θ^(k)θ^(k+n)]
    M+Mk

    Vous pouvez le convertir en une fonction de transfert (également connue sous le nom de transformée en Z dans le domaine temporel discret):

    Θ^(z)Θ(z)=a0+a1z1+...+akzk

    Pour annuler cela, nous pouvons prendre l'inverse (où est notre nouvelle estimation de cap):θ¯(t)

    Θ¯(z)Θ^(z)=1a0+a1z1++akzk

    Reconversion dans le domaine temporel:

    a0θ¯(t)+a1θ¯(t1)++akθ¯(tk)=θ^(t)

    θ¯(t)=θ^(t)a1θ¯(t1)akθ¯(tk)a0

    nous pouvons alors utiliser pour contrôler le robot.θ¯

    Ce sera très bruyant, donc vous voudrez peut-être toujours mettre travers un filtre passe-bas avant utilisation (bien que peut-être celui avec moins de décalage).θ¯

  2. La solution ci-dessus n'est toujours pas la meilleure solution. L'estimation bruyante peut ne pas être très utile. Si nous mettons cela dans une équation de l'espace d'états, nous pouvons concevoir un filtre de Kalman et un contrôleur de rétroaction d'état complet en utilisant LQR (régulateur quadratique linéaire). La combinaison d'un filtre de Kalman et d'un contrôleur LQR est également connue sous le nom de contrôleur LQG (gaussien linéaire quadratique) et utilise la récupération par transfert de boucle pour obtenir un bon contrôleur.

    Pour ce faire, imaginez les équations espace-état (temps discret):

    x(t)=Ax(t1)+Bu(t1) ,y(t)=Cx(t)

    ou:

    x(t)=[θ(t)θ(t1)θ(tk)]=[A1A200010000010000010000010]x(t1)+[B0B1000]u(t1)

    y(t)=[θ^(t)]=[a0a1ak]x(t)

    où représente la puissance dans les moteurs pour faire tourner le robot, et , , , est la mesure dans laquelle elle affecte le cap en fonction de la position et de la vitesse (vous pouvez choisir des valeurs non nulles pour les autres éléments de la matrice , et la première ligne de la matrice également).u(t1)A0A1B0B1BA

    Ensuite, vous pouvez construire votre observateur (filtre de Kalman), en choisissant les estimations de bruit et pour le bruit de processus et le bruit de mesure. Le filtre de Kalman peut alors trouver l'estimation optimale du cap, compte tenu de ces hypothèses sur le bruit. Après avoir choisi les estimations de bruit, la mise en œuvre dépend simplement de la mise en œuvre du code pour le filtre de Kalman (les équations peuvent être trouvées sur Wikipedia, donc je ne vais pas le passer en revue ici).QoRo

    Après cela, vous pouvez concevoir un contrôleur LQR, cette fois, en choisissant et représentant la pondération accordée à la régulation du cap, et en essayant de limiter l'utilisation des actionneurs. Dans ce cas, vous pouvez choisir et . Cela est dû au fait que LQR trouve le contrôleur optimal pour minimiser une fonction de coût:QcRcQc=[100000000000]Rc=[1]J=(xTQx+uTRu)

    Ensuite, vous venez de le passer par l'équation algébrique de Riccati à temps discret:

    P=Q+AT(PPB(R+BTPB)1BTP)A

    et résoudre pour une matrice définie positive .P

    Ainsi, votre loi de contrôle peut être donnée par:

    u(t)=K(x(t)xref(t))

    K=(R+BTPB)1(BTPA)

    Enfin, le faire ne fonctionnera pas très bien et risque d'être instable à cause du bruit. En effet, cela signifie que l'option 1 ne fonctionnera probablement pas à moins que vous ayez d'abord mis travers un filtre passe-bas (bien que pas nécessairement avec un temps de retard effectif aussi long). En effet, alors que LQR est garanti stable, dès que vous utilisez un filtre Kalman, la garantie est perdue.θ¯

    Pour résoudre ce problème, nous utilisons la technique de récupération par transfert de boucle, où vous ajustez le filtre de Kalman, et choisissez à la place un nouveau , où est votre matrice origine , réglé pour que le filtre de Kalman soit optimal . est une matrice symétrique définie positive, que vous pouvez simplement choisir comme matrice d'identité ( ). Ensuite, choisissez simplement un scalaire . Le contrôleur résultant devrait devenir (plus) stable sous la forme , bien que la matrice devienne , ce qui signifie qu'elle devient moins optimale.Q 0 Q V V = I q q Q oQo=Q0+q2BVBTQ0QVV=IqqQo

    Par conséquent, vous augmentez simplement jusqu'à ce qu'il soit stable. Une autre façon d'essayer de le rendre stable est d'augmenter (ou de diminuer ) pour le contrôleur LQR.R c Q cqRcQc

Les concepts de cet article sont assez avancés, mais si vous avez besoin de résoudre des choses comme l'équation de Riccati, vous pouvez utiliser MATLAB ou un autre logiciel pour le faire. Il peut également y avoir des bibliothèques implémentant déjà le filtre de Kalman (encore une fois, je pense que MATLAB le fait également).

Pour une application intégrée, vous devrez peut-être implémenter le filtre Kalman vous-même, bien qu'il existe probablement une implémentation C.

ronalchn
la source
Merci pour votre réponse excellente et approfondie. Je suis l'essentiel de votre première solution et je suis sûr que je peux y travailler. Le deuxième, comme vous le dites, est plus difficile et je devrai travailler pour voir si je peux tout suivre.
ViennaMike
4

Un gyroscope est la réponse simple. J'ai toujours entendu, gyroscope pour les mesures courtes, boussole pour les longues. Et de façon réaliste, une tasse de filtre kallman entre les deux la plupart du temps. Le prix d'une carte gyroscope / acc 6DOF est inférieur à 20 $ de nos jours, beaucoup trop bon marché pour ne pas en utiliser une.

À un moment donné, j'ai travaillé sur le filtre Kallman de quelqu'un d'autre . et l'a fait fonctionner. Un filtre kallman est en fait plus une approche, pas une implémentation exacte, et dans le cas du gyroscope, le résultat final n'a pas besoin d'utiliser des mathématiques matricielles. Cela rend le code beaucoup plus simple.

Spiked3
la source