Pular para o conteúdo principal
Versão: 0.2.7

Simuladores Físicos

synapsys.simulators fornece simuladores físicos contínuos e não-lineares com uma interface unificada para projeto de controladores, testes e aprendizado por reforço.


Simuladores disponíveis

ClasseSistemaEstadosEntradasSaídas
MassSpringDamperSimMMA linear 1-DOF[q, q̇][F][q]
InvertedPendulumSimPêndulo não-linear em pivô fixo[θ, θ̇][τ][θ]
CartPoleSimCart-pole Lagrangiano[p, ṗ, θ, θ̇][F][p, θ]

Interface comum

Todo simulador herda de SimulatorBase e expõe a mesma API:

from synapsys.simulators import CartPoleSim

sim = CartPoleSim()
y = sim.reset() # reset → observação inicial
y, info = sim.step(u, dt=0.02) # avança um passo
ss = sim.linearize(x0, u0) # linearização numérica → StateSpace

Dicionário info do step()

y, info = sim.step(u, dt=0.02)
info["x"] # estado completo após o passo
info["t_step"] # tempo de integração (= dt)
info["failed"] # True quando o sistema saiu da região segura

Integradores

Todos os simuladores suportam três métodos de integração numérica, selecionáveis na construção:

MétodoPrecisãoVelocidadeUso recomendado
"euler"BaixaMais rápidodt muito pequeno (≤ 1 ms), loops internos de RL
"rk4"AltaRápidoPadrão — bom equilíbrio
"rk45"Muito altaMais lentoReferência / validação
sim = CartPoleSim(integrator="rk4")   # padrão
sim = CartPoleSim(integrator="euler") # mais rápido

Ruído e perturbações

sim = InvertedPendulumSim(noise_std=0.01, disturbance_std=0.05)
  • noise_std — ruído gaussiano adicionado a cada observação (modelo de ruído de sensor)
  • disturbance_std — ruído gaussiano injetado na entrada de controle (ruído de processo)

Atualização de parâmetros thread-safe

Todos os simuladores suportam alterações de parâmetros em tempo real a partir de outra thread:

sim.set_params(m=0.5)     # InvertedPendulumSim
sim.set_params(m_c=2.0) # CartPoleSim

Detecção de falha

y, info = sim.step(u, dt)
if info["failed"]:
sim.reset()
SimuladorCondição de falha
CartPoleSim|p| > 4,8 m ou |θ| > π/3 rad
InvertedPendulumSim|θ| > π/2 rad
MassSpringDamperSimnunca (sempre estável)

Linearização

Todo simulador expõe linearize(x0, u0), que retorna um StateSpace contínuo via diferenças finitas centrais — pronto para projeto LQR:

from synapsys.algorithms.lqr import lqr

ss = sim.linearize(np.zeros(4), np.zeros(1))
K, _ = lqr(ss.A, ss.B, Q, R)