summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Dokument/Designspec/.keep.txt0
-rw-r--r--Dokument/Designspec/display.tex37
-rw-r--r--Dokument/Designspec/events.tex18
-rw-r--r--Dokument/Designspec/events/kalibrering.tex23
-rw-r--r--Dokument/Designspec/events/manuell.tex5
-rw-r--r--Dokument/Designspec/events/missade-givare.tex11
-rw-r--r--Dokument/Designspec/events/off-circuit.tex11
-rw-r--r--Dokument/Designspec/events/olika-bilar.tex4
-rw-r--r--Dokument/Designspec/events/start.tex7
-rw-r--r--Dokument/Designspec/events/warmup.tex12
-rw-r--r--Dokument/Designspec/figures/BanaModell.pdfbin0 -> 226411 bytes
-rw-r--r--Dokument/Designspec/figures/Processchema.pdfbin0 -> 22571 bytes
-rw-r--r--Dokument/Designspec/figures/efter.pdfbin0 -> 12059 bytes
-rw-r--r--Dokument/Designspec/figures/flow.pdfbin0 -> 13640 bytes
-rw-r--r--Dokument/Designspec/figures/innan.pdfbin0 -> 10732 bytes
-rw-r--r--Dokument/Designspec/figures/struktur.pdfbin0 -> 81377 bytes
-rw-r--r--Dokument/Designspec/figures/under.pdfbin0 -> 268163 bytes
-rw-r--r--Dokument/Designspec/lips-no_customer.cls262
-rw-r--r--Dokument/Designspec/logo.pdfbin0 -> 14189 bytes
-rw-r--r--Dokument/Designspec/root.tex88
-rw-r--r--Dokument/Designspec/syfte.tex18
-rw-r--r--Dokument/Designspec/system.tex177
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
new file mode 100644
index 0000000..8e003e9
--- /dev/null
+++ b/Dokument/Designspec/figures/BanaModell.pdf
Binary files differ
diff --git a/Dokument/Designspec/figures/Processchema.pdf b/Dokument/Designspec/figures/Processchema.pdf
new file mode 100644
index 0000000..a897df6
--- /dev/null
+++ b/Dokument/Designspec/figures/Processchema.pdf
Binary files differ
diff --git a/Dokument/Designspec/figures/efter.pdf b/Dokument/Designspec/figures/efter.pdf
new file mode 100644
index 0000000..24ca443
--- /dev/null
+++ b/Dokument/Designspec/figures/efter.pdf
Binary files differ
diff --git a/Dokument/Designspec/figures/flow.pdf b/Dokument/Designspec/figures/flow.pdf
new file mode 100644
index 0000000..a6e0b80
--- /dev/null
+++ b/Dokument/Designspec/figures/flow.pdf
Binary files differ
diff --git a/Dokument/Designspec/figures/innan.pdf b/Dokument/Designspec/figures/innan.pdf
new file mode 100644
index 0000000..5984dd8
--- /dev/null
+++ b/Dokument/Designspec/figures/innan.pdf
Binary files differ
diff --git a/Dokument/Designspec/figures/struktur.pdf b/Dokument/Designspec/figures/struktur.pdf
new file mode 100644
index 0000000..22ac869
--- /dev/null
+++ b/Dokument/Designspec/figures/struktur.pdf
Binary files differ
diff --git a/Dokument/Designspec/figures/under.pdf b/Dokument/Designspec/figures/under.pdf
new file mode 100644
index 0000000..cb4b2ac
--- /dev/null
+++ b/Dokument/Designspec/figures/under.pdf
Binary files differ
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
new file mode 100644
index 0000000..72cca3f
--- /dev/null
+++ b/Dokument/Designspec/logo.pdf
Binary files differ
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.
+