diff options
| author | Gustav Sörnäs <gusso230@student.liu.se> | 2019-12-01 15:09:11 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gusso230@student.liu.se> | 2019-12-01 15:09:11 +0100 |
| commit | 3ea2a3850e044fec6fa01447489b43d56a22d79f (patch) | |
| tree | 9cf91215e01b5cb37efb089bba3bce0ba6a91920 /Dokument/Teknisk Dokumentation | |
| parent | 950ca171c77ee8958950a560663e41fbf100619e (diff) | |
| download | tfyy51-3ea2a3850e044fec6fa01447489b43d56a22d79f.tar.gz | |
Flytta systembeskrivning till egna filer
Diffstat (limited to 'Dokument/Teknisk Dokumentation')
6 files changed, 101 insertions, 98 deletions
diff --git a/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex b/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex index cefb5e9..c0a4007 100644 --- a/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex +++ b/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex @@ -1,103 +1,10 @@ \section{Systembeskrivning} -\subsection{Innan start} - -Vid uppstart ritas knappar ut på displayenm 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. Varje 0,x sekunder skickas ett kommando till -displayen som skickar information om alla knapptryck som skett sedan minnet -efterfrågades senast. Händelserna bearbetas i den kronologiska ordning de -trycktes i och ändrar på variabler enligt de knapptryck som skett. - -\subsection{Uppstart} - -Vid automatisk körning körs funktionen \emph{do\_boot} vars syfte är att få fram en -initierande konstant (\emph{car\_constant}) och spänningspådrag för den bil som står på banan. Då bilen är -positionerad framför målbågen höjer funktionen konstanten kontinuerligt i ett -tidsintervall på 0.7 sekunder. När väl konstanten är tillräckligt stor för att -bilen ska kunna rulla och passera målbågen så dämpas höjningen av konstanten och förändringen sker med en lägre frekvens. Vid passering av den andra givaren så slutar -funktionen tillfälligt att förändra konstanten och låter bilen, med den -tilldelade konstanten, åka igenom det tredje segmentet för att få en uträknad tid. Med -tiden det tagit för bilen att ta sig igenom segmentet räknar funktionen ut -vilken förväntad varvtid bilen skulle få med just den konstanten den hade i -segmentet. (beskriva forecastsuträkningen?) Det sista funktionen gör är att -återigen justera konstanten. Om den förväntade varvtiden är större än 15 -sekunder, som är referensvarvtiden för första varvet, så ökar konstanten och är -den förväntade varvtiden mindre än 15 sekunder så sänks konstanten. - -\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}. - -\subsection{Gaspådrag} - -Sedan beräknas det gaspådrag som skall sättas till banan. Detta görs i två -funktioner, \emph{get\_new\_v}) och \emph{get\_new\_u}. - -I \emph{get\_new\_v} används bilens nuvarande postition (\emph{car.postition}) -och hastihetskartan (\emph{car.map}). I \emph{car.map} finns en -hastighetsparameter för varje \emph{car.position}, denna retuneras av funktionen -och sparas i \emph{car.v}. - -I \emph{get\_new\_u} används denna hastighetsparameter tillsammans med -\emph{car.constant}. Dessa multipliceras och deras produkt retuneras och sparas -i \emph{car.u}. - -\subsubsection{Governor} - -Sedan, om bootstrap är avslutad, körs den del av koden vars ända uppgift är att -anpassa \emph{car.constant}. - -Detta görs med funktionen \emph{do\_gov}. Först görs en uppskattning av varvtiden utifrån hur lång tid varvet har tagit än -så länge. Om bilen är inne på sitt första varv görs uppskattningen endast -utifrån förra segmentet \emph{car.forcasts\_naive} och om första varvet är -avslutat använder den i stället \emph{car.forcasts} som kollar på hela varvtiden -fram till och med nu. Detta görs efter segment 4 och 8. Desutom används den -faktiska varvtiden när bilen passerar mål (från varv 2 och frammåt). - -Sedan jämförs den uppskattade varvtiden med referenstiden \emph{car.ref\_time}. -Om den uppskattade varviden är högre än referenstiden höjs \emph{car.constant} -och om den är lägre sänks \emph{car.constant}. - -\subsubsection{Display} - -I varje programcykel skickas nuvarande värdet på u till två stapeldiagram på -displayen för vardera bil. Se appendix N för mer information om displayens -stapeldiagram. Om ett nytt varv har inletts skrivs dessutom varvnumret och -varvtiden ut på displayen. +\input{text/system/01-innan-start} +\input{text/system/02-uppstart} +\input{text/system/03-korning} +\input{text/system/04-gas} +\input{text/system/05-display} \subsection{Avslut} 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..d131edf --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/system/01-innan-start.tex @@ -0,0 +1,10 @@ +\subsection{Innan start} + +Vid uppstart ritas knappar ut på displayenm 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. Varje 0,x sekunder skickas ett kommando till +displayen som skickar information om alla knapptryck som skett sedan minnet +efterfrågades senast. Händelserna bearbetas i den kronologiska ordning de +trycktes i och ändrar på variabler enligt de knapptryck som skett. 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..821c316 --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/system/02-uppstart.tex @@ -0,0 +1,17 @@ +\subsection{Uppstart} + +Vid automatisk körning körs funktionen \emph{do\_boot} vars syfte är att få fram +en initierande konstant (\emph{car\_constant}) och spänningspådrag för den bil +som står på banan. Då bilen är positionerad framför målbågen höjer funktionen +konstanten kontinuerligt i ett tidsintervall på 0.7 sekunder. När väl konstanten +är tillräckligt stor för att bilen ska kunna rulla och passera målbågen så +dämpas höjningen av konstanten och förändringen sker med en lägre frekvens. Vid +passering av den andra givaren så slutar funktionen tillfälligt att förändra +konstanten och låter bilen, med den tilldelade konstanten, åka igenom det tredje +segmentet för att få en uträknad tid. Med tiden det tagit för bilen att ta sig +igenom segmentet räknar funktionen ut vilken förväntad varvtid bilen skulle få +med just den konstanten den hade i segmentet. (beskriva forecastsuträkningen?) +Det sista funktionen gör är att återigen justera konstanten. Om den förväntade +varvtiden är större än 15 sekunder, som är referensvarvtiden för första varvet, +så ökar konstanten och är den förväntade varvtiden mindre än 15 sekunder så +sänks konstanten. 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..2dc4ef3 --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/system/03-korning.tex @@ -0,0 +1,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}. 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..d303456 --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/system/04-gas.tex @@ -0,0 +1,29 @@ +\subsection{Gaspådrag} + +Sedan beräknas det gaspådrag som skall sättas till banan. Detta görs i två +funktioner, \emph{get\_new\_v}) och \emph{get\_new\_u}. + +I \emph{get\_new\_v} används bilens nuvarande postition (\emph{car.postition}) +och hastihetskartan (\emph{car.map}). I \emph{car.map} finns en +hastighetsparameter för varje \emph{car.position}, denna retuneras av funktionen +och sparas i \emph{car.v}. + +I \emph{get\_new\_u} används denna hastighetsparameter tillsammans med +\emph{car.constant}. Dessa multipliceras och deras produkt retuneras och sparas +i \emph{car.u}. + +\subsubsection{Governor} + +Sedan, om bootstrap är avslutad, körs den del av koden vars ända uppgift är att +anpassa \emph{car.constant}. + +Detta görs med funktionen \emph{do\_gov}. Först görs en uppskattning av varvtiden utifrån hur lång tid varvet har tagit än +så länge. Om bilen är inne på sitt första varv görs uppskattningen endast +utifrån förra segmentet \emph{car.forcasts\_naive} och om första varvet är +avslutat använder den i stället \emph{car.forcasts} som kollar på hela varvtiden +fram till och med nu. Detta görs efter segment 4 och 8. Desutom används den +faktiska varvtiden när bilen passerar mål (från varv 2 och frammåt). + +Sedan jämförs den uppskattade varvtiden med referenstiden \emph{car.ref\_time}. +Om den uppskattade varviden är högre än referenstiden höjs \emph{car.constant} +och om den är lägre sänks \emph{car.constant}. 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..f1baef2 --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/system/05-display.tex @@ -0,0 +1,6 @@ +\subsubsection{Display} + +I varje programcykel skickas nuvarande värdet på u till två stapeldiagram på +displayen för vardera bil. Se appendix N för mer information om displayens +stapeldiagram. Om ett nytt varv har inletts skrivs dessutom varvnumret och +varvtiden ut på displayen. |
