Quadricóptero MIMO — Controlador Neural-LQR com Animação 3D em Tempo Real
Arquivos: examples/advanced/06_quadcopter_mimo/
O que este exemplo demonstra
Uma simulação em tempo real completa de um quadricóptero com 12 estados controlado por um Neural-LQR informado pela física — visualizado simultaneamente em uma cena 3D com PyVista e uma janela de telemetria matplotlib ao vivo. Antes da simulação começar, uma GUI de configuração em tkinter permite escolher a trajetória de referência, ajustar seus parâmetros e definir a duração da simulação.
| Conceito | Detalhe |
|---|---|
| Modelagem LTI MIMO | Modelo hover linearizado com 12 estados, construído com synapsys.api.ss() |
| LQR MIMO | synapsys.algorithms.lqr() em uma planta 12 estados / 4 entradas |
| Neural-LQR residual | δu = −K·e + MLP(e) — resíduo zerado na inicialização → começa no LQR ótimo |
| Yaw alinhado à direção | O drone rotaciona para apontar na direção do movimento — |
| GUI de configuração | Dialog tkinter: tempo de simulação, altitude, trajetória de referência e seus parâmetros |
| PyVista 3D | Animação da pose do drone + rastro de trajetória a 50 Hz |
| Telemetria matplotlib | Rastreamento de posição, ângulos de Euler, entradas de controle — ao vivo a 10 Hz |
Modelo físico — hover linearizado
Um quadricóptero possui dinâmica altamente não-linear, mas na vizinhança do hover (velocidade zero, atitude nivelada) uma expansão de Taylor de primeira ordem fornece um modelo LTI útil válido para pequenas perturbações (|φ|, |θ| ≤ 15°).
Vetores de estado e entrada
onde são rolagem, arfagem e guinada; são as taxas angulares no corpo; e representa desvios do equilíbrio hover (em hover ).
Matrizes A e B linearizadas
A equação de estado no hover é:
Os termos de acoplamento gravitacional são (aceleração frontal pela arfagem ) e (aceleração lateral pela rolagem ):
ẍ = +g·θ (arfagem para frente → acelera em x)
ÿ = −g·φ (rolagem à direita → acelera em −y)
A matriz de entrada mapeia cada canal de controle para seu efeito dinâmico:
Parâmetros físicos (quadricóptero racing de 500 mm):
| Símbolo | Valor | Significado |
|---|---|---|
| 0,500 kg | Massa total | |
| 4,856 × 10⁻³ kg·m² | Inércia de rolagem / arfagem | |
| 8,801 × 10⁻³ kg·m² | Inércia de guinada | |
| 0,175 m | Braço centro-motor |
O modelo em tempo contínuo é construído com synapsys.api.ss() e discretizado a 100 Hz com synapsys.api.c2d() pelo método zero-order-hold (ZOH):
from synapsys.api import ss, c2d
A, B, C, D = build_matrices() # de quadcopter_dynamics.py
sys_c = ss(A, B, C, D) # sistema LTI em tempo contínuo
sys_d = c2d(sys_c, dt=0.01) # discretização ZOH a 100 Hz
Projeto LQR
O Regulador Linear Quadrático minimiza o custo de horizonte infinito: