[PYTHON] [Ingénierie de contrôle] Visualisation et analyse du contrôle PID et de la réponse par étapes

1.Tout d'abord

Dans l'article précédent (https://qiita.com/sato235/items/5e006ebbf2949cf59463), il était recommandé de visualiser l'entrée pas à pas et la réponse pas à pas dans le circuit avec le contrôleur, j'ai donc créé cet article. A terme, j'aimerais l'utiliser pour concevoir le système de contrôle du robot.

2 Références

2.1 Livres

[1] Hiroki Minami, Ohm, "Introduction à l'ingénierie de contrôle avec Python"

2.2 Page Web

[a] Schéma de principe de contrôle: https://tajimarobotics.com/pid-block-diagram-transfer-function/ [b] [Control Engineering] Représentation graphique des fonctions de transfert par Python: https://qiita.com/sato235/items/5e006ebbf2949cf59463 [c] [Control Engineering] Calcul des fonctions de transfert et des modèles d'espace d'état par Python: https://qiita.com/sato235/items/f991411074c578d1640c

3 Détails de mise en œuvre

3.1 Schéma fonctionnel de contrôle PID

ブロック線図.png Source: [a]

Le "C" ci-dessus correspond au contrôleur. Le circuit de commande de rétroaction ci-dessus est utilisé comme fonction de transmission pour visualiser l'entrée / la réponse de l'étape.

3.2 Fonction de transmission

valeur initiale


K=1
Kd=1
Wn=1
Ki=1
ita=1
Kp=1

Créer une fonction de transfert

C=matlab.tf([Kd, Kp, Ki],[1,0])
G=matlab.tf([K*Wn**2],[1,2*ita*Wn, Wn**2])
H=1
print("H")
print(H)
print("------------")
print("C")
print(C)
print("------------")

print("G")
print(G)
print("------------")


CG=matlab.series(C,G)
print("C*G")
print(CG)
print("------------")

CGH= matlab.feedback(CG,H,-1)
print("C*G/(1+C*G*H)")
print(CGH)
print("------------")

La sortie est la suivante.

H
1
------------
C

s^2 + s + 1
-----------
     s

------------
G

      1
-------------
s^2 + 2 s + 1

------------
C*G

  s^2 + s + 1
---------------
s^3 + 2 s^2 + s

------------
C*G/(1+C*G*H)

     s^2 + s + 1
---------------------
s^3 + 3 s^2 + 2 s + 1

------------

3.3 Entrée / réponse pas à pas

Visualisez l'entrée et la réponse de l'étape à l'aide de la fonction de transfert créée ci-dessus.

t = np.linspace(0, 3, 1000)
yout, T = matlab.step(P, t)

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(T,yout, label="step response")
ax.plot(T,[1]*1000, linestyle="--", label="step input")
ax.set_xlabel("time[s]")
plt.legend(bbox_to_anchor=(1, 0.25), loc='upper right', borderaxespad=0, fontsize=11)

La figure est la suivante.

step_input_response.png

4 Résumé

・ J'ai pu visualiser la réponse échelonnée dans le circuit de rétroaction avec le contrôleur. ・ Ensuite, je voudrais considérer la stabilité et comparer le comportement lorsque les coefficients des fonctions C, G et H sont modifiés.

Recommended Posts

[Ingénierie de contrôle] Visualisation et analyse du contrôle PID et de la réponse par étapes
Analyse des données financières par pandas et leur visualisation (2)
Analyse des données financières par pandas et leur visualisation (1)
Le monde des livres d'ingénierie de contrôle
Agrégation et visualisation des nombres accumulés
[Ingénierie de contrôle] Calcul des fonctions de transfert et des modèles d'espace d'états par Python
Visualisation et analyse des informations de localisation des données Twitter Stava
Visualisation de corrélation entre la quantité de caractéristiques et la variable objective
Visualisation des cartes et des filtres des fonctionnalités CNN (Tensorflow 2.0)
J'ai essayé l'analyse morphologique et la vectorisation de mots
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