WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Simulation von zwei hintereinander herfahrenden Fahrzeugen

 

chrisss86
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 08.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2013, 11:41     Titel: Simulation von zwei hintereinander herfahrenden Fahrzeugen
  Antworten mit Zitat      
Hallo liebe Matlab-Gemeinde!

Ich möchte in Simulink eine Simulation erstellen, in der ein Fahrzeug mit einer bestimmten Geschwindigkeit hinter einem anderen langsameren Fahrzeug her fährt. Bisher hab ich leider keine großen Erfahrung mit Matlab/Simulink. Es handelt sich hierbei NICHT um eine grafische Realisierung in der zwei Autos tatsächlich hintereinander herfahren sollen.

Wenn die Distanz zwischen beiden Fahrzeugen einen bestimmten Wert unterschreitet, soll die Geschwindigkeit vom hinterher fahrenden Fahrzeug während der Simulation verringert werden.
Ausgegeben werden soll die Geschwindigkeit der beiden Fahrzeuge und die Distanz zwischen den Fahrzeugen während der Simulation.

Habt ihr eine Idee wie man so etwas realisieren kann? Wenn man die Geschwindigkeit mit einem "Constant" vorgibt kann sie glaube ich nicht zur Laufzeit verändern. Gibt es Boxen denen man mit jedem Durchlauf einen anderen Wert zuordnen kann, der mit Hilfe von anderen Boxen berechnet wurde?

Ich hoffe, dass man meine Frage gut verstehen kann. Über eine Hilfe würde ich mich sehr freuen.


Gruß
chrisss
Private Nachricht senden Benutzer-Profile anzeigen


knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2013, 15:10     Titel:
  Antworten mit Zitat      
Du könntest z.B. den "Constant Block" mit der Geschwindigkeit auf ein "Switch Block" geben. Entscheidungsschwelle könnte zum Beispiel sein wenn Simulationszeit kleiner 0.002 ist soll er die Geschwindigkeit von Constant Block nehmen ansonsten den anderen Pfad. Der andere Pfad berechnet die Geschwindigkeit aus der Geschwindigkeitsformel von ersten und zweiten Auto.
Private Nachricht senden Benutzer-Profile anzeigen
 
chrisss86
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 08.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2013, 16:55     Titel:
  Antworten mit Zitat      
Vielen Dank knilumis_baltaM für deine Antwort Smile

Ich hab das mit dem Switch-Block direkt mal ausprobiert und es klappt. Damit kann ich zwischen verschiedenen Geschwindigkeiten hin- und herschalten.

Allerdings gefällt mir diese Lösung noch nicht so recht. Ich möchte die Simulation nämlich noch erweitern und dafür muss ich die Geschwindigkeiten der beiden Fahrzeuge in Abhängigkeit von verschiedenen Parametern (zum Beispiel Distanz zwischen den Fahrzeugen unter einem bestimmten Wert) ändern können. Die Änderung soll dabei über eine Verzögerung erfolgen. Sprich es wird für eine bestimmte Zeit lang gebremst so dass die Geschwindigkeit sich kontinuierlich verringert. Eine Beschleunigung wäre natürlich auch denkbar (ist ja nur eine invertierte Verzögerung).

Ist es nur möglich einen Wert aus dem vorherigen Durchlauf mit Hilfe einer Rückkopplung zu "speichern" und dem System somit bei nächsten Durchlauf zur Verfügung zustellen?

Vielleicht hat ja noch jemand eine Idee? Vielen Dank schonmal im voraus Smile

Gruß
chrisss
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2013, 08:05     Titel:
  Antworten mit Zitat      
Du kannst einen Memory block nehmen. Der speichert den Wert von letzten Zeitschritt.

Könntest auch Matlab Function nehmen und da die ganzen Berechnung für die neuen Geschwindigkeiten machen und dann ausgeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
chrisss86
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 08.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2013, 16:23     Titel:
  Antworten mit Zitat      
Den Memory-Block verwende ich momentan oft wenn ich einen Wert wieder zurückführen möchte. Wenn ich das nicht tue kommt immer ein Fehler.. scheinbar ist Simulink dann verwirrt und weiß nicht zu welchem step er den rückgeführten Wert verrechnen soll.

Nach langem Kampf mit Simulink hab ich es endlich hinbekommen embedded Functions zu verwenden. Musste mir extra Visual Studio 2008 Express runterladen weil bei einer 64Bit Matlab Version kein Compiler mitgeliefert wird.

