-
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* use dierkcx instead of datainterpolations * pass motor to calc acc * getting there * add xfoil * add model formulas * make scripts * working model at around 1 times realtime * looks pretty good * oscillations because of no perpendicular damping * better creation and loading of polars * works but oscillates * working speed control * small fix * working example * proper init * works for shorter lines as well * working stable state * fast and works well * fix project toml * add better flap damping * fixed wrong ram force * improve ram pressure * faster init * add default foil shape file * faster solver * add error handling * add assertion * better polars * remove DataInterpolations * fix drag, oscillation and heading direction * add gravity to flaps * no stabilizing * solve overdetermined system * fix tests * use float32 * fix precompile and remove dtmin * use succes function * don't use reinit * make model! usable from outside package * set s.torque_control in init * add set_values to variables * temp remove modelingtoolkit version * update mtk to latest * remove mtk version requirements * remove datainterp * fix 2 segment model * rm true statement * change to bin and interpolations.jl * fixed tests * use smooth sign * fix rad deg mistake * fix annoying test * positive height * add bin and dat file * fix test data path --------- Co-authored-by: Uwe Fechner <uwe.fechner.msc@gmail.com> Co-authored-by: Uwe Fechner <fechner@aenarete.eu>
- Loading branch information
1 parent
c456936
commit dba6998
Showing
18 changed files
with
1,262 additions
and
645 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
*.obj | ||
*.xopp | ||
*.so | ||
*.so.bak | ||
|
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
MH 82 13.31% - http://airfoiltools.com/airfoil/details?airfoil=mh82-il - polars created | ||
1.00000000 0.00000000 | ||
0.99661459 0.00010716 | ||
0.98648759 0.00057417 | ||
0.96976242 0.00167959 | ||
0.94674359 0.00367565 | ||
0.91787545 0.00675919 | ||
0.88371761 0.01105153 | ||
0.84491677 0.01659048 | ||
0.80217789 0.02332527 | ||
0.75623764 0.03112511 | ||
0.70784007 0.03978495 | ||
0.65771739 0.04904355 | ||
0.60657341 0.05859424 | ||
0.55507239 0.06810553 | ||
0.50383005 0.07723291 | ||
0.45340892 0.08563711 | ||
0.40431563 0.09299494 | ||
0.35700062 0.09901144 | ||
0.31186073 0.10342997 | ||
0.26924218 0.10603084 | ||
0.22944828 0.10664471 | ||
0.19275386 0.10507496 | ||
0.15919742 0.10111480 | ||
0.12865471 0.09486478 | ||
0.10114620 0.08660842 | ||
0.07670830 0.07665259 | ||
0.05541508 0.06541510 | ||
0.03742189 0.05331020 | ||
0.02286177 0.04072192 | ||
0.01180557 0.02807192 | ||
0.00430956 0.01589603 | ||
0.00048929 0.00484950 | ||
0.00007086 0.00175419 | ||
0.00002622 -0.00101996 | ||
0.00034816 -0.00353243 | ||
0.00078039 -0.00502846 | ||
0.00143495 -0.00631603 | ||
0.00242331 -0.00744430 | ||
0.00376965 -0.00852044 | ||
0.00632469 -0.01007170 | ||
0.00946271 -0.01156191 | ||
0.01867771 -0.01481702 | ||
0.03671504 -0.01897587 | ||
0.05993648 -0.02230735 | ||
0.08812913 -0.02462698 | ||
0.12123607 -0.02596768 | ||
0.15896894 -0.02658615 | ||
0.20083798 -0.02664454 | ||
0.24631809 -0.02624375 | ||
0.29484983 -0.02546371 | ||
0.34584166 -0.02437799 | ||
0.39867639 -0.02304567 | ||
0.45271686 -0.02152507 | ||
0.50731291 -0.01986154 | ||
0.56180823 -0.01809995 | ||
0.61554743 -0.01627195 | ||
0.66788318 -0.01440561 | ||
0.71818292 -0.01251060 | ||
0.76584748 -0.01056846 | ||
0.81037800 -0.00854699 | ||
0.85134987 -0.00650607 | ||
0.88832129 -0.00457027 | ||
0.92082546 -0.00287905 | ||
0.94837899 -0.00154846 | ||
0.97049733 -0.00064794 | ||
0.98672053 -0.00016877 | ||
0.99665170 -0.00001402 | ||
1.00000000 0.00000000 |
Binary file not shown.
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
using KiteModels, OrdinaryDiffEqCore, OrdinaryDiffEqBDF, OrdinaryDiffEqSDIRK, LinearAlgebra, Timers, Statistics | ||
using Base: summarysize | ||
tic() | ||
|
||
using Pkg | ||
if ! ("ControlPlots" ∈ keys(Pkg.project().dependencies)) | ||
using TestEnv; TestEnv.activate() | ||
end | ||
using ControlPlots | ||
|
||
set = deepcopy(load_settings("system_3l.yaml")) | ||
# set.elevation = 71 | ||
dt = 0.05 | ||
total_time = 9.0 | ||
|
||
steps = Int(round(total_time / dt)) | ||
logger = Logger(3*set.segments + 6, steps) | ||
|
||
if !@isdefined s; s = KPS4_3L(KCU(set)); end | ||
s.set = update_settings() | ||
s.set.abs_tol = 0.0006 | ||
s.set.rel_tol = 0.001 | ||
s.set.l_tether = 50.0 | ||
# s.set.damping = 473 | ||
# s.set.elevation = 85 | ||
println("init sim") | ||
@time KiteModels.init_sim!(s; prn=true, torque_control=false) | ||
# @time next_step!(s; set_values=[0.0, 0.0, 0.0], dt=2.0) | ||
println("vel ", mean(norm.(s.integrator[s.simple_sys.force]))) | ||
sys_state = KiteModels.SysState(s) | ||
|
||
println("stepping") | ||
total_step_time = 0.0 | ||
toc() | ||
steering = [0.0, 0.0, 0.0] | ||
amount = 0.6 | ||
sign = 1 | ||
for i in 1:steps | ||
time = (i-1) * dt | ||
Core.println("time: ", time) | ||
global total_step_time, sys_state, steering, sign | ||
if s.tether_lengths[1] > s.tether_lengths[2] + 0.1 | ||
sign = -1 | ||
elseif s.tether_lengths[1] < s.tether_lengths[2] - 0.1 | ||
sign = 1 | ||
end | ||
steering[1] += sign * dt * amount | ||
steering[2] -= sign * dt * amount | ||
|
||
sys_state.var_01 = rad2deg(s.flap_angle[1]) - 10 | ||
sys_state.var_02 = rad2deg(s.flap_angle[2]) - 10 | ||
sys_state.var_03 = s.tether_lengths[1] | ||
sys_state.var_04 = s.tether_lengths[2] | ||
sys_state.var_05 = s.tether_lengths[3] | ||
sys_state.var_06 = rad2deg(s.integrator[s.simple_sys.seg_flap_angle[div(s.set.aero_surfaces, 2)]] - s.integrator[s.simple_sys.aoa[div(s.set.aero_surfaces, 2)]]) | ||
sys_state.var_07 = rad2deg(s.integrator[s.simple_sys.flap_vel[1]]) | ||
sys_state.var_08 = norm(s.D_C) | ||
sys_state.var_09 = norm(s.D_D) | ||
sys_state.var_10 = (s.integrator[s.simple_sys.vel[:, s.num_E-3]]) ⋅ s.e_z | ||
sys_state.var_11 = norm(s.integrator[s.simple_sys.vel[:, s.num_E-3]] .- (s.integrator[s.simple_sys.vel[:, s.num_E-3]]) ⋅ s.e_z) | ||
|
||
step_time = @elapsed next_step!(s; set_values=steering, dt=dt) | ||
if time > total_time/2 | ||
total_step_time += step_time | ||
end | ||
|
||
KiteModels.update_sys_state!(sys_state, s) | ||
log!(logger, sys_state) | ||
l = s.set.l_tether+10 | ||
# plot2d(s.pos, time; zoom=true, front=true, xlim=(-l/2, l/2), ylim=(0, l)) | ||
end | ||
|
||
times_reltime = (total_time/2) / total_step_time | ||
println("times realtime MTK model: ", times_reltime) | ||
# println("avg steptime MTK model: ", total_step_time/steps) | ||
|
||
p=plotx(logger.time_vec, | ||
[logger.var_01_vec, logger.var_02_vec], | ||
[logger.var_03_vec, logger.var_04_vec], | ||
rad2deg.(logger.heading_vec), | ||
[logger.var_06_vec, logger.var_07_vec], | ||
[logger.var_08_vec, logger.var_09_vec], | ||
[logger.var_10_vec, logger.var_11_vec]; | ||
ylabels=["Steering", "Length", "heading [deg]", "Angle / Force", "Force", "Vel"], | ||
labels=[ | ||
["Steering Pos C", "Steering Pos D"], | ||
["Left tether", "Right tether"], | ||
"heading", | ||
["Flap angle", "Flap vel"] , | ||
["Drag C", "Drag D"], | ||
["Vel par", "Vel perp"]], | ||
fig="Steering and heading MTK model") | ||
display(p) |
Oops, something went wrong.