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θ(t−1)+⋯+akθ(t−k)
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)⋮θ(k+n)θ(k−1)⋮θ(k+n−1)⋯⋯θ(0)⋮θ(n)⎤⎦⎥⎥⎡⎣⎢⎢⎢⎢a0a1⋮ak⎤⎦⎥⎥⎥⎥
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.
⎡⎣⎢⎢⎢⎢a0a1⋮ak⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢θ(k)⋮θ(k+n)θ(k−1)⋮θ(k+n−1)⋯⋯θ(0)⋮θ(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+a1z−1+...+akz−k
Pour annuler cela, nous pouvons prendre l'inverse (où est notre nouvelle estimation de cap):θ¯(t)
Θ¯(z)Θ^(z)=1a0+a1z−1+⋯+akz−k
Reconversion dans le domaine temporel:
a0θ¯(t)+a1θ¯(t−1)+⋯+akθ¯(t−k)=θ^(t)
θ¯(t)=θ^(t)−a1θ¯(t−1)−⋯−akθ¯(t−k)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).θ¯
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⃗ (t−1)+Bu⃗ (t−1) ,y⃗ (t)=Cx⃗ (t)
ou:
x⃗ (t)=⎡⎣⎢⎢⎢⎢θ(t)θ(t−1)⋯θ(t−k)⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢A110⋮00A201⋮00⋯⋯⋯⋯⋯000⋮10000⋮01000⋮00⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥x⃗ (t−1)+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢B0B10⋮00⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥u⃗ (t−1)
y⃗ (t)=[θ^(t)]=⎡⎣⎢⎢⎢⎢a0a1⋮ak⎤⎦⎥⎥⎥⎥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⃗ (t−1)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=⎡⎣⎢⎢⎢⎢10⋮000⋮000⋮0⋯⋯⋯00⋮0⎤⎦⎥⎥⎥⎥Rc=[1]J=∑(x⃗ TQx⃗ +u⃗ TRu⃗ )
Ensuite, vous venez de le passer par l'équation algébrique de Riccati à temps discret:
P=Q+AT(P−PB(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)−x⃗ ref(t))
où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=Iqq→∞Qo
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