diff options
Diffstat (limited to 'Kod')
| -rw-r--r-- | Kod/bilbana/yc4/debug.m | 6 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/display/define_bar_graph.m | 7 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/display/delete_bar_graph.m | 7 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/display/redraw_bar_graph.m | 3 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/display/request_bar_graph_value.m | 3 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/display/set_add_line_spacing.m | 3 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/display/set_text_zoom.m | 3 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/display/update_bar_graph.m | 3 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/do_car.m | 29 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/get_new_u.m | 4 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/get_new_v.m | 6 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/get_seg_constant.m | 18 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/get_time_as_string.m | 12 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/gov_set.m | 6 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/main.m | 155 | ||||
| -rw-r--r-- | Kod/bilbana/yc4/verbose.m | 6 |
16 files changed, 182 insertions, 89 deletions
diff --git a/Kod/bilbana/yc4/debug.m b/Kod/bilbana/yc4/debug.m new file mode 100644 index 0000000..0295e02 --- /dev/null +++ b/Kod/bilbana/yc4/debug.m @@ -0,0 +1,6 @@ +function [] = debug(tag, strings) +global log_debug; +if log_debug + disp(strjoin({'DEBUG (', tag, '): ', strings}, '')) +end +end diff --git a/Kod/bilbana/yc4/display/define_bar_graph.m b/Kod/bilbana/yc4/display/define_bar_graph.m new file mode 100644 index 0000000..d915cf1 --- /dev/null +++ b/Kod/bilbana/yc4/display/define_bar_graph.m @@ -0,0 +1,7 @@ +function pkg = define_bar_graph(direction, no, x1, y1, x2, y2, start_value, end_value, type, pattern) +pkg = [] +args = [no, get_bytes(x1), get_bytes(y1), get_bytes(x2), get_bytes(y2)] +args = [args, start_value, end_value, type, pattern] %TODO get_bytes or no ? + +pkg = get_package(strjoin({'B', direction}, ''), args) +end diff --git a/Kod/bilbana/yc4/display/delete_bar_graph.m b/Kod/bilbana/yc4/display/delete_bar_graph.m new file mode 100644 index 0000000..093cb2b --- /dev/null +++ b/Kod/bilbana/yc4/display/delete_bar_graph.m @@ -0,0 +1,7 @@ +function pkg = define_bar_graph(num, keep_visible) +if keep_visible + keep_visible = 1 +else + keep_visible = 0 +pkg = get_package('BD', [num, keep_visible]) +end diff --git a/Kod/bilbana/yc4/display/redraw_bar_graph.m b/Kod/bilbana/yc4/display/redraw_bar_graph.m new file mode 100644 index 0000000..5541dff --- /dev/null +++ b/Kod/bilbana/yc4/display/redraw_bar_graph.m @@ -0,0 +1,3 @@ +function pkg = redraw_bar_graph(num) +pkg = get_package('BZ', [num]) +end diff --git a/Kod/bilbana/yc4/display/request_bar_graph_value.m b/Kod/bilbana/yc4/display/request_bar_graph_value.m new file mode 100644 index 0000000..d3cad11 --- /dev/null +++ b/Kod/bilbana/yc4/display/request_bar_graph_value.m @@ -0,0 +1,3 @@ +function pkg = request_bar_graph_value(num) +pkg = get_package('BS', [num]) +end diff --git a/Kod/bilbana/yc4/display/set_add_line_spacing.m b/Kod/bilbana/yc4/display/set_add_line_spacing.m new file mode 100644 index 0000000..33a0b4a --- /dev/null +++ b/Kod/bilbana/yc4/display/set_add_line_spacing.m @@ -0,0 +1,3 @@ +function pkg = set_add_line_spacing(val) +pkg = get_package('ZY', [val]) +end diff --git a/Kod/bilbana/yc4/display/set_text_zoom.m b/Kod/bilbana/yc4/display/set_text_zoom.m new file mode 100644 index 0000000..90c6eec --- /dev/null +++ b/Kod/bilbana/yc4/display/set_text_zoom.m @@ -0,0 +1,3 @@ +function pkg = set_text_zoom(x_scale, y_scale) +pkg = get_package('ZZ', [x_scale, y_scale]) +end diff --git a/Kod/bilbana/yc4/display/update_bar_graph.m b/Kod/bilbana/yc4/display/update_bar_graph.m new file mode 100644 index 0000000..ffca923 --- /dev/null +++ b/Kod/bilbana/yc4/display/update_bar_graph.m @@ -0,0 +1,3 @@ +function pkg = update_bar_graph(num, val) +pkg = get_package('BA', [num, val]) +end diff --git a/Kod/bilbana/yc4/do_car.m b/Kod/bilbana/yc4/do_car.m index 72126d7..caac64d 100644 --- a/Kod/bilbana/yc4/do_car.m +++ b/Kod/bilbana/yc4/do_car.m @@ -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,6 +19,9 @@ 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 @@ -99,7 +104,12 @@ if car.running == true else car.position = new_position; car.segment = car.segment + seg_plus; - end + end + if seg_plus ~= 0 + 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); @@ -110,7 +120,8 @@ if car.running == true %% NEW LAP if car.new_lap == true - car.new_lap = false; + car.lap_constants = gov_set(get_car_constant(car.num)); + car.new_lap = false; %TODO remove beep; if car.lap == 0 % dont save time for first lap @@ -120,7 +131,10 @@ if car.running == true car.lap_tic = tic; else % beep; - car.seg_times(car.lap, car.segment) = toc(car.seg_tic); + % 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; @@ -136,10 +150,9 @@ 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); + seg_constant = get_seg_constant(car.position, car.lap_constants, car.num); + car.u = get_new_u(car.v, seg_constant); end %% CONTROLLER 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..9f4dd1d --- /dev/null +++ b/Kod/bilbana/yc4/get_seg_constant.m @@ -0,0 +1,18 @@ +function [out] = get_seg_constant(position, lap_constants, track) +%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 = [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]; +for i = 1:length(track_len) + if position >= track_len(track, 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 fcff963..885d518 100644 --- a/Kod/bilbana/yc4/main.m +++ b/Kod/bilbana/yc4/main.m @@ -1,4 +1,23 @@ +clear all; + +%% 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 @@ -17,20 +36,9 @@ display.last_send = tic; display.last_request = 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; @@ -41,11 +49,13 @@ 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.map = Bana1; car1.approximation = []; car1.miss_probability = 0.0; +car1.lap_constants = [1,1,1,1,1,1,1,1,1]; % TODO car2 = struct; car2.num = 2; @@ -60,7 +70,9 @@ 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.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 t = 0; highToc = 0; @@ -94,87 +106,88 @@ end ref_time = input('Vilken referenstid ska användas? [13] ', 's'); ref_time = str2double(ref_time); if isnan(ref_time) - ref_time = 13; + ref_time = 13; elseif not(isreal(ref_time)) - ref_time = 13; + ref_time = 13; end %} ref_time = 13; + %% MAIN LOOP while 1 - readTime = tic; - %% PRE-LOOP - if strcmp(get(hf,'currentcharacter'),'q') - close(hf) - break + readTime = tic; + %% PRE-LOOP + if strcmp(get(hf,'currentcharacter'),'q') + close(hf) + break elseif strcmp(get(hf, 'currentcharacter'), 's') car1.stopping = true; car2.stopping = true; - end - - figure(hf) - drawnow - + end + + 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); if car1.stop == true disp('stopped by car 1'); break; - end - if car2.stop == true + end + if car2.stop == true disp('stopped by car 2'); break; - end - + end + 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 - % queue control signal - if car1.running && car1.automatic - display.data = [display.data, put_text(20, 16 + (16 * 1), 'L', num2str(car1.u))]; - end - if car2.running && car2.automatic - display.data = [display.data, put_text(20, 16 + (16 * 2), 'L', num2str(car2.u))]; - end - - % send all queued data - if ~isempty(display.data) - [display.out] = matlabclient(1, get_smallpackage(display.data)); - display.data = []; - end - display.last_send = tic; - - % read internal mem from last send - [display.out, display.shm] = matlabclient(2); - [display.shm_interp.ack, display.shm_interp.start_code, display.shm_interp.data] = get_response(display.shm); - - % request internal mem - % matlabclient(1, hex2dec(['12'; '01'; '53'; '66'])); - end - % disp(strjoin({'display took additional ', num2str(toc(display.send_delay))})); - % ACTUAL END OF LOOP - t = toc(readTime); - - if t > 0.07 - if t > highToc - 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; - end - break; - end - pause(0.001); - 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 + % queue control signal + if car1.running && car1.automatic + % display.data = [display.data, put_text(20, 16 + (16 * 1), 'L', num2str(car1.u))]; + end + if car2.running && car2.automatic + % display.data = [display.data, put_text(20, 16 + (16 * 2), 'L', num2str(car2.u))]; + end + + % send all queued data + if ~isempty(display.data) + [display.out] = matlabclient(1, get_smallpackage(display.data)); + display.data = []; + end + display.last_send = tic; + + % read internal mem from last send + [display.out, display.shm] = matlabclient(2); + [display.shm_interp.ack, display.shm_interp.start_code, display.shm_interp.data] = get_response(display.shm); + + % request internal mem + % matlabclient(1, hex2dec(['12'; '01'; '53'; '66'])); + end + % disp(strjoin({'display took additional ', num2str(toc(display.send_delay))})); + % ACTUAL END OF LOOP + t = toc(readTime); + + if t > 0.07 + if t > highToc + 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; + end + break; + end + pause(0.001); + end end - + %% END OF PROGRAM disp(highToc); disp(car1); 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 |
