210 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| %
 | ||
| % !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}
 |