From 56709321ba20a6c5a4dc36d8d0c8b6c1e62a8591 Mon Sep 17 00:00:00 2001
From: Nao Pross <np@0hm.ch>
Date: Sat, 13 Apr 2024 02:24:04 +0200
Subject: Add midterm LaTeX source and PDF

---
 midterm.tex | 447 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 447 insertions(+)
 create mode 100644 midterm.tex

(limited to 'midterm.tex')

diff --git a/midterm.tex b/midterm.tex
new file mode 100644
index 0000000..78e60fa
--- /dev/null
+++ b/midterm.tex
@@ -0,0 +1,447 @@
+\documentclass[a4paper, 10pt]{IEEEtran}
+
+\usepackage{array}
+\usepackage{booktabs}
+\usepackage{siunitx}
+\usepackage{float}
+
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{oststud}
+
+\usepackage{graphicx}
+\usepackage{subcaption}
+\usepackage{pgfplots}
+\pgfplotsset{compat=1.18}
+\usepackage{tikz}
+\usetikzlibrary{3d,perspective,matrix,calc}
+
+% Bibliography IEEE style
+\usepackage[
+  backend=biber,
+  style=ieee,
+  citestyle=numeric-comp,
+  sortcites=true
+]{biblatex}
+
+% Allow breaking long URLs in the bibliography
+\setcounter{biburllcpenalty}{7000}
+\setcounter{biburlucpenalty}{8000}
+
+% Add a bibliography resource
+\addbibresource{RCCO.bib}
+
+\title{
+  Robust $\mathcal{H}_\infty$ Controller Synthesis for Hovering Ducted-Fan VTOL
+  Micro-UAV
+}
+\author{
+  \IEEEauthorblockN{Naoki Sean Pross} \IEEEauthorrefmark{1}
+  % \thanks{
+  % }
+  \thanks{
+    Midterm project for course \emph{Robust Control and Convex Optimization}
+    taught by Prof. Dr. R. S. Smith at ETH Zurich.
+    \IEEEauthorrefmark{1}Student ID:~\texttt{19-150-903}
+    Email:~\texttt{npross@student.ethz.ch}.
+    Thanks to T. Rothlin for providing the electromechanical parameters for the
+    UAV.
+  }
+}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+  This paper models an experimental vertical take-off landing (VTOL) micro
+  unmanned aerial vehicle (UAV) device developed at the University of Applied
+  Sciences OST RJ in Rapperswil. The model is then converted to a linear time
+  invariant (LTI) state space plant to design a robust controller using
+  $\mathcal{H}_\infty$ synthesis that tracks a piecewise constant spatial
+  position reference. In conclusion simulated preliminary results on the
+  controller performance are presented.
+\end{abstract}
+
+\section{Introduction}
+
+The presented VTOL micro UAV is a device developed by T. Rothlin
+\cite{rothlin_optimization_2024}  at the University of Applied Sciences OST RJ,
+Rapperswil that can be steered only by controlling the propeller velocity and
+the angle of attack of four flaps under the ducted fan. Currently there is not
+a control algorithm for the UAV and the uncertainties from aerodynamics and
+gyroscopic effects caused by the propeller make this an interesting candidate
+for robust controller synthesis.
+
+% \subsection{Notation}
+% 
+% Throughout this text we will make use a notation customary to mechanics, using
+% boldface letters for vectors and matrices and a hat to indicate unit vectors.
+% Spatial coordinates are grouped into a position vector $\vec{P}$ to avoid
+% confusing the $x$ and $y$ coordinates with the state space model's output and
+% state vectors $\vec{y}$ and $\vec{x}$.
+
+% \begin{table}
+%   \centering
+%   \caption{
+%     Summary of notation for physical quantities.
+%     \label{tab:sym-phy}
+%   }
+%   \begin{tabular}{cl}
+%     \toprule
+%     Symbol & Physical Quantity \\
+%     \midrule
+%     $\vec{P}$ & Position vector \\
+%     $\vec{F}$ & Total force \\
+%     $\vec{M}$ & Total torque \\
+%     \bottomrule
+%   \end{tabular}
+% \end{table}
+
+% \subsection{Organization}
+% 
+% Section \ref{sec:modelling} presents a derivation of a model for the plant, and
+% then \S\ref{sec:control} illustrates the controller design. Finally, in
+% \S\ref{sec:simulation} the closed loop design is simulated and briefly
+% discussed.
+
+\section{System Modelling}
+\label{sec:modelling}
+
+% \subsection{Reference Frames}
+
+To model the dynamics of the ducted-fan UAV two reference frames are required:
+an inertial frame and a body-frame attached to the center of mass
+\cite{stengel_flight_2022}. In the inertial frame we work in the base given by
+the unit vectors $\{\uvec{\imath},\uvec{\jmath},\uvec{k}\}$, whereas in the
+body-frame we use $\{\uvec{x}, \uvec{y}, \uvec{z}\}$ together with the Euler
+angles $\vec{\Theta} = [ \phi ~ \vartheta ~ \psi ]^\mathsf{T}$. The angular
+velocity $\vec{\Omega} = [p ~ q ~ r]^\mathsf{T}$ is then related to
+$\vec{\Theta}$ by $\dot{\vec{\Theta}} = \mx{U} \vec{\Omega}$. To rotate from
+the inertial frame to body frame we use the $SO(3)$ matrix $\mx{R}$. Both
+$\mx{U}$ and $\mx{R}$ can be found in \cite{stengel_flight_2022}.
+
+% \begin{equation}
+%   \dot{\vec{\Theta}} = \begin{bmatrix}
+%     1 & S_\phi T_\vartheta & C_\phi T_\vartheta \\
+%     0 & C_\phi & - S_\phi \\
+%     0 & S_\phi / C_\vartheta & C_\phi / C_\vartheta
+%   \end{bmatrix}
+%   \vec{\Omega}
+%   = \mx{u} \vec{\omega},
+% \end{equation}
+% wherein we use $S_\alpha$, $C_\alpha$ and $T_\alpha$ as shorthand for $\sin
+% \alpha$, $\cos \alpha$ and $\tan \alpha$ respectively. To rotate from the
+% inertial frame to body frame we use the $SO(3)$ matrix
+% \begin{equation*}
+%   \mx{R} = \begin{bmatrix}
+%     C_\vartheta C_\psi & C_\vartheta S_\psi & - S_\vartheta \\
+%     S_\phi S_\vartheta C_\psi - C_\phi S_\psi 
+%       & S_\phi S_\vartheta C_\psi + C_\phi C_\psi
+%       & S_\phi C_\vartheta \\
+%     C_\phi S_\theta C_\psi + S_\phi S_\psi
+%       & C_\phi S_\theta S_\psi - S_\phi C_\psi
+%       & C_\phi C_\vartheta
+%   \end{bmatrix}.
+% \end{equation*}
+
+\subsection{Equations of Motion}
+
+Consider a simplified rigid-body physical model sketched in
+Fig.~\ref{fig:phy-sketch}. With respect to the inertial frame the equations of
+motion from the Newton-Euler formalism are
+\begin{subequations}
+  \begin{align}
+    m \ddot{\vec{P}} &= \mt{\mx{R}} \vec{F} \\
+    \vec{J} \dot{\vec{\Omega}} &= 
+      - \vec{\Omega} \crossp \vec{J} \vec{\Omega} + \vec{\tau},
+  \end{align}
+\end{subequations}
+where $m$ is the total mass, $\vec{P}$ is the position, $\vec{F}$ and
+$\vec{\tau}$ the total force and torque in the body frame respectively, and
+finally $\mx{J}$ the moment of inertia, which is assumed to be a diagonal
+matrix.
+
+\begin{figure}
+  \centering
+  % \includegraphics[width=.7\linewidth, trim={0 10 0 0}, clip]{fig/sketch_hand}
+  \input{fig/sketch}
+  \caption{
+    Sketch of the rigid body physical model for the UAV.
+    % \texttt{TODO: replace with computer-drawn sketch.}
+    \label{fig:phy-sketch}
+  }
+\end{figure}
+
+\begin{figure*}[t]
+  \centering
+  \begin{tikzpicture}[font = \footnotesize]
+    \begin{axis}[
+        width = 42mm, height = 28mm,
+        scale only axis,
+        grid = major,
+        grid style = {densely dotted, gray!50},
+        ylabel = {Flap Angle $\alpha$ / degrees},
+        xlabel = {Time $t$ / seconds},
+        legend entries = {
+          $\alpha_1(t)$,
+          $\alpha_2(t)$,
+          $\alpha_3(t)$,
+          $\alpha_4(t)$
+        },
+        legend columns = 2,
+        title = {\scshape Step Response of Flap Angles},
+        /tikz/line join=bevel,
+      ]
+      \addplot+ [mark=none] table [x index = 0, y index = 7] {fig/stepsim.dat};
+      \addplot+ [mark=none] table [x index = 0, y index = 8] {fig/stepsim.dat};
+      \addplot+ [mark=none] table [x index = 0, y index = 9] {fig/stepsim.dat};
+      \addplot+ [mark=none] table [x index = 0, y index = 10] {fig/stepsim.dat};
+    \end{axis}
+  \end{tikzpicture}
+  \hfill
+  \begin{tikzpicture}[font = \footnotesize, ]
+    \begin{axis}[
+        width = 42mm, height = 28mm,
+        scale only axis,
+        grid = major,
+        grid style = {densely dotted, gray!50},
+        ylabel = {Euler Angle / degrees},
+        xlabel = {Time $t$ / seconds},
+        legend entries = {
+          $\phi(t)$,
+          $\vartheta(t)$,
+          $\psi(t)$,
+        },
+        legend columns = 2,
+        legend style = {anchor = south east, at = {(.95,.05)}},
+        title = {\scshape Step Response of Euler Angles},
+      ]
+      \addplot+ [thick, mark=none] table [x index = 0, y index = 11] {fig/stepsim.dat};
+      \addplot+ [thick, mark=none] table [x index = 0, y index = 12] {fig/stepsim.dat};
+      \addplot+ [thick, mark=none] table [x index = 0, y index = 13] {fig/stepsim.dat};
+    \end{axis}
+  \end{tikzpicture}
+  \hfill
+  \begin{tikzpicture}[font = \footnotesize]
+    \pgfplotsset{set layers}
+    \begin{axis}[
+        width = 42mm, height = 28mm,
+        scale only axis,
+        grid = major,
+        grid style = {densely dotted, gray!50},
+        axis y line* = left,
+        ylabel = {Coordinate / meters},
+        xlabel = {Time $t$ / seconds},
+        legend entries = {
+          $x(t)$,
+          $y(t)$
+        },
+        title = {\scshape Step Response of Position},
+      ]
+      \addplot+ [thick, mark=none] table [x index = 0, y index = 1] {fig/stepsim.dat};
+      \addplot+ [thick, mark=none] table [x index = 0, y index = 2] {fig/stepsim.dat};
+    \end{axis}
+    \begin{axis}[
+        width = 42mm, height = 28mm,
+        scale only axis,
+        % grid = major,
+        % grid style = {densely dotted, gray!50},
+        axis y line* = right,
+        axis x line = none,
+        ylabel = {Velocity / \unit{\meter\per\second}},
+      ]
+      \addplot+ [thick, mark=none, densely dotted, opacity=.8]
+        table [x index = 0, y index = 4] {fig/stepsim.dat};
+      \addplot+ [thick, mark=none, densely dotted, opacity=.8]
+        table [x index = 0, y index = 5] {fig/stepsim.dat};
+    \end{axis}
+  \end{tikzpicture}
+  \caption{
+    Simulated step responses along $x$ of the closed loop $\mathcal{H}_\infty$
+    controller design. In the third plot from the left, continuous lines show
+    the position error while dotted lines with the right axis are the velocity
+    in the corresponding directions.
+    \label{fig:step}
+  }
+\end{figure*}
+
+In the body frame we model the total force $\vec{F}$ acting on the UAV
+following \cite{naldi_design_2010} by considering a thrust force from the
+ducted-fan $\vec{F}_T = - k_T \omega^2 \uvec{z}$ as a function of the
+propeller's angular velocity $\omega$. Because of the geometry we approximate
+the generated air velocity field in the duct  as being constant and collinear
+to $\uvec{z}$  \cite{pereira_hover_2008}
+\begin{equation}
+  \vec{\nu} = \sqrt{\frac{F_T}{2a\varrho \pi^2}} \uvec{z}
+  = \frac{\omega}{\pi} \sqrt{\frac{k_T}{2a\varrho}} \uvec{z}.
+\end{equation}
+The \emph{drag} and \emph{lift} forces generated by the interaction of each
+flap with the air velocity field are then $\vec{F}_d = \frac{1}{2} \varrho S
+C_d\nu^2 \uvec{z}$ and $\vec{F}_\ell = \frac{1}{2} \varrho S C_\ell \nu^2
+\uvec{n}$ respectively ($\uvec{n}$ being given by the orientation of the flap).
+The density of air $\varrho$ is assumed to be constant, while the drag
+coefficients $S$, $C_d$ and $C_\ell$ depend on the angle of attack $\alpha$ of
+the flap making them quite difficult to determine. Hereinafter, under the
+assumption that $\alpha$ is small they will be approximated with $C_d = c_d
+\alpha^2 + c_{0}$, $C_\ell = c_\ell \alpha$ \cite{stengel_flight_2022,
+pereira_hover_2008} and $S$ is considered a constant. Finally, gravity adds a
+term $\vec{F}_g = mg \mt{\mx{R}} \uvec{k}$.
+
+For the total torque it is derived from the geometry that each flap induces
+$\vec{\tau}_{f} = (\frac{1}{3}a \uvec{t} + d\uvec{z}) \crossp (\vec{F}_d +
+\vec{F}_\ell)$, with $\uvec{t} = \uvec{n} \crossp \uvec{z}$. In addition there
+is also a torque induced by the gyroscopic procession $\vec{\tau}_g =
+\mx{R}^\mathsf{T} \omega J_r \uvec{k} \crossp \vec{\Omega}$ with $J_r$ being
+the inertia of the propeller with respect to its spin axis
+\cite{naldi_design_2010}. The resulting total quantities are then
+\begin{subequations}
+  \begin{align}
+    \vec{F} &= mg \mt{\mx{R}} \uvec{k}
+      -k_T\omega^2 \uvec{z} \nonumber \\
+      &\quad + \frac{\varrho S \nu^2}{2} \sum_i 
+        \left(c_d \alpha^2_i + c_0 \right) \uvec{z}
+        + c_\ell \alpha_i \uvec{n}_i, \\
+    \vec{\tau} &= \omega J_r \mx{R}^\mathsf{T} (\uvec{k} \crossp \vec{\Omega})
+      + \frac{\varrho c_\ell S \nu^2 d}{2} 
+      \uvec{z} \crossp \sum_i \alpha_i \uvec{n}_i.
+  \end{align}
+\end{subequations}
+
+% \subsection{Wind Gusts Model}
+% 
+% \texttt{TODO: add disturbance from wind modelled as simple, slowly changing
+% stochastic model following empirical approach as done in
+% \cite{chirarattananon_dynamics_2017}. Use 3D state with azimuth $\gamma$,
+% zenith $\beta$ and magnitude $W$ to generate force and torque. Maybe
+% make cyclostationary?}
+
+
+\subsection{Linearized Dynamics and Plant Model}
+
+To synthesize a controller we simplify the dynamics to a state-space LTI model
+$\dot{\vec{x}} = \mx{A}_x \vec{x} + \mx{B}_{xu} \vec{u}$, $\vec{y} =
+\mx{C}_{yx} \vec{x} + \mx{D}_{yu}\vec{u}$ with state and inputs given by
+\begin{equation}
+  \vec{x} = \mt{\begin{bmatrix}
+    \mt{\vec{P}} &
+    \mt{\dot{\vec{P}}} &
+    \mt{\vec{\Theta}} & 
+    \mt{\vec{\Omega}}
+  \end{bmatrix}},
+  \quad
+  \vec{u} = \mt{\begin{bmatrix}
+    \mt{\vec{\alpha}} & \omega
+  \end{bmatrix}}
+\end{equation}
+respectively. The linearization is performed in a stationary hovering state at
+height $h$ above the ground and yaw angle of \ang{45} or $\vec{P}_0 =
+-h\uvec{k}$, $\vec{\Theta}_0 = \frac{\pi}{4} \uvec{\psi}$, thus $x_0 =
+\mt{[\mt{\vec{P}}_0 ~ \mt{\vec{0}} ~ \mt{\vec{\Theta}}_0 ~ \mt{\vec{0}}]}$ and
+$u_0 = \mt{[ \mt{\vec{0}} ~ \omega_0 ]}$, where $\omega_0 \approx \sqrt{mg /
+k_T}$ is the propeller's angular velocity to make the UAV hover.
+
+% \subsection{Plant Model}
+
+The state is assumed to be known, as there is an inertial measurement unit with
+a dedicated sensor fusion chip onboard \cite{rothlin_optimization_2024}. Thus,
+we only need to model a measurement delay $T_m$ and the actuators. The
+linearized dynamics are extended with 2\textsuperscript{nd} order Padé
+approximant $G_{m}(s) \approx e^{-sT_m}$ for the output delay and two transfer
+functions $G_\alpha(s)$, $G_\omega (s)$ for the flaps and thruster
+respectively. Specifically, $G_\alpha(s)$ is a 2\textsuperscript{nd} order low
+pass filter (LPF) with a slight overshoot, while $G_\omega(s)$ is a first order
+LPF. All inputs and outputs are then normalized and a source of additive
+Gaussian noise $\vec{w}_\alpha \sim \mathcal{N}(\vec{0}, \mx{I})$ is introduced
+to model the wiggling in the servo motor of each flap. The resulting
+plant has 4 unobservable and 4 uncontrollable modes, however it remains both
+detectable and stabilizable.
+
+\section{Controller Design}
+\label{sec:control}
+
+% \subsection{Control Problem}
+
+The control objective is to track a piecewise constant position reference
+$\vec{r}(t) \in \mathbb{R}^3$ in the inertial frame. The controller should move
+the UAV to $\vec{r}(t)$ with control actions that do not exceed the actuator
+limits $\alpha \in (\underline{\alpha}, \overline{\alpha})$, $\omega \in [0,
+\overline{\omega})$, do not bring the angular components of the state too far
+from their set point, i.e. $\vec{\Theta} \in (-\varphi,\varphi)^3$, and do not
+exceed the velocity limits $\|\dot{\vec{P}}\|_1 \leq \overline{v}$.
+
+% \subsection{$\mathcal{H}_\infty$ Synthesis}
+
+To perform $\mathcal{H}_\infty$ synthesis the system is first rewritten in the
+form presented in \cite{skogestad_multivariable_2010}, in terms of control
+inputs $\vec{u} \in \mathbb{R}^5$, exogenous inputs $\vec{w} =
+\mt{[\mt{\vec{w}}_\alpha ~ \mt{\vec{r}}]} \in \mathbb{R}^7$, control outputs
+$\vec{y}_m = \mt{[\mt{(\vec{r} - \vec{y})} ~ \mt{\dot{\vec{P}}} ~
+\mt{\vec{\Theta}} ~ \mt{\vec{\Omega}}]}$ and errors $\vec{e} =
+\mt{[\mt{\vec{\alpha}}~\omega~\mt{(\vec{r} - \vec{y})} ~ \mt{\dot{\vec{P}}} ~
+\mt{\vec{\Theta}}]}$ and partitioned accordingly:
+\begin{equation}
+  \begin{bmatrix} \vec{e} \\ \vec{y}_m \end{bmatrix}
+    = \begin{bmatrix}
+      \mx{A}_{ew} & \mx{B}_{eu} \\
+      \mx{C}_{yw} & \mx{D}_{yu}
+    \end{bmatrix}
+  \begin{bmatrix} \vec{w} \\ \vec{u} \end{bmatrix}
+    = \mx{G}_\text{nom}
+  \begin{bmatrix} \vec{w} \\ \vec{u} \end{bmatrix}.
+\end{equation}
+
+Then for each component of the error a performance weight function is defined
+resulting in 5 transfer functions $W_{P,\alpha}(s)$, $W_{P,\omega}(s)$,
+$W_{P,\vec{P}}(s)$, $W_{P,\dot{\vec{P}}}(s)$, $W_{P,\vec{\Theta}}(s)$. The
+$\mathcal{H}_\infty$ synthesis is performed using the Riccati method yielding a
+stable controller $\mx{K}_\infty$ with $\gamma =
+\|\mathcal{L}(\mx{G}_\text{nom}, \mx{K}_\infty)\|_\infty \approx 0.9091$. Here
+we used the notation $\mathcal{L}$ for the linear fractional transformation
+interconnection.
+
+\section{Preliminary Results} \label{sec:simulation}
+
+The resulting closed loop plant $\mx{G}_\text{cl} =
+\mathcal{L}(\mx{G}_\text{nom}, \mx{K}_\infty)$ is simulated with a step of
+\qty{50}{\cm} along the $x$ spatial coordinate and shown in
+Fig.~\ref{fig:step}. Currently, it takes the UAV about 30 seconds to track a
+half meter step, while respecting the constraints on the actuators. Although
+stable and with good noise rejection characteristics the current design does
+not take into account large inaccuracies caused by the highly non linear
+equations of motion. For higher speeds necessitate higher pitch and roll
+angles, a more performant controller will need to cope with higher modelling
+errors. Hence the next controller will be designed with $\mu$-synthesis which
+can take into account the aforementioned modelling uncertainties.
+
+\printbibliography
+
+\iffalse
+\clearpage
+\appendix
+
+\subsection{Linearized Model Details}
+
+\begin{equation*}
+  A = \begin{bmatrix}
+    0 & I & 0 & 0 \\
+    0
+      & \frac{1}{m} \mt{\mx{R}} \frac{\partial \vec{F}}{\partial \dot{\vec{P}}}
+      & \frac{1}{m} \frac{\partial (\mt{\mx{R}} \vec{F})}{\partial \vec{\Theta}}
+      & \frac{1}{m} \mt{\mx{R}} \frac{\partial \vec{F}}{\partial \vec{\Omega}} \\
+    0 & 0
+      & \frac{\partial \mx{U}}{\partial \vec{\Theta}} \vec{\Omega}
+      & \mx{U} \\
+    0
+      & \minv{\mx{J}} \frac{\partial \vec{\tau}}{\partial \dot{\vec{P}}}
+      & \minv{\mx{J}} \frac{\partial \vec{\tau}}{\partial \vec{\Theta}}
+      & \minv{\mx{J}} \left[
+        \frac{\partial \vec{\tau}}{\partial \vec{\Omega}}
+        - \frac{\partial (\vec{\Omega} \crossp \mx{J} \vec{\Omega})}%
+        {\partial \vec{\Omega}} \right]
+  \end{bmatrix}
+\end{equation*}
+\fi
+
+\end{document}
+% vim:ts=2 sw=2 et spell:
-- 
cgit v1.2.1

