MULTIDOMAIN // SIMULATION

Open source · In sviluppo

Costruisci la macchina. Collega il controllo. Premi Run.

Congegno è un IDE desktop open source per simulare macchine e il loro controllo, tutto disegnato a blocchi. Meccanismi e controllori girano già, in modo nativo su Drake; circuiti, fluidi e calore arrivano dopo.

Guarda cosa fa Codice sorgente In arrivo

macOS su Apple Silicon · Linux x86_64 e aarch64 · Licenza MIT

Un disegno dello spazio di lavoro di Congegno. Sulla tela, un gradino, un sommatore e un controllore PID muovono il giunto rotoidale di un meccanismo fatto di un frame del mondo, del giunto e di un solido; l'angolo del giunto torna al sommatore e finisce in uno scope. A destra, l'anteprima 3D mostra il pendolo inverso appena oltre la verticale. Sotto, l'angolo nei primi 6,2 secondi di una simulazione da 10. CANVAS // inverted-pendulum.yaml 3D // PREVIEW SIGNALS // hinge.q CTL STEP 15 deg · 5 s SUM CTL PID kp 40 · kd 6 MCH WORLD g 9.81 m/s² MCH REVOLUTE q0 = 10 deg MCH SOLID L = 500 mm TAU Q q CTL SCOPE XZ q 16.1 deg E 2.31 J 15 0 -15 6.20 s RUN 0042 // 6.20 / 10.00 s

01 // In moto

Guardalo muoversi.

Tre brevi video, presi direttamente dall'app.

In arrivo

Muovi l'utensile. I giunti seguono.

Un braccio robotico guidato nello spazio cartesiano. L'utensile percorre un anello a sella, tracciato in oro mentre avanza, e un controllore scritto in Python traduce il percorso in coppie ai giunti.

In arrivo

Stesso braccio. Tutto lo spazio di lavoro.

Lo schema che lo muove, gli angoli dei giunti tracciati mentre accade, la vista 3D accanto.

In arrivo

In equilibrio, a blocchi.

Un pendolo inverso tenuto in cima da un PID discreto costruito a blocchi. A cinque secondi si sposta di 15° oltre la verticale e resta lì contro la gravità, con angolo e coppia disegnati sopra la vista 3D.

In arrivo

Controllo vettoriale. In Modelica.

Un motore a magneti permanenti e il suo inverter, modellati in Modelica e compilati da OpenModelica, sotto un controllo a orientamento di campo disegnato a blocchi: l'anello di velocità a 1 kHz, quello di corrente a 20 kHz in Python. Le correnti di fase accelerano con l'albero. Mostrato a velocità doppia.

02 // Schemi a blocchi

Se puoi disegnarlo, puoi simularlo.

Blocchi con le loro porte, linee di segnale, sottosistemi con maschere, riferimenti ad altri modelli. Tasto destro su qualunque cosa. Ridimensioni tutto. Annulli tutto.

Schermata della tela di Congegno: un controllore e il meccanismo che muove, disegnati in un unico schema a blocchi.
Un controllore e il meccanismo che muove, fianco a fianco nello stesso schema.

Inport e Outport portano i segnali dentro e fuori dai sottosistemi. Copia, incolla e menu contestuale funzionano su ogni oggetto, e ogni modifica è un passo che puoi annullare.

03 // Meccanica

Frame e giunti. I corpi si trovano da soli.

Colleghi solidi, giunti e trasformazioni rigide come una rete di frame. Congegno capisce quali parti si muovono come un corpo solo, e l'anteprima 3D ti mostra il meccanismo mentre lo costruisci.

Schermata dell'anteprima 3D: un meccanismo con i suoi frame e i suoi giunti, con la selezione condivisa con la tela.
Ogni frame e ogni giunto, dal vivo. Selezioni un pezzo qui, ed è selezionato anche sulla tela.

04 // Unità di misura

Ogni numero ha la sua unità. Ogni collegamento è verificato.

Scrivi 500 mm, oppure = L / 2, ovunque vada un numero. I segnali portano le loro unità fin dentro il meccanismo: niente blocchi di conversione da piazzare, e un errore viene segnalato proprio sul collegamento che lo causa.

