Skip to content

Commit c35f262

Browse files
committed
Fig issues
1 parent a05868a commit c35f262

File tree

6 files changed

+24
-32
lines changed

6 files changed

+24
-32
lines changed

data/wc_settings.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ wc_settings:
3232
ktf_high: 10.0 # tracking constant of the upper force controller
3333
winch_iter: 10 # iterations of the winch model
3434
max_acc: 8.0 # maximal acceleration of the winch (derivative of the set value of the reel-out speed)
35-
damage_factor: 0.1 # damage at max acceleration
35+
damage_factor: 0.4 # damage at max acceleration for jerk_factor=0
36+
jerk_factor: 0.9 # factor for the jerk (derivative of the acceleration), 0..1
3637
kv: 0.06 # proportional factor of the square root law, see function calc_vro
3738

examples/test_tuned_winchcontroller.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ V_WIND_MIN = 0.0 # min wind speed of test wind
3030
FREQ_WIND = 0.25 # frequency of the triangle wind speed signal
3131

3232
# create the logger
33-
lg = WCLogger(DURATION, wcs.dt, set.max_force, wcs.max_acc, wcs.damage_factor)
33+
lg = WCLogger(DURATION, wcs.dt, set.max_force, wcs.max_acc, wcs.damage_factor, wcs.jerk_factor)
3434

3535
STARTUP = get_startup(wcs, length(lg))
3636
V_WIND = STARTUP .* get_triangle_wind(wcs, V_WIND_MIN, V_WIND_MAX, FREQ_WIND, length(lg))
@@ -63,7 +63,7 @@ for i in 1:length(lg)
6363

6464
# log the values
6565
log(lg; v_ro=v_act, acc=get_acc(winch), state=get_state(wc), reset=status[1], active=status[2], force=status[3],
66-
f_set=status[4], f_err=get_f_err(wc), v_err=get_v_err(wc), v_set=get_v_set(wc), v_set_out, v_set_in=get_v_set_in(wc))
66+
jerk=winch.jerk, f_set=status[4], f_err=get_f_err(wc), v_err=get_v_err(wc), v_set=get_v_set(wc), v_set_out, v_set_in=get_v_set_in(wc))
6767
end
6868

6969
# plot the results
@@ -80,5 +80,5 @@ toc()
8080
println("Max iterations needed: $(wcs.iter)")
8181
println("Performance of force controllers: $(round(100*(1-f_err(lg)), digits=2)) %")
8282
println("Performance of speed controller: $(round(100*(1-v_err(lg)), digits=2)) %")
83-
println("Damage: $(round(100*(damage(lg; jerk=true)), digits=2)) %")
84-
println("Combined performance γ: $(round(100*gamma(lg; jerk=true), digits=2)) %")
83+
println("Damage: $(round(100*(damage(lg)), digits=2)) %")
84+
println("Combined performance γ: $(round(100*gamma(lg), digits=2)) %")

examples/test_winchcontroller.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ V_WIND_MIN = 0.0 # min wind speed of test wind
3030
FREQ_WIND = 0.25 # frequency of the triangle wind speed signal
3131

3232
# create the logger
33-
lg = WCLogger(DURATION, wcs.dt, set.max_force, wcs.max_acc, wcs.damage_factor)
33+
lg = WCLogger(DURATION, wcs.dt, set.max_force, wcs.max_acc, wcs.damage_factor, wcs.jerk_factor)
3434

3535
STARTUP = get_startup(wcs, length(lg))
3636
V_WIND = STARTUP .* get_triangle_wind(wcs, V_WIND_MIN, V_WIND_MAX, FREQ_WIND, length(lg))
@@ -63,7 +63,7 @@ for i in 1:length(lg)
6363

6464
# log the values
6565
log(lg; v_ro=v_act, acc=get_acc(winch), state=get_state(wc), reset=status[1], active=status[2], force=status[3],
66-
f_set=status[4], f_err=get_f_err(wc), v_err=get_v_err(wc), v_set=get_v_set(wc), v_set_out, v_set_in=get_v_set_in(wc))
66+
jerk=winch.jerk, f_set=status[4], f_err=get_f_err(wc), v_err=get_v_err(wc), v_set=get_v_set(wc), v_set_out, v_set_in=get_v_set_in(wc))
6767
end
6868

6969
# plot the results
@@ -80,5 +80,5 @@ toc()
8080
println("Max iterations needed: $(wcs.iter)")
8181
println("Performance of force controllers: $(round(100*(1-f_err(lg)), digits=2)) %")
8282
println("Performance of speed controller: $(round(100*(1-v_err(lg)), digits=2)) %")
83-
println("Damage: $(round(100*(damage(lg; jerk=true)), digits=2)) %")
84-
println("Combined performance γ: $(round(100*gamma(lg; jerk=true), digits=2)) %")
83+
println("Damage: $(round(100*(damage(lg)), digits=2)) %")
84+
println("Combined performance γ: $(round(100*gamma(lg), digits=2)) %")

scripts/autotune.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ function simulate(wcs::WCSettings; return_lg::Bool = false)
3737
FREQ_WIND = 0.25 # frequency of the triangle wind speed signal
3838

