Benutzer-Werkzeuge

Webseiten-Werkzeuge


adp_laufrobotik:adp_2012_ws_group2:laufmodelle:subsysteme

Subsysteme

In diesem Kapitel werden die gemeinsamen Subsysteme der drei Modelle für einbeiniges Laufen, zweibeiniges Gehen und einbeiniges serielles Laufen dargestellt und erklärt. Gemeinsame Subsysteme beschreiben alle Teile der Blockschaltbilder, die in gleicher oder ähnlicher Form in allen Modellen vorkommen. Diese werden genutzt, um bei der Notwendigkeit der Implementierung eines neuen Modell auf bereits vorhandene Teile anderer Modelle zurückzugreifen und somit Zeit einzusparen.

Die hier benutzten gemeinsamen Subsysteme teilen sich auf in:

  • Switch
  • Rampe
  • Systemenergien
  • Abbruchbedingung


Switch

Aus Übersichtsgründen und um Redundanzen zu vermeiden, wurde entschlossen alle drei Modelle in ein gemeinsamen Blockschaltbild zu integrieren. Aufgrund der Realisierung der drei Modelle in einem einzigen Blockschaltbild tritt das Problem auf, dass bei der Simulation eines Bereichs simultan auch die anderen beiden Bereiche simuliert, bzw. berechnet werden, was den Rechenaufwand der Simulation deutlich erhöht. Außerdem werden bei den drei Modellen zum Teil erheblich unterschiedliche Start-Parameter verwendet, die bei der gleichzeitigen Berechnung der anderen Modelle dazu führen könnten, dass diese nur noch mit erheblichem Rechenaufwand, bzw. gar nicht mehr durchführbar wären. Es ergibt sich somit kein Vorteil, alle drei Modelle gleichzeitig zu simulieren. Aus diesem Grund wurde ein Switch implementiert, der dafür sorgt, dass jeweils nur eine einzige Simulation/Berechnung gestartet wird.

<imgcaption image1|Der Switch aktiviert je nach Modus einzelne Subsysteme> </imgcaption>
Das Subsystem „Switch“ überprüft also anhand eines Paramateres „modus“, welches Modell betrachtet werden soll und aktiviert nur dieses in Simulink. Dazu wurde in jedes Modell ein „Enable Port“ eingefügt, der zu Beginn auf der Option „Held“ steht. Somit ist jedes System zunächst deaktiviert. Der „Switch“ (siehe Abb. 1) erhält als Eingangssignal den Parameter „modus“ und beliebig viele „Data Ports“. Je nach Wert des Parameters wird der zugehörige „Data Port“ verwendet und an den Ausgang weitergeleitet. So ergibt der „modus“ 1 den Vektor [0 1 0], der über den Demux an die Ausgänge 1-3 und somit an die „Enable Ports“ der Modelle weitergeleitet wird. Hierbei bedeutet 0 eine Deaktivierung und 1 eine Aktivierung. In dem Beispiel wird also das Modell „Gehen“ aktiviert und die beiden anderen Modelle bleiben deaktiviert.

Rampe

Um eine Erhöhung der Laufgeschwindigkeit während einer Simulation berechnen zu können, wurde ein zusätzlicher Startparameter „Rampe “ implementiert. Dieser Parameter „Rampe“ ist ein Vektor und gibt an, in welchem „Zeitraum“ die Geschwindigkeit in X-Richtung erhöht werden soll. Der „Zeitraum“ wird dabei durch den Anfangs- und Endschritt, zwischen denen die Erhöhung stattfinden soll, festgelegt. Die dritte Komponente des Vektors ist die Steigung. Diese gibt an, wie schnell die Geschwindigkeitszunahme oder –abnahme realisiert werden soll. Veranschaulicht am Modell bedeutet dies, dass der Läufer innerhalb einer bestimmten Anzahl an Schritten (Endschritt – Anfangsschritt) linear mit der vorgegebenen Steigung beschleunigt.
In dem Integrator (s. <imgref image2>), der in dem Kapitel 2.2.1 genauer beschrieben ist, wird die berechnete Veränderung der Geschwindigkeit in $x$-Richtung zu der integrierten Geschwindigkeit aus der Beschleunigung hinzuaddiert. Da die Geschwindigkeit in diesem Subsystem als Vektor, bestehend aus Geschwindigkeit in X- und Y-Richtung, angegeben ist, muss diese zunächst über einen sogenannten Demux aufgeteilt werden, sodass eine reine Addition zu dem X-Anteil ermöglicht wird. Anschließend werden die beiden Anteile über einen Mux wieder in einem Geschwindigkeitsvektor zusammengeführt.

