summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Dokument/Teknisk Dokumentation/Figures/The_Earth_seen_from_Apollo_17.jpgbin0 -> 1225195 bytes
-rw-r--r--Dokument/Teknisk Dokumentation/Figures/logo.jpgbin0 -> 67750 bytes
-rw-r--r--Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex0
-rw-r--r--Dokument/Teknisk Dokumentation/appendix/02-funktion.tex0
-rw-r--r--Dokument/Teknisk Dokumentation/appendix/03-testprocedur.tex0
-rw-r--r--Dokument/Teknisk Dokumentation/appendix/04-testprotokoll.tex0
-rw-r--r--Dokument/Teknisk Dokumentation/appendix/05-kravbeskrivning.tex0
-rw-r--r--Dokument/Teknisk Dokumentation/lips-no_customer.cls262
-rw-r--r--Dokument/Teknisk Dokumentation/root.tex97
-rw-r--r--Dokument/Teknisk Dokumentation/text/00-sammanfattning.tex3
-rw-r--r--Dokument/Teknisk Dokumentation/text/01-bakgrund.tex14
-rw-r--r--Dokument/Teknisk Dokumentation/text/02-metod.tex3
-rw-r--r--Dokument/Teknisk Dokumentation/text/02a-system.tex12
-rw-r--r--Dokument/Teknisk Dokumentation/text/03-resultat.tex3
-rw-r--r--Dokument/Teknisk Dokumentation/text/04-diskussion.tex4
-rw-r--r--Dokument/Teknisk Dokumentation/text/system/.keep0
-rw-r--r--Dokument/Tidsplan/05Tidplan01.xlsxbin0 -> 31141 bytes
-rw-r--r--Kod/bilbana/files/Bana1.matbin621 -> 1216 bytes
-rw-r--r--Kod/bilbana/files/Bana2.matbin623 -> 1207 bytes
-rw-r--r--Kod/bilbana/yc4/choose_position.m28
-rw-r--r--Kod/bilbana/yc4/debug.m5
-rw-r--r--Kod/bilbana/yc4/detect_missed.m8
-rw-r--r--Kod/bilbana/yc4/do_boot.m62
-rw-r--r--Kod/bilbana/yc4/do_car.m95
-rw-r--r--Kod/bilbana/yc4/do_gov.m9
-rw-r--r--Kod/bilbana/yc4/fit_percents.m11
-rw-r--r--Kod/bilbana/yc4/get_aprox_v.m11
-rw-r--r--Kod/bilbana/yc4/get_car_constant.m2
-rw-r--r--Kod/bilbana/yc4/get_new_u.m4
-rw-r--r--Kod/bilbana/yc4/get_new_v.m6
-rw-r--r--Kod/bilbana/yc4/get_seg_constant.m19
-rw-r--r--Kod/bilbana/yc4/get_time_as_string.m12
-rw-r--r--Kod/bilbana/yc4/gov_set.m6
-rw-r--r--Kod/bilbana/yc4/main.m167
-rw-r--r--Kod/bilbana/yc4/setup_car.m17
-rw-r--r--Kod/bilbana/yc4/verbose.m6
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T15.47.matbin0 -> 2497 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.28.matbin0 -> 2341 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.29.matbin0 -> 2340 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.37.matbin0 -> 2413 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.44.matbin0 -> 2348 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.45.matbin0 -> 2478 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.49.matbin0 -> 2413 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.51.matbin0 -> 2578 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.52.matbin0 -> 2500 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.53.matbin0 -> 2347 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T18.59.matbin0 -> 2329 bytes
-rw-r--r--Kod/matfiler/bilbana2_2019-11-20T19.01.matbin0 -> 2343 bytes
-rw-r--r--Kod/scripts/test_givare.m23
-rw-r--r--Kod/scripts/test_givare_kompenserad.m79
-rw-r--r--Motesprotokoll/2019-11-22.tex57
-rw-r--r--Motesprotokoll/2019-11-27.tex54
52 files changed, 954 insertions, 125 deletions
diff --git a/Dokument/Teknisk Dokumentation/Figures/The_Earth_seen_from_Apollo_17.jpg b/Dokument/Teknisk Dokumentation/Figures/The_Earth_seen_from_Apollo_17.jpg
new file mode 100644
index 0000000..b02a028
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/Figures/The_Earth_seen_from_Apollo_17.jpg
Binary files differ
diff --git a/Dokument/Teknisk Dokumentation/Figures/logo.jpg b/Dokument/Teknisk Dokumentation/Figures/logo.jpg
new file mode 100644
index 0000000..52b960d
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/Figures/logo.jpg
Binary files differ
diff --git a/Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex b/Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/appendix/01-handhavande.tex
diff --git a/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex b/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/appendix/02-funktion.tex
diff --git a/Dokument/Teknisk Dokumentation/appendix/03-testprocedur.tex b/Dokument/Teknisk Dokumentation/appendix/03-testprocedur.tex
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/appendix/03-testprocedur.tex
diff --git a/Dokument/Teknisk Dokumentation/appendix/04-testprotokoll.tex b/Dokument/Teknisk Dokumentation/appendix/04-testprotokoll.tex
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/appendix/04-testprotokoll.tex
diff --git a/Dokument/Teknisk Dokumentation/appendix/05-kravbeskrivning.tex b/Dokument/Teknisk Dokumentation/appendix/05-kravbeskrivning.tex
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/appendix/05-kravbeskrivning.tex
diff --git a/Dokument/Teknisk Dokumentation/lips-no_customer.cls b/Dokument/Teknisk Dokumentation/lips-no_customer.cls
new file mode 100644
index 0000000..3ccaa3d
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/lips-no_customer.cls
@@ -0,0 +1,262 @@
+%% This simple template was written by Erik Frisk <erik.frisk@liu.se>
+%% for use with the CDIO/LIPS courses at Linköping University.
+%%
+%% If you find them usefeul, great! If you have constructive suggestions or
+%% comments, send me an email and I will consider your comments.
+
+%% Modified by Gustav Sörnäs
+%% Changes:
+%% - Remove customer-information
+%% - Format all email-adresses with \url{}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{lips-no_customer}[2015/11/01 v1.0 LaTeX class for typesetting LIPS documents]
+
+% Declare options
+\DeclareOption{swedish}{\def\@lipslang{swedish}}
+\DeclareOption{english}{\def\@lipslang{english}}
+
+\DeclareOption{oneside}{\PassOptionsToClass{oneside}{scrartcl}}
+\DeclareOption{twoside}{\PassOptionsToClass{twoside}{scrartcl}}
+
+\DeclareOption{10pt}{\PassOptionsToClass{10pt}{scrartcl}}
+\DeclareOption{11pt}{\PassOptionsToClass{11pt}{scrartcl}}
+\DeclareOption{12pt}{\PassOptionsToClass{12pt}{scrartcl}}
+
+\ExecuteOptions{english}
+\ExecuteOptions{10pt}
+\ExecuteOptions{oneside}
+
+\ProcessOptions
+
+% Load scrartcl class
+\LoadClass[headinclude,footinclude,a4paper]{scrartcl}
+
+% Load packages
+\RequirePackage[
+nochapters, % Turn off chapters since this is an article
+%beramono, % Use the Bera Mono font for monospaced text (\texttt)
+%eulermath,% Use the Euler font for mathematics
+pdfspacing, % Makes use of pdftex’ letter spacing capabilities via the microtype package
+dottedtoc
+]{classicthesis} % The layout is based on the Classic Thesis style
+
+\RequirePackage{babel}
+\RequirePackage[T1]{fontenc}
+\RequirePackage[utf8]{inputenc}
+\RequirePackage{arsclassica} % Modifies the Classic Thesis package
+\RequirePackage{graphicx} % Required for including images
+\RequirePackage{hyperref}
+\RequirePackage{url}
+\RequirePackage{microtype}
+\RequirePackage{listings}
+%\RequirePackage{palatino}
+\RequirePackage{times}
+%\RequirePackage{supertabular}
+\RequirePackage{longtable}
+\RequirePackage[textwidth=165mm,textheight=230mm]{geometry}
+\RequirePackage{lipsum} % Used for inserting dummy 'Lorem ipsum' text into the template
+\RequirePackage{amsmath,amssymb,amsthm} % For including math equations, theorems, symbols, etc
+\RequirePackage{varioref} % More descriptive referencing
+
+
+\def\name@groupemail{Group E-mail}
+\def\name@Homepage{Homepage}
+\def\name@Orderer{Orderer}
+\def\name@Customer{Customer}
+\def\name@Supervisor{Supervisor}
+\def\name@Responsible{Course Responsible}
+\def\name@Phone{Phone}
+\def\name@Email{E-mail}
+\def\name@Requirement{Requirement}
+\def\name@Description{Description}
+\def\name@Priority{Priority}
+\def\name@contprev{cont. from previous page}
+\def\name@contnext{cont. on next page}
+\def\name@Author{Author}
+\def\name@Date{Date}
+\def\name@Reviewed{Reviewed}
+\def\name@Approved{Approved}
+\def\name@ProjId{Project Identity}
+
+\ifthenelse{\equal{\@lipslang}{swedish}}{
+ \def\name@groupemail{Grupp E-post}
+ \def\name@Homepage{Hemsida}
+ \def\name@Orderer{Beställare}
+ \def\name@Customer{Kund}
+ \def\name@Supervisor{Handledare}
+ \def\name@Responsible{Kursansvarig}
+ \def\name@Phone{Tfn}
+ \def\name@Email{E-post}
+ \def\name@Requirement{Krav}
+ \def\name@Description{Beskrivning}
+ \def\name@Priority{Prioritet}
+ \def\name@contprev{forts. från föregående sida}
+ \def\name@contnext{forts. på nästa sida}
+ \def\name@Author{Författare}
+ \def\name@Date{Datum}
+ \def\name@Reviewed{Granskad}
+ \def\name@Approved{Godkänd}
+ \def\name@ProjId{Projektidentitet}
+}{}
+
+\def\projecttitle#1{\gdef\@projecttitle{#1}}
+
+\def\version#1{\gdef\@version{#1}}
+
+\def\reviewed#1#2{\gdef\@reviewed{#1}\gdef\@revieweddate{#2}}
+\def\approved#1#2{\gdef\@approved{#1}\gdef\@approveddate{#2}}
+
+\def\coursename#1{\gdef\@coursename{#1}}
+\def\coursecode#1{\gdef\@coursecode{#1}}
+
+\def\courseresponsible#1{\gdef\@courseresponsible{#1}}
+\def\courseresponsiblephone#1{\gdef\@courseresponsiblephone{#1}}
+\def\courseresponsibleemail#1{\gdef\@courseresponsibleemail{\url{#1}}}
+
+\def\supervisor#1{\gdef\@supervisor{#1}}
+\def\supervisorphone#1{\gdef\@supervisorphone{#1}}
+\def\supervisoremail#1{\gdef\@supervisoremail{\url{#1}}}
+
+\def\groupname#1{\gdef\@groupname{#1}}
+\def\groupemail#1{\gdef\@groupemail{\url{#1}}}
+\def\groupwww#1{\gdef\@groupwww{\url{#1}}}
+
+\def\orderer#1{\gdef\@orderer{#1}}
+\def\ordererphone#1{\gdef\@ordererphone{#1}}
+\def\ordereremail#1{\gdef\@ordereremail{\url{#1}}}
+
+\def\customer#1{\gdef\@customer{#1}}
+\def\customerphone#1{\gdef\@customerphone{#1}}
+\def\customeremail#1{\gdef\@customeremail{\url{#1}}}
+
+\def\smalllogo#1{\gdef\@smalllogo{#1}}
+\def\biglogo#1{\gdef\@biglogo{#1}}
+
+\renewcommand{\maketitle}{%
+ \pagestyle{scrheadings}
+
+ \clearscrheadfoot
+ \@ifundefined{@smalllogo}{\ihead{}}{\ihead{\includegraphics[width=.2\textwidth]{\@smalllogo}}}
+ \chead{\@projecttitle}
+ \ohead{\@date}
+ \ifoot{\@coursecode\hspace*{5mm}\@coursename\\\@title}
+ \ofoot{{\@groupname\\\@groupemail}}
+
+ \pagenumbering{Roman}
+ \vspace*{4cm}
+ \begin{center}
+ \vspace*{3mm}
+ {\Huge \@title}\\
+ \vspace*{3mm} {\large \@author}\\
+ \vspace*{10mm} {\large \@date}\\
+ \vspace*{10mm}
+ {\large Version \@version}
+ \end{center}
+ \vfill
+ \@ifundefined{@biglogo}{}{
+ \begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.5\textwidth]{\@biglogo}
+ \end{figure}
+ \vfill
+ }
+ \begin{center}
+ Status
+ \end{center}
+ \begin{tabular}{|p{.3\linewidth}|p{.3\linewidth}|p{.3\linewidth}|}
+ \hline
+ \name@Reviewed & \@reviewed & \@revieweddate\\
+ \hline
+ \name@Approved & \@approved & \@approveddate \\
+ \hline
+ \end{tabular}
+ \cleardoublepage
+ \pagestyle{scrheadings}
+}
+
+\newcommand{\makeprojectid}{%
+ \begin{center}
+ \large\name@ProjId
+ \end{center}
+
+ \begin{tabular}{ll}
+ \name@groupemail: & \@groupemail\\[5mm]
+ \name@Homepage: & \@groupwww\\[5mm]
+ \name@Orderer: & \@orderer\\
+ & \name@Phone: \@ordererphone\\
+ & \name@Email: \@ordereremail\\[5mm]
+ %\name@Customer: & \@customer\\
+ % & \name@Phone: \@customerphone\\
+ % & \name@Email: \@customeremail\\[5mm]
+ \name@Supervisor: & \@supervisor\\
+ & \name@Phone: \@supervisorphone\\
+ & \name@Email: \@supervisoremail\\[5mm]
+ \name@Responsible: & \@courseresponsible\\
+ & \name@Phone: \@courseresponsiblephone\\
+ & \name@Email: \@courseresponsibleemail
+ \end{tabular}
+}
+
+
+% Requirements
+\newcounter{reqcnt}
+\newcommand{\requirementno}{\refstepcounter{reqcnt}\thereqcnt}
+% \newenvironment{requirements}{%
+% \begin{center}%
+% \tablefirsthead{\hline \name@Requirement & \name@Description & \name@Priority \\
+% \hline \hline}%
+% \tablehead{\hline \multicolumn{3}{|l|}{\footnotesize\textsl{\name@contprev}}\\\hline \name@Requirement & \name@Description & \name@Priority\\\hline \hline}%
+% \tabletail{\hline \multicolumn{3}{|r|}{\footnotesize\textsl{\name@contnext}}\\\hline}%
+% \tablelasttail{\hline}%
+
+% \begin{supertabular*}{\textwidth}{@{\extracolsep{\fill}}|c|p{100mm}|c|}}{%
+% \end{supertabular*}
+% \end{center}
+% }
+
+\newenvironment{requirements}{%
+ \begin{center}
+ \begin{longtable}{|c|p{100mm}|c|}
+ \hline
+ \name@Requirement & \name@Description & \name@Priority\\
+ \hline
+ \hline
+ \endfirsthead
+ \hline
+ \multicolumn{3}{|l|}%
+ {\footnotesize\textsl{\name@contprev}} \\
+ \hline
+ \name@Requirement & \name@Description & \name@Priority\\
+ \hline
+ \endhead
+ \hline
+ \multicolumn{3}{|r|}%
+ {\footnotesize\textsl{\name@contnext}} \\
+ \hline
+ \endfoot
+ \hline
+ \endlastfoot
+ }{%
+ \end{longtable}
+ \end{center}
+}
+
+
+\setcounter{tocdepth}{2}
+\setlength{\footheight}{26pt}
+\setlength{\headheight}{33pt}
+
+\graphicspath{{Figures/}} % Set the default folder for images
+
+\hypersetup{
+%draft, % Uncomment to remove all links (useful for printing in black and white)
+colorlinks=true, breaklinks=true, bookmarks=true,bookmarksnumbered,
+urlcolor=webbrown, linkcolor=RoyalBlue, citecolor=webgreen, % Link colors
+pdftitle={}, % PDF title
+pdfauthor={}, % PDF Author
+pdfsubject={}, % PDF Subject
+pdfkeywords={}, % PDF Keywords
+pdfcreator={pdfLaTeX}, % PDF Creator
+pdfproducer={LaTeX with hyperref and ClassicThesis} % PDF producer
+}
diff --git a/Dokument/Teknisk Dokumentation/root.tex b/Dokument/Teknisk Dokumentation/root.tex
new file mode 100644
index 0000000..7efcf53
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/root.tex
@@ -0,0 +1,97 @@
+ \documentclass[10pt,oneside,swedish]{lips-no_customer}
+
+%\usepackage[square]{natbib}\bibliographystyle{plainnat}\setcitestyle{numbers}
+\usepackage[round]{natbib}\bibliographystyle{plainnat}
+
+% Configure the document
+\title{Teknisk dokumentation}
+\author{Yc4}
+\date{\today}
+\version{0.1}
+
+\reviewed{}{}
+\approved{}{}
+
+\projecttitle{Styrning och optimering av bilbana}
+
+\groupname{Yc4}
+\groupemail{team\_yc4@liuonline.onmicrosoft.com}
+\groupwww{https://www.fs.isy.liu.se/Edu/Courses/TFYY51/}
+
+\coursecode{TFYY51}
+\coursename{Ingenjörsprojekt}
+
+\orderer{Erik Frisk, Linköpings universitet}
+\ordererphone{+46(0)13-285714}
+\ordereremail{ordere@liu.se}
+
+%\customer{Kund, Företag X}
+%\customerphone{+46 xxxxxx}
+%\customeremail{erik.frisk@liu.se}
+
+\courseresponsible{Urban Forsberg}
+\courseresponsiblephone{+46(0)13-281350}
+\courseresponsibleemail{urban.frsberg@liu.se}
+
+\supervisor{Viktor Leek}
+\supervisorphone{+46(0)13-284493}
+\supervisoremail{viktor.leek@liu.se}
+
+\smalllogo{logo} % Page header logo, filename
+\biglogo{logo} % Front page logo, filename
+
+\cfoot{\thepage}
+\begin{document}
+\maketitle
+
+\cleardoublepage
+\makeprojectid
+
+\begin{center}
+ \Large Projektdeltagare
+\end{center}
+\begin{center}
+ \begin{tabular}{|l|l|l|}
+ \hline
+ \textbf{Namn} & \textbf{Ansvar} & \textbf{E-post}\\
+ \hline
+ \end{tabular}
+\end{center}
+
+\section*{Dokumenthistorik}
+\begin{tabular}{p{.06\textwidth}|p{.1\textwidth}|p{.45\textwidth}|p{.13\textwidth}|p{.13\textwidth}}
+ \multicolumn{1}{c}{\bfseries Version} &
+ \multicolumn{1}{|c}{\bfseries Datum} &
+ \multicolumn{1}{|c}{\bfseries Utförda förändringar} &
+ \multicolumn{1}{|c}{\bfseries Utförda av} &
+ \multicolumn{1}{|c}{\bfseries Granskad}\\
+ \hline
+ \hline
+ 0.1 & 2019-11-26 & Förberedande struktur & Albin & \\
+ \hline
+\end{tabular}
+
+\cleardoublepage
+\pagenumbering{arabic}\cfoot{\thepage}
+\input{text/00-sammanfattning}
+
+\cleardoublepage
+\tableofcontents
+\cleardoublepage
+
+\input{text/01-bakgrund}
+\input{text/02-metod}
+\input{text/03-resultat}
+\input{text/04-diskussion}
+
+\bibliography{references}
+
+\cleardoublepage
+\appendix
+\input{appendix/01-handhavande}
+\input{appendix/02-funktion}
+\input{appendix/03-testprocedur}
+\input{appendix/04-testprotokoll}
+\input{appendix/05-kravbeskrivning}
+\end{document}
+
diff --git a/Dokument/Teknisk Dokumentation/text/00-sammanfattning.tex b/Dokument/Teknisk Dokumentation/text/00-sammanfattning.tex
new file mode 100644
index 0000000..a30a3aa
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/00-sammanfattning.tex
@@ -0,0 +1,3 @@
+\section*{Sammanfattning}
+Massa text som sammanfattar hela skiten.
+
diff --git a/Dokument/Teknisk Dokumentation/text/01-bakgrund.tex b/Dokument/Teknisk Dokumentation/text/01-bakgrund.tex
new file mode 100644
index 0000000..7860d39
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/01-bakgrund.tex
@@ -0,0 +1,14 @@
+\section{Bakgrund}
+Skriv här (det som nu står i Syfte och mål) bakgrunden till målsättningen. Dvs det fanns en bilbana med givare osv.
+
+\section{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.
diff --git a/Dokument/Teknisk Dokumentation/text/02-metod.tex b/Dokument/Teknisk Dokumentation/text/02-metod.tex
new file mode 100644
index 0000000..8efb181
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/02-metod.tex
@@ -0,0 +1,3 @@
+\section{Metod}
+Tillvägagångssätt för utvecklign av systemet. Skriv massa positiva saker om git.
+
diff --git a/Dokument/Teknisk Dokumentation/text/02a-system.tex b/Dokument/Teknisk Dokumentation/text/02a-system.tex
new file mode 100644
index 0000000..b39a995
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/02a-system.tex
@@ -0,0 +1,12 @@
+\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-resultat.tex b/Dokument/Teknisk Dokumentation/text/03-resultat.tex
new file mode 100644
index 0000000..ea11986
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/03-resultat.tex
@@ -0,0 +1,3 @@
+\section{Resultat}
+Det gick åt skogen
+Kanske visa lite grafer.
diff --git a/Dokument/Teknisk Dokumentation/text/04-diskussion.tex b/Dokument/Teknisk Dokumentation/text/04-diskussion.tex
new file mode 100644
index 0000000..f26ef6e
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/04-diskussion.tex
@@ -0,0 +1,4 @@
+\section{Diskussion}
+Undrar varför
+\subsection{Problem med hårdvaran}
+Här skyller vi ifrån oss.
diff --git a/Dokument/Teknisk Dokumentation/text/system/.keep b/Dokument/Teknisk Dokumentation/text/system/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Dokument/Teknisk Dokumentation/text/system/.keep
diff --git a/Dokument/Tidsplan/05Tidplan01.xlsx b/Dokument/Tidsplan/05Tidplan01.xlsx
new file mode 100644
index 0000000..cd01713
--- /dev/null
+++ b/Dokument/Tidsplan/05Tidplan01.xlsx
Binary files differ
diff --git a/Kod/bilbana/files/Bana1.mat b/Kod/bilbana/files/Bana1.mat
index d83861f..e745c59 100644
--- a/Kod/bilbana/files/Bana1.mat
+++ b/Kod/bilbana/files/Bana1.mat
Binary files differ
diff --git a/Kod/bilbana/files/Bana2.mat b/Kod/bilbana/files/Bana2.mat
index 622fc18..743de15 100644
--- a/Kod/bilbana/files/Bana2.mat
+++ b/Kod/bilbana/files/Bana2.mat
Binary files differ
diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m
index d6db2ca..5d2dee3 100644
--- a/Kod/bilbana/yc4/choose_position.m
+++ b/Kod/bilbana/yc4/choose_position.m
@@ -1,18 +1,17 @@
-function [new_position, seg_plus] = choose_position(position,segment, track)
+function [new_position, seg_plus] = choose_position(position,segment, track, track_len)
%CHOOSE_POSITION Välj vad position ska vara
% Kör endast vid ny indata. Kollar om indatan är rimlig eller om någon
% givare missats. Sedan väljs position efter vilken givare det var som
% passerades. seg_plus anger om och med hur mycket car.segment bör
% justeras för att kompensera efter missad givare.
-track_len = [0 2.53 3.05 4.73 7.68 8.98 10.93 14.96 17.57;
- 0 2.53 3.05 4.92 7.60 8.84 10.65 14.68 17.76];
-set_pos = [0 2.53 3.05 4.73 7.68 8.98 10.93 14.96 17.57;
- 0 2.53 3.05 4.92 7.60 8.84 10.65 14.68 17.76];
pos_c = position;
+
+track_len = track_len(1: length(track_len) - 1);
+
%% Vilken givare ligger närmast pos_c?
near = [];
for i = 1:length(track_len)
- diff = abs(track_len(track, i) - pos_c);
+ diff = abs(track_len(i) - pos_c);
if i == 1
near = [i, diff];
else
@@ -23,19 +22,8 @@ for i = 1:length(track_len)
end
disp(near);
%% Beräkning av passerad givare
-if near(1) == segment
- new_position = set_pos( track, segment);
- seg_plus = 0;
- disp('In right segment');
-else
- if near(2) < 0.7 % Behöver bli smartare. Typ jämföra andra normal miss med denna miss
- seg_plus = max(0, near(1) - segment);
- new_position = set_pos(track, segment + seg_plus);
- else
- new_position = set_pos(track, segment); % ineff borde kombineras
- seg_plus = 0;
- disp('In right segment ich');
- end
-end
+seg_plus = max(0, near(1) - segment)
+new_position = track_len(segment + seg_plus);
end
+
diff --git a/Kod/bilbana/yc4/debug.m b/Kod/bilbana/yc4/debug.m
index 12acbf4..0295e02 100644
--- a/Kod/bilbana/yc4/debug.m
+++ b/Kod/bilbana/yc4/debug.m
@@ -1,3 +1,6 @@
function [] = debug(tag, strings)
-disp(strjoin({'DEBUG (', tag, '): ', strings}, ''))
+global log_debug;
+if log_debug
+ disp(strjoin({'DEBUG (', tag, '): ', strings}, ''))
+end
end
diff --git a/Kod/bilbana/yc4/detect_missed.m b/Kod/bilbana/yc4/detect_missed.m
index fb80d1c..1321920 100644
--- a/Kod/bilbana/yc4/detect_missed.m
+++ b/Kod/bilbana/yc4/detect_missed.m
@@ -1,9 +1,9 @@
-function [out] = detect_missed( position, segment, track)
+function [out] = detect_missed( position, segment, track, track_len)
%DETECT_MISSED Retunerar true om position ligger utanför nuvarande segment
%
-track_len = [2.53 3.05 4.73 7.68 8.98 10.93 14.96 17.57 19.60;
- 2.53 3.05 4.92 7.60 8.84 10.65 14.68 17.76 19.95];
-a = track_len(track, segment);
+
+track_len = track_len(2: length(track_len));
+a = track_len(segment);
out = a <= position;
end
diff --git a/Kod/bilbana/yc4/do_boot.m b/Kod/bilbana/yc4/do_boot.m
new file mode 100644
index 0000000..5019319
--- /dev/null
+++ b/Kod/bilbana/yc4/do_boot.m
@@ -0,0 +1,62 @@
+function [car, boot] = do_boot(car, boot)
+%BOOT Summary of this function goes here
+% Detailed explanation goes here
+if car.running == true
+ %% BEFORE FIRST LAP
+ if car.lap == 0
+ t = toc(boot.time);
+ if t > 0.6
+ car.constant = car.constant + 0.12;
+ disp('###')
+ disp(car.num)
+ disp(car.constant)
+ boot.time = tic;
+ end
+ end
+ %% WHEN NEW LAP
+ if car.new_lap == 1
+ car.constant = car.constant + 0.4;
+ disp('###')
+ disp(car.num)
+ disp(car.constant)
+ end
+ %% First segment
+ if car.lap == 1 && car.segment == 1 || car.lap == 1 && car.segment == 2
+ t = toc(boot.time);
+ if t > 0.8
+ car.constant = car.constant + 0.06;
+ disp('###')
+ disp(car.num)
+ disp(car.constant)
+ boot.time = tic;
+ end
+
+ end
+ %% ide höj carconstant så att den blir mer aggresivare ju längre tid som det går t.ex efter 3.5 s
+ %% if car.lap == 1 && car.segment == 1 || car.lap == 1 && car.segment == 2
+ %% t = toc(boot.time);
+ %% if t > 1.0
+ %% car.constant = car.constant + 0.5;
+ %% disp('###')
+ %% disp(car.num)
+ %% disp(car.constant)
+ %% boot.time = tic;
+ %% end
+ %%
+ %% end
+
+ %% END BOOTSTRAP
+ if car.segment > 3
+ disp(car.constant);
+ seg_time = car.seg_times(1, 3)
+ laptime_forecast = seg_time / 0.102
+ forecast_ref_diff = laptime_forecast - car.ref_time
+ forecast_ref_diff_rel = forecast_ref_diff / car.ref_time
+ car.constant = car.constant + (forecast_ref_diff_rel * 0.15)
+ boot.status = 0;
+ disp('END OF BOOTSTRAP')
+ disp(car.num)
+ disp(car.constant)
+ end
+end
+end \ No newline at end of file
diff --git a/Kod/bilbana/yc4/do_car.m b/Kod/bilbana/yc4/do_car.m
index ce3d76c..4792ca7 100644
--- a/Kod/bilbana/yc4/do_car.m
+++ b/Kod/bilbana/yc4/do_car.m
@@ -1,4 +1,4 @@
-function [car, stop, display_data] = do_car(car, t, display_data)
+function [car, halt, display_data] = do_car(car, t, display_data, boot)
%DO_CAR Ger nya värden till struct car, avgör om koden ska stoppas samt hämtar displaydata.
%{
Input/Output:
@@ -8,8 +8,10 @@ car - En struct med data för en viss bil
car.automatic - Om bilen körs automatiskt eller inte
car.segment - Bilens nuvarande segment
car.lap - Bilens nuvarande varv
- car.lap_times - Bilens sparade varvtider (1 x n matris)
- car.seg_times - Bilens sparade segmentstier (n x m matris)
+ car.lap_times - Bilens sparade varvtider (1 x v matris)
+ car.seg_times - Bilens sparade segmentstier (v x 9 matris)
+ car.seg_constant_list = []; % TODO Sparar alla seg_constants som
+ använts (v x 9 matris)
car.position - Bilens nuvarande placering på banan i meter från
start/mål
car.seg_len - Banans längd från start till givarna (1 x 9 matris)
@@ -17,13 +19,15 @@ car - En struct med data för en viss bil
fil)
car.miss_probability - Sannorlikheten för artificiellt introducerade
missade givare
+ car.lap_constants = [1,1,1,1,1,1,1,1,1]; % TODO seg_constanst för
+ nuvarande varv. Skapas av gov_set() vid nytt varv
t - Längden (s) på nuvarande programcykel
display_data - Buffer med den data som ska skickas till displayen vid nästa
- anrop
+anrop
stop - Huruvida koden ska stoppas eller inte
%}
-stop = false;
+halt = false;
if car.running == true
[car.new_lap, car.new_check_point, car.time] = get_car_position(car.num);
if car.new_check_point == true && rand < car.miss_probability && car.lap >= 4
@@ -33,10 +37,14 @@ if car.running == true
end
end
+if car.stopped == true
+ return
+end
+
%% READ INPUT FROM TRACK
if car.running == true
if car.lap ~= 0
- if toc(car.seg_tic) > 9.0
+ if toc(car.seg_tic) > 9.0 && not(boot.status)
set_car_speed(1, 0);
set_car_speed(2, 0);
%disp(strjoin({'Avåkning bil', num2str(car.num)}));
@@ -45,7 +53,7 @@ if car.running == true
if car.response == 'J'
car.seg_tic = tic;
else
- stop = true;
+ halt = true;
return;
end
end
@@ -54,39 +62,66 @@ if car.running == true
%% CALC POSITION
if car.lap > 1
% car.last_seg_times = car.seg_times(car.lap - 1, 1:9);
- aprox_v = get_aprox_v(car.segment + detect_missed(car.position, car.segment, car.num), car.lap, car.seg_times, car.num);
+ aprox_v = get_aprox_v(car.segment + detect_missed(car.position, car.segment, car.num, car.pos_at), car.lap, car.seg_times, car.num, car.seg_len);
car.position = get_position(aprox_v, car.position, t);
- if detect_missed( car.position, car.segment, car.num)
+ if detect_missed( car.position, car.segment, car.num, car.pos_at)
disp('Miss?');
-
+
%disp(toc(car.miss_time));
%if car.miss_time == 0
- % car.miss_time = tic;
+ % car.miss_time = tic;
%end
end
end
+ if car.stopping == true
+ % CHECK IF CAR IS AT THE END OF TRACK
+ if car.position > (car.map(80, 1) / 100) - 0.8 % 80cm
+ disp(car.position)
+ disp((car.map(80, 1) / 100) - 300)
+ set_car_speed(car.num, 0);
+ car.stopped = true;
+ return
+ end
+ end
+
%% CHECK POINT
if car.new_check_point == true
if car.new_lap == false % choose_position krachar vid nytt varv (seg 10)
if car.lap ~= 0
car.seg_times(car.lap, car.segment) = toc(car.seg_tic);
- end
+ end
+
+ seg_time = car.seg_times(car.lap, car.segment)
+ lap_time_now = toc(car.lap_tic)
+ % s = vt
+ % v = s/t
+ % t = s/v
+ prev_seg_v = car.seg_len(car.segment) / toc(car.seg_tic)
+ track_remaining = car.pos_at(length(car.pos_at)) - car.pos_at(car.segment + 1)
+
+ car.forecasts(car.lap, car.segment) = lap_time_now + track_remaining/prev_seg_v
+
car.segment = car.segment + 1;
car.seg_tic = tic;
if car.lap > 2 % S�kerhetsmarginal (B�r vara 1?)
- disp(car);
+ disp(car)
[new_position, seg_plus] = ...
- choose_position(car.position, car.segment, car.num);
- if seg_plus ~= 0 && car.segment == 1
+ choose_position(car.position, car.segment, car.num, car.pos_at);
+ if seg_plus ~= 0 && car.segment == 2
disp('Hoppar �ver missad givare 1/2');
else
car.position = new_position;
car.segment = car.segment + seg_plus;
- end
+ end
+ if seg_plus ~= 0 && car.segment ~= 2
+ car.seg_times(car.lap, car.segment - seg_plus - 1) = 0;
+ disp(car.seg_times(car.lap, :))
+ disp(seg_plus)
+ end
%car.miss_time = uint64(0);
else
- car.position = car.seg_len(car.segment);
+ car.position = car.pos_at(car.segment);
%car.miss_time = uint64(0);
end
end
@@ -94,7 +129,10 @@ if car.running == true
%% NEW LAP
if car.new_lap == true
- car.new_lap = false;
+ disp('NEW LAP')
+
+ car.lap_constants = gov_set(car.constant);
+ car.new_lap = false; %TODO remove
beep;
if car.lap == 0
% dont save time for first lap
@@ -103,13 +141,26 @@ if car.running == true
car.seg_tic = tic;
car.lap_tic = tic;
else
- % beep;
- car.seg_times(car.lap, car.segment) = toc(car.seg_tic);
+ % beep;
+ % Spara inte seg_time om missad givare
+ if car.segment == 9
+ car.seg_times(car.lap, car.segment) = toc(car.seg_tic);
+ end
car.seg_tic = tic;
car.lap_times(car.lap) = toc(car.lap_tic);
car.lap_tic = tic;
car.position = 0;
+ % save segment percentage from last lap
+ car.percents = fit_percents(car.percents, car.lap_times(car.lap), car.seg_times(car.lap,:))
+
+ if car.lap == 1 && size(car.seg_times, 2) < 9
+ disp('FEL: För få segment!!')
+ car.stopped = true;
+ other_car.stopped = true;
+ return
+ end
+
display_data = [display_data, put_text(100, 16 + (16 * car.num), 'L', strjoin({num2str(car.lap), get_time_as_string(round(car.lap_times(car.lap) * 1000))}, ' '))];
car.segment = 1;
@@ -120,10 +171,8 @@ end
%% CALCULATE
if car.running == true && car.automatic == true
- car.car_constant = get_car_constant(car.num);
car.v = get_new_v(car.position, car.map);
- car.track_u_constant = get_track_u_constant();
- car.u = get_new_u(car.v, car.car_constant, car.track_u_constant);
+ car.u = get_new_u(car.v, car.constant);
end
%% CONTROLLER
diff --git a/Kod/bilbana/yc4/do_gov.m b/Kod/bilbana/yc4/do_gov.m
new file mode 100644
index 0000000..d38336a
--- /dev/null
+++ b/Kod/bilbana/yc4/do_gov.m
@@ -0,0 +1,9 @@
+function [ car ] = do_gov( car )
+%UNTITLED Summary of this function goes here
+% Detailed explanation goes here
+if car.new_check_point
+ status = car.forecasts(car.lap, car.segment-1)/car.ref_time;
+ car.constant = car.constant + (status - 1) * 0.01;
+ disp(car.constant);
+end
+
diff --git a/Kod/bilbana/yc4/fit_percents.m b/Kod/bilbana/yc4/fit_percents.m
new file mode 100644
index 0000000..ffdb9fc
--- /dev/null
+++ b/Kod/bilbana/yc4/fit_percents.m
@@ -0,0 +1,11 @@
+function [ new_percents ] = fit_percents( percents, lap_time, seg_times )
+%FIT_PERCENTS Summary of this function goes here
+% Detailed explanation goes here
+new_percents = [];
+for i = 1:length(percents)
+ old_p = percents(i);
+ cur_p = seg_times(i) / lap_time;
+ new_p = old_p - (old_p + cur_p) / 2;
+ new_percents(i) = new_p;
+end
+
diff --git a/Kod/bilbana/yc4/get_aprox_v.m b/Kod/bilbana/yc4/get_aprox_v.m
index 1867565..737dfac 100644
--- a/Kod/bilbana/yc4/get_aprox_v.m
+++ b/Kod/bilbana/yc4/get_aprox_v.m
@@ -1,21 +1,12 @@
-function [v] = get_aprox_v(cur_seg, lap, seg_times, track)
+function [v] = get_aprox_v(cur_seg, lap, seg_times, track, seg_len)
%GET_APROX_V Tillf�llig? Beh�vs f�r att testa get_position. Ger
%medelhastigheten f�r nuvarande segment p� f�rra varvet.
%{
cur_seg: Nuvarande segment
last_seg_times: 1x9 vektor med f�rra varvets segmenttider
%}
-seg_len1 = [2.53 0.53 1.68 2.92 1.2 2.01 3.83 2.89 1.99];
-seg_len2 = [2.53 0.53 1.87 2.68 1.24 1.81 4.03 3.09 2.19];
-
% seg_len = [];
-if track == 1
- seg_len = seg_len1;
-else
- seg_len = seg_len2;
-end
-
if cur_seg > 9
cur_seg = cur_seg - 9;
end
diff --git a/Kod/bilbana/yc4/get_car_constant.m b/Kod/bilbana/yc4/get_car_constant.m
index 5513721..ae0bb0c 100644
--- a/Kod/bilbana/yc4/get_car_constant.m
+++ b/Kod/bilbana/yc4/get_car_constant.m
@@ -15,7 +15,7 @@ switch(in_pos)
case 1
car_constant = 0.95;
case 2
- car_constant = 0.8;
+ car_constant = 1.0;
end
end
diff --git a/Kod/bilbana/yc4/get_new_u.m b/Kod/bilbana/yc4/get_new_u.m
index ee624fe..ab5e016 100644
--- a/Kod/bilbana/yc4/get_new_u.m
+++ b/Kod/bilbana/yc4/get_new_u.m
@@ -1,4 +1,4 @@
-function [ new_u ] = get_new_u( new_v, car_constant, track_u_constant )
+function [ new_u ] = get_new_u( new_v, seg_constant)
%GET_NEW_U Summary of this function goes here
% Detailed explanation goes here
@@ -9,6 +9,6 @@ ett högre new_u. De andra parametrarna som påverkar new_u är car_constant och tr
dessa värden dessa antar desto högre värde antar också new_u. new_u är programmets sista output, dess värde
0 till 127 är det gaspådrag som appliceras på bilen.
%}
-new_u = new_v*car_constant*track_u_constant;
+new_u = new_v*seg_constant;
end
diff --git a/Kod/bilbana/yc4/get_new_v.m b/Kod/bilbana/yc4/get_new_v.m
index e722326..e56f572 100644
--- a/Kod/bilbana/yc4/get_new_v.m
+++ b/Kod/bilbana/yc4/get_new_v.m
@@ -4,12 +4,8 @@ function [ new_v ] = get_new_v( position, list)
Utgår ifrån position och ger motsvarande hårdkodade värde på v för
nuvarande sub_segment.
%}
-position = position*100; %temp input för position
-
-
-
+position = position*100;
for i = 1:length(list)
-
if list(i,1) > position
new_v = list((i-1),4);
break
diff --git a/Kod/bilbana/yc4/get_seg_constant.m b/Kod/bilbana/yc4/get_seg_constant.m
new file mode 100644
index 0000000..2de04ca
--- /dev/null
+++ b/Kod/bilbana/yc4/get_seg_constant.m
@@ -0,0 +1,19 @@
+function [out] = get_seg_constant(position, lap_constants, track, track_len)
+%GET_SEG_CONSTANT Avgör vilken seg_constat som ska användas utifån
+%nuvarande position.
+%{
+position - Position i meter från start
+lap_constants - De seg_constants som ska användas detta varv
+track - den bana/bil som beräkningarna ska göras för
+%}
+
+track_len = track_len(1: length(track_len) - 1);
+
+for i = 1:length(track_len)
+ if position >= track_len(i)
+ seg_constant_num = i;
+ end
+end
+out = lap_constants(seg_constant_num);
+end
+
diff --git a/Kod/bilbana/yc4/get_time_as_string.m b/Kod/bilbana/yc4/get_time_as_string.m
index 24b6bc5..f99c53d 100644
--- a/Kod/bilbana/yc4/get_time_as_string.m
+++ b/Kod/bilbana/yc4/get_time_as_string.m
@@ -1,10 +1,16 @@
function num_as_str = get_time_as_string(millis)
%GET_TIME_AS_STRING Number of milliseconds, formatted mm:ss.s and rounded
% Detailed explanation goes here
-minutes = num2str(fix(millis / (1000*60)));
+minutes = fix(millis / (1000*60));
seconds = mod(millis, 1000*60);
+rest = round(mod(seconds, 1000), -2) / 100;
+if rest == 10
+ seconds = seconds + 1*1000;
+ rest = 0;
+end
+minutes_str = num2str(minutes);
seconds_str = sprintf('%02d', fix(seconds / 1000));
-rest_str = num2str(round(mod(seconds, 1000), -2) / 100);
-num_as_str = strjoin({minutes, ':', seconds_str, '.', rest_str}, '');
+rest_str = num2str(rest);
+num_as_str = strjoin({minutes_str, ':', seconds_str, '.', rest_str}, '');
end
diff --git a/Kod/bilbana/yc4/gov_set.m b/Kod/bilbana/yc4/gov_set.m
new file mode 100644
index 0000000..22765c0
--- /dev/null
+++ b/Kod/bilbana/yc4/gov_set.m
@@ -0,0 +1,6 @@
+function [out] = gov_set(car_constant)
+%GOV_SET TODO - Just nu temp lösning
+% Detailed explanation goes here
+out = car_constant*ones(1,9);
+end
+
diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m
index 64951aa..519fbf9 100644
--- a/Kod/bilbana/yc4/main.m
+++ b/Kod/bilbana/yc4/main.m
@@ -1,9 +1,30 @@
+clear all;
+display_active = false;
+
+%% INIT TRACK
+disp('Startar bilbanan. Avsluta med q.')
+hf=figure('position', [0 0 eps eps], 'menubar', 'none');
+
+initialize_counters(1)
+initialize_counters(2)
+
+config_IOs
+
+start_race(1)
+start_race(2)
+
%% INIT
+global log_debug;
+log_debug = true;
+global log_verbose;
+log_verbose = false;
% INIT DISPLAY
-addpath display/ClientServerApp/Release
-cd display/ClientServerApp/Release
-!startServer
-cd ../../..
+if display_active
+ addpath display/ClientServerApp/Release
+ cd display/ClientServerApp/Release
+ !startServer
+ cd ../../..
+end
display = struct;
display.data = [];
@@ -16,46 +37,63 @@ display.shm_interp.data = [];
display.last_send = tic;
display.send_interval = 0.5;
-disp('Startar bilbanan. Avsluta med q.')
-hf=figure('position', [0 0 eps eps], 'menubar', 'none');
-
-% initialize_counters(1)
-% initialize_counters(2)
-
-% config_IOs
-
load('bilbana\files\Bana1.mat')
load('bilbana\files\Bana2.mat')
-% start_race(1)
-% start_race(2)
-
car1 = struct;
car1.num = 1;
car1.running = false;
-car1.automatic = false;
+car1.automatic = true;
+car1.stopping = false;
+car1.stopped = false;
car1.segment = 1;
car1.lap = 0;
car1.lap_times = [];
car1.seg_times = [];
+car1.seg_constant_list = []; % TODO
car1.position = 0;
-car1.seg_len = [0.0 2.53 3.05 4.73 7.68 8.98 10.93 14.69 17.57];
+car1.pos_at = [0.0 2.53 3.05 4.73 7.68 8.98 10.93 14.69 17.57 19.60];
+car1.seg_len = [2.53 0.53 1.68 2.92 1.2 2.01 3.83 2.89 1.99];
+car1.percents = []; % TODO
car1.map = Bana1;
car1.approximation = [];
car1.miss_probability = 0.0;
+car1.lap_constants = [1,1,1,1,1,1,1,1,1]; % TODO
+car1.constant = 0.1;
+car1.stop = false;
car2 = struct;
car2.num = 2;
car2.running = false;
-car2.automatic = false;
+car2.automatic = true;
+car2.stopping = false;
+car2.stopped = false;
car2.segment = 1;
car2.lap = 0;
car2.lap_times = [];
car2.seg_times = [];
car2.position = 0;
-car2.seg_len = [0.0 2.53 3.05 4.92 7.60 8.84 10.65 14.68 17.76];
+car2.pos_at = [0.0 2.53 3.05 4.92 7.62 9.02 10.72 14.68 17.76 19.95];
+car2.seg_len = [2.53 0.52 1.87 2.70 1.40 1.70 4.03 3.08 2.19];
+car2.percents = [0.088, 0.022, 0.102, 0.15, 0.058, 0.11, 0.212, 0.146, 0.113];
+
car2.map = Bana2;
-car2.miss_probability = 0.05;
+car2.miss_probability = 0.1;
+car2.seg_constant_list = []; % TODO
+car2.lap_constants = [1,1,1,1,1,1,1,1,1]; % TODO
+car2.seg_constant = 1;
+car2.constant = 0.1;
+car2.stop = false;
+
+boot1 = struct;
+boot1.status = false;
+boot1.time = 0;
+
+boot2 = struct;
+boot2.status = false;
+boot2.time = 0;
+
+halt = false;
ref_time = 13;
@@ -142,16 +180,6 @@ while 1
end
end
-%{
-ref_time = input('Vilken referenstid ska användas? [13] ', 's');
-ref_time = str2double(ref_time);
-if isnan(ref_time)
- ref_time = 13;
- elseif not(isreal(ref_time))
- ref_time = 13;
-end
-%}
-
debug('DISPLAY', ['CAR1.RUNNING=', car1.running, ', CAR1.AUTOMATIC=', car1.automatic])
debug('DISPLAY', ['CAR2.RUNNING=', car2.running, ', CAR2.AUTOMATIC=', car2.automatic])
debug('DISPLAY', ['CHOSEN REFERENCE TIME=', ref_time])
@@ -165,31 +193,53 @@ while 1
if strcmp(get(hf,'currentcharacter'),'q')
close(hf)
break
+ elseif strcmp(get(hf, 'currentcharacter'), 's')
+ car1.stopping = true;
+ car2.stopping = true;
end
+end
- figure(hf)
- drawnow
+figure(hf)
+drawnow
- [car1, car1.stop, display.data] = do_car(car1, t, display.data);
- [car2, car2.stop, display.data] = do_car(car2, t, display.data);
+[car1, halt, display.data] = do_car(car1, t, display.data);
+if halt
+ break
+end
+[car2, halt, display.data] = do_car(car2, t, display.data);
+if halt
+ break
+end
- if car1.stop == true
- disp('stopped by car 1');
- break;
- end
- if car2.stop == true
- disp('stopped by car 2');
- break;
- end
+%% BOOTSTRAP
+if boot1.status
+ [car1, boot1] = do_boot(car1, boot1);
+end
+if boot2.status
+ [car2, boot2] = do_boot(car2, boot2);
+end
+%% GOVERNOR
+if not(boot1.status) && car1.lap ~= 0
+ car1 = do_gov(car1);
+end
+if not(boot2.status) && car2.lap ~= 0
+ car2 = do_gov(car2);
+end
+%%
- %% END OF LOOP
- while 1 %Whileloop med paus som k�rs till pausen �verskridit 0.07 sekunder
- % DISPLAY
- display.send_delay = tic;
- if toc(display.last_send) > display.send_interval
+if (~car2.running && car1.stopped) || (~car1.running && car2.stopped) || (car1.stopped && car2.stopped)
+ break;
+end
+
+%% END OF LOOP
+while 1 %Whileloop med paus som k�rs till pausen �verskridit 0.07 sekunder
+ % DISPLAY
+ display.send_delay = tic;
+ if toc(display.last_send) > display.send_interval && display_active
% queue control signal
if car1.running && car1.automatic
% display.data = [display.data, put_text(20, 16 + (16 * 1), 'L', num2str(car1.u))];
+ display.data = [display.data, update_bar_graph(1, car1.u)];
end
if car2.running && car2.automatic
% display.data = [display.data, put_text(20, 16 + (16 * 2), 'L', num2str(car2.u))];
@@ -234,16 +284,29 @@ disp(car2);
terminate(1);
terminate(2);
-
-matlabclient(3);
-
+if display_active
+ matlabclient(3);
+end
%% DISPLAY GRAPHS
if car1.running == true
- graphs(car1.lap_times, ref_time, car1.seg_times, 1);
+ graphs(car1.lap_times, car1.ref_time, car1.seg_times, 1);
end
if car2.running == true
- graphs(car2.lap_times, ref_time, car2.seg_times, 2);
+ graphs(car2.lap_times, car2.ref_time, car2.seg_times, 2);
+end
+
+%% SAVE VARIABLES FROM CAR STRUCT
+dateStr = datestr(now, 'yyyy-mm-dd');
+timeStr = datestr(now, 'HH.MM');
+
+if car1.lap > 2
+ filenameMat1 = strjoin({'bilbana1_', dateStr, 'T', timeStr, '.mat'}, '');
+ save(filenameMat1, '-struct', 'car1');
+end
+if car2.lap > 2
+ filenameMat2 = strjoin({'bilbana2_', dateStr, 'T', timeStr, '.mat'}, '');
+ save(filenameMat2, '-struct', 'car2');
end
diff --git a/Kod/bilbana/yc4/setup_car.m b/Kod/bilbana/yc4/setup_car.m
new file mode 100644
index 0000000..1ab75e0
--- /dev/null
+++ b/Kod/bilbana/yc4/setup_car.m
@@ -0,0 +1,17 @@
+function [] = setup_car(car, track)
+%UNTITLED2 Summary of this function goes here
+% Detailed explanation goes here
+disp('J = Ja (automatiskt), M = Ja (manuellt), N = Nej');
+
+car.response = input('Vill du köra bil 1? [N] ', 's');
+if car.response == 'J'
+ car.running = true;
+ car.automatic = true;
+elseif car.response == 'M'
+ car.running = true;
+ car.automatic = false;
+else
+ car.running = false;
+end
+end
+
diff --git a/Kod/bilbana/yc4/verbose.m b/Kod/bilbana/yc4/verbose.m
new file mode 100644
index 0000000..d24a384
--- /dev/null
+++ b/Kod/bilbana/yc4/verbose.m
@@ -0,0 +1,6 @@
+function [] = verbose(tag, strings)
+global log_verbose;
+if log_verbose
+ disp(strjoin({'VERBOSE (', tag, '): ', strings}, ''))
+end
+end
diff --git a/Kod/matfiler/bilbana2_2019-11-20T15.47.mat b/Kod/matfiler/bilbana2_2019-11-20T15.47.mat
new file mode 100644
index 0000000..534e1f1
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T15.47.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.28.mat b/Kod/matfiler/bilbana2_2019-11-20T18.28.mat
new file mode 100644
index 0000000..3ff84b1
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.28.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.29.mat b/Kod/matfiler/bilbana2_2019-11-20T18.29.mat
new file mode 100644
index 0000000..b2ee5d8
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.29.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.37.mat b/Kod/matfiler/bilbana2_2019-11-20T18.37.mat
new file mode 100644
index 0000000..91c314a
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.37.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.44.mat b/Kod/matfiler/bilbana2_2019-11-20T18.44.mat
new file mode 100644
index 0000000..b96c405
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.44.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.45.mat b/Kod/matfiler/bilbana2_2019-11-20T18.45.mat
new file mode 100644
index 0000000..18c1108
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.45.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.49.mat b/Kod/matfiler/bilbana2_2019-11-20T18.49.mat
new file mode 100644
index 0000000..367c866
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.49.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.51.mat b/Kod/matfiler/bilbana2_2019-11-20T18.51.mat
new file mode 100644
index 0000000..68b9133
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.51.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.52.mat b/Kod/matfiler/bilbana2_2019-11-20T18.52.mat
new file mode 100644
index 0000000..575b3ce
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.52.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.53.mat b/Kod/matfiler/bilbana2_2019-11-20T18.53.mat
new file mode 100644
index 0000000..aef34d1
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.53.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.59.mat b/Kod/matfiler/bilbana2_2019-11-20T18.59.mat
new file mode 100644
index 0000000..5cf94bc
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T18.59.mat
Binary files differ
diff --git a/Kod/matfiler/bilbana2_2019-11-20T19.01.mat b/Kod/matfiler/bilbana2_2019-11-20T19.01.mat
new file mode 100644
index 0000000..04491d0
--- /dev/null
+++ b/Kod/matfiler/bilbana2_2019-11-20T19.01.mat
Binary files differ
diff --git a/Kod/scripts/test_givare.m b/Kod/scripts/test_givare.m
index 204d501..726fe82 100644
--- a/Kod/scripts/test_givare.m
+++ b/Kod/scripts/test_givare.m
@@ -26,13 +26,28 @@ while 1
[car1.new_lap, car1.new_check_point, car1.time] = get_car_position(1);
[car2.new_lap, car2.new_check_point, car2.time] = get_car_position(2);
- if car1.new_lap == true || car1.new_check_point == true || car2.new_lap == true || car2.new_check_point == true
- beep;
+ if car1.new_lap || car1.new_check_point == true || car2.new_lap == true || car2.new_check_point == true
+ disp('###')
end
+ if car1.new_check_point
+ beep;
+ disp('car 1 cp')
+ end
+ if car2.new_check_point
+ beep;
+ disp('car 2 cp')
+ end
+ if car1.new_lap
+ beep;
+ disp('car 1 lap')
+ end
+ if car2.new_lap
+ beep;
+ disp('car 2 lap')
+ end
pause(0.1)
end
-
%%
terminate(1)
-terminate(2) \ No newline at end of file
+terminate(2)
diff --git a/Kod/scripts/test_givare_kompenserad.m b/Kod/scripts/test_givare_kompenserad.m
new file mode 100644
index 0000000..2ac0841
--- /dev/null
+++ b/Kod/scripts/test_givare_kompenserad.m
@@ -0,0 +1,79 @@
+disp('Startar bilbanan. Avsluta med q.')
+hf=figure('position',[0 0 eps eps],'menubar','none');
+
+initialize_counters(1)
+initialize_counters(2)
+
+start_race(1)
+start_race(2)
+
+config_IOs
+
+car1 = struct;
+car2 = struct;
+
+while 1
+ %% PRE-LOOP
+ if strcmp(get(hf,'currentcharacter'),'q')
+ close(hf)
+ break
+ end
+
+ figure(hf)
+ drawnow
+
+ %% READ
+ [car1.new_lap, car1.new_check_point, car1.time] = get_car_position(1);
+ [car2.new_lap, car2.new_check_point, car2.time] = get_car_position(2);
+
+ if car1.new_lap || car1.new_check_point == true || car2.new_lap == true || car2.new_check_point == true
+ disp('###')
+ end
+
+ if car1.new_check_point
+ beep;
+ disp('car 1 cp')
+ end
+ if car2.new_check_point
+ beep;
+ disp('car 2 cp')
+ end
+ if car1.new_lap
+ beep;
+ disp('car 1 lap')
+ end
+ if car2.new_lap
+ beep;
+ disp('car 2 lap')
+ end
+ % KOMPENSERA FÖR TRASIG BANA
+ if car1.new_lap && (car2.new_check_point || car1.new_check_point)
+ car2.new_lap = 0;
+ elseif car1.new_lap
+ car2.new_lap = 1;
+ end
+ pause(0.1)
+
+ if car1.new_lap || car1.new_check_point == true || car2.new_lap == true || car2.new_check_point == true
+ disp('---')
+ end
+
+ if car1.new_lap
+ disp('New lap car 1')
+ end
+ if car1.new_check_point
+ disp('New checkpoint car 1')
+ end
+ if car2.new_lap
+ disp('NEW LAP CAR 2!')
+ end
+ if car2.new_check_point
+ disp('NEW CHECKPOINT CAR 2!')
+ end
+
+ pause(0.1)
+end
+
+%%
+terminate(1)
+terminate(2) \ No newline at end of file
diff --git a/Motesprotokoll/2019-11-22.tex b/Motesprotokoll/2019-11-22.tex
new file mode 100644
index 0000000..37a4159
--- /dev/null
+++ b/Motesprotokoll/2019-11-22.tex
@@ -0,0 +1,57 @@
+\documentclass[11pt,a4paper]{article}
+\usepackage{geometry} % gör texten lite bredare eftersom vanlig latex är för smal för a4
+
+% minska storleken på rubriker och underrubriker
+\usepackage{titlesec}
+\titleformat{\section}
+ {\normalfont\Large\bfseries}{\thesection}{1em}{}
+
+\titleformat{\subsection}
+ {\normalfont\normalsize\bfseries}{\thesubsection}{1em}{}[\vspace{-0.4em}]
+\usepackage[]{parskip}
+
+% undvik helst subsubsections
+
+%% FÖRKLARINGAR AV KOMMANDON OCH DYL.
+% \\ skapar en radbrytning
+% \\[1em] skapar en radbrytning med "1em" extra utrymme mellan rader
+% (1 em är ganska stor)
+% \textbf{Skapar text i fetstil}
+% \begin{itemize} och \end{itemize} skapar en s.k. list-enviornment (list-miljö)
+% Inuti itemize skriver man \item för att skapa en ny punkt, annars är det bara att skriva
+% \section*{Titel} och \subsection*{Understitel} skapar nya sektioner och undersektioner
+% Asterisken ser till att det inte dyker upp ett nummer bredvid namnet.
+% I övrigt är det bara att skriva text där man vill ha den
+
+\begin{document}
+\pagenumbering{gobble} % räkna inte (och skriv inte heller ut) sidnumrering
+ \begin{center}
+ \textbf{\Large TFYY51 - Yc4} \\[0.2em]
+ Mötesprotokoll för möte den 22 november i Bilbanerummet.
+ \end{center}
+ \vspace{1em}
+ \textbf{Närvarande:} Gustav (ordf), Alexander (sek), Alexander (lokal) \\[0.5em]
+ \textbf{Frånvarande:} David (ordinarie sek), Mattias \\[0.5em] % som exempel
+ \textbf{Övriga närvarande:}
+
+ \section*{Föregående protokoll}
+ \begin{itemize}
+ \item Föregående möte fördelades arbetsuppgifter och diskuterades också vad som skulle göras inför nästa möte.\
+ \end{itemize}
+
+ \section*{Dagordning}
+ \subsection*{Bilbana 2 fungerar inte som den ska}
+ Vi behöver kontakta Erik eller Victor om detta direkt efter mötet. Detta problem uppstod under gårdagen (21 nov), men fick inte tag i handledarna.
+ \subsection*{Det här är fixat:}
+
+ \begin{itemize}
+ \item Vi har fixat bootstrap
+ \item Displayen har utökad funktionallitet såsom att se spänning för varje bil mm.
+ \item Spänningkartan är anpassad till minibussen
+ \end{itemize}
+ \section*{Övrigt}
+
+
+ \section*{Nästa möte}
+ Nästa mötes hålls den 25 november kl. 10:15 inför bp5. Lokalbokare kommer då vara Mattias. Sekreterare till nästa möte är Alexander och ordförande till mötet är David.
+\end{document}
diff --git a/Motesprotokoll/2019-11-27.tex b/Motesprotokoll/2019-11-27.tex
new file mode 100644
index 0000000..2839527
--- /dev/null
+++ b/Motesprotokoll/2019-11-27.tex
@@ -0,0 +1,54 @@
+\documentclass[11pt,a4paper]{article}
+\usepackage{geometry} % gör texten lite bredare eftersom vanlig latex är för smal för a4
+
+% minska storleken på rubriker och underrubriker
+\usepackage{titlesec}
+\titleformat{\section}
+ {\normalfont\Large\bfseries}{\thesection}{1em}{}
+
+\titleformat{\subsection}
+ {\normalfont\normalsize\bfseries}{\thesubsection}{1em}{}[\vspace{-0.4em}]
+\usepackage[]{parskip}
+
+% undvik helst subsubsections
+
+%% FÖRKLARINGAR AV KOMMANDON OCH DYL.
+% \\ skapar en radbrytning
+% \\[1em] skapar en radbrytning med "1em" extra utrymme mellan rader
+% (1 em är ganska stor)
+% \textbf{Skapar text i fetstil}
+% \begin{itemize} och \end{itemize} skapar en s.k. list-enviornment (list-miljö)
+% Inuti itemize skriver man \item för att skapa en ny punkt, annars är det bara att skriva
+% \section*{Titel} och \subsection*{Understitel} skapar nya sektioner och undersektioner
+% Asterisken ser till att det inte dyker upp ett nummer bredvid namnet.
+% I övrigt är det bara att skriva text där man vill ha den
+
+\begin{document}
+\pagenumbering{gobble} % räkna inte (och skriv inte heller ut) sidnumrering
+ \begin{center}
+ \textbf{\Large TFYY51 - Yc4} \\[0.2em]
+ Mötesprotokoll för möte den 27 november i Bilbanerummet.
+ \end{center}
+ \vspace{1em}
+ \textbf{Närvarande:} David (ordf), Alexander (sek), Mattias (lokal) \\[0.5em]
+ \textbf{Frånvarande:} \\[0.5em] % som exempel
+ \textbf{Övriga närvarande: }Gustav, Albin
+
+ \section*{Föregående protokoll}
+ \begin{itemize}
+ \item Föregående möte handlade övergripande om att bana 2 inte fungerade samt att kontrollera vad som skulle göras till nästa möte.\
+ \end{itemize}
+
+ \section*{Dagordning}
+ \subsection*{Tictoc}
+ Detta togs upp på mötet då tictoc har haft för högt värde men det kommer kunna lösa utan några större problem.
+ \subsection*{Teknisk dokumentationen}
+ Under mötet gick vi igenom hur långt vi hade kommit i den tekniska dokummentationen.
+ \subsection*{Begräsningar i vår kod}
+ Det som fungerar för tillfället är att alla bilarna fungerar att starta med utan problem. Vi disskuterade också hurvida alla krav som förhandlades med Erik kommer vara genomförbara. För tillfället går det att justera referenstiden uppåt och nedåt. Dock är det oklart om systemet kommer följa kraven så som standardavvikelser etc.
+ \section*{Övrigt}
+
+
+ \section*{Nästa möte}
+ Nästa mötes hålls måndagen den andra december kl. 13:00. Lokalbokare kommer då vara Albin. Sekreterare till nästa möte är Mattias och ordförande till mötet är Alexander.
+\end{document}