3939
# create the logger
40-
lg::WCLogger = WCLogger(DURATION, wcs.dt, set.max_force, wcs.max_acc, wcs.damage_factor)
40+
lg::WCLogger = WCLogger(DURATION, wcs.dt, set.max_force, wcs.max_acc, wcs.damage_factor, wcs.jerk_factor)
4141

4242
STARTUP = get_startup(wcs, length(lg))
4343
V_WIND = STARTUP .* get_triangle_wind(wcs, V_WIND_MIN, V_WIND_MAX, FREQ_WIND, length(lg))
@@ -74,7 +74,7 @@ function simulate(wcs::WCSettings; return_lg::Bool = false)
7474
return wcs, lg
7575
end
7676
# calculate the performance metrics
77-
-gamma(lg; jerk=true)
77+
-gamma(lg)
7878
end
7979

8080
function simulate_all(x::Vector; return_lg::Bool = false)
@@ -130,7 +130,7 @@ function autotune(max_iter=1000)
130130

131131
println("\nPerformance of force controllers: $(round(100*(1-f_err(lg)), digits=2)) %")
132132
println("Performance of speed controller: $(round(100*(1-v_err(lg)), digits=2)) %")
133-
println("Damage with jerk: $(round(100*(damage(lg; jerk=true)), digits=2)) %")
133+
println("Damage with jerk: $(round(100*(damage(lg)), digits=2)) %")
134134
println("Combined performance γ: $(round(-100*result.bbo_best_feas[1], digits=2)) %")
135135
wcs
136136
end

src/logging.jl

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ $(TYPEDFIELDS)
2121
max_acc::Float64 = 0.0
2222
"damage at maximum acceleration"
2323
damage_factor::Float64 = 0.0
24+
"jerk factor for damage calculation"
25+
jerk_factor::Float64 = 0.0
2426
"set value of the reel-out speed, input of the speed controller [m/s]"
2527
v_set_in::Vector{Float64} = zeros(Float64, Q)
2628
"reel-out speed [m/s]"
@@ -66,13 +68,14 @@ Create and initialize a logger for the winch controller system.
6668
# Returns
6769
A logger object configured to record data at the specified interval for the given duration.
6870
"""
69-
function WCLogger(duration, dt, max_force=0.0, max_acc=0.0, damage_factor=0.0)
71+
function WCLogger(duration, dt, max_force=0.0, max_acc=0.0, damage_factor=0.0, jerk_factor=0.0)
7072
samples = Int(duration / dt + 1)
7173
lg = WCLogger(samples)
7274
lg.time = range(0.0, duration, samples)
7375
lg.max_force = max_force
7476
lg.max_acc = max_acc
7577
lg.damage_factor = damage_factor
78+
lg.jerk_factor = jerk_factor
7679
lg
7780
end
7881

@@ -161,23 +164,9 @@ function v_err(logger::WCLogger)
161164
1/v_mean * rms(filter(!isnan, logger.v_err))
162165
end
163166

164-
function damage(logger::WCLogger; rms= false, jerk=false)
165-
if jerk
166-
return damage3(logger)
167-
elseif rms
168-
return damage2(logger)
169-
end
170-
logger.damage_factor * (maximum(norm.(logger.acc)) / logger.max_acc)^2
171-
end
172-
173-
function damage2(logger::WCLogger)
174-
rms_damage = rms(filter(!isnan, logger.acc))
175-
logger.damage_factor * ((0.83*rms_damage + 0.55*(maximum(norm.(logger.acc)))) / logger.max_acc)^2
176-
end
177-
178-
function damage3(logger::WCLogger)
179-
jerk_factor=0.9
180-
logger.damage_factor*4* ((jerk_factor*(rms(logger.jerk) / logger.max_acc^2)^2 +
167+
function damage(logger::WCLogger)
168+
jerk_factor= logger.jerk_factor
169+
logger.damage_factor*((jerk_factor*(rms(logger.jerk) / logger.max_acc^2)^2 +
181170
(1-jerk_factor)*(maximum(norm.(logger.acc)))) / logger.max_acc)^2
182171
end
183172

@@ -193,6 +182,6 @@ the provided logs, stored in the `logger`. See: [Combined performance](@ref).
193182
# Returns
194183
- The gamma value associated with the log of the used test case.
195184
"""
196-
function gamma(logger::WCLogger; rms=false, jerk=false)
197-
1 - 0.5 * (f_err(logger) + v_err(logger)) - damage(logger; rms, jerk)
185+
function gamma(logger::WCLogger)
186+
1 - 0.5 * (f_err(logger) + v_err(logger)) - damage(logger)
198187
end

src/wc_settings.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ $(TYPEDFIELDS)
7474
max_acc = 8.0
7575
"damage at max acceleration"
7676
damage_factor = 0.2
77+
"jerk factor for damage calculation"
78+
jerk_factor = 0.9
7779
"proportional factor of the square root law, see function calc_vro"
7880
kv = 0.06
7981
end

0 commit comments

Comments
 (0)