diff options
22 files changed, 673 insertions, 0 deletions
diff --git a/Dokument/Designspec/.keep.txt b/Dokument/Designspec/.keep.txt deleted file mode 100644 index e69de29..0000000 --- a/Dokument/Designspec/.keep.txt +++ /dev/null diff --git a/Dokument/Designspec/display.tex b/Dokument/Designspec/display.tex new file mode 100644 index 0000000..6a96efb --- /dev/null +++ b/Dokument/Designspec/display.tex @@ -0,0 +1,37 @@ +\section{Display} + +När programmet startas visar displayen möjligheten att välja aktiv bana, om +gemensam målgång (GM) ska vara aktiverad, vilken varvtid bilarna ska hålla och +eventuellt hur många varv bilarna ska köra runt banan (exkluderat de fem +kalibreringsvarven). Se figur~\ref{fig:disp:before}. + +Under körning ska displayen för varje bil visa den förra varvtiden, hur många +varv bilen kört, nuvarande hastighet och pålagd spänning. Användaren kan också +trycka på en knapp för att avbryta körningen. Se figur~\ref{fig:disp:during}. I +mån av tid ska displayen även visa en karta över banan och var systemet tror +att bilarna befinner sig. + +Efter körningen är avklarad ska displayen visa olika grafer. Enligt +kravspecifikationen ska varvtid per varv och snitthastigheten för varje segment +visas enligt figur~\ref{fig:disp:after}. I mån av tid ska endast en graf åt +gången visas på skärmen och användaren ska kunna välja vilken graf som ska +visas med hjälp av tryckbara knappar längst upp på skärmen. + +\begin{figure} + \centering + \includegraphics{figures/innan} + \caption{Displayens utseende vid val av körinställningar.} + \label{fig:disp:before} +\end{figure} +\begin{figure} + \centering + \includegraphics{figures/under} + \caption{Displayens utseende under körning.} + \label{fig:disp:during} +\end{figure} +\begin{figure} + \centering + \includegraphics{figures/efter} + \caption{Displayens utseende när körning är avklarad.} + \label{fig:disp:after} +\end{figure} diff --git a/Dokument/Designspec/events.tex b/Dokument/Designspec/events.tex new file mode 100644 index 0000000..08a3c7d --- /dev/null +++ b/Dokument/Designspec/events.tex @@ -0,0 +1,18 @@ +\section{Hantering av händelser} + +Under körning kommer det att uppstå händelser som inte är ett fel i programmet +men som programmet fortfarande ska kunna hantera. + +\subsection{Start} \input{events/start} + +\subsection{Avåkning} \input{events/off-circuit} + +\subsection{Missade givare} \input{events/missade-givare} + +\subsection{Manuell körning} \input{events/manuell} + +\subsection{Kalibrering} \input{events/kalibrering} + +\subsection{Hantering av olika bilar} \input{events/olika-bilar} + +\subsection{Olika typer av driftsfall} \input{events/warmup} diff --git a/Dokument/Designspec/events/kalibrering.tex b/Dokument/Designspec/events/kalibrering.tex new file mode 100644 index 0000000..8cd28c4 --- /dev/null +++ b/Dokument/Designspec/events/kalibrering.tex @@ -0,0 +1,23 @@ +För att optimera bilarnas körning och varvtid kommer bilarna behöva kalibreras. +Enligt kravsspecifikationens punkt 22 får det inte köras fler än 5 +kalibreringsvarv innan kraven 20 och 21 måste vara uppfyllda. + +Kalibreringsvarven behöver ta hänsyn till tre moment. Det första är att +identifiera vilken konstant en bil behöver, det andra är att optimera för +gemensam varvtid och det tredje är att optimera den valda varvtiden. + +För att identifiera en bilkonstant börjar programmet med att välja den lägsta +spänningen som är möjlig vid starten. Efter första givaren är det möjligt att +räkna ut hastigheten samt ta fram en begynnelsekonstant för första segmentet +som kan användas för uppskattning av position. Det är också möjligt att se om +bilen ligger efter eller kör enligt tid genom att jämföra med tidigare mätdata. +Om bilen ligger efter kommer spänningen ökas succesivt tills bilen har nått den +önskade tiden mellan segmenten för att uppnå önskad varvtid. När bilen ligger i +fas kan den konstant som krävs för den nuvarande bilen räknas ut. + +Under kalibreringsvarven är det också viktigt att anpassa båda bilarnas varvtid +mot varandra. Om båda bilarna har en varvtid som är långsammare än den +förväntade hastigheten ska programmet optimera för en gemensam varvtid före den +valda varvtiden. Med funktioner ska programmet också kunna optimera för både +gemensam och vald varvtid. + diff --git a/Dokument/Designspec/events/manuell.tex b/Dokument/Designspec/events/manuell.tex new file mode 100644 index 0000000..a06c43a --- /dev/null +++ b/Dokument/Designspec/events/manuell.tex @@ -0,0 +1,5 @@ +Enligt kravspecifikationens punkt 12 ska det vara möjligt att välja om en bana +ska köras manuellt eller autonomt. Det ska alltså gå att köra ena banan +manuellt medan den andra styrs av programmet. Detta styrs via displayen vid +uppstart. + diff --git a/Dokument/Designspec/events/missade-givare.tex b/Dokument/Designspec/events/missade-givare.tex new file mode 100644 index 0000000..a3aff3e --- /dev/null +++ b/Dokument/Designspec/events/missade-givare.tex @@ -0,0 +1,11 @@ +Enligt krav 3 i kravspecifikationen ska programmet kunna hantera missade givare +och fortsätta köra som normalt. Med metoden som används blir detta inte ett +problem. Givarna kommer endast att användas för att justera programmets +uppfattning om bilarnas position, medan själva positioneringen räknas ut av +systemet. Om programmet detekterar att en givare inte passeras överhuvudtaget +när det var förväntat fortsätter systemet köra bilen enligt beräkningar på vart +bilen borde befinna sig tills nästa givare. Vid passering av nästa givare +kommer systemet jämföra den uträknade tiden och den faktiska tiden som bilen +passerade på. Systemet jämför sedan om tiderna är rimliga och avgör därefter om +den tidigare tidsfördröjningen var en missad givare eller något annat. + diff --git a/Dokument/Designspec/events/off-circuit.tex b/Dokument/Designspec/events/off-circuit.tex new file mode 100644 index 0000000..9298182 --- /dev/null +++ b/Dokument/Designspec/events/off-circuit.tex @@ -0,0 +1,11 @@ +Enligt kravspecifikationen ska systemet detektera att en bil åkt av banan inom +10 sekunder. Om systemet inte får en ny givarsignal inom tio sekunder från den +senaste givaren antas bilen ha fastnat eller åkt av banan och programmet pausas +tills bilen är på banan igen och användaren trycker på ``fortsätt'' på +displayen. Med givarnas förväntade tidspassering ska programmet kunna se att en +bil inte passerat en givare vid den förväntade tidspasseringen. Har bilen inte +passerat någon av givarna inom fem sekunder kan programmet öka spänningsnivån +gradvis som vid start för att kontrollera om bilen har stannat. Efter +ytterligare 5 sekunder ska programmet pausas och displayen skriva ut att bilen +har åkt av banan. + diff --git a/Dokument/Designspec/events/olika-bilar.tex b/Dokument/Designspec/events/olika-bilar.tex new file mode 100644 index 0000000..4c53011 --- /dev/null +++ b/Dokument/Designspec/events/olika-bilar.tex @@ -0,0 +1,4 @@ +Enligt kravspecifikation punkt 7 ska programmet automatiskt hantera de olika +bilarna som finns. Lösningen är att varje bil ska tilldelas en egen konstant +som är specifik för varje bil. Konstanten är framtagen genom en funktion som +gör beräkningar både för bilens variabel samt eventuellt drifsfall. diff --git a/Dokument/Designspec/events/start.tex b/Dokument/Designspec/events/start.tex new file mode 100644 index 0000000..5a5beeb --- /dev/null +++ b/Dokument/Designspec/events/start.tex @@ -0,0 +1,7 @@ +Vid start ska systemet hitta en spänningsnivå tillräckligt hög för att bilen +ska börja rulla men inte så hög att den åker av banan i första kurvan. I början +ska därför spänningen öka lite i taget tills bilen passerat målgivaren. När +bilen passerat målgivaren bibehålls spänningsnivån tills nästa givare passeras. +Då kan programmet göra beräkningar för en inledande konstant för bilen och det +vanliga systemet kan ta vid och kontrollera bilens förväntade position mot dess +uträknade position. diff --git a/Dokument/Designspec/events/warmup.tex b/Dokument/Designspec/events/warmup.tex new file mode 100644 index 0000000..ef4d989 --- /dev/null +++ b/Dokument/Designspec/events/warmup.tex @@ -0,0 +1,12 @@ +Enligt kravspecifikations punkt 8 ska programmet hantera olika typer av +driftsfall såsom kall samt varm bana. Metoden för att lösa detta problem är att +programmet automatiskt justerar bilens körning för olika typer av driftsfall. + + +Programmet ska kunna identifiera förändringar i snitthastighet per segment och +varvtid (även om programmet ger ut samma spänning). Detta kan bero på +temperaturförändring i banan. Då systemet identifierat dessa förändringar ska +programmet automatiskt justera en konstant (car\_constant, se +sektion~\ref{sec:system_a_funcs}) som korrigeras succesivt tills bilen ligger +på vald referenstid. + diff --git a/Dokument/Designspec/figures/BanaModell.pdf b/Dokument/Designspec/figures/BanaModell.pdf Binary files differnew file mode 100644 index 0000000..8e003e9 --- /dev/null +++ b/Dokument/Designspec/figures/BanaModell.pdf diff --git a/Dokument/Designspec/figures/Processchema.pdf b/Dokument/Designspec/figures/Processchema.pdf Binary files differnew file mode 100644 index 0000000..a897df6 --- /dev/null +++ b/Dokument/Designspec/figures/Processchema.pdf diff --git a/Dokument/Designspec/figures/efter.pdf b/Dokument/Designspec/figures/efter.pdf Binary files differnew file mode 100644 index 0000000..24ca443 --- /dev/null +++ b/Dokument/Designspec/figures/efter.pdf diff --git a/Dokument/Designspec/figures/flow.pdf b/Dokument/Designspec/figures/flow.pdf Binary files differnew file mode 100644 index 0000000..a6e0b80 --- /dev/null +++ b/Dokument/Designspec/figures/flow.pdf diff --git a/Dokument/Designspec/figures/innan.pdf b/Dokument/Designspec/figures/innan.pdf Binary files differnew file mode 100644 index 0000000..5984dd8 --- /dev/null +++ b/Dokument/Designspec/figures/innan.pdf diff --git a/Dokument/Designspec/figures/struktur.pdf b/Dokument/Designspec/figures/struktur.pdf Binary files differnew file mode 100644 index 0000000..22ac869 --- /dev/null +++ b/Dokument/Designspec/figures/struktur.pdf diff --git a/Dokument/Designspec/figures/under.pdf b/Dokument/Designspec/figures/under.pdf Binary files differnew file mode 100644 index 0000000..cb4b2ac --- /dev/null +++ b/Dokument/Designspec/figures/under.pdf diff --git a/Dokument/Designspec/lips-no_customer.cls b/Dokument/Designspec/lips-no_customer.cls new file mode 100644 index 0000000..3ccaa3d --- /dev/null +++ b/Dokument/Designspec/lips-no_customer.cls @@ -0,0 +1,262 @@ +%% This simple template was written by Erik Frisk <erik.frisk@liu.se> +%% for use with the CDIO/LIPS courses at Linköping University. +%% +%% If you find them usefeul, great! If you have constructive suggestions or +%% comments, send me an email and I will consider your comments. + +%% Modified by Gustav Sörnäs +%% Changes: +%% - Remove customer-information +%% - Format all email-adresses with \url{} + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{lips-no_customer}[2015/11/01 v1.0 LaTeX class for typesetting LIPS documents] + +% Declare options +\DeclareOption{swedish}{\def\@lipslang{swedish}} +\DeclareOption{english}{\def\@lipslang{english}} + +\DeclareOption{oneside}{\PassOptionsToClass{oneside}{scrartcl}} +\DeclareOption{twoside}{\PassOptionsToClass{twoside}{scrartcl}} + +\DeclareOption{10pt}{\PassOptionsToClass{10pt}{scrartcl}} +\DeclareOption{11pt}{\PassOptionsToClass{11pt}{scrartcl}} +\DeclareOption{12pt}{\PassOptionsToClass{12pt}{scrartcl}} + +\ExecuteOptions{english} +\ExecuteOptions{10pt} +\ExecuteOptions{oneside} + +\ProcessOptions + +% Load scrartcl class +\LoadClass[headinclude,footinclude,a4paper]{scrartcl} + +% Load packages +\RequirePackage[ +nochapters, % Turn off chapters since this is an article +%beramono, % Use the Bera Mono font for monospaced text (\texttt) +%eulermath,% Use the Euler font for mathematics +pdfspacing, % Makes use of pdftex’ letter spacing capabilities via the microtype package +dottedtoc +]{classicthesis} % The layout is based on the Classic Thesis style + +\RequirePackage{babel} +\RequirePackage[T1]{fontenc} +\RequirePackage[utf8]{inputenc} +\RequirePackage{arsclassica} % Modifies the Classic Thesis package +\RequirePackage{graphicx} % Required for including images +\RequirePackage{hyperref} +\RequirePackage{url} +\RequirePackage{microtype} +\RequirePackage{listings} +%\RequirePackage{palatino} +\RequirePackage{times} +%\RequirePackage{supertabular} +\RequirePackage{longtable} +\RequirePackage[textwidth=165mm,textheight=230mm]{geometry} +\RequirePackage{lipsum} % Used for inserting dummy 'Lorem ipsum' text into the template +\RequirePackage{amsmath,amssymb,amsthm} % For including math equations, theorems, symbols, etc +\RequirePackage{varioref} % More descriptive referencing + + +\def\name@groupemail{Group E-mail} +\def\name@Homepage{Homepage} +\def\name@Orderer{Orderer} +\def\name@Customer{Customer} +\def\name@Supervisor{Supervisor} +\def\name@Responsible{Course Responsible} +\def\name@Phone{Phone} +\def\name@Email{E-mail} +\def\name@Requirement{Requirement} +\def\name@Description{Description} +\def\name@Priority{Priority} +\def\name@contprev{cont. from previous page} +\def\name@contnext{cont. on next page} +\def\name@Author{Author} +\def\name@Date{Date} +\def\name@Reviewed{Reviewed} +\def\name@Approved{Approved} +\def\name@ProjId{Project Identity} + +\ifthenelse{\equal{\@lipslang}{swedish}}{ + \def\name@groupemail{Grupp E-post} + \def\name@Homepage{Hemsida} + \def\name@Orderer{Beställare} + \def\name@Customer{Kund} + \def\name@Supervisor{Handledare} + \def\name@Responsible{Kursansvarig} + \def\name@Phone{Tfn} + \def\name@Email{E-post} + \def\name@Requirement{Krav} + \def\name@Description{Beskrivning} + \def\name@Priority{Prioritet} + \def\name@contprev{forts. från föregående sida} + \def\name@contnext{forts. på nästa sida} + \def\name@Author{Författare} + \def\name@Date{Datum} + \def\name@Reviewed{Granskad} + \def\name@Approved{Godkänd} + \def\name@ProjId{Projektidentitet} +}{} + +\def\projecttitle#1{\gdef\@projecttitle{#1}} + +\def\version#1{\gdef\@version{#1}} + +\def\reviewed#1#2{\gdef\@reviewed{#1}\gdef\@revieweddate{#2}} +\def\approved#1#2{\gdef\@approved{#1}\gdef\@approveddate{#2}} + +\def\coursename#1{\gdef\@coursename{#1}} +\def\coursecode#1{\gdef\@coursecode{#1}} + +\def\courseresponsible#1{\gdef\@courseresponsible{#1}} +\def\courseresponsiblephone#1{\gdef\@courseresponsiblephone{#1}} +\def\courseresponsibleemail#1{\gdef\@courseresponsibleemail{\url{#1}}} + +\def\supervisor#1{\gdef\@supervisor{#1}} +\def\supervisorphone#1{\gdef\@supervisorphone{#1}} +\def\supervisoremail#1{\gdef\@supervisoremail{\url{#1}}} + +\def\groupname#1{\gdef\@groupname{#1}} +\def\groupemail#1{\gdef\@groupemail{\url{#1}}} +\def\groupwww#1{\gdef\@groupwww{\url{#1}}} + +\def\orderer#1{\gdef\@orderer{#1}} +\def\ordererphone#1{\gdef\@ordererphone{#1}} +\def\ordereremail#1{\gdef\@ordereremail{\url{#1}}} + +\def\customer#1{\gdef\@customer{#1}} +\def\customerphone#1{\gdef\@customerphone{#1}} +\def\customeremail#1{\gdef\@customeremail{\url{#1}}} + +\def\smalllogo#1{\gdef\@smalllogo{#1}} +\def\biglogo#1{\gdef\@biglogo{#1}} + +\renewcommand{\maketitle}{% + \pagestyle{scrheadings} + + \clearscrheadfoot + \@ifundefined{@smalllogo}{\ihead{}}{\ihead{\includegraphics[width=.2\textwidth]{\@smalllogo}}} + \chead{\@projecttitle} + \ohead{\@date} + \ifoot{\@coursecode\hspace*{5mm}\@coursename\\\@title} + \ofoot{{\@groupname\\\@groupemail}} + + \pagenumbering{Roman} + \vspace*{4cm} + \begin{center} + \vspace*{3mm} + {\Huge \@title}\\ + \vspace*{3mm} {\large \@author}\\ + \vspace*{10mm} {\large \@date}\\ + \vspace*{10mm} + {\large Version \@version} + \end{center} + \vfill + \@ifundefined{@biglogo}{}{ + \begin{figure}[htbp] + \centering + \includegraphics[width=0.5\textwidth]{\@biglogo} + \end{figure} + \vfill + } + \begin{center} + Status + \end{center} + \begin{tabular}{|p{.3\linewidth}|p{.3\linewidth}|p{.3\linewidth}|} + \hline + \name@Reviewed & \@reviewed & \@revieweddate\\ + \hline + \name@Approved & \@approved & \@approveddate \\ + \hline + \end{tabular} + \cleardoublepage + \pagestyle{scrheadings} +} + +\newcommand{\makeprojectid}{% + \begin{center} + \large\name@ProjId + \end{center} + + \begin{tabular}{ll} + \name@groupemail: & \@groupemail\\[5mm] + \name@Homepage: & \@groupwww\\[5mm] + \name@Orderer: & \@orderer\\ + & \name@Phone: \@ordererphone\\ + & \name@Email: \@ordereremail\\[5mm] + %\name@Customer: & \@customer\\ + % & \name@Phone: \@customerphone\\ + % & \name@Email: \@customeremail\\[5mm] + \name@Supervisor: & \@supervisor\\ + & \name@Phone: \@supervisorphone\\ + & \name@Email: \@supervisoremail\\[5mm] + \name@Responsible: & \@courseresponsible\\ + & \name@Phone: \@courseresponsiblephone\\ + & \name@Email: \@courseresponsibleemail + \end{tabular} +} + + +% Requirements +\newcounter{reqcnt} +\newcommand{\requirementno}{\refstepcounter{reqcnt}\thereqcnt} +% \newenvironment{requirements}{% +% \begin{center}% +% \tablefirsthead{\hline \name@Requirement & \name@Description & \name@Priority \\ +% \hline \hline}% +% \tablehead{\hline \multicolumn{3}{|l|}{\footnotesize\textsl{\name@contprev}}\\\hline \name@Requirement & \name@Description & \name@Priority\\\hline \hline}% +% \tabletail{\hline \multicolumn{3}{|r|}{\footnotesize\textsl{\name@contnext}}\\\hline}% +% \tablelasttail{\hline}% + +% \begin{supertabular*}{\textwidth}{@{\extracolsep{\fill}}|c|p{100mm}|c|}}{% +% \end{supertabular*} +% \end{center} +% } + +\newenvironment{requirements}{% + \begin{center} + \begin{longtable}{|c|p{100mm}|c|} + \hline + \name@Requirement & \name@Description & \name@Priority\\ + \hline + \hline + \endfirsthead + \hline + \multicolumn{3}{|l|}% + {\footnotesize\textsl{\name@contprev}} \\ + \hline + \name@Requirement & \name@Description & \name@Priority\\ + \hline + \endhead + \hline + \multicolumn{3}{|r|}% + {\footnotesize\textsl{\name@contnext}} \\ + \hline + \endfoot + \hline + \endlastfoot + }{% + \end{longtable} + \end{center} +} + + +\setcounter{tocdepth}{2} +\setlength{\footheight}{26pt} +\setlength{\headheight}{33pt} + +\graphicspath{{Figures/}} % Set the default folder for images + +\hypersetup{ +%draft, % Uncomment to remove all links (useful for printing in black and white) +colorlinks=true, breaklinks=true, bookmarks=true,bookmarksnumbered, +urlcolor=webbrown, linkcolor=RoyalBlue, citecolor=webgreen, % Link colors +pdftitle={}, % PDF title +pdfauthor={}, % PDF Author +pdfsubject={}, % PDF Subject +pdfkeywords={}, % PDF Keywords +pdfcreator={pdfLaTeX}, % PDF Creator +pdfproducer={LaTeX with hyperref and ClassicThesis} % PDF producer +} diff --git a/Dokument/Designspec/logo.pdf b/Dokument/Designspec/logo.pdf Binary files differnew file mode 100644 index 0000000..72cca3f --- /dev/null +++ b/Dokument/Designspec/logo.pdf diff --git a/Dokument/Designspec/root.tex b/Dokument/Designspec/root.tex new file mode 100644 index 0000000..b6f00f1 --- /dev/null +++ b/Dokument/Designspec/root.tex @@ -0,0 +1,88 @@ +\documentclass[10pt,oneside,swedish]{lips-no_customer}
+
+%\usepackage[square]{natbib}\bibliographystyle{plainnat}\setcitestyle{numbers}
+\usepackage[round]{natbib}\bibliographystyle{plainnat}
+\usepackage{parskip}
+
+\usepackage{afterpage}
+\graphicspath{{./figures/}}
+
+% Configure the document
+\title{Designspecifikation}
+\author{Yc.4}
+\date{\today}
+\version{1.0}
+
+\reviewed{Viktor Leek}{2019-10-10}
+\approved{Erik Frisk}{2019-10-15}
+
+\projecttitle{Bilbana}
+
+\groupname{Yc.4}
+\groupemail{team_yc4@liuonline.onmicrosoft.com}
+\groupwww{https://www.fs.isy.liu.se/Edu/Courses/TFYY51/}
+
+\coursecode{TFYY51}
+\coursename{Ingenjörsprojekt}
+
+\orderer{Erik Frisk, Linköpings universitet}
+\ordererphone{+46(0)13-285714}
+\ordereremail{erik.frisk@liu.se}
+
+% \customer{Kund, Företag X}
+% \customerphone{+46 xxxxxx}
+% \customeremail{customer@companyx.com}
+
+\courseresponsible{Urban Forsberg}
+\courseresponsiblephone{+46(0)13-281350}
+\courseresponsibleemail{urban.frsberg@liu.se}
+
+\supervisor{Viktor Leek}
+\supervisorphone{+46(0)13-284493}
+\supervisoremail{viktor.leek@liu.se}
+
+\smalllogo{logo} % Page header logo, filename
+\biglogo{logo} % Front page logo, filename
+
+\cfoot{\thepage}
+\begin{document}
+\maketitle
+
+\cleardoublepage
+\makeprojectid
+
+\cleardoublepage
+\tableofcontents
+
+\cleardoublepage
+\section*{Dokumenthistorik}
+\begin{tabular}{p{.06\textwidth}|p{.1\textwidth}|p{.45\textwidth}|p{.13\textwidth}|p{.13\textwidth}}
+ \multicolumn{1}{c}{\bfseries Version} &
+ \multicolumn{1}{|c}{\bfseries Datum} &
+ \multicolumn{1}{|c}{\bfseries Utförda förändringar} &
+ \multicolumn{1}{|c}{\bfseries Utförda av} &
+ \multicolumn{1}{|c}{\bfseries Granskad}\\
+ \hline
+ \hline
+ 0.1 & 2019-10-07 & Första utkast & Gustav & \\\hline
+ 0.2 & 2019-10-08 & Andra utkast & Alla & 2019-10-08 \\\hline
+ 0.3 & 2019-10-09 & Tredje utkast, mer detaljerat & Alla & 2019-10-10\\\hline
+ 0.4 & 2019-10-10 & Fjärde utkast, små justeringar & Alla & \\\hline
+ 0.5 & 2019-10-14 & Femte utkast, mer detaljerad 2.1.5 m.m. & Alla & \\\hline
+ 1.0 & 2019-10-21 & Review/approve & Gustav & \\\hline
+\end{tabular}
+
+\cleardoublepage
+\pagenumbering{arabic}\cfoot{\thepage}
+
+\input{syfte}
+\input{system}
+\input{display}
+\input{events}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/Dokument/Designspec/syfte.tex b/Dokument/Designspec/syfte.tex new file mode 100644 index 0000000..896406e --- /dev/null +++ b/Dokument/Designspec/syfte.tex @@ -0,0 +1,18 @@ +\section{Syfte och mål} + +Syftet med projektet är att konstruera ett system som kör bilar runt en bilbana +(Se figur~\ref{fig:track_modell}). Till bilbanan finns det 9 ``givare'' som när +de passeras skickar en signal till en dator. Genom att mäta tidsskillnaden +mellan signalerna kan man räkna ut hur lång tid det tog för en bil att åka +mellan två givare. Bilbanan är även kopplad till en dator där det finns +möjlighet att justera bilarnas gaspådrag med en spänningstillförsel. Med hjälp +av denna information ska ett system skapas som kör en eller två bilar runt +bilbanan på en inställbar varvtid mellan 12 och 15 sekunder, samt gör att +bilarna åker i mål så nära varandra i tiden som möjligt. + +\begin{figure} + \centering + \includegraphics[width=\linewidth]{figures/BanaModell.pdf} + \caption{En modell av bilbanan.}% + \label{fig:track_modell} +\end{figure} diff --git a/Dokument/Designspec/system.tex b/Dokument/Designspec/system.tex new file mode 100644 index 0000000..d77a016 --- /dev/null +++ b/Dokument/Designspec/system.tex @@ -0,0 +1,177 @@ +\section{Delsystem} + +Systemet är indelat i två olika delsystem. Dessa system körs sekvensiellt, +alltså det ena efter det andra. Varje sekund körs de två delsystemen 10 gånger. +Det första systemet kontrollerar själva bilkörningen medan det andra systemet +kontrollerar displayen. Se figur~\ref{fig:system_diagram} för ett processchema. + +\begin{figure} + \centering + \includegraphics[width=\linewidth,height=0.9\textheight,keepaspectratio]{figures/Processchema.pdf} + \caption{Processchema över systemets helhet.}% + \label{fig:system_diagram} +\end{figure} + + \subsection{Delsystem A: Bana} + + Delsystem A är indelat i tre övergripande delar. I del A.1 hämtas all + tillgänglig information in, i del A.2a görs beräkningar utifrån tillgänglig + data, i del A.2b görs vidare beräkningar (alltså beräkningar som inte baseras + direkt på den tillgängliga informationen), och i del A.3 utförs de ändringar + som programmet bedömer är nödvändiga för att klara den valda varvtiden och + gemensam målgång. + + \subsubsection{Inhämtning av information} + + Informationen som finns tillgänglig är kraftigt begränsad. I praktiken + kommer programmet endast fråga om någon av bilarna passerat en givare sedan + programmet frågade förra gången. + + \subsubsection{Behandling av insignaler} + + De beräkningar som beror direkt på tillgänglig information. Då ny indata + endast kommer då en bil passerar en givare görs dessa beräkningar inte + varje cykel. Ny indata används för att bestämma bilens position och för + att kalibrera en konstant. Dessa funktioner beskrivs mer ingående i + \ref{sec:system_a_funcs}. + + \subsubsection{Vidare beräkningar} + + Den första beräkningen som görs är bilens nuvarande position. Detta görs + med hjälp av en intern bild av banan och vetskapen om vilken hastighet och + position bilen tidigare haft. Sedan beräknas den position som bäst gör att + bilen klarar den satta varvtiden ut med hjälp av den nuvarande tiden och, + om gemensam målgång är aktiverat, positionen av den andra bilen. I början + av varvet görs inte lika drastiska hastighetsändringar som mot slutet. + + Det sista som händer är att informationen om bilens och banans skick + används för att räkna ut vilket spänningspådrag som krävs för att få bilen + att nå den hastighet och position som krävs. + + \subsubsection{Utförande} + + I utförandet skickas det nya spänningspådraget till banorna. + + \subsubsection{Funktioner i delsystem A} \label{sec:system_a_funcs} + + I figur~\ref{fig:flow_diagram} visas flödet av de funktioner som sker i + delsystem A under en programcykel (alltså 10 gånger per sekund). + + Här listas namn på funktionerna och deras funktion: + + \begin{itemize} + + \item old\_v: Bilens hastighet från olika segment, nuvarande varvet och + tidigare lopp. Från denna databas kan andra funktioner få information + om hastigheten bilen tidigare haft. + + \item old\_position: Bilens tidigare placering. Från denna databas kan + andra funktioner få information om var bilen var förra cykeln, var + bilen var för ett varv sedan och så vidare. + + \item indata: Information om huruvida en givare har passerats sedan förra + cykeln. + + \item car\_constant: Påverkar new\_u så att new\_u tillsammans med + track\_u\_constant motsvarar den hastighet som anges av new\_v. + car\_constant ändras endast vid ny indata, vilket innebär att den är + konstant under resterande cykler fram tills nästa givare passeras. + Genom att jämföra positionen som fås av givarna med indatan kan + programmet räkna ut felmarginalen som har uppstått och kalibrera + car\_constant new\_u kan justeras med större precision. + + \item position: Var på banan bilen befinner sig. Fås genom att hämta + senaste positionen (old\_ position) och addera sträckan bilen har + färdats sedan dess senaste värde. Sträckan som bilen har färdats kan + räknas ut genom $s = v \cdot \Delta t$ där $v = \textrm{old\_v}$ samt + $\Delta t = \textrm{tiden sen senaste cykeln}$. Om det finns ny indata + denna cykel är positionen känd och den faktiska positionen används + istället. + + \item clock: Hur länge bilen har varit i det nuvarande segmentet och + varvet. + + \item car\_position\_diff: Bilarnas position gentemot varandra. Endast + aktiv om gemensam målgång aktiverad. Funktionen utgår från respektive + bils placering (old\_position) och hastighet (old\_v) och ger ett värde + på placeringsskillnaden för en viss hastighet. Detta används för att + sätta bilarnas nya hastighet. Värdet blir stort om skillnaden i + placering är stor men justeras också efter hastigeten. Detta betyder + att om bilarna befinner sig långt ifrån varandra men har en hög + hastighet blir värdet inte lika stort som om bilarna befinner sig lika + långt ifrån varandra men har en lägre hastighet. Värdet är positivt om + bilen på bana 1 ligger före bilen på bana 2 och negativt om bilen på + bana 2 ligger före bilen på bana 1. Värdet används sedan för att + beräkna nästa hastighet (new\_v) som kommer ökas eller minskas för att + få bilarna att köra ikapp varandra. + + \item target: Sökt varvtid. Sätts manuellt innan programmet startar. + + \item target\_diff: Differensen mellan den önskade tiden och positionen + relativt till den faktiska tiden och positionen. Fås genom att + subtrahera de önskade värdena med de faktiska värdena. + + \item agressiveness: Justerar hur stora ändringar som görs på new\_v. Vid + början av ett varv finns det mycket tid kvar och new\_v kan ändras lite + i taget istället för att göra stora förändringar direkt. Det är även + onödigt att göra stora ändringar om bilarna befinner sig ungefär där de + bör vara. agressiveness räknas ut via clock, hur mycket av varvtiden + som återstår, target\_diff och hur långt ifrån målet bilen befinner + sig. Om gemensam målgång är aktiv tas även hänsyn till + car\_position\_diff. + + \item u\_constant\_map: En kartläggning över banan och de spänningsnivåer + som behöver sättas så att spänningen blir jämn. Behövs eftersom + spänningstillförseln beter sig olika vid olika delar av banan. + Kartläggningen bygger på det register med inlagrad data som tas fram + genom tester. + + \item target\_diff: Bilens position relativt till var den borde befinna + sig vid den nuvarande tiden. + + \item track\_u\_ constant: Det förbestämda spänningsvärdet för ett visst + subsegment på banan. Tas fram manuellt genom prövning och lagras i + u\_constant\_map. Från position tar track\_u\_constant fram rätt + spänningsvärde. + + \item speed\_map: En kartläggning över banan och hur över hur fort man + kan köra i olika delar av banan. Kartläggningen bygger på det register + med inlagrad data som tas fram genom tester. + + \item speed\_max: Den förbestämda maxhastigheten för nuvarande + subsegment. Tas fram manuellt genom prövning och lagras i speed\_map. + Från position tar speed\_constant fram rätt hastighet. + + \item new\_v: Den hastighet som bilen ska få nästa cykel. Tar förra + cykelns hastighet (old\_ v) och lägger till eller drar av beroende på + hur långt ifrån målet bilarna ligger (target\_diff) och, om gemensam + målgång är aktiverad, hur långt ifrån varandra bilarna är + (car\_position\_diff). Beror också på agressiveness; högre + agressiveness ger större skillnad mellan new\_v och old\_v medan ett + lågt värde gör att new\_v inte ändras särskilt mycket. new\_v används + sedan för att sätta new\_u. Högre new\_v ger högre new\_u och lägre + new\_v ger lägre\_u. + + \item new\_u: Den spänning som ska appliceras beroende på vilken + hastighet new\_v anger. Ett högre new\_v innebär ett högre new\_u. De + andra parametrarna som påverkar new\_u är car\_constant och + track\_u\_constant, desto högre dessa värden dessa antar desto högre + värde antar också new\_u. new\_u är programmets sista output, dess + värde 0 till 127 är det gaspådrag som appliceras på bilen. + + \end{itemize} + + \begin{figure} + \centering + \includegraphics[width=\linewidth]{figures/flow.pdf} + \caption{Funktionsflödet i delsystem A.}% + \label{fig:flow_diagram} + \end{figure} + + \subsection{Delsystem B: Display} + + Displayen ter sig enklare än delsystem A. Under körning ska, om ett nytt varv + påbörjats, den senaste varvtiden och varvnumret skickas till displayen. Om + stopp-knappen har tryckts ned ska systemet hoppa till resultat-skärmen och om + inte så ska det fortsätta. + |
