diff options
| author | Gustav Sörnäs <gusso230@student.liu.se> | 2019-12-01 13:33:44 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gusso230@student.liu.se> | 2019-12-01 13:33:44 +0100 |
| commit | bcdea62c386c3afad09659e5d5bcedd7b78fc22e (patch) | |
| tree | 0308dac4d518048f6af3c0871687410d7cef23d3 /Dokument/Teknisk Dokumentation/text | |
| parent | 3e69f622238df7aa1a030a611ed702ab95fd78c6 (diff) | |
| download | tfyy51-bcdea62c386c3afad09659e5d5bcedd7b78fc22e.tar.gz | |
Dela upp root.tex i olika filer och input{}
Diffstat (limited to 'Dokument/Teknisk Dokumentation/text')
9 files changed, 178 insertions, 34 deletions
diff --git a/Dokument/Teknisk Dokumentation/text/01-inledning.tex b/Dokument/Teknisk Dokumentation/text/01-inledning.tex index b6a469a..e3cec75 100644 --- a/Dokument/Teknisk Dokumentation/text/01-inledning.tex +++ b/Dokument/Teknisk Dokumentation/text/01-inledning.tex @@ -1,16 +1,17 @@ \section{Inledning} -\subsection{Bakgrund} -Detta projektet har utförts med hjälp av en bilbana samt flera bilar, givare, spänningsaggregat och en dator inkopplad till givarna på banan. Via datorn har spänning tillförts till bilbanan. Med hjälp av givarna är det möjligt att veta när en bil har passerat en givare. Programvaran utvecklas i Matlab, vilket ligger till grund för styrning av bilarna. +\subsection{Bakgrund} Detta projektet har utförts med hjälp av en bilbana samt +flera bilar, givare, spänningsaggregat och en dator inkopplad till givarna på +banan. Via datorn har spänning tillförts till bilbanan. Med hjälp av givarna är +det möjligt att veta när en bil har passerat en givare. Programvaran utvecklas +i Matlab, vilket ligger till grund för styrning av bilarna. \subsection{Syfte och mål} -Syftet med projektet var att konstruera ett system som kör bilar runt en bilbana -%(Se figur~\ref{fig:track_modell}). -Till bilbanan finns det 9 ``givare'' som när -de passeras skickar en signal till en dator. Genom att mäta tidsskillnaden -mellan signalerna kan man räkna ut hur lång tid det tog för en bil att åka -mellan två givare. Bilbanan är även kopplad till en dator där det finns -möjlighet att justera bilarnas gaspådrag med en spänningstillförsel. Med hjälp -av denna information ska ett system skapas som kör en eller två bilar runt -bilbanan på en inställbar varvtid mellan 12 och 15 sekunder, samt gör att -bilarna åker i mål så nära varandra i tiden som möjligt. + +Syftet med projektet var att konstruera ett system som skulle få bilar att +automatiskt köra runt en bilbana. +%(Se figur~\ref{fig:track_modell}). +Med hjälp av informationen som har kunnat läsas av från givarna så skulle det +skapas ett system som skulle få bilar med olika egenskaper att köra runt på de +två olika banorna på en vald referenstid. Huvudmålet är indelat i flera olika +krav. Se avsnitt 3.2 i kravspecifikationen. diff --git a/Dokument/Teknisk Dokumentation/text/02-metod.tex b/Dokument/Teknisk Dokumentation/text/02-metod.tex deleted file mode 100644 index 8efb181..0000000 --- a/Dokument/Teknisk Dokumentation/text/02-metod.tex +++ /dev/null @@ -1,3 +0,0 @@ -\section{Metod} -Tillvägagångssätt för utvecklign av systemet. Skriv massa positiva saker om git. - diff --git a/Dokument/Teknisk Dokumentation/text/02-system.tex b/Dokument/Teknisk Dokumentation/text/02-system.tex new file mode 100644 index 0000000..379a847 --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/02-system.tex @@ -0,0 +1 @@ +\section{Begrepp och systemöversikt} diff --git a/Dokument/Teknisk Dokumentation/text/03-system.tex b/Dokument/Teknisk Dokumentation/text/03-system.tex deleted file mode 100644 index b39a995..0000000 --- a/Dokument/Teknisk Dokumentation/text/03-system.tex +++ /dev/null @@ -1,12 +0,0 @@ -\section{System} - Nån text - \subsection{Delsystem} - \subsubsection{Bana} - \subsubsection{Display} - \subsection{Funktioner och scripts} - \subsubsection{main} - \subsubsection{get\_postition} - % osv. - -% \input{system/a} -% \input{system/b} diff --git a/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex b/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex new file mode 100644 index 0000000..cefb5e9 --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/03-systembeskrivning.tex @@ -0,0 +1,105 @@ +\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. + +\subsection{Avslut} + +När körningen avslutas så får banan ingen mer spänning och bilarna stannar. +Ifall en bil har kört fler än 2 varv så sparas statistik från körningen. diff --git a/Dokument/Teknisk Dokumentation/text/04-events.tex b/Dokument/Teknisk Dokumentation/text/04-events.tex new file mode 100644 index 0000000..e2395e8 --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/04-events.tex @@ -0,0 +1,42 @@ +\section{Händelser} + +\subsection{Avslutning av körning} + +För att avbryta programmet manuellt kan användaren när som helst trycka på s +eller q 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 de är 80~cm +från målgivaren och programmet avslutas när båda bilarna står stilla. + +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. + +Vid programslut visas statistik om varvtid och genomsnittlig segmenttid på +displayen. Se figurer xx-xx. + +\subsection{Missade givare} + +Programmet gör redan en uppskattning av bilens position (\emph{get\_position}) + och justerar denna vid ny givare (lägg till referens här). +Eftersom \emph{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 +\emph{choose\_position}. Den funktionen jämför positionen beräknad av +\emph{get\_position} och positionen vald av nuvarande givare. + +Vid varje givare kollar \emph{choose\_position} vilken givare som +\emph{get\_position} ligger närmast. Funktionen beräknar skillnaden mellan denna +och den givare som valdes med givardetektionen. Denna kallas \emph{seg\_plus}. +I normala fall är \emph{seg\_plus} = 0 (ingen +missad givare) eller 1 (en missad givare), men den kan också bli högre. Eftersom +programmet inte ska behöva hantera för många givarsignaler ska \emph{seg\_plus} +aldrig kunna bli lägre än 0. Om så ändå är fallet ändras denna till 0. \emph{seg\_plus} +retuneras av funktionen och används sedan för att höja \emph{car.segment} så att +programmet har koll på var bilen är. + +Dessutom behöver den insamlade datan justeras när en eller flera givare har +missats. Annars kommer \emph{car.seg\_times} spara tiden för flera segment som +om det vore ett enda. Lösningen är att skriva över denna tid med 0. Alla +funktioner som använder denna data behöver kolla ifall den är noll eller inte, +om den är noll används den ifrån varvet innan i stället. Om den också är noll +används den från två varv tidigare osv. diff --git a/Dokument/Teknisk Dokumentation/text/04-resultat.tex b/Dokument/Teknisk Dokumentation/text/04-resultat.tex deleted file mode 100644 index ea11986..0000000 --- a/Dokument/Teknisk Dokumentation/text/04-resultat.tex +++ /dev/null @@ -1,3 +0,0 @@ -\section{Resultat} -Det gick åt skogen -Kanske visa lite grafer. diff --git a/Dokument/Teknisk Dokumentation/text/05-diskussion.tex b/Dokument/Teknisk Dokumentation/text/05-diskussion.tex deleted file mode 100644 index f26ef6e..0000000 --- a/Dokument/Teknisk Dokumentation/text/05-diskussion.tex +++ /dev/null @@ -1,4 +0,0 @@ -\section{Diskussion} -Undrar varför -\subsection{Problem med hårdvaran} -Här skyller vi ifrån oss. diff --git a/Dokument/Teknisk Dokumentation/text/05-end.tex b/Dokument/Teknisk Dokumentation/text/05-end.tex new file mode 100644 index 0000000..59708fd --- /dev/null +++ b/Dokument/Teknisk Dokumentation/text/05-end.tex @@ -0,0 +1,17 @@ +\section{Programslut} + +display\_post\_race\_graphs(seg\_times1, seg\_times2, lap\_times1, lap\_times2, +ref\_time) hanterar knapptryck för att byta mellan de två vyerna. Varje 0,4 +sekunder skickas ett kommando till displayen som kopierar det interna minnet +till minnet som delas med styrdatorn. Minnet som delas med styrdatorn läses av +och eventuella knapptryck hanteras genom anrop till antingen +draw\_lap\_graph(...) eller draw\_segment\_graph(...). + +draw\_lap\_graph(lap\_times1, lap\_times2, ref\_time) ritar varvtider för +ena bilen i taget och skriver ut medelvärde och standardavvikelse, se figur xx. + +Hur mycket ska jag skriva om implementationen här? + +draw\_segment\_graph(seg\_times1, seg\_times2) + +Samma fråga här som raden ovanför. |
