summaryrefslogtreecommitdiffstats
path: root/Dokument/Teknisk Dokumentation/text/04-events.tex
blob: 6f7271369fdae19cfec138800939ae70bba92cb2 (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
\section{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, kommer ingen
anpassning behöva 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()}. Den funktionen jämför positionen beräknad av 
\texttt{get\_position()} och positionen vald av nuvarande givare. 

Vid varje givare kontrollerar \texttt{choose\_position()} vilken givare
\texttt{car.position} ligger närmast genom att jämföra den nuvarande
(uppskattade) 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 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.

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.