summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Kod/bilbana/yc4/do_boot.m10
-rw-r--r--Kod/bilbana/yc4/do_car.m22
-rw-r--r--Kod/bilbana/yc4/main.m20
3 files changed, 33 insertions, 19 deletions
diff --git a/Kod/bilbana/yc4/do_boot.m b/Kod/bilbana/yc4/do_boot.m
index 44ae1e7..5019319 100644
--- a/Kod/bilbana/yc4/do_boot.m
+++ b/Kod/bilbana/yc4/do_boot.m
@@ -45,10 +45,14 @@ if car.running == true
%%
%% end
-
-
%% END BOOTSTRAP
- if car.segment > 2
+ if car.segment > 3
+ disp(car.constant);
+ seg_time = car.seg_times(1, 3)
+ laptime_forecast = seg_time / 0.102
+ forecast_ref_diff = laptime_forecast - car.ref_time
+ forecast_ref_diff_rel = forecast_ref_diff / car.ref_time
+ car.constant = car.constant + (forecast_ref_diff_rel * 0.15)
boot.status = 0;
disp('END OF BOOTSTRAP')
disp(car.num)
diff --git a/Kod/bilbana/yc4/do_car.m b/Kod/bilbana/yc4/do_car.m
index 26f9131..a6240ec 100644
--- a/Kod/bilbana/yc4/do_car.m
+++ b/Kod/bilbana/yc4/do_car.m
@@ -30,14 +30,6 @@ stop - Huruvida koden ska stoppas eller inte
stop = false;
if car.running == true
[car.new_lap, car.new_check_point, car.time] = get_car_position(car.num);
- %% KOMPENSERA FÖR TRASIG BANA
- [car1new_lap, car1new_check_point, ~] = get_car_position(1);
- if car1new_lap && (car1new_check_point || car1new_check_point)
- car.new_lap = 0;
- elseif car1new_lap
- car.new_lap = 1;
- end
- %%
if car.new_check_point == true && rand < car.miss_probability && car.lap >= 4
disp('Hoppar �ver givare');
car.new_check_point = false;
@@ -98,20 +90,24 @@ if car.running == true
if car.new_lap == false % choose_position krachar vid nytt varv (seg 10)
if car.lap ~= 0
car.seg_times(car.lap, car.segment) = toc(car.seg_tic);
- end
+ end
+
+ seg_time = car.seg_times(car.lap, car.segment);
+ car.forecasts(car.lap, car.segment) = seg_time / car.percents(car.segment);
+
car.segment = car.segment + 1;
car.seg_tic = tic;
if car.lap > 2 % S�kerhetsmarginal (B�r vara 1?)
disp(car)
[new_position, seg_plus] = ...
choose_position(car.position, car.segment, car.num, car.pos_at);
- if seg_plus ~= 0 && car.segment == 2
+ if seg_plus ~= 0 && car.segment == 2
disp('Hoppar �ver missad givare 1/2');
else
car.position = new_position;
car.segment = car.segment + seg_plus;
end
- if seg_plus ~= 0
+ if seg_plus ~= 0 && car.segment ~= 2
car.seg_times(car.lap, car.segment - seg_plus - 1) = 0;
disp(car.seg_times(car.lap, :))
disp(seg_plus)
@@ -127,6 +123,7 @@ if car.running == true
%% NEW LAP
if car.new_lap == true
disp('NEW LAP')
+
car.lap_constants = gov_set(car.constant);
car.new_lap = false; %TODO remove
beep;
@@ -147,6 +144,9 @@ if car.running == true
car.lap_tic = tic;
car.position = 0;
+ % save segment percentage from last lap
+ car.percents = fit_percents(car.percents, car.lap_times(car.lap), car.seg_times(car.lap,:))
+
if car.lap == 1 && size(car.seg_times, 2) < 9
disp('FEL: För få segment!!')
car.stopped = true;
diff --git a/Kod/bilbana/yc4/main.m b/Kod/bilbana/yc4/main.m
index 96e5374..7f5264b 100644
--- a/Kod/bilbana/yc4/main.m
+++ b/Kod/bilbana/yc4/main.m
@@ -20,7 +20,6 @@ global log_verbose;
log_verbose = false;
% INIT DISPLAY
if display_active
-
addpath display/ClientServerApp/Release
cd display/ClientServerApp/Release
!startServer
@@ -56,6 +55,7 @@ car1.seg_constant_list = []; % TODO
car1.position = 0;
car1.pos_at = [0.0 2.53 3.05 4.73 7.68 8.98 10.93 14.69 17.57 19.60];
car1.seg_len = [2.53 0.53 1.68 2.92 1.2 2.01 3.83 2.89 1.99];
+car1.percents = []; % TODO
car1.map = Bana1;
car1.approximation = [];
car1.miss_probability = 0.0;
@@ -76,6 +76,8 @@ car2.seg_times = [];
car2.position = 0;
car2.pos_at = [0.0 2.53 3.05 4.92 7.62 9.02 10.72 14.68 17.76 19.95];
car2.seg_len = [2.53 0.52 1.87 2.70 1.40 1.70 4.03 3.08 2.19];
+car2.percents = [0.088, 0.022, 0.102, 0.15, 0.058, 0.11, 0.212, 0.146, 0.113];
+
car2.map = Bana2;
car2.miss_probability = 0.1;
car2.seg_constant_list = []; % TODO
@@ -133,7 +135,8 @@ elseif not(isreal(ref_time))
ref_time = 13;
end
%}
-ref_time = 13
+car1.ref_time = 15;
+car2.ref_time = 15;
%% MAIN LOOP
while 1
readTime = tic;
@@ -159,7 +162,14 @@ while 1
if boot2.status
[car2, boot2] = do_boot(car2, boot2);
end
-
+ %% GOVERNOR
+ if not(boot1.status) && car1.lap ~= 0
+ car1 = do_gov(car1);
+ end
+ if not(boot2.status) && car2.lap ~= 0
+ car2 = do_gov(car2);
+ end
+ %%
if car1.stop == true
disp('stopped by car 1');
break;
@@ -230,12 +240,12 @@ end
%% DISPLAY GRAPHS
if car1.running == true
- graphs(car1.lap_times, ref_time, car1.seg_times, 1);
+ graphs(car1.lap_times, car1.ref_time, car1.seg_times, 1);
end
if car2.running == true
- graphs(car2.lap_times, ref_time, car2.seg_times, 2);
+ graphs(car2.lap_times, car2.ref_time, car2.seg_times, 2);
end
%% SAVE VARIABLES FROM CAR STRUCT