summaryrefslogtreecommitdiffstats
path: root/Dokument
diff options
context:
space:
mode:
authorGustav Sörnäs <gusso230@student.liu.se>2019-12-03 13:51:58 +0100
committerGustav Sörnäs <gusso230@student.liu.se>2019-12-03 15:53:19 +0100
commit96f47b72345b4c9019f70fd64a369485c2e1a64a (patch)
treee5ef0f701645fc14c997419dd900535339efa63e /Dokument
parent5b58180935b12adf72fd815f8d233f9ae4fe6e3a (diff)
downloadtfyy51-96f47b72345b4c9019f70fd64a369485c2e1a64a.tar.gz
Mer tornardoarbete
Diffstat (limited to 'Dokument')
-rw-r--r--Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex95
-rw-r--r--Dokument/Teknisk Dokumentation/appendix/02-funktion.tex44
-rw-r--r--Dokument/Teknisk Dokumentation/appendix/03-material.tex18
-rw-r--r--Dokument/Teknisk Dokumentation/text/02-system.tex12
-rw-r--r--Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex14
-rw-r--r--Dokument/Teknisk Dokumentation/text/04-events.tex31
-rw-r--r--Dokument/Teknisk Dokumentation/text/06-resultat.tex4
-rw-r--r--Dokument/Teknisk Dokumentation/text/system/05-display.tex2
8 files changed, 147 insertions, 73 deletions
diff --git a/Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex b/Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex
index 668a1c3..de4e580 100644
--- a/Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex
+++ b/Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex
@@ -1,24 +1,85 @@
\section{Handhavande}
\label{app:handhavande}
-Starta Matlab 2015b. Observera att användaren måste använda datorn som finns
-inne i bilbanerummet och som är inkopplade till bilbanan. Inne i Matlab ska användaren navigera sig till ''Kod'' mappen (som finns tillgängliga för alla i projektet). Börja med att högerklicka på mappen ''Kod'' och välj alternativet ''Add To Path''. Klicka på ''Select Folders And Subfolders'' som dyker upp när musen pekar på ''Add To Path''. Därefter expandera bilbana mappen följt av yc4 mappen. Öppna sedan main.m och starta systemet genom att klicka på Run i Editorn i Matlab.
-Därefter välj vilka banor som ska köras via den externa touch displayen. Justera också referenstiden genom att klicka på plusstecknet eller minustecknet (notera att referenstiden ändras med 0.5 s intervall). Kryssa även i om någon av banorna ska köras manuellt. Starta genom att trycka på knappen nere i det högra hörnet på displayen. Observera att bilarna måste placeras några decimeter innan målgivaren före start.
+Ladda ner och packa upp projektets kod till en mapp på datorn som är inkopplad i
+bilbanan. Starta Matlab (2015b), navigera till mappen och öppna den.
+Navigera till mappen \texttt{Kod} och lägg till alla dess undermappar till Matlabs
+sökväg genom att högerklicka på dem och välja ''Add To Path'' \textrightarrow
+''Select Folders and Subfolders''. Öppna filen \texttt{main.m} men se till att
+Matlabs utforskare i vänstermenyn står kvar i mappen \texttt{Kod}. Klicka på
+den gröna play-knappen \texttt{Run}.
-När programmet ska avslutas klickar användaren i kommentar fönstret i Matlab och
-klickar på q om bilen ska stanna direkt. Om användaren istället vill att
-bilen/bilarna ska stanna precis innan målgivaren klickar användaren på s
-(observera att detta fungerar endast efter varv ett).
+% Starta Matlab 2015b. Observera att användaren måste använda datorn som finns
+% inne i bilbanerummet och som är inkopplade till bilbanan. Inne i Matlab ska
+% användaren navigera sig till ''Kod'' mappen (som finns tillgängliga för alla i
+% projektet). Börja med att högerklicka på mappen ''Kod'' och välj alternativet
+% ''Add To Path''. Klicka på ''Select Folders And Subfolders'' som dyker upp när
+% musen pekar på ''Add To Path''. Därefter expandera bilbana mappen följt av yc4
+% mappen. Öppna sedan main.m och starta systemet genom att klicka på Run i
+% Editorn i Matlab.
-När programmet avslutas finns möjligheterna att se varvtiden/varvtiderna,
-segmentstiden/segmentstiderna samt att avsluta. Detta väljs utifrån de tre
-knapparna längst ner på displayen. Dessa knappar är Varv för att se varvtid,
-Segment för att se segmentstider. Samt knappen Avsluta.
+Ställ en eller två bilar på valfri bana mellan 10 och 20 centimeter framför
+målgivaren. Den exakta positionen är inte så noga, se bara till att bilen inte
+fastnar mellan två bandelar eller står precis under själva givaren.
-Om knappen Varv väljs kommer information såsom ''target'' vilket är vald varvtid.
-“mean” som är genomsnittlig varvtid och “stdev” är standardavvikelsen. För att
-se varvtiden för den andra banan klicka på knappen uppe i högra hörnet.
+Välj sedan via den externa touchdisplayen vilka banor som ska vara aktiva, om de
+ska köras i manuellt eller autonomnt läge och vilken referenstid som önskas.
+Att välja banor sker genom att aktivera eller avaktivera de olika knapparna och
+referenstiden ändras med steg om 0,5 sekunder med knapparna märkta \texttt{+}
+och \texttt{-}. Starta sedan banan genom att trycka på \texttt{S}.
-Om programmet kraschar öppna main.m. Därefter skriv in
-ctrl och enter i avgränsningen som heter ''\%\% END OF RACE'' som finns i slutet av
-koden main.m.
+% Därefter välj vilka banor som ska köras via den externa touch displayen.
+% Justera också referenstiden genom att klicka på plusstecknet eller
+% minustecknet (notera att referenstiden ändras med 0.5 s intervall). Kryssa
+% även i om någon av banorna ska köras manuellt. Starta genom att trycka på
+% knappen nere i det högra hörnet på displayen. Observera att bilarna måste
+% placeras några decimeter innan målgivaren före start.
+
+För att avsluta, tryck antingen på \texttt{q} eller \texttt{s} på datorns
+tangentbord. Om \texttt{q} trycks ner stannar programmet direkt och om
+\texttt{s} trycks ner stannar systemet de aktiva bilarna var för sig när de
+befinner sig strax innan målgivaren. Observera att att stoppa systemet med
+\texttt{s} inte rekommenderas om minst en bil körs manuellt.
+
+% När programmet ska avslutas klickar användaren i kommentar fönstret i Matlab
+% och klickar på q om bilen ska stanna direkt. Om användaren istället vill att
+% bilen/bilarna ska stanna precis innan målgivaren klickar användaren på s
+% (observera att detta fungerar endast efter varv ett).
+
+När körningen avslutats går det att se varvtider och genomsnittliga
+segmentstider på touchdisplayen. Tryck på \texttt{Varv} för att se varvtider för
+en av bilarna. Om två bilar kördes går den andra bilens varvtid att se genom att
+trycka på \texttt{Byt bil}. Oavsett vilken bil som visas syns vald referenstid,
+genomsnittlig varvtid och standardavvikelse för båda bilarna under grafen. För
+att se genomsnittliga segmentstider, tryck på \texttt{Segment}. Om båda bilarna
+var aktiva visas de två bilarnas värden sida vid sida per segment där bana 1 är
+till vänster och bana 2 är till höger. Om någon av bilarna kördes manuellt
+kommer statistik visas för den bilen också.
+
+% När programmet avslutas finns möjligheterna att se varvtiden/varvtiderna,
+% segmentstiden/segmentstiderna samt att avsluta. Detta väljs utifrån de tre
+% knapparna längst ner på displayen. Dessa knappar är Varv för att se varvtid,
+% Segment för att se segmentstider. Samt knappen Avsluta.
+%
+% Om knappen Varv väljs kommer information såsom ''target'' vilket är vald varvtid.
+% “mean” som är genomsnittlig varvtid och “stdev” är standardavvikelsen. För att
+% se varvtiden för den andra banan klicka på knappen uppe i högra hörnet.
+
+Om olyckan är framme kan programmet krascha. Vanligtvis räcker det med att
+tvinga körningen av programmet att stanna och att återställa koden som styr
+bilbanan. Detta görs genom att först trycka \texttt{CTRL+C} i Matlab och sedan
+skriva följande rader i Matlabs kommandorad.
+
+\begin{verbatim}
+terminate(1);
+terminate(2);
+matlabclient(3);
+\end{verbatim}
+
+Om systemet fortfarande inte fungerar som det ska kan det hjälpa att starta båda
+banorna i manuellt läge och köra något varv på vardera bana för att
+''nollställa'' givarna och systemet. Om systemet fortfarande inte fungerar
+rekommenderas användaren starta om datorn.
+
+% Om programmet kraschar öppna main.m. Därefter skriv in ctrl och enter i
+% avgränsningen som heter ''\%\% END OF RACE'' som finns i slutet av koden main.m.
diff --git a/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex b/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex
index b6738ad..eaca1f0 100644
--- a/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex
+++ b/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex
@@ -3,10 +3,10 @@
\subsection{System}
\label{app:funktioner och filer:system}
-\texttt{choose\_position(position, segment, track, track\_len)} - Körs när en
+\texttt{choose\_position(position, segment, track, track\_len)} - Anropas när en
givare passerats. Gör en bedömning om en givare (eller flera) har missats genom
att kontrollera vilken givare som är närmast den nuvarande uppskattade position
-och kompenserar om en givare bedöms ha missats. Se \ref{sec:missade givare}
+och kompenserar om en givare bedöms ha missats. Se del~\ref{sec:missade givare}
\texttt{clamp(n, m, M)} - En hjälpfunktion som returnerar $n$ om $m < n < M$,
$m$ om $n < m$ och $M$ om $n > M$.
@@ -15,21 +15,27 @@ $m$ om $n < m$ och $M$ om $n > M$.
om position ligger utanför det nuvarande segmentet.
\texttt{do\_boot(car, boot)} - Anropas en gång per programcykel i den så kallade
-boostrap-fasen. Se \ref{sec:systembeskrivning:uppstart} för information.
+boostrap-fasen. Se del~\ref{sec:systembeskrivning:uppstart}.
-\texttt{do\_car(car, t, displa\_data, boot)} - Anropas en gång per programcykel och innehåller ''Inhämtning av data'' och ''Behandling och sparande av data'' i figur \ref{fig:flow}.
+\texttt{do\_car(car, t, display\_data, boot)} - Anropas en gång per programcykel
+och innehåller ''Inhämtning av data'' och ''Behandling och sparande av data'' i
+figur \ref{fig:flow}. Se del~\ref{sec:systembeskrivning:korning}.
\texttt{do\_gov(car)} - Anropas varje gång en givare passerats. Vid målgivaren
jämförs referenstiden och den förra varvtiden och car.constant anpassas efter
differensen mellan dem. Om differensen är högre ändras car.constant mer, och
vice versa om differensen är låg. Vid givare 5 och 8 jämförs referenstiden och
-en uppskattning av hur lång tid det nuvarande varvet troligen kommer ta. Se
-\ref{sec:systembeskrivning:governor} för mer information.
+en uppskattning av hur lång tid det nuvarande varvet troligen kommer ta. Se del~
+\ref{sec:systembeskrivning:governor}.
\texttt{fit\_percents(percents, lap\_time, seg\_times)} - Anropas vid varje nytt
varv. Räknar ut den procentuella tiden varje segment tog det förra varvet och
sparar medelvärdet mellan den förra procentsatsen och den nya, uträknade
+<<<<<<< HEAD
procentsatsen. Procentsatsen normeras sedan så summan är 1 (100 procent).
+=======
+procentsatsen. Procentsatsen normeras sedan så summan är 1 (100\%).
+>>>>>>> Mer tornardoarbete
\texttt{format\_seg\_times(car)} - Anropas när körningen avslutas. Returnerar
den genomsnittliga tiden för varje segment.
@@ -51,27 +57,33 @@ programcykel. Räknar ut hur långt bilen rört sig sedan senaste programcykeln.
% BORT
\texttt{get\_time\_as\_string(millis)} - Omvandlar en mängd millisekunder till
+<<<<<<< HEAD
formatet ''mm:ss.s''. Till exempel omvandlas 1250 ms till "00:01.'' och 11240 till
"00:11.2".
+=======
+formatet "mm:ss.s". Till exempel omvandlas 1250 millisekunder till "00:01.3" och
+11240 millisekunder till "00:11.2".
+>>>>>>> Mer tornardoarbete
\texttt{main.m} - Huvudskriptet som startar hela systemet. Det script som
programmet ligger i. I main.m ligger alla funktioner. Det är denna fil som ska
-startas vid systemuppstart, se \ref{app:handhavande}
+startas vid systemuppstart, se appendix~\ref{app:handhavande}
+
\subsection{Display}
\label{app:funktioner och filer:display}
\texttt{bar\_graph(direction, no, x1, x2, y1, y2, start\_value, end\_value,
-type, pattern)} - Skapar ett stapeldiagram med ett hörn i \texttt{(x1, y1)} och ett
-diagonellt hörn i \texttt{(x2, y2)}. \texttt{direction} är en av 'O', 'U', 'L' och 'R' och
-bestämmer åt vilket håll "upp" är på stapeln. 'O' står för upp ('oben' på
-tyska), 'U' står för ner ('unter'), 'L' står för vänster ('links') och 'R' står
-för höger ('rechts'). Värdet stapeldiagrammet ska visa specifieras med
-\texttt{update\_bar\_graph}. \texttt{start\_value} och \texttt{end\_value}
+type, pattern)} - Skapar ett stapeldiagram med ett hörn i \texttt{(x1, y1)} och
+ett diagonellt hörn i \texttt{(x2, y2)}. \texttt{direction} är en av 'O', 'U',
+'L' och 'R' och bestämmer åt vilket håll "upp" är på stapeln. 'O' står för upp
+('oben' på tyska), 'U' står för ner ('unter'), 'L' står för vänster ('links')
+och 'R' står för höger ('rechts'). Värdet stapeldiagrammet ska visa specifieras
+med \texttt{update\_bar\_graph}. \texttt{start\_value} och \texttt{end\_value}
bestämmer vad som ska vara noll- respektive maxvärde för stapeldiagrammet.
\texttt{no} är stapeldiagrammets nummer och behöver specifieras när
-stapeldiagrammets värde ska uppdateras. \texttt{type} sätts till 0 för en enkel stapel
-och 1 för en stapel inuti en ram.
+stapeldiagrammets värde ska uppdateras. \texttt{type} sätts till 0 för en enkel
+stapel och 1 för en stapel inuti en ram.
\texttt{clear\_display()} - Rensar displayen.
@@ -115,4 +127,4 @@ displayens interna minne och om knappen avaktiveras läggs \texttt{up\_code} i
displayens interna minne.
\texttt{update\_bar\_graph(num, val)} - Skickar värdet \texttt{val} till
-stapeldiagram *num*.
+stapeldiagram \texttt{num}.
diff --git a/Dokument/Teknisk Dokumentation/appendix/03-material.tex b/Dokument/Teknisk Dokumentation/appendix/03-material.tex
index cd266f6..f74ebcf 100644
--- a/Dokument/Teknisk Dokumentation/appendix/03-material.tex
+++ b/Dokument/Teknisk Dokumentation/appendix/03-material.tex
@@ -1,11 +1,17 @@
\section{Material}
-Projektgruppen har av beställaren tillhandahållits ett lab med följande utrustning:
+Projektgruppen har av beställaren tillhandahållits en lokal med nedanstående
+utrustning.
\begin{itemize}
- \item En bilbana med två banor som är utrustad med givare vars funktion är att detektera passerade bilar.
- \item Två datorer.
- \item En display med touchfunktionallitet.
- \item Ett antal bilar.
- \item Handkontroller för manuellkörning av bilarna.
+ \item En strax under 20 meter lång bilbana med två banor, utrustad med givare som
+ skickar en signal när en en bil passerar under dem.
+ \item Två handkontroller för manuell körning av bilbanan.
+ \item Två datorer, den ena inkopplad till banan som kan styra spänningen i de
+ två banorna.
+ \item Kod skriven i Matlab som kan styra vilken spänning som skickas till
+ banan.
+ \item En display med touchfunktionalitet (Electronic Assembly eDIP320J-8LWTP).
+ \item Kod skriven i Matlab som kan tvåvägskommunicera med displayen.
+ \item 13 bilar.
\end{itemize}
diff --git a/Dokument/Teknisk Dokumentation/text/02-system.tex b/Dokument/Teknisk Dokumentation/text/02-system.tex
index e1c2107..4856546 100644
--- a/Dokument/Teknisk Dokumentation/text/02-system.tex
+++ b/Dokument/Teknisk Dokumentation/text/02-system.tex
@@ -6,11 +6,13 @@ dem. En av givarna kallas målgivaren vars signal går att skilja från övriga
givare och således passar som en markör när ett nytt varv inleds. Givarna
delar in banan i nio delar, kallade segment. Dessa segment har i sin tur delats
in i totalt 80 delsegment där ett delsegment motsvarar en fysisk bit av banan.
-För vardera bana och delsegment har ett värde på önskad spänningstillförsel till
-banan tagits fram. Detta värde varierar dels eftersom bilarna vid olika delar
-av banan behöver olika mycket spänningstillförsel för samma hastighet och dels
-eftersom bilarna vid vissa delar av banan inte kan åka lika snabbt som vid andra
-delar av banan för att inte riskera att åka av.
+För vardera bana och delsegment har ett värde på en \emph{spänningsparameter}
+tagits fram. Detta värde varierar dels eftersom bilarna vid olika delar av banan
+behöver olika mycket spänningstillförsel för samma hastighet och dels eftersom
+bilarna vid vissa delar av banan inte kan åka lika snabbt som vid andra delar av
+banan för att inte riskera att åka av. En spänningsparameter är i det här fallet
+ett värde som i slutändan kommer multipliceras med en parameter för bilen för
+att ge en slutlig signal att skicka till banan.
Centralt för systemet är den karta som beskrivs ovan samt en
modifierare som beror på köregenskaperna för den nuvarande bilen. Det
diff --git a/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex b/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex
index b16a57d..ac715e5 100644
--- a/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex
+++ b/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex
@@ -21,20 +21,20 @@ Systemet är indelat i olika delsystem efter huvudsaklig funktionalitet enligt f
\subsection{Avslut}
-För att avbryta programmet manuellt kan användaren när som helst trycka på q
-eller s på datorns tangentbord. Trycker användaren på q avslutas programmet
-direkt. Trycker användaren på s stoppas varje bil var för sig och fordonet
-stoppas när programmet uppskattar att bilen befinner sig 80~cm innan målgivaren.
-Därefter avslutas programmet när båda bilarna stannat.
-
Om det har gått mer än nio sekunder sedan en givare passerades pausas programmet
och användaren informeras på styrdatorn att en bil misstänkts ha fastnat eller
åkt av banan.
+För att avbryta programmet manuellt kan användaren när som helst trycka på q
+eller s på datorns tangentbord. Trycker användaren på q avslutas programmet
+direkt. Trycker användaren på s stoppas varje bil var för sig när den uppskattas
+befinna sig 80~cm framför målgivaren. Programmet avslutas när båda bilarna
+stoppats.
+
När körningen avslutas slutar systemet skicka spänning till banan.
Om en bil kört fler än två varv sparas statistik från körningen i en
\texttt{.mat}-fil med nuvarande datum och tid som filnamn.
Vid programslut visas statistik om varvtid och genomsnittlig segmenttid på
-displayen. Se figurer xx-xx.
+displayen (figurer xx och xx).
diff --git a/Dokument/Teknisk Dokumentation/text/04-events.tex b/Dokument/Teknisk Dokumentation/text/04-events.tex
index e302ae3..3a5f940 100644
--- a/Dokument/Teknisk Dokumentation/text/04-events.tex
+++ b/Dokument/Teknisk Dokumentation/text/04-events.tex
@@ -1,24 +1,17 @@
\subsection{Missade givare}
\label{sec:missade givare}
-Programmet gör redan en uppskattning av bilens position (\texttt{get\_position()})
- och justerar denna vid ny givare, se \ref{sec:system:korning:position}.
-Eftersom \texttt{get\_new\_v()} utgår ifrån denna uppskattning, behövs ingen
-anpassning göras ifall en givare inte ger utslag. Däremot måste det
-kompenseras nästa gång en givare detekteras. Detta görs med funktionen
-\texttt{choose\_position()}.
+En givare kan ibland inte skicka en signal när en bil åker under den. Vid varje
+givarsignal jämför därför systemet bilens uppskatta position och positionen den
+''borde'' vara vid om givarna skickar korrekta signaler. Konkret kontrolleras om
+givaren som är närmast bilens position på banan är samma som systemet tror bilen
+nyss åkte genom. Om så inte är fallet antas en (eller flera) givare ha missats
+och bilens position anpassas.
-Vid varje givare kontrollerar \texttt{choose\_position()} vilken givare
-\texttt{car.position} ligger närmast genom att jämföra den \emph{beräknade} positionen med de kända positionerna varje givare befinner sig på.
-Funktionen beräknar skillnaden i antalet givare mellan denna och den givare som
-valdes med givardetektionen. I normala fall är skillnaden 0 (ingen missad givare) eller 1 (om en
-givare missats), men systemet kan hantera att flera givare i rad missas.
-(Systemet kan inte hantera en givare som skickar dubbla signaler). Om
-\texttt{choose\_position()} bedömer att en givare missats flyttas
-\texttt{car.segment} till den givare som matchar.
+Om en givare missats saknas information om hur lång tid de överhoppade segmenten
+tog. Systemet kan inte göra en bedömning om bilens hastighet mellan två givare
+utan vetskap om hur lång tid det tog att åka mellan dem så sparandet av tid
+hoppas helt enkelt över. För de delar av systemet som räknar på förra varvets
+segmentstid används då segmentstiden från varvet innan (eller varvet innan om
+den också missades och så vidare).
-Den insamlade datan behöver justeras när en eller flera givare har missats. Om
-datan inte justeras kommer \texttt{car.seg\_times} spara tiden för flera segment
-som om det vore ett enda. För att undvika detta sätts både den nuvarande och den
-förra segmentstiden till 0. Om en annan del av systemet vill räkna på
-segmentstiderna ansvarar den själv för att hoppa över segmentstider som är noll.
diff --git a/Dokument/Teknisk Dokumentation/text/06-resultat.tex b/Dokument/Teknisk Dokumentation/text/06-resultat.tex
index 6fd34df..35f7f48 100644
--- a/Dokument/Teknisk Dokumentation/text/06-resultat.tex
+++ b/Dokument/Teknisk Dokumentation/text/06-resultat.tex
@@ -22,8 +22,8 @@ maximal tillåten varvtid (14,5~sekunder).
Ingen av dessa körningar uppfyllde kraven på prestanda, alltså krav 20, 21 och
23.
-Givarna lästes av mer än 10 gånger per sekund. Se \ref{sec:system:korning:cykel} för information om hur
-detta mäts.
+Givarna lästes av mer än 10 gånger per sekund under båda körningarna. Se
+\ref{sec:system:korning:cykel} för information om hur detta mäts.
\begin{figure}
\centering
diff --git a/Dokument/Teknisk Dokumentation/text/system/05-display.tex b/Dokument/Teknisk Dokumentation/text/system/05-display.tex
index 85fa026..5611c31 100644
--- a/Dokument/Teknisk Dokumentation/text/system/05-display.tex
+++ b/Dokument/Teknisk Dokumentation/text/system/05-display.tex
@@ -2,7 +2,7 @@
I varje programcykel skickas dessutom värdet på vardera bils spänningspålägg
till två stapeldiagram på den ansluta displayen. Om ett nytt varv inleds skrivs
-dessutom förra varvnumret och varvtiden ut på displayen. Se del~
+dessutom förra varvnumret och varvtiden ut på displayen. Se appendix, del~
\ref{app:funktioner och filer:display} för information om hur kommunikationen
till displayen implementerades.