Finish remaining all the figures

This commit is contained in:
Thomas Dehaeze 2025-04-05 22:48:58 +02:00
parent 836fedc307
commit 1801d467bd
54 changed files with 263 additions and 1009 deletions

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

View File

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 102 KiB

View File

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -1,116 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="181.452" height="65.971" viewBox="0 0 181.452 65.971">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 8.09375 -2.984375 C 8.09375 -3.203125 7.890625 -3.203125 7.71875 -3.203125 L 4.53125 -3.203125 L 4.53125 -6.390625 C 4.53125 -6.5625 4.53125 -6.765625 4.328125 -6.765625 C 4.109375 -6.765625 4.109375 -6.578125 4.109375 -6.390625 L 4.109375 -3.203125 L 0.921875 -3.203125 C 0.75 -3.203125 0.546875 -3.203125 0.546875 -3 C 0.546875 -2.78125 0.75 -2.78125 0.921875 -2.78125 L 4.109375 -2.78125 L 4.109375 0.390625 C 4.109375 0.5625 4.109375 0.765625 4.3125 0.765625 C 4.53125 0.765625 4.53125 0.578125 4.53125 0.390625 L 4.53125 -2.78125 L 7.71875 -2.78125 C 7.875 -2.78125 8.09375 -2.78125 8.09375 -2.984375 Z M 8.09375 -2.984375 "/>
</g>
<g id="glyph-1-0">
<path d="M 6.890625 -2.484375 C 6.890625 -2.6875 6.703125 -2.6875 6.5625 -2.6875 L 1.15625 -2.6875 C 1.015625 -2.6875 0.828125 -2.6875 0.828125 -2.484375 C 0.828125 -2.28125 1.015625 -2.28125 1.15625 -2.28125 L 6.5625 -2.28125 C 6.703125 -2.28125 6.890625 -2.28125 6.890625 -2.484375 Z M 6.890625 -2.484375 "/>
</g>
<g id="glyph-2-0">
<path d="M 6.390625 -2.453125 C 6.390625 -2.5 6.359375 -2.5625 6.265625 -2.5625 C 6.1875 -2.5625 6.171875 -2.515625 6.109375 -2.359375 C 5.765625 -1.4375 5.328125 -0.3125 3.609375 -0.3125 L 2.671875 -0.3125 C 2.53125 -0.3125 2.515625 -0.3125 2.453125 -0.3125 C 2.359375 -0.328125 2.328125 -0.34375 2.328125 -0.421875 C 2.328125 -0.453125 2.328125 -0.46875 2.375 -0.640625 L 3.71875 -6.015625 C 3.8125 -6.375 3.828125 -6.484375 4.765625 -6.484375 C 5.0625 -6.484375 5.140625 -6.484375 5.140625 -6.671875 C 5.140625 -6.78125 5.03125 -6.78125 4.984375 -6.78125 L 3.515625 -6.75 L 2.203125 -6.78125 C 2.125 -6.78125 2 -6.78125 2 -6.59375 C 2 -6.484375 2.09375 -6.484375 2.28125 -6.484375 C 2.28125 -6.484375 2.5 -6.484375 2.65625 -6.453125 C 2.84375 -6.4375 2.9375 -6.421875 2.9375 -6.296875 C 2.9375 -6.265625 2.921875 -6.234375 2.890625 -6.109375 L 1.5625 -0.78125 C 1.453125 -0.390625 1.4375 -0.3125 0.65625 -0.3125 C 0.484375 -0.3125 0.390625 -0.3125 0.390625 -0.109375 C 0.390625 0 0.484375 0 0.65625 0 L 5.25 0 C 5.5 0 5.5 0 5.5625 -0.171875 L 6.34375 -2.3125 C 6.390625 -2.421875 6.390625 -2.453125 6.390625 -2.453125 Z M 6.390625 -2.453125 "/>
</g>
<g id="glyph-2-1">
<path d="M 3.9375 -1.546875 C 3.9375 -1.890625 3.75 -2.140625 3.625 -2.265625 C 3.359375 -2.546875 3.078125 -2.59375 2.640625 -2.6875 C 2.28125 -2.765625 1.875 -2.828125 1.875 -3.28125 C 1.875 -3.5625 2.109375 -4.171875 2.984375 -4.171875 C 3.234375 -4.171875 3.734375 -4.109375 3.890625 -3.71875 C 3.609375 -3.703125 3.40625 -3.484375 3.40625 -3.265625 C 3.40625 -3.125 3.5 -2.984375 3.71875 -2.984375 C 3.9375 -2.984375 4.171875 -3.15625 4.171875 -3.53125 C 4.171875 -3.984375 3.75 -4.390625 2.984375 -4.390625 C 1.671875 -4.390625 1.3125 -3.375 1.3125 -2.9375 C 1.3125 -2.171875 2.046875 -2.015625 2.328125 -1.953125 C 2.859375 -1.859375 3.375 -1.75 3.375 -1.203125 C 3.375 -0.9375 3.140625 -0.109375 1.953125 -0.109375 C 1.8125 -0.109375 1.046875 -0.109375 0.8125 -0.640625 C 1.1875 -0.59375 1.4375 -0.890625 1.4375 -1.15625 C 1.4375 -1.390625 1.28125 -1.515625 1.078125 -1.515625 C 0.8125 -1.515625 0.515625 -1.296875 0.515625 -0.859375 C 0.515625 -0.28125 1.078125 0.109375 1.9375 0.109375 C 3.546875 0.109375 3.9375 -1.09375 3.9375 -1.546875 Z M 3.9375 -1.546875 "/>
</g>
<g id="glyph-2-2">
<path d="M 4.921875 -1.421875 C 4.921875 -1.515625 4.84375 -1.515625 4.8125 -1.515625 C 4.71875 -1.515625 4.703125 -1.484375 4.6875 -1.40625 C 4.359375 -0.34375 3.671875 -0.109375 3.359375 -0.109375 C 2.96875 -0.109375 2.8125 -0.421875 2.8125 -0.765625 C 2.8125 -0.984375 2.875 -1.203125 2.984375 -1.640625 L 3.3125 -3 C 3.375 -3.265625 3.609375 -4.171875 4.296875 -4.171875 C 4.359375 -4.171875 4.59375 -4.171875 4.796875 -4.046875 C 4.515625 -4 4.328125 -3.75 4.328125 -3.515625 C 4.328125 -3.34375 4.4375 -3.15625 4.703125 -3.15625 C 4.921875 -3.15625 5.234375 -3.34375 5.234375 -3.734375 C 5.234375 -4.25 4.65625 -4.390625 4.3125 -4.390625 C 3.734375 -4.390625 3.390625 -3.859375 3.265625 -3.640625 C 3.015625 -4.296875 2.484375 -4.390625 2.203125 -4.390625 C 1.15625 -4.390625 0.59375 -3.109375 0.59375 -2.859375 C 0.59375 -2.765625 0.71875 -2.765625 0.71875 -2.765625 C 0.796875 -2.765625 0.828125 -2.78125 0.84375 -2.875 C 1.1875 -3.921875 1.84375 -4.171875 2.171875 -4.171875 C 2.359375 -4.171875 2.71875 -4.078125 2.71875 -3.515625 C 2.71875 -3.203125 2.546875 -2.53125 2.171875 -1.140625 C 2.015625 -0.53125 1.671875 -0.109375 1.234375 -0.109375 C 1.171875 -0.109375 0.9375 -0.109375 0.734375 -0.234375 C 0.984375 -0.28125 1.203125 -0.5 1.203125 -0.78125 C 1.203125 -1.046875 0.984375 -1.125 0.828125 -1.125 C 0.53125 -1.125 0.28125 -0.859375 0.28125 -0.546875 C 0.28125 -0.09375 0.78125 0.109375 1.21875 0.109375 C 1.875 0.109375 2.234375 -0.59375 2.265625 -0.640625 C 2.390625 -0.28125 2.75 0.109375 3.34375 0.109375 C 4.359375 0.109375 4.921875 -1.171875 4.921875 -1.421875 Z M 4.921875 -1.421875 "/>
</g>
<g id="glyph-3-0">
<path d="M 3.296875 2.390625 C 3.296875 2.359375 3.296875 2.328125 3.125 2.171875 C 1.875 0.921875 1.5625 -0.96875 1.5625 -2.484375 C 1.5625 -4.21875 1.9375 -5.9375 3.15625 -7.1875 C 3.296875 -7.296875 3.296875 -7.328125 3.296875 -7.359375 C 3.296875 -7.421875 3.25 -7.453125 3.1875 -7.453125 C 3.09375 -7.453125 2.203125 -6.78125 1.609375 -5.515625 C 1.109375 -4.421875 0.984375 -3.3125 0.984375 -2.484375 C 0.984375 -1.703125 1.09375 -0.5 1.640625 0.609375 C 2.234375 1.84375 3.09375 2.484375 3.1875 2.484375 C 3.25 2.484375 3.296875 2.453125 3.296875 2.390625 Z M 3.296875 2.390625 "/>
</g>
<g id="glyph-3-1">
<path d="M 2.875 -2.484375 C 2.875 -3.265625 2.765625 -4.46875 2.21875 -5.578125 C 1.625 -6.8125 0.765625 -7.453125 0.671875 -7.453125 C 0.609375 -7.453125 0.5625 -7.40625 0.5625 -7.359375 C 0.5625 -7.328125 0.5625 -7.296875 0.75 -7.125 C 1.734375 -6.140625 2.296875 -4.5625 2.296875 -2.484375 C 2.296875 -0.78125 1.921875 0.96875 0.703125 2.21875 C 0.5625 2.328125 0.5625 2.359375 0.5625 2.390625 C 0.5625 2.4375 0.609375 2.484375 0.671875 2.484375 C 0.765625 2.484375 1.65625 1.8125 2.25 0.546875 C 2.75 -0.546875 2.875 -1.65625 2.875 -2.484375 Z M 2.875 -2.484375 "/>
</g>
<g id="glyph-3-2">
<path d="M 4 -5.265625 L 2.484375 -6.875 L 0.96875 -5.265625 L 1.109375 -5.125 L 2.484375 -6.203125 L 3.859375 -5.125 Z M 4 -5.265625 "/>
</g>
<g id="glyph-4-0">
<path d="M 3.515625 -1.265625 L 3.28125 -1.265625 C 3.25 -1.109375 3.1875 -0.703125 3.09375 -0.625 C 3.03125 -0.59375 2.5 -0.59375 2.40625 -0.59375 L 1.125 -0.59375 C 1.859375 -1.234375 2.09375 -1.4375 2.515625 -1.765625 C 3.03125 -2.171875 3.515625 -2.59375 3.515625 -3.265625 C 3.515625 -4.109375 2.78125 -4.609375 1.890625 -4.609375 C 1.015625 -4.609375 0.4375 -4.015625 0.4375 -3.375 C 0.4375 -3.015625 0.734375 -2.984375 0.8125 -2.984375 C 0.96875 -2.984375 1.171875 -3.09375 1.171875 -3.34375 C 1.171875 -3.484375 1.125 -3.71875 0.765625 -3.71875 C 0.984375 -4.21875 1.453125 -4.359375 1.78125 -4.359375 C 2.46875 -4.359375 2.84375 -3.828125 2.84375 -3.265625 C 2.84375 -2.65625 2.40625 -2.171875 2.1875 -1.921875 L 0.5 -0.265625 C 0.4375 -0.203125 0.4375 -0.1875 0.4375 0 L 3.296875 0 Z M 3.515625 -1.265625 "/>
</g>
<g id="glyph-4-1">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.5625 L 2.328125 -4.421875 C 2.328125 -4.609375 2.3125 -4.609375 2.125 -4.609375 C 1.671875 -4.171875 1.046875 -4.171875 0.765625 -4.171875 L 0.765625 -3.921875 C 0.921875 -3.921875 1.390625 -3.921875 1.765625 -4.109375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.078125 -0.25 L 0.8125 -0.25 L 0.8125 0 L 2.046875 -0.03125 Z M 3.28125 0 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 22 18 L 161 18 L 161 65.855469 L 22 65.855469 Z M 22 18 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 160 20 L 180.90625 20 L 180.90625 53 L 160 53 Z M 160 20 "/>
</clipPath>
<clipPath id="clip-2">
<path clip-rule="nonzero" d="M 132 0.0859375 L 134 0.0859375 L 134 26 L 132 26 Z M 132 0.0859375 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(89.99939%, 89.99939%, 89.99939%)" fill-opacity="1" d="M 23.296875 64.863281 L 160.4375 64.863281 L 160.4375 18.53125 L 23.296875 18.53125 Z M 23.296875 64.863281 "/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -12.950767 -28.656055 L 124.604034 -28.656055 L 124.604034 17.815903 L -12.950767 17.815903 Z M -12.950767 -28.656055 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.972503 0.000542422 C 6.972503 3.851983 3.84982 6.974666 -0.00162053 6.974666 C -3.853061 6.974666 -6.975745 3.851983 -6.975745 0.000542422 C -6.975745 -3.850898 -3.853061 -6.973582 -0.00162053 -6.973582 C 3.84982 -6.973582 6.972503 -3.850898 6.972503 0.000542422 Z M 6.972503 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="31.884706" y="39.200729"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="26.496977" y="51.027013"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 35.817167 -11.338286 L 61.660606 -11.338286 L 61.660606 11.339371 L 35.817167 11.339371 Z M 35.817167 -11.338286 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="75.2298" y="38.777009"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="81.989929" y="38.777009"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="85.852718" y="38.777009"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-1" x="90.509123" y="38.777009"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.453518 0.000542422 C 104.453518 3.851983 101.330834 6.974666 97.479394 6.974666 C 93.627953 6.974666 90.50527 3.851983 90.50527 0.000542422 C 90.50527 -3.850898 93.627953 -6.973582 97.479394 -6.973582 C 101.330834 -6.973582 104.453518 -3.850898 104.453518 0.000542422 Z M 104.453518 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="129.068203" y="39.200729"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -11.606876 0.000542422 L -35.318898 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.051892 0.000542422 L 1.608827 1.681385 L 3.085931 0.000542422 L 1.608827 -1.684218 Z M 6.051892 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 21.806174, 36.29351)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-2" x="5.43359" y="30.996507"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="4.797904" y="30.996507"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="10.479351" y="32.486009"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.972503 0.000542422 L 30.688443 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052612 0.000542422 L 1.609546 1.681385 L 3.08665 0.000542422 L 1.609546 -1.684218 Z M 6.052612 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 63.973425, 36.29351)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 62.158198 0.000542422 L 85.87022 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054737 0.000542422 L 1.607753 1.681385 L 3.088775 0.000542422 L 1.607753 -1.684218 Z M 6.054737 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 118.990838, 36.29351)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.453518 0.000542422 L 139.504368 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 178.496094 36.292969 L 174.066406 34.617188 L 175.539062 36.292969 L 174.066406 37.972656 Z M 178.496094 36.292969 "/>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.051807 0.000542422 L 1.608741 1.681385 L 3.085845 0.000542422 L 1.608741 -1.684218 Z M 6.051807 0.000542422 " transform="matrix(0.996989, 0, 0, -0.996989, 172.462509, 36.29351)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-2" x="171.057393" y="32.486009"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="170.421706" y="32.486009"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 118.625094 0.000542422 L 118.625094 -22.677115 L -0.00162053 -22.677115 L -0.00162053 -11.608631 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054055 0.00162053 L 1.607072 1.682463 L 3.088094 0.00162053 L 1.607072 -1.68314 Z M 6.054055 0.00162053 " transform="matrix(0, -0.996989, -0.996989, 0, 36.208647, 50.695983)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 156.464844 36.292969 C 156.464844 35.195312 155.574219 34.308594 154.476562 34.308594 C 153.378906 34.308594 152.492188 35.195312 152.492188 36.292969 C 152.492188 37.390625 153.378906 38.28125 154.476562 38.28125 C 155.574219 38.28125 156.464844 37.390625 156.464844 36.292969 Z M 156.464844 36.292969 "/>
<g clip-path="url(#clip-2)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 97.479394 11.605798 L 97.479394 35.321738 " transform="matrix(0.996989, 0, 0, -0.996989, 36.208647, 36.29351)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.05298 0.00123373 L 1.609915 1.682076 L 3.087019 0.00123373 L 1.609915 -1.683527 Z M 6.05298 0.00123373 " transform="matrix(0, 0.996989, 0.996989, 0, 133.393301, 21.891026)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-2" x="137.83074" y="11.728697"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="137.195053" y="11.728697"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-1" x="142.876501" y="13.219196"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,295 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="273.547" height="89.455" viewBox="0 0 273.547 89.455">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 4.4375 -3.171875 L 4.4375 -3.390625 C 4.21875 -3.375 4 -3.359375 3.78125 -3.359375 C 3.640625 -3.359375 3.3125 -3.375 3.109375 -3.390625 L 3.109375 -3.171875 C 3.671875 -3.171875 3.671875 -2.96875 3.671875 -2.828125 L 3.671875 -0.78125 L 1.53125 -3.328125 C 1.484375 -3.390625 1.46875 -3.390625 1.375 -3.390625 L 0.40625 -3.390625 L 0.40625 -3.171875 L 0.609375 -3.171875 C 0.65625 -3.171875 0.890625 -3.15625 0.9375 -3.140625 C 0.953125 -3.140625 0.953125 -3.125 0.953125 -3.046875 L 0.953125 -0.546875 C 0.953125 -0.421875 0.953125 -0.21875 0.40625 -0.21875 L 0.40625 0 C 0.640625 -0.015625 0.859375 -0.015625 1.078125 -0.015625 C 1.21875 -0.015625 1.53125 -0.015625 1.734375 0 L 1.734375 -0.21875 C 1.1875 -0.21875 1.1875 -0.421875 1.1875 -0.546875 L 1.1875 -3 L 3.65625 -0.0625 C 3.703125 0 3.71875 0 3.78125 0 C 3.890625 0 3.890625 -0.046875 3.890625 -0.15625 L 3.890625 -2.828125 C 3.890625 -2.96875 3.890625 -3.171875 4.4375 -3.171875 Z M 4.4375 -3.171875 "/>
</g>
<g id="glyph-0-1">
<path d="M 3.046875 -1.0625 C 3.046875 -1.671875 2.46875 -2.21875 1.6875 -2.21875 C 0.90625 -2.21875 0.328125 -1.671875 0.328125 -1.0625 C 0.328125 -0.453125 0.90625 0.046875 1.6875 0.046875 C 2.46875 0.046875 3.046875 -0.453125 3.046875 -1.0625 Z M 2.546875 -1.109375 C 2.546875 -0.859375 2.546875 -0.125 1.6875 -0.125 C 0.8125 -0.125 0.8125 -0.859375 0.8125 -1.109375 C 0.8125 -1.328125 0.8125 -2.0625 1.6875 -2.0625 C 2.546875 -2.0625 2.546875 -1.328125 2.546875 -1.109375 Z M 2.546875 -1.109375 "/>
</g>
<g id="glyph-0-2">
<path d="M 2.375 -1.84375 C 2.375 -2.03125 2.1875 -2.1875 1.9375 -2.1875 C 1.6875 -2.1875 1.359375 -2.0625 1.171875 -1.640625 L 1.171875 -2.1875 L 0.375 -2.140625 L 0.375 -1.921875 C 0.75 -1.921875 0.78125 -1.875 0.78125 -1.640625 L 0.78125 -0.421875 C 0.78125 -0.265625 0.78125 -0.21875 0.46875 -0.21875 L 0.375 -0.21875 L 0.375 0 C 0.578125 -0.015625 0.8125 -0.015625 1.015625 -0.015625 L 1.71875 0 L 1.71875 -0.21875 L 1.59375 -0.21875 C 1.203125 -0.21875 1.203125 -0.265625 1.203125 -0.421875 L 1.203125 -1.109375 C 1.203125 -1.5625 1.46875 -2.015625 1.9375 -2.03125 C 1.9375 -2.03125 1.875 -1.953125 1.875 -1.84375 C 1.875 -1.671875 2.015625 -1.59375 2.125 -1.59375 C 2.25 -1.59375 2.375 -1.671875 2.375 -1.84375 Z M 2.375 -1.84375 "/>
</g>
<g id="glyph-0-3">
<path d="M 5.109375 0 L 5.109375 -0.21875 L 5.015625 -0.21875 C 4.703125 -0.21875 4.703125 -0.265625 4.703125 -0.421875 L 4.703125 -1.5 C 4.703125 -2.109375 4.234375 -2.1875 3.859375 -2.1875 C 3.375 -2.1875 3.09375 -1.953125 2.953125 -1.734375 C 2.828125 -2.1875 2.328125 -2.1875 2.140625 -2.1875 C 1.625 -2.1875 1.34375 -1.921875 1.21875 -1.703125 L 1.21875 -2.1875 L 0.40625 -2.140625 L 0.40625 -1.921875 C 0.765625 -1.921875 0.8125 -1.875 0.8125 -1.640625 L 0.8125 -0.421875 C 0.8125 -0.265625 0.8125 -0.21875 0.5 -0.21875 L 0.40625 -0.21875 L 0.40625 0 C 0.625 -0.015625 0.828125 -0.015625 1.046875 -0.015625 C 1.25 -0.015625 1.46875 -0.015625 1.671875 0 L 1.671875 -0.21875 L 1.578125 -0.21875 C 1.265625 -0.21875 1.265625 -0.265625 1.265625 -0.421875 L 1.265625 -1.28125 C 1.265625 -1.828125 1.765625 -2.03125 2.078125 -2.03125 C 2.453125 -2.03125 2.53125 -1.828125 2.53125 -1.5 L 2.53125 -0.421875 C 2.53125 -0.265625 2.53125 -0.21875 2.21875 -0.21875 L 2.125 -0.21875 L 2.125 0 C 2.34375 -0.015625 2.546875 -0.015625 2.765625 -0.015625 C 2.96875 -0.015625 3.1875 -0.015625 3.390625 0 L 3.390625 -0.21875 L 3.296875 -0.21875 C 2.984375 -0.21875 2.984375 -0.265625 2.984375 -0.421875 L 2.984375 -1.28125 C 2.984375 -1.828125 3.484375 -2.03125 3.796875 -2.03125 C 4.171875 -2.03125 4.25 -1.828125 4.25 -1.5 L 4.25 -0.421875 C 4.25 -0.265625 4.25 -0.21875 3.9375 -0.21875 L 3.84375 -0.21875 L 3.84375 0 C 4.0625 -0.015625 4.265625 -0.015625 4.484375 -0.015625 C 4.6875 -0.015625 4.90625 -0.015625 5.109375 0 Z M 5.109375 0 "/>
</g>
<g id="glyph-0-4">
<path d="M 3.140625 -0.453125 L 3.140625 -0.71875 L 2.9375 -0.71875 L 2.9375 -0.453125 C 2.9375 -0.40625 2.9375 -0.1875 2.734375 -0.1875 C 2.546875 -0.1875 2.546875 -0.40625 2.546875 -0.453125 L 2.546875 -1.46875 C 2.546875 -1.953125 2.046875 -2.21875 1.421875 -2.21875 C 1.125 -2.21875 0.546875 -2.203125 0.546875 -1.78125 C 0.546875 -1.59375 0.6875 -1.515625 0.8125 -1.515625 C 0.953125 -1.515625 1.078125 -1.609375 1.078125 -1.78125 C 1.078125 -1.890625 1 -1.96875 0.953125 -2 C 1.125 -2.0625 1.359375 -2.0625 1.421875 -2.0625 C 1.84375 -2.0625 2.09375 -1.828125 2.09375 -1.46875 L 2.09375 -1.34375 C 1.625 -1.3125 1.359375 -1.296875 0.96875 -1.15625 C 0.640625 -1.046875 0.359375 -0.84375 0.359375 -0.515625 C 0.359375 -0.046875 0.9375 0.046875 1.328125 0.046875 C 1.703125 0.046875 2 -0.09375 2.15625 -0.359375 C 2.171875 -0.171875 2.296875 0.03125 2.546875 0.03125 C 2.578125 0.03125 3.140625 0.03125 3.140625 -0.453125 Z M 2.09375 -0.703125 C 2.09375 -0.15625 1.5 -0.109375 1.375 -0.109375 C 1.09375 -0.109375 0.8125 -0.265625 0.8125 -0.515625 C 0.8125 -0.6875 0.921875 -1.140625 2.09375 -1.1875 Z M 2.09375 -0.703125 "/>
</g>
<g id="glyph-0-5">
<path d="M 1.65625 0 L 1.65625 -0.21875 L 1.5625 -0.21875 C 1.25 -0.21875 1.25 -0.265625 1.25 -0.421875 L 1.25 -3.4375 L 0.40625 -3.390625 L 0.40625 -3.171875 C 0.78125 -3.171875 0.828125 -3.125 0.828125 -2.890625 L 0.828125 -0.421875 C 0.828125 -0.265625 0.828125 -0.21875 0.5 -0.21875 L 0.40625 -0.21875 L 0.40625 0 C 0.625 -0.015625 0.828125 -0.015625 1.03125 -0.015625 C 1.234375 -0.015625 1.453125 -0.015625 1.65625 0 Z M 1.65625 0 "/>
</g>
<g id="glyph-0-6">
<path d="M 1.609375 0 L 1.609375 -0.21875 C 1.28125 -0.21875 1.25 -0.21875 1.25 -0.421875 L 1.25 -2.1875 L 0.4375 -2.140625 L 0.4375 -1.921875 C 0.78125 -1.921875 0.828125 -1.875 0.828125 -1.640625 L 0.828125 -0.421875 C 0.828125 -0.265625 0.828125 -0.21875 0.5 -0.21875 L 0.40625 -0.21875 L 0.40625 0 C 0.609375 -0.015625 0.828125 -0.015625 1.03125 -0.015625 C 1.21875 -0.015625 1.4375 -0.015625 1.609375 0 Z M 1.296875 -2.96875 C 1.296875 -3.140625 1.15625 -3.28125 1 -3.28125 C 0.828125 -3.28125 0.6875 -3.140625 0.6875 -2.96875 C 0.6875 -2.796875 0.828125 -2.671875 1 -2.671875 C 1.15625 -2.671875 1.296875 -2.796875 1.296875 -2.96875 Z M 1.296875 -2.96875 "/>
</g>
<g id="glyph-0-7">
<path d="M 2.625 -0.984375 L 2.421875 -0.984375 C 2.359375 -0.421875 2.265625 -0.171875 1.5625 -0.171875 L 0.90625 -0.171875 L 2.546875 -1.9375 C 2.59375 -1.984375 2.609375 -2 2.609375 -2.046875 C 2.609375 -2.140625 2.546875 -2.140625 2.453125 -2.140625 L 0.453125 -2.140625 L 0.390625 -1.28125 L 0.609375 -1.28125 C 0.640625 -1.828125 0.796875 -1.96875 1.375 -1.96875 L 2.015625 -1.96875 L 0.359375 -0.203125 C 0.3125 -0.15625 0.3125 -0.15625 0.3125 -0.09375 C 0.3125 0 0.375 0 0.453125 0 L 2.53125 0 Z M 2.625 -0.984375 "/>
</g>
<g id="glyph-0-8">
<path d="M 2.703125 -0.59375 C 2.703125 -0.671875 2.625 -0.671875 2.609375 -0.671875 C 2.53125 -0.671875 2.515625 -0.65625 2.484375 -0.578125 C 2.359375 -0.25 1.984375 -0.125 1.703125 -0.125 C 1.3125 -0.125 1.078125 -0.34375 1.015625 -0.4375 C 0.8125 -0.671875 0.8125 -0.984375 0.8125 -1.109375 L 2.5625 -1.109375 C 2.671875 -1.109375 2.703125 -1.109375 2.703125 -1.234375 C 2.703125 -1.5625 2.53125 -2.21875 1.609375 -2.21875 C 0.859375 -2.21875 0.328125 -1.671875 0.328125 -1.09375 C 0.328125 -0.453125 0.921875 0.046875 1.671875 0.046875 C 2.46875 0.046875 2.703125 -0.5 2.703125 -0.59375 Z M 2.328125 -1.265625 L 0.828125 -1.265625 C 0.890625 -1.921875 1.359375 -2.0625 1.59375 -2.0625 C 2.28125 -2.0625 2.328125 -1.40625 2.328125 -1.265625 Z M 2.328125 -1.265625 "/>
</g>
<g id="glyph-0-9">
<path d="M 3.328125 0 L 3.328125 -0.21875 C 2.96875 -0.21875 2.921875 -0.25 2.921875 -0.5 L 2.921875 -3.4375 L 2.09375 -3.390625 L 2.09375 -3.171875 C 2.453125 -3.171875 2.5 -3.125 2.5 -2.890625 L 2.5 -1.921875 C 2.390625 -2.015625 2.125 -2.1875 1.71875 -2.1875 C 0.96875 -2.1875 0.359375 -1.6875 0.359375 -1.0625 C 0.359375 -0.46875 0.921875 0.046875 1.65625 0.046875 C 2.0625 0.046875 2.34375 -0.125 2.484375 -0.25 L 2.484375 0.046875 Z M 2.484375 -0.546875 C 2.25 -0.171875 1.875 -0.109375 1.6875 -0.109375 C 1.4375 -0.109375 1.1875 -0.203125 1.03125 -0.421875 C 0.859375 -0.625 0.859375 -0.90625 0.859375 -1.0625 C 0.859375 -1.203125 0.859375 -1.53125 1.078125 -1.75 C 1.25 -1.9375 1.5 -2.03125 1.75 -2.03125 C 1.890625 -2.03125 2.25 -2 2.484375 -1.65625 Z M 2.484375 -0.546875 "/>
</g>
<g id="glyph-0-10">
<path d="M 2.375 -0.625 C 2.375 -0.84375 2.25 -1.015625 2.0625 -1.125 C 1.859375 -1.25 1.703125 -1.265625 1.296875 -1.34375 C 0.96875 -1.390625 0.59375 -1.453125 0.59375 -1.703125 C 0.59375 -1.875 0.78125 -2.078125 1.328125 -2.078125 C 1.734375 -2.078125 1.96875 -1.90625 2 -1.5625 C 2.015625 -1.484375 2.015625 -1.46875 2.109375 -1.46875 C 2.21875 -1.46875 2.21875 -1.5 2.21875 -1.59375 L 2.21875 -2.078125 C 2.21875 -2.171875 2.21875 -2.21875 2.140625 -2.21875 C 2.109375 -2.21875 2.09375 -2.21875 2.046875 -2.1875 C 2.03125 -2.171875 1.9375 -2.078125 1.921875 -2.078125 C 1.921875 -2.078125 1.90625 -2.078125 1.875 -2.109375 C 1.765625 -2.171875 1.578125 -2.21875 1.328125 -2.21875 C 0.515625 -2.21875 0.34375 -1.84375 0.34375 -1.609375 C 0.34375 -1.15625 0.921875 -1.0625 1.375 -0.984375 C 1.671875 -0.953125 2.125 -0.875 2.125 -0.546875 C 2.125 -0.359375 1.96875 -0.109375 1.375 -0.109375 C 1.046875 -0.109375 0.71875 -0.234375 0.5625 -0.765625 C 0.546875 -0.84375 0.53125 -0.859375 0.453125 -0.859375 C 0.34375 -0.859375 0.34375 -0.828125 0.34375 -0.71875 L 0.34375 -0.078125 C 0.34375 0 0.34375 0.046875 0.421875 0.046875 C 0.46875 0.046875 0.46875 0.046875 0.5625 -0.046875 L 0.6875 -0.171875 C 0.9375 0.046875 1.25 0.046875 1.375 0.046875 C 2.203125 0.046875 2.375 -0.375 2.375 -0.625 Z M 2.375 -0.625 "/>
</g>
<g id="glyph-0-11">
<path d="M 3.390625 0 L 3.390625 -0.21875 L 3.296875 -0.21875 C 2.96875 -0.21875 2.96875 -0.265625 2.96875 -0.421875 L 2.96875 -1.5 C 2.96875 -2.046875 2.59375 -2.1875 2.140625 -2.1875 C 1.609375 -2.1875 1.328125 -1.890625 1.21875 -1.703125 L 1.21875 -2.1875 L 0.40625 -2.140625 L 0.40625 -1.921875 C 0.765625 -1.921875 0.8125 -1.875 0.8125 -1.640625 L 0.8125 -0.421875 C 0.8125 -0.265625 0.8125 -0.21875 0.5 -0.21875 L 0.40625 -0.21875 L 0.40625 0 C 0.625 -0.015625 0.828125 -0.015625 1.046875 -0.015625 C 1.25 -0.015625 1.46875 -0.015625 1.671875 0 L 1.671875 -0.21875 L 1.578125 -0.21875 C 1.265625 -0.21875 1.265625 -0.265625 1.265625 -0.421875 L 1.265625 -1.28125 C 1.265625 -1.84375 1.765625 -2.03125 2.078125 -2.03125 C 2.453125 -2.03125 2.53125 -1.8125 2.53125 -1.5 L 2.53125 -0.421875 C 2.53125 -0.265625 2.53125 -0.21875 2.203125 -0.21875 L 2.125 -0.21875 L 2.125 0 C 2.328125 -0.015625 2.546875 -0.015625 2.75 -0.015625 C 2.96875 -0.015625 3.171875 -0.015625 3.390625 0 Z M 3.390625 0 "/>
</g>
<g id="glyph-0-12">
<path d="M 1.21875 -3.28125 C 1.234375 -3.390625 1.125 -3.484375 1 -3.484375 C 0.875 -3.484375 0.765625 -3.390625 0.78125 -3.28125 L 0.890625 -2.09375 L 1.09375 -2.09375 Z M 1.859375 -3.28125 C 1.875 -3.390625 1.765625 -3.484375 1.640625 -3.484375 C 1.515625 -3.484375 1.40625 -3.390625 1.421875 -3.28125 L 1.53125 -2.09375 L 1.75 -2.09375 Z M 1.859375 -3.28125 "/>
</g>
<g id="glyph-0-13">
<path d="M 4.265625 -1.15625 C 4.265625 -1.234375 4.234375 -1.265625 4.15625 -1.265625 C 4.09375 -1.265625 4.0625 -1.265625 4.046875 -1.171875 C 4.015625 -0.421875 3.296875 -0.109375 2.71875 -0.109375 C 2.015625 -0.109375 1.0625 -0.5 1.0625 -1.6875 C 1.0625 -2.875 1.984375 -3.28125 2.703125 -3.28125 C 3.15625 -3.28125 3.890625 -3.03125 4.046875 -2.109375 C 4.046875 -2.0625 4.109375 -2.0625 4.15625 -2.0625 C 4.265625 -2.0625 4.265625 -2.09375 4.265625 -2.1875 L 4.265625 -3.359375 C 4.265625 -3.4375 4.265625 -3.484375 4.1875 -3.484375 C 4.125 -3.484375 4.109375 -3.46875 4.09375 -3.4375 L 3.796875 -3.046875 C 3.484375 -3.3125 3.109375 -3.484375 2.625 -3.484375 C 1.421875 -3.484375 0.484375 -2.671875 0.484375 -1.6875 C 0.484375 -0.71875 1.421875 0.109375 2.625 0.109375 C 3.578125 0.109375 4.265625 -0.5 4.265625 -1.15625 Z M 4.265625 -1.15625 "/>
</g>
<g id="glyph-0-14">
<path d="M 1.859375 -0.875 L 1.859375 -1.265625 L 0.203125 -1.265625 L 0.203125 -0.875 Z M 1.859375 -0.875 "/>
</g>
<g id="glyph-0-15">
<path d="M 3.71875 -1.34375 L 3.5 -1.34375 C 3.4375 -0.765625 3.296875 -0.21875 2.34375 -0.21875 L 1.734375 -0.21875 C 1.484375 -0.21875 1.484375 -0.25 1.484375 -0.40625 L 1.484375 -2.953125 C 1.484375 -3.109375 1.484375 -3.171875 1.96875 -3.171875 L 2.171875 -3.171875 L 2.171875 -3.390625 C 1.890625 -3.359375 1.53125 -3.359375 1.25 -3.359375 L 0.40625 -3.390625 L 0.40625 -3.171875 L 0.5625 -3.171875 C 0.953125 -3.171875 0.953125 -3.109375 0.953125 -2.96875 L 0.953125 -0.421875 C 0.953125 -0.265625 0.953125 -0.21875 0.5625 -0.21875 L 0.40625 -0.21875 L 0.40625 0 L 3.546875 0 Z M 3.71875 -1.34375 "/>
</g>
<g id="glyph-0-16">
<path d="M 3.359375 -1.0625 C 3.359375 -1.671875 2.8125 -2.1875 2.078125 -2.1875 C 1.6875 -2.1875 1.375 -2.046875 1.203125 -1.90625 L 1.203125 -2.1875 L 0.375 -2.140625 L 0.375 -1.921875 C 0.734375 -1.921875 0.78125 -1.921875 0.78125 -1.703125 L 0.78125 0.546875 C 0.78125 0.703125 0.78125 0.75 0.46875 0.75 L 0.375 0.75 L 0.375 0.953125 C 0.59375 0.953125 0.796875 0.9375 1.015625 0.9375 C 1.21875 0.9375 1.4375 0.953125 1.640625 0.953125 L 1.640625 0.75 L 1.546875 0.75 C 1.234375 0.75 1.234375 0.703125 1.234375 0.546875 L 1.234375 -0.234375 C 1.4375 -0.046875 1.703125 0.046875 1.984375 0.046875 C 2.75 0.046875 3.359375 -0.453125 3.359375 -1.0625 Z M 2.859375 -1.0625 C 2.859375 -0.53125 2.453125 -0.109375 1.953125 -0.109375 C 1.734375 -0.109375 1.46875 -0.203125 1.296875 -0.421875 C 1.234375 -0.515625 1.234375 -0.515625 1.234375 -0.609375 L 1.234375 -1.640625 C 1.4375 -1.953125 1.8125 -2.015625 2.015625 -2.015625 C 2.5 -2.015625 2.859375 -1.5625 2.859375 -1.0625 Z M 2.859375 -1.0625 "/>
</g>
<g id="glyph-0-17">
<path d="M 2.703125 -0.59375 C 2.703125 -0.65625 2.640625 -0.65625 2.609375 -0.65625 C 2.53125 -0.65625 2.515625 -0.65625 2.5 -0.59375 C 2.328125 -0.171875 1.96875 -0.125 1.75 -0.125 C 1.328125 -0.125 0.859375 -0.40625 0.859375 -1.078125 C 0.859375 -1.296875 0.890625 -1.5625 1.078125 -1.765625 C 1.3125 -2.046875 1.609375 -2.046875 1.765625 -2.046875 C 1.90625 -2.046875 2.046875 -2.046875 2.21875 -2 C 2.15625 -1.953125 2.109375 -1.875 2.109375 -1.78125 C 2.109375 -1.609375 2.234375 -1.515625 2.375 -1.515625 C 2.5 -1.515625 2.640625 -1.59375 2.640625 -1.78125 C 2.640625 -2.203125 2.09375 -2.21875 1.75 -2.21875 C 0.765625 -2.21875 0.359375 -1.5625 0.359375 -1.0625 C 0.359375 -0.453125 0.9375 0.046875 1.6875 0.046875 C 2.546875 0.046875 2.703125 -0.546875 2.703125 -0.59375 Z M 2.703125 -0.59375 "/>
</g>
<g id="glyph-0-18">
<path d="M 2.203125 -0.625 L 2.203125 -0.890625 L 1.984375 -0.890625 L 1.984375 -0.640625 C 1.984375 -0.265625 1.765625 -0.125 1.59375 -0.125 C 1.21875 -0.125 1.21875 -0.515625 1.21875 -0.625 L 1.21875 -1.921875 L 2.09375 -1.921875 L 2.09375 -2.140625 L 1.21875 -2.140625 L 1.21875 -3.046875 L 1.015625 -3.046875 C 1 -2.578125 0.765625 -2.09375 0.25 -2.078125 L 0.25 -1.921875 L 0.78125 -1.921875 L 0.78125 -0.625 C 0.78125 -0.0625 1.25 0.046875 1.546875 0.046875 C 1.921875 0.046875 2.203125 -0.21875 2.203125 -0.625 Z M 2.203125 -0.625 "/>
</g>
<g id="glyph-0-19">
<path d="M 3.265625 -1.921875 L 3.265625 -2.140625 C 3.15625 -2.125 3.015625 -2.109375 2.828125 -2.109375 C 2.671875 -2.109375 2.484375 -2.125 2.328125 -2.140625 L 2.328125 -1.921875 C 2.453125 -1.921875 2.53125 -1.84375 2.53125 -1.75 C 2.53125 -1.703125 2.515625 -1.671875 2.5 -1.640625 L 1.890625 -0.453125 L 1.21875 -1.734375 C 1.1875 -1.78125 1.1875 -1.796875 1.1875 -1.8125 C 1.1875 -1.90625 1.328125 -1.921875 1.453125 -1.921875 L 1.453125 -2.140625 C 1.25 -2.125 1.046875 -2.109375 0.828125 -2.109375 C 0.625 -2.109375 0.5 -2.109375 0.28125 -2.140625 L 0.28125 -1.921875 C 0.625 -1.921875 0.65625 -1.890625 0.734375 -1.765625 L 1.65625 0 C 1.4375 0.4375 1.234375 0.859375 0.828125 0.859375 C 0.703125 0.859375 0.65625 0.828125 0.609375 0.796875 C 0.640625 0.78125 0.75 0.71875 0.75 0.578125 C 0.75 0.421875 0.625 0.328125 0.5 0.328125 C 0.390625 0.328125 0.25 0.40625 0.25 0.578125 C 0.25 0.828125 0.515625 1.015625 0.828125 1.015625 C 1.125 1.015625 1.453125 0.828125 1.671875 0.40625 L 2.734375 -1.609375 C 2.78125 -1.71875 2.890625 -1.90625 3.265625 -1.921875 Z M 3.265625 -1.921875 "/>
</g>
<g id="glyph-0-20">
<path d="M 3.78125 0 L 3.78125 -0.21875 C 3.453125 -0.21875 3.40625 -0.21875 3.40625 -0.421875 L 3.40625 -2.1875 L 2.59375 -2.140625 L 1.234375 -2.140625 L 1.234375 -2.671875 C 1.234375 -3.140625 1.890625 -3.328125 2.25 -3.328125 C 2.28125 -3.328125 2.734375 -3.328125 2.890625 -3.25 C 2.84375 -3.203125 2.8125 -3.125 2.8125 -3.046875 C 2.8125 -2.875 2.96875 -2.75 3.125 -2.75 C 3.28125 -2.75 3.421875 -2.890625 3.421875 -3.046875 C 3.421875 -3.15625 3.390625 -3.25 3.3125 -3.296875 C 3 -3.484375 2.53125 -3.484375 2.265625 -3.484375 C 1.65625 -3.484375 0.828125 -3.21875 0.828125 -2.671875 L 0.828125 -2.140625 L 0.34375 -2.140625 L 0.34375 -1.921875 L 0.828125 -1.921875 L 0.828125 -0.421875 C 0.828125 -0.265625 0.828125 -0.21875 0.5 -0.21875 L 0.421875 -0.21875 L 0.421875 0 C 0.625 -0.015625 0.84375 -0.015625 1.0625 -0.015625 L 1.765625 0 L 1.765625 -0.21875 L 1.625 -0.21875 C 1.25 -0.21875 1.25 -0.265625 1.25 -0.421875 L 1.25 -1.921875 L 2.59375 -1.921875 C 2.953125 -1.921875 2.984375 -1.875 2.984375 -1.640625 L 2.984375 -0.421875 C 2.984375 -0.265625 2.984375 -0.21875 2.671875 -0.21875 L 2.578125 -0.21875 L 2.578125 0 C 2.78125 -0.015625 2.984375 -0.015625 3.1875 -0.015625 C 3.390625 -0.015625 3.59375 -0.015625 3.78125 0 Z M 3.78125 0 "/>
</g>
<g id="glyph-1-0">
<path d="M 8.0625 -2.984375 C 8.0625 -3.203125 7.875 -3.203125 7.6875 -3.203125 L 4.515625 -3.203125 L 4.515625 -6.375 C 4.515625 -6.546875 4.515625 -6.75 4.3125 -6.75 C 4.09375 -6.75 4.09375 -6.5625 4.09375 -6.375 L 4.09375 -3.203125 L 0.921875 -3.203125 C 0.75 -3.203125 0.546875 -3.203125 0.546875 -3 C 0.546875 -2.78125 0.75 -2.78125 0.921875 -2.78125 L 4.09375 -2.78125 L 4.09375 0.390625 C 4.09375 0.5625 4.09375 0.765625 4.296875 0.765625 C 4.515625 0.765625 4.515625 0.578125 4.515625 0.390625 L 4.515625 -2.78125 L 7.6875 -2.78125 C 7.859375 -2.78125 8.0625 -2.78125 8.0625 -2.984375 Z M 8.0625 -2.984375 "/>
</g>
<g id="glyph-2-0">
<path d="M 6.875 -2.484375 C 6.875 -2.671875 6.6875 -2.671875 6.546875 -2.671875 L 1.15625 -2.671875 C 1.015625 -2.671875 0.828125 -2.671875 0.828125 -2.484375 C 0.828125 -2.28125 1.015625 -2.28125 1.15625 -2.28125 L 6.546875 -2.28125 C 6.6875 -2.28125 6.875 -2.28125 6.875 -2.484375 Z M 6.875 -2.484375 "/>
</g>
<g id="glyph-3-0">
<path d="M 6.375 -2.453125 C 6.375 -2.484375 6.34375 -2.5625 6.25 -2.5625 C 6.15625 -2.5625 6.15625 -2.5 6.078125 -2.34375 C 5.75 -1.4375 5.3125 -0.3125 3.59375 -0.3125 L 2.671875 -0.3125 C 2.53125 -0.3125 2.5 -0.3125 2.453125 -0.3125 C 2.34375 -0.328125 2.3125 -0.34375 2.3125 -0.421875 C 2.3125 -0.453125 2.3125 -0.46875 2.375 -0.640625 L 3.703125 -6 C 3.796875 -6.34375 3.828125 -6.453125 4.75 -6.453125 C 5.046875 -6.453125 5.125 -6.453125 5.125 -6.640625 C 5.125 -6.765625 5.015625 -6.765625 4.96875 -6.765625 L 3.5 -6.734375 L 2.1875 -6.765625 C 2.125 -6.765625 2 -6.765625 2 -6.5625 C 2 -6.453125 2.09375 -6.453125 2.28125 -6.453125 C 2.28125 -6.453125 2.484375 -6.453125 2.65625 -6.4375 C 2.828125 -6.421875 2.921875 -6.40625 2.921875 -6.28125 C 2.921875 -6.234375 2.90625 -6.21875 2.875 -6.09375 L 1.5625 -0.765625 C 1.453125 -0.390625 1.4375 -0.3125 0.65625 -0.3125 C 0.484375 -0.3125 0.390625 -0.3125 0.390625 -0.109375 C 0.390625 0 0.46875 0 0.65625 0 L 5.234375 0 C 5.484375 0 5.484375 0 5.546875 -0.171875 L 6.328125 -2.3125 C 6.375 -2.421875 6.375 -2.453125 6.375 -2.453125 Z M 6.375 -2.453125 "/>
</g>
<g id="glyph-3-1">
<path d="M 3.921875 -1.53125 C 3.921875 -1.890625 3.734375 -2.140625 3.609375 -2.265625 C 3.34375 -2.53125 3.0625 -2.578125 2.625 -2.671875 C 2.265625 -2.75 1.875 -2.828125 1.875 -3.265625 C 1.875 -3.5625 2.109375 -4.15625 2.984375 -4.15625 C 3.234375 -4.15625 3.71875 -4.09375 3.875 -3.703125 C 3.59375 -3.6875 3.390625 -3.484375 3.390625 -3.265625 C 3.390625 -3.125 3.484375 -2.96875 3.703125 -2.96875 C 3.921875 -2.96875 4.15625 -3.140625 4.15625 -3.53125 C 4.15625 -3.96875 3.734375 -4.375 2.984375 -4.375 C 1.671875 -4.375 1.3125 -3.375 1.3125 -2.9375 C 1.3125 -2.15625 2.046875 -2.015625 2.328125 -1.953125 C 2.84375 -1.859375 3.359375 -1.75 3.359375 -1.203125 C 3.359375 -0.9375 3.125 -0.109375 1.9375 -0.109375 C 1.796875 -0.109375 1.046875 -0.109375 0.8125 -0.640625 C 1.1875 -0.578125 1.4375 -0.875 1.4375 -1.15625 C 1.4375 -1.390625 1.28125 -1.5 1.0625 -1.5 C 0.8125 -1.5 0.515625 -1.296875 0.515625 -0.859375 C 0.515625 -0.28125 1.078125 0.109375 1.9375 0.109375 C 3.53125 0.109375 3.921875 -1.09375 3.921875 -1.53125 Z M 3.921875 -1.53125 "/>
</g>
<g id="glyph-3-2">
<path d="M 4.90625 -1.421875 C 4.90625 -1.515625 4.828125 -1.515625 4.796875 -1.515625 C 4.703125 -1.515625 4.6875 -1.46875 4.671875 -1.40625 C 4.34375 -0.34375 3.671875 -0.109375 3.34375 -0.109375 C 2.96875 -0.109375 2.796875 -0.421875 2.796875 -0.765625 C 2.796875 -0.984375 2.859375 -1.203125 2.96875 -1.640625 L 3.3125 -2.984375 C 3.375 -3.25 3.59375 -4.15625 4.296875 -4.15625 C 4.34375 -4.15625 4.578125 -4.15625 4.78125 -4.03125 C 4.5 -3.984375 4.3125 -3.734375 4.3125 -3.5 C 4.3125 -3.34375 4.421875 -3.15625 4.6875 -3.15625 C 4.90625 -3.15625 5.21875 -3.328125 5.21875 -3.71875 C 5.21875 -4.234375 4.640625 -4.375 4.296875 -4.375 C 3.71875 -4.375 3.375 -3.859375 3.265625 -3.625 C 3.015625 -4.28125 2.484375 -4.375 2.1875 -4.375 C 1.15625 -4.375 0.59375 -3.09375 0.59375 -2.859375 C 0.59375 -2.75 0.71875 -2.75 0.71875 -2.75 C 0.796875 -2.75 0.828125 -2.78125 0.84375 -2.859375 C 1.171875 -3.90625 1.828125 -4.15625 2.171875 -4.15625 C 2.359375 -4.15625 2.703125 -4.078125 2.703125 -3.5 C 2.703125 -3.1875 2.53125 -2.53125 2.171875 -1.140625 C 2.015625 -0.53125 1.671875 -0.109375 1.234375 -0.109375 C 1.171875 -0.109375 0.9375 -0.109375 0.734375 -0.234375 C 0.984375 -0.28125 1.203125 -0.5 1.203125 -0.765625 C 1.203125 -1.046875 0.984375 -1.125 0.828125 -1.125 C 0.53125 -1.125 0.28125 -0.859375 0.28125 -0.546875 C 0.28125 -0.09375 0.78125 0.109375 1.21875 0.109375 C 1.875 0.109375 2.234375 -0.578125 2.265625 -0.640625 C 2.375 -0.28125 2.734375 0.109375 3.328125 0.109375 C 4.34375 0.109375 4.90625 -1.171875 4.90625 -1.421875 Z M 4.90625 -1.421875 "/>
</g>
<g id="glyph-4-0">
<path d="M 3.28125 2.375 C 3.28125 2.34375 3.28125 2.328125 3.109375 2.15625 C 1.875 0.90625 1.5625 -0.953125 1.5625 -2.484375 C 1.5625 -4.203125 1.9375 -5.921875 3.15625 -7.15625 C 3.28125 -7.28125 3.28125 -7.296875 3.28125 -7.328125 C 3.28125 -7.40625 3.234375 -7.4375 3.1875 -7.4375 C 3.078125 -7.4375 2.1875 -6.75 1.609375 -5.5 C 1.09375 -4.40625 0.984375 -3.3125 0.984375 -2.484375 C 0.984375 -1.703125 1.09375 -0.5 1.640625 0.609375 C 2.234375 1.828125 3.078125 2.484375 3.1875 2.484375 C 3.234375 2.484375 3.28125 2.453125 3.28125 2.375 Z M 3.28125 2.375 "/>
</g>
<g id="glyph-4-1">
<path d="M 2.859375 -2.484375 C 2.859375 -3.25 2.75 -4.453125 2.203125 -5.5625 C 1.609375 -6.78125 0.765625 -7.4375 0.65625 -7.4375 C 0.609375 -7.4375 0.5625 -7.390625 0.5625 -7.328125 C 0.5625 -7.296875 0.5625 -7.28125 0.75 -7.109375 C 1.71875 -6.125 2.28125 -4.546875 2.28125 -2.484375 C 2.28125 -0.78125 1.921875 0.953125 0.6875 2.203125 C 0.5625 2.328125 0.5625 2.34375 0.5625 2.375 C 0.5625 2.4375 0.609375 2.484375 0.65625 2.484375 C 0.765625 2.484375 1.65625 1.796875 2.234375 0.546875 C 2.75 -0.546875 2.859375 -1.640625 2.859375 -2.484375 Z M 2.859375 -2.484375 "/>
</g>
<g id="glyph-4-2">
<path d="M 3.984375 -5.25 L 2.484375 -6.859375 L 0.96875 -5.25 L 1.09375 -5.109375 L 2.484375 -6.1875 L 3.859375 -5.109375 Z M 3.984375 -5.25 "/>
</g>
<g id="glyph-5-0">
<path d="M 4.9375 -1.84375 C 4.9375 -2.828125 4.296875 -3.640625 3.453125 -3.84375 L 2.1875 -4.15625 C 1.578125 -4.296875 1.1875 -4.828125 1.1875 -5.40625 C 1.1875 -6.109375 1.71875 -6.703125 2.5 -6.703125 C 4.15625 -6.703125 4.375 -5.078125 4.421875 -4.640625 C 4.4375 -4.578125 4.4375 -4.515625 4.546875 -4.515625 C 4.671875 -4.515625 4.671875 -4.5625 4.671875 -4.75 L 4.671875 -6.75 C 4.671875 -6.921875 4.671875 -6.984375 4.5625 -6.984375 C 4.5 -6.984375 4.484375 -6.96875 4.421875 -6.859375 L 4.078125 -6.296875 C 3.78125 -6.578125 3.375 -6.984375 2.484375 -6.984375 C 1.390625 -6.984375 0.5625 -6.109375 0.5625 -5.0625 C 0.5625 -4.234375 1.078125 -3.515625 1.859375 -3.25 C 1.96875 -3.203125 2.46875 -3.09375 3.15625 -2.921875 C 3.421875 -2.859375 3.71875 -2.78125 4 -2.421875 C 4.203125 -2.15625 4.3125 -1.828125 4.3125 -1.5 C 4.3125 -0.796875 3.8125 -0.09375 2.984375 -0.09375 C 2.6875 -0.09375 1.9375 -0.140625 1.421875 -0.625 C 0.84375 -1.15625 0.8125 -1.796875 0.796875 -2.15625 C 0.796875 -2.25 0.71875 -2.25 0.6875 -2.25 C 0.5625 -2.25 0.5625 -2.171875 0.5625 -2 L 0.5625 -0.015625 C 0.5625 0.15625 0.5625 0.21875 0.65625 0.21875 C 0.734375 0.21875 0.75 0.203125 0.8125 0.09375 C 0.8125 0.09375 0.84375 0.046875 1.171875 -0.46875 C 1.46875 -0.140625 2.109375 0.21875 2.984375 0.21875 C 4.15625 0.21875 4.9375 -0.75 4.9375 -1.84375 Z M 4.9375 -1.84375 "/>
</g>
<g id="glyph-5-1">
<path d="M 4.109375 -1.171875 C 4.109375 -1.28125 4.03125 -1.296875 3.984375 -1.296875 C 3.890625 -1.296875 3.875 -1.234375 3.859375 -1.15625 C 3.5 -0.140625 2.609375 -0.140625 2.515625 -0.140625 C 2.015625 -0.140625 1.625 -0.4375 1.390625 -0.796875 C 1.09375 -1.28125 1.09375 -1.9375 1.09375 -2.28125 L 3.859375 -2.28125 C 4.078125 -2.28125 4.109375 -2.28125 4.109375 -2.5 C 4.109375 -3.484375 3.578125 -4.4375 2.34375 -4.4375 C 1.1875 -4.4375 0.28125 -3.421875 0.28125 -2.171875 C 0.28125 -0.859375 1.3125 0.109375 2.453125 0.109375 C 3.671875 0.109375 4.109375 -0.984375 4.109375 -1.171875 Z M 3.453125 -2.5 L 1.109375 -2.5 C 1.171875 -3.96875 2 -4.21875 2.34375 -4.21875 C 3.359375 -4.21875 3.453125 -2.875 3.453125 -2.5 Z M 3.453125 -2.5 "/>
</g>
<g id="glyph-5-2">
<path d="M 5.296875 0 L 5.296875 -0.3125 C 4.78125 -0.3125 4.53125 -0.3125 4.53125 -0.609375 L 4.53125 -2.5 C 4.53125 -3.34375 4.53125 -3.65625 4.21875 -4.015625 C 4.078125 -4.1875 3.75 -4.375 3.1875 -4.375 C 2.453125 -4.375 1.984375 -3.953125 1.71875 -3.34375 L 1.71875 -4.375 L 0.3125 -4.265625 L 0.3125 -3.96875 C 1.015625 -3.96875 1.09375 -3.890625 1.09375 -3.40625 L 1.09375 -0.75 C 1.09375 -0.3125 0.984375 -0.3125 0.3125 -0.3125 L 0.3125 0 L 1.4375 -0.03125 L 2.546875 0 L 2.546875 -0.3125 C 1.875 -0.3125 1.765625 -0.3125 1.765625 -0.75 L 1.765625 -2.578125 C 1.765625 -3.609375 2.484375 -4.15625 3.109375 -4.15625 C 3.734375 -4.15625 3.84375 -3.625 3.84375 -3.0625 L 3.84375 -0.75 C 3.84375 -0.3125 3.734375 -0.3125 3.078125 -0.3125 L 3.078125 0 L 4.1875 -0.03125 Z M 5.296875 0 "/>
</g>
<g id="glyph-5-3">
<path d="M 3.5625 -1.265625 C 3.5625 -1.796875 3.265625 -2.09375 3.15625 -2.203125 C 2.828125 -2.53125 2.4375 -2.609375 2.015625 -2.6875 C 1.46875 -2.796875 0.796875 -2.921875 0.796875 -3.5 C 0.796875 -3.84375 1.0625 -4.25 1.90625 -4.25 C 3 -4.25 3.046875 -3.359375 3.078125 -3.046875 C 3.078125 -2.96875 3.1875 -2.96875 3.1875 -2.96875 C 3.3125 -2.96875 3.3125 -3.015625 3.3125 -3.203125 L 3.3125 -4.203125 C 3.3125 -4.375 3.3125 -4.4375 3.203125 -4.4375 C 3.15625 -4.4375 3.140625 -4.4375 3.015625 -4.3125 C 2.984375 -4.28125 2.875 -4.1875 2.84375 -4.15625 C 2.46875 -4.4375 2.0625 -4.4375 1.90625 -4.4375 C 0.703125 -4.4375 0.328125 -3.78125 0.328125 -3.21875 C 0.328125 -2.875 0.484375 -2.59375 0.75 -2.375 C 1.0625 -2.125 1.34375 -2.0625 2.0625 -1.921875 C 2.28125 -1.875 3.09375 -1.71875 3.09375 -1.015625 C 3.09375 -0.5 2.75 -0.109375 1.96875 -0.109375 C 1.140625 -0.109375 0.78125 -0.671875 0.59375 -1.515625 C 0.5625 -1.640625 0.5625 -1.6875 0.453125 -1.6875 C 0.328125 -1.6875 0.328125 -1.609375 0.328125 -1.4375 L 0.328125 -0.125 C 0.328125 0.046875 0.328125 0.109375 0.4375 0.109375 C 0.484375 0.109375 0.5 0.09375 0.6875 -0.09375 C 0.703125 -0.109375 0.703125 -0.125 0.875 -0.3125 C 1.3125 0.09375 1.765625 0.109375 1.96875 0.109375 C 3.109375 0.109375 3.5625 -0.5625 3.5625 -1.265625 Z M 3.5625 -1.265625 "/>
</g>
<g id="glyph-5-4">
<path d="M 4.671875 -2.125 C 4.671875 -3.390625 3.671875 -4.4375 2.484375 -4.4375 C 1.234375 -4.4375 0.28125 -3.359375 0.28125 -2.125 C 0.28125 -0.84375 1.3125 0.109375 2.46875 0.109375 C 3.671875 0.109375 4.671875 -0.859375 4.671875 -2.125 Z M 3.84375 -2.203125 C 3.84375 -1.84375 3.84375 -1.3125 3.625 -0.875 C 3.40625 -0.421875 2.96875 -0.140625 2.484375 -0.140625 C 2.046875 -0.140625 1.609375 -0.34375 1.34375 -0.796875 C 1.09375 -1.234375 1.09375 -1.84375 1.09375 -2.203125 C 1.09375 -2.578125 1.09375 -3.125 1.34375 -3.5625 C 1.609375 -4.015625 2.078125 -4.21875 2.46875 -4.21875 C 2.90625 -4.21875 3.328125 -4 3.59375 -3.578125 C 3.84375 -3.15625 3.84375 -2.578125 3.84375 -2.203125 Z M 3.84375 -2.203125 "/>
</g>
<g id="glyph-5-5">
<path d="M 3.609375 -3.78125 C 3.609375 -4.09375 3.296875 -4.375 2.875 -4.375 C 2.15625 -4.375 1.796875 -3.71875 1.65625 -3.28125 L 1.65625 -4.375 L 0.28125 -4.265625 L 0.28125 -3.96875 C 0.96875 -3.96875 1.046875 -3.890625 1.046875 -3.40625 L 1.046875 -0.75 C 1.046875 -0.3125 0.9375 -0.3125 0.28125 -0.3125 L 0.28125 0 L 1.40625 -0.03125 C 1.796875 -0.03125 2.265625 -0.03125 2.671875 0 L 2.671875 -0.3125 L 2.453125 -0.3125 C 1.71875 -0.3125 1.703125 -0.421875 1.703125 -0.765625 L 1.703125 -2.296875 C 1.703125 -3.28125 2.125 -4.15625 2.875 -4.15625 C 2.9375 -4.15625 2.96875 -4.15625 2.984375 -4.15625 C 2.953125 -4.140625 2.75 -4.015625 2.75 -3.765625 C 2.75 -3.484375 2.96875 -3.34375 3.1875 -3.34375 C 3.359375 -3.34375 3.609375 -3.453125 3.609375 -3.78125 Z M 3.609375 -3.78125 "/>
</g>
<g id="glyph-5-6">
<path d="M 4.453125 -1.71875 L 4.203125 -1.71875 C 4.15625 -1.421875 4.078125 -0.984375 3.984375 -0.84375 C 3.90625 -0.765625 3.265625 -0.765625 3.046875 -0.765625 L 1.265625 -0.765625 L 2.3125 -1.78125 C 3.859375 -3.15625 4.453125 -3.6875 4.453125 -4.671875 C 4.453125 -5.8125 3.5625 -6.59375 2.34375 -6.59375 C 1.234375 -6.59375 0.5 -5.6875 0.5 -4.796875 C 0.5 -4.25 0.984375 -4.25 1.015625 -4.25 C 1.1875 -4.25 1.53125 -4.375 1.53125 -4.78125 C 1.53125 -5.03125 1.359375 -5.296875 1.015625 -5.296875 C 0.9375 -5.296875 0.90625 -5.296875 0.875 -5.28125 C 1.109375 -5.921875 1.640625 -6.296875 2.21875 -6.296875 C 3.125 -6.296875 3.546875 -5.484375 3.546875 -4.671875 C 3.546875 -3.890625 3.046875 -3.09375 2.5 -2.484375 L 0.609375 -0.359375 C 0.5 -0.25 0.5 -0.234375 0.5 0 L 4.171875 0 Z M 4.453125 -1.71875 "/>
</g>
<g id="glyph-5-7">
<path d="M 4.15625 0 L 4.15625 -0.3125 L 3.828125 -0.3125 C 2.9375 -0.3125 2.90625 -0.421875 2.90625 -0.78125 L 2.90625 -6.34375 C 2.90625 -6.578125 2.90625 -6.59375 2.6875 -6.59375 C 2.078125 -5.96875 1.203125 -5.96875 0.875 -5.96875 L 0.875 -5.65625 C 1.078125 -5.65625 1.671875 -5.65625 2.171875 -5.90625 L 2.171875 -0.78125 C 2.171875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.9375 -0.3125 L 0.9375 0 C 1.28125 -0.03125 2.15625 -0.03125 2.546875 -0.03125 C 2.9375 -0.03125 3.796875 -0.03125 4.15625 0 Z M 4.15625 0 "/>
</g>
<g id="glyph-6-0">
<path d="M 3.5 -1.265625 L 3.265625 -1.265625 C 3.25 -1.109375 3.171875 -0.703125 3.09375 -0.625 C 3.03125 -0.59375 2.5 -0.59375 2.40625 -0.59375 L 1.125 -0.59375 C 1.859375 -1.234375 2.09375 -1.421875 2.515625 -1.75 C 3.03125 -2.171875 3.5 -2.59375 3.5 -3.25 C 3.5 -4.09375 2.765625 -4.609375 1.875 -4.609375 C 1.015625 -4.609375 0.4375 -4 0.4375 -3.359375 C 0.4375 -3.015625 0.734375 -2.96875 0.8125 -2.96875 C 0.96875 -2.96875 1.171875 -3.09375 1.171875 -3.34375 C 1.171875 -3.46875 1.125 -3.71875 0.765625 -3.71875 C 0.984375 -4.203125 1.453125 -4.359375 1.78125 -4.359375 C 2.46875 -4.359375 2.828125 -3.8125 2.828125 -3.25 C 2.828125 -2.65625 2.40625 -2.171875 2.171875 -1.921875 L 0.5 -0.265625 C 0.4375 -0.203125 0.4375 -0.1875 0.4375 0 L 3.296875 0 Z M 3.5 -1.265625 "/>
</g>
<g id="glyph-6-1">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.015625 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.5625 L 2.328125 -4.40625 C 2.328125 -4.59375 2.3125 -4.609375 2.109375 -4.609375 C 1.671875 -4.171875 1.046875 -4.15625 0.75 -4.15625 L 0.75 -3.90625 C 0.921875 -3.90625 1.375 -3.90625 1.765625 -4.109375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.0625 -0.25 L 0.8125 -0.25 L 0.8125 0 L 2.046875 -0.03125 Z M 3.28125 0 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 14 0 L 256 0 L 256 88.914062 L 14 88.914062 Z M 14 0 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 251 40 L 272.492188 40 L 272.492188 73 L 251 73 Z M 251 40 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(89.99939%, 89.99939%, 89.99939%)" fill-opacity="1" d="M 15.222656 87.921875 L 255.058594 87.921875 L 255.058594 0.992188 L 15.222656 0.992188 Z M 15.222656 87.921875 "/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -113.704386 -31.644535 L 127.59274 -31.644535 L 127.59274 55.814768 L -113.704386 55.814768 Z M -113.704386 -31.644535 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
</g>
<path fill-rule="nonzero" fill="rgb(79.998779%, 79.998779%, 79.998779%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -12.949729 -28.653768 L 124.601973 -28.653768 L 124.601973 52.827931 L -12.949729 52.827931 Z M -12.949729 -28.653768 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(79.998779%, 79.998779%, 79.998779%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -91.216648 -28.653768 L -35.013022 -28.653768 L -35.013022 52.827931 L -91.216648 52.827931 Z M -91.216648 -28.653768 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="48.775623" y="74.71878"/>
<use xlink:href="#glyph-0-1" x="53.630706" y="74.71878"/>
<use xlink:href="#glyph-0-2" x="57.000449" y="74.71878"/>
<use xlink:href="#glyph-0-3" x="59.682479" y="74.71878"/>
<use xlink:href="#glyph-0-4" x="65.114865" y="74.71878"/>
<use xlink:href="#glyph-0-5" x="68.484607" y="74.71878"/>
<use xlink:href="#glyph-0-6" x="70.478925" y="74.71878"/>
<use xlink:href="#glyph-0-7" x="72.473242" y="74.71878"/>
<use xlink:href="#glyph-0-8" x="75.498881" y="74.71878"/>
<use xlink:href="#glyph-0-9" x="78.52452" y="74.71878"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-10" x="55.037473" y="81.650548"/>
<use xlink:href="#glyph-0-8" x="57.753665" y="81.650548"/>
<use xlink:href="#glyph-0-11" x="60.779304" y="81.650548"/>
<use xlink:href="#glyph-0-10" x="64.492656" y="81.650548"/>
<use xlink:href="#glyph-0-1" x="67.208849" y="81.650548"/>
<use xlink:href="#glyph-0-2" x="70.578592" y="81.650548"/>
<use xlink:href="#glyph-0-10" x="73.260622" y="81.650548"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-12" x="162.768129" y="10.673969"/>
<use xlink:href="#glyph-0-13" x="165.406094" y="10.673969"/>
<use xlink:href="#glyph-0-5" x="170.150767" y="10.673969"/>
<use xlink:href="#glyph-0-1" x="172.145085" y="10.673969"/>
<use xlink:href="#glyph-0-10" x="175.514827" y="10.673969"/>
<use xlink:href="#glyph-0-8" x="178.23102" y="10.673969"/>
<use xlink:href="#glyph-0-9" x="181.256659" y="10.673969"/>
<use xlink:href="#glyph-0-14" x="184.970011" y="10.673969"/>
<use xlink:href="#glyph-0-15" x="187.307937" y="10.673969"/>
<use xlink:href="#glyph-0-1" x="191.42035" y="10.673969"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="194.963383" y="10.673969"/>
<use xlink:href="#glyph-0-16" x="198.333125" y="10.673969"/>
<use xlink:href="#glyph-0-12" x="202.046477" y="10.673969"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-17" x="151.50972" y="17.605738"/>
<use xlink:href="#glyph-0-1" x="154.535359" y="17.605738"/>
<use xlink:href="#glyph-0-3" x="157.905102" y="17.605738"/>
<use xlink:href="#glyph-0-16" x="163.337488" y="17.605738"/>
<use xlink:href="#glyph-0-5" x="167.050839" y="17.605738"/>
<use xlink:href="#glyph-0-8" x="169.045157" y="17.605738"/>
<use xlink:href="#glyph-0-3" x="172.070796" y="17.605738"/>
<use xlink:href="#glyph-0-8" x="177.503182" y="17.605738"/>
<use xlink:href="#glyph-0-11" x="180.52882" y="17.605738"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-18" x="184.068882" y="17.605738"/>
<use xlink:href="#glyph-0-4" x="186.750912" y="17.605738"/>
<use xlink:href="#glyph-0-2" x="190.120655" y="17.605738"/>
<use xlink:href="#glyph-0-19" x="192.802685" y="17.605738"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-20" x="198.681168" y="17.605738"/>
<use xlink:href="#glyph-0-5" x="202.840122" y="17.605738"/>
<use xlink:href="#glyph-0-18" x="204.834439" y="17.605738"/>
<use xlink:href="#glyph-0-8" x="207.51647" y="17.605738"/>
<use xlink:href="#glyph-0-2" x="210.542108" y="17.605738"/>
<use xlink:href="#glyph-0-10" x="213.224139" y="17.605738"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.975617 0.000217036 C 6.975617 3.851665 3.851229 6.972123 -0.000219133 6.972123 C -3.851667 6.972123 -6.972125 3.851665 -6.972125 0.000217036 C -6.972125 -3.851231 -3.851667 -6.975619 -0.000219133 -6.975619 C 3.851229 -6.975619 6.975617 -3.851231 6.975617 0.000217036 Z M 6.975617 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="123.927762" y="59.368302"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="118.556486" y="71.157477"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 35.818244 -11.337973 L 61.658314 -11.337973 L 61.658314 11.338407 L 35.818244 11.338407 Z M 35.818244 -11.337973 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="167.140491" y="58.944881"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="173.879976" y="58.944881"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-1" x="177.730969" y="58.944881"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-1" x="182.373154" y="58.944881"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.452613 0.000217036 C 104.452613 3.851665 101.328225 6.972123 97.476777 6.972123 C 93.625329 6.972123 90.504871 3.851665 90.504871 0.000217036 C 90.504871 -3.851231 93.625329 -6.975619 97.476777 -6.975619 C 101.328225 -6.975619 104.452613 -3.851231 104.452613 0.000217036 Z M 104.452613 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="220.814485" y="59.368302"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -84.743858 -11.337973 L -41.489742 -11.337973 L -41.489742 11.338407 L -84.743858 11.338407 Z M -84.743858 -11.337973 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-0" x="47.311542" y="59.880183"/>
<use xlink:href="#glyph-5-1" x="52.813244" y="59.880183"/>
<use xlink:href="#glyph-5-2" x="57.214804" y="59.880183"/>
<use xlink:href="#glyph-5-3" x="62.716505" y="59.880183"/>
<use xlink:href="#glyph-5-4" x="66.622951" y="59.880183"/>
<use xlink:href="#glyph-5-5" x="71.574087" y="59.880183"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-6" x="78.750262" y="59.880183"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -84.743858 23.67483 L -41.489742 23.67483 L -41.489742 46.351211 L -84.743858 46.351211 Z M -84.743858 23.67483 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-0" x="47.311542" y="25.0802"/>
<use xlink:href="#glyph-5-1" x="52.813244" y="25.0802"/>
<use xlink:href="#glyph-5-2" x="57.214804" y="25.0802"/>
<use xlink:href="#glyph-5-3" x="62.716505" y="25.0802"/>
<use xlink:href="#glyph-5-4" x="66.622951" y="25.0802"/>
<use xlink:href="#glyph-5-5" x="71.574087" y="25.0802"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-7" x="78.750262" y="25.0802"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 26.113281 56.46875 C 26.113281 55.375 25.226562 54.488281 24.132812 54.488281 C 23.039062 54.488281 22.152344 55.375 22.152344 56.46875 C 22.152344 57.5625 23.039062 58.449219 24.132812 58.449219 C 25.226562 58.449219 26.113281 57.5625 26.113281 56.46875 Z M 26.113281 56.46875 "/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.975617 0.000217036 L 30.685601 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.05175 0.000217036 L 1.606865 1.682278 L 3.088494 0.000217036 L 1.606865 -1.681844 Z M 6.05175 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 155.91849, 56.468966)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 62.15743 0.000217036 L 85.871343 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.053923 0.000217036 L 1.609038 1.682278 L 3.086736 0.000217036 L 1.609038 -1.681844 Z M 6.053923 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 210.767893, 56.468966)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.452613 0.000217036 L 139.504717 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 270.09375 56.46875 L 265.675781 54.796875 L 267.144531 56.46875 L 265.675781 58.140625 Z M 270.09375 56.46875 "/>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054137 0.000217036 L 1.609252 1.682278 L 3.08695 0.000217036 L 1.609252 -1.681844 Z M 6.054137 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 264.076274, 56.468966)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-2" x="262.676443" y="52.674086"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-2" x="262.042697" y="52.674086"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 118.624369 0.000217036 L 118.624369 -22.676164 L -0.000219133 -22.676164 L -0.000219133 -11.609147 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.051603 0.000219133 L 1.610648 1.68228 L 3.088347 0.000219133 L 1.610648 -1.681842 Z M 6.051603 0.000219133 " transform="matrix(0, -0.993944, -0.993944, 0, 128.238499, 70.827457)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 248.125 56.46875 C 248.125 55.375 247.238281 54.488281 246.144531 54.488281 C 245.050781 54.488281 244.164062 55.375 244.164062 56.46875 C 244.164062 57.5625 245.050781 58.449219 246.144531 58.449219 C 247.238281 58.449219 248.125 57.5625 248.125 56.46875 Z M 248.125 56.46875 "/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -104.739945 0.000217036 L -104.739945 35.01302 L -89.872571 35.01302 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054809 0.000680262 L 1.609924 1.682741 L 3.087622 0.000680262 L 1.609924 -1.681381 Z M 6.054809 0.000680262 " transform="matrix(0.993944, 0, 0, -0.993944, 36.087325, 21.668645)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -127.416326 0.000217036 L -89.872571 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054809 0.000217036 L 1.609924 1.682278 L 3.087622 0.000217036 L 1.609924 -1.681844 Z M 6.054809 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 36.087325, 56.468966)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-2" x="5.390942" y="52.674086"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -40.990626 0.000217036 L -11.605653 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.055097 0.000217036 L 1.610212 1.682278 L 3.08791 0.000217036 L 1.610212 -1.681844 Z M 6.055097 0.000217036 " transform="matrix(0.993944, 0, 0, -0.993944, 113.880007, 56.468966)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-2" x="98.965841" y="51.188139"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-2" x="98.332096" y="51.188139"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-6-0" x="103.996194" y="52.674086"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -40.990626 35.01302 L 97.476777 35.01302 L 97.476777 11.605651 " transform="matrix(0.993944, 0, 0, -0.993944, 128.238499, 56.468966)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.055109 -0.00138302 L 1.610224 1.684608 L 3.087922 -0.00138302 L 1.610224 -1.683444 Z M 6.055109 -0.00138302 " transform="matrix(0, 0.993944, 0.993944, 0, 225.126375, 42.110464)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-2" x="98.965841" y="16.388156"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-2" x="98.332096" y="16.388156"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-6-1" x="103.996194" y="17.874103"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -1,162 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="239.8" height="100.675" viewBox="0 0 239.8 100.675">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 10.421875 -6.671875 C 10.421875 -6.71875 10.375 -6.78125 10.296875 -6.78125 C 10.0625 -6.78125 9.78125 -6.75 9.53125 -6.75 C 9.1875 -6.75 8.828125 -6.78125 8.5 -6.78125 C 8.4375 -6.78125 8.3125 -6.78125 8.3125 -6.59375 C 8.3125 -6.484375 8.390625 -6.484375 8.453125 -6.484375 C 8.703125 -6.46875 9.046875 -6.390625 9.046875 -6.09375 C 9.046875 -5.984375 9 -5.90625 8.90625 -5.765625 L 6.234375 -1.078125 L 5.859375 -6.015625 C 5.859375 -6.21875 5.828125 -6.46875 6.5625 -6.484375 C 6.734375 -6.484375 6.828125 -6.484375 6.828125 -6.671875 C 6.828125 -6.78125 6.71875 -6.78125 6.671875 -6.78125 C 6.28125 -6.78125 5.859375 -6.75 5.46875 -6.75 C 5.234375 -6.75 4.65625 -6.78125 4.421875 -6.78125 C 4.359375 -6.78125 4.234375 -6.78125 4.234375 -6.59375 C 4.234375 -6.484375 4.328125 -6.484375 4.46875 -6.484375 C 4.90625 -6.484375 4.984375 -6.421875 5 -6.234375 L 5.0625 -5.46875 L 2.546875 -1.078125 L 2.171875 -6.125 C 2.171875 -6.234375 2.171875 -6.46875 2.921875 -6.484375 C 3.015625 -6.484375 3.125 -6.484375 3.125 -6.671875 C 3.125 -6.78125 2.984375 -6.78125 2.984375 -6.78125 C 2.59375 -6.78125 2.171875 -6.75 1.765625 -6.75 C 1.421875 -6.75 1.0625 -6.78125 0.71875 -6.78125 C 0.671875 -6.78125 0.546875 -6.78125 0.546875 -6.59375 C 0.546875 -6.484375 0.640625 -6.484375 0.796875 -6.484375 C 1.296875 -6.484375 1.296875 -6.390625 1.328125 -6.109375 L 1.765625 -0.046875 C 1.78125 0.140625 1.78125 0.21875 1.921875 0.21875 C 2.046875 0.21875 2.078125 0.15625 2.171875 0.015625 L 5.09375 -5.0625 L 5.453125 -0.046875 C 5.46875 0.171875 5.5 0.21875 5.609375 0.21875 C 5.75 0.21875 5.796875 0.125 5.859375 0.03125 L 9.109375 -5.640625 C 9.359375 -6.078125 9.59375 -6.421875 10.21875 -6.484375 C 10.3125 -6.484375 10.421875 -6.484375 10.421875 -6.671875 Z M 10.421875 -6.671875 "/>
</g>
<g id="glyph-0-1">
<path d="M 3.9375 -1.546875 C 3.9375 -1.890625 3.75 -2.140625 3.625 -2.265625 C 3.359375 -2.546875 3.078125 -2.59375 2.640625 -2.6875 C 2.28125 -2.765625 1.875 -2.828125 1.875 -3.28125 C 1.875 -3.5625 2.109375 -4.171875 2.984375 -4.171875 C 3.234375 -4.171875 3.734375 -4.109375 3.890625 -3.71875 C 3.609375 -3.703125 3.40625 -3.484375 3.40625 -3.265625 C 3.40625 -3.125 3.5 -2.984375 3.71875 -2.984375 C 3.9375 -2.984375 4.171875 -3.15625 4.171875 -3.53125 C 4.171875 -3.984375 3.75 -4.390625 2.984375 -4.390625 C 1.671875 -4.390625 1.3125 -3.375 1.3125 -2.9375 C 1.3125 -2.171875 2.046875 -2.015625 2.328125 -1.953125 C 2.859375 -1.859375 3.375 -1.75 3.375 -1.203125 C 3.375 -0.9375 3.140625 -0.109375 1.953125 -0.109375 C 1.8125 -0.109375 1.046875 -0.109375 0.8125 -0.640625 C 1.1875 -0.59375 1.4375 -0.890625 1.4375 -1.15625 C 1.4375 -1.390625 1.28125 -1.515625 1.078125 -1.515625 C 0.8125 -1.515625 0.515625 -1.296875 0.515625 -0.859375 C 0.515625 -0.28125 1.078125 0.109375 1.9375 0.109375 C 3.546875 0.109375 3.9375 -1.09375 3.9375 -1.546875 Z M 3.9375 -1.546875 "/>
</g>
<g id="glyph-0-2">
<path d="M 6.859375 -3.703125 C 6.859375 -4.25 6.59375 -4.390625 6.421875 -4.390625 C 6.1875 -4.390625 5.9375 -4.140625 5.9375 -3.921875 C 5.9375 -3.78125 6 -3.734375 6.078125 -3.640625 C 6.1875 -3.53125 6.4375 -3.28125 6.4375 -2.796875 C 6.4375 -2.46875 6.15625 -1.484375 5.890625 -0.984375 C 5.640625 -0.453125 5.28125 -0.109375 4.796875 -0.109375 C 4.328125 -0.109375 4.0625 -0.40625 4.0625 -0.96875 C 4.0625 -1.25 4.140625 -1.5625 4.171875 -1.703125 L 4.59375 -3.375 C 4.640625 -3.59375 4.734375 -3.953125 4.734375 -4.015625 C 4.734375 -4.1875 4.59375 -4.28125 4.453125 -4.28125 C 4.328125 -4.28125 4.15625 -4.203125 4.078125 -4 C 4.046875 -3.9375 3.59375 -2.03125 3.515625 -1.78125 C 3.453125 -1.484375 3.421875 -1.296875 3.421875 -1.125 C 3.421875 -1.015625 3.421875 -1 3.4375 -0.9375 C 3.203125 -0.421875 2.90625 -0.109375 2.53125 -0.109375 C 1.734375 -0.109375 1.734375 -0.84375 1.734375 -1.015625 C 1.734375 -1.328125 1.78125 -1.71875 2.25 -2.9375 C 2.359375 -3.234375 2.421875 -3.375 2.421875 -3.578125 C 2.421875 -4.03125 2.09375 -4.390625 1.59375 -4.390625 C 0.65625 -4.390625 0.28125 -2.953125 0.28125 -2.859375 C 0.28125 -2.765625 0.40625 -2.765625 0.40625 -2.765625 C 0.5 -2.765625 0.515625 -2.78125 0.5625 -2.9375 C 0.828125 -3.859375 1.21875 -4.171875 1.5625 -4.171875 C 1.65625 -4.171875 1.8125 -4.15625 1.8125 -3.84375 C 1.8125 -3.59375 1.703125 -3.3125 1.640625 -3.15625 C 1.203125 -1.984375 1.078125 -1.515625 1.078125 -1.140625 C 1.078125 -0.234375 1.75 0.109375 2.5 0.109375 C 2.65625 0.109375 3.125 0.109375 3.53125 -0.59375 C 3.78125 0.046875 4.46875 0.109375 4.765625 0.109375 C 5.515625 0.109375 5.953125 -0.515625 6.21875 -1.109375 C 6.546875 -1.890625 6.859375 -3.21875 6.859375 -3.703125 Z M 6.859375 -3.703125 "/>
</g>
<g id="glyph-0-3">
<path d="M 4.65625 -3.703125 C 4.65625 -4.234375 4.390625 -4.390625 4.21875 -4.390625 C 3.96875 -4.390625 3.734375 -4.140625 3.734375 -3.921875 C 3.734375 -3.78125 3.78125 -3.734375 3.890625 -3.625 C 4.09375 -3.421875 4.21875 -3.15625 4.21875 -2.796875 C 4.21875 -2.390625 3.625 -0.109375 2.453125 -0.109375 C 1.953125 -0.109375 1.71875 -0.453125 1.71875 -0.96875 C 1.71875 -1.53125 1.984375 -2.25 2.296875 -3.078125 C 2.359375 -3.25 2.421875 -3.390625 2.421875 -3.578125 C 2.421875 -4.03125 2.09375 -4.390625 1.59375 -4.390625 C 0.671875 -4.390625 0.28125 -2.953125 0.28125 -2.859375 C 0.28125 -2.765625 0.40625 -2.765625 0.40625 -2.765625 C 0.5 -2.765625 0.515625 -2.78125 0.5625 -2.9375 C 0.859375 -3.9375 1.28125 -4.171875 1.5625 -4.171875 C 1.65625 -4.171875 1.8125 -4.171875 1.8125 -3.859375 C 1.8125 -3.609375 1.71875 -3.34375 1.65625 -3.15625 C 1.21875 -2 1.078125 -1.546875 1.078125 -1.125 C 1.078125 -0.046875 1.953125 0.109375 2.421875 0.109375 C 4.078125 0.109375 4.65625 -3.1875 4.65625 -3.703125 Z M 4.65625 -3.703125 "/>
</g>
<g id="glyph-0-4">
<path d="M 5.390625 -1.421875 C 5.390625 -1.515625 5.3125 -1.515625 5.28125 -1.515625 C 5.171875 -1.515625 5.171875 -1.484375 5.140625 -1.34375 C 5 -0.78125 4.8125 -0.109375 4.390625 -0.109375 C 4.1875 -0.109375 4.078125 -0.234375 4.078125 -0.5625 C 4.078125 -0.78125 4.203125 -1.25 4.28125 -1.59375 L 4.5625 -2.671875 C 4.59375 -2.828125 4.6875 -3.203125 4.734375 -3.34375 C 4.78125 -3.578125 4.875 -3.953125 4.875 -4.015625 C 4.875 -4.1875 4.734375 -4.28125 4.59375 -4.28125 C 4.546875 -4.28125 4.28125 -4.265625 4.203125 -3.9375 L 3.453125 -0.9375 C 3.453125 -0.90625 3.046875 -0.109375 2.328125 -0.109375 C 1.8125 -0.109375 1.703125 -0.5625 1.703125 -0.921875 C 1.703125 -1.484375 1.984375 -2.265625 2.25 -2.953125 C 2.359375 -3.25 2.421875 -3.390625 2.421875 -3.578125 C 2.421875 -4.03125 2.09375 -4.390625 1.59375 -4.390625 C 0.65625 -4.390625 0.28125 -2.953125 0.28125 -2.859375 C 0.28125 -2.765625 0.40625 -2.765625 0.40625 -2.765625 C 0.5 -2.765625 0.515625 -2.78125 0.5625 -2.9375 C 0.8125 -3.8125 1.1875 -4.171875 1.5625 -4.171875 C 1.65625 -4.171875 1.8125 -4.15625 1.8125 -3.84375 C 1.8125 -3.609375 1.703125 -3.3125 1.65625 -3.171875 C 1.28125 -2.1875 1.078125 -1.5625 1.078125 -1.078125 C 1.078125 -0.140625 1.765625 0.109375 2.296875 0.109375 C 2.953125 0.109375 3.3125 -0.34375 3.484375 -0.5625 C 3.59375 -0.15625 3.9375 0.109375 4.359375 0.109375 C 4.703125 0.109375 4.9375 -0.125 5.09375 -0.4375 C 5.265625 -0.796875 5.390625 -1.421875 5.390625 -1.421875 Z M 5.390625 -1.421875 "/>
</g>
<g id="glyph-0-5">
<path d="M 4.328125 -1.421875 C 4.328125 -1.46875 4.28125 -1.515625 4.203125 -1.515625 C 4.109375 -1.515625 4.09375 -1.453125 4.0625 -1.390625 C 3.828125 -0.75 3.203125 -0.5625 2.875 -0.5625 C 2.671875 -0.5625 2.5 -0.609375 2.28125 -0.6875 C 1.953125 -0.8125 1.796875 -0.859375 1.59375 -0.859375 C 1.59375 -0.859375 1.40625 -0.859375 1.328125 -0.828125 C 1.859375 -1.40625 2.140625 -1.65625 2.5 -1.953125 C 2.5 -1.953125 3.125 -2.5 3.484375 -2.859375 C 4.421875 -3.78125 4.640625 -4.25 4.640625 -4.296875 C 4.640625 -4.390625 4.53125 -4.390625 4.53125 -4.390625 C 4.46875 -4.390625 4.4375 -4.375 4.375 -4.28125 C 4.078125 -3.8125 3.875 -3.640625 3.640625 -3.640625 C 3.40625 -3.640625 3.28125 -3.796875 3.125 -3.96875 C 2.9375 -4.1875 2.765625 -4.390625 2.4375 -4.390625 C 1.703125 -4.390625 1.25 -3.46875 1.25 -3.265625 C 1.25 -3.203125 1.265625 -3.15625 1.359375 -3.15625 C 1.453125 -3.15625 1.46875 -3.203125 1.484375 -3.265625 C 1.671875 -3.71875 2.25 -3.734375 2.328125 -3.734375 C 2.546875 -3.734375 2.734375 -3.65625 2.96875 -3.578125 C 3.359375 -3.421875 3.46875 -3.421875 3.734375 -3.421875 C 3.375 -3 2.53125 -2.28125 2.34375 -2.125 L 1.453125 -1.296875 C 0.78125 -0.625 0.421875 -0.0625 0.421875 0.015625 C 0.421875 0.109375 0.546875 0.109375 0.546875 0.109375 C 0.625 0.109375 0.640625 0.09375 0.703125 -0.015625 C 0.9375 -0.375 1.234375 -0.640625 1.546875 -0.640625 C 1.78125 -0.640625 1.875 -0.546875 2.125 -0.265625 C 2.296875 -0.046875 2.46875 0.109375 2.765625 0.109375 C 3.75 0.109375 4.328125 -1.15625 4.328125 -1.421875 Z M 4.328125 -1.421875 "/>
</g>
<g id="glyph-1-0">
<path d="M 3.515625 -1.265625 L 3.28125 -1.265625 C 3.25 -1.109375 3.1875 -0.703125 3.09375 -0.625 C 3.03125 -0.59375 2.5 -0.59375 2.40625 -0.59375 L 1.125 -0.59375 C 1.859375 -1.234375 2.09375 -1.4375 2.515625 -1.765625 C 3.03125 -2.171875 3.515625 -2.59375 3.515625 -3.265625 C 3.515625 -4.109375 2.78125 -4.609375 1.890625 -4.609375 C 1.015625 -4.609375 0.4375 -4.015625 0.4375 -3.375 C 0.4375 -3.015625 0.734375 -2.984375 0.8125 -2.984375 C 0.96875 -2.984375 1.171875 -3.09375 1.171875 -3.34375 C 1.171875 -3.484375 1.125 -3.71875 0.765625 -3.71875 C 0.984375 -4.21875 1.453125 -4.359375 1.78125 -4.359375 C 2.46875 -4.359375 2.84375 -3.828125 2.84375 -3.265625 C 2.84375 -2.65625 2.40625 -2.171875 2.1875 -1.921875 L 0.5 -0.265625 C 0.4375 -0.203125 0.4375 -0.1875 0.4375 0 L 3.296875 0 Z M 3.515625 -1.265625 "/>
</g>
<g id="glyph-1-1">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.5625 L 2.328125 -4.421875 C 2.328125 -4.609375 2.3125 -4.609375 2.125 -4.609375 C 1.671875 -4.171875 1.046875 -4.171875 0.765625 -4.171875 L 0.765625 -3.921875 C 0.921875 -3.921875 1.390625 -3.921875 1.765625 -4.109375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.078125 -0.25 L 0.8125 -0.25 L 0.8125 0 L 2.046875 -0.03125 Z M 3.28125 0 "/>
</g>
<g id="glyph-2-0">
<path d="M 3.296875 2.390625 C 3.296875 2.359375 3.296875 2.328125 3.125 2.171875 C 1.875 0.921875 1.5625 -0.96875 1.5625 -2.484375 C 1.5625 -4.21875 1.9375 -5.9375 3.15625 -7.1875 C 3.296875 -7.296875 3.296875 -7.328125 3.296875 -7.359375 C 3.296875 -7.421875 3.25 -7.453125 3.1875 -7.453125 C 3.09375 -7.453125 2.203125 -6.78125 1.609375 -5.515625 C 1.109375 -4.421875 0.984375 -3.3125 0.984375 -2.484375 C 0.984375 -1.703125 1.09375 -0.5 1.640625 0.609375 C 2.234375 1.84375 3.09375 2.484375 3.1875 2.484375 C 3.25 2.484375 3.296875 2.453125 3.296875 2.390625 Z M 3.296875 2.390625 "/>
</g>
<g id="glyph-2-1">
<path d="M 2.875 -2.484375 C 2.875 -3.265625 2.765625 -4.46875 2.21875 -5.578125 C 1.625 -6.8125 0.765625 -7.453125 0.671875 -7.453125 C 0.609375 -7.453125 0.5625 -7.40625 0.5625 -7.359375 C 0.5625 -7.328125 0.5625 -7.296875 0.75 -7.125 C 1.734375 -6.140625 2.296875 -4.5625 2.296875 -2.484375 C 2.296875 -0.78125 1.921875 0.96875 0.703125 2.21875 C 0.5625 2.328125 0.5625 2.359375 0.5625 2.390625 C 0.5625 2.4375 0.609375 2.484375 0.671875 2.484375 C 0.765625 2.484375 1.65625 1.8125 2.25 0.546875 C 2.75 -0.546875 2.875 -1.65625 2.875 -2.484375 Z M 2.875 -2.484375 "/>
</g>
<g id="glyph-2-2">
<path d="M 4.140625 -6.3125 L 3.984375 -6.46875 C 3.984375 -6.46875 3.609375 -6 3.171875 -6 C 2.9375 -6 2.6875 -6.140625 2.53125 -6.234375 C 2.25 -6.40625 2.078125 -6.46875 1.90625 -6.46875 C 1.53125 -6.46875 1.34375 -6.25 0.828125 -5.6875 L 1 -5.546875 C 1 -5.546875 1.375 -6.015625 1.8125 -6.015625 C 2.03125 -6.015625 2.28125 -5.875 2.453125 -5.78125 C 2.71875 -5.609375 2.90625 -5.546875 3.078125 -5.546875 C 3.453125 -5.546875 3.640625 -5.765625 4.140625 -6.3125 Z M 4.140625 -6.3125 "/>
</g>
<g id="glyph-3-0">
<path d="M 8.09375 -2.984375 C 8.09375 -3.203125 7.890625 -3.203125 7.71875 -3.203125 L 4.53125 -3.203125 L 4.53125 -6.390625 C 4.53125 -6.5625 4.53125 -6.765625 4.328125 -6.765625 C 4.109375 -6.765625 4.109375 -6.578125 4.109375 -6.390625 L 4.109375 -3.203125 L 0.921875 -3.203125 C 0.75 -3.203125 0.546875 -3.203125 0.546875 -3 C 0.546875 -2.78125 0.75 -2.78125 0.921875 -2.78125 L 4.109375 -2.78125 L 4.109375 0.390625 C 4.109375 0.5625 4.109375 0.765625 4.3125 0.765625 C 4.53125 0.765625 4.53125 0.578125 4.53125 0.390625 L 4.53125 -2.78125 L 7.71875 -2.78125 C 7.875 -2.78125 8.09375 -2.78125 8.09375 -2.984375 Z M 8.09375 -2.984375 "/>
</g>
<g id="glyph-4-0">
<path d="M 6.890625 -2.484375 C 6.890625 -2.6875 6.703125 -2.6875 6.5625 -2.6875 L 1.15625 -2.6875 C 1.015625 -2.6875 0.828125 -2.6875 0.828125 -2.484375 C 0.828125 -2.28125 1.015625 -2.28125 1.15625 -2.28125 L 6.5625 -2.28125 C 6.703125 -2.28125 6.890625 -2.28125 6.890625 -2.484375 Z M 6.890625 -2.484375 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 0.285156 76 L 20 76 L 20 78 L 0.285156 78 Z M 0.285156 76 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 218 61 L 239.316406 61 L 239.316406 93 L 218 93 Z M 218 61 "/>
</clipPath>
<clipPath id="clip-2">
<path clip-rule="nonzero" d="M 71 71 L 103 71 L 103 100.351562 L 71 100.351562 Z M 71 71 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -16.468537 -11.338946 L 16.469483 -11.338946 L 16.469483 11.339497 L -16.468537 11.339497 Z M -16.468537 -11.338946 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="27.691668" y="79.234215"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="37.070391" y="80.724405"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="41.525011" y="79.234215"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="45.386999" y="79.234215"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="50.042437" y="79.234215"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 53.592846 -0.00168395 C 53.592846 3.850556 50.469514 6.973887 46.617274 6.973887 C 42.768954 6.973887 39.645622 3.850556 39.645622 -0.00168395 C 39.645622 -3.850005 42.768954 -6.973336 46.617274 -6.973336 C 50.469514 -6.973336 53.592846 -3.850005 53.592846 -0.00168395 Z M 53.592846 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="82.943304" y="79.658845"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="77.556693" y="91.482675"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 158.47722 -0.00168395 C 158.47722 3.850556 155.353888 6.973887 151.501649 6.973887 C 147.649409 6.973887 144.529996 3.850556 144.529996 -0.00168395 C 144.529996 -3.850005 147.649409 -6.973336 151.501649 -6.973336 C 155.353888 -6.973336 158.47722 -3.850005 158.47722 -0.00168395 Z M 158.47722 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="187.486816" y="79.658845"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 135.034598 30.150026 L 167.972618 30.150026 L 167.972618 52.82847 L 135.034598 52.82847 Z M 135.034598 30.150026 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="178.704168" y="37.880713"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="188.082891" y="39.369906"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="192.538508" y="37.880713"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="196.400496" y="37.880713"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="201.055934" y="37.880713"/>
</g>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -21.602244 -0.00168395 L -39.644676 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.05474 -0.00168395 L 1.606834 1.683426 L 3.088163 -0.00168395 L 1.606834 -1.682875 Z M 6.05474 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 16.437399, 76.752228)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="5.087638" y="71.456324"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="12.196689" y="72.945517"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 16.967178 -0.00168395 L 35.009611 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054025 -0.00168395 L 1.610037 1.683426 L 3.087448 -0.00168395 L 1.610037 -1.682875 Z M 6.054025 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 72.8678, 76.752228)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="66.977844" y="71.456324"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="64.942083" y="71.456324"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="72.053459" y="72.945517"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 53.592846 -0.00168395 L 77.305869 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.051744 -0.00168395 L 1.607756 1.683426 L 3.089086 -0.00168395 L 1.607756 -1.682875 Z M 6.051744 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 115.026323, 76.752228)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="113.496671" y="72.945517"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 139.893985 -0.00168395 L 116.180962 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.055279 -0.00168395 L 1.607373 1.683426 L 3.088702 -0.00168395 L 1.607373 -1.682875 Z M 6.055279 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 177.413425, 76.752228)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-4" x="160.410225" y="72.945517"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 158.47722 -0.00168395 L 193.527505 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 236.90625 76.753906 L 232.476562 75.074219 L 233.953125 76.753906 L 232.476562 78.429688 Z M 236.90625 76.753906 "/>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.051731 -0.00168395 L 1.607743 1.683426 L 3.089072 -0.00168395 L 1.607743 -1.682875 Z M 6.051731 -0.00168395 " transform="matrix(0.996782, 0, 0, -0.996782, 230.873993, 76.752228)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-5" x="229.458323" y="72.945517"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 151.501649 29.652331 L 151.501649 11.60598 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.053465 -0.000411378 L 1.609478 1.684699 L 3.086888 -0.000411378 L 1.609478 -1.681602 Z M 6.053465 -0.000411378 " transform="matrix(0, 0.996782, 0.996782, 0, 191.81291, 62.352732)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="197.650007" y="64.504765"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="195.614246" y="64.504765"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="202.726618" y="65.993958"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 151.501649 57.958258 L 151.501649 76.00461 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052507 -0.000411378 L 1.60852 1.684699 L 3.08593 -0.000411378 L 1.60852 -1.681602 Z M 6.052507 -0.000411378 " transform="matrix(0, 0.996782, 0.996782, 0, 191.81291, 16.150563)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="195.616571" y="9.076699"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="202.726618" y="10.565891"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 172.647818 -0.00168395 L 172.647818 -22.676209 L 46.617274 -22.676209 L 46.617274 -11.609348 " transform="matrix(0.996782, 0, 0, -0.996782, 40.798357, 76.752228)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 87.265625 85.117188 L 85.589844 89.546875 L 87.265625 88.074219 L 88.945312 89.546875 Z M 87.265625 85.117188 "/>
<g clip-path="url(#clip-2)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054006 0.0016656 L 1.610019 1.682857 L 3.087429 0.0016656 L 1.610019 -1.683444 Z M 6.054006 0.0016656 " transform="matrix(0, -0.996782, -0.996782, 0, 87.267285, 91.151713)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 214.878906 76.753906 C 214.878906 75.65625 213.988281 74.765625 212.890625 74.765625 C 211.796875 74.765625 210.90625 75.65625 210.90625 76.753906 C 210.90625 77.847656 211.796875 78.738281 212.890625 78.738281 C 213.988281 78.738281 214.878906 77.847656 214.878906 76.753906 Z M 214.878906 76.753906 "/>
</svg>

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,173 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="170.236" height="104.137" viewBox="0 0 170.236 104.137">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 7.453125 -5.25 C 7.453125 -6.015625 6.796875 -6.75 5.5 -6.75 L 2.296875 -6.75 C 2.109375 -6.75 2 -6.75 2 -6.5625 C 2 -6.4375 2.09375 -6.4375 2.296875 -6.4375 C 2.421875 -6.4375 2.59375 -6.421875 2.71875 -6.421875 C 2.875 -6.40625 2.9375 -6.375 2.9375 -6.265625 C 2.9375 -6.21875 2.921875 -6.1875 2.890625 -6.078125 L 1.5625 -0.765625 C 1.46875 -0.390625 1.453125 -0.3125 0.671875 -0.3125 C 0.5 -0.3125 0.390625 -0.3125 0.390625 -0.125 C 0.390625 0 0.515625 0 0.546875 0 L 1.796875 -0.03125 L 2.421875 -0.015625 C 2.640625 -0.015625 2.859375 0 3.078125 0 C 3.140625 0 3.265625 0 3.265625 -0.203125 C 3.265625 -0.3125 3.1875 -0.3125 2.984375 -0.3125 C 2.625 -0.3125 2.34375 -0.3125 2.34375 -0.484375 C 2.34375 -0.546875 2.375 -0.59375 2.375 -0.65625 L 2.984375 -3.125 L 4.671875 -3.125 C 6.078125 -3.125 7.453125 -4.140625 7.453125 -5.25 Z M 6.53125 -5.484375 C 6.53125 -5.109375 6.328125 -4.25 5.9375 -3.90625 C 5.453125 -3.453125 4.859375 -3.375 4.421875 -3.375 L 3.03125 -3.375 L 3.703125 -6.0625 C 3.796875 -6.40625 3.8125 -6.4375 4.234375 -6.4375 L 5.1875 -6.4375 C 6 -6.4375 6.53125 -6.171875 6.53125 -5.484375 Z M 6.53125 -5.484375 "/>
</g>
<g id="glyph-0-1">
<path d="M 3.90625 -1.53125 C 3.90625 -1.890625 3.71875 -2.140625 3.609375 -2.25 C 3.34375 -2.53125 3.046875 -2.578125 2.609375 -2.671875 C 2.265625 -2.75 1.859375 -2.8125 1.859375 -3.265625 C 1.859375 -3.546875 2.109375 -4.140625 2.96875 -4.140625 C 3.21875 -4.140625 3.71875 -4.078125 3.859375 -3.6875 C 3.578125 -3.6875 3.390625 -3.46875 3.390625 -3.25 C 3.390625 -3.109375 3.46875 -2.96875 3.6875 -2.96875 C 3.90625 -2.96875 4.140625 -3.125 4.140625 -3.515625 C 4.140625 -3.953125 3.71875 -4.359375 2.96875 -4.359375 C 1.671875 -4.359375 1.296875 -3.359375 1.296875 -2.921875 C 1.296875 -2.15625 2.03125 -2 2.328125 -1.953125 C 2.828125 -1.84375 3.34375 -1.734375 3.34375 -1.1875 C 3.34375 -0.9375 3.125 -0.109375 1.9375 -0.109375 C 1.796875 -0.109375 1.03125 -0.109375 0.8125 -0.625 C 1.1875 -0.578125 1.4375 -0.875 1.4375 -1.15625 C 1.4375 -1.375 1.28125 -1.5 1.0625 -1.5 C 0.8125 -1.5 0.515625 -1.296875 0.515625 -0.84375 C 0.515625 -0.28125 1.078125 0.109375 1.921875 0.109375 C 3.53125 0.109375 3.90625 -1.09375 3.90625 -1.53125 Z M 3.90625 -1.53125 "/>
</g>
<g id="glyph-0-2">
<path d="M 10.34375 -6.640625 C 10.34375 -6.671875 10.3125 -6.75 10.234375 -6.75 C 10 -6.75 9.71875 -6.71875 9.46875 -6.71875 C 9.140625 -6.71875 8.765625 -6.75 8.4375 -6.75 C 8.390625 -6.75 8.25 -6.75 8.25 -6.5625 C 8.25 -6.453125 8.34375 -6.4375 8.40625 -6.4375 C 8.640625 -6.421875 8.984375 -6.34375 8.984375 -6.046875 C 8.984375 -5.9375 8.9375 -5.859375 8.859375 -5.734375 L 6.1875 -1.078125 L 5.828125 -5.96875 C 5.8125 -6.171875 5.796875 -6.421875 6.515625 -6.4375 C 6.6875 -6.4375 6.78125 -6.4375 6.78125 -6.640625 C 6.78125 -6.734375 6.671875 -6.75 6.640625 -6.75 C 6.234375 -6.75 5.828125 -6.71875 5.4375 -6.71875 C 5.203125 -6.71875 4.625 -6.75 4.390625 -6.75 C 4.328125 -6.75 4.203125 -6.75 4.203125 -6.546875 C 4.203125 -6.4375 4.3125 -6.4375 4.4375 -6.4375 C 4.875 -6.4375 4.953125 -6.375 4.96875 -6.1875 L 5.03125 -5.4375 L 2.53125 -1.078125 L 2.15625 -6.078125 C 2.15625 -6.203125 2.15625 -6.421875 2.90625 -6.4375 C 3 -6.4375 3.109375 -6.4375 3.109375 -6.640625 C 3.109375 -6.75 2.96875 -6.75 2.96875 -6.75 C 2.578125 -6.75 2.15625 -6.71875 1.75 -6.71875 C 1.40625 -6.71875 1.0625 -6.75 0.71875 -6.75 C 0.671875 -6.75 0.546875 -6.75 0.546875 -6.5625 C 0.546875 -6.4375 0.625 -6.4375 0.796875 -6.4375 C 1.28125 -6.4375 1.296875 -6.34375 1.3125 -6.078125 L 1.75 -0.046875 C 1.765625 0.140625 1.78125 0.21875 1.921875 0.21875 C 2.03125 0.21875 2.0625 0.15625 2.15625 0.015625 L 5.0625 -5.03125 L 5.421875 -0.046875 C 5.4375 0.171875 5.453125 0.21875 5.578125 0.21875 C 5.703125 0.21875 5.765625 0.125 5.8125 0.03125 L 9.0625 -5.59375 C 9.296875 -6.03125 9.546875 -6.390625 10.15625 -6.4375 C 10.25 -6.453125 10.34375 -6.453125 10.34375 -6.640625 Z M 10.34375 -6.640625 "/>
</g>
<g id="glyph-0-3">
<path d="M 6.828125 -3.671875 C 6.828125 -4.21875 6.5625 -4.359375 6.390625 -4.359375 C 6.140625 -4.359375 5.890625 -4.109375 5.890625 -3.890625 C 5.890625 -3.765625 5.953125 -3.703125 6.046875 -3.625 C 6.15625 -3.515625 6.40625 -3.265625 6.40625 -2.78125 C 6.40625 -2.453125 6.109375 -1.484375 5.859375 -0.984375 C 5.59375 -0.453125 5.25 -0.109375 4.765625 -0.109375 C 4.3125 -0.109375 4.03125 -0.40625 4.03125 -0.96875 C 4.03125 -1.25 4.109375 -1.546875 4.140625 -1.6875 L 4.5625 -3.34375 C 4.609375 -3.5625 4.703125 -3.9375 4.703125 -3.984375 C 4.703125 -4.171875 4.578125 -4.25 4.421875 -4.25 C 4.3125 -4.25 4.125 -4.171875 4.0625 -3.984375 C 4.03125 -3.90625 3.5625 -2.03125 3.5 -1.765625 C 3.421875 -1.46875 3.40625 -1.296875 3.40625 -1.109375 C 3.40625 -1 3.40625 -0.984375 3.421875 -0.9375 C 3.1875 -0.421875 2.890625 -0.109375 2.515625 -0.109375 C 1.71875 -0.109375 1.71875 -0.84375 1.71875 -1 C 1.71875 -1.328125 1.765625 -1.703125 2.234375 -2.921875 C 2.34375 -3.21875 2.40625 -3.359375 2.40625 -3.5625 C 2.40625 -4 2.078125 -4.359375 1.59375 -4.359375 C 0.65625 -4.359375 0.28125 -2.9375 0.28125 -2.84375 C 0.28125 -2.75 0.40625 -2.75 0.40625 -2.75 C 0.5 -2.75 0.515625 -2.765625 0.5625 -2.921875 C 0.828125 -3.84375 1.21875 -4.140625 1.5625 -4.140625 C 1.65625 -4.140625 1.8125 -4.140625 1.8125 -3.828125 C 1.8125 -3.578125 1.703125 -3.296875 1.625 -3.125 C 1.1875 -1.96875 1.078125 -1.515625 1.078125 -1.140625 C 1.078125 -0.234375 1.734375 0.109375 2.484375 0.109375 C 2.640625 0.109375 3.109375 0.109375 3.5 -0.578125 C 3.765625 0.046875 4.4375 0.109375 4.734375 0.109375 C 5.484375 0.109375 5.921875 -0.515625 6.171875 -1.109375 C 6.5 -1.875 6.828125 -3.203125 6.828125 -3.671875 Z M 6.828125 -3.671875 "/>
</g>
<g id="glyph-0-4">
<path d="M 5.359375 -1.40625 C 5.359375 -1.515625 5.265625 -1.515625 5.25 -1.515625 C 5.140625 -1.515625 5.140625 -1.46875 5.109375 -1.328125 C 4.96875 -0.78125 4.78125 -0.109375 4.359375 -0.109375 C 4.15625 -0.109375 4.0625 -0.234375 4.0625 -0.5625 C 4.0625 -0.78125 4.171875 -1.25 4.25 -1.59375 L 4.53125 -2.65625 C 4.5625 -2.796875 4.65625 -3.1875 4.703125 -3.328125 C 4.75 -3.5625 4.84375 -3.9375 4.84375 -3.984375 C 4.84375 -4.171875 4.703125 -4.25 4.5625 -4.25 C 4.515625 -4.25 4.25 -4.25 4.171875 -3.90625 L 3.4375 -0.9375 C 3.421875 -0.90625 3.03125 -0.109375 2.3125 -0.109375 C 1.796875 -0.109375 1.703125 -0.546875 1.703125 -0.921875 C 1.703125 -1.46875 1.96875 -2.25 2.234375 -2.9375 C 2.34375 -3.234375 2.40625 -3.375 2.40625 -3.5625 C 2.40625 -4 2.078125 -4.359375 1.59375 -4.359375 C 0.65625 -4.359375 0.28125 -2.9375 0.28125 -2.84375 C 0.28125 -2.75 0.40625 -2.75 0.40625 -2.75 C 0.5 -2.75 0.515625 -2.765625 0.5625 -2.921875 C 0.8125 -3.78125 1.1875 -4.140625 1.5625 -4.140625 C 1.65625 -4.140625 1.8125 -4.140625 1.8125 -3.828125 C 1.8125 -3.578125 1.703125 -3.296875 1.640625 -3.15625 C 1.28125 -2.171875 1.0625 -1.5625 1.0625 -1.078125 C 1.0625 -0.140625 1.75 0.109375 2.28125 0.109375 C 2.9375 0.109375 3.28125 -0.328125 3.453125 -0.546875 C 3.5625 -0.140625 3.90625 0.109375 4.328125 0.109375 C 4.6875 0.109375 4.90625 -0.125 5.0625 -0.4375 C 5.234375 -0.796875 5.359375 -1.40625 5.359375 -1.40625 Z M 5.359375 -1.40625 "/>
</g>
<g id="glyph-0-5">
<path d="M 4.296875 -1.40625 C 4.296875 -1.46875 4.25 -1.515625 4.171875 -1.515625 C 4.09375 -1.515625 4.0625 -1.453125 4.03125 -1.375 C 3.8125 -0.734375 3.1875 -0.546875 2.859375 -0.546875 C 2.65625 -0.546875 2.484375 -0.609375 2.265625 -0.6875 C 1.9375 -0.8125 1.78125 -0.84375 1.578125 -0.84375 C 1.578125 -0.84375 1.40625 -0.84375 1.3125 -0.8125 C 1.84375 -1.390625 2.140625 -1.640625 2.484375 -1.953125 C 2.484375 -1.953125 3.09375 -2.484375 3.453125 -2.828125 C 4.390625 -3.75 4.609375 -4.21875 4.609375 -4.265625 C 4.609375 -4.359375 4.5 -4.359375 4.5 -4.359375 C 4.4375 -4.359375 4.40625 -4.34375 4.359375 -4.25 C 4.0625 -3.78125 3.84375 -3.625 3.609375 -3.625 C 3.375 -3.625 3.265625 -3.765625 3.109375 -3.9375 C 2.921875 -4.171875 2.75 -4.359375 2.421875 -4.359375 C 1.6875 -4.359375 1.234375 -3.453125 1.234375 -3.234375 C 1.234375 -3.1875 1.265625 -3.125 1.359375 -3.125 C 1.4375 -3.125 1.46875 -3.1875 1.484375 -3.234375 C 1.671875 -3.6875 2.234375 -3.703125 2.328125 -3.703125 C 2.53125 -3.703125 2.71875 -3.640625 2.9375 -3.5625 C 3.34375 -3.40625 3.453125 -3.40625 3.703125 -3.40625 C 3.34375 -2.984375 2.515625 -2.265625 2.328125 -2.109375 L 1.4375 -1.28125 C 0.765625 -0.625 0.421875 -0.0625 0.421875 0.015625 C 0.421875 0.109375 0.546875 0.109375 0.546875 0.109375 C 0.625 0.109375 0.640625 0.09375 0.703125 -0.015625 C 0.921875 -0.359375 1.21875 -0.625 1.546875 -0.625 C 1.765625 -0.625 1.859375 -0.546875 2.109375 -0.25 C 2.28125 -0.046875 2.453125 0.109375 2.75 0.109375 C 3.71875 0.109375 4.296875 -1.140625 4.296875 -1.40625 Z M 4.296875 -1.40625 "/>
</g>
<g id="glyph-0-6">
<path d="M 4.625 -3.671875 C 4.625 -4.203125 4.359375 -4.359375 4.1875 -4.359375 C 3.9375 -4.359375 3.703125 -4.109375 3.703125 -3.890625 C 3.703125 -3.765625 3.75 -3.703125 3.859375 -3.59375 C 4.0625 -3.390625 4.203125 -3.140625 4.203125 -2.78125 C 4.203125 -2.375 3.59375 -0.109375 2.4375 -0.109375 C 1.9375 -0.109375 1.703125 -0.453125 1.703125 -0.96875 C 1.703125 -1.515625 1.96875 -2.234375 2.28125 -3.0625 C 2.34375 -3.234375 2.40625 -3.375 2.40625 -3.5625 C 2.40625 -4 2.078125 -4.359375 1.59375 -4.359375 C 0.65625 -4.359375 0.28125 -2.9375 0.28125 -2.84375 C 0.28125 -2.75 0.40625 -2.75 0.40625 -2.75 C 0.5 -2.75 0.515625 -2.765625 0.5625 -2.921875 C 0.84375 -3.921875 1.28125 -4.140625 1.5625 -4.140625 C 1.640625 -4.140625 1.8125 -4.140625 1.8125 -3.828125 C 1.8125 -3.578125 1.703125 -3.3125 1.640625 -3.140625 C 1.203125 -2 1.078125 -1.546875 1.078125 -1.109375 C 1.078125 -0.046875 1.953125 0.109375 2.40625 0.109375 C 4.0625 0.109375 4.625 -3.15625 4.625 -3.671875 Z M 4.625 -3.671875 "/>
</g>
<g id="glyph-1-0">
<path d="M 4.984375 -1.71875 C 4.984375 -1.75 4.984375 -1.828125 4.875 -1.828125 C 4.796875 -1.828125 4.78125 -1.78125 4.734375 -1.671875 C 4.46875 -1.015625 4.171875 -0.25 2.90625 -0.25 L 2.125 -0.25 C 1.90625 -0.25 1.890625 -0.25 1.890625 -0.3125 C 1.890625 -0.3125 1.890625 -0.359375 1.921875 -0.46875 L 2.859375 -4.15625 C 2.921875 -4.40625 2.9375 -4.484375 3.578125 -4.484375 C 3.78125 -4.484375 3.859375 -4.484375 3.859375 -4.625 C 3.859375 -4.625 3.84375 -4.734375 3.734375 -4.734375 C 3.578125 -4.734375 3.390625 -4.71875 3.21875 -4.703125 L 2.1875 -4.703125 C 2.046875 -4.703125 1.875 -4.734375 1.75 -4.734375 C 1.703125 -4.734375 1.59375 -4.734375 1.59375 -4.578125 C 1.59375 -4.484375 1.6875 -4.484375 1.828125 -4.484375 C 1.828125 -4.484375 1.953125 -4.484375 2.078125 -4.46875 C 2.234375 -4.453125 2.25 -4.4375 2.25 -4.375 C 2.25 -4.375 2.25 -4.3125 2.21875 -4.21875 L 1.296875 -0.546875 C 1.234375 -0.296875 1.21875 -0.25 0.6875 -0.25 C 0.5625 -0.25 0.484375 -0.25 0.484375 -0.109375 C 0.484375 0 0.5625 0 0.6875 0 L 4.171875 0 C 4.34375 0 4.34375 0 4.40625 -0.140625 C 4.46875 -0.328125 4.984375 -1.671875 4.984375 -1.71875 Z M 4.984375 -1.71875 "/>
</g>
<g id="glyph-2-0">
<path d="M 3.265625 2.375 C 3.265625 2.34375 3.265625 2.328125 3.09375 2.15625 C 1.859375 0.90625 1.546875 -0.953125 1.546875 -2.46875 C 1.546875 -4.1875 1.921875 -5.90625 3.140625 -7.140625 C 3.265625 -7.265625 3.265625 -7.28125 3.265625 -7.3125 C 3.265625 -7.375 3.234375 -7.40625 3.171875 -7.40625 C 3.078125 -7.40625 2.1875 -6.734375 1.59375 -5.484375 C 1.09375 -4.390625 0.984375 -3.296875 0.984375 -2.46875 C 0.984375 -1.703125 1.09375 -0.5 1.625 0.609375 C 2.21875 1.828125 3.078125 2.46875 3.171875 2.46875 C 3.234375 2.46875 3.265625 2.4375 3.265625 2.375 Z M 3.265625 2.375 "/>
</g>
<g id="glyph-2-1">
<path d="M 2.859375 -2.46875 C 2.859375 -3.234375 2.75 -4.4375 2.203125 -5.546875 C 1.609375 -6.765625 0.765625 -7.40625 0.65625 -7.40625 C 0.609375 -7.40625 0.5625 -7.359375 0.5625 -7.3125 C 0.5625 -7.28125 0.5625 -7.265625 0.75 -7.078125 C 1.71875 -6.109375 2.28125 -4.53125 2.28125 -2.46875 C 2.28125 -0.78125 1.921875 0.953125 0.6875 2.203125 C 0.5625 2.328125 0.5625 2.34375 0.5625 2.375 C 0.5625 2.421875 0.609375 2.46875 0.65625 2.46875 C 0.765625 2.46875 1.65625 1.796875 2.234375 0.546875 C 2.734375 -0.546875 2.859375 -1.640625 2.859375 -2.46875 Z M 2.859375 -2.46875 "/>
</g>
<g id="glyph-3-0">
<path d="M 3.5 -1.265625 L 3.265625 -1.265625 C 3.234375 -1.109375 3.171875 -0.703125 3.078125 -0.625 C 3.03125 -0.59375 2.484375 -0.59375 2.390625 -0.59375 L 1.125 -0.59375 C 1.84375 -1.234375 2.09375 -1.421875 2.5 -1.75 C 3.015625 -2.15625 3.5 -2.59375 3.5 -3.25 C 3.5 -4.078125 2.765625 -4.59375 1.875 -4.59375 C 1.015625 -4.59375 0.4375 -4 0.4375 -3.359375 C 0.4375 -3 0.734375 -2.96875 0.796875 -2.96875 C 0.96875 -2.96875 1.171875 -3.09375 1.171875 -3.34375 C 1.171875 -3.453125 1.125 -3.703125 0.765625 -3.703125 C 0.96875 -4.1875 1.453125 -4.34375 1.765625 -4.34375 C 2.46875 -4.34375 2.828125 -3.8125 2.828125 -3.25 C 2.828125 -2.640625 2.390625 -2.171875 2.171875 -1.921875 L 0.5 -0.265625 C 0.4375 -0.203125 0.4375 -0.1875 0.4375 0 L 3.28125 0 Z M 3.5 -1.265625 "/>
</g>
<g id="glyph-3-1">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.015625 -0.25 C 2.3125 -0.25 2.3125 -0.34375 2.3125 -0.5625 L 2.3125 -4.40625 C 2.3125 -4.59375 2.3125 -4.59375 2.109375 -4.59375 C 1.671875 -4.15625 1.03125 -4.15625 0.75 -4.15625 L 0.75 -3.90625 C 0.921875 -3.90625 1.375 -3.90625 1.765625 -4.09375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.0625 -0.25 L 0.796875 -0.25 L 0.796875 0 L 2.03125 -0.03125 Z M 3.28125 0 "/>
</g>
<g id="glyph-4-0">
<path d="M 8.046875 -2.96875 C 8.046875 -3.1875 7.859375 -3.1875 7.671875 -3.1875 L 4.5 -3.1875 L 4.5 -6.359375 C 4.5 -6.53125 4.5 -6.734375 4.296875 -6.734375 C 4.09375 -6.734375 4.09375 -6.53125 4.09375 -6.359375 L 4.09375 -3.1875 L 0.921875 -3.1875 C 0.75 -3.1875 0.546875 -3.1875 0.546875 -2.984375 C 0.546875 -2.765625 0.734375 -2.765625 0.921875 -2.765625 L 4.09375 -2.765625 L 4.09375 0.390625 C 4.09375 0.5625 4.09375 0.765625 4.296875 0.765625 C 4.5 0.765625 4.5 0.578125 4.5 0.390625 L 4.5 -2.765625 L 7.671875 -2.765625 C 7.84375 -2.765625 8.046875 -2.765625 8.046875 -2.96875 Z M 8.046875 -2.96875 "/>
</g>
<g id="glyph-5-0">
<path d="M 6.859375 -2.46875 C 6.859375 -2.671875 6.671875 -2.671875 6.53125 -2.671875 L 1.140625 -2.671875 C 1 -2.671875 0.8125 -2.671875 0.8125 -2.46875 C 0.8125 -2.265625 1 -2.265625 1.140625 -2.265625 L 6.53125 -2.265625 C 6.671875 -2.265625 6.859375 -2.265625 6.859375 -2.46875 Z M 6.859375 -2.46875 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 0.320312 68 L 31 68 L 31 70 L 0.320312 70 Z M 0.320312 68 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 0.320312 38 L 31 38 L 31 40 L 0.320312 40 Z M 0.320312 38 "/>
</clipPath>
<clipPath id="clip-2">
<path clip-rule="nonzero" d="M 0.320312 49 L 99 49 L 99 91 L 0.320312 91 Z M 0.320312 49 "/>
</clipPath>
<clipPath id="clip-3">
<path clip-rule="nonzero" d="M 148 23 L 169.15625 23 L 169.15625 55 L 148 55 Z M 148 23 "/>
</clipPath>
<clipPath id="clip-4">
<path clip-rule="nonzero" d="M 148 53 L 169.15625 53 L 169.15625 85 L 148 85 Z M 148 53 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(89.99939%, 89.99939%, 89.99939%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -63.778967 -42.521687 L 63.781175 -42.521687 L 63.781175 42.521033 L -63.778967 42.521033 Z M -63.778967 -42.521687 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="72.451965" y="11.199191"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="78.795396" y="12.680911"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="84.710378" y="11.199191"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="88.552989" y="11.199191"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="93.185069" y="11.199191"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -49.607806 -19.941569 L -16.669113 -19.941569 L -16.669113 2.733077 L -49.607806 2.733077 Z M -49.607806 -19.941569 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="38.833567" y="71.124579"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="48.166225" y="72.6063"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="52.598494" y="71.124579"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="56.441105" y="71.124579"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="61.073185" y="71.124579"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -49.607806 10.169194 L -16.669113 10.169194 L -16.669113 32.847778 L -49.607806 32.847778 Z M -49.607806 10.169194 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="38.833567" y="41.259079"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-1" x="48.166225" y="42.7408"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-0" x="52.598494" y="41.259079"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="56.441105" y="41.259079"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="61.073185" y="41.259079"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 20.456336 21.508486 C 20.456336 25.360458 17.333009 28.483785 13.481037 28.483785 C 9.629065 28.483785 6.505738 25.360458 6.505738 21.508486 C 6.505738 17.656514 9.629065 14.537126 13.481037 14.537126 C 17.333009 14.537126 20.456336 17.656514 20.456336 21.508486 Z M 20.456336 21.508486 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="93.807985" y="41.681578"/>
</g>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 48.802596 -8.602277 C 48.802596 -4.754243 45.679269 -1.630916 41.827297 -1.630916 C 37.975325 -1.630916 34.855937 -4.754243 34.855937 -8.602277 C 34.855937 -12.454249 37.975325 -15.577576 41.827297 -15.577576 C 45.679269 -15.577576 48.802596 -12.454249 48.802596 -8.602277 Z M 48.802596 -8.602277 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-0" x="121.921008" y="71.547078"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-0" x="128.198981" y="58.938567"/>
</g>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -84.121948 -8.602277 L -54.73983 -8.602277 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.055144 0.00191328 L 1.60844 1.683705 L 3.089362 0.00191328 L 1.60844 -1.683817 Z M 6.055144 0.00191328 " transform="matrix(0.991781, 0, 0, -0.991781, 27.635249, 68.654241)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="5.098137" y="63.384721"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-0" x="12.171519" y="64.867433"/>
</g>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -84.121948 21.508486 L -54.73983 21.508486 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.055144 -0.000703674 L 1.60844 1.681088 L 3.089362 -0.000703674 L 1.60844 -1.682495 Z M 6.055144 -0.000703674 " transform="matrix(0.991781, 0, 0, -0.991781, 27.635249, 38.788365)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="5.098137" y="33.519221"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-1" x="12.171519" y="35.001933"/>
</g>
<g clip-path="url(#clip-2)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -84.121948 -30.115029 L 13.481037 -30.115029 L 13.481037 9.901368 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052063 0.000393394 L 1.609298 1.682185 L 3.086281 0.000393394 L 1.609298 -1.681398 Z M 6.052063 0.000393394 " transform="matrix(0, -0.991781, -0.991781, 0, 98.109765, 53.115602)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-4" x="5.098137" y="86.198658"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -16.168908 -8.602277 L 30.220179 -8.602277 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.051834 0.00191328 L 1.609069 1.683705 L 3.086052 0.00191328 L 1.609069 -1.683817 Z M 6.051834 0.00191328 " transform="matrix(0.991781, 0, 0, -0.991781, 111.896344, 68.654241)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -16.168908 21.508486 L 1.873918 21.508486 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.052354 -0.000703674 L 1.609588 1.681088 L 3.086572 -0.000703674 L 1.609588 -1.682495 Z M 6.052354 -0.000703674 " transform="matrix(0.991781, 0, 0, -0.991781, 83.782547, 38.788365)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 20.456336 21.508486 L 79.488398 21.508486 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 166.761719 38.789062 L 162.355469 37.121094 L 163.820312 38.789062 L 162.355469 40.457031 Z M 166.761719 38.789062 "/>
<g clip-path="url(#clip-3)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.053263 -0.000703674 L 1.610498 1.681088 L 3.087481 -0.000703674 L 1.610498 -1.682495 Z M 6.053263 -0.000703674 " transform="matrix(0.991781, 0, 0, -0.991781, 160.758207, 38.788365)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-5" x="159.350821" y="35.001933"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 48.802596 -8.602277 L 79.488398 -8.602277 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 166.761719 68.652344 L 162.355469 66.984375 L 163.820312 68.652344 L 162.355469 70.324219 Z M 166.761719 68.652344 "/>
<g clip-path="url(#clip-4)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.053263 0.00191328 L 1.610498 1.683705 L 3.087481 0.00191328 L 1.610498 -1.683817 Z M 6.053263 0.00191328 " transform="matrix(0.991781, 0, 0, -0.991781, 160.758207, 68.654241)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-6" x="159.236766" y="64.867433"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 41.827297 21.508486 L 41.827297 3.004841 " transform="matrix(0.991781, 0, 0, -0.991781, 84.73914, 60.12077)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054792 -0.000932879 L 1.608089 1.684797 L 3.08901 -0.000932879 L 1.608089 -1.682724 Z M 6.054792 -0.000932879 " transform="matrix(0, 0.991781, 0.991781, 0, 126.223581, 54.327003)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 128.199219 38.789062 C 128.199219 37.695312 127.316406 36.8125 126.222656 36.8125 C 125.132812 36.8125 124.246094 37.695312 124.246094 38.789062 C 124.246094 39.878906 125.132812 40.765625 126.222656 40.765625 C 127.316406 40.765625 128.199219 39.878906 128.199219 38.789062 Z M 128.199219 38.789062 "/>
</svg>

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

