%
% !TEX TS-program = xelatex
% !TEX encoding   = UTF-8 Unicode
% !TEX spellcheck = el-GR
%
% Fuzzy Systems Assignment 2
%
% 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{Εργασία 2}
\DocSubTitle{Car Control - Σειρά 3}

\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\%202}

\begin{document}

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

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

Στην παρούσα εργασία σχεδιάστηκε και αξιολογήθηκε ένας \textbf{ελεγκτής ασαφούς λογικής (FLC)} τύπου Mamdani για το πρόβλημα \textit{Car Control} (Σειρά~3). Το όχημα κινείται σε επίπεδο με \emph{σκαλοπάτια}/εμπόδια και στόχος είναι να ακολουθεί μια ασφαλή τροχιά, λαμβάνοντας ως πληροφορία μόνο τις \emph{αποστάσεις από τα εμπόδια} και τον \emph{προσανατολισμό} του.

Ο ελεγκτής υλοποιεί κανόνες της μορφής
\[
	\text{IF } d_V \text{ is } \{S,M,L\} \text{ AND } d_H \text{ is } \{S,M,L\} \text{ AND } \theta \text{ is } \{N,ZE,P\} \text{ THEN } \Delta\theta \text{ is } \{N,ZE,P\},
\]
με τελεστές $ \mathrm{AND}:\min $, $ \mathrm{OR}:\max $, συνεπαγωγή $\min$, σύνθεση/συσσώρευση $\mathrm{sum}$ και αποασαφοποίηση $\mathrm{centroid}$ (COA), όπως ζητείται.

Η ανάπτυξη έγινε σε \textit{MATLAB}.
Το FIS δημιουργήθηκε μέσω του \textit{Fuzzy Logic Designer} (GUI) και αποθηκεύτηκε σε αρχείο \texttt{.fis}.
Η προσομοίωση της κίνησης και η παραγωγή των αποτελεσμάτων έγιναν προγραμματιστικά.


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

\section{Υλοποίηση}
Πριν τη στοχοθετημένη αξιολόγηση, περιγράφεται συνοπτικά η αρχιτεκτονική της υλοποίησης.
Στόχος μας ήταν ένα \emph{αυτοτελές} σενάριο προσομοίωσης που να συνδυάζει:
\begin{itemize}
	\item Ένα "νοητό" περιβάλλον με σκαλοπάτια/τοίχους
	\item Την κινηματική του οχήματος
	\item Τον ασαφή ελεγκτή.
\end{itemize}

Στο σχήμα \ref{fig:fcl_surface} φαίνεται το περιβάλλον της εργασίας.
\InsertFigure{!ht}{0.65}{fig:fcl_surface}{img/Terain.png}{Απεικόνιση του περιβάλλοντος με σκιασμένες περιοχές.}

Για να διατηρηθεί καθαρή διεπαφή, το περιβάλλον και η κινηματική ενσωματώθηκαν σε δύο βοηθητικές συναρτήσεις, ενώ ο ελεγκτής ορίστηκε σε ανεξάρτητη συνάρτηση/αντικείμενο FIS.
Η προσομοίωση εκτελείται από ένα κύριο script που διακρητοποιεί τον χρόνο, τροφοδοτεί τον ελεγκτή με μετρήσεις και ενημερώνει την κατάσταση.

\subsection{\texttt{wallDistance}}

Η \texttt{wallDistance($corners,x,y$)} υλοποιεί τον ``αισθητήρα'' του περιβάλλοντος.
Δεδομένων των \emph{γωνιών} που ορίζουν τα σκαλοπάτια (πίνακας \texttt{corners} με σημεία $(x_i, y_i)$), υπολογίζει:
\begin{itemize}
	\item $d_h$: την \emph{οριζόντια} απόσταση μέχρι τον επόμενο τοίχο στα δεξιά του οχήματος ($x$-διεύθυνση),
	\item $d_v$: την \emph{κάθετη} απόσταση μέχρι τον πλησιέστερο ``πάτο'' κάτω από το όχημα ($y$-διεύθυνση).