# pendulum.yaml: una cerniera, un'asta
model: pendulum
parameters:
  L: 500 mm
blocks:
  world:
    type: World
    gravity: 9.81 m/s^2
  hinge:
    type: Revolute
    q0: 30 deg
    damping: 0.02 N*m*s/rad
  rod:
    type: Solid
    shape: box
    size: [20 mm, 20 mm, = L]
    center: [0 mm, 0 mm, = L / 2]
    density: 2700 kg/m^3
connections:
  - world.F -> hinge.B
  - hinge.F -> rod.R
probes: [hinge.q, hinge.w, energy]
Un pendolo, scritto per esteso: testo semplice da leggere, confrontare e revisionare come il codice. Semplificato per questa pagina.

05 // Osservazione

Un solo modo di osservare. Tanti modi di guardare.

Metti una sonda su qualunque segnale o grandezza fisica: la coppia di un giunto, la velocità di un frame, l'energia dell'intera macchina. La segui in uno scope, nell'ispettore dei segnali, in un overlay 3D o in una dashboard.

E ogni simulazione è un file. Un solo file HDF5 contiene i dati e il modello esatto che li ha prodotti.

Schermata dell'ispettore dei segnali dopo una simulazione, con angolo, velocità ed energia di un pendolo nel tempo.
L'ispettore dei segnali dopo una simulazione: angolo, velocità ed energia sullo stesso asse dei tempi.

06 // Il banco di lavoro

Tutto a portata di mano.

  • Libreria

    Ogni blocco si apre.

    Leggi come è fatto qualunque blocco. Gli originali restano in sola lettura; le tue varianti finiscono in librerie tutte tue.

  • CAD

    Porta il tuo CAD.

    Dai forma a un solido con una funzione, oppure collega un file STEP, STL o FreeCAD. Congegno lo converte per ogni motore, senza chiederti niente.

  • Comandi

    Una sessione. Tante mani.

    L'interfaccia, la riga di comando, i tuoi script e il tuo agente AI guidano la stessa sessione, con la stessa cronologia di annullamento.

  • Spazio di lavoro

    La tua scrivania, a modo tuo.

    Ridimensioni ogni pannello, lo stacchi in una finestra tutta sua, lo riagganci. Tema chiaro o scuro.

07 // Come funziona

Niente di interpretato. Nemmeno un blocco.

Prima di ogni simulazione Congegno compila l'intero modello. I blocchi di controllo diventano sistemi nativi dentro Drake. I blocchi Python Function si scrivono in un sottoinsieme verificato di Python e diventano anch'essi sistemi nativi; i loro errori compaiono sulla riga giusta, mentre scrivi.

  1. 01 // Modello

    Un file di testo.

    YAML da leggere, confrontare e revisionare.

  2. 02 // Compilatore

    Verificato.

    Unità, collegamenti e Python, prima che qualcosa si muova.

  3. 03 // Motore

    Nativo.

    Drake esegue il meccanismo e il suo controllo come un unico sistema.

  4. 04 // Simulazione

    Un file.

    HDF5: i dati, e il modello che li ha prodotti.

Ancora una cosa

Non solo meccanismi.

Una macchina è un meccanismo, un circuito, un fluido e del calore, tutto insieme, e il suo controllo parla con ciascuno. Congegno unisce i domini con porte fisiche tipizzate: coppia e velocità, tensione e corrente, pressione e portata, temperatura e flusso di calore.

Un azionamento disegnato sulla tela di Congegno. Un riferimento di velocità, un PI di velocità a 1 kHz, un PI di corrente e un modulatore vettoriale a 20 kHz comandano un inverter; l'inverter alimenta un motore a magneti permanenti con un collegamento elettrico, e il motore fa girare un giunto rotoidale. Le correnti di fase tornano all'anello di corrente attraverso le trasformate di Clarke e Park, la velocità del giunto all'anello di velocità, e l'angolo del rotore raggiunge modulatore e trasformate con tag Goto e From. CANVAS // motor-drive.yaml CTL SPEED REF 3000 rpm CTL SPEED PI 1 kHz CTL CURRENT PI dq // 20 kHz CTL MODULATOR SVPWM // 20 kHz iq* vd vq [q] ELC INVERTER 48 V DC PWM ELC PMSM 4 pole pairs MCH REVOLUTE shoulder w q CTL CLARKE PARK abc / dq ia ib [q] id iq [q]