View File

@ -143,7 +143,7 @@ The output $\hat{x}$ is linked to the inputs by eqref:eq:detail_control_closed_l
\hat{x} = \underbrace{\frac{1}{1 + L(s)}}_{S(s)} \hat{x}_1 + \underbrace{\frac{L(s)}{1 + L(s)}}_{T(s)} \hat{x}_2 \hat{x} = \underbrace{\frac{1}{1 + L(s)}}_{S(s)} \hat{x}_1 + \underbrace{\frac{L(s)}{1 + L(s)}}_{T(s)} \hat{x}_2
\end{equation} \end{equation}
As for any classical feedback architecture, we have that the sum of the sensitivity transfer function $S(s)$ and complementary sensitivity transfer function $T_(s)$ is equal to one eqref:eq:detail_control_sensitivity_sum. As for any classical feedback architecture, we have that the sum of the sensitivity trancfer function $S(s)$ and complementary sensitivity trancfer function $T_(s)$ is equal to one eqref:eq:detail_control_sensitivity_sum.
\begin{equation}\label{eq:detail_control_sensitivity_sum} \begin{equation}\label{eq:detail_control_sensitivity_sum}
S(s) + T(s) = 1 S(s) + T(s) = 1
@ -209,7 +209,7 @@ The output of the synthesis is a filter $L(s)$ such that the "closed-loop" $\mat
\left\| \begin{matrix} \frac{z}{w_1} \\ \frac{z}{w_2} \end{matrix} \right\|_\infty = \left\| \begin{matrix} \frac{1}{1 + L(s)} W_1(s) \\ \frac{L(s)}{1 + L(s)} W_2(s) \end{matrix} \right\|_\infty \le 1 \left\| \begin{matrix} \frac{z}{w_1} \\ \frac{z}{w_2} \end{matrix} \right\|_\infty = \left\| \begin{matrix} \frac{1}{1 + L(s)} W_1(s) \\ \frac{L(s)}{1 + L(s)} W_2(s) \end{matrix} \right\|_\infty \le 1
\end{equation} \end{equation}
If the synthesis is successful, the transfer functions from $\hat{x}_1$ to $\hat{x}$ and from $\hat{x}_2$ to $\hat{x}$ have their magnitude bounded by the inverse magnitude of the corresponding weighting functions. If the synthesis is succescful, the trancfer functions from $\hat{x}_1$ to $\hat{x}$ and from $\hat{x}_2$ to $\hat{x}$ have their magnitude bounded by the inverse magnitude of the corresponding weighting functions.
The sensor fusion can then be implemented using the feedback architecture in Figure ref:fig:detail_control_feedback_sensor_fusion_arch or more classically as shown in Figure ref:fig:detail_control_sensor_fusion_overview by defining the two complementary filters using eqref:eq:detail_control_comp_filters_feedback. The sensor fusion can then be implemented using the feedback architecture in Figure ref:fig:detail_control_feedback_sensor_fusion_arch or more classically as shown in Figure ref:fig:detail_control_sensor_fusion_overview by defining the two complementary filters using eqref:eq:detail_control_comp_filters_feedback.
The two architectures are equivalent regarding their inputs/outputs relationships. The two architectures are equivalent regarding their inputs/outputs relationships.
@ -290,7 +290,7 @@ The two architectures are equivalent regarding their inputs/outputs relationship
As an example, two "closed-loop" complementary filters are designed using the $\mathcal{H}_\infty$ mixed-sensitivity synthesis. As an example, two "closed-loop" complementary filters are designed using the $\mathcal{H}_\infty$ mixed-sensitivity synthesis.
The weighting functions are designed using formula eqref:eq:detail_control_weight_formula with parameters shown in Table ref:tab:detail_control_weights_params. The weighting functions are designed using formula eqref:eq:detail_control_weight_formula with parameters shown in Table ref:tab:detail_control_weights_params.
After synthesis, a filter $L(s)$ is obtained whose magnitude is shown in Figure ref:fig:detail_control_hinf_filters_results_mixed_sensitivity by the black dashed line. After synthesis, a filter $L(s)$ is obtained whose magnitude is shown in Figure ref:fig:detail_control_hinf_filters_results_mixed_sensitivity by the black dashed line.
The "closed-loop" complementary filters are compared with the inverse magnitude of the weighting functions in Figure ref:fig:detail_control_hinf_filters_results_mixed_sensitivity confirming that the synthesis is successful. The "closed-loop" complementary filters are compared with the inverse magnitude of the weighting functions in Figure ref:fig:detail_control_hinf_filters_results_mixed_sensitivity confirming that the synthesis is succescful.
The obtained "closed-loop" complementary filters are indeed equal to the ones obtained in Section ref:ssec:detail_control_hinf_method. The obtained "closed-loop" complementary filters are indeed equal to the ones obtained in Section ref:ssec:detail_control_hinf_method.
#+begin_src matlab #+begin_src matlab
@ -436,7 +436,7 @@ disp(J_CoM);
M = diag([m, m, I]); M = diag([m, m, I]);
K_struts = diag([k, k, k]); K_struts = diag([k, k, k]);
% Transform stiffness and damping to Cartesian space % Trancform stiffness and damping to Cartesian space
K = J_CoM' * K_struts * J_CoM; K = J_CoM' * K_struts * J_CoM;
disp('Mass Matrix (M):'); disp('Mass Matrix (M):');
@ -810,15 +810,15 @@ Or html version: https://research.tdehaeze.xyz/stewart-simscape/docs/bibliograph
When controlling a MIMO system (specifically parallel manipulator such as the Stewart platform?) When controlling a MIMO system (specifically parallel manipulator such as the Stewart platform?)
Several considerations: Several considerations:
- Section ref:sec:detail_control_multiple_sensor: How to most effectively use/combine multiple sensors - Section ref:sec:detail_control_sensor: How to most effectively use/combine multiple sensors
- Section ref:sec:detail_control_decoupling: How to decouple a system - Section ref:sec:detail_control_decoupling: How to decouple a system
- Section ref:sec:detail_control_optimization: How to design the controller - Section ref:sec:detail_control_cf: How to design the controller
* Multiple Sensor Control * Multiple Sensor Control
:PROPERTIES: :PROPERTIES:
:HEADER-ARGS:matlab+: :tangle matlab/detail_control_1_complementary_filtering.m :HEADER-ARGS:matlab+: :tangle matlab/detail_control_1_complementary_filtering.m
:END: :END:
<<sec:detail_control_multiple_sensor>> <<sec:detail_control_sensor>>
# file:~/Cloud/research/papers/published/dehaeze19_compl_filter_shapin_using_synth/index.org # file:~/Cloud/research/papers/published/dehaeze19_compl_filter_shapin_using_synth/index.org
# [[file:~/Cloud/research/papers/dehaeze21_desig_compl_filte/journal/dehaeze21_desig_compl_filte.org][file:~/Cloud/research/papers/dehaeze21_desig_compl_filte/journal/dehaeze21_desig_compl_filte.org]] # [[file:~/Cloud/research/papers/dehaeze21_desig_compl_filte/journal/dehaeze21_desig_compl_filte.org][file:~/Cloud/research/papers/dehaeze21_desig_compl_filte/journal/dehaeze21_desig_compl_filte.org]]
@ -1035,7 +1035,7 @@ For sensor fusion applications, both methods are sharing many relationships [[ci
However, for Kalman filtering, assumptions must be made about the probabilistic character of the sensor noises [[cite:&robert12_introd_random_signal_applied_kalman]] whereas it is not the case with complementary filters. However, for Kalman filtering, assumptions must be made about the probabilistic character of the sensor noises [[cite:&robert12_introd_random_signal_applied_kalman]] whereas it is not the case with complementary filters.
Furthermore, the advantages of complementary filters over Kalman filtering for sensor fusion are their general applicability, their low computational cost [[cite:&higgins75_compar_compl_kalman_filter]], and the fact that they are intuitive as their effects can be easily interpreted in the frequency domain. Furthermore, the advantages of complementary filters over Kalman filtering for sensor fusion are their general applicability, their low computational cost [[cite:&higgins75_compar_compl_kalman_filter]], and the fact that they are intuitive as their effects can be easily interpreted in the frequency domain.
A set of filters is said to be complementary if the sum of their transfer functions is equal to one at all frequencies. A set of filters is said to be complementary if the sum of their trancfer functions is equal to one at all frequencies.
In the early days of complementary filtering, analog circuits were employed to physically realize the filters [[cite:&anderson53_instr_approac_system_steer_comput]]. In the early days of complementary filtering, analog circuits were employed to physically realize the filters [[cite:&anderson53_instr_approac_system_steer_comput]].
Analog complementary filters are still used today [[cite:&yong16_high_speed_vertic_posit_stage;&moore19_capac_instr_sensor_fusion_high_bandw_nanop]], but most of the time they are now implemented digitally as it allows for much more flexibility. Analog complementary filters are still used today [[cite:&yong16_high_speed_vertic_posit_stage;&moore19_capac_instr_sensor_fusion_high_bandw_nanop]], but most of the time they are now implemented digitally as it allows for much more flexibility.
@ -1139,7 +1139,7 @@ This means that the super sensor provides an estimate $\hat{x}$ of $x$ which can
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_sensor_fusion_overview.png]] [[file:figs/detail_control_sensor_fusion_overview.png]]
The complementary property of filters $H_1(s)$ and $H_2(s)$ implies that the sum of their transfer functions is equal to one eqref:eq:detail_control_sensor_comp_filter. The complementary property of filters $H_1(s)$ and $H_2(s)$ implies that the sum of their trancfer functions is equal to one eqref:eq:detail_control_sensor_comp_filter.
That is, unity magnitude and zero phase at all frequencies. That is, unity magnitude and zero phase at all frequencies.
\begin{equation}\label{eq:detail_control_sensor_comp_filter} \begin{equation}\label{eq:detail_control_sensor_comp_filter}
@ -1156,7 +1156,7 @@ Before filtering the sensor outputs $\tilde{x}_i$ by the complementary filters,
This normalization consists of using an estimate $\hat{G}_i(s)$ of the sensor dynamics $G_i(s)$, and filtering the sensor output by the inverse of this estimate $\hat{G}_i^{-1}(s)$ as shown in Figure ref:fig:detail_control_sensor_model_calibrated. This normalization consists of using an estimate $\hat{G}_i(s)$ of the sensor dynamics $G_i(s)$, and filtering the sensor output by the inverse of this estimate $\hat{G}_i^{-1}(s)$ as shown in Figure ref:fig:detail_control_sensor_model_calibrated.
It is here supposed that the sensor inverse $\hat{G}_i^{-1}(s)$ is proper and stable. It is here supposed that the sensor inverse $\hat{G}_i^{-1}(s)$ is proper and stable.
This way, the units of the estimates $\hat{x}_i$ are equal to the units of the physical quantity $x$. This way, the units of the estimates $\hat{x}_i$ are equal to the units of the physical quantity $x$.
The sensor dynamics estimate $\hat{G}_i(s)$ can be a simple gain or a more complex transfer function. The sensor dynamics estimate $\hat{G}_i(s)$ can be a simple gain or a more complex trancfer function.
#+begin_src latex :file detail_control_sensor_model.pdf #+begin_src latex :file detail_control_sensor_model.pdf
\tikzset{block/.default={0.8cm}{0.8cm}} \tikzset{block/.default={0.8cm}{0.8cm}}
@ -1207,7 +1207,7 @@ The sensor dynamics estimate $\hat{G}_i(s)$ can be a simple gain or a more compl
#+caption: Sensor models with and without normalization. #+caption: Sensor models with and without normalization.
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_sensor_model}Basic sensor model consisting of a noise input $n_i$ and a linear time invariant transfer function $G_i(s)$} #+attr_latex: :caption \subcaption{\label{fig:detail_control_sensor_model}Basic sensor model consisting of a noise input $n_i$ and a linear time invariant trancfer function $G_i(s)$}
#+attr_latex: :options {0.48\textwidth} #+attr_latex: :options {0.48\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :scale 1 #+attr_latex: :scale 1
@ -1325,7 +1325,7 @@ Hence, by properly shaping the norm of the complementary filters, it is possible
In practical systems the sensor normalization is not perfect and condition eqref:eq:detail_control_sensor_perfect_dynamics is not verified. In practical systems the sensor normalization is not perfect and condition eqref:eq:detail_control_sensor_perfect_dynamics is not verified.
In order to study such imperfection, a multiplicative input uncertainty is added to the sensor dynamics (Figure ref:fig:detail_control_sensor_model_uncertainty). In order to study such imperfection, a multiplicative input uncertainty is added to the sensor dynamics (Figure ref:fig:detail_control_sensor_model_uncertainty).
The nominal model is the estimated model used for the normalization $\hat{G}_i(s)$, $\Delta_i(s)$ is any stable transfer function satisfying $|\Delta_i(j\omega)| \le 1,\ \forall\omega$, and $w_i(s)$ is a weighting transfer function representing the magnitude of the uncertainty. The nominal model is the estimated model used for the normalization $\hat{G}_i(s)$, $\Delta_i(s)$ is any stable trancfer function saticfying $|\Delta_i(j\omega)| \le 1,\ \forall\omega$, and $w_i(s)$ is a weighting trancfer function representing the magnitude of the uncertainty.
The weight $w_i(s)$ is chosen such that the real sensor dynamics $G_i(j\omega)$ is contained in the uncertain region represented by a circle in the complex plane, centered on $1$ and with a radius equal to $|w_i(j\omega)|$. The weight $w_i(s)$ is chosen such that the real sensor dynamics $G_i(j\omega)$ is contained in the uncertain region represented by a circle in the complex plane, centered on $1$ and with a radius equal to $|w_i(j\omega)|$.
As the nominal sensor dynamics is taken as the normalized filter, the normalized sensor can be further simplified as shown in Figure ref:fig:detail_control_sensor_model_uncertainty_simplified. As the nominal sensor dynamics is taken as the normalized filter, the normalized sensor can be further simplified as shown in Figure ref:fig:detail_control_sensor_model_uncertainty_simplified.
@ -1551,8 +1551,8 @@ Finally, the synthesis method is validated on an simple example.
**** Synthesis Objective **** Synthesis Objective
The synthesis objective is to shape the norm of two filters $H_1(s)$ and $H_2(s)$ while ensuring their complementary property eqref:eq:detail_control_sensor_comp_filter. The synthesis objective is to shape the norm of two filters $H_1(s)$ and $H_2(s)$ while ensuring their complementary property eqref:eq:detail_control_sensor_comp_filter.
This is equivalent as to finding proper and stable transfer functions $H_1(s)$ and $H_2(s)$ such that conditions eqref:eq:detail_control_sensor_hinf_cond_complementarity, eqref:eq:detail_control_sensor_hinf_cond_h1 and eqref:eq:detail_control_sensor_hinf_cond_h2 are satisfied. This is equivalent as to finding proper and stable trancfer functions $H_1(s)$ and $H_2(s)$ such that conditions eqref:eq:detail_control_sensor_hinf_cond_complementarity, eqref:eq:detail_control_sensor_hinf_cond_h1 and eqref:eq:detail_control_sensor_hinf_cond_h2 are saticfied.
$W_1(s)$ and $W_2(s)$ are two weighting transfer functions that are carefully chosen to specify the maximum wanted norm of the complementary filters during the synthesis. $W_1(s)$ and $W_2(s)$ are two weighting trancfer functions that are carefully chosen to specify the maximum wanted norm of the complementary filters during the synthesis.
\begin{subequations}\label{eq:detail_control_sensor_comp_filter_problem_form} \begin{subequations}\label{eq:detail_control_sensor_comp_filter_problem_form}
\begin{align} \begin{align}
@ -1657,7 +1657,7 @@ Applying the standard $\mathcal{H}_\infty$ synthesis to the generalized plant $P
\left\|\begin{matrix} \left(1 - H_2(s)\right) W_1(s) \\ H_2(s) W_2(s) \end{matrix}\right\|_\infty \le 1 \left\|\begin{matrix} \left(1 - H_2(s)\right) W_1(s) \\ H_2(s) W_2(s) \end{matrix}\right\|_\infty \le 1
\end{equation} \end{equation}
By then defining $H_1(s)$ to be the complementary of $H_2(s)$ eqref:eq:detail_control_sensor_definition_H1, the $\mathcal{H}_\infty$ synthesis objective becomes equivalent to eqref:eq:detail_control_sensor_hinf_problem which ensures that eqref:eq:detail_control_sensor_hinf_cond_h1 and eqref:eq:detail_control_sensor_hinf_cond_h2 are satisfied. By then defining $H_1(s)$ to be the complementary of $H_2(s)$ eqref:eq:detail_control_sensor_definition_H1, the $\mathcal{H}_\infty$ synthesis objective becomes equivalent to eqref:eq:detail_control_sensor_hinf_problem which ensures that eqref:eq:detail_control_sensor_hinf_cond_h1 and eqref:eq:detail_control_sensor_hinf_cond_h2 are saticfied.
\begin{equation}\label{eq:detail_control_sensor_definition_H1} \begin{equation}\label{eq:detail_control_sensor_definition_H1}
H_1(s) \triangleq 1 - H_2(s) H_1(s) \triangleq 1 - H_2(s)
@ -1677,7 +1677,7 @@ Hence, the optimization may be a little bit conservative with respect to the set
Weighting functions are used during the synthesis to specify the maximum allowed complementary filters' norm. Weighting functions are used during the synthesis to specify the maximum allowed complementary filters' norm.
The proper design of these weighting functions is of primary importance for the success of the presented $\mathcal{H}_\infty$ synthesis of complementary filters. The proper design of these weighting functions is of primary importance for the success of the presented $\mathcal{H}_\infty$ synthesis of complementary filters.
First, only proper and stable transfer functions should be used. First, only proper and stable trancfer functions should be used.
Second, the order of the weighting functions should stay reasonably small in order to reduce the computational costs associated with the solving of the optimization problem and for the physical implementation of the filters (the synthesized filters' order being equal to the sum of the weighting functions' order). Second, the order of the weighting functions should stay reasonably small in order to reduce the computational costs associated with the solving of the optimization problem and for the physical implementation of the filters (the synthesized filters' order being equal to the sum of the weighting functions' order).
Third, one should not forget the fundamental limitations imposed by the complementary property eqref:eq:detail_control_sensor_comp_filter. Third, one should not forget the fundamental limitations imposed by the complementary property eqref:eq:detail_control_sensor_comp_filter.
This implies for instance that $|H_1(j\omega)|$ and $|H_2(j\omega)|$ cannot be made small at the same frequency. This implies for instance that $|H_1(j\omega)|$ and $|H_2(j\omega)|$ cannot be made small at the same frequency.
@ -1832,7 +1832,7 @@ exportFig('figs/detail_control_sensor_hinf_filters_results.pdf', 'width', 'half'
The standard $\mathcal{H}_\infty$ synthesis is then applied to the generalized plant of Figure ref:fig:detail_control_sensor_h_infinity_robust_fusion_plant. The standard $\mathcal{H}_\infty$ synthesis is then applied to the generalized plant of Figure ref:fig:detail_control_sensor_h_infinity_robust_fusion_plant.
The filter $H_2(s)$ that minimizes the $\mathcal{H}_\infty$ norm between $w$ and $[z_1,\ z_2]^T$ is obtained. The filter $H_2(s)$ that minimizes the $\mathcal{H}_\infty$ norm between $w$ and $[z_1,\ z_2]^T$ is obtained.
The $\mathcal{H}_\infty$ norm is here found to be close to one which indicates that the synthesis is successful: the complementary filters norms are below the maximum specified upper bounds. The $\mathcal{H}_\infty$ norm is here found to be close to one which indicates that the synthesis is succescful: the complementary filters norms are below the maximum specified upper bounds.
This is confirmed by the bode plots of the obtained complementary filters in Figure ref:fig:detail_control_sensor_hinf_filters_results. This is confirmed by the bode plots of the obtained complementary filters in Figure ref:fig:detail_control_sensor_hinf_filters_results.
This simple example illustrates the fact that the proposed methodology for complementary filters shaping is easy to use and effective. This simple example illustrates the fact that the proposed methodology for complementary filters shaping is easy to use and effective.
@ -1944,7 +1944,7 @@ A generalization of the proposed synthesis method of complementary filters is pr
#+end_subfigure #+end_subfigure
#+end_figure #+end_figure
The synthesis objective is to compute a set of $n$ stable transfer functions $[H_1(s),\ H_2(s),\ \dots,\ H_n(s)]$ such that conditions eqref:eq:detail_control_sensor_hinf_cond_compl_gen and eqref:eq:detail_control_sensor_hinf_cond_perf_gen are satisfied. The synthesis objective is to compute a set of $n$ stable trancfer functions $[H_1(s),\ H_2(s),\ \dots,\ H_n(s)]$ such that conditions eqref:eq:detail_control_sensor_hinf_cond_compl_gen and eqref:eq:detail_control_sensor_hinf_cond_perf_gen are saticfied.
\begin{subequations}\label{eq:detail_control_sensor_hinf_problem_gen} \begin{subequations}\label{eq:detail_control_sensor_hinf_problem_gen}
\begin{align} \begin{align}
@ -1953,7 +1953,7 @@ The synthesis objective is to compute a set of $n$ stable transfer functions $[H
\end{align} \end{align}
\end{subequations} \end{subequations}
$[W_1(s),\ W_2(s),\ \dots,\ W_n(s)]$ are weighting transfer functions that are chosen to specify the maximum complementary filters' norm during the synthesis. $[W_1(s),\ W_2(s),\ \dots,\ W_n(s)]$ are weighting trancfer functions that are chosen to specify the maximum complementary filters' norm during the synthesis.
Such synthesis objective is closely related to the one described in Section ref:ssec:detail_control_sensor_hinf_method, and indeed the proposed synthesis method is a generalization of the one previously presented. Such synthesis objective is closely related to the one described in Section ref:ssec:detail_control_sensor_hinf_method, and indeed the proposed synthesis method is a generalization of the one previously presented.
A set of $n$ complementary filters can be shaped by applying the standard $\mathcal{H}_\infty$ synthesis to the generalized plant $P_n(s)$ described by eqref:eq:detail_control_sensor_generalized_plant_n_filters. A set of $n$ complementary filters can be shaped by applying the standard $\mathcal{H}_\infty$ synthesis to the generalized plant $P_n(s)$ described by eqref:eq:detail_control_sensor_generalized_plant_n_filters.
@ -1970,14 +1970,14 @@ A set of $n$ complementary filters can be shaped by applying the standard $\math
\end{bmatrix} \end{bmatrix}
\end{equation} \end{equation}
If the synthesis if successful, a set of $n-1$ filters $[H_2(s),\ H_3(s),\ \dots,\ H_n(s)]$ are obtained such that eqref:eq:detail_control_sensor_hinf_syn_obj_gen is verified. If the synthesis if succescful, a set of $n-1$ filters $[H_2(s),\ H_3(s),\ \dots,\ H_n(s)]$ are obtained such that eqref:eq:detail_control_sensor_hinf_syn_obj_gen is verified.
\begin{equation}\label{eq:detail_control_sensor_hinf_syn_obj_gen} \begin{equation}\label{eq:detail_control_sensor_hinf_syn_obj_gen}
\left\|\begin{matrix} \left(1 - \left[ H_2(s) + H_3(s) + \dots + H_n(s) \right]\right) W_1(s) \\ H_2(s) W_2(s) \\ \vdots \\ H_n(s) W_n(s) \end{matrix}\right\|_\infty \le 1 \left\|\begin{matrix} \left(1 - \left[ H_2(s) + H_3(s) + \dots + H_n(s) \right]\right) W_1(s) \\ H_2(s) W_2(s) \\ \vdots \\ H_n(s) W_n(s) \end{matrix}\right\|_\infty \le 1
\end{equation} \end{equation}
$H_1(s)$ is then defined using eqref:eq:detail_control_sensor_h1_comp_h2_hn which is ensuring the complementary property for the set of $n$ filters eqref:eq:detail_control_sensor_hinf_cond_compl_gen. $H_1(s)$ is then defined using eqref:eq:detail_control_sensor_h1_comp_h2_hn which is ensuring the complementary property for the set of $n$ filters eqref:eq:detail_control_sensor_hinf_cond_compl_gen.
Condition eqref:eq:detail_control_sensor_hinf_cond_perf_gen is satisfied thanks to eqref:eq:detail_control_sensor_hinf_syn_obj_gen. Condition eqref:eq:detail_control_sensor_hinf_cond_perf_gen is saticfied thanks to eqref:eq:detail_control_sensor_hinf_syn_obj_gen.
\begin{equation}\label{eq:detail_control_sensor_h1_comp_h2_hn} \begin{equation}\label{eq:detail_control_sensor_h1_comp_h2_hn}
H_1(s) \triangleq 1 - \big[ H_2(s) + H_3(s) + \dots + H_n(s) \big] H_1(s) \triangleq 1 - \big[ H_2(s) + H_3(s) + \dots + H_n(s) \big]
@ -2097,14 +2097,14 @@ Consider the generalized plant $P_3(s)$ shown in Figure ref:fig:detail_control_s
#+end_figure #+end_figure
The standard $\mathcal{H}_\infty$ synthesis is performed on the generalized plant $P_3(s)$. The standard $\mathcal{H}_\infty$ synthesis is performed on the generalized plant $P_3(s)$.
Two filters $H_2(s)$ and $H_3(s)$ are obtained such that the $\mathcal{H}_\infty$ norm of the closed-loop transfer from $w$ to $[z_1,\ z_2,\ z_3]$ of the system in Figure ref:fig:detail_control_sensor_comp_filter_three_hinf_fb is less than one. Two filters $H_2(s)$ and $H_3(s)$ are obtained such that the $\mathcal{H}_\infty$ norm of the closed-loop trancfer from $w$ to $[z_1,\ z_2,\ z_3]$ of the system in Figure ref:fig:detail_control_sensor_comp_filter_three_hinf_fb is less than one.
Filter $H_1(s)$ is defined using eqref:eq:detail_control_sensor_h1_compl_h2_h3 thus ensuring the complementary property of the obtained set of filters. Filter $H_1(s)$ is defined using eqref:eq:detail_control_sensor_h1_compl_h2_h3 thus ensuring the complementary property of the obtained set of filters.
\begin{equation}\label{eq:detail_control_sensor_h1_compl_h2_h3} \begin{equation}\label{eq:detail_control_sensor_h1_compl_h2_h3}
H_1(s) \triangleq 1 - \big[ H_2(s) + H_3(s) \big] H_1(s) \triangleq 1 - \big[ H_2(s) + H_3(s) \big]
\end{equation} \end{equation}
Figure ref:fig:detail_control_sensor_three_complementary_filters_results displays the three synthesized complementary filters (solid lines) which confirms that the synthesis is successful. Figure ref:fig:detail_control_sensor_three_complementary_filters_results displays the three synthesized complementary filters (solid lines) which confirms that the synthesis is succescful.
#+begin_src matlab #+begin_src matlab
%% Synthesis of a set of three complementary filters %% Synthesis of a set of three complementary filters
@ -2183,7 +2183,7 @@ Future work will aim at developing a complementary filter synthesis method that
When dealing with MIMO systems, a typical strategy is to: When dealing with MIMO systems, a typical strategy is to:
- First decouple the plant dynamics (discussed in this section) - First decouple the plant dynamics (discussed in this section)
- Apply SISO control for the decoupled plant (discussed in section ref:sec:detail_control_optimization) - Apply SISO control for the decoupled plant (discussed in section ref:sec:detail_control_cf)
Another strategy would be to apply a multivariable control synthesis to the coupled system. Another strategy would be to apply a multivariable control synthesis to the coupled system.
Strangely, while H-infinity synthesis is a mature technology, it use for the control of Stewart platform is not yet demonstrated. Strangely, while H-infinity synthesis is a mature technology, it use for the control of Stewart platform is not yet demonstrated.
@ -2194,7 +2194,7 @@ Experimental closed-loop control results using the hexapod have shown that contr
- [X] Review of [[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org::*Decoupling Strategies][Decoupling Strategies]] for stewart platforms - [X] Review of [[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org::*Decoupling Strategies][Decoupling Strategies]] for stewart platforms
- [ ] Add some citations about different methods - [ ] Add some citations about different methods
- [ ] Maybe transform table into text - [ ] Maybe trancform table into text
#+name: tab:detail_control_decoupling_review #+name: tab:detail_control_decoupling_review
#+caption: Litterature review about decoupling strategy for Stewart platform control #+caption: Litterature review about decoupling strategy for Stewart platform control
@ -2362,7 +2362,7 @@ Parameters used for the following analysis are summarized in table ref:tab:detai
Let's first study the obtained dynamics in the frame of the struts. Let's first study the obtained dynamics in the frame of the struts.
The equation of motion linking actuator forces $\bm{\mathcal{\tau}}$ to strut relative motion $\bm{\mathcal{L}}$ is obtained from eqref:eq:detail_control_decoupling_plant_cartesian by mapping the cartesian motion of the mass to the relative motion of the struts using the Jacobian matrix $\bm{J}_{\{M\}}$ eqref:eq:detail_control_decoupling_jacobian_CoM . The equation of motion linking actuator forces $\bm{\mathcal{\tau}}$ to strut relative motion $\bm{\mathcal{L}}$ is obtained from eqref:eq:detail_control_decoupling_plant_cartesian by mapping the cartesian motion of the mass to the relative motion of the struts using the Jacobian matrix $\bm{J}_{\{M\}}$ eqref:eq:detail_control_decoupling_jacobian_CoM .
The transfer function from $\bm{\mathcal{\tau}}$ to $\bm{\mathcal{L}}$ is shown in equation eqref:eq:detail_control_decoupling_plant_decentralized. The trancfer function from $\bm{\mathcal{\tau}}$ to $\bm{\mathcal{L}}$ is shown in equation eqref:eq:detail_control_decoupling_plant_decentralized.
#+begin_src latex :file detail_control_decoupling_control_struts.pdf #+begin_src latex :file detail_control_decoupling_control_struts.pdf
\begin{tikzpicture} \begin{tikzpicture}
@ -2512,7 +2512,7 @@ The obtained plan (Figure ref:fig:detail_control_jacobian_decoupling_arch) has i
#+end_src #+end_src
#+name: fig:detail_control_jacobian_decoupling_arch #+name: fig:detail_control_jacobian_decoupling_arch
#+caption: Block diagram of the transfer function from $\bm{\mathcal{F}}_{\{O\}}$ to $\bm{\mathcal{X}}_{\{O\}}$ #+caption: Block diagram of the trancfer function from $\bm{\mathcal{F}}_{\{O\}}$ to $\bm{\mathcal{X}}_{\{O\}}$
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_decoupling_control_jacobian.png]] [[file:figs/detail_control_decoupling_control_jacobian.png]]
@ -2631,7 +2631,7 @@ exportFig('figs/detail_control_decoupling_jacobian_plant_CoM.pdf', 'width', 'hal
#+attr_latex: :options {0.48\textwidth} #+attr_latex: :options {0.48\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :scale 1 #+attr_latex: :scale 1
[[file:figs/detail_control_model_decoupling_test_CoM.png]] [[file:figs/detail_control_decoupling_model_test_CoM.png]]
#+end_subfigure #+end_subfigure
#+end_figure #+end_figure
@ -2878,7 +2878,7 @@ Eigenvectors are arranged for increasing eigenvalues (i.e. resonance frequencies
\end{bmatrix} \end{bmatrix}
\end{equation} \end{equation}
- [ ] Formula for the plant transfer function - [ ] Formula for the plant trancfer function
#+begin_src matlab #+begin_src matlab
%% Modal decoupling %% Modal decoupling
@ -3279,14 +3279,14 @@ Conclusion about NASS:
:PROPERTIES: :PROPERTIES:
:HEADER-ARGS:matlab+: :tangle matlab/detail_control_3_close_loop_shaping.m :HEADER-ARGS:matlab+: :tangle matlab/detail_control_3_close_loop_shaping.m
:END: :END:
<<sec:detail_control_optimization>> <<sec:detail_control_cf>>
# file:~/Cloud/research/papers/published/verma19_virtu_senso_fusio_high_preci_contr/elsarticle-template-harv.pdf # file:~/Cloud/research/papers/published/verma19_virtu_senso_fusio_high_preci_contr/elsarticle-template-harv.pdf
# file:~/Cloud/research/papers/dehaeze20_virtu_senso_fusio/index.org # file:~/Cloud/research/papers/dehaeze20_virtu_senso_fusio/index.org
** Introduction :ignore: ** Introduction :ignore:
Performance of a feedback control is dictated by closed-loop transfer functions. Performance of a feedback control is dictated by closed-loop trancfer functions.
For instance sensitivity, transmissibility, etc... Gang of Four. For instance sensitivity, transmissibility, etc... Gang of Four.
There are several ways to design a controller to obtain a given performance. There are several ways to design a controller to obtain a given performance.
@ -3295,7 +3295,7 @@ Decoupled Open-Loop Shaping:
- As shown in previous section, once the plant is decoupled: open loop shaping - As shown in previous section, once the plant is decoupled: open loop shaping
- Explain procedure when applying open-loop shaping - Explain procedure when applying open-loop shaping
- Lead, Lag, Notches, Check Stability, c2d, etc... - Lead, Lag, Notches, Check Stability, c2d, etc...
- But this is open-loop shaping, and it does not directly work on the closed loop transfer functions - But this is open-loop shaping, and it does not directly work on the closed loop trancfer functions
Other strategy: Model Based Design: Other strategy: Model Based Design:
- [[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org::*Multivariable Control][Multivariable Control]] - [[file:~/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org::*Multivariable Control][Multivariable Control]]
@ -3314,7 +3314,7 @@ It will be experimentally demonstrated with the NASS.
*SISO control design methods* *SISO control design methods*
- frequency domain techniques - frequency domain techniques
- manual loop-shaping - key idea: modification of the controller such that the open-loop is made according to specifications [[cite:&oomen18_advan_motion_contr_precis_mechat]]. - manual loop-shaping - key idea: modification of the controller such that the open-loop is made according to specifications [[cite:&oomen18_advan_motion_contr_precis_mechat]].
This works well because the open loop transfer function is linearly dependent of the controller. This works well because the open loop trancfer function is linearly dependent of the controller.
Different techniques for open loop shaping [[cite:&lurie02_system_archit_trades_using_bode]] Different techniques for open loop shaping [[cite:&lurie02_system_archit_trades_using_bode]]
However, the specifications are given in terms of the final system performance, i.e. as closed-loop specifications. However, the specifications are given in terms of the final system performance, i.e. as closed-loop specifications.
@ -3357,12 +3357,12 @@ In this paper, we propose a new controller synthesis method
#+end_src #+end_src
** Control Architecture ** Control Architecture
<<ssec:detail_control_control_arch>> <<ssec:detail_control_cf_control_arch>>
**** Virtual Sensor Fusion **** Virtual Sensor Fusion
Let's consider the control architecture represented in Figure ref:fig:detail_control_sf_arch where $G^\prime$ is the physical plant to control, $G$ is a model of the plant, $k$ is a gain, $H_L$ and $H_H$ are complementary filters ($H_L + H_H = 1$ in the complex sense). Let's consider the control architecture represented in Figure ref:fig:detail_control_cf_arch where $G^\prime$ is the physical plant to control, $G$ is a model of the plant, $k$ is a gain, $H_L$ and $H_H$ are complementary filters ($H_L + H_H = 1$ in the complex sense).
The signals are the reference signal $r$, the output perturbation $d_y$, the measurement noise $n$ and the control input $u$. The signals are the reference signal $r$, the output perturbation $d_y$, the measurement noise $n$ and the control input $u$.
#+begin_src latex :file detail_control_sf_arch.pdf #+begin_src latex :file detail_control_cf_arch.pdf
\tikzset{block/.default={0.8cm}{0.6cm}} \tikzset{block/.default={0.8cm}{0.6cm}}
\tikzset{addb/.append style={scale=0.7}} \tikzset{addb/.append style={scale=0.7}}
\tikzset{node distance=0.6} \tikzset{node distance=0.6}
@ -3376,8 +3376,8 @@ The signals are the reference signal $r$, the output perturbation $d_y$, the mea
\coordinate[] (KG) at ($0.5*(K.east)+0.5*(G.west)$); \coordinate[] (KG) at ($0.5*(K.east)+0.5*(G.west)$);
\node[block, below=of KG] (Gm){$G$}; \node[block, below=of KG] (Gm){$G$};
\node[block, below=of Gm] (Hh){$H_H$}; \node[block, below=of Gm] (Hh){$H_H$};
\node[addb={+}{}{}{}{}, below=of Hh] (addsf){}; \node[addb={+}{}{}{}{}, below=of Hh] (addcf){};
\node[block] (Hl) at (addsf-|G) {$H_L$}; \node[block] (Hl) at (addcf-|G) {$H_L$};
\node[addb={+}{}{}{}{}, right=1.2 of Hl] (addn) {}; \node[addb={+}{}{}{}{}, right=1.2 of Hl] (addn) {};
@ -3385,9 +3385,9 @@ The signals are the reference signal $r$, the output perturbation $d_y$, the mea
\draw[->] (K.east) -- (G.west) node[above left]{$u$}; \draw[->] (K.east) -- (G.west) node[above left]{$u$};
\draw[->] (KG) node[branch]{} -- (Gm.north); \draw[->] (KG) node[branch]{} -- (Gm.north);
\draw[->] (Gm.south) -- (Hh.north); \draw[->] (Gm.south) -- (Hh.north);
\draw[->] (Hh.south) -- (addsf.north) node[above left]{}; \draw[->] (Hh.south) -- (addcf.north) node[above left]{};
\draw[->] (Hl.west) -- (addsf.east); \draw[->] (Hl.west) -- (addcf.east);
\draw[->] (addsf.west) -| (addfb.south) node[below right]{}; \draw[->] (addcf.west) -| (addfb.south) node[below right]{};
\draw[->] (G.east) -- (adddy.west); \draw[->] (G.east) -- (adddy.west);
\draw[<-] (addn.east) -- ++(\cdist, 0) coordinate[](endpos) node[above left]{$n$}; \draw[<-] (addn.east) -- ++(\cdist, 0) coordinate[](endpos) node[above left]{$n$};
\draw[->] (adddy.east) -- (G-|endpos) node[above left]{$y$}; \draw[->] (adddy.east) -- (G-|endpos) node[above left]{$y$};
@ -3398,10 +3398,10 @@ The signals are the reference signal $r$, the output perturbation $d_y$, the mea
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:detail_control_sf_arch #+name: fig:detail_control_cf_arch
#+caption: Sensor Fusion Architecture #+caption: Sensor Fusion Architecture
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_sf_arch.png]] [[file:figs/detail_control_cf_arch.png]]
The dynamics of the closed-loop system is described by the following equations The dynamics of the closed-loop system is described by the following equations
\begin{alignat}{5} \begin{alignat}{5}
@ -3417,9 +3417,9 @@ The first one is low pass filtered in order to obtain good performance at low fr
Here, the second sensor is replaced by a model $G$ of the plant which is assumed to be stable and minimum phase. Here, the second sensor is replaced by a model $G$ of the plant which is assumed to be stable and minimum phase.
One may think that the control architecture shown in Figure ref:fig:detail_control_sf_arch is a multi-loop system, but because no non-linear saturation-type element is present in the inner-loop (containing $k$, $G$ and $H_H$ which are all numerically implemented), the structure is equivalent to the architecture shown in Figure ref:fig:detail_control_sf_arch_eq. One may think that the control architecture shown in Figure ref:fig:detail_control_cf_arch is a multi-loop system, but because no non-linear saturation-type element is present in the inner-loop (containing $k$, $G$ and $H_H$ which are all numerically implemented), the structure is equivalent to the architecture shown in Figure ref:fig:detail_control_cf_arch_eq.
#+begin_src latex :file detail_control_sf_arch_eq.pdf #+begin_src latex :file detail_control_cf_arch_eq.pdf
\tikzset{block/.default={0.8cm}{0.6cm}} \tikzset{block/.default={0.8cm}{0.6cm}}
\tikzset{addb/.append style={scale=0.7}} \tikzset{addb/.append style={scale=0.7}}
\tikzset{node distance=0.6} \tikzset{node distance=0.6}
@ -3440,7 +3440,7 @@ One may think that the control architecture shown in Figure ref:fig:detail_contr
\draw[->] (addK.east) -- (K.west); \draw[->] (addK.east) -- (K.west);
\draw[->] (K.east) -- (G.west) node[above left]{$u$}; \draw[->] (K.east) -- (G.west) node[above left]{$u$};
\draw[->] (G.east) -- (adddy.west); \draw[->] (G.east) -- (adddy.west);
\draw[->] ($(G.west)+(-0.8, 0)$) node[branch](sffb){} |- (Gm.east); \draw[->] ($(G.west)+(-0.8, 0)$) node[branch](cffb){} |- (Gm.east);
\draw[->] (Gm.west) -- (Hh.east); \draw[->] (Gm.west) -- (Hh.east);
\draw[->] (Hh.west) -| (addK.south); \draw[->] (Hh.west) -| (addK.south);
\draw[<-] (addn.east) -- ++(\cdist, 0) coordinate[](endpos) node[above left]{$n$}; \draw[<-] (addn.east) -- ++(\cdist, 0) coordinate[](endpos) node[above left]{$n$};
@ -3452,15 +3452,15 @@ One may think that the control architecture shown in Figure ref:fig:detail_contr
\draw[->] (Hl.west) -| (addfb.south) node[below right]{}; \draw[->] (Hl.west) -| (addfb.south) node[below right]{};
\begin{scope}[on background layer] \begin{scope}[on background layer]
\node[fit={($(addK.west|-Hh.south)+(-0.1, 0)$) (K.north-|sffb)}, inner sep=5pt, draw, fill=black!20!white, dashed, label={$K$}] (Kfb) {}; \node[fit={($(addK.west|-Hh.south)+(-0.1, 0)$) (K.north-|cffb)}, inner sep=5pt, draw, fill=black!20!white, dashed, label={$K$}] (Kfb) {};
\end{scope} \end{scope}
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:detail_control_sf_arch_eq #+name: fig:detail_control_cf_arch_eq
#+caption: Equivalent feedback architecture #+caption: Equivalent feedback architecture
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_sf_arch_eq.png]] [[file:figs/detail_control_cf_arch_eq.png]]
The dynamics of the system can be rewritten as follow The dynamics of the system can be rewritten as follow
\begin{alignat}{5} \begin{alignat}{5}
@ -3476,11 +3476,11 @@ We now want to study the asymptotic system obtained when using very high value o
\end{equation} \end{equation}
If the obtained $K$ is improper, a low pass filter can be added to have its causal realization. If the obtained $K$ is improper, a low pass filter can be added to have its causal realization.
Also, we want $K$ to be stable, so $G$ and $H_H$ must be minimum phase transfer functions. Also, we want $K$ to be stable, so $G$ and $H_H$ must be minimum phase trancfer functions.
For now on, we will consider the resulting control architecture as shown on Figure ref:fig:detail_control_sf_arch_class where the only "tuning parameters" are the complementary filters. For now on, we will consider the resulting control architecture as shown on Figure ref:fig:detail_control_cf_arch_class where the only "tuning parameters" are the complementary filters.
#+begin_src latex :file detail_control_sf_arch_class.pdf #+begin_src latex :file detail_control_cf_arch_class.pdf
\tikzset{block/.default={0.8cm}{0.6cm}} \tikzset{block/.default={0.8cm}{0.6cm}}
\tikzset{addb/.append style={scale=0.7}} \tikzset{addb/.append style={scale=0.7}}
\tikzset{node distance=0.6} \tikzset{node distance=0.6}
@ -3507,36 +3507,36 @@ For now on, we will consider the resulting control architecture as shown on Figu
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:detail_control_sf_arch_class #+name: fig:detail_control_cf_arch_class
#+caption: Equivalent classical feedback control architecture #+caption: Equivalent classical feedback control architecture
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_sf_arch_class.png]] [[file:figs/detail_control_cf_arch_class.png]]
The equations describing the dynamics of the closed-loop system are The equations describing the dynamics of the closed-loop system are
\begin{align} \begin{align}
y &= \frac{ H_H dy + G^{\prime} G^{-1} r - G^{\prime} G^{-1} H_L n }{H_H + G^\prime G^{-1} H_L} \label{eq:detail_control_cl_system_y}\\ y &= \frac{ H_H dy + G^{\prime} G^{-1} r - G^{\prime} G^{-1} H_L n }{H_H + G^\prime G^{-1} H_L} \label{eq:detail_control_cf_cl_system_y}\\
u &= \frac{ -G^{-1} H_L dy + G^{-1} r - G^{-1} H_L n }{H_H + G^\prime G^{-1} H_L} \label{eq:detail_control_cl_system_u} u &= \frac{ -G^{-1} H_L dy + G^{-1} r - G^{-1} H_L n }{H_H + G^\prime G^{-1} H_L} \label{eq:detail_control_cf_cl_system_u}
\end{align} \end{align}
At frequencies where the model is accurate: $G^{-1} G^{\prime} \approx 1$, $H_H + G^\prime G^{-1} H_L \approx H_H + H_L = 1$ and At frequencies where the model is accurate: $G^{-1} G^{\prime} \approx 1$, $H_H + G^\prime G^{-1} H_L \approx H_H + H_L = 1$ and
\begin{align} \begin{align}
y &= H_H dy + r - H_L n \label{eq:detail_control_cl_performance_y} \\ y &= H_H dy + r - H_L n \label{eq:detail_control_cf_cl_performance_y} \\
u &= -G^{-1} H_L dy + G^{-1} r - G^{-1} H_L n \label{eq:detail_control_cl_performance_u} u &= -G^{-1} H_L dy + G^{-1} r - G^{-1} H_L n \label{eq:detail_control_cf_cl_performance_u}
\end{align} \end{align}
We obtain a sensitivity transfer function equals to the high pass filter $S = \frac{y}{dy} = H_H$ and a transmissibility transfer function equals to the low pass filter $T = \frac{y}{n} = H_L$. We obtain a sensitivity trancfer function equals to the high pass filter $S = \frac{y}{dy} = H_H$ and a transmissibility trancfer function equals to the low pass filter $T = \frac{y}{n} = H_L$.
Assuming that we have a good model of the plant, we have then that the closed-loop behavior of the system converges to the designed complementary filters. Assuming that we have a good model of the plant, we have then that the closed-loop behavior of the system converges to the designed complementary filters.
** Translating the performance requirements into the shapes of the complementary filters ** Translating the performance requirements into the shapes of the complementary filters
<<ssec:detail_control_trans_perf>> <<ssec:detail_control_cf_trans_perf>>
**** Introduction :ignore: **** Introduction :ignore:
The required performance specifications in a feedback system can usually be translated into requirements on the upper bounds of $\abs{S(j\w)}$ and $|T(j\omega)|$ [[cite:&bibel92_guidel_h]]. The required performance specifications in a feedback system can usually be translated into requirements on the upper bounds of $\abs{S(j\w)}$ and $|T(j\omega)|$ [[cite:&bibel92_guidel_h]].
The process of designing a controller $K(s)$ in order to obtain the desired shapes of $\abs{S(j\w)}$ and $\abs{T(j\w)}$ is called loop shaping. The process of designing a controller $K(s)$ in order to obtain the desired shapes of $\abs{S(j\w)}$ and $\abs{T(j\w)}$ is called loop shaping.
The equations eqref:eq:detail_control_cl_system_y and eqref:eq:detail_control_cl_system_u describing the dynamics of the studied feedback architecture are not written in terms of $K$ but in terms of the complementary filters $H_L$ and $H_H$. The equations eqref:eq:detail_control_cf_cl_system_y and eqref:eq:detail_control_cf_cl_system_u describing the dynamics of the studied feedback architecture are not written in terms of $K$ but in terms of the complementary filters $H_L$ and $H_H$.
In this section, we then translate the typical specifications into the desired shapes of the complementary filters $H_L$ and $H_H$.\\ In this section, we then translate the typical specifications into the desired shapes of the complementary filters $H_L$ and $H_H$.
**** Nominal Stability (NS) **** Nominal Stability (NS)
The closed-loop system is stable if all its elements are stable ($K$, $G^\prime$ and $H_L$) and if the sensitivity function ($S = \frac{1}{1 + G^\prime K H_L}$) is stable. The closed-loop system is stable if all its elements are stable ($K$, $G^\prime$ and $H_L$) and if the sensitivity function ($S = \frac{1}{1 + G^\prime K H_L}$) is stable.
@ -3545,21 +3545,21 @@ For the nominal system ($G^\prime = G$), we have $S = H_H$.
Nominal stability is then guaranteed if $H_L$, $H_H$ and $G$ are stable and if $G$ and $H_H$ are minimum phase (to have $K$ stable). Nominal stability is then guaranteed if $H_L$, $H_H$ and $G$ are stable and if $G$ and $H_H$ are minimum phase (to have $K$ stable).
Thus we must design stable and minimum phase complementary filters.\\ Thus we must design stable and minimum phase complementary filters.
**** Nominal Performance (NP) **** Nominal Performance (NP)
Typical performance specifications can usually be translated into upper bounds on $|S(j\omega)|$ and $|T(j\omega)|$. Typical performance specifications can usually be translated into upper bounds on $|S(j\omega)|$ and $|T(j\omega)|$.
Two performance weights $w_H$ and $w_L$ are defined in such a way that performance specifications are satisfied if Two performance weights $w_H$ and $w_L$ are defined in such a way that performance specifications are saticfied if
\begin{equation} \begin{equation}
|w_H(j\omega) S(j\omega)| \le 1,\ |w_L(j\omega) T(j\omega)| \le 1 \quad \forall\omega |w_H(j\omega) S(j\omega)| \le 1,\ |w_L(j\omega) T(j\omega)| \le 1 \quad \forall\omega
\end{equation} \end{equation}
For the nominal system, we have $S = H_H$ and $T = H_L$, and then nominal performance is ensured by requiring For the nominal system, we have $S = H_H$ and $T = H_L$, and then nominal performance is ensured by requiring
\begin{subnumcases}{\text{NP} \Leftrightarrow}\label{eq:detail_control_nominal_performance} \begin{subnumcases}{\text{NP} \Leftrightarrow}\label{eq:detail_control_cf_nominal_performance}
|w_H(j\omega) H_H(j\omega)| \le 1 \quad \forall\omega \label{eq:detail_control_nominal_perf_hh}\\ |w_H(j\omega) H_H(j\omega)| \le 1 \quad \forall\omega \label{eq:detail_control_cf_nominal_perf_hh}\\
|w_L(j\omega) H_L(j\omega)| \le 1 \quad \forall\omega \label{eq:detail_control_nominal_perf_hl} |w_L(j\omega) H_L(j\omega)| \le 1 \quad \forall\omega \label{eq:detail_control_cf_nominal_perf_hl}
\end{subnumcases} \end{subnumcases}
The translation of typical performance requirements on the shapes of the complementary filters is discussed below: The translation of typical performance requirements on the shapes of the complementary filters is discussed below:
@ -3567,14 +3567,14 @@ The translation of typical performance requirements on the shapes of the complem
- for noise attenuation, make $|T| = |H_L|$ small - for noise attenuation, make $|T| = |H_L|$ small
- for control energy reduction, make $|KS| = |G^{-1}|$ small - for control energy reduction, make $|KS| = |G^{-1}|$ small
We may have other requirements in terms of stability margins, maximum or minimum closed-loop bandwidth.\\ We may have other requirements in terms of stability margins, maximum or minimum closed-loop bandwidth.
**** Closed-Loop Bandwidth **** Closed-Loop Bandwidth
The closed-loop bandwidth $\w_B$ can be defined as the frequency where $\abs{S(j\w)}$ first crosses $\frac{1}{\sqrt{2}}$ from below. The closed-loop bandwidth $\w_B$ can be defined as the frequency where $\abs{S(j\w)}$ first crosses $\frac{1}{\sqrt{2}}$ from below.
If one wants the closed-loop bandwidth to be at least $\w_B^*$ (e.g. to stabilize an unstable pole), one can required that $|S(j\omega)| \le \frac{1}{\sqrt{2}}$ below $\omega_B^*$ by designing $w_H$ such that $|w_H(j\omega)| \ge \sqrt{2}$ for $\omega \le \omega_B^*$. If one wants the closed-loop bandwidth to be at least $\w_B^*$ (e.g. to stabilize an unstable pole), one can required that $|S(j\omega)| \le \frac{1}{\sqrt{2}}$ below $\omega_B^*$ by designing $w_H$ such that $|w_H(j\omega)| \ge \sqrt{2}$ for $\omega \le \omega_B^*$.
Similarly, if one wants the closed-loop bandwidth to be less than $\w_B^*$, one can approximately require that the magnitude of $T$ is less than $\frac{1}{\sqrt{2}}$ at frequencies above $\w_B^*$ by designing $w_L$ such that $|w_L(j\omega)| \ge \sqrt{2}$ for $\omega \ge \omega_B^*$.\\ Similarly, if one wants the closed-loop bandwidth to be less than $\w_B^*$, one can approximately require that the magnitude of $T$ is less than $\frac{1}{\sqrt{2}}$ at frequencies above $\w_B^*$ by designing $w_L$ such that $|w_L(j\omega)| \ge \sqrt{2}$ for $\omega \ge \omega_B^*$.
**** Classical stability margins **** Classical stability margins
Gain margin (GM) and phase margin (PM) are usual specifications on controlled system. Gain margin (GM) and phase margin (PM) are usual specifications on controlled system.
@ -3589,14 +3589,14 @@ For the nominal system $M_S = \max_\omega |S| = \max_\omega |H_H|$, so one can d
\begin{equation} \begin{equation}
|H_H(j\omega)| \le 2 \quad \forall\omega |H_H(j\omega)| \le 2 \quad \forall\omega
\end{equation} \end{equation}
and thus obtain acceptable stability margins.\\ and thus obtain acceptable stability margins.
**** Response time to change of reference signal **** Response time to change of reference signal
For the nominal system, the model is accurate and the transfer function from reference signal $r$ to output $y$ is $1$ eqref:eq:detail_control_cl_performance_y and does not depends of the complementary filters. For the nominal system, the model is accurate and the trancfer function from reference signal $r$ to output $y$ is $1$ eqref:eq:detail_control_cf_cl_performance_y and does not depends of the complementary filters.
However, one can add a pre-filter as shown in Figure ref:fig:detail_control_sf_arch_class_prefilter. However, one can add a pre-filter as shown in Figure ref:fig:detail_control_cf_arch_class_prefilter.
#+begin_src latex :file detail_control_sf_arch_class_prefilter.pdf #+begin_src latex :file detail_control_cf_arch_class_prefilter.pdf
\tikzset{block/.default={0.8cm}{0.6cm}} \tikzset{block/.default={0.8cm}{0.6cm}}
\tikzset{addb/.append style={scale=0.7}} \tikzset{addb/.append style={scale=0.7}}
\tikzset{node distance=0.6} \tikzset{node distance=0.6}
@ -3625,34 +3625,34 @@ However, one can add a pre-filter as shown in Figure ref:fig:detail_control_sf_a
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:detail_control_sf_arch_class_prefilter #+name: fig:detail_control_cf_arch_class_prefilter
#+caption: Prefilter used to limit input usage #+caption: Prefilter used to limit input usage
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_sf_arch_class_prefilter.png]] [[file:figs/detail_control_cf_arch_class_prefilter.png]]
The transfer function from $y$ to $r$ becomes $\frac{y}{r} = K_r$ and $K_r$ can we chosen to obtain acceptable response to change of the reference signal. The trancfer function from $y$ to $r$ becomes $\frac{y}{r} = K_r$ and $K_r$ can we chosen to obtain acceptable response to change of the reference signal.
Typically, $K_r$ is a low pass filter of the form Typically, $K_r$ is a low pass filter of the form
\begin{equation} \begin{equation}
K_r(s) = \frac{1}{1 + \tau s} K_r(s) = \frac{1}{1 + \tau s}
\end{equation} \end{equation}
with $\tau$ corresponding to the desired response time.\\ with $\tau$ corresponding to the desired response time.
**** Input usage **** Input usage
Input usage due to disturbances $d_y$ and measurement noise $n$ is determined by $\big|\frac{u}{d_y}\big| = \big|\frac{u}{n}\big| = \big|G^{-1}H_L\big|$. Input usage due to disturbances $d_y$ and measurement noise $n$ is determined by $\big|\frac{u}{d_y}\big| = \big|\frac{u}{n}\big| = \big|G^{-1}H_L\big|$.
Thus it can be limited by setting an upper bound on $|H_L|$. Thus it can be limited by setting an upper bound on $|H_L|$.
Input usage due to reference signal $r$ is determined by $\big|\frac{u}{r}\big| = \big|G^{-1} K_r\big|$ when using a pre-filter (Figure ref:fig:detail_control_sf_arch_class_prefilter) and $\big|\frac{u}{r}\big| = \big|G^{-1}\big|$ otherwise. Input usage due to reference signal $r$ is determined by $\big|\frac{u}{r}\big| = \big|G^{-1} K_r\big|$ when using a pre-filter (Figure ref:fig:detail_control_cf_arch_class_prefilter) and $\big|\frac{u}{r}\big| = \big|G^{-1}\big|$ otherwise.
Proper choice of $|K_r|$ is then useful to limit input usage due to change of reference signal.\\ Proper choice of $|K_r|$ is then useful to limit input usage due to change of reference signal.
**** Robust Stability (RS) **** Robust Stability (RS)
Robustness stability represents the ability of the control system to remain stable even though there are differences between the actual system $G^\prime$ and the model $G$ that was used to design the controller. Robustness stability represents the ability of the control system to remain stable even though there are differences between the actual system $G^\prime$ and the model $G$ that was used to design the controller.
These differences can have various origins such as unmodelled dynamics or non-linearities. These differences can have various origins such as unmodelled dynamics or non-linearities.
To represent the differences between the model and the actual system, one can choose to use the general input multiplicative uncertainty as represented in Figure ref:fig:detail_control_input_uncertainty. To represent the differences between the model and the actual system, one can choose to use the general input multiplicative uncertainty as represented in Figure ref:fig:detail_control_cf_input_uncertainty.
#+begin_src latex :file detail_control_input_uncertainty.pdf #+begin_src latex :file detail_control_cf_input_uncertainty.pdf
\tikzset{block/.default={0.8cm}{0.6cm}} \tikzset{block/.default={0.8cm}{0.6cm}}
\tikzset{addb/.append style={scale=0.7}} \tikzset{addb/.append style={scale=0.7}}
\tikzset{node distance=0.6} \tikzset{node distance=0.6}
@ -3682,14 +3682,14 @@ To represent the differences between the model and the actual system, one can ch
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:detail_control_input_uncertainty #+name: fig:detail_control_cf_input_uncertainty
#+caption: Input multiplicative uncertainty #+caption: Input multiplicative uncertainty
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_input_uncertainty.png]] [[file:figs/detail_control_cf_input_uncertainty.png]]
Then, the set of possible perturbed plant is described by Then, the set of possible perturbed plant is described by
\begin{equation}\label{eq:detail_control_multiplicative_uncertainty} \begin{equation}\label{eq:detail_control_cf_multiplicative_uncertainty}
\Pi_i: \quad G_p(s) = G(s)\big(1 + w_I(s)\Delta_I(s)\big); \quad \abs{\Delta_I(j\w)} \le 1 \ \forall\w \Pi_i: \quad G_p(s) = G(s)\big(1 + w_I(s)\Delta_I(s)\big); \quad \abs{\Delta_I(j\w)} \le 1 \ \forall\w
\end{equation} \end{equation}
and $w_I$ should be chosen such that all possible plants $G^\prime$ are contained in the set $\Pi_i$. and $w_I$ should be chosen such that all possible plants $G^\prime$ are contained in the set $\Pi_i$.
@ -3707,24 +3707,24 @@ Using input multiplicative uncertainty, robust stability is equivalent to have [
\end{align*} \end{align*}
Robust stability is then guaranteed by having the low pass filter $H_L$ satisfying eqref:eq:detail_control_robust_stability. Robust stability is then guaranteed by having the low pass filter $H_L$ saticfying eqref:eq:detail_control_cf_robust_stability.
\begin{equation}\label{eq:detail_control_robust_stability} \begin{equation}\label{eq:detail_control_cf_robust_stability}
\text{RS} \Leftrightarrow |H_L| \le \frac{1}{|w_I| (2 + |w_I|)}\quad \forall \omega \text{RS} \Leftrightarrow |H_L| \le \frac{1}{|w_I| (2 + |w_I|)}\quad \forall \omega
\end{equation} \end{equation}
To ensure robust stability condition eqref:eq:detail_control_nominal_perf_hl can be used if $w_L$ is designed in such a way that $|w_L| \ge |w_I| (2 + |w_I|)$.\\ To ensure robust stability condition eqref:eq:detail_control_cf_nominal_perf_hl can be used if $w_L$ is designed in such a way that $|w_L| \ge |w_I| (2 + |w_I|)$.
**** Robust Performance (RP) **** Robust Performance (RP)
Robust performance is a property for a controlled system to have its performance guaranteed even though the dynamics of the plant is changing within specified bounds. Robust performance is a property for a controlled system to have its performance guaranteed even though the dynamics of the plant is changing within specified bounds.
For robust performance, we then require to have the performance condition valid for all possible plants in the defined uncertainty set: For robust performance, we then require to have the performance condition valid for all possible plants in the defined uncertainty set:
\begin{subnumcases}{\text{RP} \Leftrightarrow} \begin{subnumcases}{\text{RP} \Leftrightarrow}
|w_H S| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \label{eq:detail_control_robust_perf_S}\\ |w_H S| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \label{eq:detail_control_cf_robust_perf_S}\\
|w_L T| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \label{eq:detail_control_robust_perf_T} |w_L T| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \label{eq:detail_control_cf_robust_perf_T}
\end{subnumcases} \end{subnumcases}
Let's transform condition eqref:eq:detail_control_robust_perf_S into a condition on the complementary filters Let's trancform condition eqref:eq:detail_control_cf_robust_perf_S into a condition on the complementary filters
\begin{align*} \begin{align*}
& \left| w_H S \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\ & \left| w_H S \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\
\Leftrightarrow & \left| w_H \frac{1}{1 + G^\prime G^{-1} H_H^{-1} H_L} \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\ \Leftrightarrow & \left| w_H \frac{1}{1 + G^\prime G^{-1} H_H^{-1} H_L} \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\
@ -3733,7 +3733,7 @@ Let's transform condition eqref:eq:detail_control_robust_perf_S into a condition
\Leftrightarrow & | w_H H_H | + | w_I H_L | \le 1, \ \forall\omega \\ \Leftrightarrow & | w_H H_H | + | w_I H_L | \le 1, \ \forall\omega \\
\end{align*} \end{align*}
The same can be done with condition eqref:eq:detail_control_robust_perf_T The same can be done with condition eqref:eq:detail_control_cf_robust_perf_T
\begin{align*} \begin{align*}
& \left| w_L T \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\ & \left| w_L T \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\
\Leftrightarrow & \left| w_L \frac{G^\prime G^{-1} H_H^{-1} H_L}{1 + G^\prime G^{-1} H_H^{-1} H_L} \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\ \Leftrightarrow & \left| w_L \frac{G^\prime G^{-1} H_H^{-1} H_L}{1 + G^\prime G^{-1} H_H^{-1} H_L} \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\
@ -3742,43 +3742,43 @@ The same can be done with condition eqref:eq:detail_control_robust_perf_T
\Leftrightarrow & \left| H_L \right| \le \frac{1}{|w_L| (1 + |w_I|) + |w_I|} \quad \forall\omega \\ \Leftrightarrow & \left| H_L \right| \le \frac{1}{|w_L| (1 + |w_I|) + |w_I|} \quad \forall\omega \\
\end{align*} \end{align*}
Robust performance is then guaranteed if eqref:eq:detail_control_robust_perf_a and eqref:eq:detail_control_robust_perf_b are satisfied. Robust performance is then guaranteed if eqref:eq:detail_control_cf_robust_perf_a and eqref:eq:detail_control_cf_robust_perf_b are satisfied.
\begin{subnumcases}\label{eq:detail_control_robust_performance} \begin{subnumcases}\label{eq:detail_control_cf_robust_performance}
{\text{RP} \Leftrightarrow} {\text{RP} \Leftrightarrow}
| w_H H_H | + | w_I H_L | \le 1, \ \forall\omega \label{eq:detail_control_robust_perf_a}\\ | w_H H_H | + | w_I H_L | \le 1, \ \forall\omega \label{eq:detail_control_cf_robust_perf_a}\\
\left| H_L \right| \le \frac{1}{|w_L| (1 + |w_I|) + |w_I|} \quad \forall\omega \label{eq:detail_control_robust_perf_b} \left| H_L \right| \le \frac{1}{|w_L| (1 + |w_I|) + |w_I|} \quad \forall\omega \label{eq:detail_control_cf_robust_perf_b}
\end{subnumcases} \end{subnumcases}
One should be aware than when looking for a robust performance condition, only the worst case is evaluated and using the robust stability condition may lead to conservative control. One should be aware than when looking for a robust performance condition, only the worst case is evaluated and using the robust stability condition may lead to conservative control.
** TODO [#C] Analytical formulas for complementary filters? ** TODO [#C] Analytical formulas for complementary filters?
<<ssec:detail_control_analytical_complementary_filters>> <<ssec:detail_control_cf_analytical_complementary_filters>>
** Numerical Example ** Numerical Example
<<ssec:detail_control_simulations>> <<ssec:detail_control_cf_simulations>>
**** Procedure **** Procedure
In order to apply this control technique, we propose the following procedure: In order to apply this control technique, we propose the following procedure:
1. Identify the plant to be controlled in order to obtain $G$ 1. Identify the plant to be controlled in order to obtain $G$
2. Design the weighting function $w_I$ such that all possible plants $G^\prime$ are contained in the set $\Pi_i$ 2. Design the weighting function $w_I$ such that all possible plants $G^\prime$ are contained in the set $\Pi_i$
3. Translate the performance requirements into upper bounds on the complementary filters (as explained in Sec. ref:ssec:detail_control_trans_perf) 3. Translate the performance requirements into upper bounds on the complementary filters (as explained in Sec. ref:ssec:detail_control_cf_trans_perf)
4. Design the weighting functions $w_H$ and $w_L$ and generate the complementary filters using $\hinf\text{-synthesis}$ (as further explained in Sec. ref:ssec:detail_control_hinf_method). 4. Design the weighting functions $w_H$ and $w_L$ and generate the complementary filters using $\hinf\text{-synthesis}$ (as was explained in Section ref:ssec:detail_control_sensor_hinf_method).
If the synthesis fails to give filters satisfying the upper bounds previously defined, either the requirements have to be reworked or a better model $G$ that will permits to have a smaller $w_I$ should be obtained. If the synthesis fails to give filters satisfying the upper bounds previously defined, either the requirements have to be reworked or a better model $G$ that will permits to have a smaller $w_I$ should be obtained.
If one does not want to use the $\mathcal{H}_\infty$ synthesis, one can use pre-made complementary filters given in Sec. ref:ssec:detail_control_analytical_complementary_filters. If one does not want to use the $\mathcal{H}_\infty$ synthesis, one can use pre-made complementary filters given in Sec. ref:ssec:detail_control_cf_analytical_complementary_filters.
6. If $K = \left( G H_H \right)^{-1}$ is not proper, a low pass filter should be added 6. If $K = \left( G H_H \right)^{-1}$ is not proper, a low pass filter should be added
7. Design a pre-filter $K_r$ if requirements on input usage or response to reference change are not met 7. Design a pre-filter $K_r$ if requirements on input usage or response to reference change are not met
8. Control implementation: Filter the measurement with $H_L$, implement the controller $K$ and the pre-filter $K_r$ as shown on Figure ref:fig:detail_control_sf_arch_class_prefilter 8. Control implementation: Filter the measurement with $H_L$, implement the controller $K$ and the pre-filter $K_r$ as shown on Figure ref:fig:detail_control_cf_arch_class_prefilter
**** Plant **** Plant
Let's consider the problem of controlling an active vibration isolation system that consist of a mass $m$ to be isolated, a piezoelectric actuator and a geophone. Let's consider the problem of controlling an active vibration isolation system that consist of a mass $m$ to be isolated, a piezoelectric actuator and a geophone.
We represent this system by a mass-spring-damper system as shown Figure ref:fig:detail_control_mech_sys_alone where $m$ typically represents the mass of the payload to be isolated, $k$ and $c$ represent respectively the stiffness and damping of the mount. We represent this system by a mass-spring-damper system as shown Figure ref:fig:detail_control_cf_mech_sys_alone where $m$ typically represents the mass of the payload to be isolated, $k$ and $c$ represent respectively the stiffness and damping of the mount.
$w$ is the ground motion. $w$ is the ground motion.
The values for the parameters of the models are The values for the parameters of the models are
\[ m = \SI{20}{\kg}; \quad k = 10^4\si{\N/\m}; \quad c = 10^2\si{\N\per(\m\per\s)} \] \[ m = \SI{20}{\kg}; \quad k = 10^4\si{\N/\m}; \quad c = 10^2\si{\N\per(\m\per\s)} \]
#+begin_src latex :file detail_control_mech_sys_alone.pdf #+begin_src latex :file detail_control_cf_mech_sys_alone.pdf
\tikzset{block/.default={0.8cm}{0.6cm}} \tikzset{block/.default={0.8cm}{0.6cm}}
\tikzset{addb/.append style={scale=0.7}} \tikzset{addb/.append style={scale=0.7}}
\tikzset{node distance=0.6} \tikzset{node distance=0.6}
@ -3827,17 +3827,17 @@ The values for the parameters of the models are
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:detail_control_mech_sys_alone #+name: fig:detail_control_cf_mech_sys_alone
#+caption: Model of the positioning system #+caption: Model of the positioning system
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_mech_sys_alone.png]] [[file:figs/detail_control_cf_mech_sys_alone.png]]
The model of the plant $G(s)$ from actuator force $F$ to displacement $x$ is then The model of the plant $G(s)$ from actuator force $F$ to displacement $x$ is then
\begin{equation} \begin{equation}
G(s) = \frac{1}{m s^2 + c s + k} G(s) = \frac{1}{m s^2 + c s + k}
\end{equation} \end{equation}
Its bode plot is shown on Figure ref:fig:detail_control_bode_plot_mech_sys. Its bode plot is shown on Figure ref:fig:detail_control_cf_bode_plot_mech_sys.
#+begin_src matlab #+begin_src matlab
m = 10; % mass [kg] m = 10; % mass [kg]
@ -3881,13 +3881,13 @@ xlim([freqs(1), freqs(end)]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_bode_plot_mech_sys.pdf', 'width', 'wide', 'height', 600); exportFig('figs/detail_control_cf_bode_plot_mech_sys.pdf', 'width', 'wide', 'height', 600);
#+end_src #+end_src
#+name: fig:detail_control_bode_plot_mech_sys #+name: fig:detail_control_cf_bode_plot_mech_sys
#+caption: Bode plot of the transfer function $G(s)$ from $F$ to $x$ #+caption: Bode plot of the trancfer function $G(s)$ from $F$ to $x$
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_bode_plot_mech_sys.png]] [[file:figs/detail_control_cf_bode_plot_mech_sys.png]]
**** Requirements **** Requirements
The control objective is to isolate the displacement $x$ of the mass from the ground motion $w$. The control objective is to isolate the displacement $x$ of the mass from the ground motion $w$.
@ -3905,7 +3905,7 @@ We model the uncertainty on the dynamics of the plant by a multiplicative weight
\end{equation} \end{equation}
where $r_0=0.1$ is the relative uncertainty at steady-state, $1/\tau=\SI{100}{\hertz}$ is the frequency at which the relative uncertainty reaches $\SI{100}{\percent}$, and $r_\infty=10$ is the magnitude of the weight at high frequency. where $r_0=0.1$ is the relative uncertainty at steady-state, $1/\tau=\SI{100}{\hertz}$ is the frequency at which the relative uncertainty reaches $\SI{100}{\percent}$, and $r_\infty=10$ is the magnitude of the weight at high frequency.
All the requirements on $H_L$ and $H_H$ are represented on Figure ref:fig:detail_control_spec_S_T. All the requirements on $H_L$ and $H_H$ are represented on Figure ref:fig:detail_control_cf_specs_S_T.
- [ ] TODO: Make Matlab code to plot the specifications - [ ] TODO: Make Matlab code to plot the specifications
@ -3926,24 +3926,24 @@ legend('location', 'northeast', 'FontSize', 8);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_spec_S_T.pdf', 'width', 'half', 'height', 'normal'); exportFig('figs/detail_control_cf_specs_S_T.pdf', 'width', 'half', 'height', 'normal');
#+end_src #+end_src
#+name: fig:detail_control_spec_S_T_obtained_filters #+name: fig:detail_control_cf_specs_S_T_obtained_filters
#+caption: Caption with reference to sub figure (\subref{fig:detail_control_spec_S_T}) (\subref{fig:detail_control_hinf_filters_result_weights}) #+caption: Caption with reference to sub figure (\subref{fig:detail_control_cf_specs_S_T}) (\subref{fig:detail_control_cf_hinf_filters_result_weights})
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_spec_S_T}Closed loop specifications} #+attr_latex: :caption \subcaption{\label{fig:detail_control_cf_specs_S_T}Closed loop specifications}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :width 0.95\linewidth #+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_spec_S_T.png]] [[file:figs/detail_control_cf_specs_S_T.png]]
#+end_subfigure #+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_hinf_filters_result_weights}Obtained complementary filters} #+attr_latex: :caption \subcaption{\label{fig:detail_control_cf_hinf_filters_result_weights}Obtained complementary filters}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :width 0.95\linewidth #+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_hinf_filters_result_weights.png]] [[file:figs/detail_control_cf_hinf_filters_result_weights.png]]
#+end_subfigure #+end_subfigure
#+end_figure #+end_figure
@ -3951,7 +3951,7 @@ exportFig('figs/detail_control_spec_S_T.pdf', 'width', 'half', 'height', 'normal
*Or maybe use analytical formulas as proposed here: [[file:~/Cloud/research/papers/dehaeze20_virtu_senso_fusio/matlab/index.org::*Complementary filters using analytical formula][Complementary filters using analytical formula]]* *Or maybe use analytical formulas as proposed here: [[file:~/Cloud/research/papers/dehaeze20_virtu_senso_fusio/matlab/index.org::*Complementary filters using analytical formula][Complementary filters using analytical formula]]*
We then design $w_L$ and $w_H$ such that their magnitude are below the upper bounds shown on Figure ref:fig:detail_control_hinf_filters_result_weights. We then design $w_L$ and $w_H$ such that their magnitude are below the upper bounds shown on Figure ref:fig:detail_control_cf_hinf_filters_result_weights.
\begin{subequations} \begin{subequations}
\begin{align} \begin{align}
w_L &= \frac{(s+22.36)^2}{0.005(s+1000)^2}\\ w_L &= \frac{(s+22.36)^2}{0.005(s+1000)^2}\\
@ -3974,7 +3974,7 @@ P = [0 wL;
Hh_hinf = 1 - Hl_hinf; Hh_hinf = 1 - Hl_hinf;
#+end_src #+end_src
After the $\hinf\text{-synthesis}$, we obtain $H_L$ and $H_H$, and we plot their magnitude on phase on Figure ref:fig:detail_control_hinf_filters_result_weights. After the $\hinf\text{-synthesis}$, we obtain $H_L$ and $H_H$, and we plot their magnitude on phase on Figure ref:fig:detail_control_cf_hinf_filters_result_weights.
\begin{subequations} \begin{subequations}
\begin{align} \begin{align}
@ -4005,14 +4005,14 @@ legend('location', 'southeast', 'FontSize', 8);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_hinf_filters_result_weights.pdf', 'width', 'half', 'height', 'normal'); exportFig('figs/detail_control_cf_hinf_filters_result_weights.pdf', 'width', 'half', 'height', 'normal');
#+end_src #+end_src
**** Controller analysis **** Controller analysis
The controller is $K = \left( H_H G \right)^{-1}$. The controller is $K = \left( H_H G \right)^{-1}$.
A low pass filter is added to $K$ so that it is proper and implementable. A low pass filter is added to $K$ so that it is proper and implementable.
The obtained controller is shown on Figure ref:fig:detail_control_bode_Kfb. The obtained controller is shown on Figure ref:fig:detail_control_cf_bode_Kfb.
#+begin_src matlab #+begin_src matlab
omega = 2*pi*500; omega = 2*pi*500;
@ -4049,12 +4049,12 @@ xlim([freqs(1), freqs(end)]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_bode_Kfb.pdf', 'width', 'half', 'height', 600); exportFig('figs/detail_control_cf_bode_Kfb.pdf', 'width', 'half', 'height', 600);
#+end_src #+end_src
It is implemented as shown on Figure ref:fig:detail_control_mech_sys_alone_ctrl. It is implemented as shown on Figure ref:fig:detail_control_cf_mech_sys_alone_ctrl.
#+begin_src latex :file detail_control_mech_sys_alone_ctrl.pdf #+begin_src latex :file detail_control_cf_mech_sys_alone_ctrl.pdf
\tikzset{block/.default={0.8cm}{0.6cm}} \tikzset{block/.default={0.8cm}{0.6cm}}
\tikzset{addb/.append style={scale=0.7}} \tikzset{addb/.append style={scale=0.7}}
\tikzset{node distance=0.6} \tikzset{node distance=0.6}
@ -4111,10 +4111,10 @@ It is implemented as shown on Figure ref:fig:detail_control_mech_sys_alone_ctrl.
\end{tikzpicture} \end{tikzpicture}
#+end_src #+end_src
#+name: fig:detail_control_mech_sys_alone_ctrl #+name: fig:detail_control_cf_mech_sys_alone_ctrl
#+caption: Control of a positioning system #+caption: Control of a positioning system
#+RESULTS: #+RESULTS:
[[file:figs/detail_control_mech_sys_alone_ctrl.png]] [[file:figs/detail_control_cf_mech_sys_alone_ctrl.png]]
#+begin_src matlab :exports none :results none #+begin_src matlab :exports none :results none
%% Bode plot of the loop gain K G H_L %% Bode plot of the loop gain K G H_L
@ -4146,29 +4146,29 @@ xlim([freqs(1), freqs(end)]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_bode_plot_loop_gain_robustness.pdf', 'width', 'half', 'height', 600); exportFig('figs/detail_control_cf_bode_plot_loop_gain_robustness.pdf', 'width', 'half', 'height', 600);
#+end_src #+end_src
#+name: fig:detail_control_bode_Kfb_loop_gain #+name: fig:detail_control_cf_bode_Kfb_loop_gain
#+caption: Caption with reference to sub figure (\subref{fig:detail_control_bode_Kfb}) (\subref{fig:detail_control_bode_plot_loop_gain_robustness}) #+caption: Caption with reference to sub figure (\subref{fig:detail_control_cf_bode_Kfb}) (\subref{fig:detail_control_cf_bode_plot_loop_gain_robustness})
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_bode_Kfb}Controller $K$} #+attr_latex: :caption \subcaption{\label{fig:detail_control_cf_bode_Kfb}Controller $K$}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :width 0.95\linewidth #+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_bode_Kfb.png]] [[file:figs/detail_control_cf_bode_Kfb.png]]
#+end_subfigure #+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_bode_plot_loop_gain_robustness}Loop Gain} #+attr_latex: :caption \subcaption{\label{fig:detail_control_cf_bode_plot_loop_gain_robustness}Loop Gain}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :width 0.95\linewidth #+attr_latex: :width 0.95\linewidth
[[file:figs/detail_control_bode_plot_loop_gain_robustness.png]] [[file:figs/detail_control_cf_bode_plot_loop_gain_robustness.png]]
#+end_subfigure #+end_subfigure
#+end_figure #+end_figure
**** Robustness analysis **** Robustness analysis
The robust stability can be access on the nyquist plot (Figure ref:fig:detail_control_nyquist_robustness). The robust stability can be access on the nyquist plot (Figure ref:fig:detail_control_cf_nyquist_robustness).
#+begin_src matlab #+begin_src matlab
Gds = usample(G*(1+wI*ultidyn('Delta', [1 1])), 20); Gds = usample(G*(1+wI*ultidyn('Delta', [1 1])), 20);
@ -4198,10 +4198,10 @@ xlabel('Real Part'); ylabel('Imaginary Part');
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_nyquist_robustness', 'width', 'half', 'height', 'normal'); exportFig('figs/detail_control_cf_nyquist_robustness', 'width', 'half', 'height', 'normal');
#+end_src #+end_src
The robust performance is shown on Figure ref:fig:detail_control_robust_perf. The robust performance is shown on Figure ref:fig:detail_control_cf_robust_perf.
#+begin_src matlab :exports none :results none #+begin_src matlab :exports none :results none
%% Robust Performance %% Robust Performance
@ -4232,29 +4232,29 @@ legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/detail_control_robust_perf.pdf', 'width', 'half', 'height', 'normal'); exportFig('figs/detail_control_cf_robust_perf.pdf', 'width', 'half', 'height', 'normal');
#+end_src #+end_src
#+name: fig:fig_label #+name: fig:detail_control_cf_simulation_results
#+caption: Caption with reference to sub figure (\subref{fig:detail_control_nyquist_robustness}) (\subref{fig:detail_control_robust_perf}) #+caption: Caption with reference to sub figure (\subref{fig:detail_control_cf_nyquist_robustness}) (\subref{fig:detail_control_cf_robust_perf})
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_nyquist_robustness}Robust Stability} #+attr_latex: :caption \subcaption{\label{fig:detail_control_cf_nyquist_robustness}Robust Stability}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :scale 0.8 #+attr_latex: :scale 0.8
[[file:figs/detail_control_nyquist_robustness.png]] [[file:figs/detail_control_cf_nyquist_robustness.png]]
#+end_subfigure #+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:detail_control_robust_perf}Robust performance} #+attr_latex: :caption \subcaption{\label{fig:detail_control_cf_robust_perf}Robust performance}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :scale 0.8 #+attr_latex: :scale 0.8
[[file:figs/detail_control_robust_perf.png]] [[file:figs/detail_control_cf_robust_perf.png]]
#+end_subfigure #+end_subfigure
#+end_figure #+end_figure
** TODO [#C] Experimental Validation? ** TODO [#C] Experimental Validation?
<<ssec:detail_control_exp_validation>> <<ssec:detail_control_cf_exp_validation>>
[[file:~/Cloud/research/papers/dehaeze20_virtu_senso_fusio/matlab/index.org::*Experimental Validation][Experimental Validation]] [[file:~/Cloud/research/papers/dehaeze20_virtu_senso_fusio/matlab/index.org::*Experimental Validation][Experimental Validation]]

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2025-04-05 Sat 22:29 % Created 2025-04-05 Sat 22:48
% 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}
@ -27,12 +27,12 @@ When controlling a MIMO system (specifically parallel manipulator such as the St
Several considerations: Several considerations:
\begin{itemize} \begin{itemize}
\item Section \ref{sec:detail_control_multiple_sensor}: How to most effectively use/combine multiple sensors \item Section \ref{sec:detail_control_sensor}: How to most effectively use/combine multiple sensors
\item Section \ref{sec:detail_control_decoupling}: How to decouple a system \item Section \ref{sec:detail_control_decoupling}: How to decouple a system
\item Section \ref{sec:detail_control_optimization}: How to design the controller \item Section \ref{sec:detail_control_cf}: How to design the controller
\end{itemize} \end{itemize}
\chapter{Multiple Sensor Control} \chapter{Multiple Sensor Control}
\label{sec:detail_control_multiple_sensor} \label{sec:detail_control_sensor}
\textbf{Look at what was done in the introduction \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/phd-thesis-chapters/A0-nass-introduction/nass-introduction.org}{Stewart platforms: Control architecture}} \textbf{Look at what was done in the introduction \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/phd-thesis-chapters/A0-nass-introduction/nass-introduction.org}{Stewart platforms: Control architecture}}
@ -159,7 +159,7 @@ For sensor fusion applications, both methods are sharing many relationships \cit
However, for Kalman filtering, assumptions must be made about the probabilistic character of the sensor noises \cite{robert12_introd_random_signal_applied_kalman} whereas it is not the case with complementary filters. However, for Kalman filtering, assumptions must be made about the probabilistic character of the sensor noises \cite{robert12_introd_random_signal_applied_kalman} whereas it is not the case with complementary filters.
Furthermore, the advantages of complementary filters over Kalman filtering for sensor fusion are their general applicability, their low computational cost \cite{higgins75_compar_compl_kalman_filter}, and the fact that they are intuitive as their effects can be easily interpreted in the frequency domain. Furthermore, the advantages of complementary filters over Kalman filtering for sensor fusion are their general applicability, their low computational cost \cite{higgins75_compar_compl_kalman_filter}, and the fact that they are intuitive as their effects can be easily interpreted in the frequency domain.
A set of filters is said to be complementary if the sum of their transfer functions is equal to one at all frequencies. A set of filters is said to be complementary if the sum of their trancfer functions is equal to one at all frequencies.
In the early days of complementary filtering, analog circuits were employed to physically realize the filters \cite{anderson53_instr_approac_system_steer_comput}. In the early days of complementary filtering, analog circuits were employed to physically realize the filters \cite{anderson53_instr_approac_system_steer_comput}.
Analog complementary filters are still used today \cite{yong16_high_speed_vertic_posit_stage,moore19_capac_instr_sensor_fusion_high_bandw_nanop}, but most of the time they are now implemented digitally as it allows for much more flexibility. Analog complementary filters are still used today \cite{yong16_high_speed_vertic_posit_stage,moore19_capac_instr_sensor_fusion_high_bandw_nanop}, but most of the time they are now implemented digitally as it allows for much more flexibility.
@ -200,7 +200,7 @@ This means that the super sensor provides an estimate \(\hat{x}\) of \(x\) which
\caption{\label{fig:detail_control_sensor_fusion_overview}Schematic of a sensor fusion architecture using complementary filters.} \caption{\label{fig:detail_control_sensor_fusion_overview}Schematic of a sensor fusion architecture using complementary filters.}
\end{figure} \end{figure}
The complementary property of filters \(H_1(s)\) and \(H_2(s)\) implies that the sum of their transfer functions is equal to one \eqref{eq:detail_control_sensor_comp_filter}. The complementary property of filters \(H_1(s)\) and \(H_2(s)\) implies that the sum of their trancfer functions is equal to one \eqref{eq:detail_control_sensor_comp_filter}.
That is, unity magnitude and zero phase at all frequencies. That is, unity magnitude and zero phase at all frequencies.
\begin{equation}\label{eq:detail_control_sensor_comp_filter} \begin{equation}\label{eq:detail_control_sensor_comp_filter}
@ -216,14 +216,14 @@ Before filtering the sensor outputs \(\tilde{x}_i\) by the complementary filters
This normalization consists of using an estimate \(\hat{G}_i(s)\) of the sensor dynamics \(G_i(s)\), and filtering the sensor output by the inverse of this estimate \(\hat{G}_i^{-1}(s)\) as shown in Figure \ref{fig:detail_control_sensor_model_calibrated}. This normalization consists of using an estimate \(\hat{G}_i(s)\) of the sensor dynamics \(G_i(s)\), and filtering the sensor output by the inverse of this estimate \(\hat{G}_i^{-1}(s)\) as shown in Figure \ref{fig:detail_control_sensor_model_calibrated}.
It is here supposed that the sensor inverse \(\hat{G}_i^{-1}(s)\) is proper and stable. It is here supposed that the sensor inverse \(\hat{G}_i^{-1}(s)\) is proper and stable.
This way, the units of the estimates \(\hat{x}_i\) are equal to the units of the physical quantity \(x\). This way, the units of the estimates \(\hat{x}_i\) are equal to the units of the physical quantity \(x\).
The sensor dynamics estimate \(\hat{G}_i(s)\) can be a simple gain or a more complex transfer function. The sensor dynamics estimate \(\hat{G}_i(s)\) can be a simple gain or a more complex trancfer function.
\begin{figure}[htbp] \begin{figure}[htbp]
\begin{subfigure}{0.48\textwidth} \begin{subfigure}{0.48\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,scale=1]{figs/detail_control_sensor_model.png} \includegraphics[scale=1,scale=1]{figs/detail_control_sensor_model.png}
\end{center} \end{center}
\subcaption{\label{fig:detail_control_sensor_model}Basic sensor model consisting of a noise input $n_i$ and a linear time invariant transfer function $G_i(s)$} \subcaption{\label{fig:detail_control_sensor_model}Basic sensor model consisting of a noise input $n_i$ and a linear time invariant trancfer function $G_i(s)$}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.48\textwidth} \begin{subfigure}{0.48\textwidth}
\begin{center} \begin{center}
@ -289,7 +289,7 @@ Hence, by properly shaping the norm of the complementary filters, it is possible
In practical systems the sensor normalization is not perfect and condition \eqref{eq:detail_control_sensor_perfect_dynamics} is not verified. In practical systems the sensor normalization is not perfect and condition \eqref{eq:detail_control_sensor_perfect_dynamics} is not verified.
In order to study such imperfection, a multiplicative input uncertainty is added to the sensor dynamics (Figure \ref{fig:detail_control_sensor_model_uncertainty}). In order to study such imperfection, a multiplicative input uncertainty is added to the sensor dynamics (Figure \ref{fig:detail_control_sensor_model_uncertainty}).
The nominal model is the estimated model used for the normalization \(\hat{G}_i(s)\), \(\Delta_i(s)\) is any stable transfer function satisfying \(|\Delta_i(j\omega)| \le 1,\ \forall\omega\), and \(w_i(s)\) is a weighting transfer function representing the magnitude of the uncertainty. The nominal model is the estimated model used for the normalization \(\hat{G}_i(s)\), \(\Delta_i(s)\) is any stable trancfer function saticfying \(|\Delta_i(j\omega)| \le 1,\ \forall\omega\), and \(w_i(s)\) is a weighting trancfer function representing the magnitude of the uncertainty.
The weight \(w_i(s)\) is chosen such that the real sensor dynamics \(G_i(j\omega)\) is contained in the uncertain region represented by a circle in the complex plane, centered on \(1\) and with a radius equal to \(|w_i(j\omega)|\). The weight \(w_i(s)\) is chosen such that the real sensor dynamics \(G_i(j\omega)\) is contained in the uncertain region represented by a circle in the complex plane, centered on \(1\) and with a radius equal to \(|w_i(j\omega)|\).
As the nominal sensor dynamics is taken as the normalized filter, the normalized sensor can be further simplified as shown in Figure \ref{fig:detail_control_sensor_model_uncertainty_simplified}. As the nominal sensor dynamics is taken as the normalized filter, the normalized sensor can be further simplified as shown in Figure \ref{fig:detail_control_sensor_model_uncertainty_simplified}.
@ -314,7 +314,7 @@ The sensor fusion architecture with the sensor models including dynamical uncert
The super sensor dynamics \eqref{eq:detail_control_sensor_super_sensor_dyn_uncertainty} is no longer equal to \(1\) and now depends on the sensor dynamical uncertainty weights \(w_i(s)\) as well as on the complementary filters \(H_i(s)\). The super sensor dynamics \eqref{eq:detail_control_sensor_super_sensor_dyn_uncertainty} is no longer equal to \(1\) and now depends on the sensor dynamical uncertainty weights \(w_i(s)\) as well as on the complementary filters \(H_i(s)\).
The dynamical uncertainty of the super sensor can be graphically represented in the complex plane by a circle centered on \(1\) with a radius equal to \(|w_1(j\omega) H_1(j\omega)| + |w_2(j\omega) H_2(j\omega)|\) (Figure \ref{fig:detail_control_sensor_uncertainty_set_super_sensor}). The dynamical uncertainty of the super sensor can be graphically represented in the complex plane by a circle centered on \(1\) with a radius equal to \(|w_1(j\omega) H_1(j\omega)| + |w_2(j\omega) H_2(j\omega)|\) (Figure \ref{fig:detail_control_sensor_uncertainty_set_super_sensor}).
\begin{equation}\label{eq:detail_control_super_sensor_dyn_uncertainty} \begin{equation}\label{eq:detail_control_sensor_super_sensor_dyn_uncertainty}
\frac{\hat{x}}{x} = 1 + w_1(s) H_1(s) \Delta_1(s) + w_2(s) H_2(s) \Delta_2(s) \frac{\hat{x}}{x} = 1 + w_1(s) H_1(s) \Delta_1(s) + w_2(s) H_2(s) \Delta_2(s)
\end{equation} \end{equation}
@ -353,8 +353,8 @@ Finally, the synthesis method is validated on an simple example.
\paragraph{Synthesis Objective} \paragraph{Synthesis Objective}
The synthesis objective is to shape the norm of two filters \(H_1(s)\) and \(H_2(s)\) while ensuring their complementary property \eqref{eq:detail_control_sensor_comp_filter}. The synthesis objective is to shape the norm of two filters \(H_1(s)\) and \(H_2(s)\) while ensuring their complementary property \eqref{eq:detail_control_sensor_comp_filter}.
This is equivalent as to finding proper and stable transfer functions \(H_1(s)\) and \(H_2(s)\) such that conditions \eqref{eq:detail_control_sensor_hinf_cond_complementarity}, \eqref{eq:detail_control_sensor_hinf_cond_h1} and \eqref{eq:detail_control_sensor_hinf_cond_h2} are satisfied. This is equivalent as to finding proper and stable trancfer functions \(H_1(s)\) and \(H_2(s)\) such that conditions \eqref{eq:detail_control_sensor_hinf_cond_complementarity}, \eqref{eq:detail_control_sensor_hinf_cond_h1} and \eqref{eq:detail_control_sensor_hinf_cond_h2} are saticfied.
\(W_1(s)\) and \(W_2(s)\) are two weighting transfer functions that are carefully chosen to specify the maximum wanted norm of the complementary filters during the synthesis. \(W_1(s)\) and \(W_2(s)\) are two weighting trancfer functions that are carefully chosen to specify the maximum wanted norm of the complementary filters during the synthesis.
\begin{subequations}\label{eq:detail_control_sensor_comp_filter_problem_form} \begin{subequations}\label{eq:detail_control_sensor_comp_filter_problem_form}
\begin{align} \begin{align}
@ -394,7 +394,7 @@ Applying the standard \(\mathcal{H}_\infty\) synthesis to the generalized plant
\left\|\begin{matrix} \left(1 - H_2(s)\right) W_1(s) \\ H_2(s) W_2(s) \end{matrix}\right\|_\infty \le 1 \left\|\begin{matrix} \left(1 - H_2(s)\right) W_1(s) \\ H_2(s) W_2(s) \end{matrix}\right\|_\infty \le 1
\end{equation} \end{equation}
By then defining \(H_1(s)\) to be the complementary of \(H_2(s)\) \eqref{eq:detail_control_sensor_definition_H1}, the \(\mathcal{H}_\infty\) synthesis objective becomes equivalent to \eqref{eq:detail_control_sensor_hinf_problem} which ensures that \eqref{eq:detail_control_sensor_hinf_cond_h1} and \eqref{eq:detail_control_sensor_hinf_cond_h2} are satisfied. By then defining \(H_1(s)\) to be the complementary of \(H_2(s)\) \eqref{eq:detail_control_sensor_definition_H1}, the \(\mathcal{H}_\infty\) synthesis objective becomes equivalent to \eqref{eq:detail_control_sensor_hinf_problem} which ensures that \eqref{eq:detail_control_sensor_hinf_cond_h1} and \eqref{eq:detail_control_sensor_hinf_cond_h2} are saticfied.
\begin{equation}\label{eq:detail_control_sensor_definition_H1} \begin{equation}\label{eq:detail_control_sensor_definition_H1}
H_1(s) \triangleq 1 - H_2(s) H_1(s) \triangleq 1 - H_2(s)
@ -413,7 +413,7 @@ Hence, the optimization may be a little bit conservative with respect to the set
Weighting functions are used during the synthesis to specify the maximum allowed complementary filters' norm. Weighting functions are used during the synthesis to specify the maximum allowed complementary filters' norm.
The proper design of these weighting functions is of primary importance for the success of the presented \(\mathcal{H}_\infty\) synthesis of complementary filters. The proper design of these weighting functions is of primary importance for the success of the presented \(\mathcal{H}_\infty\) synthesis of complementary filters.
First, only proper and stable transfer functions should be used. First, only proper and stable trancfer functions should be used.
Second, the order of the weighting functions should stay reasonably small in order to reduce the computational costs associated with the solving of the optimization problem and for the physical implementation of the filters (the synthesized filters' order being equal to the sum of the weighting functions' order). Second, the order of the weighting functions should stay reasonably small in order to reduce the computational costs associated with the solving of the optimization problem and for the physical implementation of the filters (the synthesized filters' order being equal to the sum of the weighting functions' order).
Third, one should not forget the fundamental limitations imposed by the complementary property \eqref{eq:detail_control_sensor_comp_filter}. Third, one should not forget the fundamental limitations imposed by the complementary property \eqref{eq:detail_control_sensor_comp_filter}.
This implies for instance that \(|H_1(j\omega)|\) and \(|H_2(j\omega)|\) cannot be made small at the same frequency. This implies for instance that \(|H_1(j\omega)|\) and \(|H_2(j\omega)|\) cannot be made small at the same frequency.
@ -482,7 +482,7 @@ Parameter & \(W_1(s)\) & \(W_2(s)\)\\
The standard \(\mathcal{H}_\infty\) synthesis is then applied to the generalized plant of Figure \ref{fig:detail_control_sensor_h_infinity_robust_fusion_plant}. The standard \(\mathcal{H}_\infty\) synthesis is then applied to the generalized plant of Figure \ref{fig:detail_control_sensor_h_infinity_robust_fusion_plant}.
The filter \(H_2(s)\) that minimizes the \(\mathcal{H}_\infty\) norm between \(w\) and \([z_1,\ z_2]^T\) is obtained. The filter \(H_2(s)\) that minimizes the \(\mathcal{H}_\infty\) norm between \(w\) and \([z_1,\ z_2]^T\) is obtained.
The \(\mathcal{H}_\infty\) norm is here found to be close to one which indicates that the synthesis is successful: the complementary filters norms are below the maximum specified upper bounds. The \(\mathcal{H}_\infty\) norm is here found to be close to one which indicates that the synthesis is succescful: the complementary filters norms are below the maximum specified upper bounds.
This is confirmed by the bode plots of the obtained complementary filters in Figure \ref{fig:detail_control_sensor_hinf_filters_results}. This is confirmed by the bode plots of the obtained complementary filters in Figure \ref{fig:detail_control_sensor_hinf_filters_results}.
This simple example illustrates the fact that the proposed methodology for complementary filters shaping is easy to use and effective. This simple example illustrates the fact that the proposed methodology for complementary filters shaping is easy to use and effective.
\section{Synthesis of a set of three complementary filters} \section{Synthesis of a set of three complementary filters}
@ -514,7 +514,7 @@ A generalization of the proposed synthesis method of complementary filters is pr
\caption{\label{fig:detail_control_sensor_fusion_three}Possible sensor fusion architecture when more than two sensors are to be merged} \caption{\label{fig:detail_control_sensor_fusion_three}Possible sensor fusion architecture when more than two sensors are to be merged}
\end{figure} \end{figure}
The synthesis objective is to compute a set of \(n\) stable transfer functions \([H_1(s),\ H_2(s),\ \dots,\ H_n(s)]\) such that conditions \eqref{eq:detail_control_sensor_hinf_cond_compl_gen} and \eqref{eq:detail_control_sensor_hinf_cond_perf_gen} are satisfied. The synthesis objective is to compute a set of \(n\) stable trancfer functions \([H_1(s),\ H_2(s),\ \dots,\ H_n(s)]\) such that conditions \eqref{eq:detail_control_sensor_hinf_cond_compl_gen} and \eqref{eq:detail_control_sensor_hinf_cond_perf_gen} are saticfied.
\begin{subequations}\label{eq:detail_control_sensor_hinf_problem_gen} \begin{subequations}\label{eq:detail_control_sensor_hinf_problem_gen}
\begin{align} \begin{align}
@ -523,7 +523,7 @@ The synthesis objective is to compute a set of \(n\) stable transfer functions \
\end{align} \end{align}
\end{subequations} \end{subequations}
\([W_1(s),\ W_2(s),\ \dots,\ W_n(s)]\) are weighting transfer functions that are chosen to specify the maximum complementary filters' norm during the synthesis. \([W_1(s),\ W_2(s),\ \dots,\ W_n(s)]\) are weighting trancfer functions that are chosen to specify the maximum complementary filters' norm during the synthesis.
Such synthesis objective is closely related to the one described in Section \ref{ssec:detail_control_sensor_hinf_method}, and indeed the proposed synthesis method is a generalization of the one previously presented. Such synthesis objective is closely related to the one described in Section \ref{ssec:detail_control_sensor_hinf_method}, and indeed the proposed synthesis method is a generalization of the one previously presented.
A set of \(n\) complementary filters can be shaped by applying the standard \(\mathcal{H}_\infty\) synthesis to the generalized plant \(P_n(s)\) described by \eqref{eq:detail_control_sensor_generalized_plant_n_filters}. A set of \(n\) complementary filters can be shaped by applying the standard \(\mathcal{H}_\infty\) synthesis to the generalized plant \(P_n(s)\) described by \eqref{eq:detail_control_sensor_generalized_plant_n_filters}.
@ -540,14 +540,14 @@ A set of \(n\) complementary filters can be shaped by applying the standard \(\m
\end{bmatrix} \end{bmatrix}
\end{equation} \end{equation}
If the synthesis if successful, a set of \(n-1\) filters \([H_2(s),\ H_3(s),\ \dots,\ H_n(s)]\) are obtained such that \eqref{eq:detail_control_sensor_hinf_syn_obj_gen} is verified. If the synthesis if succescful, a set of \(n-1\) filters \([H_2(s),\ H_3(s),\ \dots,\ H_n(s)]\) are obtained such that \eqref{eq:detail_control_sensor_hinf_syn_obj_gen} is verified.
\begin{equation}\label{eq:detail_control_sensor_hinf_syn_obj_gen} \begin{equation}\label{eq:detail_control_sensor_hinf_syn_obj_gen}
\left\|\begin{matrix} \left(1 - \left[ H_2(s) + H_3(s) + \dots + H_n(s) \right]\right) W_1(s) \\ H_2(s) W_2(s) \\ \vdots \\ H_n(s) W_n(s) \end{matrix}\right\|_\infty \le 1 \left\|\begin{matrix} \left(1 - \left[ H_2(s) + H_3(s) + \dots + H_n(s) \right]\right) W_1(s) \\ H_2(s) W_2(s) \\ \vdots \\ H_n(s) W_n(s) \end{matrix}\right\|_\infty \le 1
\end{equation} \end{equation}
\(H_1(s)\) is then defined using \eqref{eq:detail_control_sensor_h1_comp_h2_hn} which is ensuring the complementary property for the set of \(n\) filters \eqref{eq:detail_control_sensor_hinf_cond_compl_gen}. \(H_1(s)\) is then defined using \eqref{eq:detail_control_sensor_h1_comp_h2_hn} which is ensuring the complementary property for the set of \(n\) filters \eqref{eq:detail_control_sensor_hinf_cond_compl_gen}.
Condition \eqref{eq:detail_control_sensor_hinf_cond_perf_gen} is satisfied thanks to \eqref{eq:detail_control_sensor_hinf_syn_obj_gen}. Condition \eqref{eq:detail_control_sensor_hinf_cond_perf_gen} is saticfied thanks to \eqref{eq:detail_control_sensor_hinf_syn_obj_gen}.
\begin{equation}\label{eq:detail_control_sensor_h1_comp_h2_hn} \begin{equation}\label{eq:detail_control_sensor_h1_comp_h2_hn}
H_1(s) \triangleq 1 - \big[ H_2(s) + H_3(s) + \dots + H_n(s) \big] H_1(s) \triangleq 1 - \big[ H_2(s) + H_3(s) + \dots + H_n(s) \big]
@ -580,14 +580,14 @@ Consider the generalized plant \(P_3(s)\) shown in Figure \ref{fig:detail_contro
\end{figure} \end{figure}
The standard \(\mathcal{H}_\infty\) synthesis is performed on the generalized plant \(P_3(s)\). The standard \(\mathcal{H}_\infty\) synthesis is performed on the generalized plant \(P_3(s)\).
Two filters \(H_2(s)\) and \(H_3(s)\) are obtained such that the \(\mathcal{H}_\infty\) norm of the closed-loop transfer from \(w\) to \([z_1,\ z_2,\ z_3]\) of the system in Figure \ref{fig:detail_control_sensor_comp_filter_three_hinf_fb} is less than one. Two filters \(H_2(s)\) and \(H_3(s)\) are obtained such that the \(\mathcal{H}_\infty\) norm of the closed-loop trancfer from \(w\) to \([z_1,\ z_2,\ z_3]\) of the system in Figure \ref{fig:detail_control_sensor_comp_filter_three_hinf_fb} is less than one.
Filter \(H_1(s)\) is defined using \eqref{eq:detail_control_sensor_h1_compl_h2_h3} thus ensuring the complementary property of the obtained set of filters. Filter \(H_1(s)\) is defined using \eqref{eq:detail_control_sensor_h1_compl_h2_h3} thus ensuring the complementary property of the obtained set of filters.
\begin{equation}\label{eq:detail_control_sensor_h1_compl_h2_h3} \begin{equation}\label{eq:detail_control_sensor_h1_compl_h2_h3}
H_1(s) \triangleq 1 - \big[ H_2(s) + H_3(s) \big] H_1(s) \triangleq 1 - \big[ H_2(s) + H_3(s) \big]
\end{equation} \end{equation}
Figure \ref{fig:detail_control_sensor_three_complementary_filters_results} displays the three synthesized complementary filters (solid lines) which confirms that the synthesis is successful. Figure \ref{fig:detail_control_sensor_three_complementary_filters_results} displays the three synthesized complementary filters (solid lines) which confirms that the synthesis is succescful.
\section*{Conclusion} \section*{Conclusion}
A new method for designing complementary filters using the \(\mathcal{H}_\infty\) synthesis has been proposed. A new method for designing complementary filters using the \(\mathcal{H}_\infty\) synthesis has been proposed.
It allows to shape the magnitude of the filters by the use of weighting functions during the synthesis. It allows to shape the magnitude of the filters by the use of weighting functions during the synthesis.
@ -610,7 +610,7 @@ There is a draft paper about that.
When dealing with MIMO systems, a typical strategy is to: When dealing with MIMO systems, a typical strategy is to:
\begin{itemize} \begin{itemize}
\item First decouple the plant dynamics (discussed in this section) \item First decouple the plant dynamics (discussed in this section)
\item Apply SISO control for the decoupled plant (discussed in section \ref{sec:detail_control_optimization}) \item Apply SISO control for the decoupled plant (discussed in section \ref{sec:detail_control_cf})
\end{itemize} \end{itemize}
Another strategy would be to apply a multivariable control synthesis to the coupled system. Another strategy would be to apply a multivariable control synthesis to the coupled system.
@ -623,7 +623,7 @@ Experimental closed-loop control results using the hexapod have shown that contr
\begin{itemize} \begin{itemize}
\item[{$\boxtimes$}] Review of \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org}{Decoupling Strategies} for stewart platforms \item[{$\boxtimes$}] Review of \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org}{Decoupling Strategies} for stewart platforms
\item[{$\square$}] Add some citations about different methods \item[{$\square$}] Add some citations about different methods
\item[{$\square$}] Maybe transform table into text \item[{$\square$}] Maybe trancform table into text
\end{itemize} \end{itemize}
\begin{table}[htbp] \begin{table}[htbp]
@ -780,7 +780,7 @@ Parameters used for the following analysis are summarized in table \ref{tab:deta
Let's first study the obtained dynamics in the frame of the struts. Let's first study the obtained dynamics in the frame of the struts.
The equation of motion linking actuator forces \(\bm{\mathcal{\tau}}\) to strut relative motion \(\bm{\mathcal{L}}\) is obtained from \eqref{eq:detail_control_decoupling_plant_cartesian} by mapping the cartesian motion of the mass to the relative motion of the struts using the Jacobian matrix \(\bm{J}_{\{M\}}\) \eqref{eq:detail_control_decoupling_jacobian_CoM} . The equation of motion linking actuator forces \(\bm{\mathcal{\tau}}\) to strut relative motion \(\bm{\mathcal{L}}\) is obtained from \eqref{eq:detail_control_decoupling_plant_cartesian} by mapping the cartesian motion of the mass to the relative motion of the struts using the Jacobian matrix \(\bm{J}_{\{M\}}\) \eqref{eq:detail_control_decoupling_jacobian_CoM} .
The transfer function from \(\bm{\mathcal{\tau}}\) to \(\bm{\mathcal{L}}\) is shown in equation \eqref{eq:detail_control_decoupling_plant_decentralized}. The trancfer function from \(\bm{\mathcal{\tau}}\) to \(\bm{\mathcal{L}}\) is shown in equation \eqref{eq:detail_control_decoupling_plant_decentralized}.
\begin{center} \begin{center}
\includegraphics[scale=1]{figs/detail_control_decoupling_control_struts.png} \includegraphics[scale=1]{figs/detail_control_decoupling_control_struts.png}
@ -830,7 +830,7 @@ The obtained plan (Figure \ref{fig:detail_control_jacobian_decoupling_arch}) has
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_decoupling_control_jacobian.png} \includegraphics[scale=1]{figs/detail_control_decoupling_control_jacobian.png}
\caption{\label{fig:detail_control_jacobian_decoupling_arch}Block diagram of the transfer function from \(\bm{\mathcal{F}}_{\{O\}}\) to \(\bm{\mathcal{X}}_{\{O\}}\)} \caption{\label{fig:detail_control_jacobian_decoupling_arch}Block diagram of the trancfer function from \(\bm{\mathcal{F}}_{\{O\}}\) to \(\bm{\mathcal{X}}_{\{O\}}\)}
\end{figure} \end{figure}
\begin{equation}\label{eq:detail_control_decoupling_plant_jacobian} \begin{equation}\label{eq:detail_control_decoupling_plant_jacobian}
@ -893,7 +893,7 @@ this is illustrated in Figure \ref{fig:detail_control_decoupling_model_test_CoM}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.48\textwidth} \begin{subfigure}{0.48\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,scale=1]{figs/detail_control_model_decoupling_test_CoM.png} \includegraphics[scale=1,scale=1]{figs/detail_control_decoupling_model_test_CoM.png}
\end{center} \end{center}
\subcaption{\label{fig:detail_control_decoupling_model_test_CoM}Static force applied at the CoM} \subcaption{\label{fig:detail_control_decoupling_model_test_CoM}Static force applied at the CoM}
\end{subfigure} \end{subfigure}
@ -1066,7 +1066,7 @@ Eigenvectors are arranged for increasing eigenvalues (i.e. resonance frequencies
\end{equation} \end{equation}
\begin{itemize} \begin{itemize}
\item[{$\square$}] Formula for the plant transfer function \item[{$\square$}] Formula for the plant trancfer function
\end{itemize} \end{itemize}
\begin{figure}[htbp] \begin{figure}[htbp]
@ -1328,9 +1328,9 @@ Conclusion about NASS:
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}. 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}
\chapter{Closed-Loop Shaping using Complementary Filters} \chapter{Closed-Loop Shaping using Complementary Filters}
\label{sec:detail_control_optimization} \label{sec:detail_control_cf}
Performance of a feedback control is dictated by closed-loop transfer functions. Performance of a feedback control is dictated by closed-loop trancfer functions.
For instance sensitivity, transmissibility, etc\ldots{} Gang of Four. For instance sensitivity, transmissibility, etc\ldots{} Gang of Four.
There are several ways to design a controller to obtain a given performance. There are several ways to design a controller to obtain a given performance.
@ -1340,7 +1340,7 @@ Decoupled Open-Loop Shaping:
\item As shown in previous section, once the plant is decoupled: open loop shaping \item As shown in previous section, once the plant is decoupled: open loop shaping
\item Explain procedure when applying open-loop shaping \item Explain procedure when applying open-loop shaping
\item Lead, Lag, Notches, Check Stability, c2d, etc\ldots{} \item Lead, Lag, Notches, Check Stability, c2d, etc\ldots{}
\item But this is open-loop shaping, and it does not directly work on the closed loop transfer functions \item But this is open-loop shaping, and it does not directly work on the closed loop trancfer functions
\end{itemize} \end{itemize}
Other strategy: Model Based Design: Other strategy: Model Based Design:
@ -1363,7 +1363,7 @@ It will be experimentally demonstrated with the NASS.
\begin{itemize} \begin{itemize}
\item frequency domain techniques \item frequency domain techniques
\item manual loop-shaping - key idea: modification of the controller such that the open-loop is made according to specifications \cite{oomen18_advan_motion_contr_precis_mechat}. \item manual loop-shaping - key idea: modification of the controller such that the open-loop is made according to specifications \cite{oomen18_advan_motion_contr_precis_mechat}.
This works well because the open loop transfer function is linearly dependent of the controller. This works well because the open loop trancfer function is linearly dependent of the controller.
Different techniques for open loop shaping \cite{lurie02_system_archit_trades_using_bode} Different techniques for open loop shaping \cite{lurie02_system_archit_trades_using_bode}
\end{itemize} \end{itemize}
@ -1389,15 +1389,15 @@ In this paper, we propose a new controller synthesis method
\item direct translation of requirements such as disturbance rejection and robustness to plant uncertainty \item direct translation of requirements such as disturbance rejection and robustness to plant uncertainty
\end{itemize} \end{itemize}
\section{Control Architecture} \section{Control Architecture}
\label{ssec:detail_control_control_arch} \label{ssec:detail_control_cf_control_arch}
\paragraph{Virtual Sensor Fusion} \paragraph{Virtual Sensor Fusion}
Let's consider the control architecture represented in Figure \ref{fig:detail_control_sf_arch} where \(G^\prime\) is the physical plant to control, \(G\) is a model of the plant, \(k\) is a gain, \(H_L\) and \(H_H\) are complementary filters (\(H_L + H_H = 1\) in the complex sense). Let's consider the control architecture represented in Figure \ref{fig:detail_control_cf_arch} where \(G^\prime\) is the physical plant to control, \(G\) is a model of the plant, \(k\) is a gain, \(H_L\) and \(H_H\) are complementary filters (\(H_L + H_H = 1\) in the complex sense).
The signals are the reference signal \(r\), the output perturbation \(d_y\), the measurement noise \(n\) and the control input \(u\). The signals are the reference signal \(r\), the output perturbation \(d_y\), the measurement noise \(n\) and the control input \(u\).
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_sf_arch.png} \includegraphics[scale=1]{figs/detail_control_cf_arch.png}
\caption{\label{fig:detail_control_sf_arch}Sensor Fusion Architecture} \caption{\label{fig:detail_control_cf_arch}Sensor Fusion Architecture}
\end{figure} \end{figure}
The dynamics of the closed-loop system is described by the following equations The dynamics of the closed-loop system is described by the following equations
@ -1414,12 +1414,12 @@ The first one is low pass filtered in order to obtain good performance at low fr
Here, the second sensor is replaced by a model \(G\) of the plant which is assumed to be stable and minimum phase. Here, the second sensor is replaced by a model \(G\) of the plant which is assumed to be stable and minimum phase.
One may think that the control architecture shown in Figure \ref{fig:detail_control_sf_arch} is a multi-loop system, but because no non-linear saturation-type element is present in the inner-loop (containing \(k\), \(G\) and \(H_H\) which are all numerically implemented), the structure is equivalent to the architecture shown in Figure \ref{fig:detail_control_sf_arch_eq}. One may think that the control architecture shown in Figure \ref{fig:detail_control_cf_arch} is a multi-loop system, but because no non-linear saturation-type element is present in the inner-loop (containing \(k\), \(G\) and \(H_H\) which are all numerically implemented), the structure is equivalent to the architecture shown in Figure \ref{fig:detail_control_cf_arch_eq}.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_sf_arch_eq.png} \includegraphics[scale=1]{figs/detail_control_cf_arch_eq.png}
\caption{\label{fig:detail_control_sf_arch_eq}Equivalent feedback architecture} \caption{\label{fig:detail_control_cf_arch_eq}Equivalent feedback architecture}
\end{figure} \end{figure}
The dynamics of the system can be rewritten as follow The dynamics of the system can be rewritten as follow
@ -1435,39 +1435,39 @@ We now want to study the asymptotic system obtained when using very high value o
\end{equation} \end{equation}
If the obtained \(K\) is improper, a low pass filter can be added to have its causal realization. If the obtained \(K\) is improper, a low pass filter can be added to have its causal realization.
Also, we want \(K\) to be stable, so \(G\) and \(H_H\) must be minimum phase transfer functions. Also, we want \(K\) to be stable, so \(G\) and \(H_H\) must be minimum phase trancfer functions.
For now on, we will consider the resulting control architecture as shown on Figure \ref{fig:detail_control_sf_arch_class} where the only ``tuning parameters'' are the complementary filters. For now on, we will consider the resulting control architecture as shown on Figure \ref{fig:detail_control_cf_arch_class} where the only ``tuning parameters'' are the complementary filters.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_sf_arch_class.png} \includegraphics[scale=1]{figs/detail_control_cf_arch_class.png}
\caption{\label{fig:detail_control_sf_arch_class}Equivalent classical feedback control architecture} \caption{\label{fig:detail_control_cf_arch_class}Equivalent classical feedback control architecture}
\end{figure} \end{figure}
The equations describing the dynamics of the closed-loop system are The equations describing the dynamics of the closed-loop system are
\begin{align} \begin{align}
y &= \frac{ H_H dy + G^{\prime} G^{-1} r - G^{\prime} G^{-1} H_L n }{H_H + G^\prime G^{-1} H_L} \label{eq:detail_control_cl_system_y}\\ y &= \frac{ H_H dy + G^{\prime} G^{-1} r - G^{\prime} G^{-1} H_L n }{H_H + G^\prime G^{-1} H_L} \label{eq:detail_control_cf_cl_system_y}\\
u &= \frac{ -G^{-1} H_L dy + G^{-1} r - G^{-1} H_L n }{H_H + G^\prime G^{-1} H_L} \label{eq:detail_control_cl_system_u} u &= \frac{ -G^{-1} H_L dy + G^{-1} r - G^{-1} H_L n }{H_H + G^\prime G^{-1} H_L} \label{eq:detail_control_cf_cl_system_u}
\end{align} \end{align}
At frequencies where the model is accurate: \(G^{-1} G^{\prime} \approx 1\), \(H_H + G^\prime G^{-1} H_L \approx H_H + H_L = 1\) and At frequencies where the model is accurate: \(G^{-1} G^{\prime} \approx 1\), \(H_H + G^\prime G^{-1} H_L \approx H_H + H_L = 1\) and
\begin{align} \begin{align}
y &= H_H dy + r - H_L n \label{eq:detail_control_cl_performance_y} \\ y &= H_H dy + r - H_L n \label{eq:detail_control_cf_cl_performance_y} \\
u &= -G^{-1} H_L dy + G^{-1} r - G^{-1} H_L n \label{eq:detail_control_cl_performance_u} u &= -G^{-1} H_L dy + G^{-1} r - G^{-1} H_L n \label{eq:detail_control_cf_cl_performance_u}
\end{align} \end{align}
We obtain a sensitivity transfer function equals to the high pass filter \(S = \frac{y}{dy} = H_H\) and a transmissibility transfer function equals to the low pass filter \(T = \frac{y}{n} = H_L\). We obtain a sensitivity trancfer function equals to the high pass filter \(S = \frac{y}{dy} = H_H\) and a transmissibility trancfer function equals to the low pass filter \(T = \frac{y}{n} = H_L\).
Assuming that we have a good model of the plant, we have then that the closed-loop behavior of the system converges to the designed complementary filters. Assuming that we have a good model of the plant, we have then that the closed-loop behavior of the system converges to the designed complementary filters.
\section{Translating the performance requirements into the shapes of the complementary filters} \section{Translating the performance requirements into the shapes of the complementary filters}
\label{ssec:detail_control_trans_perf} \label{ssec:detail_control_cf_trans_perf}
The required performance specifications in a feedback system can usually be translated into requirements on the upper bounds of \(\abs{S(j\w)}\) and \(|T(j\omega)|\) \cite{bibel92_guidel_h}. The required performance specifications in a feedback system can usually be translated into requirements on the upper bounds of \(\abs{S(j\w)}\) and \(|T(j\omega)|\) \cite{bibel92_guidel_h}.
The process of designing a controller \(K(s)\) in order to obtain the desired shapes of \(\abs{S(j\w)}\) and \(\abs{T(j\w)}\) is called loop shaping. The process of designing a controller \(K(s)\) in order to obtain the desired shapes of \(\abs{S(j\w)}\) and \(\abs{T(j\w)}\) is called loop shaping.
The equations \eqref{eq:detail_control_cl_system_y} and \eqref{eq:detail_control_cl_system_u} describing the dynamics of the studied feedback architecture are not written in terms of \(K\) but in terms of the complementary filters \(H_L\) and \(H_H\). The equations \eqref{eq:detail_control_cf_cl_system_y} and \eqref{eq:detail_control_cf_cl_system_u} describing the dynamics of the studied feedback architecture are not written in terms of \(K\) but in terms of the complementary filters \(H_L\) and \(H_H\).
In this section, we then translate the typical specifications into the desired shapes of the complementary filters \(H_L\) and \(H_H\).\\ In this section, we then translate the typical specifications into the desired shapes of the complementary filters \(H_L\) and \(H_H\).
\paragraph{Nominal Stability (NS)} \paragraph{Nominal Stability (NS)}
The closed-loop system is stable if all its elements are stable (\(K\), \(G^\prime\) and \(H_L\)) and if the sensitivity function (\(S = \frac{1}{1 + G^\prime K H_L}\)) is stable. The closed-loop system is stable if all its elements are stable (\(K\), \(G^\prime\) and \(H_L\)) and if the sensitivity function (\(S = \frac{1}{1 + G^\prime K H_L}\)) is stable.
@ -1475,20 +1475,20 @@ For the nominal system (\(G^\prime = G\)), we have \(S = H_H\).
Nominal stability is then guaranteed if \(H_L\), \(H_H\) and \(G\) are stable and if \(G\) and \(H_H\) are minimum phase (to have \(K\) stable). Nominal stability is then guaranteed if \(H_L\), \(H_H\) and \(G\) are stable and if \(G\) and \(H_H\) are minimum phase (to have \(K\) stable).
Thus we must design stable and minimum phase complementary filters.\\ Thus we must design stable and minimum phase complementary filters.
\paragraph{Nominal Performance (NP)} \paragraph{Nominal Performance (NP)}
Typical performance specifications can usually be translated into upper bounds on \(|S(j\omega)|\) and \(|T(j\omega)|\). Typical performance specifications can usually be translated into upper bounds on \(|S(j\omega)|\) and \(|T(j\omega)|\).
Two performance weights \(w_H\) and \(w_L\) are defined in such a way that performance specifications are satisfied if Two performance weights \(w_H\) and \(w_L\) are defined in such a way that performance specifications are saticfied if
\begin{equation} \begin{equation}
|w_H(j\omega) S(j\omega)| \le 1,\ |w_L(j\omega) T(j\omega)| \le 1 \quad \forall\omega |w_H(j\omega) S(j\omega)| \le 1,\ |w_L(j\omega) T(j\omega)| \le 1 \quad \forall\omega
\end{equation} \end{equation}
For the nominal system, we have \(S = H_H\) and \(T = H_L\), and then nominal performance is ensured by requiring For the nominal system, we have \(S = H_H\) and \(T = H_L\), and then nominal performance is ensured by requiring
\begin{subnumcases}{\text{NP} \Leftrightarrow}\label{eq:detail_control_nominal_performance} \begin{subnumcases}{\text{NP} \Leftrightarrow}\label{eq:detail_control_cf_nominal_performance}
|w_H(j\omega) H_H(j\omega)| \le 1 \quad \forall\omega \label{eq:detail_control_nominal_perf_hh}\\ |w_H(j\omega) H_H(j\omega)| \le 1 \quad \forall\omega \label{eq:detail_control_cf_nominal_perf_hh}\\
|w_L(j\omega) H_L(j\omega)| \le 1 \quad \forall\omega \label{eq:detail_control_nominal_perf_hl} |w_L(j\omega) H_L(j\omega)| \le 1 \quad \forall\omega \label{eq:detail_control_cf_nominal_perf_hl}
\end{subnumcases} \end{subnumcases}
The translation of typical performance requirements on the shapes of the complementary filters is discussed below: The translation of typical performance requirements on the shapes of the complementary filters is discussed below:
@ -1498,13 +1498,13 @@ The translation of typical performance requirements on the shapes of the complem
\item for control energy reduction, make \(|KS| = |G^{-1}|\) small \item for control energy reduction, make \(|KS| = |G^{-1}|\) small
\end{itemize} \end{itemize}
We may have other requirements in terms of stability margins, maximum or minimum closed-loop bandwidth.\\ We may have other requirements in terms of stability margins, maximum or minimum closed-loop bandwidth.
\paragraph{Closed-Loop Bandwidth} \paragraph{Closed-Loop Bandwidth}
The closed-loop bandwidth \(\w_B\) can be defined as the frequency where \(\abs{S(j\w)}\) first crosses \(\frac{1}{\sqrt{2}}\) from below. The closed-loop bandwidth \(\w_B\) can be defined as the frequency where \(\abs{S(j\w)}\) first crosses \(\frac{1}{\sqrt{2}}\) from below.
If one wants the closed-loop bandwidth to be at least \(\w_B^*\) (e.g. to stabilize an unstable pole), one can required that \(|S(j\omega)| \le \frac{1}{\sqrt{2}}\) below \(\omega_B^*\) by designing \(w_H\) such that \(|w_H(j\omega)| \ge \sqrt{2}\) for \(\omega \le \omega_B^*\). If one wants the closed-loop bandwidth to be at least \(\w_B^*\) (e.g. to stabilize an unstable pole), one can required that \(|S(j\omega)| \le \frac{1}{\sqrt{2}}\) below \(\omega_B^*\) by designing \(w_H\) such that \(|w_H(j\omega)| \ge \sqrt{2}\) for \(\omega \le \omega_B^*\).
Similarly, if one wants the closed-loop bandwidth to be less than \(\w_B^*\), one can approximately require that the magnitude of \(T\) is less than \(\frac{1}{\sqrt{2}}\) at frequencies above \(\w_B^*\) by designing \(w_L\) such that \(|w_L(j\omega)| \ge \sqrt{2}\) for \(\omega \ge \omega_B^*\).\\ Similarly, if one wants the closed-loop bandwidth to be less than \(\w_B^*\), one can approximately require that the magnitude of \(T\) is less than \(\frac{1}{\sqrt{2}}\) at frequencies above \(\w_B^*\) by designing \(w_L\) such that \(|w_L(j\omega)| \ge \sqrt{2}\) for \(\omega \ge \omega_B^*\).
\paragraph{Classical stability margins} \paragraph{Classical stability margins}
Gain margin (GM) and phase margin (PM) are usual specifications on controlled system. Gain margin (GM) and phase margin (PM) are usual specifications on controlled system.
Minimum GM and PM can be guaranteed by limiting the maximum magnitude of the sensibility function \(M_S = \max_{\omega} |S(j\omega)|\): Minimum GM and PM can be guaranteed by limiting the maximum magnitude of the sensibility function \(M_S = \max_{\omega} |S(j\omega)|\):
@ -1518,47 +1518,47 @@ For the nominal system \(M_S = \max_\omega |S| = \max_\omega |H_H|\), so one can
\begin{equation} \begin{equation}
|H_H(j\omega)| \le 2 \quad \forall\omega |H_H(j\omega)| \le 2 \quad \forall\omega
\end{equation} \end{equation}
and thus obtain acceptable stability margins.\\ and thus obtain acceptable stability margins.
\paragraph{Response time to change of reference signal} \paragraph{Response time to change of reference signal}
For the nominal system, the model is accurate and the transfer function from reference signal \(r\) to output \(y\) is \(1\) \eqref{eq:detail_control_cl_performance_y} and does not depends of the complementary filters. For the nominal system, the model is accurate and the trancfer function from reference signal \(r\) to output \(y\) is \(1\) \eqref{eq:detail_control_cf_cl_performance_y} and does not depends of the complementary filters.
However, one can add a pre-filter as shown in Figure \ref{fig:detail_control_sf_arch_class_prefilter}. However, one can add a pre-filter as shown in Figure \ref{fig:detail_control_cf_arch_class_prefilter}.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_sf_arch_class_prefilter.png} \includegraphics[scale=1]{figs/detail_control_cf_arch_class_prefilter.png}
\caption{\label{fig:detail_control_sf_arch_class_prefilter}Prefilter used to limit input usage} \caption{\label{fig:detail_control_cf_arch_class_prefilter}Prefilter used to limit input usage}
\end{figure} \end{figure}
The transfer function from \(y\) to \(r\) becomes \(\frac{y}{r} = K_r\) and \(K_r\) can we chosen to obtain acceptable response to change of the reference signal. The trancfer function from \(y\) to \(r\) becomes \(\frac{y}{r} = K_r\) and \(K_r\) can we chosen to obtain acceptable response to change of the reference signal.
Typically, \(K_r\) is a low pass filter of the form Typically, \(K_r\) is a low pass filter of the form
\begin{equation} \begin{equation}
K_r(s) = \frac{1}{1 + \tau s} K_r(s) = \frac{1}{1 + \tau s}
\end{equation} \end{equation}
with \(\tau\) corresponding to the desired response time.\\ with \(\tau\) corresponding to the desired response time.
\paragraph{Input usage} \paragraph{Input usage}
Input usage due to disturbances \(d_y\) and measurement noise \(n\) is determined by \(\big|\frac{u}{d_y}\big| = \big|\frac{u}{n}\big| = \big|G^{-1}H_L\big|\). Input usage due to disturbances \(d_y\) and measurement noise \(n\) is determined by \(\big|\frac{u}{d_y}\big| = \big|\frac{u}{n}\big| = \big|G^{-1}H_L\big|\).
Thus it can be limited by setting an upper bound on \(|H_L|\). Thus it can be limited by setting an upper bound on \(|H_L|\).
Input usage due to reference signal \(r\) is determined by \(\big|\frac{u}{r}\big| = \big|G^{-1} K_r\big|\) when using a pre-filter (Figure \ref{fig:detail_control_sf_arch_class_prefilter}) and \(\big|\frac{u}{r}\big| = \big|G^{-1}\big|\) otherwise. Input usage due to reference signal \(r\) is determined by \(\big|\frac{u}{r}\big| = \big|G^{-1} K_r\big|\) when using a pre-filter (Figure \ref{fig:detail_control_cf_arch_class_prefilter}) and \(\big|\frac{u}{r}\big| = \big|G^{-1}\big|\) otherwise.
Proper choice of \(|K_r|\) is then useful to limit input usage due to change of reference signal.\\ Proper choice of \(|K_r|\) is then useful to limit input usage due to change of reference signal.
\paragraph{Robust Stability (RS)} \paragraph{Robust Stability (RS)}
Robustness stability represents the ability of the control system to remain stable even though there are differences between the actual system \(G^\prime\) and the model \(G\) that was used to design the controller. Robustness stability represents the ability of the control system to remain stable even though there are differences between the actual system \(G^\prime\) and the model \(G\) that was used to design the controller.
These differences can have various origins such as unmodelled dynamics or non-linearities. These differences can have various origins such as unmodelled dynamics or non-linearities.
To represent the differences between the model and the actual system, one can choose to use the general input multiplicative uncertainty as represented in Figure \ref{fig:detail_control_input_uncertainty}. To represent the differences between the model and the actual system, one can choose to use the general input multiplicative uncertainty as represented in Figure \ref{fig:detail_control_cf_input_uncertainty}.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_input_uncertainty.png} \includegraphics[scale=1]{figs/detail_control_cf_input_uncertainty.png}
\caption{\label{fig:detail_control_input_uncertainty}Input multiplicative uncertainty} \caption{\label{fig:detail_control_cf_input_uncertainty}Input multiplicative uncertainty}
\end{figure} \end{figure}
Then, the set of possible perturbed plant is described by Then, the set of possible perturbed plant is described by
\begin{equation}\label{eq:detail_control_multiplicative_uncertainty} \begin{equation}\label{eq:detail_control_cf_multiplicative_uncertainty}
\Pi_i: \quad G_p(s) = G(s)\big(1 + w_I(s)\Delta_I(s)\big); \quad \abs{\Delta_I(j\w)} \le 1 \ \forall\w \Pi_i: \quad G_p(s) = G(s)\big(1 + w_I(s)\Delta_I(s)\big); \quad \abs{\Delta_I(j\w)} \le 1 \ \forall\w
\end{equation} \end{equation}
and \(w_I\) should be chosen such that all possible plants \(G^\prime\) are contained in the set \(\Pi_i\). and \(w_I\) should be chosen such that all possible plants \(G^\prime\) are contained in the set \(\Pi_i\).
@ -1576,23 +1576,23 @@ Using input multiplicative uncertainty, robust stability is equivalent to have \
\end{align*} \end{align*}
Robust stability is then guaranteed by having the low pass filter \(H_L\) satisfying \eqref{eq:detail_control_robust_stability}. Robust stability is then guaranteed by having the low pass filter \(H_L\) saticfying \eqref{eq:detail_control_cf_robust_stability}.
\begin{equation}\label{eq:detail_control_robust_stability} \begin{equation}\label{eq:detail_control_cf_robust_stability}
\text{RS} \Leftrightarrow |H_L| \le \frac{1}{|w_I| (2 + |w_I|)}\quad \forall \omega \text{RS} \Leftrightarrow |H_L| \le \frac{1}{|w_I| (2 + |w_I|)}\quad \forall \omega
\end{equation} \end{equation}
To ensure robust stability condition \eqref{eq:detail_control_nominal_perf_hl} can be used if \(w_L\) is designed in such a way that \(|w_L| \ge |w_I| (2 + |w_I|)\).\\ To ensure robust stability condition \eqref{eq:detail_control_cf_nominal_perf_hl} can be used if \(w_L\) is designed in such a way that \(|w_L| \ge |w_I| (2 + |w_I|)\).
\paragraph{Robust Performance (RP)} \paragraph{Robust Performance (RP)}
Robust performance is a property for a controlled system to have its performance guaranteed even though the dynamics of the plant is changing within specified bounds. Robust performance is a property for a controlled system to have its performance guaranteed even though the dynamics of the plant is changing within specified bounds.
For robust performance, we then require to have the performance condition valid for all possible plants in the defined uncertainty set: For robust performance, we then require to have the performance condition valid for all possible plants in the defined uncertainty set:
\begin{subnumcases}{\text{RP} \Leftrightarrow} \begin{subnumcases}{\text{RP} \Leftrightarrow}
|w_H S| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \label{eq:detail_control_robust_perf_S}\\ |w_H S| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \label{eq:detail_control_cf_robust_perf_S}\\
|w_L T| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \label{eq:detail_control_robust_perf_T} |w_L T| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \label{eq:detail_control_cf_robust_perf_T}
\end{subnumcases} \end{subnumcases}
Let's transform condition \eqref{eq:detail_control_robust_perf_S} into a condition on the complementary filters Let's trancform condition \eqref{eq:detail_control_cf_robust_perf_S} into a condition on the complementary filters
\begin{align*} \begin{align*}
& \left| w_H S \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\ & \left| w_H S \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\
\Leftrightarrow & \left| w_H \frac{1}{1 + G^\prime G^{-1} H_H^{-1} H_L} \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\ \Leftrightarrow & \left| w_H \frac{1}{1 + G^\prime G^{-1} H_H^{-1} H_L} \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\
@ -1601,7 +1601,7 @@ Let's transform condition \eqref{eq:detail_control_robust_perf_S} into a conditi
\Leftrightarrow & | w_H H_H | + | w_I H_L | \le 1, \ \forall\omega \\ \Leftrightarrow & | w_H H_H | + | w_I H_L | \le 1, \ \forall\omega \\
\end{align*} \end{align*}
The same can be done with condition \eqref{eq:detail_control_robust_perf_T} The same can be done with condition \eqref{eq:detail_control_cf_robust_perf_T}
\begin{align*} \begin{align*}
& \left| w_L T \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\ & \left| w_L T \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\
\Leftrightarrow & \left| w_L \frac{G^\prime G^{-1} H_H^{-1} H_L}{1 + G^\prime G^{-1} H_H^{-1} H_L} \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\ \Leftrightarrow & \left| w_L \frac{G^\prime G^{-1} H_H^{-1} H_L}{1 + G^\prime G^{-1} H_H^{-1} H_L} \right| \le 1 \quad \forall G^\prime \in \Pi_I, \ \forall\omega \\
@ -1610,45 +1610,45 @@ The same can be done with condition \eqref{eq:detail_control_robust_perf_T}
\Leftrightarrow & \left| H_L \right| \le \frac{1}{|w_L| (1 + |w_I|) + |w_I|} \quad \forall\omega \\ \Leftrightarrow & \left| H_L \right| \le \frac{1}{|w_L| (1 + |w_I|) + |w_I|} \quad \forall\omega \\
\end{align*} \end{align*}
Robust performance is then guaranteed if \eqref{eq:detail_control_robust_perf_a} and \eqref{eq:detail_control_robust_perf_b} are satisfied. Robust performance is then guaranteed if \eqref{eq:detail_control_cf_robust_perf_a} and \eqref{eq:detail_control_cf_robust_perf_b} are satisfied.
\begin{subnumcases}\label{eq:detail_control_robust_performance} \begin{subnumcases}\label{eq:detail_control_cf_robust_performance}
{\text{RP} \Leftrightarrow} {\text{RP} \Leftrightarrow}
| w_H H_H | + | w_I H_L | \le 1, \ \forall\omega \label{eq:detail_control_robust_perf_a}\\ | w_H H_H | + | w_I H_L | \le 1, \ \forall\omega \label{eq:detail_control_cf_robust_perf_a}\\
\left| H_L \right| \le \frac{1}{|w_L| (1 + |w_I|) + |w_I|} \quad \forall\omega \label{eq:detail_control_robust_perf_b} \left| H_L \right| \le \frac{1}{|w_L| (1 + |w_I|) + |w_I|} \quad \forall\omega \label{eq:detail_control_cf_robust_perf_b}
\end{subnumcases} \end{subnumcases}
One should be aware than when looking for a robust performance condition, only the worst case is evaluated and using the robust stability condition may lead to conservative control. One should be aware than when looking for a robust performance condition, only the worst case is evaluated and using the robust stability condition may lead to conservative control.
\section{Analytical formulas for complementary filters?} \section{Analytical formulas for complementary filters?}
\label{ssec:detail_control_analytical_complementary_filters} \label{ssec:detail_control_cf_analytical_complementary_filters}
\section{Numerical Example} \section{Numerical Example}
\label{ssec:detail_control_simulations} \label{ssec:detail_control_cf_simulations}
\paragraph{Procedure} \paragraph{Procedure}
In order to apply this control technique, we propose the following procedure: In order to apply this control technique, we propose the following procedure:
\begin{enumerate} \begin{enumerate}
\item Identify the plant to be controlled in order to obtain \(G\) \item Identify the plant to be controlled in order to obtain \(G\)
\item Design the weighting function \(w_I\) such that all possible plants \(G^\prime\) are contained in the set \(\Pi_i\) \item Design the weighting function \(w_I\) such that all possible plants \(G^\prime\) are contained in the set \(\Pi_i\)
\item Translate the performance requirements into upper bounds on the complementary filters (as explained in Sec. \ref{ssec:detail_control_trans_perf}) \item Translate the performance requirements into upper bounds on the complementary filters (as explained in Sec. \ref{ssec:detail_control_cf_trans_perf})
\item Design the weighting functions \(w_H\) and \(w_L\) and generate the complementary filters using \(\hinf\text{-synthesis}\) (as further explained in Sec. \ref{ssec:detail_control_hinf_method}). \item Design the weighting functions \(w_H\) and \(w_L\) and generate the complementary filters using \(\hinf\text{-synthesis}\) (as was explained in Section \ref{ssec:detail_control_sensor_hinf_method}).
If the synthesis fails to give filters satisfying the upper bounds previously defined, either the requirements have to be reworked or a better model \(G\) that will permits to have a smaller \(w_I\) should be obtained. If the synthesis fails to give filters satisfying the upper bounds previously defined, either the requirements have to be reworked or a better model \(G\) that will permits to have a smaller \(w_I\) should be obtained.
If one does not want to use the \(\mathcal{H}_\infty\) synthesis, one can use pre-made complementary filters given in Sec. \ref{ssec:detail_control_analytical_complementary_filters}. If one does not want to use the \(\mathcal{H}_\infty\) synthesis, one can use pre-made complementary filters given in Sec. \ref{ssec:detail_control_cf_analytical_complementary_filters}.
\item If \(K = \left( G H_H \right)^{-1}\) is not proper, a low pass filter should be added \item If \(K = \left( G H_H \right)^{-1}\) is not proper, a low pass filter should be added
\item Design a pre-filter \(K_r\) if requirements on input usage or response to reference change are not met \item Design a pre-filter \(K_r\) if requirements on input usage or response to reference change are not met
\item Control implementation: Filter the measurement with \(H_L\), implement the controller \(K\) and the pre-filter \(K_r\) as shown on Figure \ref{fig:detail_control_sf_arch_class_prefilter} \item Control implementation: Filter the measurement with \(H_L\), implement the controller \(K\) and the pre-filter \(K_r\) as shown on Figure \ref{fig:detail_control_cf_arch_class_prefilter}
\end{enumerate} \end{enumerate}
\paragraph{Plant} \paragraph{Plant}
Let's consider the problem of controlling an active vibration isolation system that consist of a mass \(m\) to be isolated, a piezoelectric actuator and a geophone. Let's consider the problem of controlling an active vibration isolation system that consist of a mass \(m\) to be isolated, a piezoelectric actuator and a geophone.
We represent this system by a mass-spring-damper system as shown Figure \ref{fig:detail_control_mech_sys_alone} where \(m\) typically represents the mass of the payload to be isolated, \(k\) and \(c\) represent respectively the stiffness and damping of the mount. We represent this system by a mass-spring-damper system as shown Figure \ref{fig:detail_control_cf_mech_sys_alone} where \(m\) typically represents the mass of the payload to be isolated, \(k\) and \(c\) represent respectively the stiffness and damping of the mount.
\(w\) is the ground motion. \(w\) is the ground motion.
The values for the parameters of the models are The values for the parameters of the models are
\[ m = \SI{20}{\kg}; \quad k = 10^4\si{\N/\m}; \quad c = 10^2\si{\N\per(\m\per\s)} \] \[ m = \SI{20}{\kg}; \quad k = 10^4\si{\N/\m}; \quad c = 10^2\si{\N\per(\m\per\s)} \]
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_mech_sys_alone.png} \includegraphics[scale=1]{figs/detail_control_cf_mech_sys_alone.png}
\caption{\label{fig:detail_control_mech_sys_alone}Model of the positioning system} \caption{\label{fig:detail_control_cf_mech_sys_alone}Model of the positioning system}
\end{figure} \end{figure}
The model of the plant \(G(s)\) from actuator force \(F\) to displacement \(x\) is then The model of the plant \(G(s)\) from actuator force \(F\) to displacement \(x\) is then
@ -1656,12 +1656,12 @@ The model of the plant \(G(s)\) from actuator force \(F\) to displacement \(x\)
G(s) = \frac{1}{m s^2 + c s + k} G(s) = \frac{1}{m s^2 + c s + k}
\end{equation} \end{equation}
Its bode plot is shown on Figure \ref{fig:detail_control_bode_plot_mech_sys}. Its bode plot is shown on Figure \ref{fig:detail_control_cf_bode_plot_mech_sys}.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_bode_plot_mech_sys.png} \includegraphics[scale=1]{figs/detail_control_cf_bode_plot_mech_sys.png}
\caption{\label{fig:detail_control_bode_plot_mech_sys}Bode plot of the transfer function \(G(s)\) from \(F\) to \(x\)} \caption{\label{fig:detail_control_cf_bode_plot_mech_sys}Bode plot of the trancfer function \(G(s)\) from \(F\) to \(x\)}
\end{figure} \end{figure}
\paragraph{Requirements} \paragraph{Requirements}
The control objective is to isolate the displacement \(x\) of the mass from the ground motion \(w\). The control objective is to isolate the displacement \(x\) of the mass from the ground motion \(w\).
@ -1679,7 +1679,7 @@ We model the uncertainty on the dynamics of the plant by a multiplicative weight
\end{equation} \end{equation}
where \(r_0=0.1\) is the relative uncertainty at steady-state, \(1/\tau=\SI{100}{\hertz}\) is the frequency at which the relative uncertainty reaches \(\SI{100}{\percent}\), and \(r_\infty=10\) is the magnitude of the weight at high frequency. where \(r_0=0.1\) is the relative uncertainty at steady-state, \(1/\tau=\SI{100}{\hertz}\) is the frequency at which the relative uncertainty reaches \(\SI{100}{\percent}\), and \(r_\infty=10\) is the magnitude of the weight at high frequency.
All the requirements on \(H_L\) and \(H_H\) are represented on Figure \ref{fig:detail_control_spec_S_T}. All the requirements on \(H_L\) and \(H_H\) are represented on Figure \ref{fig:detail_control_cf_specs_S_T}.
\begin{itemize} \begin{itemize}
\item[{$\square$}] TODO: Make Matlab code to plot the specifications \item[{$\square$}] TODO: Make Matlab code to plot the specifications
@ -1688,23 +1688,23 @@ All the requirements on \(H_L\) and \(H_H\) are represented on Figure \ref{fig:d
\begin{figure}[htbp] \begin{figure}[htbp]
\begin{subfigure}{0.49\textwidth} \begin{subfigure}{0.49\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_spec_S_T.png} \includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_cf_specs_S_T.png}
\end{center} \end{center}
\subcaption{\label{fig:detail_control_spec_S_T}Closed loop specifications} \subcaption{\label{fig:detail_control_cf_specs_S_T}Closed loop specifications}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.49\textwidth} \begin{subfigure}{0.49\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_hinf_filters_result_weights.png} \includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_cf_hinf_filters_result_weights.png}
\end{center} \end{center}
\subcaption{\label{fig:detail_control_hinf_filters_result_weights}Obtained complementary filters} \subcaption{\label{fig:detail_control_cf_hinf_filters_result_weights}Obtained complementary filters}
\end{subfigure} \end{subfigure}
\caption{\label{fig:detail_control_spec_S_T_obtained_filters}Caption with reference to sub figure (\subref{fig:detail_control_spec_S_T}) (\subref{fig:detail_control_hinf_filters_result_weights})} \caption{\label{fig:detail_control_cf_specs_S_T_obtained_filters}Caption with reference to sub figure (\subref{fig:detail_control_cf_specs_S_T}) (\subref{fig:detail_control_cf_hinf_filters_result_weights})}
\end{figure} \end{figure}
\paragraph{Design of the filters} \paragraph{Design of the filters}
\textbf{Or maybe use analytical formulas as proposed here: \href{file:///home/thomas/Cloud/research/papers/dehaeze20\_virtu\_senso\_fusio/matlab/index.org}{Complementary filters using analytical formula}} \textbf{Or maybe use analytical formulas as proposed here: \href{file:///home/thomas/Cloud/research/papers/dehaeze20\_virtu\_senso\_fusio/matlab/index.org}{Complementary filters using analytical formula}}
We then design \(w_L\) and \(w_H\) such that their magnitude are below the upper bounds shown on Figure \ref{fig:detail_control_hinf_filters_result_weights}. We then design \(w_L\) and \(w_H\) such that their magnitude are below the upper bounds shown on Figure \ref{fig:detail_control_cf_hinf_filters_result_weights}.
\begin{subequations} \begin{subequations}
\begin{align} \begin{align}
w_L &= \frac{(s+22.36)^2}{0.005(s+1000)^2}\\ w_L &= \frac{(s+22.36)^2}{0.005(s+1000)^2}\\
@ -1712,7 +1712,7 @@ We then design \(w_L\) and \(w_H\) such that their magnitude are below the upper
\end{align} \end{align}
\end{subequations} \end{subequations}
After the \(\hinf\text{-synthesis}\), we obtain \(H_L\) and \(H_H\), and we plot their magnitude on phase on Figure \ref{fig:detail_control_hinf_filters_result_weights}. After the \(\hinf\text{-synthesis}\), we obtain \(H_L\) and \(H_H\), and we plot their magnitude on phase on Figure \ref{fig:detail_control_cf_hinf_filters_result_weights}.
\begin{subequations} \begin{subequations}
\begin{align} \begin{align}
@ -1724,53 +1724,53 @@ After the \(\hinf\text{-synthesis}\), we obtain \(H_L\) and \(H_H\), and we plot
The controller is \(K = \left( H_H G \right)^{-1}\). The controller is \(K = \left( H_H G \right)^{-1}\).
A low pass filter is added to \(K\) so that it is proper and implementable. A low pass filter is added to \(K\) so that it is proper and implementable.
The obtained controller is shown on Figure \ref{fig:detail_control_bode_Kfb}. The obtained controller is shown on Figure \ref{fig:detail_control_cf_bode_Kfb}.
It is implemented as shown on Figure \ref{fig:detail_control_mech_sys_alone_ctrl}. It is implemented as shown on Figure \ref{fig:detail_control_cf_mech_sys_alone_ctrl}.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/detail_control_mech_sys_alone_ctrl.png} \includegraphics[scale=1]{figs/detail_control_cf_mech_sys_alone_ctrl.png}
\caption{\label{fig:detail_control_mech_sys_alone_ctrl}Control of a positioning system} \caption{\label{fig:detail_control_cf_mech_sys_alone_ctrl}Control of a positioning system}
\end{figure} \end{figure}
\begin{figure}[htbp] \begin{figure}[htbp]
\begin{subfigure}{0.49\textwidth} \begin{subfigure}{0.49\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_bode_Kfb.png} \includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_cf_bode_Kfb.png}
\end{center} \end{center}
\subcaption{\label{fig:detail_control_bode_Kfb}Controller $K$} \subcaption{\label{fig:detail_control_cf_bode_Kfb}Controller $K$}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.49\textwidth} \begin{subfigure}{0.49\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_bode_plot_loop_gain_robustness.png} \includegraphics[scale=1,width=0.95\linewidth]{figs/detail_control_cf_bode_plot_loop_gain_robustness.png}
\end{center} \end{center}
\subcaption{\label{fig:detail_control_bode_plot_loop_gain_robustness}Loop Gain} \subcaption{\label{fig:detail_control_cf_bode_plot_loop_gain_robustness}Loop Gain}
\end{subfigure} \end{subfigure}
\caption{\label{fig:detail_control_bode_Kfb_loop_gain}Caption with reference to sub figure (\subref{fig:detail_control_bode_Kfb}) (\subref{fig:detail_control_bode_plot_loop_gain_robustness})} \caption{\label{fig:detail_control_cf_bode_Kfb_loop_gain}Caption with reference to sub figure (\subref{fig:detail_control_cf_bode_Kfb}) (\subref{fig:detail_control_cf_bode_plot_loop_gain_robustness})}
\end{figure} \end{figure}
\paragraph{Robustness analysis} \paragraph{Robustness analysis}
The robust stability can be access on the nyquist plot (Figure \ref{fig:detail_control_nyquist_robustness}). The robust stability can be access on the nyquist plot (Figure \ref{fig:detail_control_cf_nyquist_robustness}).
The robust performance is shown on Figure \ref{fig:detail_control_robust_perf}. The robust performance is shown on Figure \ref{fig:detail_control_cf_robust_perf}.
\begin{figure}[htbp] \begin{figure}[htbp]
\begin{subfigure}{0.49\textwidth} \begin{subfigure}{0.49\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,scale=0.8]{figs/detail_control_nyquist_robustness.png} \includegraphics[scale=1,scale=0.8]{figs/detail_control_cf_nyquist_robustness.png}
\end{center} \end{center}
\subcaption{\label{fig:detail_control_nyquist_robustness}Robust Stability} \subcaption{\label{fig:detail_control_cf_nyquist_robustness}Robust Stability}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.49\textwidth} \begin{subfigure}{0.49\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,scale=0.8]{figs/detail_control_robust_perf.png} \includegraphics[scale=1,scale=0.8]{figs/detail_control_cf_robust_perf.png}
\end{center} \end{center}
\subcaption{\label{fig:detail_control_robust_perf}Robust performance} \subcaption{\label{fig:detail_control_cf_robust_perf}Robust performance}
\end{subfigure} \end{subfigure}
\caption{\label{fig:fig_label}Caption with reference to sub figure (\subref{fig:detail_control_nyquist_robustness}) (\subref{fig:detail_control_robust_perf})} \caption{\label{fig:detail_control_cf_simulation_results}Caption with reference to sub figure (\subref{fig:detail_control_cf_nyquist_robustness}) (\subref{fig:detail_control_cf_robust_perf})}
\end{figure} \end{figure}
\section{Experimental Validation?} \section{Experimental Validation?}
\label{ssec:detail_control_exp_validation} \label{ssec:detail_control_cf_exp_validation}
\href{file:///home/thomas/Cloud/research/papers/dehaeze20\_virtu\_senso\_fusio/matlab/index.org}{Experimental Validation} \href{file:///home/thomas/Cloud/research/papers/dehaeze20\_virtu\_senso\_fusio/matlab/index.org}{Experimental Validation}
\section*{Conclusion} \section*{Conclusion}