\end{itemize}
Ο αλγόριθμος ταξινομεί κατάλληλα τα \texttt{corners} (με \texttt{sortrows}) και επιλέγει τα \emph{ενεργά} τμήματα τοίχων ανάλογα με την τρέχουσα θέση $(x,y)$.
Τιμές $d_h,d_v \le 0$ αντιστοιχούν σε σύγκρουση, ενώ $\infty$ δηλώνει απουσία τοίχου προς την εξεταζόμενη κατεύθυνση.
Οι μετρήσεις κατόπιν \emph{κορεσμού} $[0,1]$ χρησιμοποιούνται αυτούσιες ως είσοδοι του FIS, όπως ορίζει η εκφώνηση.

\subsection{\texttt{moveCar}}
Η \texttt{moveCar($x,y,\theta,\Delta\theta$)} υλοποιεί τη στοιχειώδη κινηματική: πρώτα εφαρμόζεται η διόρθωση γωνίας $\theta \leftarrow \theta+\Delta\theta$, έπειτα ενημερώνεται η θέση
\[
	x \leftarrow x + v\,T_s \cos(\theta), \quad
	y \leftarrow y + v\,T_s \sin(\theta),
\]
με σταθερό μέτρο ταχύτητας $v$ και περίοδο δειγματοληψίας $T_s$.
Η γωνία χρησιμοποιείται σε \emph{μοίρες} ώστε να είναι συμβατή με τα διαστήματα της εκφώνησης.

\subsection{\texttt{carFLC}}
Ο ασαφής ελεγκτής είναι Mamdani με:
\begin{itemize}
	\item \textbf{Εισόδους:} $d_h\in[0,1]$, $d_v\in[0,1]$, $\theta\in[-180,180]$ (μοίρες).
	\item \textbf{Έξοδο:} $\Delta\theta\in[-130,130]$ (μοίρες).
\end{itemize}
Για $d_h,d_v$ χρησιμοποιούνται τριγωνικές MF $\{S,M,L\}$, ενώ για $\theta$ και $\Delta\theta$ οι MF $\{N,ZE,P\}$ όπως δίνονται στην εκφώνηση.
Οι τελεστές είναι:
\[
	\mathrm{AND}=\min,\quad \mathrm{OR}=\max,\quad \mathrm{Implication}=\min,\quad
	\mathrm{Aggregation}=\mathrm{sum},\quad \mathrm{Defuzzification}=\mathrm{centroid}.
\]
Το \texttt{.fis} δημιουργήθηκε με το \emph{Fuzzy Logic Designer} και αποθηκεύτηκε ως \texttt{CarFLC.fis}.
Στο σχήμα \ref{fig:fcl_rules} φαίνεται ένα στηγμιότηπο με τους κανόνες που χρησιμοποιήθηκαν για τον ελεγκτή.
Δυστυχώς, από την προηγούμενη εργασία μέχρι και αυτή, δεν προλάβαμε να γίνουμε ειδικοί, επομένως οι κανόνες βασίζονται και πάλι στη δική μας "φτωχή" προσέγγιση.

\InsertFigure{!ht}{0.95}{fig:fcl_rules}{img/FLC_Rules.png}{Ενδεικτικό στιγμιότυπο κανόνων.}

Στο σχήμα \ref{fig:fcl_surface} βλέπουμε και την επιφάνεια των κανόνων ως συνάρτηση των εισόδων των αποστάσεων.

\InsertFigure{!ht}{0.7}{fig:fcl_surface}{../source/FLC_surface_edit.png}{Ενδεικτική επιφάνεια βάσης κανόνων ($\Delta\theta$ ως συνάρτηση δύο εισόδων).}

\subsection{\texttt{runSimulation}}
Το κύριο script εκτελεί την προσομοίωση: για κάθε χρονικό βήμα καλεί διαδοχικά \texttt{wallDistance} $\rightarrow$ \texttt{evalfis} $\rightarrow$ \texttt{moveCar}, αποθηκεύοντας την τροχιά.
Η διαδικασία επαναλαμβάνεται για τις τρεις αρχικές γωνίες $\theta_0\in\{-45^\circ,0^\circ,45^\circ\}$.
Στην δική μας έκδοση το όχημα εκκινεί από τη θέση $(x_{init},y_{init}) = (3.8, 0.5)$.
Η εκτέλεση τερματίζει είτε σε σύγκρουση (οριακή τιμή $d_H$ ή $d_V\le0$) είτε όταν το όχημα φτάσει στο $(x_d,y_d) = (10, 3.2)$.

