Hallo,
ich habe ein gekoppeltes DGL system in simulink modelliert.
Dieses modell möchte ich nun nutzen, um mein matlab programm mit
sinnvollen daten zu versorgen.
Das bedeutet ich möchte die ausgänge des simulink modells von matlab aus
"live" lesen und entsprechend über die eingänge darauf reagieren.
Obwohl ich das ganze weiterhin für einen trivialen anwendungsfall von
matlab/simulink halte haben meine recherchen ergeben, dass das ganze
nicht ganz einfach ist (wenn überhaupt möglich). Zumindest habe ich
bisher noch keine zufriedenstellende lösung gefunden.
Mittels sim() kann ich die simulation lediglich von matlab aus starten
und am ende die ausgabe auslesen. So kann ich die ausgabe aber nicht
überwachen und meine eingänge entsprechend neu definieren.
Die nächste idee war die simulation mittels set_param('sim',
'SimulationCommand', 'pause'); regelmäßig anzuhalten, die ausgabe zu
lesen und die eingänge entsprechend neu zu definieren.
1
fork=1:5
2
set_param('sim2','SimulationCommand','pause');
3
simout
4
set_param('sim2','SimulationCommand','continue');
5
pause(1);
6
end
Soetwas führt dabei aber nicht zum gewünschten ziel. Vielmehr scheint
es, dass die schleife erst abgearbeitet wird nachdem die simulation
komplett fertig ist, was ich ja eigentlich gerade nicht möchte.
Also entweder hab ich die funktionsweise von matlab/simulink total
mißverstanden oder ich bin komplett auf dem falschen weg.
Ich hoffe es kann mir jemand helfen.
Ok, ich denke mittlerweile doch auf dem falschen weg zu sein.
Ich erkenne selbst einige probleme, warum es so nicht gehen kann.
Ich habe nun eine neue idee entwickelt, die auch funktionieren müsste.
Bevor ich nun allerdings anfange darauf großartig aufzubauen möchte ich
doch nochmal nachfragen ob dieser weg "der standard" ist, oder ob es
nicht doch noch andere möglichkeiten gibt (nach wie vor kann ich nicht
glauben dass matlab/simulink nicht auf meine vorgesehene art verwendet
werden soll/kann).
Meine idee ist nun folgende.
Ich starte die simulation für einen kurzen zeitraum und speicher den
ausgangsvektor am simulationsende ab. Anschließend starte ich eine neue
(kurze) simulation wobei ich zuvor die parameter auf die werte der
letzten simulation setze, und ggf. die eingangsparameter abänder.
Außerdem wird auch die simulationszeit entsprechend verschoben.
In matlab code sieht das dann so aus:
Hallo,
ich glaube du verstehst Matlab nicht so ganz richtig. Die Simulation der
DGL wird ja nicht in Echtzeit durchgeführt, von daher macht es wenig
Sinn auf Simulationsergebnisse von Hand zu reagieren. Klar kannst du die
Simulation anhalten und dann mit anderen Anfangsbedingungen y(0)=yo,
yp(0)=yop...wieder starten. Wie wärs mit einem Regler?
Gruß
Ja, das mein erst genanntes vorgehen keinen sinn hat habe ich
mittlerweile auch erkannt.
Aber ich kann ja mal mein gesamtziel erklären, vllt wird das problem
dann klarer.
Ich habe in simulink die kinematischen bewegungsgleichungen eines
mehrkörpersystems modelliert. Auf basis eines suchalgorithmus möchte ich
nun durch variation der eingangsparameter eine bestimmte
zielkonfiguration erreichen.
Der algorithmus funktioniert so, dass er vom startpunkt in alle
möglichen richtungen geht (durch variation der eingangsparameter), und
von jedem (diskreten) teilergebnis wieder in alle möglichen richtungen,
bis die gewünschte zielkonfiguration erreicht ist.
Das ergebnis ist dann eine wertefolge der eingabeparameter die mein
system vom startpunkt in die gewünschte zielkonfiguration überführt.
Aus diesem grund brauche ich direkt zwischenergebnisse aus meinem
simulink modell. Daraus hat sich meine oben genannte zweite idee
entwickelt. Aber ist es denn sinnvoll so vorzugehen bzw. gibt es
andere/bessere möglichkeiten?
Im prinzip kann ich auch die ähnlichkeit zu einem regler erkennen, aber
wie ich damit ans ziel kommen soll ist mir völlig unklar.
hm ich glaub das geht etwas einfacher. Kennst dich mit diskreter
Regelungstechnik etwas aus?
-Diskretes Zustandsraummodell erstellen
-Steuerbarkeitsmatrix Qs aufstellen
-Un=(Qs)^-1*(Xn - (A^n)*Xo)
- und schon hast du deine Steuerfolge Un
n darf bei SISO System nicht kleiner sein als die Ordnung.
Das geht natürlich nur wenn dein System auch steuerbar ist.
Gruß
Meine kenntnisse der regelungstechnik sind leider auf grundlagen
beschränkt.
Erste recherchen bei google über dein genanntes verfahren haben bisher
noch nichts konkretes hervorgebracht. Ich hoffe morgen in der bibliothek
ein buch mit genauerer beschreibung des verfahrens zu finden.
Die diskreten zustände Xn kommen, nehme ich an, aus dem diskretisierten
zustandsmodell.
Um daraus Xns zu berechnen muß ich aber ja wieder eingänge draufgeben,
die ich im folgenden ja eigentlich erst berechnen möchte!?
Hmm naja, da sollte ich mich wohl erstmal etwas schlau lesen.
Danke für die Hilfe soweit.
Gruß
Hallo,
vielen Dank für die unterstützung.
Ich wollte das ganze nun mal an einem beispiel ausprobieren.
Dazu nehme ich die kinematischen bewegungsgleichungen eines
nicht-holonomen fahrzeugs:
x_p = V*cos(roh)*cos(psi)
y_p = V*cos(roh)*sin(psi)
psi_p = V/L*tan(roh)
Wobei roh der eingestellte lenkwinkel und v die geschwindigkeit des
fahrzeugs ist. _p repräsentiert die ableitung.
x und y sind die koordinaten des bezugspunktes auf dem fahrzeug, und psi
der gierwinkel des fahrzeugs.
[roh,V] sind eingangsgrößen, [x,y,psi] ist sowohl mein zustand als auch
mein ausgang.
Das problem ist, dass das system nicht linear ist, daher kann ich die
zustandsraumbeschreibung so nicht angeben.
Ist dein verfahren überhaupt auf nichtlineare system anwendbar?
Eine linearisierung kommt auch nicht in frage, da ich mich ziemlich
stark von einem arbeitspunkt entfernen würde.
Weiterhin verstehe ich die mathematik der diskretisierung nicht.
A ist ja eine matrix. Sind die formeln wie folgt zu interpretieren:
Ad[1,1] = e^(A[1,1]*T)
Ad[1,2] = e^(A[1,2]*T)
...
?
Hallo,
die Formel gelten für lineare System. Wenn dir eine Linearisierung zu
ungenau ist, wird das wohl mit diesem Vorgehen nichts.
ist übrigens die Transistionsmatrix und wird wie folgt gebildet:
I ist die Einheitsmatrix und L^-1 die inverse Laplacetransformation.
Du willst doch dein System von einem Anfangszustand A zu einem
Endzustand B bringen. Da bietet sich doch wunderbar ein Regler, an der
dieses übernimmt.
Allerdings musst dich dann, wenn dir eine Linearisierung zu ungenau ist
ein nicht linearen Regler bauen, was mit beschränkten Regelungstechnik
Kenntnissen wohl nicht so ohne weiteres möglich ist.
Gruß
Hi,
im obigen beispiel soll das auto von A nach B kommen. Eine
linearisierung kommt da leider nicht infrage, da als folge eines
konstanten lenkwinkels eine kreisbahn (bzw. klothoide) ein grundlegendes
element der trajektorie ist und schlecht linearisiert werden kann, zumal
größere kreisbögen, also große winkeldifferenzen abgefahren werden.
Ich werde nochmals recherchen zum reglerentwurf nichtlinearer systeme
anstellen. Ansonsten verwirkliche ich den oben genannten algorithmus,
was soweit auch schon ganz gut funktioniert.
Die frage ist eben nur wie sich das ganze im vergleich mit anderen
möglichkeiten schlägt, und ob es nicht viel bessere methoden gibt.
Die paper die ich aber bisher zum thema gelesen habe basieren alle
entweder auf analytischen methoden, oder der suche im
konfigurationsraum. Von daher liege ich evtl. nicht ganz falsch.
Trotzdem nochmal danke für deine unterstützung.