Skip to content

Commit bd27928

Browse files
committed
Improve test scripts
1 parent ebe28e6 commit bd27928

2 files changed

Lines changed: 33 additions & 13 deletions

File tree

test/test_flightpathcalculator.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ end
66
using Timers; tic()
77

88
using KiteControllers, KiteModels
9+
using KiteUtils: Settings
910

10-
set = deepcopy(load_settings("system.yaml"))
11+
set::Settings = deepcopy(load_settings("system.yaml"))
1112
kcu::KCU = KCU(set)
1213
kps4::KPS4 = KPS4(kcu)
1314

@@ -17,6 +18,6 @@ fpps::FPPSettings = FPPSettings()
1718
u_d0 = 0.01 * set.depower_offset
1819
u_d = 0.01 * set.depower
1920
ssc::SystemStateControl = SystemStateControl(wcs, fcs, fpps; u_d0, u_d, v_wind=set.v_wind)
20-
dt = wcs.dt
21+
dt::Float64 = wcs.dt
2122

2223
fpca = ssc.fpp.fpca

test/test_fpc_low_right.jl

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,37 +50,56 @@ viewer::Viewer3D = Viewer3D(SHOW_KITE)
5050

5151
log = load_log("failure_low_right.arrow2")
5252
sl = log.syslog
53+
log_len = length(sl)
54+
55+
if I_START < 1 || I_START > log_len
56+
error("I_START=$(I_START) is outside log range 1:$(log_len)")
57+
end
5358

5459
steps = Int64(MAX_TIME/dt)
5560
particles = set.segments + 5
5661
logger::Logger = Logger(particles, steps)
5762

5863
function simulate(integrator)
5964
i=1
60-
sys_state = sl[I_START]
65+
# Read initial controller state from individual columns to avoid
66+
# StructArray row access issues on undefined references.
67+
phi = sl.azimuth[I_START]
68+
beta = sl.elevation[I_START]
69+
psi = wrap2pi(sl.heading[I_START])
70+
chi = wrap2pi(sl.course[I_START])
71+
v_a = sl.v_app[I_START]
72+
last_phi_printed = nothing
73+
sys_state = SysState(kps4)
6174
println("on_control_command...")
6275
on_control_command(fpc; attractor=deg2rad.(attractor), intermediate=true)
6376
while true
64-
phi = sys_state.azimuth
65-
v_a = sys_state.v_app
66-
# chi = sys_state.course
67-
u_d = sl[I_START+i-1].depower
68-
beta = sys_state.elevation
69-
# psi = sys_state.heading
70-
psi = wrap2pi(sys_state.heading)
71-
chi = wrap2pi(sys_state.course)
77+
idx = I_START + i - 1
78+
if idx > log_len
79+
println("Stopping: reached end of input log at index $(log_len).")
80+
break
81+
end
82+
u_d = sl.depower[idx]
83+
v_ro = sl.v_reelout[idx]
7284
KiteControllers.set_azimuth_elevation(fpca, phi, beta)
7385
omega = fpca._omega
7486
# println("omega: $omega")
75-
println("phi: ", rad2deg(phi))
87+
if isnothing(last_phi_printed) || phi != last_phi_printed
88+
println("phi: ", rad2deg(phi))
89+
last_phi_printed = phi
90+
end
7691
on_est_sysstate(fpc, phi, beta, -psi, -chi, omega, v_a; u_d=u_d)
7792
steering = calc_steering(fpc, true)
7893
on_timer(fpc)
7994
set_depower_steering(kps4.kcu, u_d, steering)
80-
v_ro = sl[I_START+i-1].v_reelout
8195
# v_ro = -1
8296
KiteModels.next_step!(kps4, integrator; set_speed=v_ro, dt=dt)
8397
sys_state = SysState(kps4)
98+
phi = sys_state.azimuth
99+
v_a = sys_state.v_app
100+
beta = sys_state.elevation
101+
psi = wrap2pi(sys_state.heading)
102+
chi = wrap2pi(sys_state.course)
84103
sys_state.var_06 = fpca.fpc.ndi_gain
85104
sys_state.var_07 = fpca.fpc.chi_set
86105
KiteViewers.update_system(viewer, sys_state; scale = 0.04/1.1, kite_scale=set.kite_scale)

0 commit comments

Comments
 (0)