%
% !TEX TS-program = xelatex
% !TEX encoding   = UTF-8 Unicode
% !TEX spellcheck = el-GR
%
% AUTH report template
%
% Requires compilation with pdfLaTeX or XeLaTeX
%
% authors:
%   Χρήστος Χουτουρίδης ΑΕΜ 8997
%   cchoutou@ece.auth.gr

% Options:
%
% 1) mainlang=<language>
%    Default:  english
%    Set the default language of the document which affects hyphenations,
%    localization (section, dates, etc...)
%
%    example: \documentclass[mainlang=greek]{AUThReport}
%
% 2) <language>
%    Add hyphenation and typesetting support for other languages
%    Currently supports: english, greek, german, frenc
%
%    example: \documentclass[english, greek]{AUThReport}
%
% 3) short: Requests a shorter title for the document
%    Default: no short
%
%    example: \documentclass[short]{AUThReport}
%
\documentclass[a4paper, 11pt, mainlang=greek, english]{AUThReport/AUThReport}

\CurrentDate{\today}

% Greek report document setup suggestions
%---------------------------------
% \WorkGroup{Ομάδα Χ}

\AuthorName{Χρήστος Χουτουρίδης}
\AuthorAEM{8997}
\AuthorMail{cchoutou@ece.auth.gr}

%\CoAuthorName{Όνομα Επίθετο}
%\CoAuthorAEM{1234}
%\CoAuthorMail{xxx@ece.auth.gr}

\DocTitle{Εργασία 1}
\DocSubTitle{Έλεγχος γωνίας προσανατολισμού δορυφόρου με ασαφείς ελεγκτές}

\Department{Τμήμα ΗΜΜΥ. Τομέας Ηλεκτρονικής}
\ClassName{Ασαφή Συστήματα (Υπολογιστική Νοημοσύνη)}

\InstructorName{Θεοχάρης Ιωάννης}
\InstructorMail{theochar@ece.auth.gr}

\CoInstructorName{Χαδουλός Χρήστος}
\CoInstructorMail{christgc@auth.gr}


\usepackage{float}
\usepackage{minted}
\usepackage{xcolor} %
\usepackage{amsmath, amssymb, amsfonts}
\usepackage{diagbox}
%\usepackage{tabular}

\setminted[cpp]{
	fontsize=\small,
	breaklines,
	autogobble,
	baselinestretch=1.1,
	tabsize=2,
	numbersep=8pt,
	gobble=0
}

