Skip to content

Commit

Permalink
Adapt to new KiteModels, using new conventions (#39)
Browse files Browse the repository at this point in the history
* use fix_yaw branch of KiteModels

* optimize p and d only

* changes for new heading

* works ok

* better settings

* OK now

* fix plot

* Fix display

* some fixes

* fix steering sign

* reduce tolerances

* plot SET_STEERING

* add parking.drawio

* add file to .gitignore

* plot upwind_dir

* change gains

* cleanup

* better plotting

* use SWD orientation

* working fine with main branch of KiteModels

* fix parking_wind_dir.jl

* plot heading

* fix sign, retune

* working fine now

* fix parking_4p

* improve controller gains

* higher gain

* Fix autopilot.jl

* minor changes

* add drawing

* add Project.toml

* use eager registry

* Bump KiteUtils to 0.8.2

* use branch KiteModels#azimuth

* parking_wind_dir.jl works, some oscillations

* increase gain

* 10 degree work fine

* update tune_4p

* 20 degree work fine

* 45 deg works fine now

* add parking_wind_dir_90.jl

* cleanup

* fix syntax errors

* use neg_heading

* fix example

* use param one_point

* minor changes

* fixed autopilot.jl

* add moving_average

* add moving average

* pretty good

* 90 deg turn

* add file to .gitignore

* small fix

* fix legend

* cleanup

* use released version KiteModels 0.6.7

* Bump KiteModels

* autopilot with large kite works

* add param v_wind

* add asserts

* call update

* cleanup

* add asserts

* fix for new KiteModels

* add links

* working

* Bump KiteUtils to 0.8.3

* Bump KiteModels to 0.6.8

* update kcu settings

* fixes

* cleanup

* fix sign

* working fine

* works now

* very good

* add todo

* better tuning

* Fixed for system.yaml

* works fine at 7.7 m/s

* v9 good with 13 m/s

* down to 11 m/s

* down to 10.5 m/s

* down to 9 m/s

* down to 8.5 m/s

* some progress

* some fixes

* cs_4p now 1.0

* cleanup

* cleanup

* some fixes

* add cs_4p=1

* fix sign of steering

* some fixes

* fixed minipilot.jl

* fix tests

* refactoring

* fix minipilot_12.jl

* minor fix

* remove autopilot_1p.jl

* some fixes

* cleanup

* cleanup

* cleanup

* cleanup

* better tuning

* works fine now

* cleanup

* cleanup

* better tuning

* down to 6.5 m/s

* refactoring, load settings from file

* refactoring

* bugfix

* improve settings

* add comment

* minipilot and fpc_settings work fine

* fix autopilot

* minor changes

* some fixes

* update minipilot

* fix tune_4p

* fix tests

* one more fix

* more fixes

* more fixes

* update CI.yml

* Undo last commit, remove pre

* install matplotlib on Linux

* set PYTHON_PATH

* add file to .gitignore

---------

Co-authored-by: Uwe Fechner <u.fechner-1@tudelft.nl>
  • Loading branch information
ufechner7 and Uwe Fechner authored Oct 27, 2024
1 parent 644bf81 commit 192e4e9
Show file tree
Hide file tree
Showing 42 changed files with 516 additions and 217 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ jobs:
version:
- '1.10'
- '1'
- 'pre'
os:
- ubuntu-latest
arch:
Expand All @@ -34,6 +33,9 @@ jobs:
arch: x64
version: 1
steps:
- name: Install matplotlib
run: if [ "$RUNNER_OS" = "Linux" ]; then sudo apt-get install -y python3-matplotlib; export PYTHON=$PYTHON_PATH; fi
shell: bash
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v2
with:
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,7 @@ data/corr_vec.jld2.bak
output/*.arrow
data/gui.yaml
bin/kps-image-1.10-plot_II.so
docs/.$parking.drawio.bkp
examples_3d/Manifest.toml
bin/kps-image-1.10-fix_yaw.so
Manifest-v1.11.toml
9 changes: 6 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,17 @@ version = "0.2.10"

[deps]
JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819"
KiteModels = "b94af626-7959-4878-9336-2adc27959007"
KiteUtils = "90980105-b163-44e5-ba9f-8b1c83bb0533"
NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56"
NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
Observables = "510215fc-4207-5dde-b226-833fc4488ee2"
Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
Rotations = "6038ab10-8711-5258-84ad-4b1120ba62dc"
StaticArrayInterface = "0d7ed370-da01-4f52-bd93-41d350b8b718"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4"
Timers = "21f18d07-b854-4dab-86f0-c15a3821819a"
WinchModels = "7dcfa46b-7979-4771-bbf4-0aee0da42e1f"
Expand All @@ -21,9 +24,9 @@ YAML = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
[compat]
ControlPlots = "0.2.1"
JLD2 = "0.5.2"
KiteModels = "0.6.6"
KiteUtils = "0.7"
KiteViewers = "0.4.16"
KiteModels = "0.6.8"
KiteUtils = "0.8.3"
KiteViewers = "0.4.19"
NLsolve = "4.5"
NonlinearSolve = "3.10.0"
Observables = "0.3, 0.4, 0.5"
Expand Down
1 change: 1 addition & 0 deletions bin/create_sys_image
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ fi
mkdir -p output

export MPLBACKEND=qt5agg
export JULIA_PKG_SERVER_REGISTRY_PREFERANCE=eager

if ! command -v juliaup &> /dev/null; then
echo "Please install the Julia installer 'juliaup'!"
Expand Down
1 change: 1 addition & 0 deletions bin/run_julia
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ else
fi

GCT="--gcthreads=$FAST_CORES,1"
export JULIA_PKG_SERVER_REGISTRY_PREFERANCE=eager

julia_version=$(julia --version | awk '{print($3)}')
julia_major=${julia_version:0:3}
Expand Down
5 changes: 3 additions & 2 deletions data/fpc_settings.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# settings for the 20 qm kite
fpc_settings:
dt: 0.025 # time step of the flight path controller
log_level: 2 # log level, 0=quiet
Expand All @@ -13,9 +14,9 @@ fpc_settings:
reset_int1_to_zero: true
init_opt_to_zero: false # if the root finder should start with zero

p: 20.0 # P gain of the PID controller
p: 20 # P gain of the PID controller
i: 1.2 # I gain of the PID controller
d: 10.0 # D gain of the PID controller
d: 10 # D gain of the PID controller
gain: 0.04 # additional factor for P, I and D
c1: 0.0612998898221 # was: 0.0786
c2: 1.22597628388 # was: 2.508
Expand Down
11 changes: 7 additions & 4 deletions data/settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ steering:
k_ds: 1.5 # influence of the depower angle on the steering sensitivity
delta_st: 0.02 # steering increment (when pressing RIGHT)
max_steering: 16.83 # max. steering angle of the side planes for four point model [degrees]
cs_4p: 1.0 # correction factor for the steering of the four point model

depower:
alpha_d_max: 31.0 # max depower angle [deg]
Expand Down Expand Up @@ -77,10 +78,12 @@ bridle:
rel_damping: 6.0 # relative damping of the kite spring (relative to main tether) [-]

kcu:
kcu_mass: 8.4 # mass of the kite control unit [kg]
power2steer_dist: 1.3 # [m]
depower_drum_diameter: 0.069 # [m]
tape_thickness: 0.0006 # [m]
kcu_model: "KCU1" # name of the kite control unit model, KCU1 or KCU2
kcu_mass: 8.4 # mass of the kite control unit [kg]
kcu_diameter: 0.4 # diameter of the KCU for drag calculation [m]
power2steer_dist: 1.3 # [m]
depower_drum_diameter: 0.069 # [m]
tape_thickness: 0.0006 # [m]
v_depower: 0.075 # max velocity of depowering in units per second (full range: 1 unit)
v_steering: 0.2 # max velocity of steering in units per second (full range: 2 units)
depower_gain: 3.0 # 3.0 means: more than 33% error -> full speed
Expand Down
1 change: 1 addition & 0 deletions data/settings_hydra20_600.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ steering:
k_ds: 1.5 # influence of the depower angle on the steering sensitivity
delta_st: 0.02 # steering increment (when pressing RIGHT)
max_steering: 16.83 # max. steering angle of the side planes for four point model [degrees]
cs_4p: 1.0 # correction factor for the steering of the four point model

depower:
alpha_d_max: 31.0 # max depower angle [deg]
Expand Down
1 change: 1 addition & 0 deletions data/settings_v9b.yaml
1 change: 1 addition & 0 deletions data/system_v9.yaml
165 changes: 165 additions & 0 deletions docs/parking.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.8">
<diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
<mxGraphModel dx="1386" dy="838" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="583" math="1" shadow="0">
<root>
<mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="19" value="" style="edgeStyle=none;rounded=0;html=1;endArrow=classic;endFill=1;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="AgOMpVHS2S-enR5WjLPw-52" target="SL2LETD5taLKHnRiA0Aw-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="AgOMpVHS2S-enR5WjLPw-52" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="204" y="182" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="AgOMpVHS2S-enR5WjLPw-58" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="AgOMpVHS2S-enR5WjLPw-55" target="AgOMpVHS2S-enR5WjLPw-57" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="AgOMpVHS2S-enR5WjLPw-55" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;Plant&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="528" y="182" width="101" height="60" as="geometry" />
</mxCell>
<mxCell id="AgOMpVHS2S-enR5WjLPw-57" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;azimuth&lt;/font&gt;" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="674" y="192" width="100" height="40" as="geometry" />
</mxCell>
<mxCell id="AgOMpVHS2S-enR5WjLPw-59" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="642" y="202" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="AgOMpVHS2S-enR5WjLPw-101" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;+&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="174" y="166" width="30" height="40" as="geometry" />
</mxCell>
<mxCell id="AgOMpVHS2S-enR5WjLPw-102" value="Integrator" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="418" y="242" width="70" height="30" as="geometry" />
</mxCell>
<mxCell id="17" value="" style="edgeStyle=none;rounded=0;html=1;endArrow=classic;endFill=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="kv1_MmNUvCLRT5CAMSnz-35" target="AgOMpVHS2S-enR5WjLPw-55" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="468" y="212" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="SL2LETD5taLKHnRiA0Aw-3" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;+&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br&gt;-&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="324" y="182" width="50" height="60" as="geometry" />
</mxCell>
<mxCell id="0" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;strokeColor=none;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="264.5" y="272" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="13" value="" style="edgeStyle=none;rounded=0;html=1;endArrow=none;endFill=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="SL2LETD5taLKHnRiA0Aw-3" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="288.5" y="237.25" as="sourcePoint" />
<mxPoint x="288.5" y="282.75" as="targetPoint" />
<Array as="points">
<mxPoint x="289" y="227" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-39" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="21" target="AgOMpVHS2S-enR5WjLPw-52" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="21" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="179" y="53" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="26" value="" style="endArrow=none;html=1;targetPerimeterSpacing=0;endSize=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="218" y="123" as="sourcePoint" />
<mxPoint x="218" y="73" as="targetPoint" />
<Array as="points">
<mxPoint x="218" y="93" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="30" value="" style="endArrow=none;html=1;endSize=0;targetPerimeterSpacing=0;entryX=0;entryY=0.856;entryDx=0;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="218" y="123" as="sourcePoint" />
<mxPoint x="179" y="122.48000000000002" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="31" value="" style="triangle;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="409" y="172" width="60" height="80" as="geometry" />
</mxCell>
<mxCell id="32" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="SL2LETD5taLKHnRiA0Aw-3" target="31" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="518" y="277" as="sourcePoint" />
<mxPoint x="568" y="227" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="33" value="" style="endArrow=none;html=1;endFill=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="288" y="283" as="sourcePoint" />
<mxPoint x="498" y="283" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="34" value="" style="endArrow=none;html=1;endFill=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="498" y="283" as="sourcePoint" />
<mxPoint x="498" y="213" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-34" value="" style="endArrow=none;html=1;endFill=0;targetPerimeterSpacing=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="498" y="283" as="sourcePoint" />
<mxPoint x="498" y="213" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-36" value="" style="edgeStyle=none;rounded=0;html=1;endArrow=none;endFill=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" target="kv1_MmNUvCLRT5CAMSnz-35" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="468" y="212" as="sourcePoint" />
<mxPoint x="528" y="212" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-35" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="488" y="202" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-37" value="steering" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="458" y="183" width="70" height="30" as="geometry" />
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-38" value="set_steering" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="234.5" y="171" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-40" value="" style="endArrow=none;html=1;targetPerimeterSpacing=0;endSize=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="223" y="123.5" as="sourcePoint" />
<mxPoint x="223" y="73.5" as="targetPoint" />
<Array as="points">
<mxPoint x="223" y="95.5" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-41" value="" style="endArrow=none;html=1;endSize=0;targetPerimeterSpacing=0;entryX=0;entryY=0.856;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.969;exitY=0.881;exitDx=0;exitDy=0;exitPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="21" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="258" y="123.5" as="sourcePoint" />
<mxPoint x="223" y="123" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-42" value="" style="endArrow=none;html=1;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="217" y="73" as="sourcePoint" />
<mxPoint x="223" y="73" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-43" value="disturbance" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="259" y="93" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-44" value="PID&amp;nbsp; &amp;nbsp;" style="triangle;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="110" y="156" width="60" height="80" as="geometry" />
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-45" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;endFill=0;startArrow=classic;startFill=1;entryX=0.767;entryY=0.583;entryDx=0;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" target="AgOMpVHS2S-enR5WjLPw-59" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="110" y="194" as="sourcePoint" />
<mxPoint x="652" y="210" as="targetPoint" />
<Array as="points">
<mxPoint x="80" y="194" />
<mxPoint x="80" y="310" />
<mxPoint x="380" y="310" />
<mxPoint x="652" y="310" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-46" value="" style="endArrow=none;html=1;rounded=0;entryX=1.008;entryY=0.763;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="kv1_MmNUvCLRT5CAMSnz-44" target="AgOMpVHS2S-enR5WjLPw-101" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="140" y="282" as="sourcePoint" />
<mxPoint x="190" y="232" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="kv1_MmNUvCLRT5CAMSnz-47" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;+&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="190" y="143" width="30" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Loading

0 comments on commit 192e4e9

Please sign in to comment.