ELC + CTL + MCH // Oggi

Un azionamento.

Un inverter e il suo motore, modellati in Modelica, con il controllo a orientamento di campo che li governa: l'anello di velocità a 1 kHz, quello di corrente a 20 kHz, e l'albero che fa girare un volano con un peso. Funziona: Video 04.

Un impianto di alimentazione disegnato sulla tela di Congegno. Pressurizzante, regolatore, serbatoio e valvola di intercettazione formano una linea di fluido che alimenta due propulsori attraverso un collettore; un modulatore di impulsi comanda le valvole dei propulsori con tag Goto e From, le spinte agiscono su un corpo, e la massa del propellente lascia il serbatoio e, con lei, il corpo. CANVAS // feed-system.yaml FLD PRESSURANT 200 bar FLD REGULATOR 20 bar FLD TANK 12 kg FLD LATCH VALVE open PRP THRUSTER A PRP THRUSTER B CTL THRUST CMD 0..1 CTL PULSE MOD 50 ms [cmd] [cmd] [cmd] MCH BODY mass and inertia from the tank F F [m] [m]

FLD + PRP + MCH + CTL // In arrivo

Un impianto di alimentazione.

Pressurizzante, regolatore, serbatoio e valvole che alimentano due propulsori. Le valvole rispondono a un modulatore di impulsi, e il propellente che esce si porta via massa e inerzia dal corpo che lo trasporta.

  • 01 // MCH

    Multibody

    Corpi e giunti, solidi dal CAD.

    Oggi

  • 02 // ELC

    Elettrico

    Motori, azionamenti e bus di potenza, in Modelica.

    Oggi

  • 03 // FLD

    Fluidi e impianti

    Tubi, serbatoi, valvole e pompe.

    In arrivo

  • 04 // PRP

    Propulsione

    Propulsori, e il propellente che consumano.

    In arrivo

  • 05 // THM

    Termico

    Il calore, da dove nasce a dove va.

    In arrivo

  • 06 // CTL

    Controllo

    Schemi a blocchi e Python, ognuno al suo ritmo.

    Oggi

Multibody, controllo ed elettrico girano già: l'elettrico come modelli Modelica, compilati in FMU da OpenModelica ed eseguiti dentro la stessa simulazione. Fluidi e termico arrivano allo stesso modo, poi la propulsione.

08 // Stato

Non è ancora uscito. Ecco a che punto è.

  1. M0

    Shell

    La finestra desktop con tutti i pannelli, la riga di comando e la sessione che condividono.

    Fatto
  2. M1

    Meccanica

    Frame, solidi e giunti, unità ed espressioni, file di modello, l'anteprima 3D dal vivo.

    Fatto
  3. M2

    Simulazioni

    Simulazioni su Drake, sonde e grafici, riproduzione in 3D, un file per ogni simulazione.

    Fatto
  4. M3

    Editing e controllo

    Menu contestuali, sottosistemi, linee di segnale, blocchi di controllo, blocchi Python Function.

    In corso
  5. M4

    Secondo motore

    Un secondo motore fisico dietro lo stesso modello, profili di risoluzione e test di parità fra i due.

    Prossimo

Costruito e provato su macOS con Apple Silicon e su Linux, x86_64 e aarch64.

09 // Open source

Costruito sull'open source. Rilasciato come open source.

Congegno ha licenza MIT, e poggia su:

  • DrakeIl toolbox di robotica che calcola la dinamica, usato come libreria.
  • PythonIl back-end, i tuoi script e i blocchi Python Function.
  • VueLo spazio di lavoro che vedi e clicchi.
  • FreeCADIl CAD che gli lavora accanto.
  • OpenModelicaCompila in FMU i modelli elettrici, fluidici e termici, da eseguire dentro la stessa simulazione.
  • pixiUn solo comando per installare tutto e farlo girare.