\newcommand{\repo}{https://git.hoo2.net/hoo2/FuzzySystems/src/branch/master/Work\%201}

\begin{document}

% Request a title page or header
\InsertTitle
%\InsertTitle[img/background.png][0.8\textwidth][2cm]

\section{Εισαγωγή}

Στην εργασία αυτή εξετάζεται ο έλεγχος του συστήματος
$G_p(s)=\frac{10}{(s+1)(s+9)}$
με δύο προσεγγίσεις: (i) κλασικός PI και (ii) ασαφής ελεγκτής τύπου Fuzzy–PI (Mamdani).
Στόχος είναι η ικανοποίηση προδιαγραφών μεταβατικής απόκρισης (υπερύψωση, χρόνος ανόδου/αποκατάστασης) και η σύγκριση της ικανότητας παρακολούθησης αναφορών.

Για τον PI γίνεται διερεύνηση root–locus με σταθερό μηδενικό και επιλογή κέρδους βάσει κριτηρίου ITAE.
Για τον Fuzzy-PI γίνεται προσδιορισμός κανόνων εμπειρικά.
Η αξιολόγηση περιλαμβάνει απόκριση βήματος και δύο σενάρια αναφοράς (πολυ-βηματικό και τραπεζοειδές).


\subsection{Παραδοτέα}
Τα παραδοτέα της εργασίας αποτελούνται από:
\begin{itemize}
	\item Την παρούσα αναφορά.
	\item Τον κατάλογο \textbf{source}, με τον κώδικα της matlab.
	\item Το \href{\repo}{σύνδεσμο με το αποθετήριο} που περιέχει τον κώδικα της matlab καθώς και αυτόν της αναφοράς.
\end{itemize}


\section{Σχεδίαση Γραμμικού Ελεγκτή}
Αρχικά υλοποιήσαμε ένα γραμμικό ελεγκτή PI
\[
G_c(s) = K_p + \frac{K_i}{s} = K_p \frac{s+c}{s}
\],
όπου $c=\frac{K_i}{K_p}$.

Στο σχήμα \ref{fig:linear_system} φαίνεται ο βρόχος ελέγχου που υλοποιήθηκε.

\InsertFigure{!h}{0.8}{fig:linear_system}{img/LinearSystem.png}{Γραμμικός ελεγκτής.}

Για το συγκεκριμένο σύστημα οι προδιαγραφές σχεδίασης μας δίνονται:
\begin{itemize}
	\item Υπερύψωση σε βηματική είσοδο, μικρότερη από 10\%.
	\item Χρόνος ανόδου μικρότερος από $1.2sec$.
\end{itemize}
Από την εκφώνηση της εργασίες μας ζητείται να φέρουμε το σύστημα ανοιχτού βρόχου στη μορφή $\frac{K(s+c)}{(s+1)(s+9)}$ και τοποθετήσουμε το μηδενικό του PI στο $c=1$.
Αν και αυτό είναι περιοριστικό για μια βέλτιστη σχεδίαση, για την παρούσα εργασία επιλέξαμε να αναζητήσουμε το κέρδος Κ με brute force.
Για κριτήριο επιλογής πέρα από την απλή ικανοποίηση των προδιαγραφών, επιλέξαμε την χρήση μιας συνάρτησης κόστους ΙΤΑΕ: $\int t |e(t)| dt$.

Ο κώδικας για την αναζήτηση βρίσκεται στο αρχείο \textit{satelite\_PI.m}.
Στο σχήμα \ref{fig:lin_system} φαίνεται ο γεωμετρικός τόπος των ριζών για την βέλτιστη επιλογή κέρδους Κ καθώς και η βηματική απόκριση του συστήματος.

\begin{figure}[!ht]
	\captionsetup{
		format=plain, labelfont={bf,up}, textfont={it,up},
		justification=centering,singlelinecheck=false
	}
	\includegraphics[width=0.48\textwidth]{../source/Root_Locus_c1.png}
	\hspace{1em}
	\includegraphics[width=0.48\textwidth]{../source/Step_Responce_c1_Kp5.79_Ki5.79.png}
 	\caption{Σχεδίαση και απόκριση γραμμικού ελεγκτή.}
	\label{fig:lin_system}
\end{figure}

\section{Σχεδίαση Ασαφούς Ελεγκτή (FLC)}

Για τη σχεδίαση του ασαφούς ελεγκτή υλοποιήσαμε τις παρακάτω βασικές συναρτήσεις.
\begin{itemize}
	\item \textit{mkFIS()}: Όπου δηλώσαμε το fuzzy controller καθώς και της συναρτήσεις συμμετοχής και τους κανόνες.
	Ο ελεγκτής μας δέχεται 2 εισόδους, το σφάλμα και την πρώτη χρονική του παράγωγο ($e, \dot{e}$) και επιστρέφει την πρώτη παράγωγο του σήματος ελέγχου $\dot{u}$.
	Οι συναρτήσεις συμμετοχής δηλώθηκαν με βάση το σχήμα \ref{fig:member_functions}.
	\InsertFigure{!ht}{0.7}{fig:member_functions}{img/MemberFunctions.png}{Συναρτήσεις συμμετοχής.}

	Η βάση κανόνων σχεδιάστηκε εμπειρικά.
	Αν και δεν μπορούμε να αναγάγουμε τους εαυτούς μας σε ειδικούς, για την παρούσα εργασία δεν είχαμε άλλη επιλογή.
	Η λογική που χρησιμοποιήσαμε βασίζεται στην παρατήριση πως, όταν το σφάλμα και η μεταβολή του σφάλματος έχουν αντίθετο πρόσημο, τότε το σύστημα τείνει προς ισορροπία.
	Επομένως, δεν αλλάζουνε το σήμα ελέγχου $\dot{u}$.
	Αυτό δημιουργεί μια διαγώνιο με τη λεκτική τιμή "ZR", όπως φαίνεται στον πίνακα \ref{tab:ruleTable}.
	Επιπροσθέτως, όταν το σφάλμα αυξάνεται και είναι ήδη θετικό, ή μειώνεται και είναι ήδη αρνητικό, τότε εντείνουμε την έξοδο με θετικές και αρνητικές τιμές αντίστοιχα.
	\begin{table}[!ht]
		\centering
		\small
		\setlength{\tabcolsep}{6pt}
		\small
		\renewcommand{\arraystretch}{1.15}
		\begin{tabular}{c|ccccccccc}
			\diagbox{$\dot{e}$}{$e$}
				 & NV & NL & NM & NS & ZR & PS & PM & PL & PV \\ \hline
				NV & NV & NV & NV & NV & NV & NL & NM & NS & ZR \\  % e = NV
				NL & NV & NV & NV & NV & NL & NM & NS & ZR & PS \\  % e = NL
				NM & NV & NV & NV & NL & NM & NS & ZR & PS & PM \\  % e = NM
				NS & NV & NV & NL & NM & NS & ZR & PS & PM & PL \\  % e = NS
				ZR & NV & NL & NM & NS & ZR & PS & PM & PL & PV \\  % e = ZR
				PS & NL & NM & NS & ZR & PS & PM & PL & PV & PV \\  % e = PS
				PM & NM & NS & ZR & PS & PM & PL & PV & PV & PV \\  % e = PM
				PL & NS & ZR & PS & PM & PL & PV & PV & PV & PV \\  % e = PL
				PV & ZR & PS & PM & PL & PV & PV & PV & PV & PV     % e = PV
		\end{tabular}
		\caption{Βάση κανόνων (9$\times$9) για $e$ και $\dot{e}$ με έξοδο $ \dot{u}$.}
		\label{tab:ruleTable}
	\end{table}

	\item \textit{satFZ\_PI()}: Σε αυτή τη συνάρτηση υλοποιήσαμε την τοπολογία όπου τα βάρη $K_e, K_{de}, \alpha, K_{du}$ επιδρούν, τόσο στην κανονικοποίηση των σημάτων πριν και μετά τον ελεγκτή, όσο και στο tuning.
	Η συνάρτηση αυτή δέχεται ως είσοδο το σφάλμα $e$ και επιστρέφει το σήμα ελέγχου $u$, όπως ακριβώς κάνει και ο αντίστοιχος ελεγκτής $Gc$.
	Εδώ όμως δημιουργούμε εσωτερικά τα σήματα $e, \dot{e}$ για τον ασαφή ελεγκτή μας καθώς και αναδημιουργούμε το σήμα $u$ από τις διαφορές $\Delta u$.
	Καθώς η διαδικασία είναι διακριτή, η συνάρτηση αυτή πρέπει να καλείται περιοδικά για όσο διάστημα θέλουμε να προσομοιώσουμε το σύστημα.

	Για το tuning, χρησιμοποιήσαμε πάλι brute force μέθοδο και αναζητήσαμε όλα τα ζευγάρια $K_{de}, K_{du}$ που κανονικοποιούν την διαφορά του σφάλματος εισόδου και την διαφορά του σήματος εξόδου αντίστοιχα, ώστε να επιτύχουμε την καλύτερη δυνατή απόκριση.
	Ως μετρική χρησιμοποιήσαμε πάλι την μετρική ITAE.
\end{itemize}

\section{Σενάριο 1}

\subsection{Σχεδίαση και Απόκριση του ελεγκτή}
Για την σχεδίαση του ελεγκτή, και με βάση αυτά που είπαμε παραπάνω, χρειάζεται απλά να τρέξουμε το \textit{scenario1\_tuning.m} το οποίο μας δίνει:
\begin{verbatim}
Best match: Kde=0.29, Kdu=0.33
Step response:
  RiseTime      : 0.3217 s
  SettlingTime  : 0.9389 s
  Overshoot     : 1.16%
  Peak          : 1.012
  PeakTime      : 1.13 s
  SS error      : 2.471e-05 [t=5 s]
\end{verbatim}

Με το script \textit{scenatio1a.m} εκτελούμε μια προσομοίωση για 5 sec και παίρνουμε τη βηματική απόκριση που φαίνεται στο σχήμα \ref{fig:step_fuzzy}.
\InsertFigure{!ht}{0.7}{fig:step_fuzzy}{../source/Step_Responce_FZ.png}{Βηματική απόκριση για $K_{de}=0.29$ και $K_{du}=0.33$.}

\subsection{Λειτουργία βάσης του ελεγκτή}
Στο σχήμα \ref{fig:rule_graph} "ίσως" φαίνεται η διέγερση των κανόνων σε είσοδο: $e=NM$ και $\dot{e}=ZR$.
\InsertFigure{!ht}{0.95}{fig:rule_graph}{../source/Rule_graphics.png}{Διέγερση των κανόνων του ελεγκτή για $e=0.41$ και $\dot{e}=0.03$.}
Για το σκοπό αυτό μπορούμε να εκτελέσουμε το script \textit{scenarion1bc.m} και έπειτα να εισάγουμε τις τιμές για τα $e$ και $\dot{e}$.
Για το παράδειγμα του σχήματος \ref{fig:rule_graph}, έχουμε χρησιμοποιήσει $e=0.41, \dot{e}=0.03$.

\subsection{Λειτουργία βάσης του ελεγκτή}
Στο σχήμα \ref{fig:fcl_surface} φαίνεται μια τρισδιάστατη απεικόνιση της επιφάνειας εξόδου του ασαφούς συστήματος.
Μπορούμε να παρατηρήσουμε πως η διαισθητική μας επιλογή οδηγούν με μία επιφάνεια που κλιμακώνεται ομαλά σε όλο τον χώρο των εισόδων.
\InsertFigure{!ht}{0.7}{fig:fcl_surface}{../source/FLC surface.png}{Απεικόνιση εισόδων - εξόδων του ασαφούς ελεγκτή.}


\section{Σενάριο 2}
Στο σενάριο 2, εξετάζουμε τη συμπεριφορά του ελεγκτή μας σε διαφορετικές εισόδους.
Μια με περισσότερα του ενός βήματα και μία με κλιμακούμενη είσοδο.
Στο σχήμα \ref{fig:scenario_2} φαίνονται οι αποκρίσεις των εξόδων του συστήματος, σε σχέση με τις εισόδους, οι οποίες παράγονται από το script \textit{scenario2.m}.

Να σημειώσουμε εδώ, πως ο ελεγκτής χρησιμοποιήθηκε με τις ίδιες τιμές που υπολογίσαμε για το πλάτος της βηματικής εισόδου και οι είσοδοι και έξοδοι για το σενάριο προσαρμόστηκαν ώστε να καλύψουν όλο το πλάτος των εισόδου και εξόδων του σεναρίου.

\begin{figure}[!ht]
	\captionsetup{
		format=plain, labelfont={bf,up}, textfont={it,up},
		justification=centering,singlelinecheck=false
	}
	\includegraphics[width=0.48\textwidth]{../source/MultiStep_Responce_FZ.png}
	\hspace{1em}
	\includegraphics[width=0.48\textwidth]{../source/Trapezoid_Responce_FZ.png}
	\caption{Απόκριση ελεγκτή σε βηματική και κλιμακούμενη είσοδο.}
	\label{fig:scenario_2}
\end{figure}

Παρατηρούμε ότι ο ελεγκτής έχει πολύ καλή συμπεριφορά.
Και στις δύο περιπτώσεις καταφέρνει και παρακολουθεί την είσοδο ελέγχου χωρίς πρόβλημα.
Ειδικά στην κλιμακούμενη είσοδο, που έχει μικρότερο slew rate.

\section {Συμπεράσματα}
Στην εργασία συγκρίναμε έναν κλασικό PI με έναν ασαφή Fuzzy–PI για το δορυφορικό μοντέλο.
Ο PI, με $c=1$ και βέλτιστο $K$, ικανοποίησε τις προδιαγραφές και έδωσε γρήγορη άνοδο, αλλά με υπερύψωση κοντά στο όριο (10\%).
Ο Fuzzy–PI υλοποιήθηκε ως Mamdani με δύο εισόδους $(e,\dot e)$, έξοδο $\Delta u$, κανόνες 9$\times$9 και εξωτερική κλιμακοποίηση σε $[-1,1]$.
Ο συντονισμός των $K_{de},K_u$ έγινε με αναζήτηση και κριτήριο ITAE, καταλήγοντας σε πολύ μικρή υπερύψωση (1.2\%) και ήπια απόσβεση, με ελαφρώς αργότερο $T_r$/$T_s$.

Πρακτικά, ο PI αποδείχτηκε απλός και αποτελεσματικός για γρήγορη απόκριση, αλλά πιο «επιθετικός».
Ο Fuzzy–PI απέδωσε πιο ομαλή συμπεριφορά και καλύτερη ευστάθεια στις αλλαγές αναφοράς: στα σενάρια πολλαπλών βημάτων και τραπεζοειδούς σήματος παρακολούθησε πιστά την $r(t)$ χωρίς μόνιμο σφάλμα, με περιορισμένες ταλαντώσεις και λογική προσπάθεια ελέγχου.
Έτσι, και οι δύο λύσεις ικανοποιούν τις προδιαγραφές, με τον Fuzzy–PI να υπερέχει σε ομαλότητα και «ευγένεια» της απόκρισης, ενσωματώνοντας αποτελεσματικά ευρετική γνώση μέσω των κανόνων.

\end{document}