\section{Ζητούμενα}
Τα ζητούμενα (τροχιές για διαφορετικές αρχικές γωνίες) παράγονται αυτόματα από το \texttt{runSimulation} και αποθηκεύονται ως εικόνες.
Παρακάτω παρατίθενται οι τροχιές από την εκτέλεση του script.

\InsertFigure{!ht}{0.85}{fig:car_track_min45}{../source/CarMovement_theta-45.png}{Πορεία οχήματος για αρχική γωνία $\theta_0=-45^\circ$.}
\InsertFigure{!ht}{0.85}{fig:car_track_0}{../source/CarMovement_theta0.png}{Πορεία οχήματος για αρχική γωνία $\theta_0=0^\circ$.}
\InsertFigure{!ht}{0.85}{fig:car_track_45}{../source/CarMovement_theta45.png}{Πορεία οχήματος για αρχική γωνία $\theta_0=45^\circ$.}


\subsection{Σχολιασμός}
Η λειτουργία του ελεγκτή είναι \emph{σταθερή} και \emph{ομαλή}: παρατηρούνται ομαλές καμπύλες χωρίς απότομες γωνίες, καθώς οι MF επικάλυψης εξομαλύνουν τις μεταβάσεις κανόνων.
Η σύγκλιση προς το επιθυμητό $x_d$ επιτυγχάνεται και στις τρεις περιπτώσεις, με την τροχιά να ακολουθεί πρακτικά τα εμπόδια.

Ωστόσο, η συμπεριφορά δεν είναι ιδανική για δύο λόγους:
\begin{enumerate}
	\item Ο ελεγκτής \textbf{δεν} λαμβάνει άμεση πληροφορία για το \emph{στόχο} ($x_d,y_d$).
	Bασίζεται μόνο στις αποστάσεις από εμπόδια και στη γωνία, άρα η κάθετη διόρθωση ($y$) δεν ``οδηγείται'' ρητά από το σφάλμα έως τον στόχο.
	\item Οι αποστάσεις $d_h,d_v$ \textbf{ψαλιδισμένες} στο $[0,1]$ περιορίζουν τη δυναμική περιοχή (lossy αισθητηριακή πληροφορία σε μεγάλες αποστάσεις), κάτι που επιβαρύνει την προσέγγιση ειδικά σε ύψος.
\end{enumerate}
Παρά τους περιορισμούς, ο FLC επιτυγχάνει αποφυγή εμποδίων και καλή ευθυγράμμιση με χαμηλό υπολογιστικό κόστος και υψηλή ερμηνευσιμότητα κανόνων.

\section {Συμπεράσματα}
Αναπτύξαμε έναν Mamdani FLC για το πρόβλημα \textit{Car Control} (Σειρά~3) με εισόδους $(d_h,d_v,\theta)$ και έξοδο $\Delta\theta$. Ο ελεγκτής, με κανόνες τύπου IF--THEN και COA αποασαφοποίηση, κατεύθυνε το όχημα με ομαλές τροχιές, αποφεύγοντας τα εμπόδια και επιτυγχάνοντας τη μετάβαση στο επιθυμητό επίπεδο.
\textbf{Στα θετικά}, είχαμε την ομαλότητα ελέγχου, ερμηνευσιμότητα κανόνων, επαναληψιμότητα σε διαφορετικές αρχικές γωνίες, απλή παραμετροποίηση.
\textbf{Στα αρνητικά}, είχαμε την έλλειψη ρητής πληροφορίας στόχου $(x_d,y_d)$, περιορισμένη δυναμική πληροφορία αποστάσεων λόγω κορεσμού $[0,1]$.


Θεωρούμε πως το σύστημα θα βελτιωνόταν αρκετά με:
\begin{itemize}
	\item Προσθήκη επιπλέον εισόδου με σφάλμα προς τον στόχο (πχ.\ $e_x=x_d-x,\ e_y=y_d-y$),
	\item Ανακλιμάκωση ή προσαρμοστικό κορεσμό των αποστάσεων,
	\item Χρήση υβριδικού ελεγκτής (FLC για αποφυγή εμποδίων + PD/TSK για καθοδήγηση στον στόχο).
\end{itemize}

\end{document}
