diff options
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 Binary files differnew file mode 100644 index 0000000..b02a028 --- /dev/null +++ b/Dokument/Teknisk Dokumentation/Figures/The_Earth_seen_from_Apollo_17.jpg diff --git a/Dokument/Teknisk Dokumentation/Figures/logo.jpg b/Dokument/Teknisk Dokumentation/Figures/logo.jpg Binary files differnew file mode 100644 index 0000000..52b960d --- /dev/null +++ b/Dokument/Teknisk Dokumentation/Figures/logo.jpg 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 Binary files differnew file mode 100644 index 0000000..cd01713 --- /dev/null +++ b/Dokument/Tidsplan/05Tidplan01.xlsx diff --git a/Kod/bilbana/files/Bana1.mat b/Kod/bilbana/files/Bana1.mat Binary files differindex d83861f..e745c59 100644 --- a/Kod/bilbana/files/Bana1.mat +++ b/Kod/bilbana/files/Bana1.mat diff --git a/Kod/bilbana/files/Bana2.mat b/Kod/bilbana/files/Bana2.mat Binary files differindex 622fc18..743de15 100644 --- a/Kod/bilbana/files/Bana2.mat +++ b/Kod/bilbana/files/Bana2.mat 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 Binary files differnew file mode 100644 index 0000000..534e1f1 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T15.47.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.28.mat b/Kod/matfiler/bilbana2_2019-11-20T18.28.mat Binary files differnew file mode 100644 index 0000000..3ff84b1 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.28.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.29.mat b/Kod/matfiler/bilbana2_2019-11-20T18.29.mat Binary files differnew file mode 100644 index 0000000..b2ee5d8 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.29.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.37.mat b/Kod/matfiler/bilbana2_2019-11-20T18.37.mat Binary files differnew file mode 100644 index 0000000..91c314a --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.37.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.44.mat b/Kod/matfiler/bilbana2_2019-11-20T18.44.mat Binary files differnew file mode 100644 index 0000000..b96c405 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.44.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.45.mat b/Kod/matfiler/bilbana2_2019-11-20T18.45.mat Binary files differnew file mode 100644 index 0000000..18c1108 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.45.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.49.mat b/Kod/matfiler/bilbana2_2019-11-20T18.49.mat Binary files differnew file mode 100644 index 0000000..367c866 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.49.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.51.mat b/Kod/matfiler/bilbana2_2019-11-20T18.51.mat Binary files differnew file mode 100644 index 0000000..68b9133 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.51.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.52.mat b/Kod/matfiler/bilbana2_2019-11-20T18.52.mat Binary files differnew file mode 100644 index 0000000..575b3ce --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.52.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.53.mat b/Kod/matfiler/bilbana2_2019-11-20T18.53.mat Binary files differnew file mode 100644 index 0000000..aef34d1 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.53.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T18.59.mat b/Kod/matfiler/bilbana2_2019-11-20T18.59.mat Binary files differnew file mode 100644 index 0000000..5cf94bc --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T18.59.mat diff --git a/Kod/matfiler/bilbana2_2019-11-20T19.01.mat b/Kod/matfiler/bilbana2_2019-11-20T19.01.mat Binary files differnew file mode 100644 index 0000000..04491d0 --- /dev/null +++ b/Kod/matfiler/bilbana2_2019-11-20T19.01.mat 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} |
