🎢 Pendulum - Fuzzy Control

Simulazione interattiva del pendolo inverso con controllore fuzzy

← Torna a Virtual Desktop Site


Descrizione

Pendulum è una simulazione educativa del classico problema del pendolo inverso (inverted pendulum), controllato da un sistema di logica fuzzy Mamdani. L’applicazione visualizza in tempo reale la fisica del sistema, le membership functions, le regole attive e l’output del controllore.

Il Problema del Pendolo Inverso

Il pendolo inverso è un banco di prova classico per i sistemi di controllo: un’asta rigida montata su un carrello mobile deve essere mantenuta in equilibrio verticale applicando forza al carrello.

Variabili di Stato

Sfida

Il sistema è intrinsecamente instabile: senza controllo, il pendolo cade. Il controllore deve reagire rapidamente alle perturbazioni mantenendo il pendolo in equilibrio.

Controllore Fuzzy

Perché Fuzzy?

A differenza di un controllore PID classico, il controllo fuzzy:

Architettura Mamdani

     Input (θ, θ̇)
          │
          ▼
   ┌──────────────┐
   │ Fuzzificazione │  → Calcola grado di appartenenza
   └──────────────┘
          │
          ▼
   ┌──────────────┐
   │  Inferenza    │  → Applica regole fuzzy (AND = min)
   └──────────────┘
          │
          ▼
   ┌──────────────┐
   │Defuzzificazione│ → Calcola output crisp (centroide)
   └──────────────┘
          │
          ▼
      Output (F)

Variabili Linguistiche

Ogni variabile usa 5 termini linguistici:

Termine Significato
NB Negative Big (molto negativo)
NS Negative Small (poco negativo)
ZE Zero (neutro)
PS Positive Small (poco positivo)
PB Positive Big (molto positivo)

Base di Regole (25 regole)

La matrice 5×5 definisce l’output per ogni combinazione di input:

           θ̇ (velocità angolare)
           NB    NS    ZE    PS    PB
      ┌─────────────────────────────────┐
   NB │  NB    NB    NB    NS    ZE    │
   NS │  NB    NB    NS    ZE    PS    │
θ  ZE │  NB    NS    ZE    PS    PB    │
   PS │  NS    ZE    PS    PB    PB    │
   PB │  ZE    PS    PB    PB    PB    │
      └─────────────────────────────────┘

Esempi di interpretazione:

Visualizzazione

Canvas Simulazione

Pannello Membership Functions

Visualizzazione in tempo reale di:

Simulazione Fisica

Parametri di Default

const PHYSICS = {
  g: 9.81,        // Gravità (m/s²)
  M: 1.0,         // Massa carrello (kg)
  m: 0.4,         // Massa pendolo (kg) - rapporto m/M = 0.4
  l: 0.8,         // Lunghezza pendolo (m) - braccio lungo
  friction: 0.1,  // Attrito carrello
  maxForce: 100   // Forza massima (N)
};

Integrazione Runge-Kutta 4

Per una simulazione accurata, il sistema usa RK4:

step(state, force, dt) {
  const k1 = derivatives(state, force);
  const k2 = derivatives(state + k1*dt/2, force);
  const k3 = derivatives(state + k2*dt/2, force);
  const k4 = derivatives(state + k3*dt, force);

  return state + (dt/6) * (k1 + 2*k2 + 2*k3 + k4);
}

Controlli

Simulazione

Impostazioni

Interazione Mouse (durante la simulazione)

Statistiche

Implementazione Tecnica

File Principali

Classi Principali

class InvertedPendulum2025    // Orchestratore principale
class PhysicsEngine           // Simulazione dinamica
class FuzzyController         // Controllore Mamdani
class PendulumRenderer        // Visualizzazione Canvas

Contesto Accademico

Questa mini-app si collega alla ricerca sulla logica fuzzy documentata in:

Applicazioni Reali

Il controllo fuzzy del pendolo inverso ha applicazioni in:


Sperimenta con Pendulum sul desktop virtuale aprendo l’icona 🎢 Pendulum dal gruppo Mini Apps.