From 5ca6dbf74613a273e5a656614ac0edbeadb27330 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 18 Oct 2019 16:11:06 +0200 Subject: =?UTF-8?q?F=C3=B6rsta=20utkast?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kod/bilbana/yc4/main.m | 110 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Kod/bilbana/yc4/main.m diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m new file mode 100644 index 0000000..5ad0a6d --- /dev/null +++ b/Kod/bilbana/yc4/main.m @@ -0,0 +1,110 @@ +%% INIT +% TODO init display + +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) + +car1 = struct; +car1.segment = 1; +car1.lap = 0; +car1.lap_times = []; +car1.seg_times = []; + +car2 = struct; +car2.segment = 1; +car2.lap = 0; +car2.lap_times = []; +car2.seg_times = []; + +tocs = []; + +%% MAIN LOOP +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); + + %% CHECK LAP AND CHECKPOINT (CAR 1) + if car1.new_check_point == true + % beep; + car1.seg_times(car1.lap, car1.segment) = -1; % TODO + car1.segment = car.segment + 1; + elseif car1.new_lap == true + beep; + if car1.lap == 0 + % dont save time for first lap + car1.segment = 1; + continue; + end + car1.seg_times(car1.lap, car1.segment) = -1; % TODO + car1.lap_times(car1.lap) = -1; % TODO + car1.segment = 1; + car1.lap = car1.lap + 1; + end + + %% CHECK LAP AND CHECKPOINT (CAR 2) + if car2.new_check_point == true + % beep; + car2.seg_times(car2.lap, car2.segment) = -1; % TODO + car2.segment = car.segment + 1; + elseif car2.new_lap == true + beep; + if car2.lap == 0 + % dont save time for first lap + car2.segment = 1; + continue; + end + car2.seg_times(car2.lap, car2.segment) = -1; % TODO + car2.lap_times(car2.lap) = -1; % TODO + car2.segment = 1; + car2.lap = car2.lap + 1; + end + + %% CALCULATE (CAR 1) + car1.car_constant = get_car_constant(); + car1.v = get_new_v(car1.segment); + car1.track_u_constant = get_track_u_constant(); + car1.u = get_new_u(car1.v, car1.car_constant, car1.track_u_constant); + + %% CALCULATE (CAR 2) + car2.car_constant = get_car_constant(); + car2.v = get_new_v(car2.segment); + car2.track_u_constant = get_track_u_constant(); + car2.u = get_new_u(car2.v, car2.car_constant, car2.track_u_constant); + + %% EXECUTE + set_car_speed(1, car1.u); + set_car_speed(2, car2.u); + + %% DISPLAY + + %% END OF LOOP + tocs(end + 1) = toc; + pause(0.1) + tic; +end + +%% END OF PROGRAM +disp(car1); +disp(car2); + +terminate(1); +terminate(2); +% TODO terminate display \ No newline at end of file -- cgit v1.2.1 From 6e68e4311dc36cacafa874f632f9f11d94a752b4 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 18 Oct 2019 16:59:49 +0200 Subject: Merge branch 'david' --- Kod/bilbana/yc4/get_car_constant.m | 9 ++- Kod/bilbana/yc4/get_new_v.m | 5 +- Kod/bilbana/yc4/main_2.asv | 120 ++++++++++++++++++++++++++++++++++++ Kod/bilbana/yc4/main_2.m | 121 +++++++++++++++++++++++++++++++++++++ 4 files changed, 252 insertions(+), 3 deletions(-) create mode 100644 Kod/bilbana/yc4/main_2.asv create mode 100644 Kod/bilbana/yc4/main_2.m diff --git a/Kod/bilbana/yc4/get_car_constant.m b/Kod/bilbana/yc4/get_car_constant.m index b2d61f0..7f3aafb 100644 --- a/Kod/bilbana/yc4/get_car_constant.m +++ b/Kod/bilbana/yc4/get_car_constant.m @@ -1,7 +1,12 @@ function [ car_constant ] = get_car_constant( in_pos, pos ) %GET_CAR_CONSTANT Summary of this function goes here % Detailed explanation goes here - - + switch(in_pos) + case 1 + car_constant = 1; + case 2 + car_constant = 1.2; + end + return end diff --git a/Kod/bilbana/yc4/get_new_v.m b/Kod/bilbana/yc4/get_new_v.m index 0286e0a..a0aa19e 100644 --- a/Kod/bilbana/yc4/get_new_v.m +++ b/Kod/bilbana/yc4/get_new_v.m @@ -1,7 +1,10 @@ function [ new_v ] = get_new_v( old_v, speed_constant, target_diff, car_position_diff, agressiveness ) %GET_NEW_V Summary of this function goes here % Detailed explanation goes here + v = [35, 25, 30, 30, 40, 50, 45, 50, 35]; - + new_v = v(old_v); + + return end diff --git a/Kod/bilbana/yc4/main_2.asv b/Kod/bilbana/yc4/main_2.asv new file mode 100644 index 0000000..24af4ce --- /dev/null +++ b/Kod/bilbana/yc4/main_2.asv @@ -0,0 +1,120 @@ +%% INIT +% TODO init display + +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) + +car1 = struct; +car1.segment = 1; +car1.lap = 0; +car1.lap_times = []; +car1.seg_times = []; + +car2 = struct; +car2.segment = 1; +car2.lap = 0; +car2.lap_times = []; +car2.seg_times = []; + +tocs = []; + +%% MAIN LOOP +while 1 + tic; + %% 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); + + disp(car1); + disp(car2); + + %% CHECK LAP AND CHECKPOINT (CAR 1) + if car1.new_check_point == true + % beep; + car1.seg_times(car1.lap, car1.segment) = -1; % TODO + car1.segment = car.segment + 1; + elseif car1.new_lap == true + beep; + if car1.lap == 0 + % dont save time for first lap + car1.segment = 1; + car1.lap = car1.lap + 1; + continue; + end + car1.seg_times(car1.lap, car1.segment) = -1; % TODO + car1.lap_times(car1.lap) = -1; % TODO + car1.segment = 1; + car1.lap = car1.lap + 1; + %disp('car 1'); + %disp(car1); + end + + %% CHECK LAP AND CHECKPOINT (CAR 2) + if car2.new_check_point == true + beep; + car2.seg_times(car2.lap, car2.segment) = -1; % TODO + car2.segment = car.segment + 1; + elseif car2.new_lap == true + beep; + if car2.lap == 0 + % dont save time for first lap + car2.segment = 1; + car2.lap = car2.lap + 1; + continue; + end + car2.seg_times(car2.lap, car2.segment) = -1; % TODO + car2.lap_times(car2.lap) = -1; % TODO + car2.segment = 1; + car2.lap = car2.lap + 1; + %disp('car 2'); + %disp(car2); + end + + %% CALCULATE (CAR 1) + car1.car_constant = get_car_constant(1); + car1.v = get_new_v(car1.segment); + car1.track_u_constant = get_track_u_constant(); + car1.u = get_new_u(car1.v, car1.car_constant, car1.track_u_constant); + + %% CALCULATE (CAR 2) + car2.car_constant = get_car_constant(2); + car2.v = get_new_v(car2.segment); + car2.track_u_constant = get_track_u_constant(); + car2.u = get_new_u(car2.v, car2.car_constant, car2.track_u_constant); + + %% EXECUTE + set_car_speed(1, car1.u); + set_car_speed(2, car2.u); + + %% DISPLAY + + %% END OF LOOP + pause(0.1) + % tocs(end + 1) = toc; +end + +%% END OF PROGRAM +disp(tocs); +disp(car1); +disp(car2); + +terminate(1); +terminate(2); +% TODO terminate display \ No newline at end of file diff --git a/Kod/bilbana/yc4/main_2.m b/Kod/bilbana/yc4/main_2.m new file mode 100644 index 0000000..97b809c --- /dev/null +++ b/Kod/bilbana/yc4/main_2.m @@ -0,0 +1,121 @@ +%% INIT +% TODO init display + +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) + +car1 = struct; +car1.segment = 1; +car1.lap = 0; +car1.lap_times = []; +car1.seg_times = []; + +car2 = struct; +car2.segment = 1; +car2.lap = 0; +car2.lap_times = []; +car2.seg_times = []; + +tocs = []; + +%% MAIN LOOP +while 1 + %tic; + %% PRE-LOOP + if strcmp(get(hf,'currentcharacter'),'q') + beep; + 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); + + + %% CHECK LAP AND CHECKPOINT (CAR 1) + if car1.new_check_point == true + disp('car 1') + disp(car1.lap); + disp(car1.segment); + car1.seg_times(car1.lap, car1.segment) = -1; % TODO + car1.segment = car1.segment + 1; + elseif car1.new_lap == true + if car1.lap == 0 + % dont save time for first lap + car1.segment = 1; + car1.lap = car1.lap + 1; + continue; + end + car1.seg_times(car1.lap, car1.segment) = -1; % TODO + car1.lap_times(car1.lap) = -1; % TODO + car1.segment = 1; + car1.lap = car1.lap + 1; + end + + %% CHECK LAP AND CHECKPOINT (CAR 2) + if car2.new_check_point == true + disp('car 2') + disp(car2.lap); + disp(car2.segment); + car2.seg_times(car2.lap, car2.segment) = -1; % TODO + car2.segment = car2.segment + 1; + elseif car2.new_lap == true + beep; + if car2.lap == 0 + % dont save time for first lap + car2.segment = 1; + car2.lap = car2.lap + 1; + continue; + end + car2.seg_times(car2.lap, car2.segment) = -1; % TODO + car2.lap_times(car2.lap) = -1; % TODO + car2.segment = 1; + car2.lap = car2.lap + 1; + %disp('car 2'); + %disp(car2); + end + + %% CALCULATE (CAR 1) + car1.car_constant = get_car_constant(1); + car1.v = get_new_v(car1.segment); + car1.track_u_constant = get_track_u_constant(); + car1.u = get_new_u(car1.v, car1.car_constant, car1.track_u_constant); + + %% CALCULATE (CAR 2) + car2.car_constant = get_car_constant(2); + car2.v = get_new_v(car2.segment); + car2.track_u_constant = get_track_u_constant(); + car2.u = get_new_u(car2.v, car2.car_constant, car2.track_u_constant); + + %% EXECUTE + set_car_speed(1, car1.u); + set_car_speed(2, car2.u); + + %% DISPLAY + + %% END OF LOOP + pause(0.1) + % tocs(end + 1) = toc; +end + +%% END OF PROGRAM +disp(tocs); +disp(car1); +disp(car2); + + +terminate(1); +terminate(2); +% TODO terminate display \ No newline at end of file -- cgit v1.2.1 From 7ce378120ce6817b1383a51fe645d3deb76654e6 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 18 Oct 2019 17:10:29 +0200 Subject: Fix function calls and broken code --- Kod/bilbana/yc4/main.m | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 5ad0a6d..c8e1218 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -44,13 +44,16 @@ while 1 %% CHECK LAP AND CHECKPOINT (CAR 1) if car1.new_check_point == true % beep; - car1.seg_times(car1.lap, car1.segment) = -1; % TODO - car1.segment = car.segment + 1; + if car1.lap ~= 0 + car1.seg_times(car1.lap, car1.segment) = -1; % TODO + end + car1.segment = car1.segment + 1; elseif car1.new_lap == true - beep; + % beep; if car1.lap == 0 % dont save time for first lap car1.segment = 1; + car1.lap = car1.lap + 1; continue; end car1.seg_times(car1.lap, car1.segment) = -1; % TODO @@ -62,13 +65,16 @@ while 1 %% CHECK LAP AND CHECKPOINT (CAR 2) if car2.new_check_point == true % beep; - car2.seg_times(car2.lap, car2.segment) = -1; % TODO - car2.segment = car.segment + 1; + if car2.lap ~= 0 + car2.seg_times(car2.lap, car2.segment) = -1; % TODO + end + car2.segment = car2.segment + 1; elseif car2.new_lap == true - beep; + % beep; if car2.lap == 0 % dont save time for first lap car2.segment = 1; + car2.lap = car2.lap + 1; continue; end car2.seg_times(car2.lap, car2.segment) = -1; % TODO @@ -78,13 +84,13 @@ while 1 end %% CALCULATE (CAR 1) - car1.car_constant = get_car_constant(); + car1.car_constant = get_car_constant(1); car1.v = get_new_v(car1.segment); car1.track_u_constant = get_track_u_constant(); car1.u = get_new_u(car1.v, car1.car_constant, car1.track_u_constant); %% CALCULATE (CAR 2) - car2.car_constant = get_car_constant(); + car2.car_constant = get_car_constant(2); car2.v = get_new_v(car2.segment); car2.track_u_constant = get_track_u_constant(); car2.u = get_new_u(car2.v, car2.car_constant, car2.track_u_constant); -- cgit v1.2.1 From 5578258c973c9997a3dff72e34fa817ffcebd432 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 18 Oct 2019 17:18:47 +0200 Subject: Working freeze-code --- Kod/bilbana/yc4/get_car_constant.m | 23 ++++++++++++++++------- Kod/bilbana/yc4/get_new_u.m | 9 ++++++++- Kod/bilbana/yc4/get_new_v.m | 25 ++++++++++++++++++------- Kod/bilbana/yc4/get_track_u_constant.m | 3 +-- Kod/bilbana/yc4/main.m | 1 + 5 files changed, 44 insertions(+), 17 deletions(-) diff --git a/Kod/bilbana/yc4/get_car_constant.m b/Kod/bilbana/yc4/get_car_constant.m index 7f3aafb..eb3bd22 100644 --- a/Kod/bilbana/yc4/get_car_constant.m +++ b/Kod/bilbana/yc4/get_car_constant.m @@ -1,12 +1,21 @@ function [ car_constant ] = get_car_constant( in_pos, pos ) %GET_CAR_CONSTANT Summary of this function goes here % Detailed explanation goes here - switch(in_pos) - case 1 - car_constant = 1; - case 2 - car_constant = 1.2; - end - return + +%{ +GET_CAR_CONSTANT: +car_constant: Påverkar new_u så att new_u tillsammans med track_u_constant motsvarar den hastighet som +anges av new_v. car_constant ändras endast vid ny indata, vilket innebär att den är konstant under resterande +cykler fram tills nästa givare passeras. Genom att jämföra positionen som fås av givarna med indatan kan programmet +räkna ut felmarginalen som har uppstått och kalibrera car_constant new_u kan justeras med större +precision. +%} + +switch(in_pos) + case 1 + car_constant = 1; + case 2 + car_constant = 1.2; +end end diff --git a/Kod/bilbana/yc4/get_new_u.m b/Kod/bilbana/yc4/get_new_u.m index 39662b5..ee624fe 100644 --- a/Kod/bilbana/yc4/get_new_u.m +++ b/Kod/bilbana/yc4/get_new_u.m @@ -2,6 +2,13 @@ function [ new_u ] = get_new_u( new_v, car_constant, track_u_constant ) %GET_NEW_U Summary of this function goes here % Detailed explanation goes here - +%{ +GET_NEW_U: +new_u: Den spänning som ska appliceras beroende på vilken hastighet new_v anger. Ett högre new_v innebär +ett högre new_u. De andra parametrarna som påverkar new_u är car_constant och track_u_constant, desto högre +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; end diff --git a/Kod/bilbana/yc4/get_new_v.m b/Kod/bilbana/yc4/get_new_v.m index a0aa19e..b357410 100644 --- a/Kod/bilbana/yc4/get_new_v.m +++ b/Kod/bilbana/yc4/get_new_v.m @@ -1,10 +1,21 @@ function [ new_v ] = get_new_v( old_v, speed_constant, target_diff, car_position_diff, agressiveness ) -%GET_NEW_V Summary of this function goes here -% Detailed explanation goes here - v = [35, 25, 30, 30, 40, 50, 45, 50, 35]; - - new_v = v(old_v); - - return +%GET_NEW_V Hastigheten som bilen ska få nästa cykel. +%{ +Tar förra cykelns hastighet (old_ v) och lägger till eller drar +av beroende på hur långt ifrån målet bilarna ligger (target_diff) och, +om gemensam målgång är aktiverad, hur långt ifrån varandra bilarna är +(car_position_diff). Beror också på agressiveness; högre agressiveness ger +större skillnad mellan new_v och old_v medan ett lågt värde gör att new_v +inte ändras särskilt mycket. new_v används sedan för att sätta new_u. +Högre new_v ger högre new_u och lägre new_v ger lägre_u. +%} + +%{ +GET_NEW_V: +new_v: Den hastighet som bilen ska få nästa cykel. +%} + +v = [35, 25, 30, 30, 40, 50, 45, 50, 35]; +new_v = v(old_v); end diff --git a/Kod/bilbana/yc4/get_track_u_constant.m b/Kod/bilbana/yc4/get_track_u_constant.m index 3201f1b..50db463 100644 --- a/Kod/bilbana/yc4/get_track_u_constant.m +++ b/Kod/bilbana/yc4/get_track_u_constant.m @@ -1,7 +1,6 @@ function [ track_u_constant ] = get_track_u_constant( position ) %GET_TRACK_U_CONSTANT Summary of this function goes here % Detailed explanation goes here - - +track_u_constant = 1; end diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index c8e1218..53c6f00 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -108,6 +108,7 @@ while 1 end %% END OF PROGRAM +disp(tocs); disp(car1); disp(car2); -- cgit v1.2.1 From 174b985c8edcb850775f3eb637b88aa730c6c125 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 18 Oct 2019 17:28:11 +0200 Subject: Removed unneccesarry files --- Kod/bilbana/yc4/main_2.asv | 120 -------------------------------------------- Kod/bilbana/yc4/main_2.m | 121 --------------------------------------------- 2 files changed, 241 deletions(-) delete mode 100644 Kod/bilbana/yc4/main_2.asv delete mode 100644 Kod/bilbana/yc4/main_2.m diff --git a/Kod/bilbana/yc4/main_2.asv b/Kod/bilbana/yc4/main_2.asv deleted file mode 100644 index 24af4ce..0000000 --- a/Kod/bilbana/yc4/main_2.asv +++ /dev/null @@ -1,120 +0,0 @@ -%% INIT -% TODO init display - -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) - -car1 = struct; -car1.segment = 1; -car1.lap = 0; -car1.lap_times = []; -car1.seg_times = []; - -car2 = struct; -car2.segment = 1; -car2.lap = 0; -car2.lap_times = []; -car2.seg_times = []; - -tocs = []; - -%% MAIN LOOP -while 1 - tic; - %% 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); - - disp(car1); - disp(car2); - - %% CHECK LAP AND CHECKPOINT (CAR 1) - if car1.new_check_point == true - % beep; - car1.seg_times(car1.lap, car1.segment) = -1; % TODO - car1.segment = car.segment + 1; - elseif car1.new_lap == true - beep; - if car1.lap == 0 - % dont save time for first lap - car1.segment = 1; - car1.lap = car1.lap + 1; - continue; - end - car1.seg_times(car1.lap, car1.segment) = -1; % TODO - car1.lap_times(car1.lap) = -1; % TODO - car1.segment = 1; - car1.lap = car1.lap + 1; - %disp('car 1'); - %disp(car1); - end - - %% CHECK LAP AND CHECKPOINT (CAR 2) - if car2.new_check_point == true - beep; - car2.seg_times(car2.lap, car2.segment) = -1; % TODO - car2.segment = car.segment + 1; - elseif car2.new_lap == true - beep; - if car2.lap == 0 - % dont save time for first lap - car2.segment = 1; - car2.lap = car2.lap + 1; - continue; - end - car2.seg_times(car2.lap, car2.segment) = -1; % TODO - car2.lap_times(car2.lap) = -1; % TODO - car2.segment = 1; - car2.lap = car2.lap + 1; - %disp('car 2'); - %disp(car2); - end - - %% CALCULATE (CAR 1) - car1.car_constant = get_car_constant(1); - car1.v = get_new_v(car1.segment); - car1.track_u_constant = get_track_u_constant(); - car1.u = get_new_u(car1.v, car1.car_constant, car1.track_u_constant); - - %% CALCULATE (CAR 2) - car2.car_constant = get_car_constant(2); - car2.v = get_new_v(car2.segment); - car2.track_u_constant = get_track_u_constant(); - car2.u = get_new_u(car2.v, car2.car_constant, car2.track_u_constant); - - %% EXECUTE - set_car_speed(1, car1.u); - set_car_speed(2, car2.u); - - %% DISPLAY - - %% END OF LOOP - pause(0.1) - % tocs(end + 1) = toc; -end - -%% END OF PROGRAM -disp(tocs); -disp(car1); -disp(car2); - -terminate(1); -terminate(2); -% TODO terminate display \ No newline at end of file diff --git a/Kod/bilbana/yc4/main_2.m b/Kod/bilbana/yc4/main_2.m deleted file mode 100644 index 97b809c..0000000 --- a/Kod/bilbana/yc4/main_2.m +++ /dev/null @@ -1,121 +0,0 @@ -%% INIT -% TODO init display - -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) - -car1 = struct; -car1.segment = 1; -car1.lap = 0; -car1.lap_times = []; -car1.seg_times = []; - -car2 = struct; -car2.segment = 1; -car2.lap = 0; -car2.lap_times = []; -car2.seg_times = []; - -tocs = []; - -%% MAIN LOOP -while 1 - %tic; - %% PRE-LOOP - if strcmp(get(hf,'currentcharacter'),'q') - beep; - 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); - - - %% CHECK LAP AND CHECKPOINT (CAR 1) - if car1.new_check_point == true - disp('car 1') - disp(car1.lap); - disp(car1.segment); - car1.seg_times(car1.lap, car1.segment) = -1; % TODO - car1.segment = car1.segment + 1; - elseif car1.new_lap == true - if car1.lap == 0 - % dont save time for first lap - car1.segment = 1; - car1.lap = car1.lap + 1; - continue; - end - car1.seg_times(car1.lap, car1.segment) = -1; % TODO - car1.lap_times(car1.lap) = -1; % TODO - car1.segment = 1; - car1.lap = car1.lap + 1; - end - - %% CHECK LAP AND CHECKPOINT (CAR 2) - if car2.new_check_point == true - disp('car 2') - disp(car2.lap); - disp(car2.segment); - car2.seg_times(car2.lap, car2.segment) = -1; % TODO - car2.segment = car2.segment + 1; - elseif car2.new_lap == true - beep; - if car2.lap == 0 - % dont save time for first lap - car2.segment = 1; - car2.lap = car2.lap + 1; - continue; - end - car2.seg_times(car2.lap, car2.segment) = -1; % TODO - car2.lap_times(car2.lap) = -1; % TODO - car2.segment = 1; - car2.lap = car2.lap + 1; - %disp('car 2'); - %disp(car2); - end - - %% CALCULATE (CAR 1) - car1.car_constant = get_car_constant(1); - car1.v = get_new_v(car1.segment); - car1.track_u_constant = get_track_u_constant(); - car1.u = get_new_u(car1.v, car1.car_constant, car1.track_u_constant); - - %% CALCULATE (CAR 2) - car2.car_constant = get_car_constant(2); - car2.v = get_new_v(car2.segment); - car2.track_u_constant = get_track_u_constant(); - car2.u = get_new_u(car2.v, car2.car_constant, car2.track_u_constant); - - %% EXECUTE - set_car_speed(1, car1.u); - set_car_speed(2, car2.u); - - %% DISPLAY - - %% END OF LOOP - pause(0.1) - % tocs(end + 1) = toc; -end - -%% END OF PROGRAM -disp(tocs); -disp(car1); -disp(car2); - - -terminate(1); -terminate(2); -% TODO terminate display \ No newline at end of file -- cgit v1.2.1 From 18d4a7ebf4b10fe70cd33fd490846736f561605b Mon Sep 17 00:00:00 2001 From: David Date: Fri, 18 Oct 2019 17:47:30 +0200 Subject: =?UTF-8?q?L=C3=A4gre=20hastighet=20=C3=B6ver=20bron?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Kod/bilbana/yc4/get_new_v.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kod/bilbana/yc4/get_new_v.m b/Kod/bilbana/yc4/get_new_v.m index b357410..26bf175 100644 --- a/Kod/bilbana/yc4/get_new_v.m +++ b/Kod/bilbana/yc4/get_new_v.m @@ -15,7 +15,7 @@ GET_NEW_V: new_v: Den hastighet som bilen ska få nästa cykel. %} -v = [35, 25, 30, 30, 40, 50, 45, 50, 35]; +v = [35, 25, 30, 30, 40, 50, 40, 50, 35]; new_v = v(old_v); end -- cgit v1.2.1 From d10749b7c4a36d4e88137ae7a8a299282c323056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Thor=C3=A9n?= Date: Sat, 19 Oct 2019 12:11:09 +0200 Subject: Lade till tic toc i car-structen --- Kod/bilbana/yc4/main.m | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 53c6f00..be0e3e8 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -15,7 +15,9 @@ start_race(2) car1 = struct; car1.segment = 1; car1.lap = 0; + car1.lap_times = []; + car1.seg_times = []; car2 = struct; @@ -45,19 +47,24 @@ while 1 if car1.new_check_point == true % beep; if car1.lap ~= 0 - car1.seg_times(car1.lap, car1.segment) = -1; % TODO + car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); % TODO end car1.segment = car1.segment + 1; + car1.seg_tic = tic; elseif car1.new_lap == true % beep; if car1.lap == 0 % dont save time for first lap car1.segment = 1; car1.lap = car1.lap + 1; + car1.seg_tic = tic; + car1.lap_tic = tic; continue; end - car1.seg_times(car1.lap, car1.segment) = -1; % TODO - car1.lap_times(car1.lap) = -1; % TODO + car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); % TODO + car1.seg_tic = tic; + car1.lap_times(car1.lap) = toc(car1.lap_tic); % TODO + car1.lap_tic = tic; car1.segment = 1; car1.lap = car1.lap + 1; end @@ -66,19 +73,24 @@ while 1 if car2.new_check_point == true % beep; if car2.lap ~= 0 - car2.seg_times(car2.lap, car2.segment) = -1; % TODO + car2.seg_times(car2.lap, car2.segment) = toc(car2.seg_tic); % TODO end car2.segment = car2.segment + 1; + car2.seg_tic = tic; elseif car2.new_lap == true % beep; if car2.lap == 0 % dont save time for first lap car2.segment = 1; car2.lap = car2.lap + 1; + car2.seg_tic = tic; + car2.lap_tic = tic; continue; end - car2.seg_times(car2.lap, car2.segment) = -1; % TODO - car2.lap_times(car2.lap) = -1; % TODO + car2.seg_times(car2.lap, car2.segment) = toc(car2.seg_tic); % TODO + car2.seg_tic = tic; + car2.lap_times(car2.lap) = toc(car2.lap_tic); % TODO + car2.lap_tic = tic; car2.segment = 1; car2.lap = car2.lap + 1; end -- cgit v1.2.1 From d32903da5c4923ebe0494062c749fbad4927edf3 Mon Sep 17 00:00:00 2001 From: Albin Date: Sat, 19 Oct 2019 12:53:40 +0200 Subject: Lade till funktionen graphs.m --- Kod/bilbana/privete/test.m | 22 ++++++++++++++++++++++ Kod/bilbana/yc4/graphs.m | 15 +++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 Kod/bilbana/privete/test.m create mode 100644 Kod/bilbana/yc4/graphs.m diff --git a/Kod/bilbana/privete/test.m b/Kod/bilbana/privete/test.m new file mode 100644 index 0000000..c64d753 --- /dev/null +++ b/Kod/bilbana/privete/test.m @@ -0,0 +1,22 @@ +a = [0,1.5,3,2,2,3,4,5,5,4,3,2,1]; +time = [0,0.01,0.015,0.02,0.04,0.05,0.06,0.07,0.08,0.09,0.10,0.11,0.12]; + +%% Test plot 1 +figure(1) +subplot(3,1,1) + +stairs(time,a,'LineWidth', 2) % Gör en trappstegsplot + +xlabel('Time [s]') +ylabel('a') +title('Test plot') + +grid on + +%% Test plot 2 +subplot(3,1,2:3) +stairs(time,a*2,'Marker', '*', 'MarkerFaceColor', 'm') + +xlabel('Time [s]') +ylabel('2a') +title('Test plot 2') \ No newline at end of file diff --git a/Kod/bilbana/yc4/graphs.m b/Kod/bilbana/yc4/graphs.m new file mode 100644 index 0000000..09d3604 --- /dev/null +++ b/Kod/bilbana/yc4/graphs.m @@ -0,0 +1,15 @@ +function [] = grapfs(inputArg1,inputArg2) +%{ +GRAPHS: Efter avslutad körning skall plottar som sammanfattar körningen +visas på styrdatorns skärm. Nödvändiga plottar är: +• En graf som visar varv och varvtider där referenstiden och +maximalt tillåtna avvikelser är utmärkta. Figuren skall också inkludera en +text som anger standardavvikelsen. +• Gaspådrag mot tid/hastighet för varje segment. +%} +% Detailed explanation goes here +%% +figure(1) +subplot(1,1,1) +end + -- cgit v1.2.1 From 37e0307a7acff86c0339db03268681a69abfe015 Mon Sep 17 00:00:00 2001 From: Albin Date: Sat, 19 Oct 2019 15:55:37 +0200 Subject: Lade till Test3.m och Test2.m --- Kod/bilbana/privete/Test2.m | 21 +++++++++++++++++++++ Kod/bilbana/privete/Test3.m | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 Kod/bilbana/privete/Test2.m create mode 100644 Kod/bilbana/privete/Test3.m diff --git a/Kod/bilbana/privete/Test2.m b/Kod/bilbana/privete/Test2.m new file mode 100644 index 0000000..d0ca5fe --- /dev/null +++ b/Kod/bilbana/privete/Test2.m @@ -0,0 +1,21 @@ +%{ +GRAPHS: Efter avslutad körning skall plottar som sammanfattar körningen +visas på styrdatorns skärm. Nödvändiga plottar är: +• En graf som visar varv och varvtider där referenstiden och +maximalt tillåtna avvikelser är utmärkta. Figuren skall också inkludera en +text som anger standardavvikelsen. +• Gaspådrag mot tid/hastighet för varje segment. +%} +disp('Startar test av grafer') +%% Bana 1 +figure(2); +%% Varvtid +subplot(1,1,1); +plot1 = stairs(car1.lap_times); + +plot1(1).Marker = 'o'; +plot1(1).MarkerFaceColor = 'k'; +plot1(1).LineStyle = 'none'; +xlabel('Varv'); +ylabel('Tid [s]'); +title('Varvtider'); \ No newline at end of file diff --git a/Kod/bilbana/privete/Test3.m b/Kod/bilbana/privete/Test3.m new file mode 100644 index 0000000..5527f2a --- /dev/null +++ b/Kod/bilbana/privete/Test3.m @@ -0,0 +1,34 @@ +%{ +GRAPHS: Efter avslutad körning skall plottar som sammanfattar körningen +visas på styrdatorns skärm. Nödvändiga plottar är: +• En graf som visar varv och varvtider där referenstiden och +maximalt tillåtna avvikelser är utmärkta. Figuren skall också inkludera en +text som anger standardavvikelsen. +• Gaspådrag mot tid/hastighet för varje segment. +%} +disp('Startar test av grafer') +%% IN +ref_lap_time = 13; +%% Bana 1 +figure(1); +%% Varvtid +ref_lap_time_vector = ref_lap_time*ones(1,length(car1.lap_times)); + +subplot(1,1,1); +disp(car1.lap_times); +disp(ref_lap_time_vector); +plot1 = stairs(car1.lap_times); +plot1(1).Marker = 'o'; +plot1(1).MarkerFaceColor = 'k'; +plot1(1).LineStyle = 'none'; +hold on +plot2 = stairs(ref_lap_time_vector); +plot2(1).LineWidth = 2; +plot2(1).Color = 'k'; +hold off + + + +xlabel('Varv'); +ylabel('Tid [s]'); +title('Varvtider'); \ No newline at end of file -- cgit v1.2.1 From 4d0480a2e07c92b200fe3bb87e929d970f9e212b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sat, 19 Oct 2019 16:16:21 +0200 Subject: Create basic functions for BP4a --- Kod/bilbana/yc4/display/clear_display.m | 3 + Kod/bilbana/yc4/display/draw_single_line.m | 5 ++ Kod/bilbana/yc4/display/get_package.m | 10 +++ Kod/bilbana/yc4/display/put_text.m | 9 +++ Kod/bilbana/yc4/display/set_text_font.m | 3 + Kod/display/display_exempel.m | 114 ++++++++++++++--------------- 6 files changed, 87 insertions(+), 57 deletions(-) create mode 100644 Kod/bilbana/yc4/display/clear_display.m create mode 100644 Kod/bilbana/yc4/display/draw_single_line.m create mode 100644 Kod/bilbana/yc4/display/get_package.m create mode 100644 Kod/bilbana/yc4/display/put_text.m create mode 100644 Kod/bilbana/yc4/display/set_text_font.m diff --git a/Kod/bilbana/yc4/display/clear_display.m b/Kod/bilbana/yc4/display/clear_display.m new file mode 100644 index 0000000..32fdac1 --- /dev/null +++ b/Kod/bilbana/yc4/display/clear_display.m @@ -0,0 +1,3 @@ +function pkg = clear_display() + pkg = get_package('DL', []) +end diff --git a/Kod/bilbana/yc4/display/draw_single_line.m b/Kod/bilbana/yc4/display/draw_single_line.m new file mode 100644 index 0000000..97cf1ae --- /dev/null +++ b/Kod/bilbana/yc4/display/draw_single_line.m @@ -0,0 +1,5 @@ +function [pkg] = draw_line(x1, y1, x2, y2) + arg = [x1, 0, y1, 0, x2, 1, y2, 0] % TODO nollor mellan värden? vad betyder ettan? + + pkg = get_package('GD', arg) +end diff --git a/Kod/bilbana/yc4/display/get_package.m b/Kod/bilbana/yc4/display/get_package.m new file mode 100644 index 0000000..7c3a01e --- /dev/null +++ b/Kod/bilbana/yc4/display/get_package.m @@ -0,0 +1,10 @@ +function [pkg] = get_package(code, args) + DC1 = 17; + ESC = 27; + + data = [ESC, double(code), args]; + len = length(data); + initStr = [DC1, len, data]; + bcc = mod(sum(initStr), 256); + pkg = [initStr, bcc]; +end diff --git a/Kod/bilbana/yc4/display/put_text.m b/Kod/bilbana/yc4/display/put_text.m new file mode 100644 index 0000000..95dbb26 --- /dev/null +++ b/Kod/bilbana/yc4/display/put_text.m @@ -0,0 +1,9 @@ +function [pkg] = put_text(x, y, justification, text) + code = double(join('Z', justification)) + + arg1 = [x, 0, y, 0] + arg2 = text; + arg3 = 0; + + pkg = get_package(join('Z', justification), [arg1 arg2 arg3]) +end diff --git a/Kod/bilbana/yc4/display/set_text_font.m b/Kod/bilbana/yc4/display/set_text_font.m new file mode 100644 index 0000000..768d16b --- /dev/null +++ b/Kod/bilbana/yc4/display/set_text_font.m @@ -0,0 +1,3 @@ +function pkg = set_text_font(font_num) + pkg = get_package('ZF', [font_num]) +end diff --git a/Kod/display/display_exempel.m b/Kod/display/display_exempel.m index c920087..5ac7cb0 100644 --- a/Kod/display/display_exempel.m +++ b/Kod/display/display_exempel.m @@ -10,24 +10,24 @@ cd ClientServerApp\Release !startServer cd ../.. %% Diagonal linje -DC1 = 17; -ESC = 27; -Code = 'GD'; - -% x1, y1, x2, y2, (320 x 240 pixlar) -% minst signifikanta bitar till vänster -% mest signifikanta bitar till höger -arg = [0, 0, 0, 0, 63, 1, 239, 0]; - -% Save the 'small package' as a string -data = [ESC, double(Code), arg]; -len = length(data); -initStr = [DC1, len, data]; -bcc = mod(sum(initStr), 256); -str = [initStr, bcc]; - -% Skriv -matlabclient(1, str') +% DC1 = 17; +% ESC = 27; +% Code = 'GD'; +% +% % x1, y1, x2, y2, (320 x 240 pixlar) +% % minst signifikanta bitar till vänster +% % mest signifikanta bitar till höger +% arg = [0, 0, 0, 0, 63, 1, 239, 0]; +% +% % Save the 'small package' as a string +% data = [ESC, double(Code), arg]; +% len = length(data); +% initStr = [DC1, len, data]; +% bcc = mod(sum(initStr), 256); +% str = [initStr, bcc]; +% +% % Skriv +% matlabclient(1, str') %% Rita en rektangel som är fylld med mönster DC1 = 17; @@ -53,30 +53,30 @@ str = [initStr, bcc]; matlabclient(1, str') %% Skriv en Test-sträng -DC1 = 17; -ESC = 27; -Code = double('ZL'); - -% x1, y1, (320 x 240 pixlar) -% minst signifikanta bitar till vänster -% mest signifikanta bitar till höger -arg1 = [117, 0, 32, 0]; - -% Textsträng -%arg2 = 'Test'; - -arg2 = 'DISPLAY!!!!!'; - -% Null -arg3 = 0; - - -% Save the 'small package' as a string -data = [ESC, double(Code), arg1, double(arg2), arg3]; -len = length(data); -initStr = [DC1, len, data]; -bcc = mod(sum(initStr), 256); -str = [initStr, bcc]; +% DC1 = 17; +% ESC = 27; +% Code = double('ZL'); +% +% % x1, y1, (320 x 240 pixlar) +% % minst signifikanta bitar till vänster +% % mest signifikanta bitar till höger +% arg1 = [117, 0, 32, 0]; +% +% % Textsträng +% %arg2 = 'Test'; +% +% arg2 = 'DISPLAY!!!!!'; +% +% % Null +% arg3 = 0; +% +% +% % Save the 'small package' as a string +% data = [ESC, double(Code), arg1, double(arg2), arg3]; +% len = length(data); +% initStr = [DC1, len, data]; +% bcc = mod(sum(initStr), 256); +% str = [initStr, bcc]; % Skriv matlabclient(1, str') @@ -142,20 +142,20 @@ matlabclient(1, str') %fwrite(lcd, str) %% Radera Displayen -DC1 = 17; -ESC = 27; -Code = 'DL'; - -% Save the 'small package' as a string -data = [ESC, double(Code)]; -len = length(data); -initStr = [DC1, len, data]; -bcc = mod(sum(initStr), 256); -str = [initStr, bcc]; - -% Skriv -matlabclient(1, str') -%fwrite(lcd, str) +% DC1 = 17; +% ESC = 27; +% Code = 'DL'; +% +% % Save the 'small package' as a string +% data = [ESC, double(Code)]; +% len = length(data); +% initStr = [DC1, len, data]; +% bcc = mod(sum(initStr), 256); +% str = [initStr, bcc]; +% +% % Skriv +% matlabclient(1, str') +% %fwrite(lcd, str) %% Avsluta kommunikation med display -matlabclient(3); \ No newline at end of file +matlabclient(3); -- cgit v1.2.1 From 347756aed1d5f378d4732811495ad47a2e8d667d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sat, 19 Oct 2019 16:20:14 +0200 Subject: Add send_data-function --- Kod/bilbana/yc4/display/send_data_to_display.m | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Kod/bilbana/yc4/display/send_data_to_display.m diff --git a/Kod/bilbana/yc4/display/send_data_to_display.m b/Kod/bilbana/yc4/display/send_data_to_display.m new file mode 100644 index 0000000..8df03f7 --- /dev/null +++ b/Kod/bilbana/yc4/display/send_data_to_display.m @@ -0,0 +1,28 @@ +function [] = send_data_to_display() +%SEND_DATA_TO_DISPLAY sends available data to display if last send was +% more than 0.5 seconds ago. + persistent last_send; + global display_data; + + if isempty(display_data) + return + end + disp(last_send); + disp(clock); + if isempty(last_send) % first send + %% SEND DATA + disp('sending data'); + disp(display_data) + matlabclient(1, display_data{1}); + last_send = clock; + display_data(1) = []; + elseif (etime(clock, last_send) >= 0.5) + %% SEND DATA + disp('sending data'); + disp(display_data) + matlabclient(1, display_data{1}); + last_send = clock; + display_data(1) = []; + end +end + -- cgit v1.2.1 From 13511bf3468e03ca0c7c3081edd9e5cf28508870 Mon Sep 17 00:00:00 2001 From: Albin Date: Sat, 19 Oct 2019 21:25:06 +0200 Subject: Fungerande varvtidsgraf --- Kod/bilbana/privete/LaptimeTest.m | 63 +++++++++++++++++++++++++++++++++++++++ Kod/bilbana/privete/Test3.m | 34 --------------------- 2 files changed, 63 insertions(+), 34 deletions(-) create mode 100644 Kod/bilbana/privete/LaptimeTest.m delete mode 100644 Kod/bilbana/privete/Test3.m diff --git a/Kod/bilbana/privete/LaptimeTest.m b/Kod/bilbana/privete/LaptimeTest.m new file mode 100644 index 0000000..0cf1422 --- /dev/null +++ b/Kod/bilbana/privete/LaptimeTest.m @@ -0,0 +1,63 @@ +%{ +GRAPHS: Efter avslutad körning skall plottar som sammanfattar körningen +visas på styrdatorns skärm. Nödvändiga plottar är: +• En graf som visar varv och varvtider där referenstiden och +maximalt tillåtna avvikelser är utmärkta. Figuren skall också inkludera en +text som anger standardavvikelsen. +• Gaspådrag mot tid/hastighet för varje segment. +%} +disp('Startar test av grafer') +%% IN +ref_lap_time = 14; +track = 1; +%% Figur +figure(1); +clf; +subplot(10,1,1:9); +%% Raka streck +ref_lap_time_vector = ref_lap_time*ones(1,length(car1.lap_times)); + +Min_c = ref_lap_time-0.5; +Max_c = ref_lap_time+0.5; +InD_c = ref_lap_time-1; +InU_c = ref_lap_time+1; + +Min = Min_c*ones(1,length(car1.lap_times)); +Max = Max_c*ones(1,length(car1.lap_times)); +InU = InU_c*ones(1,length(car1.lap_times)); +InD = InD_c*ones(1,length(car1.lap_times)); +%% Varvtider +disp(car1.lap_times); +disp(ref_lap_time_vector); +plot1 = stairs(car1.lap_times); +plot1.Marker = 'o'; +plot1.MarkerFaceColor = 'k'; +plot1.LineStyle = 'none'; +hold on +%% Referenstid +plot2 = stairs(ref_lap_time_vector); +plot2.LineWidth = 2; +plot2.Color = 'k'; +%% Tillåten avvikelse +plotMax = stairs(Max); +plotMin = stairs(Min); +plotMax.Color = 'k'; +plotMin.Color = 'k'; +%% Osynliga hjälpstreck +plotInU = stairs(InU); +plotInD = stairs(InD); +plotInU.LineStyle = 'none'; +plotInD.LineStyle = 'none'; + +hold off +%% Standardavvkielse +sigma = std(car1.lap_times); +sigma = round(sigma, 2); +sig_str = string(sigma); +%% Text +xlabel('Varv'); +ylabel('Tid [s]'); +title('Varvtider'); %Todo vilken bana? +txt = join(['Standardavvikelse:',sig_str, 's']); +annotation('textbox',[.1 0.05 .4 .05],'String',txt,'EdgeColor','none') +disp(sig_str); \ No newline at end of file diff --git a/Kod/bilbana/privete/Test3.m b/Kod/bilbana/privete/Test3.m deleted file mode 100644 index 5527f2a..0000000 --- a/Kod/bilbana/privete/Test3.m +++ /dev/null @@ -1,34 +0,0 @@ -%{ -GRAPHS: Efter avslutad körning skall plottar som sammanfattar körningen -visas på styrdatorns skärm. Nödvändiga plottar är: -• En graf som visar varv och varvtider där referenstiden och -maximalt tillåtna avvikelser är utmärkta. Figuren skall också inkludera en -text som anger standardavvikelsen. -• Gaspådrag mot tid/hastighet för varje segment. -%} -disp('Startar test av grafer') -%% IN -ref_lap_time = 13; -%% Bana 1 -figure(1); -%% Varvtid -ref_lap_time_vector = ref_lap_time*ones(1,length(car1.lap_times)); - -subplot(1,1,1); -disp(car1.lap_times); -disp(ref_lap_time_vector); -plot1 = stairs(car1.lap_times); -plot1(1).Marker = 'o'; -plot1(1).MarkerFaceColor = 'k'; -plot1(1).LineStyle = 'none'; -hold on -plot2 = stairs(ref_lap_time_vector); -plot2(1).LineWidth = 2; -plot2(1).Color = 'k'; -hold off - - - -xlabel('Varv'); -ylabel('Tid [s]'); -title('Varvtider'); \ No newline at end of file -- cgit v1.2.1 From 9b4f8212b1d86fb5263009b3d2ad48012048e132 Mon Sep 17 00:00:00 2001 From: Albin Date: Sat, 19 Oct 2019 23:15:07 +0200 Subject: Klar med plottar --- Kod/bilbana/Graph/graphs.m | 14 +++++++++ Kod/bilbana/Graph/graphs_test.m | 11 +++++++ Kod/bilbana/Graph/lap_time_graph.m | 52 ++++++++++++++++++++++++++++++++++ Kod/bilbana/Graph/segment_time_graph.m | 15 ++++++++++ 4 files changed, 92 insertions(+) create mode 100644 Kod/bilbana/Graph/graphs.m create mode 100644 Kod/bilbana/Graph/graphs_test.m create mode 100644 Kod/bilbana/Graph/lap_time_graph.m create mode 100644 Kod/bilbana/Graph/segment_time_graph.m diff --git a/Kod/bilbana/Graph/graphs.m b/Kod/bilbana/Graph/graphs.m new file mode 100644 index 0000000..42a1196 --- /dev/null +++ b/Kod/bilbana/Graph/graphs.m @@ -0,0 +1,14 @@ +function [] = graphs(lap_times,ref_lap_time, seg_times, track) +%{GRAPHS: Två grafer i samma figur. Varvtider och medeltid/segment +%{ +lap_times: vektor med alla varvtider, +ref_lap_time: Den varvtid som eftersträvas +seg_times: matris med segmentstider från alla varv +track: den bana som de andra argumenten gäller för +%} +figure(track); +clf; +lap_time_graph(lap_times,track,ref_lap_time); +segment_time_graph(seg_times,track); +end + diff --git a/Kod/bilbana/Graph/graphs_test.m b/Kod/bilbana/Graph/graphs_test.m new file mode 100644 index 0000000..3a2a2e5 --- /dev/null +++ b/Kod/bilbana/Graph/graphs_test.m @@ -0,0 +1,11 @@ +%% Data needed +car1.seg_times = [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; + 3.2,1.1,2.2,1.8,1.4,3.2,1.5,3.4,1.4; + 4.0,1.4,2.2,1.8,1.4,3.4,1.5,3.4,1.4; + 4.0,1.1,2.2,1.8,1.4,3.6,1.5,3.4,1.4; + 4.1,1.1,2.2,1.8,1.4,3.8,1.5,3.4,1.4]; +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,1) \ No newline at end of file diff --git a/Kod/bilbana/Graph/lap_time_graph.m b/Kod/bilbana/Graph/lap_time_graph.m new file mode 100644 index 0000000..8d54c6a --- /dev/null +++ b/Kod/bilbana/Graph/lap_time_graph.m @@ -0,0 +1,52 @@ +function [outputArg1,outputArg2] = lap_time_graph(lap_times, track, ref_lap_time) +%LAP_TIME_GRAPH En graf som visar varvtider där referenstiden och maximalt +%tillåtna avvikelser är utmärkta. Figuren inkluderar också standardavvikelsen +%% +subplot(20,1,1:8); +%% Raka streck +ref_lap_time_vector = ref_lap_time*ones(1,length(lap_times)); + +Min_c = ref_lap_time-0.5; +Max_c = ref_lap_time+0.5; +InD_c = ref_lap_time-1; +InU_c = ref_lap_time+1; + +Min = Min_c*ones(1,length(lap_times)); +Max = Max_c*ones(1,length(lap_times)); +InU = InU_c*ones(1,length(lap_times)); +InD = InD_c*ones(1,length(lap_times)); +%% Varvtider +plot1 = stairs(lap_times); +plot1.Marker = 'o'; +plot1.MarkerFaceColor = 'k'; +plot1.LineStyle = 'none'; +hold on +%% Referenstid +plot2 = stairs(ref_lap_time_vector); +plot2.LineWidth = 2; +plot2.Color = 'k'; +%% Tillåten avvikelse +plotMax = stairs(Max); +plotMin = stairs(Min); +plotMax.Color = 'k'; +plotMin.Color = 'k'; +%% Osynliga hjälpstreck +plotInU = stairs(InU); +plotInD = stairs(InD); +plotInU.LineStyle = 'none'; +plotInD.LineStyle = 'none'; + +hold off +%% Standardavvkielse +sigma = std(lap_times); +sigma = round(sigma, 2); +sig_str = string(sigma); +%% Text +xlabel('Varv'); +ylabel('Tid [s]'); +Tit = join(['Varvtider bana',string(track)]); +title(Tit); +txt = join(['Standardavvikelse:',sig_str, 's/varv']); +annotation('textbox',[.1 0.5 .5 .05],'String',txt,'EdgeColor','none') +end + diff --git a/Kod/bilbana/Graph/segment_time_graph.m b/Kod/bilbana/Graph/segment_time_graph.m new file mode 100644 index 0000000..f88c836 --- /dev/null +++ b/Kod/bilbana/Graph/segment_time_graph.m @@ -0,0 +1,15 @@ +function [] = segment_time_graph(seg_time,track) +%SEGMENT_TIME_GRAPH Snittid för varje segment. + +avr_seg_time = mean(seg_time); +subplot(20,1,13:20); + +Plot = bar(avr_seg_time); +%Plot.Marker = 'o'; +Plot.FaceColor = 'k'; +xlabel('Segment'); +ylabel('Tid [s]'); +Tit = join(['Medeltid/segment bana',string(track)]); +title(Tit); +end + -- cgit v1.2.1 From 62619cdb00de22afe4382e35facdc9fb941a6de2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sun, 20 Oct 2019 00:19:50 +0200 Subject: Add relevant output to display --- Kod/bilbana/yc4/get_time_as_string.m | 10 ++++++++++ Kod/bilbana/yc4/main.m | 21 ++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 Kod/bilbana/yc4/get_time_as_string.m diff --git a/Kod/bilbana/yc4/get_time_as_string.m b/Kod/bilbana/yc4/get_time_as_string.m new file mode 100644 index 0000000..24b6bc5 --- /dev/null +++ b/Kod/bilbana/yc4/get_time_as_string.m @@ -0,0 +1,10 @@ +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))); +seconds = mod(millis, 1000*60); +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}, ''); +end + diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 53c6f00..851681a 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -1,5 +1,12 @@ %% INIT -% TODO init display +% INIT DISPLAY +addpath display/ClientServerApp/Release +cd display/ClientServerApp/Release +!startServer +cd ../../.. + +global display_data; +display_data = []; disp('Startar bilbanan. Avsluta med q.') hf=figure('position',[0 0 eps eps],'menubar','none'); @@ -58,6 +65,9 @@ while 1 end car1.seg_times(car1.lap, car1.segment) = -1; % TODO car1.lap_times(car1.lap) = -1; % TODO + + display_data = [display_data, put_text(100, 32, L, strjoin({num2str(car1.lap), get_time_as_string(car1.lap_times(car1.lap))}, ' '))]; + car1.segment = 1; car1.lap = car1.lap + 1; end @@ -79,6 +89,9 @@ while 1 end car2.seg_times(car2.lap, car2.segment) = -1; % TODO car2.lap_times(car2.lap) = -1; % TODO + + display_data = [display_data, put_text(120, 32, L, strjoin({num2str(car2.lap), get_time_as_string(car2.lap_times(car2.lap))}, ' '))]; + car2.segment = 1; car2.lap = car2.lap + 1; end @@ -104,7 +117,8 @@ while 1 %% END OF LOOP tocs(end + 1) = toc; pause(0.1) - tic; + tic; + send_data_to_display(); end %% END OF PROGRAM @@ -114,4 +128,5 @@ disp(car2); terminate(1); terminate(2); -% TODO terminate display \ No newline at end of file + +matlabclient(3); -- cgit v1.2.1 From fac231875693560adcbd6e3803592e27674dd2b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sun, 20 Oct 2019 13:57:56 +0200 Subject: Fix put_text - Prints in "formatting mode" instead of terminal mode - Correct argument formatting --- Kod/bilbana/yc4/display/put_text.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Kod/bilbana/yc4/display/put_text.m b/Kod/bilbana/yc4/display/put_text.m index 95dbb26..5b80192 100644 --- a/Kod/bilbana/yc4/display/put_text.m +++ b/Kod/bilbana/yc4/display/put_text.m @@ -1,9 +1,9 @@ function [pkg] = put_text(x, y, justification, text) - code = double(join('Z', justification)) + code = double(strjoin({'Z', justification}, '')); - arg1 = [x, 0, y, 0] + arg1 = [x, 0, y, 0]; arg2 = text; arg3 = 0; - pkg = get_package(join('Z', justification), [arg1 arg2 arg3]) + pkg = get_package(code, [arg1 double(arg2) arg3]); end -- cgit v1.2.1 From c4033991d6363441bf4697608034edb39ff50fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sun, 20 Oct 2019 14:11:47 +0200 Subject: Fix draw_single_line - Mod for x-values > 255 --- Kod/bilbana/yc4/display/draw_single_line.m | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Kod/bilbana/yc4/display/draw_single_line.m b/Kod/bilbana/yc4/display/draw_single_line.m index 97cf1ae..ca13293 100644 --- a/Kod/bilbana/yc4/display/draw_single_line.m +++ b/Kod/bilbana/yc4/display/draw_single_line.m @@ -1,5 +1,4 @@ -function [pkg] = draw_line(x1, y1, x2, y2) - arg = [x1, 0, y1, 0, x2, 1, y2, 0] % TODO nollor mellan värden? vad betyder ettan? - - pkg = get_package('GD', arg) +function pkg = draw_single_line(x1, y1, x2, y2) + arg = [mod(x1, 255), fix(x1 / 255), y1, 0, mod(x2, 255), fix(x2 / 255), y2, 0]; + pkg = get_package('GD', arg); end -- cgit v1.2.1 From 1111d306f96fbe7d1608e1eaa156680fd5b21ecf Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 20 Oct 2019 14:32:08 +0200 Subject: Implementera freeze_david --- Kod/bilbana/yc4/main.m | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index be0e3e8..2512faf 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -15,9 +15,7 @@ start_race(2) car1 = struct; car1.segment = 1; car1.lap = 0; - car1.lap_times = []; - car1.seg_times = []; car2 = struct; @@ -30,6 +28,7 @@ tocs = []; %% MAIN LOOP while 1 + tic; %% PRE-LOOP if strcmp(get(hf,'currentcharacter'),'q') close(hf) @@ -47,7 +46,7 @@ while 1 if car1.new_check_point == true % beep; if car1.lap ~= 0 - car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); % TODO + car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); end car1.segment = car1.segment + 1; car1.seg_tic = tic; @@ -61,9 +60,9 @@ while 1 car1.lap_tic = tic; continue; end - car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); % TODO + car1.seg_times(car1.lap, car1.segment) = toc(car1.seg_tic); car1.seg_tic = tic; - car1.lap_times(car1.lap) = toc(car1.lap_tic); % TODO + car1.lap_times(car1.lap) = toc(car1.lap_tic); car1.lap_tic = tic; car1.segment = 1; car1.lap = car1.lap + 1; @@ -73,12 +72,12 @@ while 1 if car2.new_check_point == true % beep; if car2.lap ~= 0 - car2.seg_times(car2.lap, car2.segment) = toc(car2.seg_tic); % TODO + car2.seg_times(car2.lap, car2.segment) = toc(car2.seg_tic); end car2.segment = car2.segment + 1; car2.seg_tic = tic; elseif car2.new_lap == true - % beep; + beep; if car2.lap == 0 % dont save time for first lap car2.segment = 1; @@ -87,9 +86,9 @@ while 1 car2.lap_tic = tic; continue; end - car2.seg_times(car2.lap, car2.segment) = toc(car2.seg_tic); % TODO + car2.seg_times(car2.lap, car2.segment) = toc(car2.seg_tic); car2.seg_tic = tic; - car2.lap_times(car2.lap) = toc(car2.lap_tic); % TODO + car2.lap_times(car2.lap) = toc(car2.lap_tic); car2.lap_tic = tic; car2.segment = 1; car2.lap = car2.lap + 1; @@ -114,9 +113,8 @@ while 1 %% DISPLAY %% END OF LOOP - tocs(end + 1) = toc; pause(0.1) - tic; + tocs(end + 1) = toc; end %% END OF PROGRAM -- cgit v1.2.1 From e7ba072cd76bbfc1a5393272df20cebb1d83e56b Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 20 Oct 2019 15:15:40 +0200 Subject: Implementera freeze_gustav MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kvar att göra: - 12.95 avrundas nu till 12.10, ska vara 13.0 --- Kod/bilbana/yc4/display/send_data_to_display.m | 13 ++++++------- Kod/bilbana/yc4/main.m | 22 ++++++++++++++-------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/Kod/bilbana/yc4/display/send_data_to_display.m b/Kod/bilbana/yc4/display/send_data_to_display.m index 8df03f7..c5d70c7 100644 --- a/Kod/bilbana/yc4/display/send_data_to_display.m +++ b/Kod/bilbana/yc4/display/send_data_to_display.m @@ -7,22 +7,21 @@ function [] = send_data_to_display() if isempty(display_data) return end - disp(last_send); - disp(clock); + % disp(last_send); + % disp(clock); if isempty(last_send) % first send %% SEND DATA - disp('sending data'); - disp(display_data) + % disp('sending data'); + % disp(display_data) matlabclient(1, display_data{1}); last_send = clock; display_data(1) = []; elseif (etime(clock, last_send) >= 0.5) %% SEND DATA - disp('sending data'); - disp(display_data) + % disp('sending data'); + % disp(display_data) matlabclient(1, display_data{1}); last_send = clock; display_data(1) = []; end end - diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index baf1914..4c700bb 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -6,7 +6,9 @@ cd display/ClientServerApp/Release cd ../../.. global display_data; -display_data = []; +display_data = {}; +display_data = {display_data clear_display()}; +pause(1); disp('Startar bilbanan. Avsluta med q.') hf=figure('position',[0 0 eps eps],'menubar','none'); @@ -57,8 +59,8 @@ while 1 end car1.segment = car1.segment + 1; car1.seg_tic = tic; - elseif car1.new_lap == true - % beep; + end + if car1.new_lap == true if car1.lap == 0 % dont save time for first lap car1.segment = 1; @@ -67,12 +69,13 @@ while 1 car1.lap_tic = tic; continue; end + 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); car1.lap_tic = tic; - display_data = [display_data, put_text(100, 32, L, strjoin({num2str(car1.lap), get_time_as_string(car1.lap_times(car1.lap))}, ' '))]; + display_data = {display_data, put_text(100, 32, 'L', strjoin({num2str(car1.lap), get_time_as_string(round(car1.lap_times(car1.lap) * 1000))}, ' '))}; car1.segment = 1; car1.lap = car1.lap + 1; @@ -86,22 +89,25 @@ while 1 end car2.segment = car2.segment + 1; car2.seg_tic = tic; - elseif car2.new_lap == true - beep; + end + if car2.new_lap == true if car2.lap == 0 % dont save time for first lap car2.segment = 1; car2.lap = car2.lap + 1; car2.seg_tic = tic; car2.lap_tic = tic; + disp('continuing'); continue; end + beep; + car2.seg_times(car2.lap, car2.segment) = toc(car2.seg_tic); car2.seg_tic = tic; car2.lap_times(car2.lap) = toc(car2.lap_tic); car2.lap_tic = tic; - display_data = [display_data, put_text(120, 32, L, strjoin({num2str(car2.lap), get_time_as_string(car2.lap_times(car2.lap))}, ' '))]; + display_data = {display_data, put_text(100, 48, 'L', strjoin({num2str(car2.lap), get_time_as_string(round(car2.lap_times(car2.lap) * 1000))}, ' '))}; car2.segment = 1; car2.lap = car2.lap + 1; @@ -130,7 +136,7 @@ while 1 tocs(end + 1) = toc; send_data_to_display(); end - + %% END OF PROGRAM disp(tocs); disp(car1); -- cgit v1.2.1 From 7978f8c42029b59e479ec918b67d968b1385081c Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 20 Oct 2019 15:42:42 +0200 Subject: Implementera Albin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Att göra - Räkna snitt pÃ¥ alla värden istället för att första sista raden - Ev. använd inte mean() över huvud taget --- Kod/bilbana/Graph/graphs.m | 6 +++--- Kod/bilbana/Graph/segment_time_graph.m | 12 ++++++------ Kod/bilbana/yc4/graphs.m | 15 --------------- Kod/bilbana/yc4/main.m | 9 +++++++++ 4 files changed, 18 insertions(+), 24 deletions(-) delete mode 100644 Kod/bilbana/yc4/graphs.m diff --git a/Kod/bilbana/Graph/graphs.m b/Kod/bilbana/Graph/graphs.m index 42a1196..a4ebf11 100644 --- a/Kod/bilbana/Graph/graphs.m +++ b/Kod/bilbana/Graph/graphs.m @@ -1,4 +1,4 @@ -function [] = graphs(lap_times,ref_lap_time, seg_times, track) +function [] = graphs(lap_times, ref_lap_time, seg_times, track) %{GRAPHS: Två grafer i samma figur. Varvtider och medeltid/segment %{ lap_times: vektor med alla varvtider, @@ -8,7 +8,7 @@ track: den bana som de andra argumenten g %} figure(track); clf; -lap_time_graph(lap_times,track,ref_lap_time); -segment_time_graph(seg_times,track); +lap_time_graph(lap_times, track, ref_lap_time); +segment_time_graph(seg_times, track); end diff --git a/Kod/bilbana/Graph/segment_time_graph.m b/Kod/bilbana/Graph/segment_time_graph.m index f88c836..602938b 100644 --- a/Kod/bilbana/Graph/segment_time_graph.m +++ b/Kod/bilbana/Graph/segment_time_graph.m @@ -1,15 +1,15 @@ -function [] = segment_time_graph(seg_time,track) +function [] = segment_time_graph(seg_time, track) %SEGMENT_TIME_GRAPH Snittid för varje segment. - -avr_seg_time = mean(seg_time); -subplot(20,1,13:20); +seg_time_size = size(seg_time); +avr_seg_time = mean(seg_time(1:(seg_time_size(1) - 1), 1:(seg_time_size(2)))); +subplot(20, 1, 13:20); Plot = bar(avr_seg_time); %Plot.Marker = 'o'; Plot.FaceColor = 'k'; xlabel('Segment'); ylabel('Tid [s]'); -Tit = join(['Medeltid/segment bana',string(track)]); -title(Tit); +tit = join(['Medeltid/segment bana',string(track)]); +title(tit); end diff --git a/Kod/bilbana/yc4/graphs.m b/Kod/bilbana/yc4/graphs.m deleted file mode 100644 index 09d3604..0000000 --- a/Kod/bilbana/yc4/graphs.m +++ /dev/null @@ -1,15 +0,0 @@ -function [] = grapfs(inputArg1,inputArg2) -%{ -GRAPHS: Efter avslutad körning skall plottar som sammanfattar körningen -visas på styrdatorns skärm. Nödvändiga plottar är: -• En graf som visar varv och varvtider där referenstiden och -maximalt tillåtna avvikelser är utmärkta. Figuren skall också inkludera en -text som anger standardavvikelsen. -• Gaspådrag mot tid/hastighet för varje segment. -%} -% Detailed explanation goes here -%% -figure(1) -subplot(1,1,1) -end - diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m index 4c700bb..3bdf697 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -79,6 +79,8 @@ while 1 car1.segment = 1; car1.lap = car1.lap + 1; + + car1.seg_times(car1.lap, 1) = 0; end %% CHECK LAP AND CHECKPOINT (CAR 2) @@ -111,6 +113,8 @@ while 1 car2.segment = 1; car2.lap = car2.lap + 1; + + car2.seg_times(car2.lap, 1) = 0; end %% CALCULATE (CAR 1) @@ -146,3 +150,8 @@ terminate(1); terminate(2); matlabclient(3); + +%% DISPLAY GRAPHS + +graphs(car1.lap_times, 13, car1.seg_times, 1); +graphs(car2.lap_times, 13, car2.seg_times, 2); \ No newline at end of file -- cgit v1.2.1