@@ -50,37 +50,56 @@ viewer::Viewer3D = Viewer3D(SHOW_KITE)
5050
5151log = load_log (" failure_low_right.arrow2" )
5252sl = 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
5459steps = Int64 (MAX_TIME/ dt)
5560particles = set. segments + 5
5661logger:: Logger = Logger (particles, steps)
5762
5863function 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