Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
RickGelhausen committed Jun 25, 2024
1 parent a164765 commit bd7d36e
Showing 1 changed file with 0 additions and 38 deletions.
38 changes: 0 additions & 38 deletions exercise-sheet-5.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -162,41 +162,3 @@ mit $ r_i(R) = R $ für $ i \in \{1, 2, 3\} $ und $ r_i(R) = 2R $ für $ i \in \
```{r, echo=FALSE, out.width='50%', fig.align='center', fig.show='hold', fig.cap='**Abbildung 4** - Links: Skizze des Pendels. Rechts: Trajektorie des Pendels mit Initialzustand $ x_0 = \left[\frac{3\pi}{4} \quad 0\right]^T $ und ohne Steuerung, $ u_k = 0 \forall k $.'}
knitr::include_graphics("figures/sheet-5/p5.png")
```

Wir betrachten ein Pendel. Dessen Position ist durch den Winkel $ \theta $ eindeutig bestimmt. Dabei entspricht $ \theta = \pi $ der Position, in der es gerade nach unten hängt. Eine Illustration finden Sie in Abbildung 4. In der Aufhängung des Pendels sitzt ein Motor, sodass es anhand eines Drehmoments $ u $ gesteuert werden kann. Die Winkelgeschwindigkeit ist $ \omega = \dot{\theta} $. Fassen wir Position und Geschwindigkeit im Zustandsvektor $ x = \begin{bmatrix} \theta \\ \omega \end{bmatrix}^T $ zusammen, können wir die Dynamik des Pendels durch die gewöhnliche Differentialgleichung (ordinary differential equation, ODE)

\[
\dot{x} = \begin{bmatrix} \dot{\theta} \\ \dot{\omega} \end{bmatrix} = f(x, u) := \begin{bmatrix} \omega \\ \sin \theta + u \end{bmatrix}
\]

beschreiben. (Zur Vereinfachung haben wir hier alle Einheiten ignoriert. Eigentlich müsste vor den Sinus ein Faktor mit Einheit,
da dieser dann mit dem Drehmoment summiert wird.)


Wir betrachten das Pendel über die Zeitdauer $ T $ und diskretisieren diese in $ N $ Zeitschritte. Zur Simulation verwenden wir das Runge-Kutta-Verfahren 4. Ordnung (RK4) und erhalten dadurch die diskretisierte Dynamik

\[
x_{k+1} = F(x_k, u_k),
\]

wobei $ x_k $ der Zustand zum diskreten Zeitpunkt $ k $, $ k = 0, \ldots, N $, und $ h = \frac{T}{N} $ der Integrationschritt ist. Wir fassen die Zustände und die Steuerungsinputs zu allein Zeitpunkten in den Matrizen

\[
X := \begin{bmatrix} x_0 & \ldots & x_N \end{bmatrix} \in \mathbb{R}^{2 \times (N+1)} \quad \text{und} \quad U := \begin{bmatrix} u_0 & \ldots & u_{N-1} \end{bmatrix} \in \mathbb{R}^{1 \times N}
\]

zusammen.

Unser Ziel ist es nun, das Pendel aus seiner herabhängenden Ruhelage $x_0 = \begin{bmatrix} \pi & 0 \end{bmatrix}^T$ zum Zeitpunkt $k = 0$ in die aufrechte stehende Position $x_N = \begin{bmatrix} 0 & 0 \end{bmatrix}^T$ zum Zeitpunkt $k = N$ zu schwingen.
Dabei wollen wir den Steuerungsaufwand $ L(U) := \sum_{k=0}^{N-1} u_k^2 $ minimieren.

**Aufgaben:**

1. Formulieren Sie unser Optimalsteuerungsproblem als nichtlineares Programm. Dabei sollen $ x_0, \ldots, x_N $ und $ u_0, \ldots, u_{N-1} $ die Entscheidungsvariablen sein. Die Nebenbedingungen sind die Dynamik, sowie die Start- und Zielposition.
2. Diskutieren Sie kurz, ob das Problem konvex ist.
3. Benutzen Sie das bereitgestellte Template, um das NLP mit CasADi und IPOPT zu lösen. Erstellen Sie Plots der optimalen Trajektorien von $ \theta $, $ \omega $ und $ u $, mit der diskreten Zeit $ k $ auf der $ x $-Achse. Sie können Ihre Lösung außerdem mit der bereitgestellten Animation (pendulum.gif) vergleichen.
4. Wir führen nun eine zusätzliche Beschränkung der Steuerung ein. Zu allen Zeitpunkten soll gelten: $ |u_k| \leq u_{\text{max}} $. Diskutieren Sie kurz, wie sich der optimale Wert der Zielfunktion dadurch verändert.
5. Erweitern Sie Ihre NLP Formulierung um die zusätzliche Beschränkung. Beachten Sie, dass Sie hierbei die Betragsfunktion $ | \cdot | $ nicht verwenden sollten, da diese an der Stelle 0 nicht differenzierbar ist. Dies kann zu Problemen führen. Finden Sie stattdessen eine Umformulierung dieser Nebenbedingung.
6. Erweitern Sie Ihre Implementierung um die zusätzliche Nebenbedingung. Verwenden Sie $ u_{\text{max}} = 0.13 $.

---

0 comments on commit bd7d36e

Please sign in to comment.