From 06991623c226f3014ef51bb75bcbcbec6278ab00 Mon Sep 17 00:00:00 2001 From: Albin Date: Tue, 5 Nov 2019 18:08:21 +0100 Subject: =?UTF-8?q?Skapade=20lista=20=C3=B6ver=20approximationsdiff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kod/bilbana/yc4/main.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 793aefb..81df18b 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -32,6 +32,7 @@ car1.lap_times = []; car1.seg_times = []; 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.approximation = []; %{ car2 = struct; @@ -112,7 +113,11 @@ while 1 end car1.segment = car1.segment + 1; car1.seg_tic = tic; + approximation = car1.position; % Måste vara innan nästa rad car1.position = car1.seg_len(car1.segment); + % Jämför get_position med indata + approximation = approximation - car1.position; + car1.approximation(car1.lap, car1.segment) = approximation; end if car1.new_lap == true if car1.lap == 0 -- cgit v1.2.1 From 8f8c2e89d8f2373eeca8f39c80b6001cae383ffa Mon Sep 17 00:00:00 2001 From: Albin Date: Wed, 6 Nov 2019 17:39:00 +0100 Subject: =?UTF-8?q?B=C3=B6rjade=20skriva=20p=C3=A5=20missade=20givare?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kod/bilbana/Graph/graphs_test.m | 7 ++++++- Kod/bilbana/yc4/choose_position.m | 9 +++++++++ Kod/bilbana/yc4/detect_missed.m | 9 +++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 Kod/bilbana/yc4/choose_position.m create mode 100644 Kod/bilbana/yc4/detect_missed.m diff --git a/Kod/bilbana/Graph/graphs_test.m b/Kod/bilbana/Graph/graphs_test.m index ddc3b64..955aeee 100644 --- a/Kod/bilbana/Graph/graphs_test.m +++ b/Kod/bilbana/Graph/graphs_test.m @@ -1,3 +1,4 @@ +%{ %% Data needed A = [3.9,1.1,2.2,1.8,1.4,3.9,1.5,3.4,1.4; 4.2,1.1,2.2,1.8,1.4,3.4,1.5,3.4,1.4; @@ -11,4 +12,8 @@ car1.seg_times = C; car1.lap_times = [14.1,13.8,14.15,13.9,14.1,14]; ref_lap_time = 14; %% Actual test -graphs(car1.lap_times,ref_lap_time,car1.seg_times,5) \ No newline at end of file +graphs(car1.lap_times,ref_lap_time,car1.seg_times,5) +%} +position = 2.54; +segment = 2; +detect_missed(position,segment,1) \ No newline at end of file diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m new file mode 100644 index 0000000..36e4657 --- /dev/null +++ b/Kod/bilbana/yc4/choose_position.m @@ -0,0 +1,9 @@ +function [outputArg1,outputArg2] = choose_position(position,segment,t_missed) +%CHOOSE_POSITION Välj vad position ska vara +% Väljer position om ingen indata. Om indata kollar den om indatan är +% rimlig eller om någon givare missats. Sedan väljs position efter vilken +% givare det var som passerades. +outputArg1 = inputArg1; +outputArg2 = inputArg2; +end + diff --git a/Kod/bilbana/yc4/detect_missed.m b/Kod/bilbana/yc4/detect_missed.m new file mode 100644 index 0000000..caad2ac --- /dev/null +++ b/Kod/bilbana/yc4/detect_missed.m @@ -0,0 +1,9 @@ +function [out] = detect_missed( position, segment, track) +%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; + 0 0 0 0 0 0 0 0 0 ]; % TODO bana 2 +a = track_len(track, segment); +out = a <= position; +end + -- cgit v1.2.1 From 6dd1c252429762488fb437c36ae98292f8da64d3 Mon Sep 17 00:00:00 2001 From: Albin Date: Wed, 6 Nov 2019 19:49:39 +0100 Subject: choose position --- Kod/bilbana/yc4/choose_position.m | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index 36e4657..1c44853 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -1,9 +1,36 @@ -function [outputArg1,outputArg2] = choose_position(position,segment,t_missed) +function [new_position, seg_plus] = choose_position(position,segment,t_missed, track) %CHOOSE_POSITION Välj vad position ska vara -% Väljer position om ingen indata. Om indata kollar den om indatan är -% rimlig eller om någon givare missats. Sedan väljs position efter vilken -% givare det var som passerades. -outputArg1 = inputArg1; -outputArg2 = inputArg2; +% 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 = [19.60 2.53 3.05 4.73 7.68 8.98 10.93 14.96 17.57; + 0 0 0 0 0 0 0 0 0]; +set_pos = [0 2.53 3.05 4.73 7.68 8.98 10.93 14.96 17.57; + 0 0 0 0 0 0 0 0 0]; +pos_c = position; +pos_i = track_len( track, segment); +%% Vilken givare ligger närmast pos_c? +near = []; +for i = 1:length(track_len) + diff = abs(track_len(track,i)-pos_c); + if i == 1 + near = [i,diff]; + else + if diff < near(i) + near = [i,diff]; + end + end +end +%% Beräkning av passerad givare +if near(1) == segment + new_position = set_pos( track, segment); + seg_plus = 0; +else + seg_plus = near(1) - segment + new_position = set_pos( track, segment) +end +% TODO Bättre att utgå ifrån ingen missad givare ifall ingen annan givare +% är särskillt nära pos_c heller. (Även om det är närmare) end -- cgit v1.2.1 From d43f1e2e79f7f83e03b5089d29511a4506b3a0d5 Mon Sep 17 00:00:00 2001 From: Albin Date: Wed, 6 Nov 2019 19:53:16 +0100 Subject: lade till beep --- Kod/bilbana/yc4/choose_position.m | 1 + 1 file changed, 1 insertion(+) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index 1c44853..218a06b 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -29,6 +29,7 @@ if near(1) == segment else seg_plus = near(1) - segment new_position = set_pos( track, segment) + beep end % TODO Bättre att utgå ifrån ingen missad givare ifall ingen annan givare % är särskillt nära pos_c heller. (Även om det är närmare) -- cgit v1.2.1 From 499560dc4be6f4a42e25efb7f714635519f73bb9 Mon Sep 17 00:00:00 2001 From: Albin Date: Wed, 6 Nov 2019 19:58:00 +0100 Subject: komentar --- Kod/bilbana/yc4/choose_position.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index 218a06b..469c733 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -32,6 +32,7 @@ else beep end % TODO Bättre att utgå ifrån ingen missad givare ifall ingen annan givare -% är särskillt nära pos_c heller. (Även om det är närmare) +% är särskillt nära pos_c heller. (Även om det är närmare) Dessutom blir +% det problem om givare 2 missas. end -- cgit v1.2.1 From 8ee1f181cf46e653dbfc99d4d2e41855df925447 Mon Sep 17 00:00:00 2001 From: Albin Date: Thu, 7 Nov 2019 12:58:31 +0100 Subject: lade till choose_position i main --- Kod/bilbana/yc4/choose_position.m | 2 +- Kod/bilbana/yc4/main.m | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index 469c733..ae900d6 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -1,4 +1,4 @@ -function [new_position, seg_plus] = choose_position(position,segment,t_missed, track) +function [new_position, seg_plus] = choose_position(position,segment, track) %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 diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 81df18b..950a9f8 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -113,11 +113,18 @@ while 1 end car1.segment = car1.segment + 1; car1.seg_tic = tic; - approximation = car1.position; % Måste vara innan nästa rad - car1.position = car1.seg_len(car1.segment); + %approximation = car1.position; % Måste vara innan nästa rad + %car1.position = car1.seg_len(car1.segment); % Jämför get_position med indata - approximation = approximation - car1.position; - car1.approximation(car1.lap, car1.segment) = approximation; + %approximation = approximation - car1.position; + %car1.approximation(car1.lap, car1.segment) = approximation; + if car1.lap > 2 %Säkerhetsmarginal (Bör vara 1?) + x = choose_position(car1.position,car1.segment, 1); + car1.position = x(1); + car1.segment = car1.segment + x(2); + else + car1.position = car1.seg_len(car1.segment); + end end if car1.new_lap == true if car1.lap == 0 -- cgit v1.2.1 From fe544c6468464732bb64106f696bd6ffedade085 Mon Sep 17 00:00:00 2001 From: Albin Date: Thu, 7 Nov 2019 15:03:03 +0100 Subject: =?UTF-8?q?N=C3=A4stan=20fungerande=20primitiv=20hantering=20av=20?= =?UTF-8?q?missade=20givare?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kod/bilbana/yc4/choose_position.m | 6 ++++-- Kod/bilbana/yc4/main.m | 11 +++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index ae900d6..035d6e3 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -17,18 +17,20 @@ for i = 1:length(track_len) if i == 1 near = [i,diff]; else - if diff < near(i) + if diff < near(2) near = [i,diff]; end end 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 seg_plus = near(1) - segment - new_position = set_pos( track, segment) + new_position = set_pos( track, segment + seg_plus) beep end % TODO Bättre att utgå ifrån ingen missad givare ifall ingen annan givare diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 950a9f8..0ff21c8 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -111,7 +111,9 @@ while 1 if car1.lap ~= 0 car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); end - car1.segment = car1.segment + 1; + if car1.segment < 9 + car1.segment = car1.segment + 1; + end car1.seg_tic = tic; %approximation = car1.position; % Måste vara innan nästa rad %car1.position = car1.seg_len(car1.segment); @@ -119,9 +121,10 @@ while 1 %approximation = approximation - car1.position; %car1.approximation(car1.lap, car1.segment) = approximation; if car1.lap > 2 %Säkerhetsmarginal (Bör vara 1?) - x = choose_position(car1.position,car1.segment, 1); - car1.position = x(1); - car1.segment = car1.segment + x(2); + disp(car1); + [car1.position,seg_plus] = choose_position(car1.position,car1.segment, 1); + %car1.position = x(1); + car1.segment = car1.segment + seg_plus; else car1.position = car1.seg_len(car1.segment); end -- cgit v1.2.1 From 11b47c710d1521f5b4c1193274f2b1e25b96645b Mon Sep 17 00:00:00 2001 From: aletu130 Date: Thu, 7 Nov 2019 15:47:00 +0100 Subject: =?UTF-8?q?n=C3=A5n=20sm=C3=A5=C3=A4ndring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kod/bilbana/yc4/main.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 0ff21c8..fca9819 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -122,7 +122,8 @@ while 1 %car1.approximation(car1.lap, car1.segment) = approximation; if car1.lap > 2 %Säkerhetsmarginal (Bör vara 1?) disp(car1); - [car1.position,seg_plus] = choose_position(car1.position,car1.segment, 1); + [car1.position, seg_plus] = ... + choose_position(car1.position,car1.segment, 1); %car1.position = x(1); car1.segment = car1.segment + seg_plus; else -- cgit v1.2.1 From fa7b4bf990ac16b58b06f9fbf1356a76f60d4c96 Mon Sep 17 00:00:00 2001 From: Albin Date: Thu, 7 Nov 2019 16:47:09 +0100 Subject: Nu funkar inget --- Kod/bilbana/yc4/choose_position.m | 3 +-- Kod/bilbana/yc4/main.m | 40 +++++++++++++++++++-------------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index 035d6e3..312990c 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -4,12 +4,11 @@ function [new_position, seg_plus] = choose_position(position,segment, track) % 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 = [19.60 2.53 3.05 4.73 7.68 8.98 10.93 14.96 17.57; +track_len = [0 2.53 3.05 4.73 7.68 8.98 10.93 14.96 17.57; 0 0 0 0 0 0 0 0 0]; set_pos = [0 2.53 3.05 4.73 7.68 8.98 10.93 14.96 17.57; 0 0 0 0 0 0 0 0 0]; pos_c = position; -pos_i = track_len( track, segment); %% Vilken givare ligger närmast pos_c? near = []; for i = 1:length(track_len) diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index fca9819..33b6944 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -107,30 +107,30 @@ while 1 car1.position = get_position(aprox_v, car1.position, t); end if car1.new_check_point == true - % beep; - if car1.lap ~= 0 - car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); - end - if car1.segment < 9 + if car1.new_lap == false + if car1.lap ~= 0 + car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); + end car1.segment = car1.segment + 1; - end - car1.seg_tic = tic; - %approximation = car1.position; % Måste vara innan nästa rad - %car1.position = car1.seg_len(car1.segment); - % Jämför get_position med indata - %approximation = approximation - car1.position; - %car1.approximation(car1.lap, car1.segment) = approximation; - if car1.lap > 2 %Säkerhetsmarginal (Bör vara 1?) - disp(car1); - [car1.position, seg_plus] = ... - choose_position(car1.position,car1.segment, 1); - %car1.position = x(1); - car1.segment = car1.segment + seg_plus; - else - car1.position = car1.seg_len(car1.segment); + car1.seg_tic = tic; + %approximation = car1.position; % Måste vara innan nästa rad + %car1.position = car1.seg_len(car1.segment); + % Jämför get_position med indata + %approximation = approximation - car1.position; + %car1.approximation(car1.lap, car1.segment) = approximation; + if car1.lap > 2 %Säkerhetsmarginal (Bör vara 1?) + disp(car1); + [car1.position, seg_plus] = ... + choose_position(car1.position,car1.segment, 1); + %car1.position = x(1); + car1.segment = car1.segment + seg_plus; + else + car1.position = car1.seg_len(car1.segment); + end end end if car1.new_lap == true + disp('----------NEW LAP!----------') if car1.lap == 0 % dont save time for first lap car1.segment = 1; -- cgit v1.2.1 From 6b5407016b7d330318075cfe0d0f58cc2e4559af Mon Sep 17 00:00:00 2001 From: Albin Date: Thu, 7 Nov 2019 17:28:11 +0100 Subject: Funkar om givare inte missas --- Kod/bilbana/yc4/choose_position.m | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index 312990c..486c6d8 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -28,12 +28,15 @@ if near(1) == segment seg_plus = 0; disp('In right segment'); else - seg_plus = near(1) - segment - new_position = set_pos( track, segment + seg_plus) - beep + if near(2) < 0.5 + seg_plus = near(1) - segment + new_position = set_pos( track, segment + seg_plus) + beep + else + new_position = set_pos( track, segment); % ineff borde kombineras + seg_plus = 0; + disp('In right segment ich'); + end end -% TODO Bättre att utgå ifrån ingen missad givare ifall ingen annan givare -% är särskillt nära pos_c heller. (Även om det är närmare) Dessutom blir -% det problem om givare 2 missas. end -- cgit v1.2.1 From 84a1ee353c4d5de456254828542d4b604781db23 Mon Sep 17 00:00:00 2001 From: Albin Date: Fri, 8 Nov 2019 09:37:51 +0100 Subject: =?UTF-8?q?F=C3=B6rs=C3=B6kte=20fels=C3=B6ka=20och=20lade=20till?= =?UTF-8?q?=20timer=20f=C3=B6r=20eventuell=20missad=20givare?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kod/bilbana/yc4/choose_position.m | 2 +- Kod/bilbana/yc4/main.m | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index 486c6d8..23d4de1 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -28,7 +28,7 @@ if near(1) == segment seg_plus = 0; disp('In right segment'); else - if near(2) < 0.5 + if near(2) < 0.7 % Behöver bli smartare. Typ jämföra andra normal miss med denna miss seg_plus = near(1) - segment new_position = set_pos( track, segment + seg_plus) beep diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 33b6944..2d450b1 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -33,6 +33,7 @@ car1.seg_times = []; 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.approximation = []; +car1.miss_time = uint64(0); %{ car2 = struct; @@ -105,32 +106,36 @@ while 1 last_seg_times1 = car1.seg_times(car1.lap - 1, 1:9); aprox_v = get_aprox_v(car1.segment, last_seg_times1); car1.position = get_position(aprox_v, car1.position, t); + if detect_missed( car1.position, car1.segment, 1) + disp('Miss?'); + disp(toc(car1.miss_time)); + if car1.miss_time == 0 + car1.miss_time = tic; + end + end end if car1.new_check_point == true - if car1.new_lap == false + if car1.new_lap == false % choose_position krachar vid nytt varv (seg 10) if car1.lap ~= 0 car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); end car1.segment = car1.segment + 1; car1.seg_tic = tic; - %approximation = car1.position; % Måste vara innan nästa rad - %car1.position = car1.seg_len(car1.segment); - % Jämför get_position med indata - %approximation = approximation - car1.position; - %car1.approximation(car1.lap, car1.segment) = approximation; - if car1.lap > 2 %Säkerhetsmarginal (Bör vara 1?) + if car1.lap > 2 % Säkerhetsmarginal (Bör vara 1?) disp(car1); [car1.position, seg_plus] = ... choose_position(car1.position,car1.segment, 1); %car1.position = x(1); car1.segment = car1.segment + seg_plus; + car1.miss_time = uint64(0); else car1.position = car1.seg_len(car1.segment); + car1.miss_time = uint64(0); end end end if car1.new_lap == true - disp('----------NEW LAP!----------') + disp('------------NEW LAP------------') if car1.lap == 0 % dont save time for first lap car1.segment = 1; -- cgit v1.2.1 From 2ad11b85f7d5d4a71477a02a1ca5ba8786652c35 Mon Sep 17 00:00:00 2001 From: Albin Date: Fri, 8 Nov 2019 11:59:19 +0100 Subject: Missade givare --- Kod/bilbana/yc4/choose_position.m | 5 ++--- Kod/bilbana/yc4/get_aprox_v.m | 16 +++++++++++++--- Kod/bilbana/yc4/main.m | 27 ++++++++++++++++----------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/Kod/bilbana/yc4/choose_position.m b/Kod/bilbana/yc4/choose_position.m index 23d4de1..39be6e4 100644 --- a/Kod/bilbana/yc4/choose_position.m +++ b/Kod/bilbana/yc4/choose_position.m @@ -29,9 +29,8 @@ if near(1) == segment 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 = near(1) - segment - new_position = set_pos( track, segment + seg_plus) - beep + 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; diff --git a/Kod/bilbana/yc4/get_aprox_v.m b/Kod/bilbana/yc4/get_aprox_v.m index 41a3c9e..64fa821 100644 --- a/Kod/bilbana/yc4/get_aprox_v.m +++ b/Kod/bilbana/yc4/get_aprox_v.m @@ -1,4 +1,4 @@ -function [v] = get_aprox_v(cur_seg,last_seg_times) +function [v] = get_aprox_v(cur_seg, lap, seg_times) %GET_APROX_V Tillfällig? Behövs för att testa get_position. Ger %medelhastigheten för nuvarande segment på förra varvet. %{ @@ -8,8 +8,18 @@ last_seg_times: 1x9 vektor med f 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]; -%v = last_seg_times(cur_seg)/seg_len(cur_seg); -v = seg_len1(cur_seg)/last_seg_times(cur_seg); +if cur_seg > 9 + cur_seg = cur_seg - 9; +end + +while lap > 0 + lap = lap - 1; + if seg_times(lap, cur_seg) ~= 0 + v = seg_len1(cur_seg)/seg_times(lap, cur_seg); + return + end +end +disp('bara nollor?'); % switch(track) % case 1 diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 2d450b1..6612e4f 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -104,14 +104,15 @@ while 1 %% CALC POSITION (CAR 1) if car1.lap > 1 last_seg_times1 = car1.seg_times(car1.lap - 1, 1:9); - aprox_v = get_aprox_v(car1.segment, last_seg_times1); + aprox_v = get_aprox_v(car1.segment + detect_missed( car1.position, car1.segment, 1), car1.lap, car1.seg_times); car1.position = get_position(aprox_v, car1.position, t); if detect_missed( car1.position, car1.segment, 1) disp('Miss?'); - disp(toc(car1.miss_time)); - if car1.miss_time == 0 - car1.miss_time = tic; - end + + %disp(toc(car1.miss_time)); + %if car1.miss_time == 0 + % car1.miss_time = tic; + %end end end if car1.new_check_point == true @@ -123,14 +124,18 @@ while 1 car1.seg_tic = tic; if car1.lap > 2 % Säkerhetsmarginal (Bör vara 1?) disp(car1); - [car1.position, seg_plus] = ... - choose_position(car1.position,car1.segment, 1); - %car1.position = x(1); - car1.segment = car1.segment + seg_plus; - car1.miss_time = uint64(0); + [new_position, seg_plus] = ... + choose_position(car1.position, car1.segment, 1); + if seg_plus ~= 0 && car1.segment == 1 + disp('Hoppar över missad givare 1/2'); + else + car1.position = new_position; + car1.segment = car1.segment + seg_plus; + end + %car1.miss_time = uint64(0); else car1.position = car1.seg_len(car1.segment); - car1.miss_time = uint64(0); + %car1.miss_time = uint64(0); end end end -- cgit v1.2.1 From 5544888a5775b7ee21a1db9f540fb05702ecd10b Mon Sep 17 00:00:00 2001 From: Albin Date: Fri, 8 Nov 2019 11:59:38 +0100 Subject: Tvinga missade givare MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Med inställbar procent. Beep när givare tvingas hoppas över. --- Kod/bilbana/yc4/main.m | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 6612e4f..e2f223e 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -33,7 +33,8 @@ car1.seg_times = []; 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.approximation = []; -car1.miss_time = uint64(0); +car1.miss_probability = 0.1; +%car1.miss_time = uint64(0); %{ car2 = struct; @@ -91,6 +92,11 @@ while 1 %% READ if car1.running == true [car1.new_lap, car1.new_check_point, car1.time] = get_car_position(1); + if car1.new_check_point == true && rand < car1.miss_probability && car1.lap >= 4 + disp('Hoppar över givare'); + car1.new_check_point = false; + beep; + end end %{ if car2.running == true @@ -149,7 +155,7 @@ while 1 car1.lap_tic = tic; continue; end - beep; + % beep; car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); car1.seg_tic = tic; car1.lap_times(car1.lap) = toc(car1.lap_tic); @@ -267,7 +273,7 @@ while 1 highToc = t; %Om det nya v�rdet p� pausen �r h�gre �n den tidigare h�gsta s� sparas det som den h�gsta end if t > 0.1 - beep; + % beep; end break; end -- cgit v1.2.1 From 319b1baf24acc503e29e4716248aec3bbb81622a Mon Sep 17 00:00:00 2001 From: Albin Date: Mon, 11 Nov 2019 21:14:43 +0100 Subject: =?UTF-8?q?Skrev=20sp=C3=A5na=20p=C3=A5=20governor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sp\303\245na p\303\245 governor.txt" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" diff --git "a/Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" "b/Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" new file mode 100644 index 0000000..94403df --- /dev/null +++ "b/Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" @@ -0,0 +1,17 @@ +Funktionen ska utifrÃ¥n köregenskaper för bil, vald referenstid och, om gemensam mÃ¥lgÃ¥ng aktiverad, skillnad i bilarnas placering se till att rätt gaspÃ¥drag skickas till banan. + +Vi utgÃ¥r ifrÃ¥n de redan skrivna bankartorna (bana1.mat och bana2.mat) och multiplicerar dess spänningsvärde med en car_constant. Programmet kommer sedan ihÃ¥g hur lÃ¥ng tid varje segment tagit för olika car_constant och gör en modell över hur hög den bör vara för att nÃ¥ en viss segmentstid. gov_set väljer sedan segmentstider utifrÃ¥n vald referenstid (och om gemensam mÃ¥lgÃ¥ng aktiverad car_diff). + +gov_mem +Sparar car_constant och tid frÃ¥n varje segment. + +gov_calc +gör en modell över hur lÃ¥ng tid ett segment tar relativt sin car_constant. + +gov_set +Väljer en tid för varje segment utifrÃ¥n referenstid, car_diff (om gemensam mÃ¥lgÃ¥ng aktiverad) + +Almänna komentarer: +Kan behövas nÃ¥n form av ingÃ¥ngshastighet till varje segment sÃ¥ att segmentstidens samband med car_constant tydligare kan ses. Beroende pÃ¥ hur snabbt bilen accelererar kan detta vara helt onödigt. +Hur ska kallibrerigsvarven hanteras? Antagligen behövs specialkod för första varvet sÃ¥ att bilen inte behöver köra jättelÃ¥ngsamt hela varvet. Kanse gÃ¥r det att gissa pÃ¥ en lite högre car_constant efter bara nÃ¥t varv. +Tänker att övre gräns ej behöver sättas om bankartorna är korrekt gjorda. \ No newline at end of file -- cgit v1.2.1 From 8dc7e738c5545d26ff0379e593a2e3980e6737bc Mon Sep 17 00:00:00 2001 From: Albin Date: Tue, 12 Nov 2019 09:15:37 +0100 Subject: typo #29 --- "Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" "b/Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" index 94403df..e8cb78b 100644 --- "a/Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" +++ "b/Dokument/Teknisk Dokumentation/sp\303\245na p\303\245 governor.txt" @@ -1,4 +1,4 @@ -Funktionen ska utifrÃ¥n köregenskaper för bil, vald referenstid och, om gemensam mÃ¥lgÃ¥ng aktiverad, skillnad i bilarnas placering se till att rätt gaspÃ¥drag skickas till banan. +Funktionen ska utifrÃ¥n köregenskaper för bil, vald referenstid och, om gemensam mÃ¥lgÃ¥ng aktiverad, skillnad i bilarnas placering och se till att rätt gaspÃ¥drag skickas till banan. Vi utgÃ¥r ifrÃ¥n de redan skrivna bankartorna (bana1.mat och bana2.mat) och multiplicerar dess spänningsvärde med en car_constant. Programmet kommer sedan ihÃ¥g hur lÃ¥ng tid varje segment tagit för olika car_constant och gör en modell över hur hög den bör vara för att nÃ¥ en viss segmentstid. gov_set väljer sedan segmentstider utifrÃ¥n vald referenstid (och om gemensam mÃ¥lgÃ¥ng aktiverad car_diff). -- cgit v1.2.1