Repository navigation
Fly against AWETrim's new LEI-V3 ROM: depower offset, KCU steering limits, seed band, high-wind figure, startup wind ramp, high-wind start length - #26
Open
ocayon wants to merge 3 commits into
Conversation
…d, startup wind ramp At the same power tape V3Kite and the new ROM do not pull the same: at matched lift + drag resultant V3Kite's tape is the ROM's minus 0.372 m (std 0.010 m; validate_lift_drag.jl + AWETrim's examples/server/identify_depower_offset.py), so depower_offset is -0.074. Power ratio Cabauw 4 m/s 0.52 -> 1.11, Maasvlakte 4 m/s 0.58 -> 1.21; Cabauw 7 0.99, Cabauw 10 0.89 (from 180 m), Maasvlakte 7 1.07, Maasvlakte 10 0.96. The depower seed bounds are the ROM's band, 1.5-2.6 m, and the seed cap 2.45 m: at 10 m/s the optimum is near 2.4 m. The high-wind figure is 17° tall (was 13°) from 12.5 m/s at 100 m (was 13.2), guess centre 33°: at 13° the laps outran the 0.29 1/s steering slew. A startup wind ramp (guess.startup_wind_ramp_start / _step, 7 and 1 m/s, 0 = off) solves at the start wind and steps up warm to the run's: Cabauw 10 m/s failed cold from every seed. Needs AWETrim with the ROM's angle-of-attack range as the reel-out box (feat/server-aero-forces). Open: Cabauw 10 from 150 m; the Maasvlakte 4 m/s phase-5 transition with the kite flying below the turn-rate table's 0.20. Generated with Claude Code
Next to the low-wind schedule (low_wind: section of fc_settings_reelout.yaml), high_wind_speed / high_wind_l_tether start the reel-out at a longer tether in strong wind (high_wind_l_tether(), applied by apply_low_wind_schedule!, an l_tether override still wins). On AWETrim's 2026-11-05 ROM Cabauw 10 m/s (19.3 m/s at 100 m) has no feasible startup path at 150 m: the figure big enough for the 0.29 1/s steering slew dips under the 50 m height floor. From 180 m it flies at a power ratio of 0.89. Cabauw 7 (13.5) and Maasvlakte 10 (12.9) keep 150 m. Generated with Claude Code
…om 1.7 m
Every /init now carries steering_limits {max, rate}: the course controller's
max_steering and the steering tape's v_steering of the run's settings (0.32 and
0.2 1/s on the V3), so AWETrim plans no turn the KCU cannot fly. Its own box is
the ROM's, 0.357 and 0.29 1/s. V3Kite's rel_steering and the ROM's u_s are the
same unit (tape half-difference over 1.4 m). Left out of the request key while
unset, so the cached entries stay valid.
DEPOWER_SEED_BOUNDS follows the ROM's band, now 1.7-2.6 m: the 2025 flights stall
already at 1.7 m of power tape.
Generated with Claude Code
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
awetrim-rom-2026-11-05→main. Needs the AWETrim server fromdevelop, which now includes the companion PR (awegroup/AWETrim#31, merged). Older servers fail it, for two reasons:steering_limitsthis branch sends.The ROM it flies is AWETrim develop's default: the turn-rate steering law, depower box 1.7–2.6 m.
Why
With the new ROM, the 2026-11-07 run at Cabauw 10 m/s reached a power ratio of 0.31, and the 4 m/s cases flew about half the predicted force. The ROM is not the cause.
V3Kite and the ROM do not pull the same at the same power tape. Uwe's
validate_lift_drag.jl(V3Kite parked at six tapes, 1.5–2.45 m, v_a 15.3 m/s) against AWETrim's/aero_forcesgives the ROM 1.3–1.5 times V3Kite's lift at every tape. Matched by lift + drag resultant instead (AWETrim'sexamples/server/identify_depower_offset.py), the map is a pure offset:The offset is −0.372 m with a std of 0.010 m (unchanged with the turn-rate ROM: its lift and drag are the same identification); a linear fit gives a gain of 0.977, so no gain is needed.
depower_offset= −0.372 m / 5 m = −0.074. V3Kite's 6 % higher L/D at matched force is why the ratios end up slightly above 1. One tape map cannot close that gap.The remaining changes get the optimizer to a startup path in strong wind, where the new ROM has to depower far (to about 2.4 m at 10 m/s against a 7.2 kN winch cap).
Changes
depower_offset−0.074 (traj_opt.yaml), with the derivation in the comment./init(steering_limits_from(fcs, set)): the course controller'smax_steeringand the tape'sv_steering, 0.32 and 0.20 1/s, against the optimizer's own 0.357 and 0.29 1/s. V3Kite'srel_steeringand the ROM's u_s are the same unit (tape half-difference over 1.4 m). The request key leaves the field out while it is unset, so cached entries stay valid.DEPOWER_SEED_BOUNDS, was 1.1–2.3; the ROM's validity band. AWETrim's ROM starts at 1.7 m because the 2025 flights already stall there) andinput_depower_seed_max2.45 m (was 1.85). At 10 m/s the optimum is near 2.4 m, and the seed march cannot start from 1.85 m.pattern_elevation_amplitude_max_high17° (was 13°), from 12.5 m/s at 100 m (was 13.2, so Maasvlakte 10 m/s at 12.9 gets it too), andguess_el_center_high33° (was 30°). With 13° the laps outran the optimizer's steering slew (0.29 1/s).guess.startup_wind_ramp_start7 m/s,startup_wind_ramp_step1 m/s,0.0= off). Above the start wind, the startup solve runs at the start wind and then steps the wind up warm through/step(chain_stepwithinflow_conditions) to the run's wind. Only the final reply is flown. Cabauw 10 m/s failed cold from every seed; through the ramp it solves on the first seed.low_wind:section offc_settings_reelout.yaml,high_wind_speed16 m/s at 100 m,high_wind_l_tether180 m,high_wind_l_tether()). At 150 m, Cabauw 10 m/s (19.3 m/s at 100 m) has no feasible startup path: a figure big enough for the steering slew dips under the 50 m height floor. Cabauw 7 and Maasvlakte 10 keep 150 m.Results (2026-11-10, the AWETrim code now on
develop, default turbulence)These runs include the steering limits. The planned steering rate reaches the 0.20 1/s limit, and every case remained feasible. With the previous (roll-gain) ROM and without the limits, the ratios were 1.11, 0.99, 0.89, 1.21, 1.07 and 0.96.
Open (not in this PR)
Tests
startup_wind_ramp(fake server: init at 7 m/s, warm steps to 9 m/s), thehigh_wind_l_tetherchecks, andsteering_limitsin the request key and JSON.test_awetrim_client,test_opt_request,test_reopt_chainandtest_startup_pipelinepass, apart from thewrite_run_donefailure below. The full count of 1588 is from the commit before.seeding_solveruns with the ramp off.script_inputs,write_run_done,ensure_gui_state_file) also fail on a cleanmainand look Windows-specific (path separators, file mode). The runs were made on Windows.After merging
Delete the optimizer caches (
output/opt_failure_cache.yaml,output/opt_chain_cache/): their keys cannot see the server's ROM. Then pull AWETrimdevelopand restart the server from it (python examples/server/run_reelout_server.py). Redo the offset whenever the ROM or V3Kite changes: runvalidate_lift_drag.jl, thenpython examples/server/identify_depower_offset.py output/lift_drag_validation.jsonin AWETrim.Written by Claude, reviewed by Oriol Cayon
🤖 Generated with Claude Code