summaryrefslogtreecommitdiffstats
path: root/Dokument/Teknisk Dokumentation/text/system/03-korning.tex
blob: 2dc4ef3a592c8d775c35d1530075496919958da5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
\subsection{Körning}

Huvudloopen körs åtminstonde 10 gånger i sekunden. Den beräknar först var bilen
befinner sig, sedan väljer den hur snabbt bilen ska köra och slutligen sätts den
hastigheten till banan.

Den viktigaste delen av huvudloopen är funktionen \emph{do\_car}. Funktionen
beräknar de ändrinar som skall göras i matlab-structen \emph{car} och är indelad
i många delar.

\subsubsection{Position}

Det finns två fall när positionen ska beräknas. När en givare har passerats och
när en givare inte har passerats. Under första varvet görs endast det första och
från varv 2 och frammåt görs båda paralellt. 

Om en ny givare har passerats, \emph{car.new\_check\_point == true}, ökar
programmet nuvarande segment (\emph{car.segment}) med 1. \emph{car.segment}, som
alltid ligger mellan 1 och 9, används som index för att välja position i en
lista (\emph{car.pos\_at}). 

Om ingen givare har passerars och bilen har avslutat första varvet, alltså
oftast, görs lite mer avancerade beräkningar. För att beräkna positionen
använder proggrammet först en funktion \emph{get\_aprox\_v}. Denna utgår ifrån
förra varvets segmentstider (\emph{car.seg\_times}) och segmentslängder
(\emph{car.seg\_len}) och beräknar med v = s/t medelhastigheten för nuvarnade
segment, men förra varvet. Denna antas vara ungefär samma sak som nuvarande
hastiget. 

Sedan beräknas den fakiska positionen, i meter från målgivaren, med funktionen
\emph{get\_position}. Den använder den ungefärliga hastigheten beräknad av
\emph{aprox\_v} och tiden sedan denna beräkning gjordes senast (en programcykel)
och beräknar med s = v * t den sträcka som bilen har åkt. Sedan adderas denna
med förra kända postionen och retuneras i \emph{car.position}.