|
|
Implementation of a nonlinear Matrix Equation in Simulink |
|
Lagrange91 |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 02.03.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.03.2015, 12:06
Titel: Implementation of a nonlinear Matrix Equation in Simulink
|
|
Hallo gomatlab community,
I habe die equations of motion von einer Gyroanlage mit der Lagrange Methode hergeleitet (siehe angehängtes Bild). q2 und q3 stellen Winkel zwischen beweglichen Frames dar, wohingegen w1,w2,w3,w4
die Winkelgeschwindigkeiten darstellen. Id und Jd repräsentieren Trägheitsmomente im Körperfesten Koordinatensystem (constants). Wie auch immer, ich würde das Modell gerne in Simulink simulieren. Dafür habe ich die Bewegungsgleichungen in die folgende Form gebracht.
wobei J(q2,q3) eine a 4x4 Matrix (Inertia Matrix) und die Winkelbeschleunigungen sind.
Wie implementiere ich das in Simulink?
Danke vielmals im Voraus
Mit besten Grüssen,
Pascal
Beschreibung: |
Equations of Motion derived via Lagranges Method |
|
Download |
Dateiname: |
EQNS.PNG |
Dateigröße: |
110.51 KB |
Heruntergeladen: |
594 mal |
|
|
|
|
|
cvanommer |
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 02.03.15
|
|
|
|
Wohnort: Garching bei München
|
|
|
|
Version: R2015a
|
|
|
|
|
|
Verfasst am: 02.03.2015, 13:46
Titel:
|
|
Hallo Pascal,
Eine (einfache) Lösungsvorschlag ist um zum Ersten die Inverse der Inertia Matrix aus zu rechnen in z.B. ein Matlab Skript mit dem 'MATLAB Funktion' block. Folglich kannst du für jede Gleichung ein Subsystem generieren mit ihre gewünchte Input und Output (also z.B. ein Subsystem f1 mit input q2 q3 w1 w2 und w3) Der Output ist dann der Wert die rauskommt. Folglich kannst über ein zweiten Matlabskript (mit ein zweiten MATLAB Funktion) die richtige Winkelbeschleunigungen ausrechnen. Die Output von dieser MatlabSkript in Simulink soll dann w_punkt_1 bis w_punkt_4 sein.
Viel erfolg mit deinem Projekt!
VG Christiaan
p.s. für die Berechnung der q1 bis q4 gilt die gleiche Lösungsstrategie
p.s. 2 wenn du die Winkelgeschwindigkeit w1 gleich null ausrechnen willst, könntest du mit der 'algebraic constraint' die Gleichung für w1 lösen.
|
|
|
Lagrange91 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 02.03.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.03.2015, 14:06
Titel: Re
|
|
Hallo und Danke für den Vorschlag!
Ich frage mich, ob ich dies mit dem angehängten Blockdiagramm ginge? In dem Bild stellt die Funktion "inv(J)" die Matrix J mit den vom Mux hineingeführten inputs auf und berechnet die inverse. Die Funktion gibt also am Ausgang die Inverse von J aus. Die Funktion [f1;f2;f3;f4] stellt die Gleichungen f1=(args) f2=(args) f3=(args) und f4=(args) auf, konkret den Rest der Bewegungsgleichungen ohne die wdot (die habe ich ja auf die andere Seite der Gleichung genommen) und gibt am Ausgang den Vektor [f1;f2;f3;f4] zurück. Die beiden Resultate werden im Block multipliziert (Matrixmultiplikation) und dieser Ausdruck ist .
Die Integratoren habe die Anfangsbedingungen
bzw.
Leider funktioniert das ganze noch nicht ganz so wie ich möchte. Wie sage ich Simulink, dass er mit Matrizen rechnet bzw. Berechnet er das was ich möchte, so wie ich das programmiert habe? Wie muss ich es richtig machen?
Danke für die Hilfe
Gruss
Pascal
|
|
|
Lagrange91 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 02.03.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.03.2015, 16:13
Titel: Re: Re
|
|
|
|
|
Lagrange91 hat Folgendes geschrieben: |
Hallo und Danke für den Vorschlag!
Ich frage mich, ob ich dies mit dem angehängten Blockdiagramm ginge? In dem Bild stellt die Funktion "inv(J)" die Matrix J mit den vom Mux hineingeführten inputs auf und berechnet die inverse. Die Funktion gibt also am Ausgang die Inverse von J aus. Die Funktion [f1;f2;f3;f4] stellt die Gleichungen f1=(args) f2=(args) f3=(args) und f4=(args) auf, konkret den Rest der Bewegungsgleichungen ohne die wdot (die habe ich ja auf die andere Seite der Gleichung genommen) und gibt am Ausgang den Vektor [f1;f2;f3;f4] zurück. Die beiden Resultate werden im Block multipliziert (Matrixmultiplikation) und dieser Ausdruck ist .
Die Integratoren habe die Anfangsbedingungen
bzw.
Leider funktioniert das ganze noch nicht ganz so wie ich möchte. Wie sage ich Simulink, dass er mit Matrizen rechnet bzw. Berechnet er das was ich möchte, so wie ich das programmiert habe? Wie muss ich es richtig machen?
Danke für die Hilfe
Gruss
Pascal |
Beschreibung: |
Hatte vergessen das Bild anzuhängen! |
|
Download |
Dateiname: |
nonlinear_mdl.JPG |
Dateigröße: |
67.03 KB |
Heruntergeladen: |
585 mal |
|
|
|
cvanommer |
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 02.03.15
|
|
|
|
Wohnort: Garching bei München
|
|
|
|
Version: R2015a
|
|
|
|
|
|
Verfasst am: 04.03.2015, 15:59
Titel:
|
|
|
|
|
Hallo Pascal,
Für die Integration von einer Array in Simulink gibt es mehrere Möglichkeiten.
Ich habe in der Modellbeispiel in einem Callback die Matrix initialisiert und dann kann man über ein constant block den Wert in ein Funktion block benutzen. Auch habe ich in die Callback die Initialisierung von der Winkelgeschwindigkeit definiert. (File -> Model Properties -> Model Properties -> Callbacks -> InitFcn)
Eine zweite Möglichkeit ist die Initialisierung über ein m-file machen wo die die Matrix J definierst. Die name der mfile (ohne .m) schreibst du dann in InitFcn rein und dann sind automatisch alle Variablen die du in deiner Initalisierungsmfile schreibst verfügbar.
Ich würde MATLAB Functions benutzen statt interpretet matlab functions.
Viel Erfolg!
Vg Christiaan
Beschreibung: |
|
Download |
Dateiname: |
simulator.png |
Dateigröße: |
38.37 KB |
Heruntergeladen: |
561 mal |
Beschreibung: |
|
Download |
Dateiname: |
simulator.slx |
Dateigröße: |
22.01 KB |
Heruntergeladen: |
506 mal |
|
|
|
Lagrange91 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 02.03.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.03.2015, 19:49
Titel:
|
|
Hallo Christiaan
Danke für deine Hilfe, es hat geklappt! Habe noch kleine numerische Probleme, für gewisse Anfangswerte läuft Simulink ohne zu zucken in die Singularität d.h. die Matrix ist dann nicht mehr invertierbar. Aber das biege ich schon noch für meine Zwecke hin.
Danke nochmals und einen schönen Abend.
Gruss
Pascal
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.03.2015, 23:04
Titel:
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|