Mit den Embedded Functions kann man schon einige schöne Dinge machen.
Hab es jetzt auch hinbekommen, dass ich eine Geschwindigkeit in Abhängigkeit von einer Bedingung mit einer festgelegten Verzögerung reduzieren kann.
Dazu führe ich die Aktuelle Geschwindigkeit immer wieder zurück, so dass ich sie beim nächsten Step wieder zur Verfügung habe. Die Rückführung läuft über einen Summierer an dem ich zusätzlich noch einen negativen Eingang habe mit dem ich die Geschwindigkeit reduzieren kann. Habe mal eine Beispiel-Datei angehängt.
Die Ergebnisse dieser Vorgehensweise sind sehr schön, allerdings ist das ganze schon eine ziemliche Fummelei. Will ich die Simulation um eine Kleinigkeit erweitern muss oft viel umgeändert werden.
Vielleicht hat der eine oder andere ja noch eine Idee wie man es besser machen könnte.

Sollte ich neue Fortschritte machen halte ich euch auf dem laufenden Wink

Gruß
Chris

Geschwindigkeit.mdl
 Beschreibung:

Download
 Dateiname:  Geschwindigkeit.mdl
 Dateigröße:  33.46 KB
 Heruntergeladen:  490 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2013, 16:39     Titel:
  Antworten mit Zitat      
Du erstellst (vermutlich) algebraische Schleifen bei zurückführen, daher die Fehlermeldungen. Hier kann ein Delay/Memory Block dann helfen.

Gerade mit der embedded Functions (oder Matlab Functions) ist es doch einfacher: Wenn man ein neues Signal verarbeiten will kann man leicht ein Eingang hinzufügen und im code verarbeiten, als "draußen" neue Pfade und Blöcke ziehen.

Zu deinem Modell kann man jetzt nicht viel sagen, ist ja praktisch leer.
Private Nachricht senden Benutzer-Profile anzeigen
 
chrisss86
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 08.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2013, 11:02     Titel:
  Antworten mit Zitat      
Ja genau, Simulink sagt mir auch, dass es sich um algebraische Schleifen handelt.

Hab das Modell mal so erweitert, dass es sich ausführen lässt und die Scopes etwas anzeigen.

In der Simulation fährt ein Fahrzeug mit 100 km/h. Die sich dabei ergebende Distanz kann Scope2 entnommen werden. Über eine embedded Function überwache ich den Distanzwert und leite eine Verzögerung mit 8m/s ein, sobald das Fahrzeug 150 meter gefahren ist. Dadurch wird das Fahrzeug immer weiter verlangsamt bis es Rückwärts fährt. Die Geschwindigkeit sieht man im Scope1

Ich hoffe man kann das Model nachvollziehen.


Gruß
chrisss

Geschwindigkeit.mdl
 Beschreibung:

Download
 Dateiname:  Geschwindigkeit.mdl
 Dateigröße:  55.02 KB
 Heruntergeladen:  510 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
controlnix
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2013, 14:05     Titel:
  Antworten mit Zitat      
Mein Kommentar zum Bisherigen: Der bisherige Ansatz erscheint mir nicht zielführend.
Um hier eine sinnvolle Simulation des Distanzverhalten zweier Fahrzeuge aufzubauen, ist es notwendig, die Dynamik der Einzelfahrzeuge auf der Basis von Differentialgleichungen (muss nicht kompliziert sein) zu modellieren und zu simulieren. Die Einhaltung einer Distanz zwischen den Fahrzeugen erfolgt durch Regelung. Wenn dann das vorausfahrende Fahrzeug 1 beschleunigt oder verzögert, muss sich Fahrzeug 2 durch eine funktionierende Regelung danach richten.
Wenn man so vorgeht, treten die hier diskutierten Probleme gar nicht auf, und es bedarf dann auch keiner Hilfskonstruktionen mit Mem-Blöcken, algebraischen Schleifen oder Ähnlichem.
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2013, 08:18     Titel:
  Antworten mit Zitat      
Es wäre auch wirklich gut zu wissen welche Formeln du für die Bewegung eines Autos hast bzw. welche du benutzen sollst (was soll alles berücksichtig werden?).

Hinweise zu dem Modell noch: In diesem Fall ist es glaub ich sinvoll wenn du ein Scope nimmst und im drei Eingänge gibst damit die alle relevanten Plots gleichzeitig zu sehen sind. (Scope öffnen, oben links zweites symbol (parameters) und dann im neuen Fenster "Number of axes" auf 3 setzen).

