summaryrefslogtreecommitdiffstats
path: root/Dokument/Teknisk Dokumentation/text/system
diff options
context:
space:
mode:
authorMattias Uvesten <matuv053@student.liu.se>2019-12-02 21:27:21 +0100
committerMattias Uvesten <matuv053@student.liu.se>2019-12-02 21:27:21 +0100
commitcf76f528129877b94988c38d14daced605cbaa71 (patch)
tree832985d93d096caa9faf5a24839cbe6c88d9c062 /Dokument/Teknisk Dokumentation/text/system
parent34d01a5dc128f3a1819c36b7f9e93d07532fcbdb (diff)
parentdfe52de86d600654343968fea54a189f1ec9e8cc (diff)
downloadtfyy51-cf76f528129877b94988c38d14daced605cbaa71.tar.gz
Merge branch 'master' of https://gitlab.liu.se/vehsys/tfyy51/yc4_2019
Diffstat (limited to 'Dokument/Teknisk Dokumentation/text/system')
-rw-r--r--Dokument/Teknisk Dokumentation/text/system/01-innan-start.tex11
-rw-r--r--Dokument/Teknisk Dokumentation/text/system/02-uppstart.tex48
-rw-r--r--Dokument/Teknisk Dokumentation/text/system/03-korning.tex86
-rw-r--r--Dokument/Teknisk Dokumentation/text/system/04-gas.tex1
-rw-r--r--Dokument/Teknisk Dokumentation/text/system/05-display.tex6
5 files changed, 152 insertions, 0 deletions
diff --git a/Dokument/Teknisk Dokumentation/text/system/01-innan-start.tex b/Dokument/Teknisk Dokumentation/text/system/01-innan-start.tex
new file mode 100644
index 0000000..19e3003
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/system/01-innan-start.tex
@@ -0,0 +1,11 @@
+\subsection{Innan start}
+
+Vid uppstart ritas knappar ut på displayen, se figur x. Med dessa knappar går
+det att välja om en eller två banor ska vara aktiva och om de ska styras
+autonomt av systemet eller manuellt med handkontroll. Det går också att ställa
+in en referenstid mellan 12 och 15 sekunder med 0,5 sekunders intervall genom
+att trycka på + och - på displayen. För att reagera på knapptryck skickas varje
+0,4 sekunder ett kommando till displayen som instruerar displayen att lägga
+information om alla knapptryck som skett i dess interna minne. Detta interna
+minne läses sedan av och händelserna bearbetas i den kronologiska ordning de
+gjordes i.
diff --git a/Dokument/Teknisk Dokumentation/text/system/02-uppstart.tex b/Dokument/Teknisk Dokumentation/text/system/02-uppstart.tex
new file mode 100644
index 0000000..02b8869
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/system/02-uppstart.tex
@@ -0,0 +1,48 @@
+\subsection{Uppstart}
+\label{sec:systembeskrivning:uppstart}
+Vid autonom körning utgår systemet ifrån en bootstrap som är systemet för uppstarten av bilarna. Då körs funktionen \texttt{do\_boot()} som arbetar fram en
+initial \texttt{car.constant}. Detta sker i tre steg. Innan bilen börjar rulla
+höjs \texttt{car.constant} varje 0,7 sekunder. När bilen börjar rulla och åker
+under målgivaren höjs \texttt{car.constant} långsammare tills bilen åkt under
+den första givaren varpå \texttt{car.constant} inte längre ändras. Vid den
+tredje givaren jämförs hur lång tid det senaste segmentet tog att köra och en
+sista \texttt{car.constant} räknas ut som förväntas ge en varvtid på 15
+sekunder. Om den förväntade varvtiden är längre än 15 sekunder höjs
+\texttt{car.constant} och om den förväntade varvtiden är lägre sänks
+\texttt{car.constant}.
+
+\begin{figure}
+ \centering
+ \begin{tikzpicture}
+ \draw
+ (0,0) --
+ (1,0) --
+ (1,1) --
+ (2,1) --
+ (2,2) --
+ (3,2) --
+ (3,3) --
+ (4,3) --
+ (4,5) --
+ (7,5) --
+ (7,5.5) --
+ (10,5.5);
+ \draw [dotted] (10, 5.5) -- (14, 5.5);
+ \draw [->] (0,0) -- (15, 0) node[right]{$t$};
+ \draw [->] (0,0) -- (0, 8) node[above]{Spänning};
+ \draw [dotted] (4, 0) -- (4, 0.5) node[right]{Målgivarutslag} -- (4,3);
+ \draw [dotted] (10,0) -- (10, 3) node[right]{Bootstrap slut} -- (10, 5.5);
+ \draw [decoration={brace, raise=2pt}, decorate] (1,1) -- (2,1); % dt
+ \node at (1.5, 1.5) {$dt_1$};
+ \draw [decoration={brace, raise=2pt}, decorate] (1,0) -- (1,1);
+ \node at (0.5, 0.5) {$dU_1$};
+ \draw [decoration={brace, raise=2pt}, decorate] (4,3) -- (4,5);
+ \node at (3.5, 4) {$dU_2$};
+ \draw [decoration={brace, raise=2pt}, decorate] (4,5) -- (7,5);
+ \node at (5.5, 5.5) {$dt_2$};
+ \draw [decoration={brace, mirror, raise=2pt}, decorate] (7,5) -- (7,5.5);
+ \node at (7.55,5.25) {$dU_3$};
+ \end{tikzpicture}
+ \caption{Metod för start av bil.}
+ \label{fig:bootstrap}
+\end{figure}
diff --git a/Dokument/Teknisk Dokumentation/text/system/03-korning.tex b/Dokument/Teknisk Dokumentation/text/system/03-korning.tex
new file mode 100644
index 0000000..24d58ee
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/system/03-korning.tex
@@ -0,0 +1,86 @@
+\subsection{Körning}
+\label{sec:systembeskrivning:korning}
+
+Huvudloopen körs åtminstonde 10 gånger i sekunden. Den beräknar var bilen
+befinner sig, hur snabbt bilen ska köra, justerar \texttt{car.constant} och sätter det
+nya gaspådraget till banan.
+
+Majoriteten av förändringarna i structen \texttt{car} görs i funktionen \texttt{do\_car()}.
+I \texttt{do\_car()} beräknas först positionen (\texttt{car.position}),
+sedan motsvarande hastighetsparameter (\texttt{car.v}) och därefter det gaspådrag
+(\texttt{car.u}) som ska sättas till banan.
+
+\subsubsection{Position}
+\label{sec:system:korning:position}
+Det finns två fall när positionen ska beräknas. När en givare har passerats sedan förra positionsberäkningen och när ingen givare har passerats. Under första varvet hanteras endast det första fallet
+och från varv 2 och frammåt görs båda parallellt.
+
+Om en ny givare har passerats, \texttt{car.new\_check\_point == true}, ökar
+programmet nuvarande segment (\texttt{car.segment}) med 1. \texttt{car.segment}, som
+alltid ligger mellan 1 och 9, används som index för att välja position i en
+lista (\texttt{car.pos\_at}). Vi kallar den positionen för \emph{givarpositionen}.
+
+Om ingen givare har passerars och första varvet är avslutat kallas först på funktionen \texttt{get\_approx\_v()}. Denna utgår ifrån
+förra varvets segmentstider (\texttt{car.seg\_times}) och segmentslängder
+(\texttt{car.seg\_len}) och beräknar med $v = \frac{s}{t}$, där \texttt{s} är segmentslängden och \texttt{t} segmentstiden, \texttt{v} som är medelhastigheten för nuvarnade
+segment, men förra varvet. Denna antas vara ungefär samma som nuvarande
+hastiget och kallas \emph{car.v}.
+
+Sedan beräknas positionen, i meter från målgivaren, med funktionen
+\texttt{get\_position()}. Den använder den ungefärliga hastigheten \texttt{v} beräknad av
+\texttt{approx\_v()} och tiden \texttt{t} sedan denna beräkning gjordes senast (en programcykel, se \ref{sec:system:korning:cykel})
+och beräknar med $s = v \cdot t$ den sträcka som bilen har åkt. Sedan adderas denna
+med förra kända positionen och returneras i \texttt{car.position}. Denna
+\emph{beräknade} position tas också fram när en givare har passerats, då skrivs den över med \emph{givarpositionen} men används i stället för att detektera missade givare. Se \ref{sec:missade givare}.
+
+\subsubsection{Gaspådrag}
+
+Efter positionsberäkningen beräknas det gaspådrag som skall sättas till banan. Detta görs i två
+funktioner, \texttt{get\_new\_v} och \texttt{get\_new\_u}.
+
+I \texttt{get\_new\_v} används bilens nuvarande postition (\texttt{car.postition})
+och hastighetskartan (\texttt{car.map}). I \texttt{car.map} finns en
+hastighetsparameter för varje \texttt{car.position} (Se \ref{sec:begrepp och systemöversikt}.), denna retuneras av funktionen
+och sparas i \texttt{car.v}.
+
+I \texttt{get\_new\_u} används denna hastighetsparameter tillsammans med
+\texttt{car.constant}. Dessa multipliceras och deras produkt retuneras och sparas
+i \texttt{car.u}.
+
+\subsubsection{Governor}
+\label{sec:systembeskrivning:governor}
+Om bootstrap är avslutad, körs den del av koden vars ända uppgift är att
+anpassa \texttt{car.constant}.
+
+Detta görs med funktionen \texttt{do\_gov}. Först görs en uppskattning av
+varvtiden utifrån hur lång tid varvet har tagit än
+så länge. Detta görs med forecasts som beräknar den approximerade varvtiden utifrån tid fram tills senast
+passerad givare samt hastighet i tidigare segment. Genom att veta en
+genomsnittlig hastighet går det med kvarvarande sträcka att räkna ut en
+ungefärlig kvarvarande tid. När tiden från mål till senaste passerade givare adderas med
+den uträknade approximerade tiden kvar, så erhålls det en uppskattad varvtid som
+används för att avgöra om en bil behöver åka snabbare eller långsammare. Om bilen dock är inne på sitt första varv görs uppskattningen endast
+utifrån förra segmentet \texttt{car.forcasts\_naive} och om första varvet är
+avslutat så används \texttt{car.forcasts} som vanligt. Detta görs efter segment 4 och 8. Dessutom används den
+faktiska varvtiden när bilen passerar mål (från varv 2 och frammåt).
+
+Sedan jämförs denna uppskattade varvtid med referenstiden (\texttt{car.ref\_time})
+och \texttt{car.constant} justeras.
+\begin{verbatim}
+car.constant = car.constant + (status - 1) * 0.08;
+\end{verbatim}
+Där \texttt{status} är den uppskattade varvtidens förhållande till \texttt{car.ref\_time}.
+D.v.s om de är exakt lika blir \texttt{status~ =~ 1}, om uppskattningen är högre blir
+den större än 1 och om den är lägre blir den mindre än 1. Således kommer \texttt{car.constant}
+höjas eller sänkas proportionellt mot hur långt ifrån \texttt{car.ref\_time} uppskattningen
+av varvtiden ligger.
+
+\subsubsection{Hantering av cykellängd}
+\label{sec:system:korning:cykel}
+I slutet av varje cykel körs det en loop som tillfälligt pausar programmet.
+För att få avläsningen att ske minst en gång var tionde sekund så pausas
+programmet kontinuerligt 0.001 sekunder tills den totala paustiden överskrider
+0.07 sekunder då nästa cykel börjar. Då pausen på 0.001 sekunder är så pass
+kort och marginalen till kravet är rätt stor så sker avläsningen mellan
+0.07 och 0.1 sekunder. I en if-sats sparas den högst
+uppmätta tiden i \texttt{highToc}. \ No newline at end of file
diff --git a/Dokument/Teknisk Dokumentation/text/system/04-gas.tex b/Dokument/Teknisk Dokumentation/text/system/04-gas.tex
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/system/04-gas.tex
@@ -0,0 +1 @@
+
diff --git a/Dokument/Teknisk Dokumentation/text/system/05-display.tex b/Dokument/Teknisk Dokumentation/text/system/05-display.tex
new file mode 100644
index 0000000..5b36342
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/system/05-display.tex
@@ -0,0 +1,6 @@
+\subsection{Display}
+
+I varje programcykel skickas värdet på \texttt{car.u} till två stapeldiagram på
+displayen för vardera bil. Se \ref{app:funktioner och filer:display} för information om displayens
+stapeldiagram. Om ett nytt varv inleds skrivs dessutom förra varvnumret och
+varvtiden ut på displayen.