<imgcaption image2|Integrator mit Geschwindigkeitszuwachs> </imgcaption>

In dem in Abb. 3 dargestellten System wird mit Hilfe der vorgegebenen Rampe (Eingang 1) der Geschwindigkeitszuwachs VXPlus berechnet. Das Subsystem wird aktiviert, wenn eine Null oder ein positiver Wert für den den Anfangsschritt eingetragen wird. Somit kann durch den Eintrag -1 die Berechnung der zusätzlichen Geschwindigkeit ausgeschaltet werden. Überprüft wird nun, ob sich die Rampe in dem Bereich befindet, in dem das System aktiv ist. Genauer gesagt wird überprüft, ob sich die Vorgaben für Anfangs- und Endschritt, in der die Geschwindigkeitserhöhung vollzogen werden soll, innerhalb des Bereichs der insgesamt gelaufenen Schritte (Eingang 2) befinden. Um dies zu kontrollieren, wird mit Bool'schen Operatoren gearbeitet. Die Berechnung von VXPlus wird also nur gestartet, wenn die Bedingung „Anfangsschritt ⇐ Gesamtzahl der Schritte“ erfüllt ist. Für das Ende der Berechnung muss die Bedinung „Endschritt ⇐ Gesamtzahl der Schritte“ gelten . Das Ergebnis beider Bedingungen wird mit einem logischen UND verknüpft und in das Subsystem geleitet, das heißt also, dass die Berechnung nur aktiviert wird, wenn beide Bedingungen erfüllt sind. In dem so aktivierten Subsystem wird nun eine Beschleunigung in X-Richtung berechnet, die über den nachfolgenden Integrator zu der Zusatzgeschwindigkeit VXPlus integriert wird.

<imgcaption image3|Aktivierung der Berechnung> </imgcaption>

Systemenergien

Die Anfangsenergie des Systems setzt sich aus der potentiellen und der kinetischen Energie der Punktmasse zusammen. Für die Energiebetrachtung wird von einem geschlossenem System ausgegangen, das heißt, dass keine Energie verloren geht. Somit kann die gesamte Anfangsenergie direkt aus den Startparametern berechnet werden.

Die allgemeine Formel der potentiellen Energie lautet:

$$ E_{Pot} = m * g * h = m * g * \vec{x_0}(y)$$

Die Masse m, die Erdbeschleunigung g, sowie die Höhe h sind in den Anfangsbedingungen festgehalten, wobei die Höhe h durch den Y-Anteil des Vektors x0 beschrieben wird. Im Vektor x0 sind der X- und Y-Wert der Startposition der Punktmasse eingetragen.

Die Formel der kinetischen Energie lautet:

$$E_{Kin} = \frac12 * m * v^2$$

Die Anfangsgeschwindigkeit v0 ist ebenfalls als Vektor mit x- und y-Komponente in den Anfangsbedingungen vermerkt. Um die kinetische Energie zu berechnen muss die resultierende Anfangsgeschwindigkeit ermittelt werden. Dies geschieht wie folgt:

<latex> $$v = \sqrt{\vec{v_0}(x)^2 + \vec{v_0}(y)^2}$$

<imgcaption image4|Aktivierung der Berechnung> </imgcaption> Somit ergibt sich die folgende Formel für die kinetische Anfangsenergie:

$$E_{Kin} = \frac12 * m * \sqrt{v_0(x)^2 + v_0(y)^2}^2$$

Die gesamte Anfangsenergie des Systems berechnet sich also wie folgt:

$$E_{Sys} = E_{Pot} = E_{Kin} = m * g * x_0(y) + \frac12 * m * (v_0^2+v_0(y)^2)$$

Folgende Eingänge gehen in das Modell ein:

  • $\vec{x_0}$: Vektor der Position des Körperschwerpunkts (Punktmasse) zu Beginn
  • $\vec{v_0}$: Vektor der Geschwindigkeit des Körperschwerpunkts (Punktmasse) zu Beginn
  • $m$: Masse des Läufers
  • $g$: Erdbeschleunigung ($9,81\frac{m}{s^2}$)

Abbildung 4 zeigt das Simulink-Blockschaltbild mit den vier oben erläuterten Eingängen. Diese werden mittels eines Demux in den Funtionsblock f(u) geleitet. In diesem geschieht die Berechnung nach obiger Formel.

Abbruchbedingungen

