Rework decoupling section
This commit is contained in:
parent
a64109bbc4
commit
16d539b692
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg
|
<svg
|
||||||
width="38.997616mm"
|
width="41.032036mm"
|
||||||
height="46.357521mm"
|
height="46.367355mm"
|
||||||
viewBox="0 0 38.997618 46.35752"
|
viewBox="0 0 41.032038 46.367354"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg1203"
|
id="svg1203"
|
||||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||||
@ -24,9 +24,9 @@
|
|||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="2.8284271"
|
inkscape:zoom="5.6568542"
|
||||||
inkscape:cx="51.442019"
|
inkscape:cx="75.925591"
|
||||||
inkscape:cy="51.972349"
|
inkscape:cy="85.736698"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
inkscape:document-rotation="0"
|
inkscape:document-rotation="0"
|
||||||
@ -2216,7 +2216,7 @@
|
|||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-39.198222,-20.296063)">
|
transform="translate(-39.198222,-20.286227)">
|
||||||
<rect
|
<rect
|
||||||
style="fill:#000000;fill-opacity:0.2;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
|
style="fill:#000000;fill-opacity:0.2;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
|
||||||
id="rect17717"
|
id="rect17717"
|
||||||
@ -2228,14 +2228,14 @@
|
|||||||
inkscape:export-ydpi="252" />
|
inkscape:export-ydpi="252" />
|
||||||
<path
|
<path
|
||||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.2;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||||
d="m 41.521197,64.330608 h 36.067752 v 2.190475 H 39.330722 v -45.044023 0 h 2.190475 v 42.853548"
|
d="m 41.521197,64.330608 h 36.067752 v 2.190475 H 39.330722 v -46.102356 0 h 2.190475 v 43.911881"
|
||||||
id="path17442"
|
id="path17442"
|
||||||
sodipodi:nodetypes="cccccccc"
|
sodipodi:nodetypes="cccccccc"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
inkscape:export-ydpi="252" />
|
inkscape:export-ydpi="252" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="M 51.394804,64.330608 V 63.52552 l -1.18161,-0.388228 1.748645,-0.652061 -1.748645,-0.664122 1.748645,-0.707499 -1.748645,-0.699796 1.748645,-0.653532 -1.748645,-0.631163 1.18161,-0.767104 v -0.857424"
|
d="M 52.453138,64.330608 V 63.52552 l -1.18161,-0.388228 1.748645,-0.652061 -1.748645,-0.664122 1.748645,-0.707499 -1.748645,-0.699796 1.748645,-0.653532 -1.748645,-0.631163 1.18161,-0.767104 v -0.857424"
|
||||||
id="path17444"
|
id="path17444"
|
||||||
sodipodi:nodetypes="ccccccccccc"
|
sodipodi:nodetypes="ccccccccccc"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
@ -2243,26 +2243,26 @@
|
|||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
id="path17446"
|
id="path17446"
|
||||||
d="M 54.21455,64.330608 V 61.569581"
|
d="M 55.272884,64.330608 V 61.569581"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cccc"
|
sodipodi:nodetypes="cccc"
|
||||||
id="path17450"
|
id="path17450"
|
||||||
d="m 53.268556,60.012287 v 1.557294 h 1.891987 v -1.557294"
|
d="m 54.32689,60.012287 v 1.557294 h 1.891987 v -1.557294"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
id="path17454"
|
id="path17454"
|
||||||
d="m 53.573266,60.39314 h 1.282569"
|
d="m 54.6316,60.39314 h 1.282569"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
id="path17456"
|
id="path17456"
|
||||||
d="M 54.21455,57.504591 V 60.39314"
|
d="M 55.272884,57.504591 V 60.39314"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<rect
|
<rect
|
||||||
y="59.052959"
|
y="59.052959"
|
||||||
x="56.34927"
|
x="57.407604"
|
||||||
height="3.7292752"
|
height="3.7292752"
|
||||||
width="1.0184269"
|
width="1.0184269"
|
||||||
id="rect17480"
|
id="rect17480"
|
||||||
@ -2270,16 +2270,16 @@
|
|||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
id="path17482"
|
id="path17482"
|
||||||
d="M 56.858484,57.747082 V 59.05296"
|
d="M 57.916818,57.747082 V 59.05296"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17601)" />
|
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17601)" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker17513)"
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker17513)"
|
||||||
d="m 56.858484,62.782239 v 1.248463"
|
d="m 57.916818,62.782239 v 1.248463"
|
||||||
id="path17482-3" />
|
id="path17482-3" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="M 71.067665,64.330608 V 63.52552 L 69.886055,63.137292 71.6347,62.485231 69.886055,61.821109 71.6347,61.11361 69.886055,60.413814 71.6347,59.760282 l -1.748645,-0.631163 1.18161,-0.767104 v -0.857424"
|
d="M 69.480164,64.330608 V 63.52552 l -1.18161,-0.388228 1.748645,-0.652061 -1.748645,-0.664122 1.748645,-0.707499 -1.748645,-0.699796 1.748645,-0.653532 -1.748645,-0.631163 1.18161,-0.767104 v -0.857424"
|
||||||
id="path17444-0"
|
id="path17444-0"
|
||||||
sodipodi:nodetypes="ccccccccccc"
|
sodipodi:nodetypes="ccccccccccc"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
@ -2287,26 +2287,26 @@
|
|||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
id="path17446-3"
|
id="path17446-3"
|
||||||
d="M 73.887406,64.330613 V 61.569586"
|
d="M 72.299905,64.330613 V 61.569586"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cccc"
|
sodipodi:nodetypes="cccc"
|
||||||
id="path17450-6"
|
id="path17450-6"
|
||||||
d="m 72.941412,60.012292 v 1.557294 h 1.891987 v -1.557294"
|
d="m 71.353911,60.012292 v 1.557294 h 1.891987 v -1.557294"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
id="path17454-0"
|
id="path17454-0"
|
||||||
d="m 73.246122,60.393145 h 1.282569"
|
d="M 71.658621,60.393145 H 72.94119"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
id="path17456-6"
|
id="path17456-6"
|
||||||
d="m 73.887406,57.504596 v 2.888549"
|
d="m 72.299905,57.504596 v 2.888549"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<rect
|
<rect
|
||||||
y="59.052956"
|
y="59.052956"
|
||||||
x="76.022125"
|
x="74.434624"
|
||||||
height="3.7292752"
|
height="3.7292752"
|
||||||
width="1.0184269"
|
width="1.0184269"
|
||||||
id="rect17480-6"
|
id="rect17480-6"
|
||||||
@ -2314,12 +2314,12 @@
|
|||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
id="path17482-1"
|
id="path17482-1"
|
||||||
d="m 76.531338,57.747078 v 1.305878"
|
d="m 74.943837,57.747078 v 1.305878"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17601-2)" />
|
style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker17601-2)" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker17513-1)"
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker17513-1)"
|
||||||
d="m 76.531338,62.782235 v 1.248463"
|
d="m 74.943837,62.782235 v 1.248463"
|
||||||
id="path17482-3-8" />
|
id="path17482-3-8" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
@ -2375,14 +2375,14 @@
|
|||||||
inkscape:export-ydpi="252" />
|
inkscape:export-ydpi="252" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
d="m 49.884901,57.451437 h 8.031187"
|
d="m 50.943235,57.451437 h 8.031187"
|
||||||
id="path17442-6"
|
id="path17442-6"
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
inkscape:export-ydpi="252" />
|
inkscape:export-ydpi="252" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
d="m 69.557762,57.451437 h 8.031187"
|
d="m 67.970261,57.451437 h 8.031187"
|
||||||
id="path17442-753"
|
id="path17442-753"
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
@ -2395,13 +2395,13 @@
|
|||||||
inkscape:export-ydpi="252" />
|
inkscape:export-ydpi="252" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
d="M 54.21455,57.504591 V 55.821079"
|
d="M 55.272884,57.504591 V 55.821079"
|
||||||
id="path1065"
|
id="path1065"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
inkscape:export-ydpi="252" />
|
inkscape:export-ydpi="252" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
d="M 73.887406,57.504597 V 55.85634"
|
d="M 72.299905,57.504597 V 55.85634"
|
||||||
id="path1067"
|
id="path1067"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
inkscape:export-ydpi="252" />
|
inkscape:export-ydpi="252" />
|
||||||
@ -2416,7 +2416,7 @@
|
|||||||
<circle
|
<circle
|
||||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;paint-order:markers fill stroke;stop-color:#000000"
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;paint-order:markers fill stroke;stop-color:#000000"
|
||||||
id="path1106-1"
|
id="path1106-1"
|
||||||
cx="54.235737"
|
cx="55.294071"
|
||||||
cy="55.829304"
|
cy="55.829304"
|
||||||
r="0.23204044"
|
r="0.23204044"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
@ -2424,26 +2424,26 @@
|
|||||||
<circle
|
<circle
|
||||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;paint-order:markers fill stroke;stop-color:#000000"
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;paint-order:markers fill stroke;stop-color:#000000"
|
||||||
id="path1106-2"
|
id="path1106-2"
|
||||||
cx="73.894348"
|
cx="72.306847"
|
||||||
cy="55.845982"
|
cy="55.845982"
|
||||||
r="0.23204044"
|
r="0.23204044"
|
||||||
inkscape:export-xdpi="252"
|
inkscape:export-xdpi="252"
|
||||||
inkscape:export-ydpi="252" />
|
inkscape:export-ydpi="252" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#0072bd;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:0.529166, 0.529166;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker4);marker-end:url(#marker2)"
|
style="fill:none;stroke:#0072bd;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:0.529166, 0.529166;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker4);marker-end:url(#marker2)"
|
||||||
d="m 41.521192,22.813133 h 8.413515"
|
d="m 41.521192,21.225632 h 8.413515"
|
||||||
id="path1" />
|
id="path1" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#0072bd;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:0.529166, 0.529166;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker4-9);marker-end:url(#marker2-6)"
|
style="fill:none;stroke:#0072bd;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:0.529166, 0.529166;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker4-9);marker-end:url(#marker2-6)"
|
||||||
d="m 41.521192,53.201739 h 8.413515"
|
d="m 41.521192,54.78924 h 8.413515"
|
||||||
id="path1-2" />
|
id="path1-2" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#0072bd;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:0.529166, 0.529166;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker4-9-6);marker-end:url(#marker2-6-8)"
|
style="fill:none;stroke:#0072bd;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:0.529166, 0.529166;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker4-9-6);marker-end:url(#marker2-6-8)"
|
||||||
d="M 63.999023,64.266573 V 55.853058"
|
d="M 77.228198,64.266573 V 55.853058"
|
||||||
id="path1-2-2" />
|
id="path1-2-2" />
|
||||||
<g
|
<g
|
||||||
inkscape:label=""
|
inkscape:label=""
|
||||||
transform="translate(44.487888,23.404941)"
|
transform="translate(44.487888,21.81744)"
|
||||||
id="g5"
|
id="g5"
|
||||||
style="fill:#0072bd">
|
style="fill:#0072bd">
|
||||||
<g
|
<g
|
||||||
@ -2481,7 +2481,7 @@
|
|||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:label=""
|
inkscape:label=""
|
||||||
transform="translate(44.452059,53.736166)"
|
transform="translate(44.452059,55.323667)"
|
||||||
id="g6"
|
id="g6"
|
||||||
style="fill:#0072bd">
|
style="fill:#0072bd">
|
||||||
<g
|
<g
|
||||||
@ -2519,7 +2519,7 @@
|
|||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
inkscape:label=""
|
inkscape:label=""
|
||||||
transform="translate(64.432834,58.867032)"
|
transform="translate(77.662009,58.867032)"
|
||||||
id="g7"
|
id="g7"
|
||||||
style="fill:#0072bd">
|
style="fill:#0072bd">
|
||||||
<g
|
<g
|
||||||
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 169 KiB |
BIN
figs/detail_control_svd_alt_plant.pdf
Normal file
BIN
figs/detail_control_svd_alt_plant.pdf
Normal file
Binary file not shown.
BIN
figs/detail_control_svd_alt_plant.png
Normal file
BIN
figs/detail_control_svd_alt_plant.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 83 KiB |
Binary file not shown.
208
nass-control.bib
208
nass-control.bib
@ -1,3 +1,49 @@
|
|||||||
|
@inproceedings{mahony05_compl_filter_desig_special_orthog,
|
||||||
|
author = {R. Mahony and T. Hamel and J.-M. Pflimlin},
|
||||||
|
title = {Complementary Filter Design on the Special Orthogonal Group
|
||||||
|
SO(3)},
|
||||||
|
booktitle = {Proceedings of the 44th IEEE Conference on Decision and
|
||||||
|
Control},
|
||||||
|
year = 2005,
|
||||||
|
doi = {10.1109/cdc.2005.1582367},
|
||||||
|
url = {https://doi.org/10.1109/cdc.2005.1582367},
|
||||||
|
keywords = {complementary filters},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@article{plummer06_optim_compl_filter_their_applic_motion_measur,
|
||||||
|
author = {A. R. Plummer},
|
||||||
|
title = {Optimal Complementary Filters and Their Application in
|
||||||
|
Motion Measurement},
|
||||||
|
journal = {Proceedings of the Institution of Mechanical Engineers,
|
||||||
|
Part I: Journal of Systems and Control Engineering},
|
||||||
|
volume = 220,
|
||||||
|
number = 6,
|
||||||
|
pages = {489-507},
|
||||||
|
year = 2006,
|
||||||
|
doi = {10.1243/09596518JSCE229},
|
||||||
|
url = {https://doi.org/10.1243/09596518JSCE229},
|
||||||
|
keywords = {complementary filters},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@inproceedings{jensen13_basic_uas,
|
||||||
|
author = {Austin Jensen and Cal Coopmans and YangQuan Chen},
|
||||||
|
title = {Basics and guidelines of complementary filters for small
|
||||||
|
UAS navigation},
|
||||||
|
booktitle = {2013 International Conference on Unmanned Aircraft Systems
|
||||||
|
(ICUAS)},
|
||||||
|
year = 2013,
|
||||||
|
doi = {10.1109/icuas.2013.6564726},
|
||||||
|
url = {https://doi.org/10.1109/icuas.2013.6564726},
|
||||||
|
keywords = {complementary filters},
|
||||||
|
month = 5,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@article{geng95_intel_contr_system_multip_degree,
|
@article{geng95_intel_contr_system_multip_degree,
|
||||||
author = {Z. Jason Geng and George G. Pan and Leonard S. Haynes and
|
author = {Z. Jason Geng and George G. Pan and Leonard S. Haynes and
|
||||||
Ben K. Wada and John A. Garba},
|
Ben K. Wada and John A. Garba},
|
||||||
@ -343,23 +389,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@article{plummer06_optim_compl_filter_their_applic_motion_measur,
|
|
||||||
author = {A. R. Plummer},
|
|
||||||
title = {Optimal Complementary Filters and Their Application in
|
|
||||||
Motion Measurement},
|
|
||||||
journal = {Proceedings of the Institution of Mechanical Engineers,
|
|
||||||
Part I: Journal of Systems and Control Engineering},
|
|
||||||
volume = 220,
|
|
||||||
number = 6,
|
|
||||||
pages = {489-507},
|
|
||||||
year = 2006,
|
|
||||||
doi = {10.1243/09596518JSCE229},
|
|
||||||
url = {https://doi.org/10.1243/09596518JSCE229},
|
|
||||||
keywords = {complementary filters},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@book{robert12_introd_random_signal_applied_kalman,
|
@book{robert12_introd_random_signal_applied_kalman,
|
||||||
author = {Robert Grover Brown, Patrick Y. C. Hwang},
|
author = {Robert Grover Brown, Patrick Y. C. Hwang},
|
||||||
title = {Introduction to Random Signals and Applied Kalman Filtering
|
title = {Introduction to Random Signals and Applied Kalman Filtering
|
||||||
@ -416,21 +445,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@inproceedings{jensen13_basic_uas,
|
|
||||||
author = {Austin Jensen and Cal Coopmans and YangQuan Chen},
|
|
||||||
title = {Basics and guidelines of complementary filters for small
|
|
||||||
UAS navigation},
|
|
||||||
booktitle = {2013 International Conference on Unmanned Aircraft Systems
|
|
||||||
(ICUAS)},
|
|
||||||
year = 2013,
|
|
||||||
doi = {10.1109/icuas.2013.6564726},
|
|
||||||
url = {https://doi.org/10.1109/icuas.2013.6564726},
|
|
||||||
keywords = {complementary filters},
|
|
||||||
month = 5,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@inproceedings{pascoal99_navig_system_desig_using_time,
|
@inproceedings{pascoal99_navig_system_desig_using_time,
|
||||||
author = {A. Pascoal and I. Kaminer and P. Oliveira},
|
author = {A. Pascoal and I. Kaminer and P. Oliveira},
|
||||||
title = {Navigation System Design Using Time-Varying Complementary
|
title = {Navigation System Design Using Time-Varying Complementary
|
||||||
@ -629,20 +643,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@inproceedings{mahony05_compl_filter_desig_special_orthog,
|
|
||||||
author = {R. Mahony and T. Hamel and J.-M. Pflimlin},
|
|
||||||
title = {Complementary Filter Design on the Special Orthogonal Group
|
|
||||||
SO(3)},
|
|
||||||
booktitle = {Proceedings of the 44th IEEE Conference on Decision and
|
|
||||||
Control},
|
|
||||||
year = 2005,
|
|
||||||
doi = {10.1109/cdc.2005.1582367},
|
|
||||||
url = {https://doi.org/10.1109/cdc.2005.1582367},
|
|
||||||
keywords = {complementary filters},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@article{furutani04_nanom_cuttin_machin_using_stewar,
|
@article{furutani04_nanom_cuttin_machin_using_stewar,
|
||||||
author = {Katsushi Furutani and Michio Suzuki and Ryusei Kudoh},
|
author = {Katsushi Furutani and Michio Suzuki and Ryusei Kudoh},
|
||||||
title = {Nanometre-Cutting Machine Using a Stewart-Platform Parallel
|
title = {Nanometre-Cutting Machine Using a Stewart-Platform Parallel
|
||||||
@ -756,6 +756,107 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@phdthesis{rankers98_machin,
|
||||||
|
author = {Rankers, Adrian Mathias},
|
||||||
|
keywords = {favorite},
|
||||||
|
school = {University of Twente},
|
||||||
|
title = {Machine dynamics in mechatronic systems: An engineering
|
||||||
|
approach.},
|
||||||
|
year = 1998,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@book{preumont94_random_vibrat_spect_analy,
|
||||||
|
author = {Andr{\'e} Preumont},
|
||||||
|
title = {Random Vibration and Spectral Analysis},
|
||||||
|
year = 1994,
|
||||||
|
publisher = {Springer Netherlands},
|
||||||
|
url = {https://doi.org/10.1007/978-94-017-2840-9},
|
||||||
|
doi = {10.1007/978-94-017-2840-9},
|
||||||
|
series = {Solid Mechanics and Its Applications},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@article{heertjes05_activ_vibrat_isolat_metrol_frames,
|
||||||
|
author = {Heertjes, Marcel and de Graaff, Koen and van der Toorn,
|
||||||
|
Jan-Gerard},
|
||||||
|
title = {Active Vibration Isolation of Metrology Frames; a Modal
|
||||||
|
Decoupled Control Design},
|
||||||
|
year = {2005},
|
||||||
|
keywords = {Decoupled Control},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@article{holterman05_activ_dampin_based_decoup_colloc_contr,
|
||||||
|
author = {J. Holterman and T.J.A. deVries},
|
||||||
|
title = {Active Damping Based on Decoupled Collocated Control},
|
||||||
|
journal = {IEEE/ASME Transactions on Mechatronics},
|
||||||
|
volume = 10,
|
||||||
|
number = 2,
|
||||||
|
pages = {135-145},
|
||||||
|
year = 2005,
|
||||||
|
doi = {10.1109/tmech.2005.844702},
|
||||||
|
url = {https://doi.org/10.1109/tmech.2005.844702},
|
||||||
|
keywords = {active damping},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@inbook{lang17_under,
|
||||||
|
author = {Lang, George Fox},
|
||||||
|
booktitle = {Topics in Modal Analysis \& Testing, Volume 10},
|
||||||
|
chapter = 8,
|
||||||
|
pages = {55--68},
|
||||||
|
publisher = {Springer},
|
||||||
|
title = {Understanding modal vectors},
|
||||||
|
year = 2017,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@book{brunton22_data,
|
||||||
|
author = {Brunton, Steven L and Kutz, J Nathan},
|
||||||
|
title = {Data-driven science and engineering: Machine learning,
|
||||||
|
dynamical systems, and control},
|
||||||
|
year = 2022,
|
||||||
|
publisher = {Cambridge University Press},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@article{kouvaritakis79_theor_pract_charac_locus_desig_method,
|
||||||
|
author = {B.A. Kouvaritakis},
|
||||||
|
title = {Theory and Practice of the Characteristic Locus Design
|
||||||
|
Method},
|
||||||
|
journal = {Proceedings of the Institution of Electrical Engineers},
|
||||||
|
volume = 126,
|
||||||
|
number = 6,
|
||||||
|
pages = 542,
|
||||||
|
year = 1979,
|
||||||
|
doi = {10.1049/piee.1979.0131},
|
||||||
|
url = {https://doi.org/10.1049/piee.1979.0131},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@article{hovd97_svd_contr_contr,
|
||||||
|
author = {Hovd, Morten and Braatz, Richard D and Skogestad, Sigurd},
|
||||||
|
title = {{SVD} Controllers for $\mathcal{H}_2-$,
|
||||||
|
$\mathcal{H}_\infty-$ and $\mu\text{-optimal}$ Control},
|
||||||
|
journal = {Automatica},
|
||||||
|
volume = 33,
|
||||||
|
number = 3,
|
||||||
|
pages = {433--439},
|
||||||
|
year = 1997,
|
||||||
|
keywords = {mimo control},
|
||||||
|
publisher = {Elsevier},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@article{oomen18_advan_motion_contr_precis_mechat,
|
@article{oomen18_advan_motion_contr_precis_mechat,
|
||||||
author = {Tom Oomen},
|
author = {Tom Oomen},
|
||||||
title = {Advanced Motion Control for Precision Mechatronics:
|
title = {Advanced Motion Control for Precision Mechatronics:
|
||||||
@ -772,6 +873,21 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@article{lurie02_system_archit_trades_using_bode,
|
||||||
|
author = {Boris J. Lurie and Ali Ghavimi and Fred Y. Hadaegh and
|
||||||
|
Edward Mettler},
|
||||||
|
title = {System Architecture Trades Using Bode-Step Control Design},
|
||||||
|
journal = {Journal of Guidance, Control, and Dynamics},
|
||||||
|
volume = 25,
|
||||||
|
number = 2,
|
||||||
|
pages = {309-315},
|
||||||
|
year = 2002,
|
||||||
|
doi = {10.2514/2.4883},
|
||||||
|
url = {https://doi.org/10.2514/2.4883},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@inproceedings{collette14_vibrat,
|
@inproceedings{collette14_vibrat,
|
||||||
author = {Collette, C. and Matichard, F},
|
author = {Collette, C. and Matichard, F},
|
||||||
title = {Vibration control of flexible structures using fusion of
|
title = {Vibration control of flexible structures using fusion of
|
||||||
|
706
nass-control.org
706
nass-control.org
@ -462,6 +462,264 @@ Vinv = inv(V);
|
|||||||
disp(simplify(Vinv));
|
disp(simplify(Vinv));
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
*** Simscape plant
|
||||||
|
|
||||||
|
Verify that the collocated plant is the same as the analytical plant.
|
||||||
|
*Yes they are the same*
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Collocated plant
|
||||||
|
clear io; io_i = 1;
|
||||||
|
io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/Actuator_1'], 1, 'openoutput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/Actuator_2'], 1, 'openoutput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/Actuator_3'], 1, 'openoutput'); io_i = io_i + 1;
|
||||||
|
|
||||||
|
G_L_sim = linearize(mdl, io);
|
||||||
|
G_L_sim.InputName = {'F1', 'F2', 'F3'};
|
||||||
|
G_L_sim.OutputName = {'L1', 'L2', 'L3'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Accelerometer outputs
|
||||||
|
% Input/Output definition
|
||||||
|
clear io; io_i = 1;
|
||||||
|
io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/Acc_side'], 1, 'openoutput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/Acc_side'], 2, 'openoutput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/Acc_top'], 1, 'openoutput'); io_i = io_i + 1;
|
||||||
|
% io(io_i) = linio([mdl, '/Acc_top'], 2, 'openoutput'); io_i = io_i + 1;
|
||||||
|
|
||||||
|
G_acc = linearize(mdl, io);
|
||||||
|
G_acc.InputName = {'F1', 'F2', 'F3'};
|
||||||
|
G_acc.OutputName = {'Ax1', 'Ay1', 'Ax2'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Robustness of the decoupling strategies? :noexport:
|
||||||
|
**** Introduction :ignore:
|
||||||
|
What happens if we add an additional resonance in the system (Figure ref:fig:model_test_decoupling_spurious_res).
|
||||||
|
|
||||||
|
Having less actuator than DoF (under-actuated system):
|
||||||
|
- modal decoupling: can still control first $n$ modes?
|
||||||
|
- SVD decoupling: does not matter
|
||||||
|
- Jacobian decoupling: could give poor decoupling?
|
||||||
|
|
||||||
|
#+name: fig:model_test_decoupling_spurious_res
|
||||||
|
#+caption: Plant with spurious resonance (additional DoF)
|
||||||
|
[[file:figs/model_test_decoupling_spurious_res.png]]
|
||||||
|
|
||||||
|
**** Plant
|
||||||
|
A multi body model of the system in Figure ref:fig:model_test_decoupling_spurious_res has been made using Simscape.
|
||||||
|
|
||||||
|
Its parameters are defined below:
|
||||||
|
#+begin_src matlab
|
||||||
|
leq = 20e-3; % Equilibrium length of struts [m]
|
||||||
|
mr = 5; % [kg]
|
||||||
|
kr = (2*pi*10)^2*mr; % Stiffness [N/m]
|
||||||
|
cr = 1e1; % Damping [N/(m/s)]
|
||||||
|
|
||||||
|
m = 400 - mr; % Mass [kg]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
The plant is then identified and shown in Figure ref:fig:detail_control_coupled_plant_bode_spurious.
|
||||||
|
The added resonance only slightly modifies the plant around 10Hz.
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
%% Name of the Simulink File
|
||||||
|
mdl = 'suspended_mass';
|
||||||
|
|
||||||
|
%% Input/Output definition
|
||||||
|
clear io; io_i = 1;
|
||||||
|
io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
|
io(io_i) = linio([mdl, '/dL'], 1, 'openoutput'); io_i = io_i + 1;
|
||||||
|
|
||||||
|
Gr = linearize(mdl, io);
|
||||||
|
Gr.InputName = {'F1', 'F2', 'F3'};
|
||||||
|
Gr.OutputName = {'L1', 'L2', 'L3'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
figure;
|
||||||
|
tiledlayout(3, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
for out_i = 1:3
|
||||||
|
for in_i = 1:3
|
||||||
|
nexttile;
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G(out_i,in_i), freqs, 'Hz'))), 'k-', ...
|
||||||
|
'DisplayName', sprintf('$\\mathcal{L}_%i/\\tau_%i$', out_i, in_i));
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gr(out_i,in_i), freqs, 'Hz'))), 'k--', ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
xlim([1e-1, 2e1]); ylim([1e-6, 1e-2]);
|
||||||
|
legend('location', 'northeast', 'FontSize', 8);
|
||||||
|
|
||||||
|
if in_i == 1
|
||||||
|
ylabel('Mag. [m/N]')
|
||||||
|
else
|
||||||
|
set(gca, 'YTickLabel',[]);
|
||||||
|
end
|
||||||
|
|
||||||
|
if out_i == 3
|
||||||
|
xlabel('Frequency [Hz]')
|
||||||
|
else
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/detail_control_coupled_plant_bode_spurious.pdf', 'width', 'full', 'height', 'tall');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:detail_control_coupled_plant_bode_spurious
|
||||||
|
#+caption: Magnitude of the coupled plant without additional mode (solid) and with the additional mode (dashed).
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/detail_control_coupled_plant_bode_spurious.png]]
|
||||||
|
|
||||||
|
**** Jacobian Decoupling
|
||||||
|
The obtained plant is decoupled using the Jacobian matrix.
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
Gxr = pinv(J)*Gr*pinv(J');
|
||||||
|
Gxr.InputName = {'Fx', 'Fy', 'Mz'};
|
||||||
|
Gxr.OutputName = {'Dx', 'Dy', 'Rz'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
The obtained plant is shown in Figure ref:fig:detail_control_jacobian_plant_spurious and is not much different than for the plant without the spurious resonance.
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
figure;
|
||||||
|
|
||||||
|
% Magnitude
|
||||||
|
hold on;
|
||||||
|
for i_in = 1:3
|
||||||
|
for i_out = [i_in+1:3]
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gxr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gxr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
||||||
|
'DisplayName', '$G_{x,r}(i,j)\ i \neq j$');
|
||||||
|
set(gca,'ColorOrderIndex',1)
|
||||||
|
for i_in_out = 1:3
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gxr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{x,r}(%d,%d)$', i_in_out, i_in_out));
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Magnitude');
|
||||||
|
ylim([1e-7, 1e-1]);
|
||||||
|
legend('location', 'northeast');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/detail_control_jacobian_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:detail_control_jacobian_plant_spurious
|
||||||
|
#+caption: Plant with spurious resonance decoupled using the Jacobian matrices $G_{x,r}(s)$
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/detail_control_jacobian_plant_spurious.png]]
|
||||||
|
|
||||||
|
**** Modal Decoupling
|
||||||
|
The obtained plant is now decoupled using the modal matrices obtained with the plant not including the added resonance.
|
||||||
|
#+begin_src matlab
|
||||||
|
Gmr = inv(Cm)*Gr*inv(Bm);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
The obtained decoupled plant is shown in Figure ref:fig:detail_control_modal_plant_spurious.
|
||||||
|
Compare to the decoupled plant in Figure ref:fig:detail_control_modal_plant, the added resonance induces some coupling, especially around the frequency of the added spurious resonance.
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
figure;
|
||||||
|
|
||||||
|
% Magnitude
|
||||||
|
hold on;
|
||||||
|
for i_in = 1:3
|
||||||
|
for i_out = [i_in+1:3]
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gmr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gmr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
||||||
|
'DisplayName', '$G_{m,r}(i,j)\ i \neq j$');
|
||||||
|
set(gca,'ColorOrderIndex',1)
|
||||||
|
for i_in_out = 1:3
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gmr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{m,r}(%d,%d)$', i_in_out, i_in_out));
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Magnitude');
|
||||||
|
ylim([1e-6, 1e2]);
|
||||||
|
legend('location', 'northeast');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/detail_control_modal_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:detail_control_modal_plant_spurious
|
||||||
|
#+caption: Modal plant including spurious resonance $G_{m,r}(s)$
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/detail_control_modal_plant_spurious.png]]
|
||||||
|
|
||||||
|
**** SVD Decoupling
|
||||||
|
The SVD decoupling is performed on the new obtained plant.
|
||||||
|
The decoupling frequency is slightly shifted in order not to interfere too much with the spurious resonance.
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Decoupling frequency [rad/s]
|
||||||
|
wc = 2*pi*7;
|
||||||
|
|
||||||
|
%% System's response at the decoupling frequency
|
||||||
|
H1 = evalfr(Gr, j*wc);
|
||||||
|
|
||||||
|
%% Real approximation of G(j.wc)
|
||||||
|
D = pinv(real(H1'*H1));
|
||||||
|
H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2))));
|
||||||
|
|
||||||
|
[U,S,V] = svd(H1);
|
||||||
|
|
||||||
|
Gsvdr = inv(U)*Gr*inv(V');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
The obtained plant is shown in Figure ref:fig:detail_control_svd_plant_spurious.
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
figure;
|
||||||
|
|
||||||
|
% Magnitude
|
||||||
|
hold on;
|
||||||
|
for i_in = 1:3
|
||||||
|
for i_out = [i_in+1:3]
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gsvdr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
||||||
|
'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
end
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gsvdr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
||||||
|
'DisplayName', '$G_{svd,r}(i,j)\ i \neq j$');
|
||||||
|
set(gca,'ColorOrderIndex',1)
|
||||||
|
for i_in_out = 1:3
|
||||||
|
plot(freqs, abs(squeeze(freqresp(Gsvdr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{svd,r}(%d,%d)$', i_in_out, i_in_out));
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Magnitude');
|
||||||
|
ylim([1e-8, 1e-2]);
|
||||||
|
legend('location', 'northeast');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/detail_control_svd_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:detail_control_svd_plant_spurious
|
||||||
|
#+caption: SVD decoupled plant including a spurious resonance $G_{svd,r}(s)$
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/detail_control_svd_plant_spurious.png]]
|
||||||
|
|
||||||
** DONE [#A] Fix the outline
|
** DONE [#A] Fix the outline
|
||||||
CLOSED: [2025-04-03 Thu 12:01]
|
CLOSED: [2025-04-03 Thu 12:01]
|
||||||
|
|
||||||
@ -1914,7 +2172,7 @@ Future work will aim at developing a complementary filter synthesis method that
|
|||||||
- For the NASS, it was shown that the HAC-IFF strategy works fine and is easy to understand and tune
|
- For the NASS, it was shown that the HAC-IFF strategy works fine and is easy to understand and tune
|
||||||
- It would be very interesting to see how sensor fusion (probably between the force sensor and the external metrology) compares in term of performance and robustness
|
- It would be very interesting to see how sensor fusion (probably between the force sensor and the external metrology) compares in term of performance and robustness
|
||||||
|
|
||||||
* TODO [#A] Decoupling
|
* Decoupling
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:HEADER-ARGS:matlab+: :tangle matlab/detail_control_2_decoupling.m
|
:HEADER-ARGS:matlab+: :tangle matlab/detail_control_2_decoupling.m
|
||||||
:END:
|
:END:
|
||||||
@ -2621,6 +2879,8 @@ Eigenvectors are arranged for increasing eigenvalues (i.e. resonance frequencies
|
|||||||
\end{bmatrix}
|
\end{bmatrix}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
|
- [ ] Formula for the plant transfer function
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% Modal decoupling
|
%% Modal decoupling
|
||||||
% Compute the eigen vectors
|
% Compute the eigen vectors
|
||||||
@ -2653,16 +2913,16 @@ exportFig('figs/detail_control_modal_plant.pdf', 'width', 'half', 'height', 'nor
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:detail_control_modal_plant_decoupling
|
#+name: fig:detail_control_modal_plant_decoupling
|
||||||
#+caption: Caption with reference to sub figure (\subref{fig:fig_label_a})
|
#+caption: Plant using modal decoupling consists of second order plants (\subref{fig:detail_control_modal_plant}) which can be used to control separately different modes (\subref{fig:detail_control_model_test_modal})
|
||||||
#+attr_latex: :options [htbp]
|
#+attr_latex: :options [htbp]
|
||||||
#+begin_figure
|
#+begin_figure
|
||||||
#+attr_latex: :caption \subcaption{\label{fig:detail_control_modal_plant}sub caption a}
|
#+attr_latex: :caption \subcaption{\label{fig:detail_control_modal_plant}Decoupled plant in modal space}
|
||||||
#+attr_latex: :options {0.48\textwidth}
|
#+attr_latex: :options {0.48\textwidth}
|
||||||
#+begin_subfigure
|
#+begin_subfigure
|
||||||
#+attr_latex: :width 0.95\linewidth
|
#+attr_latex: :width 0.95\linewidth
|
||||||
[[file:figs/detail_control_modal_plant.png]]
|
[[file:figs/detail_control_modal_plant.png]]
|
||||||
#+end_subfigure
|
#+end_subfigure
|
||||||
#+attr_latex: :caption \subcaption{\label{fig:detail_control_model_test_modal}sub caption b}
|
#+attr_latex: :caption \subcaption{\label{fig:detail_control_model_test_modal}Individually controlled modes}
|
||||||
#+attr_latex: :options {0.48\textwidth}
|
#+attr_latex: :options {0.48\textwidth}
|
||||||
#+begin_subfigure
|
#+begin_subfigure
|
||||||
#+attr_latex: :width 0.95\linewidth
|
#+attr_latex: :width 0.95\linewidth
|
||||||
@ -2670,18 +2930,16 @@ exportFig('figs/detail_control_modal_plant.pdf', 'width', 'half', 'height', 'nor
|
|||||||
#+end_subfigure
|
#+end_subfigure
|
||||||
#+end_figure
|
#+end_figure
|
||||||
|
|
||||||
|
|
||||||
** SVD Decoupling
|
** SVD Decoupling
|
||||||
<<ssec:detail_control_comp_svd>>
|
<<ssec:detail_control_comp_svd>>
|
||||||
|
|
||||||
**** Singular Value Decomposition
|
**** Singular Value Decomposition
|
||||||
|
|
||||||
Singular Value Decomposition (SVD)
|
Singular Value Decomposition (SVD)
|
||||||
- Introduction to SVD [[cite:&brunton22_data, chapt. 1]]
|
- Introduction to SVD [[cite:&brunton22_data, chapt. 1]]
|
||||||
- Singular value is used a lot for multivariable control [[cite:&skogestad07_multiv_feedb_contr]].
|
- Singular value is used a lot for multivariable control [[cite:&skogestad07_multiv_feedb_contr]].
|
||||||
Used to study directions in multivariable systems.
|
Used to study directions in multivariable systems.
|
||||||
- [ ] Applied to parallel manipulator?
|
|
||||||
- [ ] Should I consider only real matrices?
|
# Should I consider only real matrices?
|
||||||
|
|
||||||
The SVD is a unique matrix decomposition that exists for every complex matrix $\bm{X} \in \mathbb{C}^{n \times m}$.
|
The SVD is a unique matrix decomposition that exists for every complex matrix $\bm{X} \in \mathbb{C}^{n \times m}$.
|
||||||
|
|
||||||
@ -2699,9 +2957,6 @@ The idea to use Singular Value Decomposition as a way to decouple a plant is not
|
|||||||
|
|
||||||
**** Decoupling using the SVD
|
**** Decoupling using the SVD
|
||||||
|
|
||||||
- [ ] *Check if inverse U and V should be used or just U and V matrices*, Use correct notations.
|
|
||||||
- [ ] Have notation for the measured FRF and for the real approximation
|
|
||||||
|
|
||||||
*Procedure*:
|
*Procedure*:
|
||||||
Identify the dynamics of the system from inputs to outputs (can be obtained experimentally)
|
Identify the dynamics of the system from inputs to outputs (can be obtained experimentally)
|
||||||
Frequency Response Function, which is a complex matrix obtained for several frequency points $\bm{G}(\omega_i)$.
|
Frequency Response Function, which is a complex matrix obtained for several frequency points $\bm{G}(\omega_i)$.
|
||||||
@ -2793,6 +3048,7 @@ Once the $\bm{U}$ and $\bm{V}$ matrices are obtained, the decoupled plant can be
|
|||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
The obtained plant shown in Figure ref:fig:detail_control_svd_plant is very well decoupled. and not only around $\omega_c$.
|
The obtained plant shown in Figure ref:fig:detail_control_svd_plant is very well decoupled. and not only around $\omega_c$.
|
||||||
|
On top of that, the diagonal terms are second order plants.
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% SVD Decoupling
|
%% SVD Decoupling
|
||||||
@ -2841,9 +3097,14 @@ exportFig('figs/detail_control_svd_plant.pdf', 'width', 'wide', 'height', 'norma
|
|||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/detail_control_svd_plant.png]]
|
[[file:figs/detail_control_svd_plant.png]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- [ ] Do we have something special when applying SVD to a collocated MIMO system?
|
- [ ] Do we have something special when applying SVD to a collocated MIMO system?
|
||||||
|
As shown in Figure ref:fig:detail_control_coupled_plant_bode, the plant is symmetrical.
|
||||||
Paper by Skogestad mention that.
|
Paper by Skogestad mention that.
|
||||||
# - When applying SVD on a non-collocated MIMO system, we obtained a decoupled plant looking like the one in Figure ref:fig:detail_control_gravimeter_svd_plant
|
"symmetric circular plants" [[cite:&hovd97_svd_contr_contr]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
A second system, identical to the first in terms of dynamics.
|
A second system, identical to the first in terms of dynamics.
|
||||||
@ -2852,56 +3113,35 @@ Instead of having relative motion sensors in the frame of the struts, three rela
|
|||||||
Using Jacobian matrices, it is possible to compute the relative motion of each struts.
|
Using Jacobian matrices, it is possible to compute the relative motion of each struts.
|
||||||
So theoretically, it should be possible to control both systems the same way.
|
So theoretically, it should be possible to control both systems the same way.
|
||||||
|
|
||||||
#+name: fig:detail_control_model_test_decoupling_alt
|
However, when applying the same SVD decoupling, plant of Figure ref:fig:detail_control_svd_alt_plant is obtained.
|
||||||
#+caption: Same test system but with different relative motion sensors.
|
It has much more coupling.
|
||||||
[[file:figs/detail_control_model_test_decoupling_alt.png]]
|
It is interesting to note that the coupling have local minimum near the chosen decoupling frequency.
|
||||||
|
This is very logical as the decoupling matrices were computed from the plant response at that particular frequency.
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% Simscape model with the accerometers
|
%% Simscape model with relative motion sensor at alternative positions
|
||||||
mdl = 'detail_control_decoupling_test_model';
|
mdl = 'detail_control_decoupling_test_model';
|
||||||
open(mdl)
|
open(mdl)
|
||||||
|
|
||||||
deq = 0.2; % Length of the actuators [m]
|
deq = 0.2; % Length of the actuators [m]
|
||||||
g = 0; % Gravity [m/s2]
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
%% Collocated plant
|
|
||||||
clear io; io_i = 1;
|
|
||||||
io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1;
|
|
||||||
io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1;
|
|
||||||
io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1;
|
|
||||||
io(io_i) = linio([mdl, '/Actuator_1'], 1, 'openoutput'); io_i = io_i + 1;
|
|
||||||
io(io_i) = linio([mdl, '/Actuator_2'], 1, 'openoutput'); io_i = io_i + 1;
|
|
||||||
io(io_i) = linio([mdl, '/Actuator_3'], 1, 'openoutput'); io_i = io_i + 1;
|
|
||||||
|
|
||||||
G_L_sim = linearize(mdl, io);
|
|
||||||
G_L_sim.InputName = {'F1', 'F2', 'F3'};
|
|
||||||
G_L_sim.OutputName = {'L1', 'L2', 'L3'};
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
%% Accelerometer outputs
|
|
||||||
% Input/Output definition
|
% Input/Output definition
|
||||||
clear io; io_i = 1;
|
clear io; io_i = 1;
|
||||||
io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1;
|
io(io_i) = linio([mdl, '/F1'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1;
|
io(io_i) = linio([mdl, '/F2'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1;
|
io(io_i) = linio([mdl, '/F3'], 1, 'openinput'); io_i = io_i + 1;
|
||||||
io(io_i) = linio([mdl, '/Acc_side'], 1, 'openoutput'); io_i = io_i + 1;
|
io(io_i) = linio([mdl, '/Payload'], 1, 'openoutput'); io_i = io_i + 1;
|
||||||
io(io_i) = linio([mdl, '/Acc_side'], 2, 'openoutput'); io_i = io_i + 1;
|
io(io_i) = linio([mdl, '/Payload'], 2, 'openoutput'); io_i = io_i + 1;
|
||||||
io(io_i) = linio([mdl, '/Acc_top'], 1, 'openoutput'); io_i = io_i + 1;
|
io(io_i) = linio([mdl, '/Payload'], 3, 'openoutput'); io_i = io_i + 1;
|
||||||
% io(io_i) = linio([mdl, '/Acc_top'], 2, 'openoutput'); io_i = io_i + 1;
|
|
||||||
|
|
||||||
G_acc = linearize(mdl, io);
|
G_L_alt = linearize(mdl, io);
|
||||||
G_acc.InputName = {'F1', 'F2', 'F3'};
|
G_L_alt.InputName = {'F1', 'F2', 'F3'};
|
||||||
G_acc.OutputName = {'Ax1', 'Ay1', 'Ax2'};
|
G_L_alt.OutputName = {'d1', 'd2', 'd32'};
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab
|
% SVD Decoupling with the new plant
|
||||||
%% SVD Decoupling
|
|
||||||
wc = 2*pi*100; % Decoupling frequency [rad/s]
|
wc = 2*pi*100; % Decoupling frequency [rad/s]
|
||||||
% System's response at the decoupling frequency
|
% System's response at the decoupling frequency
|
||||||
H1 = evalfr(G_acc, j*wc);
|
H1 = evalfr(G_L_alt, j*wc);
|
||||||
|
|
||||||
% Real approximation of G(j.wc)
|
% Real approximation of G(j.wc)
|
||||||
D = pinv(real(H1'*H1));
|
D = pinv(real(H1'*H1));
|
||||||
@ -2909,310 +3149,132 @@ H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2))));
|
|||||||
|
|
||||||
[U,S,V] = svd(H1);
|
[U,S,V] = svd(H1);
|
||||||
|
|
||||||
Gsvd_acc = inv(U)*G_acc*inv(V');
|
Gsvd_alt = inv(U)*G_L_alt*inv(V');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
#+begin_src matlab :exports none :results none
|
||||||
|
%% Obtained plant after SVD decoupling - Relative motion sensors are not collocated with the actuators
|
||||||
figure;
|
figure;
|
||||||
hold on;
|
hold on;
|
||||||
for i_in = 1:3
|
for i_in = 1:3
|
||||||
for i_out = [i_in+1:3]
|
for i_out = [i_in+1:3]
|
||||||
plot(freqs, abs(squeeze(freqresp(Gsvd_acc(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
||||||
'HandleVisibility', 'off');
|
'HandleVisibility', 'off');
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
plot(freqs, abs(squeeze(freqresp(Gsvd_acc(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
||||||
'DisplayName', '$G_{SVD}(i,j)\ i \neq j$');
|
'DisplayName', '$G_{SVD}(i,j)\ i \neq j$');
|
||||||
set(gca,'ColorOrderIndex',1)
|
set(gca,'ColorOrderIndex',1)
|
||||||
for i_in_out = 1:3
|
for i_in_out = 1:3
|
||||||
plot(freqs, abs(squeeze(freqresp(Gsvd_acc(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{SVD}(%d,%d)$', i_in_out, i_in_out));
|
plot(freqs, abs(squeeze(freqresp(Gsvd_alt(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{SVD}(%d,%d)$', i_in_out, i_in_out));
|
||||||
end
|
end
|
||||||
hold off;
|
hold off;
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
xlabel('Frequency [Hz]'); ylabel('Magnitude');
|
xlabel('Frequency [Hz]'); ylabel('Magnitude');
|
||||||
ylim([1e-10, 2e-4]);
|
ylim([5e-11, 7e-5]);
|
||||||
leg = legend('location', 'northeast', 'FontSize', 8);
|
leg = legend('location', 'southwest', 'FontSize', 8);
|
||||||
leg.ItemTokenSize(1) = 18;
|
leg.ItemTokenSize(1) = 18;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Comparison
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
|
exportFig('figs/detail_control_svd_alt_plant.pdf', 'width', 'half', 'height', 'normal');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:detail_control_svd_decoupling_not_symmetrical
|
||||||
|
#+caption: Application of SVD decoupling on a system schematically shown in (\subref{fig:detail_control_model_test_decoupling_alt}). The obtained decoupled plant is shown in (\subref{fig:detail_control_svd_alt_plant}).
|
||||||
|
#+attr_latex: :options [htbp]
|
||||||
|
#+begin_figure
|
||||||
|
#+attr_latex: :caption \subcaption{\label{fig:detail_control_model_test_decoupling_alt}Alternative location of sensors}
|
||||||
|
#+attr_latex: :options {0.48\textwidth}
|
||||||
|
#+begin_subfigure
|
||||||
|
#+attr_latex: :scale 1
|
||||||
|
[[file:figs/detail_control_model_test_decoupling_alt.png]]
|
||||||
|
#+end_subfigure
|
||||||
|
#+attr_latex: :caption \subcaption{\label{fig:detail_control_svd_alt_plant}Obtained decoupled plant}
|
||||||
|
#+attr_latex: :options {0.48\textwidth}
|
||||||
|
#+begin_subfigure
|
||||||
|
#+attr_latex: :width 0.95\linewidth
|
||||||
|
[[file:figs/detail_control_svd_alt_plant.png]]
|
||||||
|
#+end_subfigure
|
||||||
|
#+end_figure
|
||||||
|
|
||||||
|
** Comparison of decoupling strategies
|
||||||
<<ssec:detail_control_decoupling_comp>>
|
<<ssec:detail_control_decoupling_comp>>
|
||||||
|
|
||||||
|
The three proposed methods may seem very similar as each of them consists of pre-multiplying and post-multiplying the plant with constant matrices.
|
||||||
|
However, the three methods also differs by a number of points which are summarized in Table ref:tab:detail_control_decoupling_strategies_comp.
|
||||||
|
|
||||||
|
However, each method is quite different in terms of approach, and have different pros and cons.
|
||||||
|
|
||||||
|
- Comparison of the three proposed methods
|
||||||
|
- Different "approach" for the three methods:
|
||||||
|
- Jacobian is based on geometry
|
||||||
|
- Modal decoupling is based on dynamical equations
|
||||||
|
- Singular Value Decoupling is based on measured frequency response function
|
||||||
|
- Depending on the decoupling method, the physical interpretation of inputs and outputs:
|
||||||
|
- With Jacobian decoupling, the inputs and outputs can be easily interpreted physically.
|
||||||
|
Inputs correspond to force/torques applied on a particular frames
|
||||||
|
Outputs corresponds to translation and rotations expressed on a particular frame
|
||||||
|
- With modal decoupling, inputs are arranged to excite individual modes.
|
||||||
|
By doing a modal analysis (using a FEA for instance) it can be understood how actuator forces are combined to individually excite the different modes.
|
||||||
|
Similarly, the outputs are combined to measure the different modes separately.
|
||||||
|
- For singular value decomposition, inputs (resp. outputs) are special directions that are ordered from maximum to minimum controllability (resp. observability), at the chosen frequency.
|
||||||
|
For plants such as parallel manipulators, it is difficult to have a physical interpretations of the decoupled plants inputs and outputs.
|
||||||
|
- [ ] It is really linked to controllability? (add reference about that)
|
||||||
|
- Decoupling quality:
|
||||||
|
- Jacobian: depending on the choice of frame, the plant may be well decoupled at low frequency (Center of Stiffness) or at high frequency (Center of Mass).
|
||||||
|
If the system is designed to have both the CoK and the CoM at the same point, the use of Jacobian matrices may lead to excellent decoupling.
|
||||||
|
- Modal: good decoupling is obtained for all frequencies.
|
||||||
|
However, this is based on a model of the plant, and differences between the model and the physical implementation may lead to large off-diagonal elements.
|
||||||
|
Diagonal elements are expected to be simple 2nd order low pass filters, which are easy to control.
|
||||||
|
- SVD: as the decoupling matrices can be computed based on measured data, no model is required.
|
||||||
|
Decoupling is expected to be good near the frequency chosen for computing the decoupling matrices, but may depend on how good the real approximation of the plant is for that particular frequency.
|
||||||
|
Whether the decoupling quality can be guaranteed away from the chosen frequency is unknown.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Maybe not necessary
|
||||||
|
There are other aspects that were not treated here such as:
|
||||||
|
- how to integrate feedforward path and reference signals
|
||||||
|
|
||||||
#+name: tab:detail_control_decoupling_strategies_comp
|
#+name: tab:detail_control_decoupling_strategies_comp
|
||||||
#+caption: Comparison of decoupling strategies
|
#+caption: Comparison of decoupling strategies
|
||||||
#+attr_latex: :environment tabularx :width \linewidth :align lXXX
|
#+attr_latex: :environment tabularx :width \linewidth :align lXXX
|
||||||
#+attr_latex: :center t :booktabs t :font \scriptsize
|
#+attr_latex: :center t :booktabs t :font \scriptsize
|
||||||
| | *Jacobian* | *Modal* | *SVD* |
|
| | *Jacobian* | *Modal* | *SVD* |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Philosophy* | Topology Driven | Physics Driven | Data Driven |
|
| *Philosophy* | Topology Driven | Physics Driven | Data Driven |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Requirements* | Known geometry | Known equations of motion | Identified FRF |
|
| *Requirements* | Known geometry | Known equations of motion | Identified FRF |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Decoupling Matrices* | Decoupling using $J$ obtained from geometry | Decoupling using $\Phi$ obtained from modal decomposition | Decoupling using $U$ and $V$ obtained from SVD |
|
| *Decoupling Matrices* | Decoupling using $\bm{J}_{\{O\}}$ obtained from geometry | Decoupling using $\bm{\Phi}$ obtained from modal decomposition | Decoupling using $\bm{U}$ and $\bm{V}$ obtained from SVD |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Decoupled Plant* | $\bm{G}_{\{O\}} = J_{\{O\}}^{-1} \bm{G} J_{\{O\}}^{-T}$ | $\bm{G}_m = C_m^{-1} \bm{G} B_m^{-1}$ | $\bm{G}_{svd}(s) = U^{-1} \bm{G}(s) V^{-T}$ |
|
| *Decoupled Plant* | $\bm{G}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-1} \bm{G}_{\mathcal{L}}(s) \bm{J}_{\{O\}}^{-T}$ | $\bm{G}_m(s) = \bm{\Phi}^{-1} \bm{G}_{\mathcal{X}}(s) \bm{\Phi}^{-t}$ | $\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}(s) \bm{V}^{-T}$ |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Implemented Controller* | $\bm{K}_{\{O\}} = J_{\{O\}}^{-T} \bm{K}_{d}(s) J_{\{O\}}^{-1}$ | $\bm{K}_m = B_m^{-1} \bm{K}_{d}(s) C_m^{-1}$ | $\bm{K}_{svd}(s) = V^{-T} \bm{K}_{d}(s) U^{-1}$ |
|
| *Controller* | $\bm{K}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-T} \bm{K}_{d}(s) \bm{J}_{\{O\}}^{-1}$ | $\bm{K}_m(s) = \bm{\Phi}^{-t} \bm{K}_{d}(s) \bm{\Phi}^{-1}$ | $\bm{K}_{\text{SVD}}(s) = \bm{V}^{-T} \bm{K}_{d}(s) \bm{U}^{-1}$ |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Physical Interpretation* | Forces/Torques to Displacement/Rotation in chosen frame | Inputs to excite individual modes | Directions of max to min controllability/observability |
|
| *Interpretation* | Forces/Torques to Displacement/Rotation in chosen frame | Inputs to excite individual modes | Directions of max to min controllability/observability |
|
||||||
| | | Output to sense individual modes | |
|
| | | Output to sense individual modes | |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Decoupling Properties* | Decoupling at low or high frequency depending on the chosen frame | Good decoupling at all frequencies | Good decoupling near the chosen frequency |
|
| *Properties* | Decoupling at low or high frequency depending on the chosen frame | Good decoupling at all frequencies | Good decoupling near the chosen frequency |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Pros* | Physical inputs / outputs | Target specific modes | Good Decoupling near the crossover |
|
| *Pros* | Physical inputs / outputs | Target specific modes | Good Decoupling near the crossover |
|
||||||
| | Good decoupling at High frequency (diagonal mass matrix if Jacobian taken at the CoM) | 2nd order diagonal plant | Very General |
|
| | Good decoupling at High frequency (diagonal mass matrix if Jacobian taken at the CoM) | 2nd order diagonal plant | Very General |
|
||||||
| | Good decoupling at Low frequency (if Jacobian taken at specific point) | | |
|
| | Good decoupling at Low frequency (if Jacobian taken at specific point) | | |
|
||||||
| | Easy integration of meaningful reference inputs | | |
|
| | Easy integration of meaningful reference inputs | | |
|
||||||
| | | | |
|
| | | | |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Cons* | Coupling between force/rotation may be high at low frequency (non diagonal terms in K) | Need analytical equations | Loose the physical meaning of inputs /outputs |
|
| *Cons* | Coupling between force/rotation may be high at low frequency (non diagonal terms in K) | Need analytical equations | Loose the physical meaning of inputs /outputs |
|
||||||
| | Limited to parallel mechanisms (?) | | Decoupling depends on the real approximation validity |
|
| | Limited to parallel mechanisms (?) | | Decoupling depends on the real approximation validity |
|
||||||
| | If good decoupling at all frequencies => requires specific mechanical architecture | | Diagonal plants may not be easy to control |
|
| | If good decoupling at all frequencies => requires specific mechanical architecture | | Diagonal plants may not be easy to control |
|
||||||
|---------------------------+----------------------------------------------------------------------------------------+--------------------------------------------------------------------+--------------------------------------------------------|
|
|-----------------------+----------------------------------------------------------------------------------------+-----------------------------------------------------------------------+------------------------------------------------------------------|
|
||||||
| *Applicability* | Parallel Mechanisms | Systems whose dynamics that can be expressed with M and K matrices | Very general |
|
| *Applicability* | Parallel Mechanisms | Systems whose dynamics that can be expressed with M and K matrices | Very general |
|
||||||
| | Only small motion for the Jacobian matrix to stay constant | | Need FRF data (either experimentally or analytically) |
|
| | Only small motion for the Jacobian matrix to stay constant | | Need FRF data (either experimentally or analytically) |
|
||||||
|
|
||||||
** TODO Robustness of the decoupling strategies? :noexport:
|
|
||||||
*** Introduction :ignore:
|
|
||||||
What happens if we add an additional resonance in the system (Figure ref:fig:model_test_decoupling_spurious_res).
|
|
||||||
|
|
||||||
Having less actuator than DoF (under-actuated system):
|
|
||||||
- modal decoupling: can still control first $n$ modes?
|
|
||||||
- SVD decoupling: does not matter
|
|
||||||
- Jacobian decoupling: could give poor decoupling?
|
|
||||||
|
|
||||||
#+name: fig:model_test_decoupling_spurious_res
|
|
||||||
#+caption: Plant with spurious resonance (additional DoF)
|
|
||||||
[[file:figs/model_test_decoupling_spurious_res.png]]
|
|
||||||
|
|
||||||
*** Plant
|
|
||||||
A multi body model of the system in Figure ref:fig:model_test_decoupling_spurious_res has been made using Simscape.
|
|
||||||
|
|
||||||
Its parameters are defined below:
|
|
||||||
#+begin_src matlab
|
|
||||||
leq = 20e-3; % Equilibrium length of struts [m]
|
|
||||||
mr = 5; % [kg]
|
|
||||||
kr = (2*pi*10)^2*mr; % Stiffness [N/m]
|
|
||||||
cr = 1e1; % Damping [N/(m/s)]
|
|
||||||
|
|
||||||
m = 400 - mr; % Mass [kg]
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
The plant is then identified and shown in Figure ref:fig:detail_control_coupled_plant_bode_spurious.
|
|
||||||
The added resonance only slightly modifies the plant around 10Hz.
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
%% Name of the Simulink File
|
|
||||||
mdl = 'suspended_mass';
|
|
||||||
|
|
||||||
%% Input/Output definition
|
|
||||||
clear io; io_i = 1;
|
|
||||||
io(io_i) = linio([mdl, '/F'], 1, 'openinput'); io_i = io_i + 1;
|
|
||||||
io(io_i) = linio([mdl, '/dL'], 1, 'openoutput'); io_i = io_i + 1;
|
|
||||||
|
|
||||||
Gr = linearize(mdl, io);
|
|
||||||
Gr.InputName = {'F1', 'F2', 'F3'};
|
|
||||||
Gr.OutputName = {'L1', 'L2', 'L3'};
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
figure;
|
|
||||||
tiledlayout(3, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
|
|
||||||
|
|
||||||
for out_i = 1:3
|
|
||||||
for in_i = 1:3
|
|
||||||
nexttile;
|
|
||||||
hold on;
|
|
||||||
plot(freqs, abs(squeeze(freqresp(G(out_i,in_i), freqs, 'Hz'))), 'k-', ...
|
|
||||||
'DisplayName', sprintf('$\\mathcal{L}_%i/\\tau_%i$', out_i, in_i));
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gr(out_i,in_i), freqs, 'Hz'))), 'k--', ...
|
|
||||||
'HandleVisibility', 'off');
|
|
||||||
hold off;
|
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
|
||||||
xlim([1e-1, 2e1]); ylim([1e-6, 1e-2]);
|
|
||||||
legend('location', 'northeast', 'FontSize', 8);
|
|
||||||
|
|
||||||
if in_i == 1
|
|
||||||
ylabel('Mag. [m/N]')
|
|
||||||
else
|
|
||||||
set(gca, 'YTickLabel',[]);
|
|
||||||
end
|
|
||||||
|
|
||||||
if out_i == 3
|
|
||||||
xlabel('Frequency [Hz]')
|
|
||||||
else
|
|
||||||
set(gca, 'XTickLabel',[]);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
|
||||||
exportFig('figs/detail_control_coupled_plant_bode_spurious.pdf', 'width', 'full', 'height', 'tall');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: fig:detail_control_coupled_plant_bode_spurious
|
|
||||||
#+caption: Magnitude of the coupled plant without additional mode (solid) and with the additional mode (dashed).
|
|
||||||
#+RESULTS:
|
|
||||||
[[file:figs/detail_control_coupled_plant_bode_spurious.png]]
|
|
||||||
|
|
||||||
*** Jacobian Decoupling
|
|
||||||
The obtained plant is decoupled using the Jacobian matrix.
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
Gxr = pinv(J)*Gr*pinv(J');
|
|
||||||
Gxr.InputName = {'Fx', 'Fy', 'Mz'};
|
|
||||||
Gxr.OutputName = {'Dx', 'Dy', 'Rz'};
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
The obtained plant is shown in Figure ref:fig:detail_control_jacobian_plant_spurious and is not much different than for the plant without the spurious resonance.
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
figure;
|
|
||||||
|
|
||||||
% Magnitude
|
|
||||||
hold on;
|
|
||||||
for i_in = 1:3
|
|
||||||
for i_out = [i_in+1:3]
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gxr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
|
||||||
'HandleVisibility', 'off');
|
|
||||||
end
|
|
||||||
end
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gxr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
|
||||||
'DisplayName', '$G_{x,r}(i,j)\ i \neq j$');
|
|
||||||
set(gca,'ColorOrderIndex',1)
|
|
||||||
for i_in_out = 1:3
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gxr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{x,r}(%d,%d)$', i_in_out, i_in_out));
|
|
||||||
end
|
|
||||||
hold off;
|
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
|
||||||
xlabel('Frequency [Hz]'); ylabel('Magnitude');
|
|
||||||
ylim([1e-7, 1e-1]);
|
|
||||||
legend('location', 'northeast');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
|
||||||
exportFig('figs/detail_control_jacobian_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: fig:detail_control_jacobian_plant_spurious
|
|
||||||
#+caption: Plant with spurious resonance decoupled using the Jacobian matrices $G_{x,r}(s)$
|
|
||||||
#+RESULTS:
|
|
||||||
[[file:figs/detail_control_jacobian_plant_spurious.png]]
|
|
||||||
|
|
||||||
*** Modal Decoupling
|
|
||||||
The obtained plant is now decoupled using the modal matrices obtained with the plant not including the added resonance.
|
|
||||||
#+begin_src matlab
|
|
||||||
Gmr = inv(Cm)*Gr*inv(Bm);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
The obtained decoupled plant is shown in Figure ref:fig:detail_control_modal_plant_spurious.
|
|
||||||
Compare to the decoupled plant in Figure ref:fig:detail_control_modal_plant, the added resonance induces some coupling, especially around the frequency of the added spurious resonance.
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
figure;
|
|
||||||
|
|
||||||
% Magnitude
|
|
||||||
hold on;
|
|
||||||
for i_in = 1:3
|
|
||||||
for i_out = [i_in+1:3]
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gmr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
|
||||||
'HandleVisibility', 'off');
|
|
||||||
end
|
|
||||||
end
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gmr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
|
||||||
'DisplayName', '$G_{m,r}(i,j)\ i \neq j$');
|
|
||||||
set(gca,'ColorOrderIndex',1)
|
|
||||||
for i_in_out = 1:3
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gmr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{m,r}(%d,%d)$', i_in_out, i_in_out));
|
|
||||||
end
|
|
||||||
hold off;
|
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
|
||||||
xlabel('Frequency [Hz]'); ylabel('Magnitude');
|
|
||||||
ylim([1e-6, 1e2]);
|
|
||||||
legend('location', 'northeast');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
|
||||||
exportFig('figs/detail_control_modal_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: fig:detail_control_modal_plant_spurious
|
|
||||||
#+caption: Modal plant including spurious resonance $G_{m,r}(s)$
|
|
||||||
#+RESULTS:
|
|
||||||
[[file:figs/detail_control_modal_plant_spurious.png]]
|
|
||||||
|
|
||||||
*** SVD Decoupling
|
|
||||||
The SVD decoupling is performed on the new obtained plant.
|
|
||||||
The decoupling frequency is slightly shifted in order not to interfere too much with the spurious resonance.
|
|
||||||
|
|
||||||
#+begin_src matlab
|
|
||||||
%% Decoupling frequency [rad/s]
|
|
||||||
wc = 2*pi*7;
|
|
||||||
|
|
||||||
%% System's response at the decoupling frequency
|
|
||||||
H1 = evalfr(Gr, j*wc);
|
|
||||||
|
|
||||||
%% Real approximation of G(j.wc)
|
|
||||||
D = pinv(real(H1'*H1));
|
|
||||||
H1 = pinv(D*real(H1'*diag(exp(j*angle(diag(H1*D*H1.'))/2))));
|
|
||||||
|
|
||||||
[U,S,V] = svd(H1);
|
|
||||||
|
|
||||||
Gsvdr = inv(U)*Gr*inv(V');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
The obtained plant is shown in Figure ref:fig:detail_control_svd_plant_spurious.
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
figure;
|
|
||||||
|
|
||||||
% Magnitude
|
|
||||||
hold on;
|
|
||||||
for i_in = 1:3
|
|
||||||
for i_out = [i_in+1:3]
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gsvdr(i_out, i_in), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
|
||||||
'HandleVisibility', 'off');
|
|
||||||
end
|
|
||||||
end
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gsvdr(1, 2), freqs, 'Hz'))), 'color', [0,0,0,0.2], ...
|
|
||||||
'DisplayName', '$G_{svd,r}(i,j)\ i \neq j$');
|
|
||||||
set(gca,'ColorOrderIndex',1)
|
|
||||||
for i_in_out = 1:3
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gsvdr(i_in_out, i_in_out), freqs, 'Hz'))), 'DisplayName', sprintf('$G_{svd,r}(%d,%d)$', i_in_out, i_in_out));
|
|
||||||
end
|
|
||||||
hold off;
|
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
|
||||||
xlabel('Frequency [Hz]'); ylabel('Magnitude');
|
|
||||||
ylim([1e-8, 1e-2]);
|
|
||||||
legend('location', 'northeast');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
|
||||||
exportFig('figs/detail_control_svd_plant_spurious.pdf', 'width', 'wide', 'height', 'normal');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: fig:detail_control_svd_plant_spurious
|
|
||||||
#+caption: SVD decoupled plant including a spurious resonance $G_{svd,r}(s)$
|
|
||||||
#+RESULTS:
|
|
||||||
[[file:figs/detail_control_svd_plant_spurious.png]]
|
|
||||||
|
|
||||||
** Conclusion
|
|
||||||
:PROPERTIES:
|
|
||||||
:UNNUMBERED: t
|
|
||||||
:END:
|
|
||||||
|
|
||||||
The three proposed methods clearly have a lot in common as they all tend to make system more decoupled by pre and/or post multiplying by a constant matrix
|
|
||||||
However, the three methods also differs by a number of points which are summarized in Table ref:tab:detail_control_decoupling_strategies_comp.
|
|
||||||
|
|
||||||
Other decoupling strategies could be included in this study, such as:
|
|
||||||
- DC decoupling: pre-multiply the plant by $G(0)^{-1}$
|
|
||||||
- full decoupling: pre-multiply the plant by $G(s)^{-1}$
|
|
||||||
|
|
||||||
Conclusion about NASS:
|
Conclusion about NASS:
|
||||||
- Prefer to use Jacobian decoupling as we get more physical interpretation
|
- Prefer to use Jacobian decoupling as we get more physical interpretation
|
||||||
- Also, it is possible to take into account different specifications in the different DoF
|
- Also, it is possible to take into account different specifications in the different DoF as the control is in a "frame" which corresponds to the specifications.
|
||||||
|
For active damping however, it may be reasonable to work in the modal space as different damping may be applied to different modes [[cite:&holterman05_activ_dampin_based_decoup_colloc_contr]].
|
||||||
When possible, having a design providing the same CoK and CoM is good.
|
|
||||||
Often, it is not possible and we have to deal with that with control.
|
|
||||||
Idea about using CoK at low frequency and CoM at high frequency ?
|
|
||||||
Maybe with complementary filters?
|
|
||||||
|
|
||||||
* Closed-Loop Shaping using Complementary Filters
|
* Closed-Loop Shaping using Complementary Filters
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
|
BIN
nass-control.pdf
BIN
nass-control.pdf
Binary file not shown.
263
nass-control.tex
263
nass-control.tex
@ -1,4 +1,4 @@
|
|||||||
% Created 2025-04-05 Sat 15:49
|
% Created 2025-04-05 Sat 21:56
|
||||||
% Intended LaTeX compiler: pdflatex
|
% Intended LaTeX compiler: pdflatex
|
||||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||||
|
|
||||||
@ -1039,9 +1039,9 @@ Obtained
|
|||||||
|
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\bm{\Phi} = \begin{bmatrix}
|
\bm{\Phi} = \begin{bmatrix}
|
||||||
\frac{I - h_a^2 m - 2 l_a^2 m - \alpha}{2 h_a m} & \frac{I - h_a^2 m - 2 l_a^2 m + \alpha}{2 h_a m} & 0 \\
|
\frac{I - h_a^2 m - 2 l_a^2 m - \alpha}{2 h_a m} & 0 & \frac{I - h_a^2 m - 2 l_a^2 m + \alpha}{2 h_a m} \\
|
||||||
0 & 0 & 1 \\
|
0 & 1 & 0 \\
|
||||||
1 & 1 & 0
|
1 & 0 & 1
|
||||||
\end{bmatrix},\ \alpha = \sqrt{\left( I + m (h_a^2 - 2 l_a^2) \right)^2 + 8 m^2 h_a^2 l_a^2}
|
\end{bmatrix},\ \alpha = \sqrt{\left( I + m (h_a^2 - 2 l_a^2) \right)^2 + 8 m^2 h_a^2 l_a^2}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
@ -1053,20 +1053,19 @@ Eigenvectors are arranged for increasing eigenvalues (i.e. resonance frequencies
|
|||||||
|
|
||||||
\begin{equation}\label{eq:}
|
\begin{equation}\label{eq:}
|
||||||
\bm{\phi} = \begin{bmatrix}
|
\bm{\phi} = \begin{bmatrix}
|
||||||
-0.905 & -0.058 & 0 \\
|
-0.905 & 0 & -0.058 \\
|
||||||
0 & 0 & 1 \\
|
0 & 1 & 0 \\
|
||||||
0.424 & -0.998 & 0
|
0.424 & 0 & -0.998
|
||||||
\end{bmatrix}, \quad
|
\end{bmatrix}, \quad
|
||||||
\bm{\phi}^{-1} = \begin{bmatrix}
|
\bm{\phi}^{-1} = \begin{bmatrix}
|
||||||
-1.075 & 0 & 0.063 \\
|
-1.075 & 0 & 0.063 \\
|
||||||
-0.457 & 0 & -0.975 \\
|
0 & 1 & 0 \\
|
||||||
0 & 1 & 0
|
-0.457 & 0 & -0.975
|
||||||
\end{bmatrix}
|
\end{bmatrix}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item[{$\square$}] Make a schematic with the three modes
|
\item[{$\square$}] Formula for the plant transfer function
|
||||||
Maybe with each force displayed with different amplitudes
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
@ -1074,67 +1073,68 @@ Maybe with each force displayed with different amplitudes
|
|||||||
\begin{center}
|
\begin{center}
|
||||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_modal_plant.png}
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_modal_plant.png}
|
||||||
\end{center}
|
\end{center}
|
||||||
\subcaption{\label{fig:detail_control_modal_plant}sub caption a}
|
\subcaption{\label{fig:detail_control_modal_plant}Decoupled plant in modal space}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\begin{subfigure}{0.48\textwidth}
|
\begin{subfigure}{0.48\textwidth}
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_model_test_modal.png}
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_model_test_modal.png}
|
||||||
\end{center}
|
\end{center}
|
||||||
\subcaption{\label{fig:detail_control_model_test_modal}sub caption b}
|
\subcaption{\label{fig:detail_control_model_test_modal}Individually controlled modes}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\caption{\label{fig:detail_control_modal_plant_decoupling}Caption with reference to sub figure (\subref{fig:fig_label_a})}
|
\caption{\label{fig:detail_control_modal_plant_decoupling}Plant using modal decoupling consists of second order plants (\subref{fig:detail_control_modal_plant}) which can be used to control separately different modes (\subref{fig:detail_control_model_test_modal})}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
\section{SVD Decoupling}
|
\section{SVD Decoupling}
|
||||||
\label{ssec:detail_control_comp_svd}
|
\label{ssec:detail_control_comp_svd}
|
||||||
\paragraph{Singular Value Decomposition}
|
\paragraph{Singular Value Decomposition}
|
||||||
|
|
||||||
|
Singular Value Decomposition (SVD)
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Introduction to SVD \cite{brunton22_data}
|
\item Introduction to SVD \cite[, chapt. 1]{brunton22_data}
|
||||||
\item Applied to parallel manipulator?
|
\item Singular value is used a lot for multivariable control \cite{skogestad07_multiv_feedb_contr}.
|
||||||
|
Used to study directions in multivariable systems.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
Singular value is used a lot for multivariable control \cite{skogestad07_multiv_feedb_contr}.
|
The SVD is a unique matrix decomposition that exists for every complex matrix \(\bm{X} \in \mathbb{C}^{n \times m}\).
|
||||||
Used to study directions in multivariable systems
|
|
||||||
\paragraph{Control Architecture}
|
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{equation}\label{eq:detail_control_svd}
|
||||||
\item[{$\square$}] SVD controllers described in \cite[, chapt. 3.5.4]{skogestad07_multiv_feedb_contr}
|
\bm{X} = \bm{U} \bm{\Sigma} \bm{V}^H
|
||||||
\item[{$\square$}] \textbf{Check if inverse U and V should be used or just U and V matrices}, Use correct notations.
|
|
||||||
\item[{$\square$}] Have notation for the measured FRF and for the real approximation
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\begin{equation}
|
|
||||||
\bm{G}(j\omega) = \begin{bmatrix}
|
|
||||||
0 & 0 & 0 \\
|
|
||||||
0 & 0 & 0 \\
|
|
||||||
0 & 0 & 0 \\
|
|
||||||
\end{bmatrix} \xrightarrow[approximation]{real} \begin{bmatrix}
|
|
||||||
0 & 0 & 0 \\
|
|
||||||
0 & 0 & 0 \\
|
|
||||||
0 & 0 & 0 \\
|
|
||||||
\end{bmatrix} \xrightarrow[SVD]{} U = , \ V =
|
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
Procedure:
|
where \(\bm{U} \in \mathbb{C}^{n \times n}\) and \(\bm{V} \in \mathbb{C}^{m \times m}\) are unitary matrices with orthonormal columns, and \(\bm{\Sigma} \in \mathbb{R}^{n \times n}\) is a diagonal matrix with real, non-negative entries on the diagonal.
|
||||||
\begin{itemize}
|
|
||||||
\item Identify the dynamics of the system from inputs to outputs (can be obtained experimentally)
|
|
||||||
Frequency Response Function, which is a complex matrix obtained for several frequency points.
|
|
||||||
\item Choose a frequency where we want to decouple the system (usually, the crossover frequency is a good choice)
|
|
||||||
\item Compute a real approximation of the system's response at that frequency
|
|
||||||
As \emph{real} V and U matrices need to be obtained, a real approximation of the complex measured response needs to be computed.
|
|
||||||
\cite{kouvaritakis79_theor_pract_charac_locus_desig_method}: real matrix that preserves the most orthogonality in directions with the input complex matrix
|
|
||||||
\item Perform a Singular Value Decomposition of the real approximation.
|
|
||||||
Unitary U and V matrices are then obtained such that:
|
|
||||||
V-t Greal U-1 is a diagonal matrix
|
|
||||||
|
|
||||||
\item Use the singular input and output matrices to decouple the system as shown in Figure \ref{fig:detail_control_decoupling_svd}
|
If the matrix \(\bm{X}\) is a real matrix, the obtained \(\bm{U}\) and \(\bm{V}\) matrices are real and can be used for decoupling purposes.
|
||||||
\[ G_{svd}(s) = U^{-1} G(s) V^{-T} \]
|
|
||||||
|
The idea to use Singular Value Decomposition as a way to decouple a plant is not new
|
||||||
|
\begin{itemize}
|
||||||
|
\item[{$\square$}] Quick review of SVD controllers
|
||||||
|
\cite[, chapt. 3.5.4]{skogestad07_multiv_feedb_contr}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
\paragraph{Decoupling using the SVD}
|
||||||
|
|
||||||
|
\textbf{Procedure}:
|
||||||
|
Identify the dynamics of the system from inputs to outputs (can be obtained experimentally)
|
||||||
|
Frequency Response Function, which is a complex matrix obtained for several frequency points \(\bm{G}(\omega_i)\).
|
||||||
|
|
||||||
|
|
||||||
|
Choose a frequency where we want to decouple the system (usually, the crossover frequency \(\omega_c\) is a good choice)
|
||||||
|
|
||||||
|
As \emph{real} V and U matrices need to be obtained, a real approximation of the complex measured response needs to be computed.
|
||||||
|
Compute a real approximation of the system's response at that frequency.
|
||||||
|
\cite{kouvaritakis79_theor_pract_charac_locus_desig_method}: real matrix that preserves the most orthogonality in directions with the input complex matrix
|
||||||
|
|
||||||
|
Then, a real matrix \(\tilde{\bm{G}}(\omega_c)\) is obtained, and the SVD is performed on this real matrix.
|
||||||
|
Unitary \(\bm{U}\) and \(\bm{V}\) matrices are then obtained such that \(\bm{V}^{-t} \tilde{\bm{G}}(\omega_c) \bm{U}^{-1}\) is diagonal.
|
||||||
|
|
||||||
|
Use the singular input and output matrices to decouple the system as shown in Figure \ref{fig:detail_control_decoupling_svd}
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
G_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}_{\{\mathcal{L}\}}(s) \bm{V}^{-T}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[scale=1]{figs/detail_control_decoupling_svd.png}
|
\includegraphics[scale=1]{figs/detail_control_decoupling_svd.png}
|
||||||
\caption{\label{fig:detail_control_decoupling_svd}Decoupled plant \(\bm{G}_{SVD}\) using the Singular Value Decomposition}
|
\caption{\label{fig:detail_control_decoupling_svd}Decoupled plant \(\bm{G}_{\text{SVD}}\) using the Singular Value Decomposition}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
In order to apply the Singular Value Decomposition, we need to have the Frequency Response Function of the system, at least near the frequency where we wish to decouple the system.
|
In order to apply the Singular Value Decomposition, we need to have the Frequency Response Function of the system, at least near the frequency where we wish to decouple the system.
|
||||||
@ -1153,17 +1153,39 @@ The inputs and outputs are ordered from higher gain to lower gain at the chosen
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
\paragraph{Example}
|
\paragraph{Example}
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item[{$\square$}] Analytical formulas in this case?
|
\begin{equation}
|
||||||
\item[{$\square$}] Maybe show the complex and real response matrices.
|
\begin{align}
|
||||||
\item[{$\square$}] At least, show the obtained matrices
|
& \bm{G}_{\{\mathcal{L}\}}(\omega_c) = 10^{-9} \begin{bmatrix}
|
||||||
\item[{$\square$}] Do we have something special when applying SVD to a collocated MIMO system?
|
-99 - j 2.6 & 74 + j 4.2 & -74 - j 4.2 \\
|
||||||
\item \textbf{Verify why such a good decoupling is obtained!}
|
74 + j 4.2 & -247 - j 9.7 & 102 + j 7.0 \\
|
||||||
\end{itemize}
|
-74 - j 4.2 & 102 + j 7.0 & -247 - j 9.7
|
||||||
\begin{equation}\label{eq:detail_control_decoupling_plant_svd}
|
\end{bmatrix} \\
|
||||||
\bm{G}_{SVD}(s) =
|
& \xrightarrow[\text{approximation}]{\text{real}} \tilde{\bm{G}}_{\{\mathcal{L}\}(\omega_c)} = 10^{-9} \begin{bmatrix}
|
||||||
|
-99 & 74 & -74 \\
|
||||||
|
74 & -247 & 102 \\
|
||||||
|
-74 & 102 & -247
|
||||||
|
\end{bmatrix} \\
|
||||||
|
& \xrightarrow[\text{SVD}]{\phantom{\text{approximation}}} \bm{U} = \begin{bmatrix}
|
||||||
|
0.34 & 0 & 0.94 \\
|
||||||
|
-0.66 & 0.71 & 0.24 \\
|
||||||
|
0.66 & 0.71 & -0.24
|
||||||
|
\end{bmatrix}, \ \bm{V} = \begin{bmatrix}
|
||||||
|
-0.34 & 0 & -0.94 \\
|
||||||
|
0.66 & -0.71 & -0.24 \\
|
||||||
|
-0.66 & -0.71 & 0.24
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{align}
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
|
Once the \(\bm{U}\) and \(\bm{V}\) matrices are obtained, the decoupled plant can be computed using \eqref{eq:detail_control_decoupling_plant_svd}.
|
||||||
|
|
||||||
|
\begin{equation}\label{eq:detail_control_decoupling_plant_svd}
|
||||||
|
\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}_{\{\mathcal{L}\}}(s) \bm{V}^{-t}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
The obtained plant shown in Figure \ref{fig:detail_control_svd_plant} is very well decoupled. and not only around \(\omega_c\).
|
||||||
|
On top of that, the diagonal terms are second order plants.
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
@ -1171,20 +1193,94 @@ The inputs and outputs are ordered from higher gain to lower gain at the chosen
|
|||||||
\caption{\label{fig:detail_control_svd_plant}Svd plant \(G_m(s)\)}
|
\caption{\label{fig:detail_control_svd_plant}Svd plant \(G_m(s)\)}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\begin{table}[htbp]
|
|
||||||
\caption{\label{}Real approximate of \(G\) at the decoupling frequency \(\omega_c\)}
|
|
||||||
\centering
|
\begin{itemize}
|
||||||
\begin{tabularx}{0.3\linewidth}{ccc}
|
\item[{$\square$}] Do we have something special when applying SVD to a collocated MIMO system?
|
||||||
\toprule
|
As shown in Figure \ref{fig:detail_control_coupled_plant_bode}, the plant is symmetrical.
|
||||||
-8e-06 & 2.1e-06 & -2.1e-06\\
|
Paper by Skogestad mention that.
|
||||||
2.1e-06 & -1.3e-06 & -2.5e-08\\
|
``symmetric circular plants'' \cite{hovd97_svd_contr_contr}
|
||||||
-2.1e-06 & -2.5e-08 & -1.3e-06\\
|
\end{itemize}
|
||||||
\bottomrule
|
|
||||||
\end{tabularx}
|
|
||||||
\end{table}
|
|
||||||
\section{Comparison}
|
|
||||||
|
A second system, identical to the first in terms of dynamics.
|
||||||
|
Just the sensor are changed.
|
||||||
|
Instead of having relative motion sensors in the frame of the struts, three relative motion sensors are used as shown in Figure \ref{fig:detail_control_model_test_decoupling_alt}.
|
||||||
|
Using Jacobian matrices, it is possible to compute the relative motion of each struts.
|
||||||
|
So theoretically, it should be possible to control both systems the same way.
|
||||||
|
|
||||||
|
However, when applying the same SVD decoupling, plant of Figure \ref{fig:detail_control_svd_alt_plant} is obtained.
|
||||||
|
It has much more coupling.
|
||||||
|
It is interesting to note that the coupling have local minimum near the chosen decoupling frequency.
|
||||||
|
This is very logical as the decoupling matrices were computed from the plant response at that particular frequency.
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\begin{subfigure}{0.48\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,scale=1]{figs/detail_control_model_test_decoupling_alt.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:detail_control_model_test_decoupling_alt}Alternative location of sensors}
|
||||||
|
\end{subfigure}
|
||||||
|
\begin{subfigure}{0.48\textwidth}
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_svd_alt_plant.png}
|
||||||
|
\end{center}
|
||||||
|
\subcaption{\label{fig:detail_control_svd_alt_plant}Obtained decoupled plant}
|
||||||
|
\end{subfigure}
|
||||||
|
\caption{\label{fig:detail_control_svd_decoupling_not_symmetrical}Application of SVD decoupling on a system schematically shown in (\subref{fig:detail_control_model_test_decoupling_alt}). The obtained decoupled plant is shown in (\subref{fig:detail_control_svd_alt_plant}).}
|
||||||
|
\end{figure}
|
||||||
|
\section{Comparison of decoupling strategies}
|
||||||
\label{ssec:detail_control_decoupling_comp}
|
\label{ssec:detail_control_decoupling_comp}
|
||||||
|
|
||||||
|
The three proposed methods may seem very similar as each of them consists of pre-multiplying and post-multiplying the plant with constant matrices.
|
||||||
|
However, the three methods also differs by a number of points which are summarized in Table \ref{tab:detail_control_decoupling_strategies_comp}.
|
||||||
|
|
||||||
|
However, each method is quite different in terms of approach, and have different pros and cons.
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Comparison of the three proposed methods
|
||||||
|
\item Different ``approach'' for the three methods:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Jacobian is based on geometry
|
||||||
|
\item Modal decoupling is based on dynamical equations
|
||||||
|
\item Singular Value Decoupling is based on measured frequency response function
|
||||||
|
\end{itemize}
|
||||||
|
\item Depending on the decoupling method, the physical interpretation of inputs and outputs:
|
||||||
|
\begin{itemize}
|
||||||
|
\item With Jacobian decoupling, the inputs and outputs can be easily interpreted physically.
|
||||||
|
Inputs correspond to force/torques applied on a particular frames
|
||||||
|
Outputs corresponds to translation and rotations expressed on a particular frame
|
||||||
|
\item With modal decoupling, inputs are arranged to excite individual modes.
|
||||||
|
By doing a modal analysis (using a FEA for instance) it can be understood how actuator forces are combined to individually excite the different modes.
|
||||||
|
Similarly, the outputs are combined to measure the different modes separately.
|
||||||
|
\item For singular value decomposition, inputs (resp. outputs) are special directions that are ordered from maximum to minimum controllability (resp. observability), at the chosen frequency.
|
||||||
|
For plants such as parallel manipulators, it is difficult to have a physical interpretations of the decoupled plants inputs and outputs.
|
||||||
|
\begin{itemize}
|
||||||
|
\item[{$\square$}] It is really linked to controllability? (add reference about that)
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\item Decoupling quality:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Jacobian: depending on the choice of frame, the plant may be well decoupled at low frequency (Center of Stiffness) or at high frequency (Center of Mass).
|
||||||
|
If the system is designed to have both the CoK and the CoM at the same point, the use of Jacobian matrices may lead to excellent decoupling.
|
||||||
|
\item Modal: good decoupling is obtained for all frequencies.
|
||||||
|
However, this is based on a model of the plant, and differences between the model and the physical implementation may lead to large off-diagonal elements.
|
||||||
|
Diagonal elements are expected to be simple 2nd order low pass filters, which are easy to control.
|
||||||
|
\item SVD: as the decoupling matrices can be computed based on measured data, no model is required.
|
||||||
|
Decoupling is expected to be good near the frequency chosen for computing the decoupling matrices, but may depend on how good the real approximation of the plant is for that particular frequency.
|
||||||
|
Whether the decoupling quality can be guaranteed away from the chosen frequency is unknown.
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
There are other aspects that were not treated here such as:
|
||||||
|
\begin{itemize}
|
||||||
|
\item how to integrate feedforward path and reference signals
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\caption{\label{tab:detail_control_decoupling_strategies_comp}Comparison of decoupling strategies}
|
\caption{\label{tab:detail_control_decoupling_strategies_comp}Comparison of decoupling strategies}
|
||||||
\centering
|
\centering
|
||||||
@ -1197,16 +1293,16 @@ The inputs and outputs are ordered from higher gain to lower gain at the chosen
|
|||||||
\midrule
|
\midrule
|
||||||
\textbf{Requirements} & Known geometry & Known equations of motion & Identified FRF\\
|
\textbf{Requirements} & Known geometry & Known equations of motion & Identified FRF\\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{Decoupling Matrices} & Decoupling using \(J\) obtained from geometry & Decoupling using \(\Phi\) obtained from modal decomposition & Decoupling using \(U\) and \(V\) obtained from SVD\\
|
\textbf{Decoupling Matrices} & Decoupling using \(\bm{J}_{\{O\}}\) obtained from geometry & Decoupling using \(\bm{\Phi}\) obtained from modal decomposition & Decoupling using \(\bm{U}\) and \(\bm{V}\) obtained from SVD\\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{Decoupled Plant} & \(\bm{G}_{\{O\}} = J_{\{O\}}^{-1} \bm{G} J_{\{O\}}^{-T}\) & \(\bm{G}_m = C_m^{-1} \bm{G} B_m^{-1}\) & \(\bm{G}_{svd}(s) = U^{-1} \bm{G}(s) V^{-T}\)\\
|
\textbf{Decoupled Plant} & \(\bm{G}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-1} \bm{G}_{\mathcal{L}}(s) \bm{J}_{\{O\}}^{-T}\) & \(\bm{G}_m(s) = \bm{\Phi}^{-1} \bm{G}_{\mathcal{X}}(s) \bm{\Phi}^{-t}\) & \(\bm{G}_{\text{SVD}}(s) = \bm{U}^{-1} \bm{G}(s) \bm{V}^{-T}\)\\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{Implemented Controller} & \(\bm{K}_{\{O\}} = J_{\{O\}}^{-T} \bm{K}_{d}(s) J_{\{O\}}^{-1}\) & \(\bm{K}_m = B_m^{-1} \bm{K}_{d}(s) C_m^{-1}\) & \(\bm{K}_{svd}(s) = V^{-T} \bm{K}_{d}(s) U^{-1}\)\\
|
\textbf{Controller} & \(\bm{K}_{\{O\}}(s) = \bm{J}_{\{O\}}^{-T} \bm{K}_{d}(s) \bm{J}_{\{O\}}^{-1}\) & \(\bm{K}_m(s) = \bm{\Phi}^{-t} \bm{K}_{d}(s) \bm{\Phi}^{-1}\) & \(\bm{K}_{\text{SVD}}(s) = \bm{V}^{-T} \bm{K}_{d}(s) \bm{U}^{-1}\)\\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{Physical Interpretation} & Forces/Torques to Displacement/Rotation in chosen frame & Inputs to excite individual modes & Directions of max to min controllability/observability\\
|
\textbf{Interpretation} & Forces/Torques to Displacement/Rotation in chosen frame & Inputs to excite individual modes & Directions of max to min controllability/observability\\
|
||||||
& & Output to sense individual modes & \\
|
& & Output to sense individual modes & \\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{Decoupling Properties} & Decoupling at low or high frequency depending on the chosen frame & Good decoupling at all frequencies & Good decoupling near the chosen frequency\\
|
\textbf{Properties} & Decoupling at low or high frequency depending on the chosen frame & Good decoupling at all frequencies & Good decoupling near the chosen frequency\\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{Pros} & Physical inputs / outputs & Target specific modes & Good Decoupling near the crossover\\
|
\textbf{Pros} & Physical inputs / outputs & Target specific modes & Good Decoupling near the crossover\\
|
||||||
& Good decoupling at High frequency (diagonal mass matrix if Jacobian taken at the CoM) & 2nd order diagonal plant & Very General\\
|
& Good decoupling at High frequency (diagonal mass matrix if Jacobian taken at the CoM) & 2nd order diagonal plant & Very General\\
|
||||||
@ -1223,26 +1319,13 @@ The inputs and outputs are ordered from higher gain to lower gain at the chosen
|
|||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabularx}
|
\end{tabularx}
|
||||||
\end{table}
|
\end{table}
|
||||||
\section*{Conclusion}
|
|
||||||
The three proposed methods clearly have a lot in common as they all tend to make system more decoupled by pre and/or post multiplying by a constant matrix
|
|
||||||
However, the three methods also differs by a number of points which are summarized in Table \ref{tab:detail_control_decoupling_strategies_comp}.
|
|
||||||
|
|
||||||
Other decoupling strategies could be included in this study, such as:
|
|
||||||
\begin{itemize}
|
|
||||||
\item DC decoupling: pre-multiply the plant by \(G(0)^{-1}\)
|
|
||||||
\item full decoupling: pre-multiply the plant by \(G(s)^{-1}\)
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
Conclusion about NASS:
|
Conclusion about NASS:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Prefer to use Jacobian decoupling as we get more physical interpretation
|
\item Prefer to use Jacobian decoupling as we get more physical interpretation
|
||||||
\item Also, it is possible to take into account different specifications in the different DoF
|
\item Also, it is possible to take into account different specifications in the different DoF as the control is in a ``frame'' which corresponds to the specifications.
|
||||||
|
For active damping however, it may be reasonable to work in the modal space as different damping may be applied to different modes \cite{holterman05_activ_dampin_based_decoup_colloc_contr}.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
When possible, having a design providing the same CoK and CoM is good.
|
|
||||||
Often, it is not possible and we have to deal with that with control.
|
|
||||||
Idea about using CoK at low frequency and CoM at high frequency ?
|
|
||||||
Maybe with complementary filters?
|
|
||||||
\chapter{Closed-Loop Shaping using Complementary Filters}
|
\chapter{Closed-Loop Shaping using Complementary Filters}
|
||||||
\label{sec:detail_control_optimization}
|
\label{sec:detail_control_optimization}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user