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

Simuladores 3D — Visão Geral

Cart-Pole — simulação 3D em tempo real

synapsys.viz.simview fornece janelas de simulação plug-and-play que combinam renderização 3D em tempo real (PyVista) e telemetria (matplotlib) em uma única interface PySide6 — pronta para receber qualquer controlador que você projetar.


O que você obtém com uma linha

from synapsys.viz import CartPoleView
CartPoleView().run()

Uma janela completa com:

  • Painel 3D — animação física em tempo real (PyVista + VTK)
  • Painel de telemetria — 4 gráficos matplotlib sincronizados (posição, ângulo, controle, retrato de fase)
  • Barra de controles — botões de perturbação hold-to-apply, slider de magnitude, pausa/reset
  • LQR automático — se nenhum controlador for passado, a lib lineariza o simulador e projeta um LQR internamente
  • Captura de teclado global — A/D (perturbação), R (reset), Espaço (pausa), Q (fechar)

Arquitetura

SimulatorBase          ← synapsys.simulators
│ dynamics(), step(), linearize()

SimViewBase ← synapsys.viz.simview._base (QMainWindow)
│ • cria janela Qt (splitter 3D + matplotlib)
│ • QTimer loop → _on_tick()
│ • auto-LQR via linearize() + lqr()
│ • teclado, perturbações, pausa, reset
│ • _build_all() chamado em run()

├── CartPoleView ← state: [x, ẋ, θ, θ̇]
├── PendulumView ← state: [θ, θ̇]
└── MassSpringDamperView ← state: [q, q̇] + setpoint tracking

Cada subclasse implementa apenas o que é específico do seu sistema físico (cena 3D, gráficos, HUD, parâmetros LQR). Todo o boilerplate Qt é herdado da base.


Simuladores disponíveis

ClasseSistema físicoEstadoEntradasPerturbação
CartPoleViewCarrinho + pêndulo[x, ẋ, θ, θ̇]Força no carrinho (N)◀/▶ força horizontal
PendulumViewPêndulo invertido[θ, θ̇]Torque na junta (N·m)↺/↻ torque angular
MassSpringDamperViewMassa-mola-amortecedor[q, q̇]Força externa (N)◀/▶ força + setpoints 1/2/3

Comparação: código standalone vs. módulo da lib

AbordagemLinhas de códigoRequer conhecimento de Qt?
Arquivo viz3d_cartpole_qt.py (standalone)~470 linhasSim — layout, QTimer, splitter, canvas
CartPoleView().run()1 linhaNão
CartPoleView(controller=minha_rede).run()1 linha + sua funçãoNão

Os arquivos standalone em examples/simulators/ continuam disponíveis como referência didática para quem quiser entender a implementação interna ou criar UIs altamente customizadas além do que a lib oferece.


Dependências

pip install synapsys[viz]
# ou individualmente:
pip install pyside6 pyvistaqt matplotlib numpy

Nota: pyvistaqt requer uma instalação de VTK compatível com Qt. Em ambientes headless (servidores sem display), use pyvista com backend offscreen.


Próximos passos