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}
|