Skip to content

Classes e programações utilizadas para a simulação do sistema pêndulo invertido e controle via o algoritmo PSO

Notifications You must be signed in to change notification settings

DiogoKarmouche/PSO-PenduloInvetido

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

PSO-PenduloInvetido

Classes e programações utilizadas para a simulação do sistema pêndulo invertido e controle via o algoritmo PSO

Teste das matrizes Q e R para a função de custo

Para realizar o teste de das matrizes Q e R, na classe ControlePenduloInvertido.py, na função cost_func comentar e descomentar as matrizes Q e R que seja desejado testar, em seguida utilizar o seguinte código:

import numpy as np
from ControlePenduloInvertido import

ctrl = CONTROLE()
Q,R=np.zeros((4,4)),np.array([[0.0003
4]])
Q[0,0]=0.75
Q[1,1]=4
K,X,eigVals=ctrl.lqr(A,B,Q,R)
sis = Sistema()

# inicializa um pêndulo invertido em espaço de estados
tempo,dt = 10,0.01

# tempo de simulação do sistema dinâmico
theta0,x0 = 3np.pi/180,0
x_initial = np.array([[0],[3
np.pi/180],[0],[0]])
T,data,dataAva = sis.simulation(Time=tempo,dt=dt,K = K,X0=x_initial,W='n')
CE = np.sum(np.abs(data[0,:]))
ISE = np.sum(dataAva[1,:])

Teste para definição de máximos e mínimos dos pontos de operação

import numpy as np
import matplotlib.pyplot as plt from ControlePenduloInvertido import

K = np.array([0,0,0,0]) sis = Sistema()

# inicializa um pêndulo invertido em espaço de estados
tempo,dt = 3,0.01

# tempo de simulação do sistema dinâmico
theta0,x0 = 3
np.pi/180,0
x_initial = np.array([[0],[3*np.pi/180],[0],[0]])
T,data,dataAva = sis.simulation(Time=tempo,dt=dt,K = K,X0=x_initial,W='n')
fig, ax1 = plt.subplots()
ax1.set_ylabel(r'$\dot{x}_{c}$', color='red')
ax1.plot(T, data[3,:],'r-')
ax2 = ax1.twinx()
ax2.set_ylabel(r'$\dot{\theta}$', color='blue')
ax2.plot(T, data[4,:],'b-')
plt.show()

Simulação do PSO

Para mudar a situação imposta sobre o algoritmo durante as iterações, é necessário comentar e descomentar dentro da programação PSO_simulacao.py. Para a simulação do algoritmo é utilizado a seguinte programação:
from PSO_simulacao.py import *

# selecionar limites dos espaços de busca x1_lim = (-1000,-1)
x2_lim = (1,1000)
x3_lim = (-1000,-1)
x4_lim = (1,1000)

# importe ou crie uma população de partículas, neste repertório tem um exemplo da população B
Kmaster = np.load('K_LQR.npy')
num_particles=len(Kmaster)
bounds=[x1_lim, x2_lim, x3_lim, x4_lim] # input bounds [(x1_min,x1_max),(x2_min,x2_max)...]
PSO(Kmaster,bounds,num_particles=num_particles,maxiter=301)

About

Classes e programações utilizadas para a simulação do sistema pêndulo invertido e controle via o algoritmo PSO

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages