summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Kod/bilbana/yc4/debug.m6
-rw-r--r--Kod/bilbana/yc4/display/define_bar_graph.m7
-rw-r--r--Kod/bilbana/yc4/display/delete_bar_graph.m7
-rw-r--r--Kod/bilbana/yc4/display/redraw_bar_graph.m3
-rw-r--r--Kod/bilbana/yc4/display/request_bar_graph_value.m3
-rw-r--r--Kod/bilbana/yc4/display/set_add_line_spacing.m3
-rw-r--r--Kod/bilbana/yc4/display/set_text_zoom.m3
-rw-r--r--Kod/bilbana/yc4/display/update_bar_graph.m3
-rw-r--r--Kod/bilbana/yc4/do_car.m29
-rw-r--r--Kod/bilbana/yc4/get_new_u.m4
-rw-r--r--Kod/bilbana/yc4/get_new_v.m6
-rw-r--r--Kod/bilbana/yc4/get_seg_constant.m18
-rw-r--r--Kod/bilbana/yc4/get_time_as_string.m12
-rw-r--r--Kod/bilbana/yc4/gov_set.m6
-rw-r--r--Kod/bilbana/yc4/main.m155
-rw-r--r--Kod/bilbana/yc4/verbose.m6
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