Da Simulink ausschließlich Werte berechnen, jedoch nicht überprüfen kann, ob diese Ergebnisse im Rahmen des Modells sinnvoll sind, müssen manuell Abbruchbedingungen eingefügt werden, die die Simulation stoppen, sobald die Bedingungen für das Laufen, Gehen, etc. nicht mehr erfüllt sind. Die erste Bedingung ergibt sich aus einer einfachen logischen Überlegungen. Sobald die $y$-Komponente der Punktmasse zu Null wird, bedeutet dies, dass das Modell mit dem Körperschwerpunkt (Punktmasse) auf dem Boden aufgekommen, somit also umgefallen ist. Da ein Aufstehen mit diesem Modell nicht möglich ist, muss die Simulation an dieser Stelle beendet werden.

<imgcaption image5|Zwei Abbruchbedingungen für die Simulation> </imgcaption>
Diese Bedingung wird im unteren Teil der <imgref image5> überprüft. Zur Kontrolle muss also die $y$-Komponente des zweiten Eingang ($x_{xy}$) betrachtet werden. Der angeschlossene Simulink-Block HitCrossing erkennt, wann die Höhe der Punktmasse die Bodenhöhe erreicht. Die Bodenhöhe wird als Offset im Hit-Crossing-Block eingetragen. Die Hit-Crossing-Direction, also die Richtung, in der die Bodenhöhe erreicht wird, wird auf die Einstellung „falling“ gesetzt, da ein Erreichen des Boden mit einer positiven Anfangshöhe der Masse (z.B. 1 $m$) ausschließlich von oben nach unten, also in fallender Richtung geschehen kann. Wird der Offset nun aus einer positiven Richtung überschritten, so wird ein Signal erzeugt, welches über den Stop-Block die Simulation beendet.

Da es bei optimal gewählten Parametern dazu kommen kann, dass das Modell über eine sehr lange Simulationszeit stabil läuft, wurde eine weitere Abbruchbedingung in das Modell eingepflegt. Diese wird mit Hilfe eines Schrittzählers im Modell realisiert.


<imgcaption image6|Schrittzähler> </imgcaption> In <imgref image6> ist die vertikale Geschwindigkeit der Punktmasse dargestellt. Um zu ermitteln, wann ein Schritt gelaufen wurde, soll zum Zeitpunkt, bei dem die Punktmasse die maximale Flughöhe erreicht ein Signal ausgegeben werden. Die maximale Flughöhe ist erreicht, wenn die vertikale Geschwindigkeit von einem positiven auf einen negativen Wert wechselt. Der Läufer befindet sich zu diesem Zeitpunkt also im Wechsel zwischen der Aufwärts- und der Abwärtsbewegung. Wie bereits für die erste Bedingung benutzt, wird auch hier wiederum ein HitCrossing-Block verwendet, der bei einer fallenden Null-Durchquerung ein Signal auslöst. Dieses aktiviert als sogenannter Trigger das Subsystem „Weiterzählen“ und erhöht den Wert des Eingangs um eins. Der jeweils aktuelle Wert wird mit Hilfe eines „Memory“-Blocks bis zur nächsten Aktivierung des „Weiterzählen“-Systems gespeichert. Der im Memory-Block gespeicherte Wert stellt die momentan gelaufene Zahl der Schritte dar und wird über den Ausgang Schritte an die Benutzeroberfläche zurückgeführt. Der Schrittzähler ist in <imgref image6> dargestellt.

<imgcaption image7|Vertikale Geschwindigkeit des KSP> </imgcaption>
Nun muss noch die Abbruchbedingung implementiert werden. Hierzu wird von den bereits gelaufenen Schritten die maximale Schrittzahl ($step_a$), die als Abbruchbedingung in den Anfangsparametern vermerkt ist, subtrahiert. Das Signal dieser Differenz ist somit anfänglich negativ und steigt in seinem Wert an. Erreicht das Signal den Wert Null, so wird die Simulation wiederum mit Hilfe eines Hit-Crossing-Blocks abgebrochen. Die zweite Abbruchbedingung ist im oberen Teil von <imgref image5> zu sehen.

indexmenu_n_1

adp_laufrobotik/adp_2012_ws_group2/laufmodelle/subsysteme.txt · Zuletzt geändert: 28.11.2022 00:58 von 127.0.0.1


Warning: Undefined variable $orig_id in /is/htdocs/wp1019470_OPI92FFHXV/www/wikiLehre/lib/plugins/openas/action.php on line 232