Den Memory2 Block und den Addierer kann man sehr gut mit einem Integrator ersetzen.

Erstell zu aller erst ein Model das die Bewegung eines Autos wiedergibt. Dann kannst du es kopieren und als das zweite Fahrzeug nehmen.
Private Nachricht senden Benutzer-Profile anzeigen
 
chrisss86
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 08.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 11:42     Titel:
  Antworten mit Zitat      
Hoffe Ihr hattet alle ein schönes Wochenende Wink

@controlnix

Ich glaube dir, dass man es mit Hilfe von DGL's einfach modellieren könnte. Nur weiß ich leider keinen richtigen Ansatz dafür. Bei der Simulation soll es sich auch nicht um eine Regelung handeln, in der sich die Fahrzeuge kontinuierlich an das Verhalten des anderen Fahrzeugs anpassen soll. Viel mehr geht es bei der Simulation um einen Bremseingriff, der kurz vor einer Kollision einsätzen und somit einen Aufprall verhindern soll.

@knilumis_baltaM

Das man den Addierer durch einen Integrator ersetzen kann ist eine sehr gute Idee. Allerdings sind die Ergebnisse, die der Integrator liefert um 1/1000 kleiner als die der Addierer+Mem Kombination. Kann es sein, dass der Integrator die Werte nur jede Sekunde abgreift? Fixed Step-Size ist ja 0,001. Das würde den Faktor 1000 erklären. Hab schon geschaut ob ich beim Integrator irgendwas in der Richtung einstellen kann, hab aber nichts gefunden. Vielleicht weißt du da weiter.
Berücksichtigt werden soll bei der Simulation eigentlich nicht viel. Lediglich die Geschwindigkeit, Beschleunigung und Verzögerung des Fahrzeugs.

Wünsche euch einen guten Start in die neue Woche Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 14:29     Titel:
  Antworten mit Zitat      
Wenn du keine dgls verwendest, dann kannst du auch den solver (strg+e) auf discrete stellen und einen "Discrete-Time Integrator" verwenden. Bei ihm stellst du die sample time dann auf 0.001 (standard ist 1).
Private Nachricht senden Benutzer-Profile anzeigen
 
chrisss86
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 08.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 15:19     Titel:
  Antworten mit Zitat      
Ich habe es genau so gemacht wie du gesagt hast. Solver auf "discrete" stellen, den "Discrete-Time Integrator" verwenden und dort die sample-Time "0.001" eintragen. Trotzdem sind die Ergebnisse immer noch um den Faktor 1000 zu klein. Gibt es vielleicht noch Dinge die umgestellt werden müssen?

Gruß

chrisss
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2013, 07:41     Titel:
  Antworten mit Zitat      
Bei dem discrete Integrator stellst du Integrator method auf Accumulation: Forward Euler
Private Nachricht senden Benutzer-Profile anzeigen
 
Raketenmaid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 28.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2013, 18:32     Titel:
  Antworten mit Zitat      
chrisss86 hat Folgendes geschrieben:
Hoffe Ihr hattet alle ein schönes Wochenende Wink

@controlnix

Ich glaube dir, dass man es mit Hilfe von DGL's einfach modellieren könnte. Nur weiß ich leider keinen richtigen Ansatz dafür. Bei der Simulation soll es sich auch nicht um eine Regelung handeln, in der sich die Fahrzeuge kontinuierlich an das Verhalten des anderen Fahrzeugs anpassen soll. Viel mehr geht es bei der Simulation um einen Bremseingriff, der kurz vor einer Kollision einsätzen und somit einen Aufprall verhindern soll.



Mal ne blöde Frage: Soll Deine Simulation nur irgendwie das Wirkungsprinzip dieses Bremsvorgangs veranschaulichen, oder soll es schon eine Simulation sein, bei der das physikalische Verhalten analysiert werden soll?

Im ersteren Fall reicht eine einfache Darstellung, theoretisch könntest Du einfach die gewünschte Distanz als Funktion der Zeit zum vorausfahrenden Auto vorgeben, die sich halt zeitlich ändert nach Einleiten des Bremsmanövers.

Willst Du aber das physikalische System darstellen, dann weiß ich nicht, wie Du das umsetzen willst ohne dass Du die Bewegungsgleichungen aufstellst? Das müssen ja noch nicht mal komplizierte sein, wenn Du Dich auf die eindimensionale trägheitsbehaftete Bewegung beschränkst. Dann brauchst Du aber auch eine Regelung mit Rückführung.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.