@@ -5,7 +5,7 @@ if ! ("ControlPlots" ∈ keys(Pkg.project().dependencies))
55 using TestEnv; TestEnv. activate ()
66 using Test
77end
8- using WinchControllers, WinchModels, KiteUtils, ControlPlots, ControlSystemsBase, FiniteDiff
8+ using WinchControllers, WinchModels, KiteUtils, ControlPlots, ControlSystemsBase, FiniteDiff, RobustAndOptimalControl
99import FiniteDiff: finite_difference_jacobian
1010
1111if isfile (" data/system_tuned.yaml" )
@@ -94,14 +94,33 @@ function open_loop_system(winch, v_set, v_wind)
9494 return C * sys
9595end
9696
97- for v_wind in range (7.5 , 9 , length= 2 )
97+ function margins (sys)
98+ margins = []
99+ for v_wind in range (1 , 9 , length= 9 )
100+ global sys
101+ local v_set, dm
102+ v_set = 0.57 * v_wind
103+ sys = open_loop_system (winch, v_set, v_wind)
104+ dm = diskmargin (sys)
105+ push! (margins, dm. margin)
106+ end
107+ min_margin = minimum (margins)
108+ if min_margin < 0.3
109+ @error " System is unstable with a minimum margin of: $min_margin "
110+ elseif min_margin < 0.5
111+ @warn " System is marginally stable with a minimum margin of: $min_margin "
112+ else
113+ @info " System is stable with a minimum margin of: $min_margin "
114+ end
115+ return margins
116+ end
117+ margins (sys)
118+
119+ for v_wind in range (7.5 , 9 , length= 3 )
98120 global sys
99121 local v_set
100122 v_set = 0.57 * v_wind
101- # @info "Linearizing for v_wind: $v_wind m/s, v_ro: $(round(v_set, digits=2)) m/s"
102123 sys = open_loop_system (winch, v_set, v_wind)
103- gm, pm, wgm, wpm = margin (sys; adjust_phase_start= false )
104- @info " Gain margin: $gm , Phase margin: $pm , Gain crossover frequency: $wgm , Phase crossover frequency: $wpm "
105- bode_plot (sys; from= 0.76 , to= 2.85 , title= " Linearized System, v_wind=8..9 m/s" )
124+ bode_plot (sys; from= 0.76 , to= 2.85 , title= " System with UFC, v_wind=7.5..9 m/s" )
106125end
107- sys
126+ nothing
0 commit comments