summaryrefslogtreecommitdiffstats
path: root/Kod/bilbana/yc4/do_car.m
diff options
context:
space:
mode:
Diffstat (limited to 'Kod/bilbana/yc4/do_car.m')
-rw-r--r--Kod/bilbana/yc4/do_car.m31
1 files changed, 23 insertions, 8 deletions
diff --git a/Kod/bilbana/yc4/do_car.m b/Kod/bilbana/yc4/do_car.m
index f205f02..cf534fa 100644
--- a/Kod/bilbana/yc4/do_car.m
+++ b/Kod/bilbana/yc4/do_car.m
@@ -1,4 +1,4 @@
-function [car, stop, display_data] = do_car(car, t, display_data)
+function [car, stop, display_data] = do_car(car, t, display_data, boot)
%DO_CAR Ger nya värden till struct car, avgör om koden ska stoppas samt hämtar displaydata.
%{
Input/Output:
@@ -44,7 +44,7 @@ end
%% READ INPUT FROM TRACK
if car.running == true
if car.lap ~= 0
- if toc(car.seg_tic) > 9.0
+ if toc(car.seg_tic) > 9.0 && not(boot.status)
set_car_speed(1, 0);
set_car_speed(2, 0);
%disp(strjoin({'Avåkning bil', num2str(car.num)}));
@@ -90,20 +90,31 @@ 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)
+ lap_time_now = toc(car.lap_tic)
+ % s = vt
+ % v = s/t
+ % t = s/v
+ prev_seg_v = car.seg_len(car.segment) / toc(car.seg_tic)
+ track_remaining = car.pos_at(length(car.pos_at)) - car.pos_at(car.segment + 1)
+
+ car.forecasts(car.lap, car.segment) = lap_time_now + track_remaining/prev_seg_v
+
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)
@@ -118,7 +129,9 @@ if car.running == true
%% NEW LAP
if car.new_lap == true
- car.lap_constants = gov_set(get_car_constant(car.num));
+ disp('NEW LAP')
+
+ car.lap_constants = gov_set(car.constant);
car.new_lap = false; %TODO remove
beep;
if car.lap == 0
@@ -138,6 +151,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;
@@ -156,8 +172,7 @@ end
%% CALCULATE
if car.running == true && car.automatic == true
car.v = get_new_v(car.position, car.map);
- seg_constant = get_seg_constant(car.position, car.lap_constants, car.num, car.pos_at);
- car.u = get_new_u(car.v, seg_constant);
+ car.u = get_new_u(car.v, car.constant);
end
%% CONTROLLER