Compare commits
19 Commits
85635d4087
...
master
Author | SHA1 | Date | |
---|---|---|---|
3528dcf59d | |||
e4d9703f11 | |||
a0e74fdeba | |||
8f7a8b3b16 | |||
4b1c3bdece | |||
a2a56548ee | |||
c40efced20 | |||
0145bcce53 | |||
48688427b6 | |||
a0a8d56ec4 | |||
c644ae7f8a | |||
3c97176b6b | |||
8fd71134d4 | |||
b22253dcc8 | |||
02adf6c375 | |||
4c51b747d4 | |||
b9a5308fa3 | |||
c81cd4fbb6 | |||
0bc6857290 |
18
figs/inkscape/convert_svg.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Directory containing SVG files
|
||||
INPUT_DIR="."
|
||||
|
||||
# Loop through all SVG files in the directory
|
||||
for svg_file in "$INPUT_DIR"/*.svg; do
|
||||
# Check if there are SVG files in the directory
|
||||
if [ -f "$svg_file" ]; then
|
||||
# Output PDF file name
|
||||
pdf_file="../${svg_file%.svg}.pdf"
|
||||
png_file="../${svg_file%.svg}"
|
||||
|
||||
# Convert SVG to PDF using Inkscape
|
||||
inkscape "$svg_file" --export-filename="$pdf_file" && \
|
||||
pdftocairo -png -singlefile -cropbox "$pdf_file" "$png_file"
|
||||
fi
|
||||
done
|
1561
figs/inkscape/nass_concept_schematic.svg
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
figs/nass_comp_undamped_damped_plant_m1.pdf
Normal file
BIN
figs/nass_comp_undamped_damped_plant_m1.png
Normal file
After Width: | Height: | Size: 121 KiB |
BIN
figs/nass_concept_schematic.pdf
Normal file
BIN
figs/nass_concept_schematic.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
figs/nass_control_architecture.pdf
Normal file
BIN
figs/nass_control_architecture.png
Normal file
After Width: | Height: | Size: 72 KiB |
592
figs/nass_control_architecture.svg
Normal file
@@ -0,0 +1,592 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="488.983" height="202.876" viewBox="0 0 488.983 202.876">
|
||||
<defs>
|
||||
<g>
|
||||
<g id="glyph-0-0">
|
||||
<path d="M 6.203125 -4.953125 C 6.203125 -5.921875 5.21875 -6.796875 3.859375 -6.796875 L 0.34375 -6.796875 L 0.34375 -6.484375 L 0.59375 -6.484375 C 1.359375 -6.484375 1.375 -6.375 1.375 -6.015625 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 C 0.703125 -0.03125 1.4375 -0.03125 1.8125 -0.03125 C 2.1875 -0.03125 2.9375 -0.03125 3.28125 0 L 3.28125 -0.3125 L 3.046875 -0.3125 C 2.28125 -0.3125 2.265625 -0.421875 2.265625 -0.78125 L 2.265625 -3.140625 L 3.9375 -3.140625 C 5.140625 -3.140625 6.203125 -3.953125 6.203125 -4.953125 Z M 5.1875 -4.953125 C 5.1875 -4.484375 5.1875 -3.40625 3.609375 -3.40625 L 2.234375 -3.40625 L 2.234375 -6.09375 C 2.234375 -6.421875 2.25 -6.484375 2.71875 -6.484375 L 3.609375 -6.484375 C 5.1875 -6.484375 5.1875 -5.4375 5.1875 -4.953125 Z M 5.1875 -4.953125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-1">
|
||||
<path d="M 2.53125 0 L 2.53125 -0.3125 C 1.875 -0.3125 1.765625 -0.3125 1.765625 -0.75 L 1.765625 -6.90625 L 0.328125 -6.796875 L 0.328125 -6.484375 C 1.03125 -6.484375 1.109375 -6.421875 1.109375 -5.9375 L 1.109375 -0.75 C 1.109375 -0.3125 1 -0.3125 0.328125 -0.3125 L 0.328125 0 L 1.4375 -0.03125 Z M 2.53125 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-2">
|
||||
<path d="M 4.8125 -0.890625 L 4.8125 -1.4375 L 4.5625 -1.4375 L 4.5625 -0.890625 C 4.5625 -0.3125 4.3125 -0.25 4.203125 -0.25 C 3.875 -0.25 3.828125 -0.703125 3.828125 -0.75 L 3.828125 -2.734375 C 3.828125 -3.15625 3.828125 -3.546875 3.46875 -3.90625 C 3.078125 -4.296875 2.59375 -4.453125 2.109375 -4.453125 C 1.296875 -4.453125 0.609375 -3.984375 0.609375 -3.328125 C 0.609375 -3.03125 0.8125 -2.859375 1.0625 -2.859375 C 1.34375 -2.859375 1.515625 -3.0625 1.515625 -3.328125 C 1.515625 -3.4375 1.46875 -3.765625 1.015625 -3.78125 C 1.28125 -4.125 1.765625 -4.234375 2.09375 -4.234375 C 2.578125 -4.234375 3.140625 -3.859375 3.140625 -2.96875 L 3.140625 -2.59375 C 2.640625 -2.5625 1.9375 -2.53125 1.3125 -2.234375 C 0.5625 -1.90625 0.3125 -1.390625 0.3125 -0.953125 C 0.3125 -0.140625 1.28125 0.109375 1.90625 0.109375 C 2.5625 0.109375 3.03125 -0.28125 3.21875 -0.75 C 3.25 -0.359375 3.515625 0.0625 3.984375 0.0625 C 4.203125 0.0625 4.8125 -0.078125 4.8125 -0.890625 Z M 3.140625 -1.390625 C 3.140625 -0.453125 2.421875 -0.109375 1.984375 -0.109375 C 1.5 -0.109375 1.078125 -0.453125 1.078125 -0.953125 C 1.078125 -1.5 1.5 -2.328125 3.140625 -2.390625 Z M 3.140625 -1.390625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-3">
|
||||
<path d="M 5.328125 0 L 5.328125 -0.3125 C 4.8125 -0.3125 4.5625 -0.3125 4.546875 -0.609375 L 4.546875 -2.515625 C 4.546875 -3.359375 4.546875 -3.671875 4.234375 -4.03125 C 4.09375 -4.203125 3.765625 -4.40625 3.1875 -4.40625 C 2.46875 -4.40625 2 -3.96875 1.71875 -3.359375 L 1.71875 -4.40625 L 0.3125 -4.296875 L 0.3125 -3.984375 C 1.015625 -3.984375 1.09375 -3.90625 1.09375 -3.421875 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.5625 0 L 2.5625 -0.3125 C 1.890625 -0.3125 1.78125 -0.3125 1.78125 -0.75 L 1.78125 -2.59375 C 1.78125 -3.625 2.484375 -4.1875 3.125 -4.1875 C 3.75 -4.1875 3.859375 -3.640625 3.859375 -3.078125 L 3.859375 -0.75 C 3.859375 -0.3125 3.75 -0.3125 3.078125 -0.3125 L 3.078125 0 L 4.203125 -0.03125 Z M 5.328125 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-4">
|
||||
<path d="M 3.296875 -1.234375 L 3.296875 -1.796875 L 3.0625 -1.796875 L 3.0625 -1.25 C 3.0625 -0.515625 2.75 -0.140625 2.390625 -0.140625 C 1.71875 -0.140625 1.71875 -1.046875 1.71875 -1.21875 L 1.71875 -3.984375 L 3.140625 -3.984375 L 3.140625 -4.296875 L 1.71875 -4.296875 L 1.71875 -6.125 L 1.46875 -6.125 C 1.46875 -5.3125 1.171875 -4.234375 0.1875 -4.203125 L 0.1875 -3.984375 L 1.03125 -3.984375 L 1.03125 -1.234375 C 1.03125 -0.015625 1.953125 0.109375 2.3125 0.109375 C 3.03125 0.109375 3.296875 -0.59375 3.296875 -1.234375 Z M 3.296875 -1.234375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-5">
|
||||
<path d="M 7.03125 -3.34375 C 7.03125 -5.234375 5.6875 -6.796875 3.984375 -6.796875 L 0.34375 -6.796875 L 0.34375 -6.484375 L 0.59375 -6.484375 C 1.359375 -6.484375 1.375 -6.375 1.375 -6.015625 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 L 3.984375 0 C 5.65625 0 7.03125 -1.46875 7.03125 -3.34375 Z M 6.046875 -3.34375 C 6.046875 -2.234375 5.859375 -1.640625 5.5 -1.15625 C 5.296875 -0.890625 4.734375 -0.3125 3.71875 -0.3125 L 2.71875 -0.3125 C 2.25 -0.3125 2.234375 -0.375 2.234375 -0.703125 L 2.234375 -6.09375 C 2.234375 -6.421875 2.25 -6.484375 2.71875 -6.484375 L 3.71875 -6.484375 C 4.328125 -6.484375 5.015625 -6.265625 5.53125 -5.5625 C 5.953125 -4.96875 6.046875 -4.125 6.046875 -3.34375 Z M 6.046875 -3.34375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-6">
|
||||
<path d="M 8.09375 0 L 8.09375 -0.3125 C 7.578125 -0.3125 7.328125 -0.3125 7.3125 -0.609375 L 7.3125 -2.515625 C 7.3125 -3.359375 7.3125 -3.671875 7 -4.03125 C 6.875 -4.203125 6.546875 -4.40625 5.96875 -4.40625 C 5.125 -4.40625 4.6875 -3.796875 4.515625 -3.421875 C 4.375 -4.296875 3.640625 -4.40625 3.1875 -4.40625 C 2.46875 -4.40625 2 -3.96875 1.71875 -3.359375 L 1.71875 -4.40625 L 0.3125 -4.296875 L 0.3125 -3.984375 C 1.015625 -3.984375 1.09375 -3.90625 1.09375 -3.421875 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.5625 0 L 2.5625 -0.3125 C 1.890625 -0.3125 1.78125 -0.3125 1.78125 -0.75 L 1.78125 -2.59375 C 1.78125 -3.625 2.484375 -4.1875 3.125 -4.1875 C 3.75 -4.1875 3.859375 -3.640625 3.859375 -3.078125 L 3.859375 -0.75 C 3.859375 -0.3125 3.75 -0.3125 3.078125 -0.3125 L 3.078125 0 L 4.203125 -0.03125 L 5.328125 0 L 5.328125 -0.3125 C 4.65625 -0.3125 4.546875 -0.3125 4.546875 -0.75 L 4.546875 -2.59375 C 4.546875 -3.625 5.25 -4.1875 5.890625 -4.1875 C 6.515625 -4.1875 6.625 -3.640625 6.625 -3.078125 L 6.625 -0.75 C 6.625 -0.3125 6.515625 -0.3125 5.859375 -0.3125 L 5.859375 0 L 6.984375 -0.03125 Z M 8.09375 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-7">
|
||||
<path d="M 5.1875 -2.15625 C 5.1875 -3.40625 4.21875 -4.40625 3.109375 -4.40625 C 2.328125 -4.40625 1.90625 -3.96875 1.71875 -3.75 L 1.71875 -4.40625 L 0.28125 -4.296875 L 0.28125 -3.984375 C 0.984375 -3.984375 1.0625 -3.921875 1.0625 -3.484375 L 1.0625 1.171875 C 1.0625 1.625 0.953125 1.625 0.28125 1.625 L 0.28125 1.9375 L 1.390625 1.90625 L 2.515625 1.9375 L 2.515625 1.625 C 1.84375 1.625 1.734375 1.625 1.734375 1.171875 L 1.734375 -0.59375 C 1.796875 -0.421875 2.203125 0.109375 2.96875 0.109375 C 4.15625 0.109375 5.1875 -0.859375 5.1875 -2.15625 Z M 4.359375 -2.15625 C 4.359375 -0.953125 3.65625 -0.109375 2.921875 -0.109375 C 2.53125 -0.109375 2.15625 -0.3125 1.875 -0.71875 C 1.734375 -0.921875 1.734375 -0.9375 1.734375 -1.140625 L 1.734375 -3.359375 C 2.03125 -3.859375 2.515625 -4.15625 3.03125 -4.15625 C 3.75 -4.15625 4.359375 -3.28125 4.359375 -2.15625 Z M 4.359375 -2.15625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-8">
|
||||
<path d="M 4.125 -1.1875 C 4.125 -1.28125 4.046875 -1.296875 4 -1.296875 C 3.90625 -1.296875 3.890625 -1.25 3.875 -1.171875 C 3.515625 -0.140625 2.625 -0.140625 2.53125 -0.140625 C 2.03125 -0.140625 1.625 -0.4375 1.40625 -0.8125 C 1.109375 -1.28125 1.109375 -1.9375 1.109375 -2.296875 L 3.875 -2.296875 C 4.09375 -2.296875 4.125 -2.296875 4.125 -2.515625 C 4.125 -3.5 3.59375 -4.453125 2.34375 -4.453125 C 1.1875 -4.453125 0.28125 -3.4375 0.28125 -2.1875 C 0.28125 -0.859375 1.328125 0.109375 2.46875 0.109375 C 3.6875 0.109375 4.125 -1 4.125 -1.1875 Z M 3.46875 -2.515625 L 1.109375 -2.515625 C 1.171875 -3.984375 2.015625 -4.234375 2.34375 -4.234375 C 3.375 -4.234375 3.46875 -2.890625 3.46875 -2.515625 Z M 3.46875 -2.515625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-9">
|
||||
<path d="M 5.25 0 L 5.25 -0.3125 C 4.546875 -0.3125 4.46875 -0.375 4.46875 -0.859375 L 4.46875 -6.90625 L 3.03125 -6.796875 L 3.03125 -6.484375 C 3.734375 -6.484375 3.8125 -6.421875 3.8125 -5.9375 L 3.8125 -3.78125 C 3.515625 -4.140625 3.09375 -4.40625 2.5625 -4.40625 C 1.390625 -4.40625 0.34375 -3.421875 0.34375 -2.140625 C 0.34375 -0.875 1.3125 0.109375 2.453125 0.109375 C 3.078125 0.109375 3.53125 -0.234375 3.78125 -0.546875 L 3.78125 0.109375 Z M 3.78125 -1.171875 C 3.78125 -1 3.78125 -0.96875 3.671875 -0.8125 C 3.375 -0.328125 2.921875 -0.109375 2.5 -0.109375 C 2.046875 -0.109375 1.6875 -0.375 1.453125 -0.75 C 1.1875 -1.15625 1.171875 -1.71875 1.171875 -2.125 C 1.171875 -2.5 1.1875 -3.09375 1.46875 -3.546875 C 1.6875 -3.859375 2.0625 -4.1875 2.59375 -4.1875 C 2.953125 -4.1875 3.359375 -4.03125 3.671875 -3.578125 C 3.78125 -3.40625 3.78125 -3.390625 3.78125 -3.21875 Z M 3.78125 -1.171875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-10">
|
||||
<path d="M 8.75 0 L 8.75 -0.3125 L 8.515625 -0.3125 C 7.75 -0.3125 7.71875 -0.421875 7.71875 -0.78125 L 7.71875 -6.015625 C 7.71875 -6.375 7.75 -6.484375 8.515625 -6.484375 L 8.75 -6.484375 L 8.75 -6.796875 L 7.0625 -6.796875 C 6.8125 -6.796875 6.8125 -6.78125 6.734375 -6.609375 L 4.5625 -1 L 2.40625 -6.578125 C 2.3125 -6.796875 2.28125 -6.796875 2.046875 -6.796875 L 0.375 -6.796875 L 0.375 -6.484375 L 0.609375 -6.484375 C 1.375 -6.484375 1.390625 -6.375 1.390625 -6.015625 L 1.390625 -1.046875 C 1.390625 -0.78125 1.390625 -0.3125 0.375 -0.3125 L 0.375 0 L 1.53125 -0.03125 L 2.703125 0 L 2.703125 -0.3125 C 1.671875 -0.3125 1.671875 -0.78125 1.671875 -1.046875 L 1.671875 -6.40625 L 1.6875 -6.40625 L 4.078125 -0.21875 C 4.125 -0.09375 4.1875 0 4.28125 0 C 4.390625 0 4.421875 -0.078125 4.453125 -0.1875 L 6.90625 -6.484375 L 6.921875 -6.484375 L 6.921875 -0.78125 C 6.921875 -0.421875 6.890625 -0.3125 6.125 -0.3125 L 5.890625 -0.3125 L 5.890625 0 C 6.265625 -0.03125 6.9375 -0.03125 7.328125 -0.03125 C 7.71875 -0.03125 8.375 -0.03125 8.75 0 Z M 8.75 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-11">
|
||||
<path d="M 3.625 -3.796875 C 3.625 -4.109375 3.3125 -4.40625 2.890625 -4.40625 C 2.15625 -4.40625 1.796875 -3.734375 1.65625 -3.296875 L 1.65625 -4.40625 L 0.28125 -4.296875 L 0.28125 -3.984375 C 0.96875 -3.984375 1.0625 -3.90625 1.0625 -3.421875 L 1.0625 -0.75 C 1.0625 -0.3125 0.953125 -0.3125 0.28125 -0.3125 L 0.28125 0 L 1.40625 -0.03125 C 1.8125 -0.03125 2.28125 -0.03125 2.671875 0 L 2.671875 -0.3125 L 2.46875 -0.3125 C 1.734375 -0.3125 1.71875 -0.421875 1.71875 -0.78125 L 1.71875 -2.3125 C 1.71875 -3.296875 2.125 -4.1875 2.890625 -4.1875 C 2.953125 -4.1875 2.96875 -4.1875 3 -4.171875 C 2.96875 -4.15625 2.765625 -4.046875 2.765625 -3.78125 C 2.765625 -3.5 2.96875 -3.359375 3.1875 -3.359375 C 3.375 -3.359375 3.625 -3.46875 3.625 -3.796875 Z M 3.625 -3.796875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-12">
|
||||
<path d="M 4.6875 -2.125 C 4.6875 -3.40625 3.6875 -4.453125 2.484375 -4.453125 C 1.25 -4.453125 0.28125 -3.375 0.28125 -2.125 C 0.28125 -0.84375 1.3125 0.109375 2.484375 0.109375 C 3.6875 0.109375 4.6875 -0.859375 4.6875 -2.125 Z M 3.859375 -2.203125 C 3.859375 -1.84375 3.859375 -1.3125 3.640625 -0.875 C 3.421875 -0.421875 2.984375 -0.140625 2.484375 -0.140625 C 2.0625 -0.140625 1.625 -0.34375 1.359375 -0.8125 C 1.109375 -1.25 1.109375 -1.84375 1.109375 -2.203125 C 1.109375 -2.59375 1.109375 -3.140625 1.34375 -3.578125 C 1.609375 -4.03125 2.078125 -4.234375 2.484375 -4.234375 C 2.921875 -4.234375 3.34375 -4.015625 3.609375 -3.59375 C 3.859375 -3.171875 3.859375 -2.59375 3.859375 -2.203125 Z M 3.859375 -2.203125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-13">
|
||||
<path d="M 4.828125 -4.015625 C 4.828125 -4.1875 4.703125 -4.515625 4.3125 -4.515625 C 4.125 -4.515625 3.6875 -4.453125 3.265625 -4.046875 C 2.84375 -4.375 2.421875 -4.40625 2.203125 -4.40625 C 1.28125 -4.40625 0.59375 -3.71875 0.59375 -2.953125 C 0.59375 -2.515625 0.8125 -2.125 1.0625 -1.921875 C 0.9375 -1.765625 0.75 -1.4375 0.75 -1.09375 C 0.75 -0.78125 0.890625 -0.40625 1.1875 -0.203125 C 0.59375 -0.046875 0.28125 0.390625 0.28125 0.78125 C 0.28125 1.5 1.265625 2.046875 2.484375 2.046875 C 3.65625 2.046875 4.6875 1.546875 4.6875 0.765625 C 4.6875 0.421875 4.546875 -0.09375 4.046875 -0.375 C 3.515625 -0.640625 2.9375 -0.640625 2.328125 -0.640625 C 2.078125 -0.640625 1.65625 -0.640625 1.578125 -0.65625 C 1.265625 -0.703125 1.0625 -1 1.0625 -1.328125 C 1.0625 -1.359375 1.0625 -1.59375 1.21875 -1.796875 C 1.609375 -1.515625 2.015625 -1.484375 2.203125 -1.484375 C 3.140625 -1.484375 3.828125 -2.171875 3.828125 -2.9375 C 3.828125 -3.296875 3.65625 -3.671875 3.40625 -3.90625 C 3.765625 -4.234375 4.125 -4.296875 4.3125 -4.296875 C 4.3125 -4.296875 4.375 -4.296875 4.40625 -4.28125 C 4.296875 -4.234375 4.25 -4.125 4.25 -4.015625 C 4.25 -3.84375 4.375 -3.71875 4.53125 -3.71875 C 4.640625 -3.71875 4.828125 -3.796875 4.828125 -4.015625 Z M 3.078125 -2.953125 C 3.078125 -2.671875 3.0625 -2.359375 2.921875 -2.109375 C 2.84375 -1.984375 2.609375 -1.71875 2.203125 -1.71875 C 1.34375 -1.71875 1.34375 -2.703125 1.34375 -2.9375 C 1.34375 -3.203125 1.359375 -3.515625 1.5 -3.765625 C 1.578125 -3.890625 1.8125 -4.171875 2.203125 -4.171875 C 3.078125 -4.171875 3.078125 -3.171875 3.078125 -2.953125 Z M 4.171875 0.78125 C 4.171875 1.328125 3.46875 1.828125 2.484375 1.828125 C 1.484375 1.828125 0.796875 1.3125 0.796875 0.78125 C 0.796875 0.328125 1.171875 -0.046875 1.609375 -0.0625 L 2.203125 -0.0625 C 3.0625 -0.0625 4.171875 -0.0625 4.171875 0.78125 Z M 4.171875 0.78125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-14">
|
||||
<path d="M 5.0625 -3.984375 L 5.0625 -4.296875 C 4.828125 -4.265625 4.53125 -4.265625 4.3125 -4.265625 L 3.4375 -4.296875 L 3.4375 -3.984375 C 3.75 -3.96875 3.90625 -3.796875 3.90625 -3.546875 C 3.90625 -3.453125 3.90625 -3.4375 3.859375 -3.3125 L 2.84375 -0.859375 L 1.734375 -3.546875 C 1.703125 -3.640625 1.6875 -3.6875 1.6875 -3.71875 C 1.6875 -3.984375 2.046875 -3.984375 2.234375 -3.984375 L 2.234375 -4.296875 L 1.15625 -4.265625 C 0.890625 -4.265625 0.484375 -4.265625 0.1875 -4.296875 L 0.1875 -3.984375 C 0.671875 -3.984375 0.859375 -3.984375 1 -3.640625 L 2.484375 0 L 2.234375 0.59375 C 2.015625 1.140625 1.734375 1.828125 1.109375 1.828125 C 1.0625 1.828125 0.828125 1.828125 0.640625 1.640625 C 0.953125 1.609375 1.03125 1.390625 1.03125 1.21875 C 1.03125 0.96875 0.84375 0.8125 0.609375 0.8125 C 0.40625 0.8125 0.1875 0.9375 0.1875 1.234375 C 0.1875 1.6875 0.609375 2.046875 1.109375 2.046875 C 1.734375 2.046875 2.140625 1.46875 2.375 0.90625 L 4.125 -3.34375 C 4.390625 -3.96875 4.890625 -3.984375 5.0625 -3.984375 Z M 5.0625 -3.984375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-15">
|
||||
<path d="M 7.125 -6.484375 L 7.125 -6.796875 L 5.96875 -6.765625 L 4.796875 -6.796875 L 4.796875 -6.484375 C 5.828125 -6.484375 5.828125 -6.015625 5.828125 -5.75 L 5.828125 -1.5 L 2.3125 -6.671875 C 2.21875 -6.78125 2.203125 -6.796875 2.015625 -6.796875 L 0.328125 -6.796875 L 0.328125 -6.484375 L 0.609375 -6.484375 C 0.765625 -6.484375 0.96875 -6.484375 1.109375 -6.46875 C 1.34375 -6.4375 1.359375 -6.421875 1.359375 -6.234375 L 1.359375 -1.046875 C 1.359375 -0.78125 1.359375 -0.3125 0.328125 -0.3125 L 0.328125 0 L 1.5 -0.03125 L 2.65625 0 L 2.65625 -0.3125 C 1.625 -0.3125 1.625 -0.78125 1.625 -1.046875 L 1.625 -6.21875 C 1.6875 -6.171875 1.6875 -6.15625 1.734375 -6.09375 L 5.796875 -0.125 C 5.875 -0.015625 5.890625 0 5.96875 0 C 6.09375 0 6.09375 -0.0625 6.09375 -0.265625 L 6.09375 -5.75 C 6.09375 -6.015625 6.09375 -6.484375 7.125 -6.484375 Z M 7.125 -6.484375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-16">
|
||||
<path d="M 7.125 0 L 7.125 -0.3125 L 6.890625 -0.3125 C 6.125 -0.3125 6.09375 -0.421875 6.09375 -0.78125 L 6.09375 -6.015625 C 6.09375 -6.375 6.125 -6.484375 6.890625 -6.484375 L 7.125 -6.484375 L 7.125 -6.796875 C 6.78125 -6.765625 6.046875 -6.765625 5.65625 -6.765625 C 5.28125 -6.765625 4.53125 -6.765625 4.1875 -6.796875 L 4.1875 -6.484375 L 4.421875 -6.484375 C 5.203125 -6.484375 5.21875 -6.375 5.21875 -6.015625 L 5.21875 -3.6875 L 2.234375 -3.6875 L 2.234375 -6.015625 C 2.234375 -6.375 2.265625 -6.484375 3.03125 -6.484375 L 3.265625 -6.484375 L 3.265625 -6.796875 C 2.921875 -6.765625 2.1875 -6.765625 1.796875 -6.765625 C 1.421875 -6.765625 0.671875 -6.765625 0.328125 -6.796875 L 0.328125 -6.484375 L 0.5625 -6.484375 C 1.328125 -6.484375 1.359375 -6.375 1.359375 -6.015625 L 1.359375 -0.78125 C 1.359375 -0.421875 1.328125 -0.3125 0.5625 -0.3125 L 0.328125 -0.3125 L 0.328125 0 C 0.671875 -0.03125 1.40625 -0.03125 1.796875 -0.03125 C 2.171875 -0.03125 2.921875 -0.03125 3.265625 0 L 3.265625 -0.3125 L 3.03125 -0.3125 C 2.265625 -0.3125 2.234375 -0.421875 2.234375 -0.78125 L 2.234375 -3.390625 L 5.21875 -3.390625 L 5.21875 -0.78125 C 5.21875 -0.421875 5.203125 -0.3125 4.421875 -0.3125 L 4.1875 -0.3125 L 4.1875 0 C 4.53125 -0.03125 5.28125 -0.03125 5.65625 -0.03125 C 6.03125 -0.03125 6.78125 -0.03125 7.125 0 Z M 7.125 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-17">
|
||||
<path d="M 5.140625 0 L 5.140625 -0.3125 C 4.59375 -0.3125 4.421875 -0.328125 4.1875 -0.609375 L 2.859375 -2.34375 C 3.15625 -2.71875 3.53125 -3.203125 3.765625 -3.46875 C 4.078125 -3.828125 4.484375 -3.96875 4.953125 -3.984375 L 4.953125 -4.296875 C 4.703125 -4.265625 4.40625 -4.265625 4.140625 -4.265625 C 3.84375 -4.265625 3.3125 -4.28125 3.1875 -4.296875 L 3.1875 -3.984375 C 3.390625 -3.96875 3.46875 -3.828125 3.46875 -3.671875 C 3.46875 -3.515625 3.375 -3.390625 3.328125 -3.328125 L 2.703125 -2.546875 L 1.9375 -3.546875 C 1.84375 -3.65625 1.84375 -3.671875 1.84375 -3.734375 C 1.84375 -3.875 1.984375 -3.96875 2.1875 -3.984375 L 2.1875 -4.296875 L 1.109375 -4.265625 C 0.90625 -4.265625 0.4375 -4.265625 0.171875 -4.296875 L 0.171875 -3.984375 C 0.859375 -3.984375 0.875 -3.96875 1.34375 -3.375 L 2.328125 -2.09375 C 1.859375 -1.5 1.859375 -1.46875 1.390625 -0.90625 C 0.921875 -0.328125 0.328125 -0.3125 0.125 -0.3125 L 0.125 0 C 0.375 -0.015625 0.6875 -0.03125 0.953125 -0.03125 L 1.890625 0 L 1.890625 -0.3125 C 1.671875 -0.34375 1.609375 -0.46875 1.609375 -0.609375 C 1.609375 -0.84375 1.890625 -1.171875 2.5 -1.875 L 3.25 -0.890625 C 3.328125 -0.78125 3.46875 -0.609375 3.46875 -0.5625 C 3.46875 -0.46875 3.375 -0.3125 3.109375 -0.3125 L 3.109375 0 L 4.1875 -0.03125 C 4.453125 -0.03125 4.84375 -0.015625 5.140625 0 Z M 5.140625 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-18">
|
||||
<path d="M 2.453125 0 L 2.453125 -0.3125 C 1.796875 -0.3125 1.765625 -0.359375 1.765625 -0.75 L 1.765625 -4.40625 L 0.375 -4.296875 L 0.375 -3.984375 C 1.015625 -3.984375 1.109375 -3.921875 1.109375 -3.4375 L 1.109375 -0.75 C 1.109375 -0.3125 1 -0.3125 0.328125 -0.3125 L 0.328125 0 L 1.421875 -0.03125 C 1.765625 -0.03125 2.125 -0.015625 2.453125 0 Z M 1.90625 -6.015625 C 1.90625 -6.28125 1.6875 -6.546875 1.390625 -6.546875 C 1.046875 -6.546875 0.84375 -6.265625 0.84375 -6.015625 C 0.84375 -5.75 1.078125 -5.484375 1.375 -5.484375 C 1.71875 -5.484375 1.90625 -5.765625 1.90625 -6.015625 Z M 1.90625 -6.015625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-19">
|
||||
<path d="M 4.125 -1.1875 C 4.125 -1.28125 4.03125 -1.28125 4 -1.28125 C 3.90625 -1.28125 3.890625 -1.25 3.875 -1.1875 C 3.578125 -0.265625 2.9375 -0.140625 2.5625 -0.140625 C 2.046875 -0.140625 1.171875 -0.5625 1.171875 -2.171875 C 1.171875 -3.796875 1.984375 -4.203125 2.515625 -4.203125 C 2.59375 -4.203125 3.21875 -4.203125 3.578125 -3.84375 C 3.171875 -3.8125 3.109375 -3.515625 3.109375 -3.390625 C 3.109375 -3.125 3.28125 -2.921875 3.5625 -2.921875 C 3.828125 -2.921875 4.015625 -3.09375 4.015625 -3.390625 C 4.015625 -4.078125 3.265625 -4.453125 2.5 -4.453125 C 1.25 -4.453125 0.34375 -3.390625 0.34375 -2.15625 C 0.34375 -0.875 1.328125 0.109375 2.484375 0.109375 C 3.8125 0.109375 4.125 -1.078125 4.125 -1.1875 Z M 4.125 -1.1875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-20">
|
||||
<path d="M 4.96875 -1.84375 C 4.96875 -2.84375 4.3125 -3.65625 3.46875 -3.859375 L 2.203125 -4.171875 C 1.578125 -4.3125 1.1875 -4.859375 1.1875 -5.4375 C 1.1875 -6.125 1.734375 -6.734375 2.515625 -6.734375 C 4.171875 -6.734375 4.390625 -5.109375 4.453125 -4.65625 C 4.453125 -4.59375 4.453125 -4.53125 4.5625 -4.53125 C 4.703125 -4.53125 4.703125 -4.59375 4.703125 -4.78125 L 4.703125 -6.78125 C 4.703125 -6.953125 4.703125 -7.015625 4.59375 -7.015625 C 4.515625 -7.015625 4.515625 -7 4.4375 -6.890625 L 4.09375 -6.3125 C 3.796875 -6.609375 3.390625 -7.015625 2.5 -7.015625 C 1.390625 -7.015625 0.5625 -6.140625 0.5625 -5.09375 C 0.5625 -4.265625 1.078125 -3.53125 1.859375 -3.265625 C 1.96875 -3.21875 2.484375 -3.109375 3.171875 -2.9375 C 3.4375 -2.859375 3.75 -2.796875 4.015625 -2.421875 C 4.234375 -2.171875 4.328125 -1.84375 4.328125 -1.515625 C 4.328125 -0.8125 3.828125 -0.09375 3 -0.09375 C 2.703125 -0.09375 1.953125 -0.140625 1.421875 -0.625 C 0.84375 -1.171875 0.8125 -1.796875 0.8125 -2.15625 C 0.796875 -2.265625 0.71875 -2.265625 0.6875 -2.265625 C 0.5625 -2.265625 0.5625 -2.1875 0.5625 -2.015625 L 0.5625 -0.015625 C 0.5625 0.15625 0.5625 0.21875 0.671875 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.484375 C 1.484375 -0.140625 2.125 0.21875 3 0.21875 C 4.171875 0.21875 4.96875 -0.75 4.96875 -1.84375 Z M 4.96875 -1.84375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-21">
|
||||
<path d="M 6.625 -2.3125 C 6.625 -2.421875 6.625 -2.484375 6.484375 -2.484375 C 6.375 -2.484375 6.375 -2.421875 6.375 -2.328125 C 6.296875 -0.90625 5.21875 -0.09375 4.140625 -0.09375 C 3.53125 -0.09375 1.578125 -0.421875 1.578125 -3.390625 C 1.578125 -6.375 3.515625 -6.703125 4.125 -6.703125 C 5.21875 -6.703125 6.09375 -5.796875 6.296875 -4.34375 C 6.3125 -4.203125 6.3125 -4.1875 6.453125 -4.1875 C 6.625 -4.1875 6.625 -4.203125 6.625 -4.421875 L 6.625 -6.78125 C 6.625 -6.953125 6.625 -7.015625 6.515625 -7.015625 C 6.46875 -7.015625 6.421875 -7.015625 6.34375 -6.890625 L 5.859375 -6.15625 C 5.484375 -6.515625 4.96875 -7.015625 4.015625 -7.015625 C 2.15625 -7.015625 0.5625 -5.4375 0.5625 -3.40625 C 0.5625 -1.34375 2.171875 0.21875 4.015625 0.21875 C 5.640625 0.21875 6.625 -1.171875 6.625 -2.3125 Z M 6.625 -2.3125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-22">
|
||||
<path d="M 5.328125 0 L 5.328125 -0.3125 C 4.625 -0.3125 4.546875 -0.375 4.546875 -0.859375 L 4.546875 -4.40625 L 3.078125 -4.296875 L 3.078125 -3.984375 C 3.78125 -3.984375 3.859375 -3.90625 3.859375 -3.421875 L 3.859375 -1.65625 C 3.859375 -0.78125 3.390625 -0.109375 2.65625 -0.109375 C 1.828125 -0.109375 1.78125 -0.578125 1.78125 -1.09375 L 1.78125 -4.40625 L 0.3125 -4.296875 L 0.3125 -3.984375 C 1.09375 -3.984375 1.09375 -3.953125 1.09375 -3.0625 L 1.09375 -1.578125 C 1.09375 -0.796875 1.09375 0.109375 2.609375 0.109375 C 3.171875 0.109375 3.609375 -0.171875 3.890625 -0.78125 L 3.890625 0.109375 Z M 5.328125 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-23">
|
||||
<path d="M 7.28125 -0.875 C 7.28125 -0.9375 7.28125 -1.046875 7.15625 -1.046875 C 7.046875 -1.046875 7.046875 -0.953125 7.03125 -0.890625 C 6.984375 -0.171875 6.625 0 6.375 0 C 5.890625 0 5.8125 -0.5 5.671875 -1.4375 L 5.546875 -2.234375 C 5.359375 -2.859375 4.875 -3.1875 4.328125 -3.390625 C 5.296875 -3.625 6.078125 -4.234375 6.078125 -5 C 6.078125 -5.96875 4.9375 -6.796875 3.46875 -6.796875 L 0.34375 -6.796875 L 0.34375 -6.484375 L 0.59375 -6.484375 C 1.359375 -6.484375 1.375 -6.375 1.375 -6.015625 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 C 0.703125 -0.03125 1.40625 -0.03125 1.796875 -0.03125 C 2.1875 -0.03125 2.890625 -0.03125 3.25 0 L 3.25 -0.3125 L 3.015625 -0.3125 C 2.25 -0.3125 2.234375 -0.421875 2.234375 -0.78125 L 2.234375 -3.296875 L 3.375 -3.296875 C 3.53125 -3.296875 3.953125 -3.296875 4.296875 -2.953125 C 4.671875 -2.59375 4.671875 -2.296875 4.671875 -1.625 C 4.671875 -0.96875 4.671875 -0.578125 5.09375 -0.203125 C 5.5 0.15625 6.046875 0.21875 6.34375 0.21875 C 7.109375 0.21875 7.28125 -0.59375 7.28125 -0.875 Z M 5.046875 -5 C 5.046875 -4.3125 4.8125 -3.515625 3.328125 -3.515625 L 2.234375 -3.515625 L 2.234375 -6.09375 C 2.234375 -6.3125 2.234375 -6.4375 2.453125 -6.46875 C 2.546875 -6.484375 2.84375 -6.484375 3.03125 -6.484375 C 3.9375 -6.484375 5.046875 -6.453125 5.046875 -5 Z M 5.046875 -5 "/>
|
||||
</g>
|
||||
<g id="glyph-0-24">
|
||||
<path d="M 3.546875 -6.3125 C 3.546875 -6.6875 3.1875 -7.015625 2.65625 -7.015625 C 1.953125 -7.015625 1.109375 -6.484375 1.109375 -5.4375 L 1.109375 -4.296875 L 0.328125 -4.296875 L 0.328125 -3.984375 L 1.109375 -3.984375 L 1.109375 -0.75 C 1.109375 -0.3125 1 -0.3125 0.34375 -0.3125 L 0.34375 0 L 1.46875 -0.03125 C 1.875 -0.03125 2.34375 -0.03125 2.734375 0 L 2.734375 -0.3125 L 2.53125 -0.3125 C 1.796875 -0.3125 1.765625 -0.421875 1.765625 -0.78125 L 1.765625 -3.984375 L 2.90625 -3.984375 L 2.90625 -4.296875 L 1.734375 -4.296875 L 1.734375 -5.4375 C 1.734375 -6.3125 2.21875 -6.796875 2.65625 -6.796875 C 2.6875 -6.796875 2.84375 -6.796875 2.984375 -6.734375 C 2.859375 -6.6875 2.6875 -6.5625 2.6875 -6.3125 C 2.6875 -6.078125 2.84375 -5.875 3.109375 -5.875 C 3.40625 -5.875 3.546875 -6.078125 3.546875 -6.3125 Z M 3.546875 -6.3125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-25">
|
||||
<path d="M 3.578125 -1.28125 C 3.578125 -1.796875 3.28125 -2.09375 3.171875 -2.21875 C 2.84375 -2.53125 2.453125 -2.625 2.03125 -2.703125 C 1.46875 -2.8125 0.8125 -2.9375 0.8125 -3.515625 C 0.8125 -3.859375 1.0625 -4.265625 1.921875 -4.265625 C 3.015625 -4.265625 3.0625 -3.375 3.078125 -3.0625 C 3.09375 -2.96875 3.203125 -2.96875 3.203125 -2.96875 C 3.328125 -2.96875 3.328125 -3.03125 3.328125 -3.21875 L 3.328125 -4.21875 C 3.328125 -4.390625 3.328125 -4.453125 3.21875 -4.453125 C 3.171875 -4.453125 3.15625 -4.453125 3.03125 -4.34375 C 3 -4.296875 2.890625 -4.203125 2.859375 -4.1875 C 2.484375 -4.453125 2.0625 -4.453125 1.921875 -4.453125 C 0.703125 -4.453125 0.328125 -3.796875 0.328125 -3.234375 C 0.328125 -2.890625 0.484375 -2.609375 0.75 -2.390625 C 1.078125 -2.125 1.359375 -2.0625 2.0625 -1.9375 C 2.296875 -1.890625 3.109375 -1.734375 3.109375 -1.015625 C 3.109375 -0.5 2.75 -0.109375 1.984375 -0.109375 C 1.140625 -0.109375 0.78125 -0.671875 0.59375 -1.515625 C 0.5625 -1.65625 0.5625 -1.6875 0.453125 -1.6875 C 0.328125 -1.6875 0.328125 -1.625 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.890625 -0.3125 C 1.328125 0.09375 1.765625 0.109375 1.984375 0.109375 C 3.125 0.109375 3.578125 -0.5625 3.578125 -1.28125 Z M 3.578125 -1.28125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-26">
|
||||
<path d="M 6.484375 -2.5625 L 6.234375 -2.5625 C 5.984375 -1.03125 5.765625 -0.3125 4.046875 -0.3125 L 2.734375 -0.3125 C 2.265625 -0.3125 2.234375 -0.375 2.234375 -0.703125 L 2.234375 -3.359375 L 3.140625 -3.359375 C 4.09375 -3.359375 4.203125 -3.046875 4.203125 -2.203125 L 4.453125 -2.203125 L 4.453125 -4.84375 L 4.203125 -4.84375 C 4.203125 -3.984375 4.09375 -3.671875 3.140625 -3.671875 L 2.234375 -3.671875 L 2.234375 -6.0625 C 2.234375 -6.390625 2.265625 -6.453125 2.734375 -6.453125 L 4.015625 -6.453125 C 5.53125 -6.453125 5.796875 -5.90625 5.96875 -4.53125 L 6.203125 -4.53125 L 5.9375 -6.765625 L 0.328125 -6.765625 L 0.328125 -6.453125 L 0.5625 -6.453125 C 1.328125 -6.453125 1.359375 -6.34375 1.359375 -5.984375 L 1.359375 -0.78125 C 1.359375 -0.421875 1.328125 -0.3125 0.5625 -0.3125 L 0.328125 -0.3125 L 0.328125 0 L 6.078125 0 Z M 6.484375 -2.5625 "/>
|
||||
</g>
|
||||
<g id="glyph-1-0">
|
||||
<path d="M 5.984375 -6.171875 C 6.03125 -6.3125 6.046875 -6.328125 6.109375 -6.34375 C 6.234375 -6.359375 6.375 -6.359375 6.484375 -6.359375 C 6.75 -6.359375 6.90625 -6.359375 6.90625 -6.65625 C 6.90625 -6.671875 6.890625 -6.828125 6.703125 -6.828125 C 6.5 -6.828125 6.28125 -6.8125 6.078125 -6.8125 C 5.859375 -6.8125 5.609375 -6.796875 5.390625 -6.796875 C 5 -6.796875 4.046875 -6.828125 3.65625 -6.828125 C 3.53125 -6.828125 3.359375 -6.828125 3.359375 -6.546875 C 3.359375 -6.359375 3.515625 -6.359375 3.6875 -6.359375 L 4.046875 -6.359375 C 4.421875 -6.359375 4.453125 -6.359375 4.6875 -6.328125 L 3.484375 -1.5 C 3.234375 -0.484375 2.609375 -0.1875 2.15625 -0.1875 C 2.0625 -0.1875 1.625 -0.203125 1.328125 -0.421875 C 1.875 -0.5625 2.046875 -1.03125 2.046875 -1.296875 C 2.046875 -1.625 1.78125 -1.859375 1.4375 -1.859375 C 1.046875 -1.859375 0.5625 -1.546875 0.5625 -0.921875 C 0.5625 -0.234375 1.25 0.171875 2.203125 0.171875 C 3.3125 0.171875 4.515625 -0.28125 4.8125 -1.453125 Z M 5.984375 -6.171875 "/>
|
||||
</g>
|
||||
<g id="glyph-1-1">
|
||||
<path d="M 5.75 -3.75 C 5.796875 -3.9375 5.796875 -3.953125 5.796875 -3.984375 C 5.796875 -4.203125 5.640625 -4.421875 5.328125 -4.421875 C 4.8125 -4.421875 4.6875 -3.953125 4.625 -3.6875 L 4.359375 -2.640625 C 4.234375 -2.171875 4.046875 -1.40625 3.9375 -1 C 3.890625 -0.78125 3.578125 -0.53125 3.546875 -0.515625 C 3.4375 -0.453125 3.203125 -0.28125 2.875 -0.28125 C 2.296875 -0.28125 2.28125 -0.78125 2.28125 -1 C 2.28125 -1.609375 2.59375 -2.390625 2.859375 -3.109375 C 2.96875 -3.359375 3 -3.4375 3 -3.609375 C 3 -4.1875 2.421875 -4.5 1.875 -4.5 C 0.8125 -4.5 0.3125 -3.140625 0.3125 -2.953125 C 0.3125 -2.8125 0.46875 -2.8125 0.5625 -2.8125 C 0.671875 -2.8125 0.75 -2.8125 0.78125 -2.9375 C 1.109375 -4.046875 1.65625 -4.140625 1.8125 -4.140625 C 1.875 -4.140625 1.984375 -4.140625 1.984375 -3.9375 C 1.984375 -3.703125 1.875 -3.4375 1.8125 -3.28125 C 1.421875 -2.296875 1.21875 -1.71875 1.21875 -1.21875 C 1.21875 -0.078125 2.203125 0.078125 2.796875 0.078125 C 3.046875 0.078125 3.390625 0.046875 3.75 -0.21875 C 3.46875 1 2.734375 1.65625 2.046875 1.65625 C 1.90625 1.65625 1.625 1.625 1.4375 1.515625 C 1.75 1.390625 1.90625 1.109375 1.90625 0.84375 C 1.90625 0.484375 1.625 0.390625 1.421875 0.390625 C 1.0625 0.390625 0.703125 0.703125 0.703125 1.140625 C 0.703125 1.65625 1.234375 2.015625 2.046875 2.015625 C 3.1875 2.015625 4.5 1.25 4.8125 0.015625 Z M 5.75 -3.75 "/>
|
||||
</g>
|
||||
<g id="glyph-1-2">
|
||||
<path d="M 4.421875 -4 C 3.875 -3.890625 3.8125 -3.40625 3.8125 -3.296875 C 3.8125 -3.078125 3.984375 -2.84375 4.3125 -2.84375 C 4.640625 -2.84375 5.03125 -3.125 5.03125 -3.640625 C 5.03125 -4.09375 4.671875 -4.5 4.046875 -4.5 C 3.5 -4.5 3.03125 -4.21875 2.734375 -3.90625 C 2.484375 -4.359375 1.921875 -4.5 1.5625 -4.5 C 1.1875 -4.5 0.921875 -4.296875 0.703125 -3.9375 C 0.453125 -3.546875 0.3125 -3 0.3125 -2.953125 C 0.3125 -2.8125 0.46875 -2.8125 0.5625 -2.8125 C 0.671875 -2.8125 0.703125 -2.8125 0.75 -2.859375 C 0.78125 -2.875 0.78125 -2.890625 0.84375 -3.140625 C 1.03125 -3.90625 1.25 -4.140625 1.515625 -4.140625 C 1.65625 -4.140625 1.734375 -4.046875 1.734375 -3.78125 C 1.734375 -3.609375 1.71875 -3.5 1.609375 -3.03125 C 1.546875 -2.859375 1.390625 -2.203125 1.328125 -1.953125 C 1.28125 -1.765625 1.171875 -1.3125 1.125 -1.140625 C 1.0625 -0.875 0.953125 -0.421875 0.953125 -0.359375 C 0.953125 -0.15625 1.109375 0.078125 1.40625 0.078125 C 1.609375 0.078125 1.953125 -0.046875 2.0625 -0.453125 C 2.078125 -0.484375 2.75 -3.1875 2.765625 -3.25 C 2.8125 -3.390625 2.8125 -3.40625 2.9375 -3.5625 C 3.171875 -3.859375 3.53125 -4.140625 4.03125 -4.140625 C 4.28125 -4.140625 4.390625 -4.03125 4.421875 -4 Z M 4.421875 -4 "/>
|
||||
</g>
|
||||
<g id="glyph-1-3">
|
||||
<path d="M 3.578125 -2.125 C 3.71875 -2.125 3.96875 -2.125 3.96875 -2.375 C 3.96875 -2.59375 3.765625 -2.59375 3.578125 -2.59375 L 1.875 -2.59375 C 2.046875 -3.203125 2.40625 -3.953125 3.59375 -3.953125 L 4.015625 -3.953125 C 4.15625 -3.953125 4.421875 -3.953125 4.421875 -4.203125 C 4.421875 -4.296875 4.375 -4.40625 4.21875 -4.421875 L 3.796875 -4.421875 C 3.265625 -4.421875 2.203125 -4.421875 1.34375 -3.640625 C 0.875 -3.21875 0.5 -2.5625 0.5 -1.78125 C 0.5 -0.421875 1.640625 0.078125 2.8125 0.078125 C 2.953125 0.078125 3.28125 0.078125 3.75 -0.09375 C 3.78125 -0.09375 4.34375 -0.3125 4.34375 -0.46875 C 4.34375 -0.578125 4.28125 -0.765625 4.15625 -0.765625 C 4.109375 -0.765625 4.09375 -0.765625 3.984375 -0.703125 C 3.390625 -0.34375 3.078125 -0.28125 2.84375 -0.28125 C 2.59375 -0.28125 1.65625 -0.328125 1.65625 -1.359375 C 1.65625 -1.625 1.703125 -1.875 1.765625 -2.125 Z M 3.578125 -2.125 "/>
|
||||
</g>
|
||||
<g id="glyph-1-4">
|
||||
<path d="M 4.265625 -3.953125 L 5.4375 -3.953125 C 5.625 -3.953125 5.796875 -3.953125 5.796875 -4.234375 C 5.796875 -4.421875 5.640625 -4.421875 5.46875 -4.421875 L 4.34375 -4.421875 L 4.671875 -6.21875 C 4.703125 -6.40625 4.703125 -6.421875 4.8125 -6.515625 C 4.9375 -6.625 5.046875 -6.625 5.09375 -6.625 C 5.234375 -6.625 5.328125 -6.609375 5.4375 -6.5625 C 5.203125 -6.4375 5.03125 -6.1875 5.03125 -5.90625 C 5.03125 -5.609375 5.265625 -5.453125 5.515625 -5.453125 C 5.921875 -5.453125 6.234375 -5.8125 6.234375 -6.1875 C 6.234375 -6.703125 5.71875 -6.984375 5.09375 -6.984375 C 4.625 -6.984375 4.078125 -6.796875 3.71875 -6.234375 C 3.5 -5.875 3.4375 -5.484375 3.25 -4.421875 L 2.265625 -4.421875 C 2.078125 -4.421875 1.90625 -4.421875 1.90625 -4.125 C 1.90625 -3.953125 2.078125 -3.953125 2.234375 -3.953125 L 3.15625 -3.953125 L 2.40625 0.28125 C 2.375 0.375 2.265625 1 2.21875 1.140625 C 2.203125 1.1875 2.046875 1.65625 1.71875 1.65625 C 1.53125 1.65625 1.453125 1.625 1.390625 1.59375 C 1.625 1.46875 1.828125 1.21875 1.828125 0.9375 C 1.828125 0.640625 1.578125 0.484375 1.328125 0.484375 C 0.921875 0.484375 0.609375 0.84375 0.609375 1.21875 C 0.609375 1.75 1.1875 2.015625 1.703125 2.015625 C 2.453125 2.015625 2.96875 1.28125 3.046875 1.140625 C 3.46875 0.484375 3.703125 -0.78125 3.734375 -0.953125 Z M 4.265625 -3.953125 "/>
|
||||
</g>
|
||||
<g id="glyph-1-5">
|
||||
<path d="M 5.859375 -4.1875 C 6.53125 -4.640625 8.34375 -5.9375 8.703125 -6.109375 C 8.921875 -6.234375 9.140625 -6.34375 9.640625 -6.359375 C 9.828125 -6.375 9.984375 -6.375 9.984375 -6.65625 C 9.984375 -6.734375 9.90625 -6.828125 9.796875 -6.828125 C 9.5625 -6.828125 9.265625 -6.796875 9 -6.796875 C 8.59375 -6.796875 8.171875 -6.828125 7.765625 -6.828125 C 7.6875 -6.828125 7.484375 -6.828125 7.484375 -6.546875 C 7.484375 -6.359375 7.65625 -6.359375 7.71875 -6.359375 C 7.796875 -6.359375 8.015625 -6.34375 8.1875 -6.296875 L 3.640625 -3.15625 L 4.421875 -6.3125 C 4.640625 -6.359375 5 -6.359375 5.109375 -6.359375 C 5.234375 -6.359375 5.4375 -6.359375 5.46875 -6.390625 C 5.578125 -6.453125 5.578125 -6.640625 5.578125 -6.65625 C 5.578125 -6.78125 5.484375 -6.828125 5.359375 -6.828125 C 5.109375 -6.828125 4.859375 -6.8125 4.609375 -6.8125 C 4.359375 -6.8125 4.109375 -6.796875 3.859375 -6.796875 C 3.609375 -6.796875 3.34375 -6.8125 3.09375 -6.8125 C 2.84375 -6.8125 2.5625 -6.828125 2.3125 -6.828125 C 2.21875 -6.828125 2.015625 -6.828125 2.015625 -6.546875 C 2.015625 -6.359375 2.15625 -6.359375 2.4375 -6.359375 C 2.640625 -6.359375 2.84375 -6.34375 3.046875 -6.34375 L 1.625 -0.671875 C 1.578125 -0.5 1.578125 -0.5 1.390625 -0.484375 C 1.21875 -0.46875 1.03125 -0.46875 0.859375 -0.46875 C 0.609375 -0.46875 0.59375 -0.46875 0.546875 -0.453125 C 0.421875 -0.375 0.421875 -0.21875 0.421875 -0.171875 C 0.421875 -0.15625 0.4375 0 0.640625 0 C 0.890625 0 1.15625 -0.015625 1.40625 -0.015625 C 1.65625 -0.015625 1.90625 -0.03125 2.15625 -0.03125 C 2.421875 -0.03125 2.671875 -0.015625 2.921875 -0.015625 C 3.1875 -0.015625 3.453125 0 3.703125 0 C 3.796875 0 3.875 0 3.9375 -0.0625 C 3.96875 -0.125 3.984375 -0.265625 3.984375 -0.28125 C 3.984375 -0.46875 3.859375 -0.46875 3.578125 -0.46875 C 3.375 -0.46875 3.1875 -0.484375 2.96875 -0.484375 L 3.5 -2.5625 L 4.734375 -3.40625 L 6.203125 -0.53125 C 6.015625 -0.46875 5.71875 -0.46875 5.671875 -0.46875 C 5.546875 -0.46875 5.484375 -0.46875 5.421875 -0.390625 C 5.390625 -0.34375 5.359375 -0.203125 5.359375 -0.171875 C 5.359375 -0.171875 5.359375 0 5.578125 0 C 5.90625 0 6.71875 -0.03125 7.046875 -0.03125 C 7.25 -0.03125 7.46875 -0.015625 7.6875 -0.015625 C 7.875 -0.015625 8.09375 0 8.28125 0 C 8.34375 0 8.546875 0 8.546875 -0.28125 C 8.546875 -0.46875 8.375 -0.46875 8.234375 -0.46875 C 7.765625 -0.46875 7.75 -0.5 7.671875 -0.671875 Z M 5.859375 -4.1875 "/>
|
||||
</g>
|
||||
<g id="glyph-2-0">
|
||||
<path d="M 5.46875 -1.734375 C 5.46875 -1.921875 5.296875 -1.921875 5.203125 -1.921875 L 1.015625 -1.921875 C 0.90625 -1.921875 0.75 -1.921875 0.75 -1.734375 C 0.75 -1.578125 0.921875 -1.578125 1.015625 -1.578125 L 5.203125 -1.578125 C 5.296875 -1.578125 5.46875 -1.578125 5.46875 -1.734375 Z M 5.46875 -1.734375 "/>
|
||||
</g>
|
||||
<g id="glyph-2-1">
|
||||
<path d="M 5.328125 -0.6875 C 5.328125 -0.734375 5.28125 -0.734375 5.234375 -0.734375 C 5.140625 -0.734375 4.84375 -0.625 4.703125 -0.421875 C 4.484375 -0.421875 4.21875 -0.421875 4.09375 -1.0625 L 3.890625 -2.484375 C 3.890625 -2.5 3.890625 -2.515625 3.921875 -2.53125 L 4.15625 -2.65625 C 6.234375 -3.796875 6.234375 -4.109375 6.234375 -4.34375 C 6.234375 -4.546875 6.125 -4.765625 5.84375 -4.765625 C 5.609375 -4.765625 5.28125 -4.515625 5.28125 -4.390625 C 5.28125 -4.34375 5.3125 -4.34375 5.359375 -4.328125 C 5.53125 -4.3125 5.59375 -4.15625 5.59375 -4.03125 C 5.59375 -3.875 5.59375 -3.796875 4.953125 -3.40625 C 4.8125 -3.3125 4.671875 -3.234375 3.859375 -2.78125 C 3.765625 -3.296875 3.703125 -3.859375 3.65625 -4.09375 C 3.515625 -4.671875 3.265625 -4.765625 2.96875 -4.765625 C 2.1875 -4.765625 1.78125 -4.25 1.78125 -4.078125 C 1.78125 -4.015625 1.828125 -4.015625 1.875 -4.015625 C 2 -4.015625 2.265625 -4.140625 2.40625 -4.328125 C 2.640625 -4.328125 2.875 -4.328125 3.015625 -3.765625 L 3.203125 -2.4375 C 2.796875 -2.234375 2.0625 -1.828125 1.640625 -1.578125 C 0.546875 -0.90625 0.484375 -0.625 0.484375 -0.40625 C 0.484375 -0.203125 0.59375 0 0.890625 0 C 1.09375 0 1.453125 -0.234375 1.453125 -0.375 C 1.453125 -0.421875 1.40625 -0.421875 1.359375 -0.421875 C 1.203125 -0.4375 1.140625 -0.578125 1.140625 -0.734375 C 1.140625 -0.890625 1.140625 -0.984375 2 -1.484375 L 3.234375 -2.171875 C 3.328125 -1.625 3.40625 -0.921875 3.4375 -0.78125 C 3.546875 -0.328125 3.65625 0 4.15625 0 C 4.90625 0 5.328125 -0.5 5.328125 -0.6875 Z M 5.328125 -0.6875 "/>
|
||||
</g>
|
||||
<g id="glyph-2-2">
|
||||
<path d="M 2.078125 -3.515625 C 2.078125 -3.734375 1.890625 -3.890625 1.671875 -3.890625 C 1.390625 -3.890625 1.328125 -3.671875 1.296875 -3.578125 L 0.375 -0.5625 L 0.328125 -0.4375 C 0.328125 -0.359375 0.546875 -0.28125 0.609375 -0.28125 C 0.65625 -0.28125 0.6875 -0.328125 0.703125 -0.390625 L 2.03125 -3.296875 C 2.0625 -3.359375 2.078125 -3.421875 2.078125 -3.515625 Z M 2.078125 -3.515625 "/>
|
||||
</g>
|
||||
<g id="glyph-3-0">
|
||||
<path d="M 3.296875 0 L 3.296875 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.578125 L 2.328125 -4.4375 C 2.328125 -4.625 2.328125 -4.625 2.125 -4.625 C 1.671875 -4.1875 1.046875 -4.1875 0.765625 -4.1875 L 0.765625 -3.9375 C 0.921875 -3.9375 1.390625 -3.9375 1.765625 -4.125 L 1.765625 -0.578125 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.296875 0 "/>
|
||||
</g>
|
||||
<g id="glyph-4-0">
|
||||
<path d="M 4.984375 -3.796875 C 4.984375 -3.5 4.859375 -3.0625 4.53125 -2.8125 C 4.25 -2.59375 3.8125 -2.484375 3.328125 -2.484375 L 2.4375 -2.484375 L 2.875 -4.265625 C 2.921875 -4.46875 2.9375 -4.484375 3.09375 -4.515625 L 3.546875 -4.515625 C 4.1875 -4.515625 4.984375 -4.515625 4.984375 -3.796875 Z M 5.921875 -0.671875 C 5.921875 -0.6875 5.90625 -0.765625 5.796875 -0.765625 C 5.703125 -0.765625 5.6875 -0.71875 5.671875 -0.640625 C 5.578125 -0.34375 5.3125 -0.0625 5.03125 -0.0625 C 4.84375 -0.0625 4.703125 -0.125 4.703125 -0.515625 C 4.703125 -0.6875 4.75 -1.046875 4.78125 -1.234375 C 4.8125 -1.421875 4.8125 -1.484375 4.8125 -1.5625 C 4.8125 -1.640625 4.8125 -1.875 4.609375 -2.078125 C 4.484375 -2.21875 4.296875 -2.3125 4.140625 -2.375 C 4.96875 -2.5625 5.703125 -3.0625 5.703125 -3.6875 C 5.703125 -4.28125 5 -4.765625 3.984375 -4.765625 L 1.84375 -4.765625 C 1.71875 -4.765625 1.625 -4.765625 1.625 -4.609375 C 1.625 -4.515625 1.703125 -4.515625 1.84375 -4.515625 C 1.84375 -4.515625 1.984375 -4.515625 2.109375 -4.5 C 2.265625 -4.484375 2.265625 -4.46875 2.265625 -4.390625 C 2.265625 -4.390625 2.265625 -4.34375 2.25 -4.25 L 1.3125 -0.546875 C 1.265625 -0.3125 1.25 -0.25 0.703125 -0.25 C 0.578125 -0.25 0.5 -0.25 0.5 -0.109375 C 0.5 -0.03125 0.546875 0 0.609375 0 C 0.734375 0 0.90625 -0.015625 1.03125 -0.015625 L 1.5 -0.03125 L 1.9375 -0.015625 C 2.09375 -0.015625 2.265625 0 2.40625 0 C 2.453125 0 2.5625 0 2.5625 -0.140625 C 2.5625 -0.25 2.484375 -0.25 2.328125 -0.25 C 2.21875 -0.25 2.1875 -0.25 2.0625 -0.265625 C 1.90625 -0.28125 1.90625 -0.296875 1.90625 -0.375 C 1.90625 -0.375 1.90625 -0.421875 1.9375 -0.515625 L 2.375 -2.28125 L 3.328125 -2.28125 C 3.921875 -2.28125 4.1875 -1.984375 4.1875 -1.65625 C 4.1875 -1.5625 4.125 -1.328125 4.078125 -1.171875 C 4 -0.84375 3.96875 -0.75 3.96875 -0.625 C 3.96875 -0.078125 4.484375 0.140625 5 0.140625 C 5.640625 0.140625 5.921875 -0.546875 5.921875 -0.671875 Z M 5.921875 -0.671875 "/>
|
||||
</g>
|
||||
<g id="glyph-4-1">
|
||||
<path d="M 6.21875 -2.9375 C 6.21875 -3.953125 5.515625 -4.765625 4.390625 -4.765625 L 1.84375 -4.765625 C 1.703125 -4.765625 1.625 -4.765625 1.625 -4.609375 C 1.625 -4.515625 1.703125 -4.515625 1.859375 -4.515625 C 1.96875 -4.515625 2 -4.515625 2.125 -4.5 C 2.265625 -4.484375 2.265625 -4.46875 2.265625 -4.390625 C 2.265625 -4.390625 2.265625 -4.34375 2.25 -4.25 L 1.3125 -0.546875 C 1.265625 -0.3125 1.25 -0.25 0.703125 -0.25 C 0.578125 -0.25 0.5 -0.25 0.5 -0.09375 C 0.5 0 0.578125 0 0.703125 0 L 3.1875 0 C 4.734375 0 6.21875 -1.421875 6.21875 -2.9375 Z M 5.5625 -3.171875 C 5.5625 -3.015625 5.484375 -1.8125 4.796875 -1.015625 C 4.515625 -0.703125 3.921875 -0.25 3.0625 -0.25 L 2.125 -0.25 C 1.90625 -0.25 1.890625 -0.265625 1.890625 -0.328125 C 1.890625 -0.328125 1.890625 -0.359375 1.921875 -0.46875 L 2.875 -4.265625 C 2.9375 -4.484375 2.9375 -4.515625 3.234375 -4.515625 L 4.125 -4.515625 C 4.90625 -4.515625 5.5625 -4.125 5.5625 -3.171875 Z M 5.5625 -3.171875 "/>
|
||||
</g>
|
||||
<g id="glyph-4-2">
|
||||
<path d="M 3.90625 -1 C 3.90625 -1.09375 3.8125 -1.09375 3.796875 -1.09375 C 3.6875 -1.09375 3.6875 -1.046875 3.65625 -0.96875 C 3.515625 -0.484375 3.09375 -0.125 2.703125 -0.125 C 2.421875 -0.125 2.28125 -0.3125 2.28125 -0.578125 C 2.28125 -0.765625 2.453125 -1.390625 2.640625 -2.171875 C 2.78125 -2.703125 3.09375 -2.875 3.328125 -2.875 C 3.328125 -2.875 3.546875 -2.875 3.703125 -2.78125 C 3.484375 -2.71875 3.390625 -2.515625 3.390625 -2.390625 C 3.390625 -2.25 3.515625 -2.140625 3.671875 -2.140625 C 3.828125 -2.140625 4.0625 -2.265625 4.0625 -2.5625 C 4.0625 -2.953125 3.609375 -3.078125 3.34375 -3.078125 C 2.984375 -3.078125 2.703125 -2.84375 2.5625 -2.578125 C 2.4375 -2.859375 2.109375 -3.078125 1.71875 -3.078125 C 0.9375 -3.078125 0.5 -2.21875 0.5 -2 C 0.5 -1.921875 0.59375 -1.921875 0.609375 -1.921875 C 0.703125 -1.921875 0.703125 -1.9375 0.75 -2.03125 C 0.921875 -2.578125 1.359375 -2.875 1.703125 -2.875 C 1.9375 -2.875 2.125 -2.75 2.125 -2.421875 C 2.125 -2.28125 2.03125 -1.9375 1.96875 -1.6875 L 1.734375 -0.734375 C 1.671875 -0.5 1.4375 -0.125 1.078125 -0.125 C 1.0625 -0.125 0.84375 -0.125 0.703125 -0.21875 C 0.984375 -0.3125 1.015625 -0.5625 1.015625 -0.609375 C 1.015625 -0.765625 0.890625 -0.859375 0.734375 -0.859375 C 0.53125 -0.859375 0.328125 -0.703125 0.328125 -0.4375 C 0.328125 -0.09375 0.71875 0.0625 1.0625 0.0625 C 1.390625 0.0625 1.671875 -0.125 1.84375 -0.421875 C 2.015625 -0.0625 2.390625 0.0625 2.671875 0.0625 C 3.484375 0.0625 3.90625 -0.796875 3.90625 -1 Z M 3.90625 -1 "/>
|
||||
</g>
|
||||
<g id="glyph-4-3">
|
||||
<path d="M 3.875 -2.625 C 3.90625 -2.71875 3.90625 -2.734375 3.90625 -2.78125 C 3.90625 -2.921875 3.796875 -3 3.671875 -3 C 3.59375 -3 3.46875 -2.96875 3.390625 -2.84375 C 3.359375 -2.796875 3.3125 -2.578125 3.28125 -2.4375 L 3.125 -1.859375 L 2.84375 -0.734375 C 2.84375 -0.734375 2.53125 -0.125 2 -0.125 C 1.515625 -0.125 1.515625 -0.578125 1.515625 -0.703125 C 1.515625 -1.078125 1.671875 -1.515625 1.890625 -2.0625 C 1.96875 -2.28125 2 -2.359375 2 -2.484375 C 2 -2.8125 1.71875 -3.078125 1.34375 -3.078125 C 0.640625 -3.078125 0.328125 -2.125 0.328125 -2 C 0.328125 -1.921875 0.421875 -1.921875 0.453125 -1.921875 C 0.546875 -1.921875 0.546875 -1.953125 0.578125 -2.03125 C 0.75 -2.609375 1.046875 -2.875 1.328125 -2.875 C 1.4375 -2.875 1.5 -2.796875 1.5 -2.640625 C 1.5 -2.46875 1.4375 -2.328125 1.40625 -2.234375 C 1.0625 -1.375 1 -1.125 1 -0.8125 C 1 -0.703125 1 -0.375 1.265625 -0.140625 C 1.484375 0.03125 1.78125 0.0625 1.96875 0.0625 C 2.25 0.0625 2.5 -0.03125 2.71875 -0.25 C 2.640625 0.140625 2.5625 0.4375 2.265625 0.78125 C 2.078125 1 1.796875 1.21875 1.421875 1.21875 C 1.375 1.21875 1.046875 1.21875 0.90625 1 C 1.28125 0.953125 1.28125 0.609375 1.28125 0.609375 C 1.28125 0.390625 1.078125 0.34375 1.015625 0.34375 C 0.84375 0.34375 0.609375 0.484375 0.609375 0.8125 C 0.609375 1.15625 0.9375 1.421875 1.4375 1.421875 C 2.140625 1.421875 3 0.875 3.21875 0 Z M 3.875 -2.625 "/>
|
||||
</g>
|
||||
<g id="glyph-4-4">
|
||||
<path d="M 3.46875 -1.015625 C 3.46875 -1.09375 3.390625 -1.09375 3.359375 -1.09375 C 3.265625 -1.09375 3.25 -1.0625 3.21875 -0.984375 C 3.09375 -0.640625 2.6875 -0.46875 2.34375 -0.46875 C 2.1875 -0.46875 2 -0.515625 1.828125 -0.546875 C 1.515625 -0.625 1.453125 -0.625 1.328125 -0.625 C 1.328125 -0.625 1.21875 -0.625 1.171875 -0.609375 C 1.359375 -0.796875 1.484375 -0.921875 2.0625 -1.40625 C 2.21875 -1.515625 2.734375 -1.9375 2.9375 -2.125 C 3.359375 -2.546875 3.625 -2.90625 3.625 -2.984375 C 3.625 -3.078125 3.546875 -3.078125 3.515625 -3.078125 C 3.453125 -3.078125 3.421875 -3.0625 3.390625 -3 C 3.171875 -2.6875 3.03125 -2.578125 2.859375 -2.578125 C 2.78125 -2.578125 2.671875 -2.578125 2.46875 -2.78125 C 2.234375 -3.03125 2.078125 -3.078125 1.921875 -3.078125 C 1.359375 -3.078125 0.984375 -2.46875 0.984375 -2.265625 C 0.984375 -2.1875 1.046875 -2.171875 1.09375 -2.171875 C 1.1875 -2.171875 1.203125 -2.1875 1.21875 -2.265625 C 1.328125 -2.515625 1.71875 -2.53125 1.828125 -2.53125 C 2 -2.53125 2.171875 -2.484375 2.265625 -2.46875 C 2.65625 -2.390625 2.703125 -2.390625 2.875 -2.390625 C 2.703125 -2.1875 2.578125 -2.0625 1.90625 -1.546875 C 1.359375 -1.109375 1.171875 -0.9375 1.046875 -0.796875 C 0.625 -0.390625 0.421875 -0.078125 0.421875 -0.015625 C 0.421875 0.0625 0.515625 0.0625 0.546875 0.0625 C 0.609375 0.0625 0.625 0.0625 0.65625 0 C 0.84375 -0.265625 1.0625 -0.421875 1.296875 -0.421875 C 1.390625 -0.421875 1.484375 -0.421875 1.671875 -0.25 C 1.890625 -0.03125 2.03125 0.0625 2.265625 0.0625 C 3 0.0625 3.46875 -0.78125 3.46875 -1.015625 Z M 3.46875 -1.015625 "/>
|
||||
</g>
|
||||
<g id="glyph-4-5">
|
||||
<path d="M 4.578125 -1 C 4.578125 -1.09375 4.5 -1.09375 4.46875 -1.09375 C 4.375 -1.09375 4.375 -1.046875 4.34375 -0.96875 C 4.1875 -0.40625 3.875 -0.125 3.609375 -0.125 C 3.453125 -0.125 3.421875 -0.21875 3.421875 -0.375 C 3.421875 -0.53125 3.46875 -0.625 3.59375 -0.9375 C 3.671875 -1.15625 3.953125 -1.890625 3.953125 -2.28125 C 3.953125 -2.953125 3.421875 -3.078125 3.046875 -3.078125 C 2.46875 -3.078125 2.078125 -2.71875 1.875 -2.4375 C 1.828125 -2.921875 1.421875 -3.078125 1.125 -3.078125 C 0.828125 -3.078125 0.671875 -2.859375 0.578125 -2.703125 C 0.421875 -2.4375 0.328125 -2.046875 0.328125 -2 C 0.328125 -1.921875 0.421875 -1.921875 0.453125 -1.921875 C 0.546875 -1.921875 0.546875 -1.9375 0.59375 -2.125 C 0.703125 -2.53125 0.84375 -2.875 1.109375 -2.875 C 1.296875 -2.875 1.34375 -2.71875 1.34375 -2.53125 C 1.34375 -2.40625 1.28125 -2.140625 1.21875 -1.953125 L 1.078125 -1.328125 L 0.84375 -0.4375 C 0.828125 -0.34375 0.78125 -0.171875 0.78125 -0.15625 C 0.78125 0 0.90625 0.0625 1.015625 0.0625 C 1.140625 0.0625 1.25 -0.015625 1.296875 -0.078125 C 1.328125 -0.140625 1.375 -0.375 1.421875 -0.515625 L 1.5625 -1.140625 C 1.609375 -1.296875 1.65625 -1.453125 1.6875 -1.609375 C 1.765625 -1.890625 1.78125 -1.953125 1.984375 -2.234375 C 2.171875 -2.515625 2.5 -2.875 3.03125 -2.875 C 3.421875 -2.875 3.4375 -2.515625 3.4375 -2.390625 C 3.4375 -1.96875 3.140625 -1.203125 3.03125 -0.90625 C 2.953125 -0.703125 2.921875 -0.640625 2.921875 -0.53125 C 2.921875 -0.15625 3.21875 0.0625 3.578125 0.0625 C 4.28125 0.0625 4.578125 -0.890625 4.578125 -1 Z M 4.578125 -1 "/>
|
||||
</g>
|
||||
<g id="glyph-5-0">
|
||||
<path d="M 2.984375 -0.734375 C 2.984375 -0.8125 2.90625 -0.8125 2.875 -0.8125 C 2.796875 -0.8125 2.796875 -0.78125 2.765625 -0.734375 C 2.65625 -0.421875 2.265625 -0.375 2.078125 -0.375 C 1.96875 -0.375 1.84375 -0.390625 1.6875 -0.40625 C 1.421875 -0.453125 1.328125 -0.453125 1.265625 -0.453125 C 1.1875 -0.453125 1.171875 -0.453125 1.140625 -0.453125 C 1.34375 -0.640625 1.59375 -0.828125 1.875 -1.03125 C 2.21875 -1.265625 2.421875 -1.4375 2.640625 -1.625 C 2.890625 -1.859375 3.0625 -2.078125 3.0625 -2.140625 C 3.0625 -2.203125 2.984375 -2.203125 2.953125 -2.203125 C 2.875 -2.203125 2.875 -2.203125 2.84375 -2.140625 C 2.640625 -1.875 2.53125 -1.859375 2.453125 -1.859375 C 2.375 -1.859375 2.296875 -1.875 2.140625 -1.984375 C 1.96875 -2.125 1.859375 -2.203125 1.671875 -2.203125 C 1.21875 -2.203125 0.921875 -1.765625 0.921875 -1.609375 C 0.921875 -1.53125 0.984375 -1.53125 1.03125 -1.53125 C 1.078125 -1.53125 1.109375 -1.546875 1.125 -1.59375 C 1.15625 -1.65625 1.203125 -1.78125 1.59375 -1.78125 C 1.734375 -1.78125 1.84375 -1.765625 2.109375 -1.71875 C 2.28125 -1.6875 2.34375 -1.6875 2.4375 -1.6875 C 2.28125 -1.5625 2.140625 -1.4375 1.765625 -1.15625 C 1.40625 -0.90625 1.1875 -0.75 0.953125 -0.53125 C 0.75 -0.359375 0.515625 -0.078125 0.515625 -0.015625 C 0.515625 0.0625 0.59375 0.0625 0.625 0.0625 C 0.6875 0.0625 0.703125 0.046875 0.734375 0.015625 C 0.875 -0.1875 1.0625 -0.296875 1.234375 -0.296875 C 1.375 -0.296875 1.4375 -0.234375 1.625 -0.09375 C 1.765625 0 1.875 0.0625 2.015625 0.0625 C 2.609375 0.0625 2.984375 -0.53125 2.984375 -0.734375 Z M 2.984375 -0.734375 "/>
|
||||
</g>
|
||||
<g id="glyph-5-1">
|
||||
<path d="M 3.296875 -1.859375 C 3.3125 -1.9375 3.3125 -1.96875 3.3125 -1.96875 C 3.3125 -2.078125 3.234375 -2.140625 3.140625 -2.140625 C 2.9375 -2.140625 2.890625 -1.96875 2.859375 -1.84375 L 2.75 -1.421875 L 2.609375 -0.796875 C 2.578125 -0.734375 2.5625 -0.640625 2.546875 -0.609375 C 2.546875 -0.578125 2.28125 -0.109375 1.859375 -0.109375 C 1.625 -0.109375 1.453125 -0.21875 1.453125 -0.546875 C 1.453125 -0.8125 1.59375 -1.1875 1.734375 -1.546875 C 1.765625 -1.59375 1.796875 -1.6875 1.796875 -1.765625 C 1.796875 -2.015625 1.5625 -2.203125 1.25 -2.203125 C 0.734375 -2.203125 0.453125 -1.5625 0.453125 -1.4375 C 0.453125 -1.359375 0.53125 -1.359375 0.5625 -1.359375 C 0.640625 -1.359375 0.640625 -1.390625 0.671875 -1.453125 C 0.78125 -1.796875 1.015625 -2.03125 1.234375 -2.03125 C 1.328125 -2.03125 1.390625 -1.984375 1.390625 -1.84375 C 1.390625 -1.75 1.359375 -1.671875 1.328125 -1.578125 C 1.078125 -0.984375 1.03125 -0.8125 1.03125 -0.609375 C 1.03125 -0.0625 1.5 0.0625 1.828125 0.0625 C 2.109375 0.0625 2.328125 -0.078125 2.453125 -0.1875 C 2.375 0.09375 2.328125 0.3125 2.09375 0.546875 C 1.96875 0.65625 1.734375 0.859375 1.4375 0.859375 C 1.34375 0.859375 1.15625 0.84375 1.046875 0.734375 C 1.265625 0.671875 1.296875 0.484375 1.296875 0.4375 C 1.296875 0.296875 1.171875 0.234375 1.078125 0.234375 C 0.921875 0.234375 0.75 0.34375 0.75 0.578125 C 0.75 0.828125 1.015625 1.015625 1.4375 1.015625 C 2 1.015625 2.671875 0.640625 2.828125 0 Z M 3.296875 -1.859375 "/>
|
||||
</g>
|
||||
<g id="glyph-6-0">
|
||||
<path d="M 11.578125 -4.28125 C 11.578125 -4.59375 11.296875 -4.59375 11.046875 -4.59375 L 6.484375 -4.59375 L 6.484375 -9.15625 C 6.484375 -9.390625 6.484375 -9.6875 6.1875 -9.6875 C 5.890625 -9.6875 5.890625 -9.40625 5.890625 -9.15625 L 5.890625 -4.59375 L 1.328125 -4.59375 C 1.078125 -4.59375 0.796875 -4.59375 0.796875 -4.296875 C 0.796875 -3.984375 1.0625 -3.984375 1.328125 -3.984375 L 5.890625 -3.984375 L 5.890625 0.5625 C 5.890625 0.8125 5.890625 1.09375 6.171875 1.09375 C 6.484375 1.09375 6.484375 0.828125 6.484375 0.5625 L 6.484375 -3.984375 L 11.046875 -3.984375 C 11.28125 -3.984375 11.578125 -3.984375 11.578125 -4.28125 Z M 11.578125 -4.28125 "/>
|
||||
</g>
|
||||
<g id="glyph-7-0">
|
||||
<path d="M 4.34375 -3.75 C 4.34375 -4.09375 4.015625 -4.40625 3.515625 -4.40625 C 2.859375 -4.40625 2.421875 -3.90625 2.234375 -3.640625 C 2.15625 -4.078125 1.796875 -4.40625 1.328125 -4.40625 C 0.875 -4.40625 0.6875 -4.015625 0.59375 -3.828125 C 0.421875 -3.5 0.28125 -2.890625 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.578125 -3 C 0.75 -3.703125 0.953125 -4.1875 1.296875 -4.1875 C 1.46875 -4.1875 1.609375 -4.09375 1.609375 -3.71875 C 1.609375 -3.515625 1.578125 -3.40625 1.453125 -2.890625 L 0.875 -0.59375 C 0.84375 -0.4375 0.78125 -0.203125 0.78125 -0.15625 C 0.78125 0.015625 0.921875 0.109375 1.078125 0.109375 C 1.1875 0.109375 1.375 0.03125 1.4375 -0.171875 C 1.46875 -0.203125 1.796875 -1.5625 1.84375 -1.734375 L 2.15625 -3.03125 C 2.203125 -3.171875 2.484375 -3.640625 2.71875 -3.859375 C 2.796875 -3.921875 3.078125 -4.1875 3.515625 -4.1875 C 3.765625 -4.1875 3.9375 -4.0625 3.9375 -4.0625 C 3.640625 -4.015625 3.40625 -3.765625 3.40625 -3.515625 C 3.40625 -3.359375 3.515625 -3.171875 3.796875 -3.171875 C 4.0625 -3.171875 4.34375 -3.390625 4.34375 -3.75 Z M 4.34375 -3.75 "/>
|
||||
</g>
|
||||
<g id="glyph-7-1">
|
||||
<path d="M 8 -4.28125 C 8 -5.6875 7.15625 -6.796875 5.65625 -6.796875 L 2.3125 -6.796875 C 2.125 -6.796875 2.015625 -6.796875 2.015625 -6.609375 C 2.015625 -6.484375 2.109375 -6.484375 2.3125 -6.484375 C 2.4375 -6.484375 2.625 -6.484375 2.734375 -6.46875 C 2.890625 -6.453125 2.953125 -6.421875 2.953125 -6.3125 C 2.953125 -6.265625 2.953125 -6.234375 2.921875 -6.125 L 1.578125 -0.78125 C 1.484375 -0.390625 1.46875 -0.3125 0.671875 -0.3125 C 0.5 -0.3125 0.390625 -0.3125 0.390625 -0.125 C 0.390625 0 0.484375 0 0.671875 0 L 3.96875 0 C 6.046875 0 8 -2.09375 8 -4.28125 Z M 7.140625 -4.640625 C 7.140625 -4.15625 6.9375 -2.53125 6.09375 -1.4375 C 5.796875 -1.0625 5.015625 -0.3125 3.796875 -0.3125 L 2.671875 -0.3125 C 2.53125 -0.3125 2.515625 -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.734375 -6.109375 C 3.828125 -6.453125 3.84375 -6.484375 4.265625 -6.484375 L 5.328125 -6.484375 C 6.3125 -6.484375 7.140625 -5.96875 7.140625 -4.640625 Z M 7.140625 -4.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-7-2">
|
||||
<path d="M 2.015625 -0.015625 C 2.015625 -0.671875 1.765625 -1.0625 1.390625 -1.0625 C 1.0625 -1.0625 0.859375 -0.8125 0.859375 -0.53125 C 0.859375 -0.265625 1.0625 0 1.390625 0 C 1.5 0 1.625 -0.046875 1.734375 -0.125 C 1.765625 -0.15625 1.78125 -0.15625 1.78125 -0.15625 C 1.78125 -0.15625 1.796875 -0.15625 1.796875 -0.015625 C 1.796875 0.734375 1.453125 1.328125 1.125 1.65625 C 1.015625 1.765625 1.015625 1.78125 1.015625 1.8125 C 1.015625 1.875 1.0625 1.921875 1.109375 1.921875 C 1.21875 1.921875 2.015625 1.15625 2.015625 -0.015625 Z M 2.015625 -0.015625 "/>
|
||||
</g>
|
||||
<g id="glyph-7-3">
|
||||
<path d="M 6.421875 -5.5 C 6.421875 -5.171875 6.265625 -4.484375 5.875 -4.09375 C 5.625 -3.828125 5.09375 -3.515625 4.203125 -3.515625 L 3.078125 -3.515625 L 3.734375 -6.109375 C 3.796875 -6.34375 3.828125 -6.453125 4.015625 -6.484375 C 4.09375 -6.484375 4.421875 -6.484375 4.625 -6.484375 C 5.328125 -6.484375 6.421875 -6.484375 6.421875 -5.5 Z M 7.515625 -0.921875 C 7.515625 -1.046875 7.390625 -1.046875 7.390625 -1.046875 C 7.3125 -1.046875 7.28125 -0.96875 7.265625 -0.90625 C 7.015625 -0.171875 6.59375 0 6.359375 0 C 6.03125 0 5.96875 -0.21875 5.96875 -0.609375 C 5.96875 -0.921875 6.015625 -1.421875 6.0625 -1.734375 C 6.078125 -1.875 6.09375 -2.0625 6.09375 -2.203125 C 6.09375 -2.96875 5.4375 -3.28125 5.171875 -3.390625 C 6.171875 -3.609375 7.359375 -4.296875 7.359375 -5.3125 C 7.359375 -6.15625 6.453125 -6.796875 5.15625 -6.796875 L 2.3125 -6.796875 C 2.125 -6.796875 2.03125 -6.796875 2.03125 -6.59375 C 2.03125 -6.484375 2.125 -6.484375 2.3125 -6.484375 C 2.3125 -6.484375 2.515625 -6.484375 2.6875 -6.46875 C 2.859375 -6.453125 2.953125 -6.4375 2.953125 -6.3125 C 2.953125 -6.265625 2.953125 -6.234375 2.921875 -6.125 L 1.578125 -0.78125 C 1.484375 -0.390625 1.46875 -0.3125 0.671875 -0.3125 C 0.5 -0.3125 0.40625 -0.3125 0.40625 -0.109375 C 0.40625 0 0.546875 0 0.546875 0 L 1.796875 -0.03125 L 3.0625 0 C 3.140625 0 3.265625 0 3.265625 -0.203125 C 3.265625 -0.3125 3.171875 -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.359375 -0.59375 2.375 -0.65625 L 3.03125 -3.296875 L 4.203125 -3.296875 C 5.109375 -3.296875 5.296875 -2.734375 5.296875 -2.390625 C 5.296875 -2.234375 5.21875 -1.9375 5.15625 -1.703125 C 5.09375 -1.421875 5 -1.0625 5 -0.859375 C 5 0.21875 6.1875 0.21875 6.3125 0.21875 C 7.171875 0.21875 7.515625 -0.78125 7.515625 -0.921875 Z M 7.515625 -0.921875 "/>
|
||||
</g>
|
||||
<g id="glyph-8-0">
|
||||
<path d="M 2.53125 2.484375 L 2.53125 2.09375 L 1.578125 2.09375 L 1.578125 -7.0625 L 2.53125 -7.0625 L 2.53125 -7.46875 L 1.171875 -7.46875 L 1.171875 2.484375 Z M 2.53125 2.484375 "/>
|
||||
</g>
|
||||
<g id="glyph-8-1">
|
||||
<path d="M 1.578125 2.484375 L 1.578125 -7.46875 L 0.21875 -7.46875 L 0.21875 -7.0625 L 1.1875 -7.0625 L 1.1875 2.09375 L 0.21875 2.09375 L 0.21875 2.484375 Z M 1.578125 2.484375 "/>
|
||||
</g>
|
||||
<g id="glyph-9-0">
|
||||
<path d="M 7.46875 -1.546875 C 7.46875 -1.65625 7.34375 -1.65625 7.3125 -1.65625 C 7 -1.65625 6.125 -1.265625 6.015625 -0.75 C 5.53125 -0.75 5.1875 -0.8125 4.390625 -0.953125 C 4.015625 -1.03125 3.234375 -1.171875 2.671875 -1.171875 C 2.59375 -1.171875 2.484375 -1.171875 2.40625 -1.171875 C 2.734375 -1.71875 2.859375 -2.1875 3.03125 -2.84375 C 3.21875 -3.640625 3.625 -5.03125 4.375 -5.875 C 4.515625 -6.015625 4.546875 -6.078125 4.8125 -6.078125 C 5.265625 -6.078125 5.4375 -5.71875 5.4375 -5.390625 C 5.4375 -5.28125 5.421875 -5.171875 5.421875 -5.125 C 5.421875 -5.015625 5.53125 -5 5.578125 -5 C 5.71875 -5 6.015625 -5.078125 6.40625 -5.328125 C 6.8125 -5.609375 6.859375 -5.78125 6.859375 -6.078125 C 6.859375 -6.578125 6.5625 -7 5.890625 -7 C 5.265625 -7 4.359375 -6.6875 3.546875 -5.96875 C 2.40625 -4.96875 1.90625 -3.328125 1.609375 -2.1875 C 1.46875 -1.59375 1.25 -0.78125 0.828125 -0.453125 C 0.734375 -0.375 0.390625 -0.109375 0.390625 0.046875 C 0.390625 0.15625 0.5 0.171875 0.5625 0.171875 C 0.640625 0.171875 0.953125 0.15625 1.5 -0.25 C 1.875 -0.25 2.203125 -0.234375 3.109375 -0.0625 C 3.5625 0.03125 4.296875 0.171875 4.859375 0.171875 C 6.1875 0.171875 7.46875 -1 7.46875 -1.546875 Z M 7.46875 -1.546875 "/>
|
||||
</g>
|
||||
<g id="glyph-9-1">
|
||||
<path d="M 7.75 -1.0625 C 7.75 -1.171875 7.640625 -1.1875 7.5625 -1.1875 C 7.40625 -1.1875 7.0625 -1.078125 6.78125 -0.859375 C 6.390625 -0.859375 6.078125 -0.859375 5.90625 -2.09375 L 5.75 -3.640625 C 8.375 -5.0625 9.03125 -5.71875 9.03125 -6.25 C 9.03125 -6.65625 8.65625 -6.828125 8.359375 -6.828125 C 7.90625 -6.828125 7.21875 -6.34375 7.21875 -6.09375 C 7.21875 -6.046875 7.25 -5.96875 7.390625 -5.96875 C 7.71875 -5.9375 7.734375 -5.6875 7.734375 -5.625 C 7.734375 -5.515625 7.6875 -5.453125 7.46875 -5.28125 C 7.046875 -4.96875 6.34375 -4.5625 5.6875 -4.203125 C 5.546875 -5.109375 5.546875 -5.59375 5.421875 -6.046875 C 5.203125 -6.828125 4.671875 -6.828125 4.375 -6.828125 C 3.015625 -6.828125 2.421875 -6.015625 2.421875 -5.765625 C 2.421875 -5.65625 2.53125 -5.640625 2.59375 -5.640625 C 2.59375 -5.640625 2.9375 -5.640625 3.375 -5.96875 C 3.6875 -5.96875 4.078125 -5.96875 4.203125 -4.984375 L 4.390625 -3.5 C 3.71875 -3.125 2.796875 -2.625 2.0625 -2.15625 C 1.609375 -1.859375 0.5625 -1.1875 0.5625 -0.578125 C 0.5625 -0.171875 0.90625 0 1.21875 0 C 1.65625 0 2.34375 -0.484375 2.34375 -0.734375 C 2.34375 -0.84375 2.234375 -0.859375 2.15625 -0.859375 C 1.984375 -0.890625 1.84375 -1.03125 1.84375 -1.203125 C 1.84375 -1.328125 1.890625 -1.375 2.15625 -1.578125 C 2.640625 -1.921875 3.390625 -2.34375 4.453125 -2.921875 C 4.65625 -1.125 4.671875 -1 4.703125 -0.890625 C 4.9375 0 5.46875 0 5.796875 0 C 7.171875 0 7.75 -0.828125 7.75 -1.0625 Z M 7.75 -1.0625 "/>
|
||||
</g>
|
||||
<g id="glyph-10-0">
|
||||
<path d="M 2.515625 0 L 2.515625 -0.25 L 2.34375 -0.25 C 1.765625 -0.25 1.765625 -0.328125 1.765625 -0.578125 L 1.765625 -4.1875 C 1.765625 -4.421875 1.765625 -4.515625 2.34375 -4.515625 L 2.515625 -4.515625 L 2.515625 -4.765625 L 1.4375 -4.734375 L 0.359375 -4.765625 L 0.359375 -4.515625 L 0.53125 -4.515625 C 1.109375 -4.515625 1.109375 -4.421875 1.109375 -4.1875 L 1.109375 -0.578125 C 1.109375 -0.328125 1.109375 -0.25 0.53125 -0.25 L 0.359375 -0.25 L 0.359375 0 L 1.4375 -0.03125 Z M 2.515625 0 "/>
|
||||
</g>
|
||||
<g id="glyph-10-1">
|
||||
<path d="M 4.75 -3.125 L 4.546875 -4.734375 L 0.390625 -4.734375 L 0.390625 -4.484375 L 0.5625 -4.484375 C 1.09375 -4.484375 1.109375 -4.40625 1.109375 -4.171875 L 1.109375 -0.5625 C 1.109375 -0.328125 1.09375 -0.25 0.5625 -0.25 L 0.390625 -0.25 L 0.390625 0 L 1.453125 -0.03125 L 2.671875 0 L 2.671875 -0.25 L 2.421875 -0.25 C 1.765625 -0.25 1.765625 -0.34375 1.765625 -0.578125 L 1.765625 -2.25 L 2.453125 -2.25 C 3.140625 -2.25 3.234375 -2.03125 3.234375 -1.421875 L 3.484375 -1.421875 L 3.484375 -3.3125 L 3.234375 -3.3125 C 3.234375 -2.703125 3.140625 -2.5 2.453125 -2.5 L 1.765625 -2.5 L 1.765625 -4.203125 C 1.765625 -4.421875 1.78125 -4.484375 2.109375 -4.484375 L 3.078125 -4.484375 C 4.203125 -4.484375 4.390625 -4.109375 4.515625 -3.125 Z M 4.75 -3.125 "/>
|
||||
</g>
|
||||
<g id="glyph-10-2">
|
||||
<path d="M 5.484375 0 L 5.484375 -0.25 L 5.3125 -0.25 C 4.78125 -0.25 4.765625 -0.328125 4.765625 -0.5625 L 4.765625 -4.1875 C 4.765625 -4.4375 4.78125 -4.515625 5.3125 -4.515625 L 5.484375 -4.515625 L 5.484375 -4.765625 L 4.4375 -4.734375 L 3.375 -4.765625 L 3.375 -4.515625 L 3.546875 -4.515625 C 4.078125 -4.515625 4.09375 -4.4375 4.09375 -4.1875 L 4.09375 -2.59375 L 1.765625 -2.59375 L 1.765625 -4.1875 C 1.765625 -4.4375 1.78125 -4.515625 2.328125 -4.515625 L 2.484375 -4.515625 L 2.484375 -4.765625 L 1.4375 -4.734375 L 0.390625 -4.765625 L 0.390625 -4.515625 L 0.5625 -4.515625 C 1.09375 -4.515625 1.109375 -4.4375 1.109375 -4.1875 L 1.109375 -0.5625 C 1.109375 -0.328125 1.09375 -0.25 0.5625 -0.25 L 0.390625 -0.25 L 0.390625 0 L 1.4375 -0.03125 L 2.484375 0 L 2.484375 -0.25 L 2.328125 -0.25 C 1.78125 -0.25 1.765625 -0.328125 1.765625 -0.5625 L 1.765625 -2.34375 L 4.09375 -2.34375 L 4.09375 -0.5625 C 4.09375 -0.328125 4.078125 -0.25 3.546875 -0.25 L 3.375 -0.25 L 3.375 0 L 4.421875 -0.03125 Z M 5.484375 0 "/>
|
||||
</g>
|
||||
<g id="glyph-10-3">
|
||||
<path d="M 5.546875 0 L 5.546875 -0.25 L 5.421875 -0.25 C 4.953125 -0.25 4.90625 -0.328125 4.828125 -0.515625 L 3.125 -4.8125 C 3.09375 -4.921875 3.0625 -4.96875 2.9375 -4.96875 C 2.796875 -4.96875 2.78125 -4.921875 2.734375 -4.8125 L 1.125 -0.734375 C 1.0625 -0.5625 0.9375 -0.25 0.3125 -0.25 L 0.3125 0 C 0.546875 -0.015625 0.796875 -0.03125 1.03125 -0.03125 C 1.3125 -0.03125 1.828125 0 1.875 0 L 1.875 -0.25 C 1.5625 -0.25 1.359375 -0.390625 1.359375 -0.578125 C 1.359375 -0.640625 1.375 -0.65625 1.40625 -0.71875 L 1.734375 -1.578125 L 3.71875 -1.578125 L 4.125 -0.5625 C 4.125 -0.53125 4.15625 -0.484375 4.15625 -0.453125 C 4.15625 -0.25 3.78125 -0.25 3.59375 -0.25 L 3.59375 0 L 4.625 -0.03125 C 4.953125 -0.03125 5.484375 0 5.546875 0 Z M 3.609375 -1.828125 L 1.828125 -1.828125 L 2.71875 -4.09375 Z M 3.609375 -1.828125 "/>
|
||||
</g>
|
||||
<g id="glyph-10-4">
|
||||
<path d="M 5.1875 -1.625 C 5.1875 -1.703125 5.171875 -1.765625 5.0625 -1.765625 C 5.03125 -1.765625 4.953125 -1.765625 4.953125 -1.671875 C 4.890625 -0.546875 3.9375 -0.109375 3.25 -0.109375 C 2.515625 -0.109375 1.234375 -0.5625 1.234375 -2.375 C 1.234375 -4.265625 2.578125 -4.640625 3.234375 -4.640625 C 3.9375 -4.640625 4.75 -4.1875 4.9375 -2.984375 C 4.953125 -2.90625 5.015625 -2.90625 5.0625 -2.90625 C 5.1875 -2.90625 5.1875 -2.953125 5.1875 -3.09375 L 5.1875 -4.71875 C 5.1875 -4.84375 5.1875 -4.90625 5.09375 -4.90625 C 5.0625 -4.90625 5.03125 -4.90625 4.96875 -4.8125 L 4.59375 -4.28125 C 4.3125 -4.578125 3.828125 -4.90625 3.15625 -4.90625 C 1.6875 -4.90625 0.484375 -3.765625 0.484375 -2.390625 C 0.484375 -0.96875 1.71875 0.140625 3.15625 0.140625 C 4.390625 0.140625 5.1875 -0.78125 5.1875 -1.625 Z M 5.1875 -1.625 "/>
|
||||
</g>
|
||||
</g>
|
||||
<clipPath id="clip-0">
|
||||
<path clip-rule="nonzero" d="M 467 143 L 488.824219 143 L 488.824219 175 L 467 175 Z M 467 143 "/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-1">
|
||||
<path clip-rule="nonzero" d="M 0.140625 104 L 477 104 L 477 202.753906 L 0.140625 202.753906 Z M 0.140625 104 "/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-2">
|
||||
<path clip-rule="nonzero" d="M 0.140625 89 L 26 89 L 26 122 L 0.140625 122 Z M 0.140625 89 "/>
|
||||
</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-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -47.003186 -132.620484 L 299.442811 -132.620484 L 299.442811 18.655515 L -47.003186 18.655515 Z M -47.003186 -132.620484 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="413.852984" y="50.645045"/>
|
||||
<use xlink:href="#glyph-0-1" x="420.629388" y="50.645045"/>
|
||||
<use xlink:href="#glyph-0-2" x="423.395308" y="50.645045"/>
|
||||
<use xlink:href="#glyph-0-3" x="428.373565" y="50.645045"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-4" x="433.626622" y="50.645045"/>
|
||||
</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-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -75.434616 -137.103691 L 327.792159 -137.103691 L 327.792159 58.152297 L -75.434616 58.152297 Z M -75.434616 -137.103691 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="402.218096" y="11.17417"/>
|
||||
<use xlink:href="#glyph-0-2" x="409.823877" y="11.17417"/>
|
||||
<use xlink:href="#glyph-0-6" x="414.802134" y="11.17417"/>
|
||||
<use xlink:href="#glyph-0-7" x="423.098898" y="11.17417"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-8" x="428.90952" y="11.17417"/>
|
||||
<use xlink:href="#glyph-0-9" x="433.33519" y="11.17417"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="442.182549" y="11.17417"/>
|
||||
<use xlink:href="#glyph-0-1" x="448.958953" y="11.17417"/>
|
||||
<use xlink:href="#glyph-0-2" x="451.724873" y="11.17417"/>
|
||||
<use xlink:href="#glyph-0-3" x="456.70313" y="11.17417"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-4" x="461.956187" y="11.17417"/>
|
||||
</g>
|
||||
<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-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -47.003186 -132.620484 L 299.442811 -132.620484 L 299.442811 18.655515 L -47.003186 18.655515 Z M -47.003186 -132.620484 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="413.852984" y="50.645045"/>
|
||||
<use xlink:href="#glyph-0-1" x="420.629388" y="50.645045"/>
|
||||
<use xlink:href="#glyph-0-2" x="423.395308" y="50.645045"/>
|
||||
<use xlink:href="#glyph-0-3" x="428.373565" y="50.645045"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-4" x="433.626622" y="50.645045"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(79.998779%, 88.941956%, 94.822693%)" 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 -28.347259 -14.173132 L 28.347528 -14.173132 L 28.347528 14.172308 L -28.347259 14.172308 Z M -28.347259 -14.173132 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="119.420944" y="61.574365"/>
|
||||
<use xlink:href="#glyph-0-8" x="128.548081" y="61.574365"/>
|
||||
<use xlink:href="#glyph-0-4" x="132.973752" y="61.574365"/>
|
||||
<use xlink:href="#glyph-0-11" x="136.84584" y="61.574365"/>
|
||||
<use xlink:href="#glyph-0-12" x="140.745807" y="61.574365"/>
|
||||
<use xlink:href="#glyph-0-1" x="145.724064" y="61.574365"/>
|
||||
<use xlink:href="#glyph-0-12" x="148.489984" y="61.574365"/>
|
||||
<use xlink:href="#glyph-0-13" x="153.468241" y="61.574365"/>
|
||||
<use xlink:href="#glyph-0-14" x="158.446499" y="61.574365"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(79.998779%, 88.941956%, 94.822693%)" 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 -28.347259 -74.698384 L 28.347528 -74.698384 L 28.347528 -18.003596 L -28.347259 -18.003596 Z M -28.347259 -74.698384 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="130.083427" y="101.922704"/>
|
||||
<use xlink:href="#glyph-0-2" x="137.550813" y="101.922704"/>
|
||||
<use xlink:href="#glyph-0-3" x="142.529071" y="101.922704"/>
|
||||
<use xlink:href="#glyph-0-12" x="148.06091" y="101.922704"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-16" x="122.200246" y="113.871401"/>
|
||||
<use xlink:href="#glyph-0-8" x="129.667632" y="113.871401"/>
|
||||
<use xlink:href="#glyph-0-17" x="134.093302" y="113.871401"/>
|
||||
<use xlink:href="#glyph-0-2" x="139.348351" y="113.871401"/>
|
||||
<use xlink:href="#glyph-0-7" x="144.326608" y="113.871401"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-12" x="150.13723" y="113.871401"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="155.394269" y="113.871401"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(79.998779%, 88.941956%, 94.822693%)" 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 -42.519979 -121.050917 L 42.520248 -121.050917 L 42.520248 -78.528849 L -42.519979 -78.528849 Z M -42.519979 -121.050917 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="128.963112" y="156.295471"/>
|
||||
<use xlink:href="#glyph-0-18" x="138.090249" y="156.295471"/>
|
||||
<use xlink:href="#glyph-0-19" x="140.856169" y="156.295471"/>
|
||||
<use xlink:href="#glyph-0-11" x="145.281839" y="156.295471"/>
|
||||
<use xlink:href="#glyph-0-12" x="149.181806" y="156.295471"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-20" x="125.796048" y="168.243168"/>
|
||||
<use xlink:href="#glyph-0-4" x="131.327887" y="168.243168"/>
|
||||
<use xlink:href="#glyph-0-2" x="135.199976" y="168.243168"/>
|
||||
<use xlink:href="#glyph-0-4" x="140.178233" y="168.243168"/>
|
||||
<use xlink:href="#glyph-0-18" x="144.050322" y="168.243168"/>
|
||||
<use xlink:href="#glyph-0-12" x="146.816241" y="168.243168"/>
|
||||
<use xlink:href="#glyph-0-3" x="151.794499" y="168.243168"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(97.019958%, 86.431885%, 81.881714%)" 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 43.51695 -48.987366 L 71.86239 -48.987366 L 71.86239 -20.641927 L 43.51695 -20.641927 Z M 43.51695 -48.987366 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-0" x="190.225668" y="96.319129"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-2-0" x="197.513214" y="92.059732"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-3-0" x="203.73641" y="92.059732"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-0" x="196.510826" y="99.24534"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-5-0" x="202.50916" y="100.240732"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(97.019958%, 86.431885%, 81.881714%)" 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 105.879262 -128.137276 L 162.57405 -128.137276 L 162.57405 -71.442489 L 105.879262 -71.442489 Z M 105.879262 -128.137276 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-21" x="255.790594" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-12" x="262.981189" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-6" x="267.959446" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-7" x="276.256209" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-22" x="281.788049" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-4" x="287.319888" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-8" x="291.191977" y="150.322121"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="254.739236" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-8" x="262.068227" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-24" x="266.493897" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-8" x="269.536608" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-11" x="273.962279" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-8" x="277.862246" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-3" x="282.287916" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-19" x="287.819756" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-8" x="292.245426" y="162.269819"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="258.044216" y="174.217516"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-12" x="264.541838" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-25" x="269.520095" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-18" x="273.44794" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-4" x="276.21386" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-18" x="280.085948" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-12" x="282.851868" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-3" x="287.830125" y="174.217516"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(97.019958%, 86.431885%, 81.881714%)" 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 186.248668 -128.137276 L 242.939546 -128.137276 L 242.939546 -71.442489 L 186.248668 -71.442489 Z M 186.248668 -128.137276 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-21" x="336.107503" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-12" x="343.298098" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-6" x="348.276355" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-7" x="356.573119" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-22" x="362.104958" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-4" x="367.636798" y="150.322121"/>
|
||||
<use xlink:href="#glyph-0-8" x="371.508886" y="150.322121"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="344.2935" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-11" x="351.069904" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-11" x="354.96987" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-12" x="358.869837" y="162.269819"/>
|
||||
<use xlink:href="#glyph-0-11" x="363.848094" y="162.269819"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="338.361126" y="174.217516"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-12" x="344.858747" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-25" x="349.837004" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-18" x="353.764849" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-4" x="356.530769" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-18" x="360.402858" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-12" x="363.168777" y="174.217516"/>
|
||||
<use xlink:href="#glyph-0-3" x="368.147035" y="174.217516"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(97.019958%, 86.431885%, 81.881714%)" 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 186.248668 -47.767871 L 242.939546 -47.767871 L 242.939546 8.923008 L 186.248668 8.923008 Z M 186.248668 -47.767871 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-21" x="336.107503" y="70.004213"/>
|
||||
<use xlink:href="#glyph-0-12" x="343.298098" y="70.004213"/>
|
||||
<use xlink:href="#glyph-0-6" x="348.276355" y="70.004213"/>
|
||||
<use xlink:href="#glyph-0-7" x="356.573119" y="70.004213"/>
|
||||
<use xlink:href="#glyph-0-22" x="362.104958" y="70.004213"/>
|
||||
<use xlink:href="#glyph-0-4" x="367.636798" y="70.004213"/>
|
||||
<use xlink:href="#glyph-0-8" x="371.508886" y="70.004213"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-20" x="340.255968" y="81.95191"/>
|
||||
<use xlink:href="#glyph-0-2" x="345.787807" y="81.95191"/>
|
||||
<use xlink:href="#glyph-0-6" x="350.766064" y="81.95191"/>
|
||||
<use xlink:href="#glyph-0-7" x="359.062828" y="81.95191"/>
|
||||
<use xlink:href="#glyph-0-1" x="364.594667" y="81.95191"/>
|
||||
<use xlink:href="#glyph-0-8" x="367.360587" y="81.95191"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="338.361126" y="93.900607"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-12" x="344.858747" y="93.900607"/>
|
||||
<use xlink:href="#glyph-0-25" x="349.837004" y="93.900607"/>
|
||||
<use xlink:href="#glyph-0-18" x="353.764849" y="93.900607"/>
|
||||
<use xlink:href="#glyph-0-4" x="356.530769" y="93.900607"/>
|
||||
<use xlink:href="#glyph-0-18" x="360.402858" y="93.900607"/>
|
||||
<use xlink:href="#glyph-0-12" x="363.168777" y="93.900607"/>
|
||||
<use xlink:href="#glyph-0-3" x="368.147035" y="93.900607"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(97.019958%, 86.431885%, 81.881714%)" 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 266.614164 -113.964557 L 294.959604 -113.964557 L 294.959604 -85.615209 L 266.614164 -85.615209 Z M 266.614164 -113.964557 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-0" x="418.529126" y="162.255827"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(97.019958%, 86.431885%, 81.881714%)" 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 103.623979 -34.814647 C 103.623979 -29.311285 99.164223 -24.851529 93.660861 -24.851529 C 88.161408 -24.851529 83.701653 -29.311285 83.701653 -34.814647 C 83.701653 -40.3141 88.161408 -44.777764 93.660861 -44.777764 C 99.164223 -44.777764 103.623979 -40.3141 103.623979 -34.814647 Z M 103.623979 -34.814647 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-6-0" x="228.971986" y="98.06806"/>
|
||||
</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 72.362696 -34.814647 L 79.066009 -34.814647 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.054958 -0.00114651 L 1.606928 1.683476 L 3.088302 -0.00114651 L 1.606928 -1.681861 Z M 6.054958 -0.00114651 " transform="matrix(0.999389, 0, 0, -0.999389, 217.74171, 93.905104)"/>
|
||||
<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 93.660861 -82.382765 L 93.660861 -49.409499 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.051751 0.00183853 L 1.60763 1.682553 L 3.089004 0.00183853 L 1.60763 -1.682784 Z M 6.051751 0.00183853 " transform="matrix(0, -0.999389, -0.999389, 0, 235.1659, 111.329304)"/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 237.15625 141.445312 C 237.15625 140.347656 236.265625 139.453125 235.164062 139.453125 C 234.066406 139.453125 233.175781 140.347656 233.175781 141.445312 C 233.175781 142.546875 234.066406 143.4375 235.164062 143.4375 C 236.265625 143.4375 237.15625 142.546875 237.15625 141.445312 Z M 237.15625 141.445312 "/>
|
||||
<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 43.016645 -117.197 L 100.747221 -117.197 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.05487 -0.00131999 L 1.606841 1.683303 L 3.088214 -0.00131999 L 1.606841 -1.682034 Z M 6.05487 -0.00131999 " transform="matrix(0.999389, 0, 0, -0.999389, 239.409766, 176.236962)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-0" x="188.368803" y="168.962728"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-1" x="192.860058" y="170.455816"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-5-1" x="199.370079" y="171.451207"/>
|
||||
</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 43.016645 -99.787928 L 100.747221 -99.787928 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.05487 0.00142162 L 1.606841 1.682136 L 3.088214 0.00142162 L 1.606841 -1.683201 Z M 6.05487 0.00142162 " transform="matrix(0.999389, 0, 0, -0.999389, 239.409766, 158.841265)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-0" x="188.368803" y="151.566361"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-0" x="192.860058" y="153.060448"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-5-1" x="198.858391" y="154.055839"/>
|
||||
</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 43.016645 -82.382765 L 100.747221 -82.382765 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.05487 0.000264599 L 1.606841 1.684887 L 3.088214 0.000264599 L 1.606841 -1.684358 Z M 6.05487 0.000264599 " transform="matrix(0.999389, 0, 0, -0.999389, 239.409766, 141.445577)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-0" x="188.368803" y="135.139401"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-0" x="192.860058" y="136.632489"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-5-0" x="198.858391" y="137.62888"/>
|
||||
</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 28.843925 -0.000411925 L 181.116626 -0.000411925 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.052947 -0.000411925 L 1.608826 1.684211 L 3.086291 -0.000411925 L 1.608826 -1.681126 Z M 6.052947 -0.000411925 " transform="matrix(0.999389, 0, 0, -0.999389, 319.728095, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-8-0" x="174.203461" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-1" x="177.019739" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-2" x="185.262701" y="53.94203"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-2" x="190.275637" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-1" x="196.357076" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-3" x="204.60288" y="53.94203"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-2" x="209.388955" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-1" x="215.470394" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-4" x="223.716198" y="53.94203"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-2" x="228.304394" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-3" x="234.385833" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-2" x="241.949054" y="53.94203"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-2" x="246.96199" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-3" x="253.043429" y="52.447943"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-3" x="260.605651" y="53.94203"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-8-1" x="265.391726" y="52.447943"/>
|
||||
</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 103.623979 -34.814647 L 181.116626 -34.814647 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.052947 -0.00114651 L 1.608826 1.683476 L 3.086291 -0.00114651 L 1.608826 -1.681861 Z M 6.052947 -0.00114651 " transform="matrix(0.999389, 0, 0, -0.999389, 319.728095, 93.905104)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-7-3" x="248.937782" y="88.59485"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-4" x="256.498161" y="90.088937"/>
|
||||
</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 214.594107 -48.268177 L 214.594107 -66.310448 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.054917 0.000497024 L 1.606887 1.681211 L 3.088261 0.000497024 L 1.606887 -1.684126 Z M 6.054917 0.000497024 " transform="matrix(0, 0.999389, 0.999389, 0, 356.022941, 122.546438)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-1" x="359.837" y="124.26105"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-2-1" x="365.713408" y="125.754138"/>
|
||||
</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 28.843925 -34.814647 L 38.384909 -34.814647 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.051559 -0.00114651 L 1.607439 1.683476 L 3.088812 -0.00114651 L 1.607439 -1.681861 Z M 6.051559 -0.00114651 " transform="matrix(0.999389, 0, 0, -0.999389, 177.08495, 93.905104)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-9-0" x="172.888265" y="90.088937"/>
|
||||
</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 163.070447 -99.787928 L 181.116626 -99.787928 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.052947 0.00144162 L 1.608826 1.682156 L 3.086291 0.00144162 L 1.608826 -1.683181 Z M 6.052947 0.00144162 " transform="matrix(0.999389, 0, 0, -0.999389, 319.728095, 158.841284)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-2" x="310.887918" y="153.530161"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-2-1" x="316.151701" y="155.024248"/>
|
||||
</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 243.439852 -99.787928 L 261.482123 -99.787928 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.054922 0.00144162 L 1.606892 1.682156 L 3.088266 0.00144162 L 1.606892 -1.683181 Z M 6.054922 0.00144162 " transform="matrix(0.999389, 0, 0, -0.999389, 400.046433, 158.841284)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-3" x="389.286999" y="155.024248"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-9-1" x="394.099058" y="155.024248"/>
|
||||
</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 295.459909 -99.787928 L 341.851528 -99.787928 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 486.414062 158.839844 L 481.972656 157.160156 L 483.449219 158.839844 L 481.972656 160.523438 Z M 486.414062 158.839844 "/>
|
||||
<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 6.053018 0.00144162 L 1.608897 1.682156 L 3.086362 0.00144162 L 1.608897 -1.683181 Z M 6.053018 0.00144162 " transform="matrix(0.999389, 0, 0, -0.999389, 480.364742, 158.841284)"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-3" x="471.351841" y="155.024248"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-9-0" x="476.163899" y="155.024248"/>
|
||||
</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 28.843925 -57.887334 L 319.173613 -57.887334 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.052613 0.00177608 L 1.608492 1.68249 L 3.085957 0.00177608 L 1.608492 -1.682847 Z M 6.052613 0.00177608 " transform="matrix(0.999389, 0, 0, -0.999389, 457.701084, 116.966619)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-4" x="450.272724" y="111.214025"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-4-5" x="455.928268" y="112.707112"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(98.50769%, 93.80188%, 82.429504%)" 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 109.21333 25.323651 L 143.230203 25.323651 L 143.230203 53.66909 L 109.21333 53.66909 Z M 109.21333 25.323651 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-5" x="256.04244" y="22.311363"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-10-0" x="265.712529" y="23.80445"/>
|
||||
<use xlink:href="#glyph-10-1" x="268.588859" y="23.80445"/>
|
||||
<use xlink:href="#glyph-10-1" x="273.726107" y="23.80445"/>
|
||||
</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 306.798867 -57.887334 L 306.798867 39.49637 L 148.358335 39.49637 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.053215 -0.000780438 L 1.609094 1.683842 L 3.086559 -0.000780438 L 1.609094 -1.681495 Z M 6.053215 -0.000780438 " transform="matrix(-0.999389, 0, 0, 0.999389, 292.666705, 19.641405)"/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 450.160156 116.964844 C 450.160156 115.867188 449.269531 114.976562 448.171875 114.976562 C 447.070312 114.976562 446.179688 115.867188 446.179688 116.964844 C 446.179688 118.066406 447.070312 118.957031 448.171875 118.957031 C 449.269531 118.957031 450.160156 118.066406 450.160156 116.964844 Z M 450.160156 116.964844 "/>
|
||||
<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 -51.521571 -46.352945 C -51.521571 -40.849583 -55.981327 -36.389827 -61.484688 -36.389827 C -66.98805 -36.389827 -71.447806 -40.849583 -71.447806 -46.352945 C -71.447806 -51.852398 -66.98805 -56.312153 -61.484688 -56.312153 C -55.981327 -56.312153 -51.521571 -51.852398 -51.521571 -46.352945 Z M -51.521571 -46.352945 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-6-0" x="73.921754" y="109.599012"/>
|
||||
</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 108.713025 39.49637 L -61.484688 39.49637 L -61.484688 -31.754183 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.054502 0.000521509 L 1.610381 1.681236 L 3.087846 0.000521509 L 1.610381 -1.684101 Z M 6.054502 0.000521509 " transform="matrix(0, 0.999389, 0.999389, 0, 80.11276, 88.011696)"/>
|
||||
<path fill-rule="nonzero" fill="rgb(89.332581%, 93.409729%, 83.686829%)" 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 -128.674168 -60.525664 L -94.622118 -60.525664 L -94.622118 -32.176316 L -128.674168 -32.176316 Z M -128.674168 -60.525664 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-5" x="16.285982" y="108.104925"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-10-2" x="25.956071" y="109.598013"/>
|
||||
<use xlink:href="#glyph-10-3" x="31.833484" y="109.598013"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-10-4" x="37.494842" y="109.598013"/>
|
||||
</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 335.144306 -99.787928 L 335.144306 -142.732129 L -140.509522 -142.732129 L -140.509522 -46.352945 L -133.806209 -46.352945 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 11.050781 105.4375 L 6.609375 103.753906 L 8.085938 105.4375 L 6.609375 107.117188 Z M 11.050781 105.4375 "/>
|
||||
<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.0541 -0.00161454 L 1.609979 1.683008 L 3.087444 -0.00161454 L 1.609979 -1.682329 Z M 6.0541 -0.00161454 " transform="matrix(0.999389, 0, 0, -0.999389, 5.00038, 105.435886)"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 478.492188 158.839844 C 478.492188 157.742188 477.601562 156.851562 476.5 156.851562 C 475.402344 156.851562 474.507812 157.742188 474.507812 158.839844 C 474.507812 159.941406 475.402344 160.832031 476.5 160.832031 C 477.601562 160.832031 478.492188 159.941406 478.492188 158.839844 Z M 478.492188 158.839844 "/>
|
||||
<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 -94.125721 -46.352945 L -76.08345 -46.352945 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.053419 -0.00161454 L 1.609298 1.683008 L 3.086763 -0.00161454 L 1.609298 -1.682329 Z M 6.053419 -0.00161454 " transform="matrix(0.999389, 0, 0, -0.999389, 62.68856, 105.435886)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-4" x="54.050899" y="99.683073"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-2-2" x="60.80677" y="96.070281"/>
|
||||
</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 -51.521571 -46.352945 L -33.479301 -46.352945 " transform="matrix(0.999389, 0, 0, -0.999389, 141.560413, 59.11287)"/>
|
||||
<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.054508 -0.00161454 L 1.610387 1.683008 L 3.087852 -0.00161454 L 1.610387 -1.682329 Z M 6.054508 -0.00161454 " transform="matrix(0.999389, 0, 0, -0.999389, 105.265596, 105.435886)"/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-1-4" x="102.162493" y="99.683073"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 96 KiB |
BIN
figs/nass_effect_ustation_compliance.pdf
Normal file
BIN
figs/nass_effect_ustation_compliance.png
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
figs/nass_hac_loci.pdf
Normal file
BIN
figs/nass_hac_loci.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
figs/nass_hac_loop_gain.pdf
Normal file
BIN
figs/nass_hac_loop_gain.png
Normal file
After Width: | Height: | Size: 79 KiB |
4132
figs/nass_hac_plants.pdf
Normal file
BIN
figs/nass_hac_plants.png
Normal file
After Width: | Height: | Size: 113 KiB |
2151
figs/nass_iff_loop_gain.pdf
Normal file
BIN
figs/nass_iff_loop_gain.png
Normal file
After Width: | Height: | Size: 104 KiB |
2151
figs/nass_iff_plant_effect_payload.pdf
Normal file
BIN
figs/nass_iff_plant_effect_payload.png
Normal file
After Width: | Height: | Size: 106 KiB |
2671
figs/nass_iff_plant_effect_rotation.pdf
Normal file
BIN
figs/nass_iff_plant_effect_rotation.png
Normal file
After Width: | Height: | Size: 116 KiB |
2314
figs/nass_iff_plant_kp.pdf
Normal file
BIN
figs/nass_iff_plant_kp.png
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
figs/nass_iff_plant_no_kp.pdf
Normal file
BIN
figs/nass_iff_plant_no_kp.png
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
figs/nass_iff_root_locus_1kg.pdf
Normal file
BIN
figs/nass_iff_root_locus_1kg.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
figs/nass_iff_root_locus_25kg.pdf
Normal file
BIN
figs/nass_iff_root_locus_25kg.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
figs/nass_iff_root_locus_50kg.pdf
Normal file
BIN
figs/nass_iff_root_locus_50kg.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
figs/nass_simscape_model.jpg
Normal file
After Width: | Height: | Size: 90 KiB |
2187
figs/nass_soft_nano_hexapod_effect_Wz.pdf
Normal file
BIN
figs/nass_soft_nano_hexapod_effect_Wz.png
Normal file
After Width: | Height: | Size: 150 KiB |
BIN
figs/nass_stiff_nano_hexapod_coupling_ustation.pdf
Normal file
BIN
figs/nass_stiff_nano_hexapod_coupling_ustation.png
Normal file
After Width: | Height: | Size: 127 KiB |
BIN
figs/nass_tomo_1kg_60rpm_xy.pdf
Normal file
BIN
figs/nass_tomo_1kg_60rpm_xy.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
figs/nass_tomo_1kg_60rpm_yz.pdf
Normal file
BIN
figs/nass_tomo_1kg_60rpm_yz.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
figs/nass_tomography_hac_iff_m1.pdf
Normal file
BIN
figs/nass_tomography_hac_iff_m1.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
figs/nass_tomography_hac_iff_m25.pdf
Normal file
BIN
figs/nass_tomography_hac_iff_m25.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
figs/nass_tomography_hac_iff_m50.pdf
Normal file
BIN
figs/nass_tomography_hac_iff_m50.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
figs/nass_undamped_plant_effect_Wz.pdf
Normal file
BIN
figs/nass_undamped_plant_effect_Wz.png
Normal file
After Width: | Height: | Size: 118 KiB |
4671
figs/nass_undamped_plant_effect_mass.pdf
Normal file
BIN
figs/nass_undamped_plant_effect_mass.png
Normal file
After Width: | Height: | Size: 151 KiB |
BIN
matlab/mat/nass_K_hac.mat
Normal file
BIN
matlab/mat/nass_K_iff.mat
Normal file
BIN
matlab/mat/nass_model_conf_log.mat
Normal file
BIN
matlab/mat/nass_model_conf_simscape.mat
Normal file
BIN
matlab/mat/nass_model_controller.mat
Normal file
BIN
matlab/mat/nass_model_disturbances.mat
Normal file
BIN
matlab/mat/nass_model_references.mat
Normal file
BIN
matlab/mat/nass_model_stages.mat
Normal file
BIN
matlab/mat/ustation_disturbance_psd.mat
Normal file
451
matlab/nass_1_active_damping.m
Normal file
@@ -0,0 +1,451 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
%% Path for functions, data and scripts
|
||||
addpath('./mat/'); % Path for Data
|
||||
addpath('./src/'); % Path for functions
|
||||
addpath('./STEPS/'); % Path for STEPS
|
||||
addpath('./subsystems/'); % Path for Subsystems Simulink files
|
||||
|
||||
%% Data directory
|
||||
data_dir = './mat/';
|
||||
|
||||
% Simulink Model name
|
||||
mdl = 'nass_model';
|
||||
|
||||
%% Colors for the figures
|
||||
colors = colororder;
|
||||
|
||||
%% Frequency Vector [Hz]
|
||||
freqs = logspace(0, 3, 1000);
|
||||
|
||||
%% Identify the IFF plant dynamics using the Simscape model
|
||||
|
||||
% Initialize each Simscape model elements
|
||||
initializeGround();
|
||||
initializeGranite();
|
||||
initializeTy();
|
||||
initializeRy();
|
||||
initializeRz();
|
||||
initializeMicroHexapod();
|
||||
initializeSimplifiedNanoHexapod();
|
||||
|
||||
% Initial Simscape Configuration
|
||||
initializeSimscapeConfiguration('gravity', false);
|
||||
initializeDisturbances('enable', false);
|
||||
initializeLoggingConfiguration('log', 'none');
|
||||
initializeController('type', 'open-loop');
|
||||
initializeReferences();
|
||||
|
||||
% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs [N]
|
||||
io(io_i) = linio([mdl, '/NASS'], 3, 'openoutput', [], 'fn'); io_i = io_i + 1; % Force Sensors [N]
|
||||
|
||||
% Identify for multi payload masses (no rotation)
|
||||
initializeReferences(); % No Spindle Rotation
|
||||
% 1kg Sample
|
||||
initializeSample('type', 'cylindrical', 'm', 1);
|
||||
G_iff_m1 = linearize(mdl, io);
|
||||
G_iff_m1.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_iff_m1.OutputName = {'fn1', 'fn2', 'fn3', 'fn4', 'fn5', 'fn6'};
|
||||
|
||||
% 25kg Sample
|
||||
initializeSample('type', 'cylindrical', 'm', 25);
|
||||
G_iff_m25 = linearize(mdl, io);
|
||||
G_iff_m25.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_iff_m25.OutputName = {'fn1', 'fn2', 'fn3', 'fn4', 'fn5', 'fn6'};
|
||||
|
||||
% 50kg Sample
|
||||
initializeSample('type', 'cylindrical', 'm', 50);
|
||||
G_iff_m50 = linearize(mdl, io);
|
||||
G_iff_m50.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_iff_m50.OutputName = {'fn1', 'fn2', 'fn3', 'fn4', 'fn5', 'fn6'};
|
||||
|
||||
% Effect of Rotation
|
||||
initializeReferences(...
|
||||
'Rz_type', 'rotating', ...
|
||||
'Rz_period', 1); % 360 deg/s
|
||||
initializeSample('type', 'cylindrical', 'm', 25);
|
||||
G_iff_m25_Rz = linearize(mdl, io, 0.1);
|
||||
G_iff_m25_Rz.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_iff_m25_Rz.OutputName = {'fn1', 'fn2', 'fn3', 'fn4', 'fn5', 'fn6'};
|
||||
|
||||
% Effect of Rotation - No added parallel stiffness
|
||||
initializeSimplifiedNanoHexapod('actuator_kp', 0);
|
||||
initializeReferences(...
|
||||
'Rz_type', 'rotating', ...
|
||||
'Rz_period', 1); % 360 deg/s
|
||||
initializeSample('type', 'cylindrical', 'm', 25);
|
||||
G_iff_m25_Rz_no_kp = linearize(mdl, io, 0.1);
|
||||
G_iff_m25_Rz_no_kp.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_iff_m25_Rz_no_kp.OutputName = {'fn1', 'fn2', 'fn3', 'fn4', 'fn5', 'fn6'};
|
||||
|
||||
%% IFF Plant - Without parallel stiffness
|
||||
f = logspace(-1,3,1000);
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(f, abs(squeeze(freqresp(G_iff_m25_Rz_no_kp(i,j), f, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
plot(f, abs(squeeze(freqresp(G_iff_m25_Rz_no_kp(1,1), f, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - $k_p = 0$')
|
||||
for i = 2:6
|
||||
plot(f, abs(squeeze(freqresp(G_iff_m25_Rz_no_kp(i,i), f, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
plot(f, abs(squeeze(freqresp(G_iff_m25_Rz_no_kp(1,2), f, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
|
||||
'DisplayName', '$f_{ni}/f_j$ - $k_p = 0$')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-4, 1e1]);
|
||||
leg = legend('location', 'northwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(f, 180/pi*unwrap(angle(squeeze(freqresp(G_iff_m25_Rz_no_kp(i,i), f, 'Hz')))), 'color', colors(1,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-20, 200]);
|
||||
yticks([0:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([f(1), f(end)]);
|
||||
|
||||
%% IFF Plant - With added parallel stiffness
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(f, abs(squeeze(freqresp(G_iff_m25_Rz(i,j), f, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
plot(f, abs(squeeze(freqresp(G_iff_m25_Rz(1,1), f, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - $k_p = 50N/mm$')
|
||||
for i = 2:6
|
||||
plot(f, abs(squeeze(freqresp(G_iff_m25_Rz(i,i), f, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
plot(f, abs(squeeze(freqresp(G_iff_m25_Rz(1,2), f, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
|
||||
'DisplayName', '$f_{ni}/f_j$ - $k_p = 50N/mm$')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-4, 1e1]);
|
||||
leg = legend('location', 'northwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(G_iff_m25_Rz(i,i), f, 'Hz'))), 'color', colors(1,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-20, 200]);
|
||||
yticks([0:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([f(1), f(end)]);
|
||||
|
||||
%% Effect of spindle's rotation on the IFF Plant
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m25(i,j), freqs, 'Hz'))), 'color', [colors(1,:), 0.1], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m25_Rz(i,j), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m25(1,1), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - $\Omega_z = 0$ deg/s')
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m25_Rz(1,1), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - $\Omega_z = 360$ deg/s')
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m25(i,i), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m25_Rz(i,i), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
% plot(freqs, abs(squeeze(freqresp(G_iff_m25_Rz(1,2), freqs, 'Hz'))), 'color', [0, 0, 0, 0.2], ...
|
||||
% 'DisplayName', '$f_{ni}/f_j$')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-4, 1e2]);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff_m25(i,i), freqs, 'Hz'))), 'color', colors(1,:));
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff_m25_Rz(i,i), freqs, 'Hz'))), 'color', colors(2,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-20, 200]);
|
||||
yticks([0:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
%% Effect of the payload's mass on the IFF Plant
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m1(1,1), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - 1kg')
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m1(i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m25(1,1), freqs, 'Hz'))), 'color', [colors(2,:), 0.5], ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - 25kg')
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m25(i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m50(1,1), freqs, 'Hz'))), 'color', [colors(3,:), 0.5], ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - 50kg')
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff_m50(i,i), freqs, 'Hz'))), 'color', [colors(3,:), 0.5], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-4, 1e2]);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff_m1(i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5]);
|
||||
end
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff_m25(i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5]);
|
||||
end
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff_m50(i,i), freqs, 'Hz'))), 'color', [colors(3,:), 0.5]);
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-20, 200]);
|
||||
yticks([0:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
%% Verify that parallel stiffness permits to have a stable plant
|
||||
Kiff_pure_int = -200/s*eye(6);
|
||||
|
||||
if isstable(feedback(G_iff_m25_Rz_no_kp, Kiff_pure_int, 1))
|
||||
disp("Decentralized IFF is not stable with rotation")
|
||||
end
|
||||
|
||||
if not(isstable(feedback(G_iff_m25_Rz, Kiff_pure_int, 1)))
|
||||
disp("Parallel stiffness makes the decentralized IFF stable")
|
||||
else
|
||||
warning("Decentralized IFF is not stable even with the parallel stiffness")
|
||||
end
|
||||
|
||||
%% IFF Controller Design
|
||||
% Second order high pass filter
|
||||
wz = 2*pi*2;
|
||||
xiz = 0.7;
|
||||
Ghpf = (s^2/wz^2)/(s^2/wz^2 + 2*xiz*s/wz + 1);
|
||||
|
||||
Kiff = -200 * ... % Gain
|
||||
1/(0.01*2*pi + s) * ... % LPF: provides integral action
|
||||
Ghpf * ... % 2nd order HPF (limit low frequency gain)
|
||||
eye(6); % Diagonal 6x6 controller (i.e. decentralized)
|
||||
|
||||
Kiff.InputName = {'fm1', 'fm2', 'fm3', 'fm4', 'fm5', 'fm6'};
|
||||
Kiff.OutputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
|
||||
% The designed IFF controller is saved
|
||||
save('./mat/nass_K_iff.mat', 'Kiff');
|
||||
|
||||
%% Loop gain for the decentralized IFF
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Kiff(1,1)*G_iff_m1(1,1), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], ...
|
||||
'DisplayName', '1kg')
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(Kiff(1,1)*G_iff_m1(i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(Kiff(1,1)*G_iff_m25(1,1), freqs, 'Hz'))), 'color', [colors(2,:), 0.5], ...
|
||||
'DisplayName', '25kg')
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(Kiff(1,1)*G_iff_m25(i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(Kiff(1,1)*G_iff_m50(1,1), freqs, 'Hz'))), 'color', [colors(3,:), 0.5], ...
|
||||
'DisplayName', '50kg')
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(Kiff(1,1)*G_iff_m50(i,i), freqs, 'Hz'))), 'color', [colors(3,:), 0.5], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Loop Gain'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-4, 1e2]);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(-Kiff(1,1)*G_iff_m1(i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5]);
|
||||
end
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(-Kiff(1,1)*G_iff_m25(i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5]);
|
||||
end
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(-Kiff(1,1)*G_iff_m50(i,i), freqs, 'Hz'))), 'color', [colors(3,:), 0.5]);
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-110, 200]);
|
||||
yticks([-180, -90, 0, 90, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
%% Root Locus for the Decentralized IFF controller - 1kg Payload
|
||||
figure;
|
||||
gains = logspace(-2, 1, 200);
|
||||
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
nexttile();
|
||||
hold on;
|
||||
|
||||
plot(real(pole(G_iff_m1)), imag(pole(G_iff_m1)), 'x', 'color', colors(1,:), ...
|
||||
'DisplayName', '$g = 0$');
|
||||
plot(real(tzero(G_iff_m1)), imag(tzero(G_iff_m1)), 'o', 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
|
||||
for g = gains
|
||||
clpoles = pole(feedback(G_iff_m1, g*Kiff, +1));
|
||||
plot(real(clpoles), imag(clpoles), '.', 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
|
||||
% Optimal gain
|
||||
clpoles = pole(feedback(G_iff_m1, Kiff, +1));
|
||||
plot(real(clpoles), imag(clpoles), 'kx', ...
|
||||
'DisplayName', '$g_{opt}$');
|
||||
|
||||
xline(0);
|
||||
yline(0);
|
||||
hold off;
|
||||
axis equal;
|
||||
xlim([-900, 100]); ylim([-100, 900]);
|
||||
xticks([-900:100:0]);
|
||||
yticks([0:100:900]);
|
||||
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
|
||||
xlabel('Real part'); ylabel('Imaginary part');
|
||||
|
||||
%% Root Locus for the Decentralized IFF controller - 25kg Payload
|
||||
gains = logspace(-2, 1, 200);
|
||||
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
nexttile();
|
||||
hold on;
|
||||
|
||||
plot(real(pole(G_iff_m25)), imag(pole(G_iff_m25)), 'x', 'color', colors(2,:), ...
|
||||
'DisplayName', '$g = 0$');
|
||||
plot(real(tzero(G_iff_m25)), imag(tzero(G_iff_m25)), 'o', 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
|
||||
for g = gains
|
||||
clpoles = pole(feedback(G_iff_m25, g*Kiff, +1));
|
||||
plot(real(clpoles), imag(clpoles), '.', 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
|
||||
% Optimal gain
|
||||
clpoles = pole(feedback(G_iff_m25, Kiff, +1));
|
||||
plot(real(clpoles), imag(clpoles), 'kx', ...
|
||||
'DisplayName', '$g_{opt}$');
|
||||
|
||||
xline(0);
|
||||
yline(0);
|
||||
hold off;
|
||||
axis equal;
|
||||
xlim([-900, 100]); ylim([-100, 900]);
|
||||
xticks([-900:100:0]);
|
||||
yticks([0:100:900]);
|
||||
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
|
||||
xlabel('Real part'); ylabel('Imaginary part');
|
||||
|
||||
%% Root Locus for the Decentralized IFF controller - 50kg Payload
|
||||
gains = logspace(-2, 1, 200);
|
||||
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
nexttile();
|
||||
hold on;
|
||||
|
||||
plot(real(pole(G_iff_m50)), imag(pole(G_iff_m50)), 'x', 'color', colors(3,:), ...
|
||||
'DisplayName', '$g = 0$');
|
||||
plot(real(tzero(G_iff_m50)), imag(tzero(G_iff_m50)), 'o', 'color', colors(3,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
|
||||
for g = gains
|
||||
clpoles = pole(feedback(G_iff_m50, g*Kiff, +1));
|
||||
plot(real(clpoles), imag(clpoles), '.', 'color', colors(3,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
|
||||
% Optimal gain
|
||||
clpoles = pole(feedback(G_iff_m50, Kiff, +1));
|
||||
plot(real(clpoles), imag(clpoles), 'kx', ...
|
||||
'DisplayName', '$g_{opt}$');
|
||||
|
||||
xline(0);
|
||||
yline(0);
|
||||
hold off;
|
||||
axis equal;
|
||||
xlim([-900, 100]); ylim([-100, 900]);
|
||||
xticks([-900:100:0]);
|
||||
yticks([0:100:900]);
|
||||
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
|
||||
xlabel('Real part'); ylabel('Imaginary part');
|
846
matlab/nass_2_hac.m
Normal file
@@ -0,0 +1,846 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
%% Path for functions, data and scripts
|
||||
addpath('./mat/'); % Path for Data
|
||||
addpath('./src/'); % Path for functions
|
||||
addpath('./STEPS/'); % Path for STEPS
|
||||
addpath('./subsystems/'); % Path for Subsystems Simulink files
|
||||
|
||||
%% Data directory
|
||||
data_dir = './mat/';
|
||||
|
||||
% Simulink Model name
|
||||
mdl = 'nass_model';
|
||||
|
||||
%% Colors for the figures
|
||||
colors = colororder;
|
||||
|
||||
%% Frequency Vector [Hz]
|
||||
freqs = logspace(0, 3, 1000);
|
||||
|
||||
%% Identify the IFF plant dynamics using the Simscape model
|
||||
|
||||
% Initialize each Simscape model elements
|
||||
initializeGround();
|
||||
initializeGranite();
|
||||
initializeTy();
|
||||
initializeRy();
|
||||
initializeRz();
|
||||
initializeMicroHexapod();
|
||||
initializeSimplifiedNanoHexapod();
|
||||
initializeSample('type', 'cylindrical', 'm', 1);
|
||||
|
||||
% Initial Simscape Configuration
|
||||
initializeSimscapeConfiguration('gravity', false);
|
||||
initializeDisturbances('enable', false);
|
||||
initializeLoggingConfiguration('log', 'none');
|
||||
initializeController('type', 'open-loop');
|
||||
initializeReferences();
|
||||
|
||||
% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'EdL'); io_i = io_i + 1; % Strut errors [m]
|
||||
|
||||
% Identify HAC Plant without using IFF
|
||||
initializeSample('type', 'cylindrical', 'm', 1);
|
||||
G_m1 = linearize(mdl, io);
|
||||
G_m1.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m1.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
initializeSample('type', 'cylindrical', 'm', 25);
|
||||
G_m25 = linearize(mdl, io);
|
||||
G_m25.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m25.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
initializeSample('type', 'cylindrical', 'm', 50);
|
||||
G_m50 = linearize(mdl, io);
|
||||
G_m50.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m50.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
% Effect of Rotation
|
||||
initializeSample('type', 'cylindrical', 'm', 1);
|
||||
initializeReferences(...
|
||||
'Rz_type', 'rotating', ...
|
||||
'Rz_period', 1); % 360 deg/s
|
||||
|
||||
G_m1_Rz = linearize(mdl, io, 0.1);
|
||||
G_m1_Rz.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m1_Rz.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
%% Effect of rotation on the HAC plant
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1(1,1), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$, $\Omega = 0$')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1_Rz(1,1), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$, $\Omega = 360$ deg/s')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1(1,2), freqs, 'Hz'))), 'color', [colors(1,:), 0.2], ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_j$')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1_Rz(1,2), freqs, 'Hz'))), 'color', [colors(2,:), 0.2], ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_j$')
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1(i,j), freqs, 'Hz'))), 'color', [colors(1,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1_Rz(i,j), freqs, 'Hz'))), 'color', [colors(2,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1(i,i), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1_Rz(i,i), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-11, 2e-5]);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m1(i,i), freqs, 'Hz')))), 'color', colors(1,:));
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m1_Rz(i,i), freqs, 'Hz')))), 'color', colors(2,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-200, 20]);
|
||||
yticks([-180:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
%% Effect of payload's mass on the HAC plant
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1( 1,1), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$, 1 kg')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25(1,1), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$, 25 kg')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m50(1,1), freqs, 'Hz'))), 'color', colors(3,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$, 50 kg')
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1(i,j), freqs, 'Hz'))), 'color', [colors(1,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25(i,j), freqs, 'Hz'))), 'color', [colors(2,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m50(i,j), freqs, 'Hz'))), 'color', [colors(3,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1( i,i), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25(i,i), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m50(i,i), freqs, 'Hz'))), 'color', colors(3,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-11, 2e-5]);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m1(i,i), freqs, 'Hz')))), 'color', colors(1,:));
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m25(i,i), freqs, 'Hz')))), 'color', colors(2,:));
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m50(i,i), freqs, 'Hz')))), 'color', colors(3,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-200, 20]);
|
||||
yticks([-180:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
%% Identify HAC Plant with IFF
|
||||
initializeReferences(); % No Spindle Rotation
|
||||
initializeController('type', 'iff'); % Implemented IFF controller
|
||||
load('nass_K_iff.mat', 'Kiff'); % Load designed IFF controller
|
||||
|
||||
% 1kg payload
|
||||
initializeSample('type', 'cylindrical', 'm', 1);
|
||||
G_hac_m1 = linearize(mdl, io);
|
||||
G_hac_m1.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_hac_m1.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
% 25kg payload
|
||||
initializeSample('type', 'cylindrical', 'm', 25);
|
||||
G_hac_m25 = linearize(mdl, io);
|
||||
G_hac_m25.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_hac_m25.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
% 50kg payload
|
||||
initializeSample('type', 'cylindrical', 'm', 50);
|
||||
G_hac_m50 = linearize(mdl, io);
|
||||
G_hac_m50.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_hac_m50.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
% Check stability
|
||||
if not(isstable(G_hac_m1) && isstable(G_hac_m25) && isstable(G_hac_m50))
|
||||
warning('One of HAC plant is not stable')
|
||||
end
|
||||
|
||||
%% Comparison of the OL plant and the plant with IFF - 1kg payload
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1( 1,1), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - OL')
|
||||
plot(freqs, abs(squeeze(freqresp(G_hac_m1(1,1), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - IFF')
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1(i,j), freqs, 'Hz'))), 'color', [colors(1,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_hac_m1(i,j), freqs, 'Hz'))), 'color', [colors(2,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1( i,i), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_hac_m1(i,i), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-10, 5e-5]);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m1(i,i), freqs, 'Hz')))), 'color', colors(1,:));
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_hac_m1(i,i), freqs, 'Hz')))), 'color', colors(2,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-200, 20]);
|
||||
yticks([-180:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
%% Comparison of all the undamped FRF and all the damped FRF
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1( 1,1), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], 'DisplayName', '$\epsilon\mathcal{L}_i/f_i$ - OL');
|
||||
plot(freqs, abs(squeeze(freqresp(G_hac_m1(1,1), freqs, 'Hz'))), 'color', [colors(2,:), 0.5], 'DisplayName', '$\epsilon\mathcal{L}_i/f_i^\prime$ - IFF');
|
||||
for i = 1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m1( i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25(i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m50(i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
|
||||
end
|
||||
for i = 1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_hac_m1( i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_hac_m25(i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_hac_m50(i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
ylim([1e-10, 5e-5]);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i =1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_m1( i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5]);
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_m25(i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5]);
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_m50(i,i), freqs, 'Hz'))), 'color', [colors(1,:), 0.5]);
|
||||
end
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_hac_m1( i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5]);
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_hac_m25(i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5]);
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_hac_m50(i,i), freqs, 'Hz'))), 'color', [colors(2,:), 0.5]);
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
ylim([-200, 20]);
|
||||
yticks([-180:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
% xlim([1, 5e2]);
|
||||
|
||||
%% Identify plant with "rigid" micro-station
|
||||
initializeGround('type', 'rigid');
|
||||
initializeGranite('type', 'rigid');
|
||||
initializeTy('type', 'rigid');
|
||||
initializeRy('type', 'rigid');
|
||||
initializeRz('type', 'rigid');
|
||||
initializeMicroHexapod('type', 'rigid');
|
||||
initializeSimplifiedNanoHexapod();
|
||||
initializeSample('type', 'cylindrical', 'm', 25);
|
||||
|
||||
initializeReferences();
|
||||
initializeController('type', 'open-loop'); % Implemented IFF controller
|
||||
load('nass_K_iff.mat', 'Kiff'); % Load designed IFF controller
|
||||
|
||||
% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'EdL'); io_i = io_i + 1; % Strut errors [m]
|
||||
|
||||
G_m25_rigid = linearize(mdl, io);
|
||||
G_m25_rigid.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m25_rigid.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
%% Effect of the micro-station limited compliance on the plant dynamics
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_rigid( 1,1), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - Rigid support')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25(1,1), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - $\mu$-station support')
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_rigid(i,j), freqs, 'Hz'))), 'color', [colors(1,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25(i,j), freqs, 'Hz'))), 'color', [colors(2,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_rigid( i,i), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25(i,i), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-10, 5e-5]);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m25_rigid(i,i), freqs, 'Hz')))), 'color', colors(1,:));
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m25(i,i), freqs, 'Hz')))), 'color', colors(2,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-200, 20]);
|
||||
yticks([-180:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
%% Identify Dynamics with a Stiff nano-hexapod (100N/um)
|
||||
|
||||
% Initialize each Simscape model elements
|
||||
initializeGround();
|
||||
initializeGranite();
|
||||
initializeTy();
|
||||
initializeRy();
|
||||
initializeRz();
|
||||
initializeMicroHexapod();
|
||||
initializeSimplifiedNanoHexapod('actuator_k', 1e8, 'actuator_kp', 0, 'actuator_c', 1e3);
|
||||
initializeSample('type', 'cylindrical', 'm', 25);
|
||||
|
||||
% Initial Simscape Configuration
|
||||
initializeSimscapeConfiguration('gravity', false);
|
||||
initializeDisturbances('enable', false);
|
||||
initializeLoggingConfiguration('log', 'none');
|
||||
initializeController('type', 'open-loop');
|
||||
initializeReferences();
|
||||
|
||||
% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'EdL'); io_i = io_i + 1; % Strut errors [m]
|
||||
|
||||
% Identify Plant
|
||||
G_m25_pz = linearize(mdl, io);
|
||||
G_m25_pz.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m25_pz.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
% Compare with Nano-Hexapod alone (rigid micro-station)
|
||||
initializeGround('type', 'rigid');
|
||||
initializeGranite('type', 'rigid');
|
||||
initializeTy('type', 'rigid');
|
||||
initializeRy('type', 'rigid');
|
||||
initializeRz('type', 'rigid');
|
||||
initializeMicroHexapod('type', 'rigid');
|
||||
|
||||
% Identify Plant
|
||||
G_m25_pz_rigid = linearize(mdl, io);
|
||||
G_m25_pz_rigid.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m25_pz_rigid.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
%% Stiff nano-hexapod - Coupling with the micro-station
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_pz_rigid(1,1), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - Rigid')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_pz(1,1), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - $\mu$-station')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_pz_rigid(1,2), freqs, 'Hz'))), 'color', [colors(1,:), 0.1], ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_j$ - Rigid')
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_pz(1,2), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ...
|
||||
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_j$ - $\mu$-station')
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_pz_rigid(i,j), freqs, 'Hz'))), 'color', [colors(1,:), 0.1], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_pz(i,j), freqs, 'Hz'))), 'color', [colors(2,:), 0.1], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
for i = 2:6
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_pz_rigid(i,i), freqs, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(freqs, abs(squeeze(freqresp(G_m25_pz(i,i), freqs, 'Hz'))), 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-12, 3e-7]);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m25_pz_rigid(i,i), freqs, 'Hz')))), 'color', colors(1,:));
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_m25_pz(i,i), freqs, 'Hz')))), 'color', colors(2,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-200, 20]);
|
||||
yticks([-180:45:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
%% Identify Dynamics with a Soft nano-hexapod (0.01N/um)
|
||||
initializeGround();
|
||||
initializeGranite();
|
||||
initializeTy();
|
||||
initializeRy();
|
||||
initializeRz();
|
||||
initializeMicroHexapod();
|
||||
initializeSimplifiedNanoHexapod('actuator_k', 1e4, 'actuator_kp', 0, 'actuator_c', 1);
|
||||
|
||||
% Initialize each Simscape model elements
|
||||
initializeSample('type', 'cylindrical', 'm', 25); % 25kg payload
|
||||
initializeController('type', 'open-loop');
|
||||
|
||||
% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'input'); io_i = io_i + 1; % Actuator Inputs [N]
|
||||
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'EdL'); io_i = io_i + 1; % Strut errors [m]
|
||||
|
||||
% Identify the dynamics without rotation
|
||||
initializeReferences();
|
||||
G_m1_vc = linearize(mdl, io);
|
||||
G_m1_vc.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m1_vc.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
% Identify the dynamics with 36 deg/s rotation
|
||||
initializeReferences(...
|
||||
'Rz_type', 'rotating', ...
|
||||
'Rz_period', 10); % 36 deg/s
|
||||
|
||||
G_m1_vc_Rz_slow = linearize(mdl, io, 0.1);
|
||||
G_m1_vc_Rz_slow.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m1_vc_Rz_slow.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
% Identify the dynamics with 360 deg/s rotation
|
||||
initializeReferences(...
|
||||
'Rz_type', 'rotating', ...
|
||||
'Rz_period', 1); % 360 deg/s
|
||||
|
||||
G_m1_vc_Rz_fast = linearize(mdl, io, 0.1);
|
||||
G_m1_vc_Rz_fast.InputName = {'f1', 'f2', 'f3', 'f4', 'f5', 'f6'};
|
||||
G_m1_vc_Rz_fast.OutputName = {'l1', 'l2', 'l3', 'l4', 'l5', 'l6'};
|
||||
|
||||
%% Soft Nano-Hexapod - effect of rotational velocity on the dynamics
|
||||
f = logspace(-1,2,200);
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc(1,1), f, 'Hz'))), 'color', colors(1,:), ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - $\Omega_z = 0$')
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc_Rz_slow(1,1), f, 'Hz'))), 'color', colors(2,:), ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - $\Omega_z = 36$ deg/s')
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc_Rz_fast(1,1), f, 'Hz'))), 'color', colors(3,:), ...
|
||||
'DisplayName', '$f_{ni}/f_i$ - $\Omega_z = 360$ deg/s')
|
||||
for i = 1:5
|
||||
for j = i+1:6
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc(i,j), f, 'Hz'))), 'color', [colors(1,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc_Rz_slow(i,j), f, 'Hz'))), 'color', [colors(2,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc_Rz_fast(i,j), f, 'Hz'))), 'color', [colors(3,:), 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
for i = 2:6
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc(i,i), f, 'Hz'))), 'color', colors(1,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
for i = 2:6
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc_Rz_slow(i,i), f, 'Hz'))), 'color', colors(2,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
for i = 2:6
|
||||
plot(f, abs(squeeze(freqresp(G_m1_vc_Rz_fast(i,i), f, 'Hz'))), 'color', colors(3,:), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-9, 1e-2]);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(G_m1_vc(i,i), f, 'Hz'))), 'color', colors(1,:));
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(G_m1_vc_Rz_slow(i,i), f, 'Hz'))), 'color', colors(2,:));
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(G_m1_vc_Rz_fast(i,i), f, 'Hz'))), 'color', colors(3,:));
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-180, 180]);
|
||||
yticks([-180:90:180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([f(1), f(end)]);
|
||||
|
||||
%% HAC Design
|
||||
% Wanted crossover
|
||||
wc = 2*pi*10; % [rad/s]
|
||||
|
||||
% Integrator
|
||||
H_int = wc/s;
|
||||
|
||||
% Lead to increase phase margin
|
||||
a = 2; % Amount of phase lead / width of the phase lead / high frequency gain
|
||||
H_lead = 1/sqrt(a)*(1 + s/(wc/sqrt(a)))/(1 + s/(wc*sqrt(a)));
|
||||
|
||||
% Low Pass filter to increase robustness
|
||||
H_lpf = 1/(1 + s/2/pi/80);
|
||||
|
||||
% Gain to have unitary crossover at wc
|
||||
H_gain = 1./abs(evalfr(G_hac_m50(1,1), 1j*wc));
|
||||
|
||||
% Decentralized HAC
|
||||
Khac = -H_gain * ... % Gain
|
||||
H_int * ... % Integrator
|
||||
H_lead * ... % Low Pass filter
|
||||
H_lpf * ... % Low Pass filter
|
||||
eye(6); % 6x6 Diagonal
|
||||
|
||||
% The designed HAC controller is saved
|
||||
save('./mat/nass_K_hac.mat', 'Khac');
|
||||
|
||||
%% "Diagonal" loop gain for the High Authority Controller
|
||||
f = logspace(-1, 2, 1000);
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m1( i,i), f, 'Hz'))), ...
|
||||
'color', [colors(1,:), 0.5], 'DisplayName', '1kg');
|
||||
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m25(i,i), f, 'Hz'))), ...
|
||||
'color', [colors(2,:), 0.5], 'DisplayName', '25kg');
|
||||
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m50(i,i), f, 'Hz'))), ...
|
||||
'color', [colors(3,:), 0.5], 'DisplayName', '50kg');
|
||||
for i = 2:6
|
||||
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m1( i,i), f, 'Hz'))), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
|
||||
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m25(i,i), f, 'Hz'))), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
|
||||
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m50(i,i), f, 'Hz'))), 'color', [colors(3,:), 0.5], 'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Loop Gain'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-2, 1e2]);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:6
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(-Khac(i,i)*G_hac_m1( i,i), f, 'Hz'))), 'color', [colors(1,:), 0.5]);
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(-Khac(i,i)*G_hac_m25(i,i), f, 'Hz'))), 'color', [colors(2,:), 0.5]);
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(-Khac(i,i)*G_hac_m50(i,i), f, 'Hz'))), 'color', [colors(3,:), 0.5]);
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
ylim([-180, 180])
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([0.1, 100]);
|
||||
|
||||
%% Characteristic Loci for the High Authority Controller
|
||||
Ldet_m1 = zeros(6, length(freqs));
|
||||
Lmimo_m1 = squeeze(freqresp(-G_hac_m1*Khac, freqs, 'Hz'));
|
||||
for i_f = 2:length(freqs)
|
||||
Ldet_m1(:, i_f) = eig(squeeze(Lmimo_m1(:,:,i_f)));
|
||||
end
|
||||
Ldet_m25 = zeros(6, length(freqs));
|
||||
Lmimo_m25 = squeeze(freqresp(-G_hac_m25*Khac, freqs, 'Hz'));
|
||||
for i_f = 2:length(freqs)
|
||||
Ldet_m25(:, i_f) = eig(squeeze(Lmimo_m25(:,:,i_f)));
|
||||
end
|
||||
Ldet_m50 = zeros(6, length(freqs));
|
||||
Lmimo_m50 = squeeze(freqresp(-G_hac_m50*Khac, freqs, 'Hz'));
|
||||
for i_f = 2:length(freqs)
|
||||
Ldet_m50(:, i_f) = eig(squeeze(Lmimo_m50(:,:,i_f)));
|
||||
end
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(real(squeeze(Ldet_m1(1,:))), imag(squeeze(Ldet_m1(1,:))), ...
|
||||
'.', 'color', colors(1, :), ...
|
||||
'DisplayName', '1kg');
|
||||
plot(real(squeeze(Ldet_m1(1,:))),-imag(squeeze(Ldet_m1(1,:))), ...
|
||||
'.', 'color', colors(1, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(real(squeeze(Ldet_m25(1,:))), imag(squeeze(Ldet_m25(1,:))), ...
|
||||
'.', 'color', colors(2, :), ...
|
||||
'DisplayName', '25kg');
|
||||
plot(real(squeeze(Ldet_m25(1,:))),-imag(squeeze(Ldet_m25(1,:))), ...
|
||||
'.', 'color', colors(2, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(real(squeeze(Ldet_m50(1,:))), imag(squeeze(Ldet_m50(1,:))), ...
|
||||
'.', 'color', colors(3, :), ...
|
||||
'DisplayName', '50kg');
|
||||
plot(real(squeeze(Ldet_m50(1,:))),-imag(squeeze(Ldet_m50(1,:))), ...
|
||||
'.', 'color', colors(3, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
for i = 2:6
|
||||
plot(real(squeeze(Ldet_m1(i,:))), imag(squeeze(Ldet_m1(i,:))), ...
|
||||
'.', 'color', colors(1, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(real(squeeze(Ldet_m1(i,:))), -imag(squeeze(Ldet_m1(i,:))), ...
|
||||
'.', 'color', colors(1, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
|
||||
plot(real(squeeze(Ldet_m25(i,:))), imag(squeeze(Ldet_m25(i,:))), ...
|
||||
'.', 'color', colors(2, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(real(squeeze(Ldet_m25(i,:))), -imag(squeeze(Ldet_m25(i,:))), ...
|
||||
'.', 'color', colors(2, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
|
||||
plot(real(squeeze(Ldet_m50(i,:))), imag(squeeze(Ldet_m50(i,:))), ...
|
||||
'.', 'color', colors(3, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(real(squeeze(Ldet_m50(i,:))), -imag(squeeze(Ldet_m50(i,:))), ...
|
||||
'.', 'color', colors(3, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
plot(-1, 0, 'kx', 'HandleVisibility', 'off');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Real Part'); ylabel('Imaginary Part');
|
||||
axis square
|
||||
xlim([-1.8, 0.2]); ylim([-1, 1]);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
%% Simulation of tomography experiments
|
||||
% Sample is not centered with the rotation axis
|
||||
% This is done by offsetfing the micro-hexapod by 0.9um
|
||||
P_micro_hexapod = [0.9e-6; 0; 0]; % [m]
|
||||
|
||||
open(mdl);
|
||||
set_param(mdl, 'StopTime', '2');
|
||||
|
||||
initializeGround();
|
||||
initializeGranite();
|
||||
initializeTy();
|
||||
initializeRy();
|
||||
initializeRz();
|
||||
initializeMicroHexapod('AP', P_micro_hexapod);
|
||||
initializeSample('type', 'cylindrical', 'm', 1);
|
||||
|
||||
initializeSimscapeConfiguration('gravity', false);
|
||||
initializeLoggingConfiguration('log', 'all', 'Ts', 1e-3);
|
||||
|
||||
initializeDisturbances(...
|
||||
'Dw_x', true, ... % Ground Motion - X direction
|
||||
'Dw_y', true, ... % Ground Motion - Y direction
|
||||
'Dw_z', true, ... % Ground Motion - Z direction
|
||||
'Fdy_x', false, ... % Translation Stage - X direction
|
||||
'Fdy_z', false, ... % Translation Stage - Z direction
|
||||
'Frz_x', true, ... % Spindle - X direction
|
||||
'Frz_y', true, ... % Spindle - Y direction
|
||||
'Frz_z', true); % Spindle - Z direction
|
||||
|
||||
initializeReferences(...
|
||||
'Rz_type', 'rotating', ...
|
||||
'Rz_period', 1, ...
|
||||
'Dh_pos', [P_micro_hexapod; 0; 0; 0]);
|
||||
|
||||
% Open-Loop Simulation without Nano-Hexapod - 1kg payload
|
||||
initializeSimplifiedNanoHexapod('type', 'none');
|
||||
initializeController('type', 'open-loop');
|
||||
sim(mdl);
|
||||
exp_tomo_ol_m1 = simout;
|
||||
|
||||
% Closed-Loop Simulation with NASS
|
||||
initializeSimplifiedNanoHexapod();
|
||||
initializeController('type', 'hac-iff');
|
||||
load('nass_K_iff.mat', 'Kiff');
|
||||
load('nass_K_hac.mat', 'Khac');
|
||||
|
||||
% 1kg payload
|
||||
initializeSample('type', 'cylindrical', 'm', 1);
|
||||
sim(mdl);
|
||||
exp_tomo_cl_m1 = simout;
|
||||
|
||||
% 25kg payload
|
||||
initializeSample('type', 'cylindrical', 'm', 25);
|
||||
sim(mdl);
|
||||
exp_tomo_cl_m25 = simout;
|
||||
|
||||
% 50kg payload
|
||||
initializeSample('type', 'cylindrical', 'm', 50);
|
||||
sim(mdl);
|
||||
exp_tomo_cl_m50 = simout;
|
||||
|
||||
%% Simulation of tomography experiment - 1kg payload - 360deg/s - XY errors
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e6*exp_tomo_ol_m1.y.x.Data, 1e6*exp_tomo_ol_m1.y.y.Data, 'DisplayName', 'OL')
|
||||
plot(1e6*exp_tomo_cl_m1.y.x.Data(1e3:end), 1e6*exp_tomo_cl_m1.y.y.Data(1e3:end), 'color', colors(2,:), 'DisplayName', 'CL')
|
||||
hold off;
|
||||
xlabel('$D_x$ [$\mu$m]'); ylabel('$D_y$ [$\mu$m]');
|
||||
axis equal
|
||||
xlim([-2, 2]); ylim([-2, 2]);
|
||||
xticks([-2:1:2]);
|
||||
yticks([-2:1:2]);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
%% Simulation of tomography experiment - 1kg payload - 360deg/s - YZ errors
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile();
|
||||
hold on;
|
||||
plot(1e6*exp_tomo_ol_m1.y.y.Data, 1e6*exp_tomo_ol_m1.y.z.Data, 'DisplayName', 'OL')
|
||||
plot(1e6*exp_tomo_cl_m1.y.y.Data(1e3:end), 1e6*exp_tomo_cl_m1.y.z.Data(1e3:end), 'color', colors(2,:), 'DisplayName', 'CL')
|
||||
hold off;
|
||||
xlabel('$D_y$ [$\mu$m]'); ylabel('$D_z$ [$\mu$m]');
|
||||
axis equal
|
||||
xlim([-2, 2]); ylim([-0.4, 0.4]);
|
||||
xticks([-2:1:2]);
|
||||
yticks([-2:0.2:2]);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile();
|
||||
hold on;
|
||||
plot(1e9*exp_tomo_cl_m1.y.y.Data(1e3:end), 1e9*exp_tomo_cl_m1.y.z.Data(1e3:end), 'color', colors(2,:), 'DisplayName', 'CL')
|
||||
theta = linspace(0, 2*pi, 500); % Angle to plot the circle [rad]
|
||||
plot(100*cos(theta), 50*sin(theta), 'k--', 'DisplayName', 'Beam size')
|
||||
hold off;
|
||||
xlabel('$D_y$ [nm]'); ylabel('$D_z$ [nm]');
|
||||
axis equal
|
||||
xlim([-500, 500]); ylim([-100, 100]);
|
||||
xticks([-500:100:500]);
|
||||
yticks([-100:50:100]);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
%% Simulation of tomography experiment - 1kg payload - 360deg/s - YZ errors
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile();
|
||||
hold on;
|
||||
plot(1e9*exp_tomo_cl_m1.y.y.Data(1e3:end), 1e9*exp_tomo_cl_m1.y.z.Data(1e3:end), 'color', colors(1,:), 'DisplayName', '$m = 1$ kg')
|
||||
theta = linspace(0, 2*pi, 500); % Angle to plot the circle [rad]
|
||||
plot(100*cos(theta), 50*sin(theta), 'k--', 'DisplayName', 'Beam size')
|
||||
hold off;
|
||||
xlabel('$D_y$ [$\mu$m]'); ylabel('$D_z$ [$\mu$m]');
|
||||
axis equal
|
||||
xlim([-200, 200]); ylim([-100, 100]);
|
||||
xticks([-200:50:200]); yticks([-100:50:100]);
|
||||
|
||||
%% Simulation of tomography experiment - 25kg payload - 360deg/s - YZ errors
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile();
|
||||
hold on;
|
||||
plot(1e9*exp_tomo_cl_m25.y.y.Data(1e3:end), 1e9*exp_tomo_cl_m25.y.z.Data(1e3:end), 'color', colors(2,:), 'DisplayName', '$m = 25$ kg')
|
||||
theta = linspace(0, 2*pi, 500); % Angle to plot the circle [rad]
|
||||
plot(100*cos(theta), 50*sin(theta), 'k--', 'DisplayName', 'Beam size')
|
||||
hold off;
|
||||
xlabel('$D_y$ [$\mu$m]'); ylabel('$D_z$ [$\mu$m]');
|
||||
axis equal
|
||||
xlim([-200, 200]); ylim([-100, 100]);
|
||||
xticks([-200:50:200]); yticks([-100:50:100]);
|
||||
|
||||
%% Simulation of tomography experiment - 50kg payload - 360deg/s - YZ errors
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile();
|
||||
hold on;
|
||||
plot(1e9*exp_tomo_cl_m50.y.y.Data(1e3:end), 1e9*exp_tomo_cl_m50.y.z.Data(1e3:end), 'color', colors(3,:), 'DisplayName', '$m = 50$ kg')
|
||||
theta = linspace(0, 2*pi, 500); % Angle to plot the circle [rad]
|
||||
plot(100*cos(theta), 50*sin(theta), 'k--', 'DisplayName', 'Beam size')
|
||||
hold off;
|
||||
xlabel('$D_y$ [$\mu$m]'); ylabel('$D_z$ [$\mu$m]');
|
||||
axis equal
|
||||
xlim([-200, 200]); ylim([-100, 100]);
|
||||
xticks([-200:50:200]); yticks([-100:50:100]);
|
@@ -1,22 +1,24 @@
|
||||
function [sample] = initializeSample(args)
|
||||
|
||||
arguments
|
||||
args.H (1,1) double {mustBeNumeric, mustBePositive} = 350e-3 % Height [m]
|
||||
args.R (1,1) double {mustBeNumeric, mustBePositive} = 350e-3 % Radius [m]
|
||||
args.type char {mustBeMember(args.type,{'none', 'cylindrical'})} = 'none'
|
||||
args.H (1,1) double {mustBeNumeric, mustBePositive} = 250e-3 % Height [m]
|
||||
args.R (1,1) double {mustBeNumeric, mustBePositive} = 110e-3 % Radius [m]
|
||||
args.m (1,1) double {mustBeNumeric, mustBePositive} = 1 % Mass [kg]
|
||||
end
|
||||
|
||||
sample = struct();
|
||||
|
||||
switch args.type
|
||||
case '0'
|
||||
case 'none'
|
||||
sample.type = 0;
|
||||
case '1'
|
||||
sample.m = 0;
|
||||
case 'cylindrical'
|
||||
sample.type = 1;
|
||||
case '2'
|
||||
sample.type = 2;
|
||||
case '3'
|
||||
sample.type = 3;
|
||||
|
||||
sample.H = args.H;
|
||||
sample.R = args.R;
|
||||
sample.m = args.m;
|
||||
end
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
|
@@ -1,6 +1,7 @@
|
||||
function [nano_hexapod] = initializeSimplifiedNanoHexapod(args)
|
||||
|
||||
arguments
|
||||
args.type char {mustBeMember(args.type,{'none', 'stewart'})} = 'stewart'
|
||||
%% initializeFramesPositions
|
||||
args.H (1,1) double {mustBeNumeric, mustBePositive} = 95e-3 % Height of the nano-hexapod [m]
|
||||
args.MO_B (1,1) double {mustBeNumeric} = 150e-3 % Height of {B} w.r.t. {M} [m]
|
||||
@@ -14,7 +15,7 @@ function [nano_hexapod] = initializeSimplifiedNanoHexapod(args)
|
||||
%% Actuators
|
||||
args.actuator_type char {mustBeMember(args.actuator_type,{'1dof', '2dof', 'flexible'})} = '1dof'
|
||||
args.actuator_k (1,1) double {mustBeNumeric, mustBePositive} = 1e6
|
||||
args.actuator_kp (1,1) double {mustBeNumeric, mustBeNonnegative} = 1e4
|
||||
args.actuator_kp (1,1) double {mustBeNumeric, mustBeNonnegative} = 5e4
|
||||
args.actuator_ke (1,1) double {mustBeNumeric, mustBePositive} = 4952605
|
||||
args.actuator_ka (1,1) double {mustBeNumeric, mustBePositive} = 2476302
|
||||
args.actuator_c (1,1) double {mustBeNumeric, mustBePositive} = 50
|
||||
@@ -61,6 +62,13 @@ function [nano_hexapod] = initializeSimplifiedNanoHexapod(args)
|
||||
|
||||
stewart = initializeStewartPlatform();
|
||||
|
||||
switch args.type
|
||||
case 'none'
|
||||
stewart.type = 0;
|
||||
case 'stewart'
|
||||
stewart.type = 1;
|
||||
end
|
||||
|
||||
stewart = initializeFramesPositions(stewart, ...
|
||||
'H', args.H, ...
|
||||
'MO_B', args.MO_B);
|
||||
|
@@ -14,3 +14,5 @@
|
||||
|
||||
\makeindex
|
||||
\makeglossaries
|
||||
|
||||
\usepackage{bm}
|
||||
|
@@ -2,7 +2,6 @@
|
||||
\usepackage{enumitem}
|
||||
|
||||
\usepackage{caption,tabularx,booktabs}
|
||||
\usepackage{bm}
|
||||
|
||||
\usepackage{xpatch} % Recommanded for biblatex
|
||||
\usepackage[ % use biblatex for bibliography
|
||||
|
@@ -0,0 +1,28 @@
|
||||
@article{hauge04_sensor_contr_space_based_six,
|
||||
author = {G.S. Hauge and M.E. Campbell},
|
||||
title = {Sensors and Control of a Space-Based Six-Axis Vibration
|
||||
Isolation System},
|
||||
journal = {Journal of Sound and Vibration},
|
||||
volume = 269,
|
||||
number = {3-5},
|
||||
pages = {913-931},
|
||||
year = 2004,
|
||||
doi = {10.1016/s0022-460x(03)00206-2},
|
||||
url = {https://doi.org/10.1016/s0022-460x(03)00206-2},
|
||||
keywords = {parallel robot, favorite},
|
||||
}
|
||||
|
||||
|
||||
|
||||
@article{preumont08_trans_zeros_struc_contr_with,
|
||||
author = {Preumont, Andr{\'e} and De Marneffe, Bruno and Krenk,
|
||||
Steen},
|
||||
title = {Transmission Zeros in Structural Control With Collocated
|
||||
Multi-Input/multi-Output Pairs},
|
||||
journal = {Journal of guidance, control, and dynamics},
|
||||
volume = 31,
|
||||
number = 2,
|
||||
pages = {428--432},
|
||||
year = 2008,
|
||||
}
|
||||
|
||||
|
2480
simscape-nass.org
@@ -1,4 +1,4 @@
|
||||
% Created 2025-02-12 Wed 11:34
|
||||
% Created 2025-04-16 Wed 12:11
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
pdftitle={Simscape Model - Nano Active Stabilization System},
|
||||
pdfkeywords={},
|
||||
pdfsubject={},
|
||||
pdfcreator={Emacs 29.4 (Org mode 9.6)},
|
||||
pdfcreator={Emacs 30.1 (Org mode 9.7.26)},
|
||||
pdflang={English}}
|
||||
\usepackage{biblatex}
|
||||
|
||||
@@ -23,158 +23,483 @@
|
||||
\tableofcontents
|
||||
|
||||
\clearpage
|
||||
The previous chapters have established crucial foundational elements for the development of the Nano Active Stabilization System (NASS).
|
||||
The uniaxial model study demonstrated that very stiff nano-hexapod configurations should be avoided due to their high coupling with the micro-station dynamics.
|
||||
A rotating three-degree-of-freedom model revealed that soft nano-hexapod designs prove unsuitable due to gyroscopic effect induced by the spindle rotation.
|
||||
To further improve the model accuracy, a multi-body model of the micro-station was developed, which was carefully tuned using experimental modal analysis.
|
||||
Furthermore, a multi-body model of the nano-hexapod was created, that can then be seamlessly integrated with the micro-station model, as illustrated in Figure \ref{fig:nass_simscape_model}.
|
||||
|
||||
From last sections:
|
||||
\begin{itemize}
|
||||
\item Uniaxial: No stiff nano-hexapod (should also demonstrate that here)
|
||||
\item Rotating: No soft nano-hexapod, Decentralized IFF can be used robustly by adding parallel stiffness
|
||||
\end{itemize}
|
||||
|
||||
In this section:
|
||||
\begin{itemize}
|
||||
\item Take the model of the nano-hexapod with stiffness 1um/N
|
||||
\item Apply decentralized IFF
|
||||
\item Apply HAC-LAC
|
||||
\item Check robustness to payload change
|
||||
\item Simulation of experiments
|
||||
\end{itemize}
|
||||
|
||||
\begin{table}[htbp]
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\begin{tabularx}{0.6\linewidth}{lX}
|
||||
\toprule
|
||||
\textbf{Sections} & \textbf{Matlab File}\\
|
||||
\midrule
|
||||
Section \ref{sec:nass_1_a} & \texttt{nass\_1\_.m}\\
|
||||
\bottomrule
|
||||
\end{tabularx}
|
||||
\caption{\label{tab:nass_section_matlab_code}Report sections and corresponding Matlab files}
|
||||
\includegraphics[h!tbp,width=0.8\linewidth]{figs/nass_simscape_model.jpg}
|
||||
\caption{\label{fig:nass_simscape_model}3D view of the NASS multi-body model}
|
||||
\end{figure}
|
||||
|
||||
\end{table}
|
||||
Building upon these foundations, this chapter presents the validation of the NASS concept.
|
||||
The investigation begins with the previously established nano-hexapod model with actuator stiffness \(k_a = 1\,N/\mu m\).
|
||||
A thorough examination of the control kinematics is presented in Section \ref{sec:nass_kinematics}, detailing how both external metrology and nano-hexapod internal sensors are used in the control architecture.
|
||||
The control strategy is then implemented in two steps: first, the decentralized IFF is used for active damping (Section \ref{sec:nass_active_damping}), then a High Authority Control is develop to stabilize the sample's position in a large bandwidth (Section \ref{sec:nass_hac}).
|
||||
|
||||
The robustness of the proposed control scheme was evaluated under various operational conditions.
|
||||
Particular attention was paid to system performance under changing payload masses and varying spindle rotational velocities.
|
||||
|
||||
This chapter concludes the conceptual design phase, with the simulation of tomography experiments providing strong evidence for the viability of the proposed NASS architecture.
|
||||
\chapter{Control Kinematics}
|
||||
\label{sec:nass_kinematics}
|
||||
\begin{itemize}
|
||||
\item Explain how the position error can be expressed in the frame of the nano-hexapod
|
||||
\item[{$\square$}] \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/positioning\_error.org}{positioning\_error}: Explain how the NASS control is made (computation of the wanted position, measurement of the sample position, computation of the errors)
|
||||
\item Control architecture, block diagram
|
||||
Figure \ref{fig:nass_concept_schematic} presents a schematic overview of the NASS.
|
||||
This section focuses on the components of the ``Instrumentation and Real-Time Control'' block.
|
||||
|
||||
\item Schematic with micro-station + nass + metrology + control system
|
||||
\item Zoom in the control system with blocs
|
||||
\item Then explain all the blocs
|
||||
\item Say that there are many control strategies.
|
||||
It will be the topic of chapter 2.3.
|
||||
Here, we start with something simple: control in the frame of the struts
|
||||
\end{itemize}
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[h!tbp]{figs/nass_concept_schematic.png}
|
||||
\caption{\label{fig:nass_concept_schematic}Schematic of the Nano Active Stabilization System}
|
||||
\end{figure}
|
||||
|
||||
As established in the previous section on Stewart platforms, the proposed control strategy combines Decentralized Integral Force Feedback with a High Authority Controller performed in the frame of the struts.
|
||||
|
||||
For the Nano Active Stabilization System, computing the positioning errors in the frame of the struts involves three key steps.
|
||||
First, desired sample pose with respect to a fixed reference frame is computed using the micro-station kinematics as detailed in Section \ref{ssec:nass_ustation_kinematics}.
|
||||
This fixed frame is located at the X-ray beam focal point, as it is where the point of interest needs to be positioned.
|
||||
Second, it measures the actual sample pose relative to the same fix frame, described in Section \ref{ssec:nass_sample_pose_error}.
|
||||
Finally, it determines the sample pose error and maps these errors to the nano-hexapod struts, as explained in Section \ref{ssec:nass_error_struts}.
|
||||
|
||||
The complete control architecture is described in Section \ref{ssec:nass_control_architecture}.
|
||||
\section{Micro Station Kinematics}
|
||||
\label{ssec:nass_ustation_kinematics}
|
||||
|
||||
\begin{itemize}
|
||||
\item from \ref{ssec:ustation_kinematics}, computation of the wanted sample pose from the setpoint of each stage.
|
||||
\end{itemize}
|
||||
The micro-station kinematics enables the computation of the desired sample pose from the reference signals of each micro-station stage.
|
||||
These reference signals consist of the desired lateral position \(r_{D_y}\), tilt angle \(r_{R_y}\), and spindle angle \(r_{R_z}\).
|
||||
The micro-hexapod pose is defined by six parameters: three translations (\(r_{D_{\mu x}}\), \(r_{D_{\mu y}}\), \(r_{D_{\mu z}}\)) and three rotations (\(r_{\theta_{\mu x}}\), \(r_{\theta_{\mu y}}\), \(r_{\theta_{\mu z}}\)).
|
||||
|
||||
Using these reference signals, the desired sample position relative to the fixed frame is expressed through the homogeneous transformation matrix \(\bm{T}_{\mu\text{-station}}\), as defined in equation \eqref{eq:nass_sample_ref}.
|
||||
|
||||
\begin{equation}\label{eq:nass_sample_ref}
|
||||
\bm{T}_{\mu\text{-station}} = \bm{T}_{D_y} \cdot \bm{T}_{R_y} \cdot \bm{T}_{R_z} \cdot \bm{T}_{\mu\text{-hexapod}}
|
||||
\end{equation}
|
||||
|
||||
\begin{equation}\label{eq:nass_ustation_matrices}
|
||||
\begin{align}
|
||||
\bm{T}_{D_y} &= \begin{bmatrix}
|
||||
1 & 0 & 0 & 0 \\
|
||||
0 & 1 & 0 & r_{D_y} \\
|
||||
0 & 0 & 1 & 0 \\
|
||||
0 & 0 & 0 & 1
|
||||
\end{bmatrix} \quad
|
||||
\bm{T}_{\mu\text{-hexapod}} =
|
||||
\left[ \begin{array}{ccc|c}
|
||||
& & & r_{D_{\mu x}} \\
|
||||
& \bm{R}_x(r_{\theta_{\mu x}}) \bm{R}_y(r_{\theta_{\mu y}}) \bm{R}_{z}(r_{\theta_{\mu z}}) & & r_{D_{\mu y}} \\
|
||||
& & & r_{D_{\mu z}} \cr
|
||||
\hline
|
||||
0 & 0 & 0 & 1
|
||||
\end{array} \right] \\
|
||||
\bm{T}_{R_z} &= \begin{bmatrix}
|
||||
\cos(r_{R_z}) & -\sin(r_{R_z}) & 0 & 0 \\
|
||||
\sin(r_{R_z}) & \cos(r_{R_z}) & 0 & 0 \\
|
||||
0 & 0 & 1 & 0 \\
|
||||
0 & 0 & 0 & 1
|
||||
\end{bmatrix} \quad
|
||||
\bm{T}_{R_y} = \begin{bmatrix}
|
||||
\cos(r_{R_y}) & 0 & \sin(r_{R_y}) & 0 \\
|
||||
0 & 1 & 0 & 0 \\
|
||||
-\sin(r_{R_y}) & 0 & \cos(r_{R_y}) & 0 \\
|
||||
0 & 0 & 0 & 1
|
||||
\end{bmatrix}
|
||||
\end{align}
|
||||
\end{equation}
|
||||
\section{Computation of the sample's pose error}
|
||||
\label{ssec:nass_sample_pose_error}
|
||||
|
||||
From metrology (here supposed to be perfect 6-DoF), compute the sample's pose error.
|
||||
Has to invert the homogeneous transformation.
|
||||
The external metrology system measures the sample position relative to the fixed granite.
|
||||
Due to the system's symmetry, this metrology provides measurements for five degrees of freedom: three translations (\(D_x\), \(D_y\), \(D_z\)) and two rotations (\(R_x\), \(R_y\)).
|
||||
|
||||
\section{Position error in the frame of the nano-hexapod}
|
||||
The sixth degree of freedom (\(R_z\)) is still required to compute the errors in the frame of the nano-hexapod struts (i.e. to compute the nano-hexapod inverse kinematics).
|
||||
This \(R_z\) rotation is estimated by combining measurements from the spindle encoder and the nano-hexapod's internal metrology, which consists of relative motion sensors in each strut (note that the micro-hexapod is not used for \(R_z\) rotation, and is therefore ignored for \(R_z\) estimation).
|
||||
|
||||
Explain how to compute the errors in the frame of the struts (rotating)
|
||||
The measured sample pose is represented by the homogeneous transformation matrix \(\bm{T}_{\text{sample}}\), as shown in equation \eqref{eq:nass_sample_pose}.
|
||||
|
||||
\begin{equation}\label{eq:nass_sample_pose}
|
||||
\bm{T}_{\text{sample}} =
|
||||
\left[ \begin{array}{ccc|c}
|
||||
& & & D_{x} \\
|
||||
& \bm{R}_x(R_{x}) \bm{R}_y(R_{y}) \bm{R}_{z}(R_{z}) & & D_{y} \\
|
||||
& & & D_{z} \cr
|
||||
\hline
|
||||
0 & 0 & 0 & 1
|
||||
\end{array} \right]
|
||||
\end{equation}
|
||||
\section{Position error in the frame of the struts}
|
||||
\label{ssec:nass_error_struts}
|
||||
|
||||
The homogeneous transformation formalism enables straightforward computation of the sample position error.
|
||||
This computation involves the previously computed homogeneous \(4 \times 4\) matrices: \(\bm{T}_{\mu\text{-station}}\) representing the desired pose, and \(\bm{T}_{\text{sample}}\) representing the measured pose.
|
||||
Their combination yields \(\bm{T}_{\text{error}}\), which expresses the position error of the sample in the frame of the rotating nano-hexapod, as shown in equation \eqref{eq:nass_transformation_error}.
|
||||
|
||||
\begin{equation}\label{eq:nass_transformation_error}
|
||||
\bm{T}_{\text{error}} = \bm{T}_{\mu\text{-station}}^{-1} \cdot \bm{T}_{\text{sample}}
|
||||
\end{equation}
|
||||
|
||||
The known structure of the homogeneous transformation matrix facilitates efficient real-time inverse computation.
|
||||
From \(\bm{T}_{\text{error}}\), the position and orientation errors \(\bm{\epsilon}_{\mathcal{X}} = [\epsilon_{D_x},\ \epsilon_{D_y},\ \epsilon_{D_z},\ \epsilon_{R_x},\ \epsilon_{R_y},\ \epsilon_{R_z}]\) of the sample are extracted using equation \eqref{eq:nass_compute_errors}:
|
||||
|
||||
\begin{equation}\label{eq:nass_compute_errors}
|
||||
\begin{align}
|
||||
\epsilon_{D_x} & = \bm{T}_{\text{error}}(1,4) \\
|
||||
\epsilon_{D_y} & = \bm{T}_{\text{error}}(2,4) \\
|
||||
\epsilon_{D_z} & = \bm{T}_{\text{error}}(3,4) \\
|
||||
\epsilon_{R_y} & = \text{atan2}(\bm{T}_{\text{error}}(1,3), \sqrt{\bm{T}_{\text{error}}(1,1)^2 + \bm{T}_{\text{error}}(1,2)^2}) \\
|
||||
\epsilon_{R_x} & = \text{atan2}(-\bm{T}_{\text{error}}(2,3)/\cos(\epsilon_{R_y}), \bm{T}_{\text{error}}(3,3)/\cos(\epsilon_{R_y})) \\
|
||||
\epsilon_{R_z} & = \text{atan2}(-\bm{T}_{\text{error}}(1,2)/\cos(\epsilon_{R_y}), \bm{T}_{\text{error}}(1,1)/\cos(\epsilon_{R_y})) \\
|
||||
\end{align}
|
||||
\end{equation}
|
||||
|
||||
Finally, these errors are mapped to the strut space using the nano-hexapod Jacobian matrix \eqref{eq:nass_inverse_kinematics}.
|
||||
|
||||
\begin{equation}\label{eq:nass_inverse_kinematics}
|
||||
\bm{\epsilon}_{\mathcal{L}} = \bm{J} \cdot \bm{\epsilon}_{\mathcal{X}}
|
||||
\end{equation}
|
||||
\section{Control Architecture - Summary}
|
||||
\label{ssec:nass_control_architecture}
|
||||
|
||||
The complete control architecture is summarized in Figure \ref{fig:nass_control_architecture}.
|
||||
The sample pose is measured using external metrology for five degrees of freedom, while the sixth degree of freedom (Rz) is estimated by combining measurements from the nano-hexapod encoders and spindle encoder.
|
||||
|
||||
The sample reference pose is determined by the reference signals of the translation stage, tilt stage, spindle, and micro-hexapod.
|
||||
The position error computation follows a two-step process: first, homogeneous transformation matrices are used to determine the error in the nano-hexapod frame.
|
||||
Then, the Jacobian matrix \(\bm{J}\) maps these errors to individual strut coordinates.
|
||||
|
||||
For control purposes, force sensors mounted on each strut are used in a decentralized manner for active damping, as detailed in Section \ref{sec:nass_active_damping}.
|
||||
Then, the high authority controller uses the computed errors in the frame of the struts to provides real-time stabilization of the sample position (Section \ref{sec:nass_hac}).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[h!tbp,width=\linewidth]{figs/nass_control_architecture.png}
|
||||
\caption{\label{fig:nass_control_architecture}Control architecture for the NASS. Physical systems are shown in blue, control kinematics elements in red, decentralized Integral Force Feedback controller in yellow, and centralized high authority controller in green.}
|
||||
\end{figure}
|
||||
\chapter{Decentralized Active Damping}
|
||||
\label{sec:nass_active_damping}
|
||||
\begin{itemize}
|
||||
\item How to apply/optimize IFF on an hexapod? ()
|
||||
\item Robustness to payload mass
|
||||
\item Root Locus
|
||||
\item Damping optimization
|
||||
|
||||
\item\relax [ ]\href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/control\_active\_damping.org}{control\_active\_damping}
|
||||
\item\relax [ ]\href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/control-active-damping.org}{active damping for stewart platforms}
|
||||
\item\relax [ ]\href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/stewart-simscape/org/bibliography.org}{Vibration Control and Active Damping}
|
||||
\end{itemize}
|
||||
Building on the uniaxial model study, this section implements decentralized Integral Force Feedback (IFF) as the first component of the HAC-LAC strategy.
|
||||
The springs in parallel to the force sensors were used to guarantee the control robustness, as observed with the 3DoF rotating model.
|
||||
The objective here is to design a decentralized IFF controller that provides good damping of the nano-hexapod modes across payload masses ranging from \(1\) to \(50\,\text{kg}\) and rotational velocity up to \(360\,\text{deg/s}\).
|
||||
The payloads used for validation have a cylindrical shape with 250 mm height and with masses of 1 kg, 25 kg, and 50 kg.
|
||||
\section{IFF Plant}
|
||||
\label{ssec:nass_active_damping_plant}
|
||||
|
||||
\begin{itemize}
|
||||
\item Show how it changes with the payload mass (1, 25, 50)
|
||||
\item Effect of rotation (1rpm, 60rpm)
|
||||
\end{itemize}
|
||||
Transfer functions from actuator forces \(f_i\) to force sensor measurements \(f_{mi}\) are computed using the multi-body model.
|
||||
Figure \ref{fig:nass_iff_plant_effect_kp} examines how parallel stiffness affects plant dynamics, with identification performed at maximum spindle velocity \(\Omega_z = 360\,\text{deg/s}\) and with a payload mass of 25 kg.
|
||||
|
||||
Without parallel stiffness (Figure \ref{fig:nass_iff_plant_no_kp}), the plant dynamics exhibits non-minimum phase zeros at low frequency, confirming predictions from the three-degree-of-freedom rotating model.
|
||||
Adding parallel stiffness (Figure \ref{fig:nass_iff_plant_kp}) transforms these into minimum phase complex conjugate zeros, enabling unconditionally stable decentralized IFF implementation.
|
||||
|
||||
Although both cases show significant coupling around the resonances, stability is guaranteed by the collocated arrangement of the actuators and sensors \cite{preumont08_trans_zeros_struc_contr_with}.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_iff_plant_no_kp.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_iff_plant_no_kp}without parallel stiffness}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_iff_plant_kp.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_iff_plant_kp}with parallel stiffness}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_iff_plant_effect_kp}Effect of stiffness parallel to the force sensor on the IFF plant with \(\Omega_z = 360\,\text{deg/s}\) and a payload mass of 25kg. The dynamics without parallel stiffness has non-minimum phase zeros at low frequency (\subref{fig:nass_iff_plant_no_kp}). The added parallel stiffness transforms the non-minimum phase zeros into complex conjugate zeros (\subref{fig:nass_iff_plant_kp})}
|
||||
\end{figure}
|
||||
|
||||
The effect of rotation, as shown in Figure \ref{fig:nass_iff_plant_effect_rotation}, is negligible as the actuator stiffness (\(k_a = 1\,N/\mu m\)) is large compared to the negative stiffness induced by gyroscopic effects (estimated from the 3DoF rotating model).
|
||||
|
||||
Figure \ref{fig:nass_iff_plant_effect_payload} illustrate the effect of payload mass on the plant dynamics.
|
||||
The poles and zeros shift in frequency as the payload mass varies.
|
||||
However, their alternating pattern is preserved, which ensures the phase remains bounded between 0 and 180 degrees, thus maintaining robust stability properties.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_iff_plant_effect_rotation.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_iff_plant_effect_rotation}Effect of Spindle rotation}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_iff_plant_effect_payload.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_iff_plant_effect_payload}Effect of payload mass}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_iff_plant_effect_rotation_payload}Effect of the Spindle's rotational velocity on the IFF plant (\subref{fig:nass_iff_plant_effect_rotation}) and effect of the payload's mass on the IFF plant (\subref{fig:nass_iff_plant_effect_payload})}
|
||||
\end{figure}
|
||||
\section{Controller Design}
|
||||
\label{ssec:nass_active_damping_control}
|
||||
|
||||
\begin{itemize}
|
||||
\item Apply IFF
|
||||
\item Show Root Locus
|
||||
\item Choose optimal gain.
|
||||
Here in MIMO, cannot have optimal damping for all modes. (there is a paper that tries to optimize that)
|
||||
\item Show robustness to change of payload (loci?)
|
||||
\item Reference to paper showing stability in MIMO for decentralized IFF
|
||||
\end{itemize}
|
||||
The previous analysis using the 3DoF rotating model showed that decentralized Integral Force Feedback (IFF) with pure integrators is unstable due to the gyroscopic effects caused by spindle rotation.
|
||||
This finding was also confirmed with the multi-body model of the NASS: the system was unstable when using pure integrators and without parallel stiffness.
|
||||
|
||||
\section{Sensitivity to disturbances}
|
||||
This instability can be mitigated by introducing sufficient stiffness in parallel with the force sensors.
|
||||
However, as illustrated in Figure \ref{fig:nass_iff_plant_kp}, adding parallel stiffness increases the low frequency gain.
|
||||
Using pure integrators would result in high loop gain at low frequencies, adversely affecting the damped plant dynamics, which is undesirable.
|
||||
To resolve this issue, a second-order high-pass filter is introduced to limit the low frequency gain, as shown in Equation \eqref{eq:nass_kiff}.
|
||||
|
||||
\begin{itemize}
|
||||
\item Compute transfer functions from spindle vertical error to sample vertical error with IFF (and compare without the NASS)
|
||||
\item Same for horizontal
|
||||
\item Maybe noise budgeting, but may be complex in MIMO\ldots{}
|
||||
\end{itemize}
|
||||
\begin{equation}\label{eq:nass_kiff}
|
||||
\bm{K}_{\text{IFF}}(s) = g \cdot \begin{bmatrix}
|
||||
K_{\text{IFF}}(s) & & 0 \\
|
||||
& \ddots & \\
|
||||
0 & & K_{\text{IFF}}(s)
|
||||
\end{bmatrix}, \quad K_{\text{IFF}}(s) = \frac{1}{s} \cdot \frac{\frac{s^2}{\omega_z^2}}{\frac{s^2}{\omega_z^2} + 2 \xi_z \frac{s}{\omega_z} + 1}
|
||||
\end{equation}
|
||||
|
||||
The cut-off frequency of the second-order high-pass filter was tuned to be below the frequency of the complex conjugate zero for the highest mass, which is at \(5\,\text{Hz}\).
|
||||
The overall gain was then increased to obtain a large loop gain around the resonances to be damped, as illustrated in Figure \ref{fig:nass_iff_loop_gain}.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[h!tbp]{figs/nass_iff_loop_gain.png}
|
||||
\caption{\label{fig:nass_iff_loop_gain}Loop gain for the decentralized IFF: \(K_{\text{IFF}}(s) \cdot \frac{f_{mi}}{f_i}(s)\)}
|
||||
\end{figure}
|
||||
|
||||
To verify stability, the root loci for the three payload configurations were computed, as shown in Figure \ref{fig:nass_iff_root_locus}.
|
||||
The results demonstrate that the closed-loop poles remain within the left-half plane, indicating the robust stability of the applied decentralized IFF.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.9\linewidth]{figs/nass_iff_root_locus_1kg.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_iff_root_locus_1kg} $1\,\text{kg}$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.9\linewidth]{figs/nass_iff_root_locus_25kg.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_iff_root_locus_25kg} $25\,\text{kg}$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.9\linewidth]{figs/nass_iff_root_locus_50kg.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_iff_root_locus_50kg} $50\,\text{kg}$}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_iff_root_locus}Root Loci for Decentralized IFF for three payload masses. The closed-loop poles are shown by the black crosses.}
|
||||
\end{figure}
|
||||
\chapter{Centralized Active Vibration Control}
|
||||
\label{sec:nass_hac}
|
||||
\begin{itemize}
|
||||
\item[{$\square$}] \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/matlab/nass-simscape/org/uncertainty\_experiment.org}{uncertainty\_experiment}: Effect of experimental conditions on the plant (payload mass, Ry position, Rz position, Rz velocity, etc\ldots{})
|
||||
\item Effect of micro-station compliance
|
||||
\item Effect of IFF
|
||||
\item Effect of payload mass
|
||||
\item Decoupled plant
|
||||
\item Controller design
|
||||
\end{itemize}
|
||||
The implementation of high-bandwidth position control for the nano-hexapod presents several technical challenges.
|
||||
The plant dynamics exhibits complex behavior influenced by multiple factors, including payload mass, rotational velocity, and the mechanical coupling between the nano-hexapod and the micro-station.
|
||||
This section presents the development and validation of a centralized control strategy designed to achieve precise sample positioning during high-speed tomography experiments.
|
||||
|
||||
From control kinematics:
|
||||
\begin{itemize}
|
||||
\item Talk about issue of not estimating Rz from external metrology? (maybe could be nice to discuss that during the experiments!)
|
||||
\item Show what happens is Rz is not estimated (for instance supposed equaled to zero => increased coupling)
|
||||
\end{itemize}
|
||||
First, a comprehensive analysis of the plant dynamics is presented in Section \ref{ssec:nass_hac_plant}, examining the effects of spindle rotation, payload mass variation, and the implementation of Integral Force Feedback (IFF).
|
||||
Section \ref{ssec:nass_hac_stiffness} validates previous modeling predictions that both overly stiff and compliant nano-hexapod configurations lead to degraded performance.
|
||||
Building upon these findings, Section \ref{ssec:nass_hac_controller} presents the design of a robust high-authority controller that maintains stability across varying payload masses while achieving the desired control bandwidth.
|
||||
|
||||
The performance of the developed control strategy was validated through simulations of tomography experiments in Section \ref{ssec:nass_hac_tomography}.
|
||||
These simulations included realistic disturbance sources and were used to evaluate the system performance against the stringent positioning requirements imposed by future beamline specifications.
|
||||
Particular attention was paid to the system's behavior under maximum rotational velocity conditions and its ability to accommodate varying payload masses, demonstrating the practical viability of the proposed control approach.
|
||||
\section{HAC Plant}
|
||||
\label{ssec:nass_hac_plant}
|
||||
|
||||
\begin{itemize}
|
||||
\item Compute transfer function from u to dL (with IFF applied)
|
||||
\end{itemize}
|
||||
The plant dynamics from force inputs \(\bm{f}\) to the strut errors \(\bm{\epsilon}_{\mathcal{L}}\) were first extracted from the multi-body model without the implementation of the decentralized IFF.
|
||||
The influence of spindle rotation on plant dynamics was investigated, and the results are presented in Figure \ref{fig:nass_undamped_plant_effect_Wz}.
|
||||
While rotational motion introduces coupling effects at low frequencies, these effects remain minimal at operational velocities, owing to the high stiffness characteristics of the nano-hexapod assembly.
|
||||
|
||||
\section{Effect of Payload mass}
|
||||
Payload mass emerged as a significant parameter affecting system behavior, as illustrated in Figure \ref{fig:nass_undamped_plant_effect_mass}.
|
||||
As expected, increasing the payload mass decreased the resonance frequencies while amplifying coupling at low frequency.
|
||||
These mass-dependent dynamic changes present considerable challenges for control system design, particularly for configurations with high payload masses.
|
||||
|
||||
\begin{itemize}
|
||||
\item Show effect of payload mass + rotation
|
||||
\end{itemize}
|
||||
Additional operational parameters were systematically evaluated, including the \(R_y\) tilt angle, \(R_z\) spindle position, and micro-hexapod position.
|
||||
These factors were found to exert negligible influence on the plant dynamics, which can be attributed to the effective mechanical decoupling achieved between the plant and micro-station dynamics.
|
||||
This decoupling characteristic ensures consistent performance across various operational configurations.
|
||||
This also validates the developed control strategy.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_undamped_plant_effect_Wz.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_undamped_plant_effect_Wz}Effect of rotational velocity $\Omega_z$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_undamped_plant_effect_mass.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_undamped_plant_effect_mass}Effect of payload's mass}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_undamped_plant_effect}Effect of the Spindle's rotational velocity on the positioning plant (\subref{fig:nass_undamped_plant_effect_Wz}) and effect of the payload's mass on the positioning plant (\subref{fig:nass_undamped_plant_effect_mass})}
|
||||
\end{figure}
|
||||
|
||||
The Decentralized Integral Force Feedback was implemented in the multi-body model, and transfer functions from force inputs \(\bm{f}^\prime\) of the damped plant to the strut errors \(\bm{\epsilon}_{\mathcal{L}}\) were extracted from this model.
|
||||
|
||||
The effectiveness of the IFF implementation was first evaluated with a \(1\,\text{kg}\) payload, as demonstrated in Figure \ref{fig:nass_comp_undamped_damped_plant_m1}.
|
||||
The results indicate successful damping of the nano-hexapod resonance modes, although a minor increase in low-frequency coupling was observed.
|
||||
This trade-off was considered acceptable, given the overall improvement in system behavior.
|
||||
|
||||
The benefits of IFF implementation were further assessed across the full range of payload configurations, and the results are presented in Figure \ref{fig:nass_hac_plants}.
|
||||
For all tested payloads (\(1\,\text{kg}\), \(25\,\text{kg}\) and \(50\,\text{kg}\)), the decentralized IFF significantly damped the nano-hexapod modes and therefore simplified the system dynamics.
|
||||
More importantly, in the vicinity of the desired high authority control bandwidth (i.e. between \(10\,\text{Hz}\) and \(50\,\text{Hz}\)), the damped dynamics (shown in red) exhibited minimal gain and phase variations with frequency.
|
||||
For the undamped plants (shown in blue), achieving robust control with bandwidth above 10Hz while maintaining stability across different payload masses would be practically impossible.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_comp_undamped_damped_plant_m1.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_comp_undamped_damped_plant_m1}Effect of IFF - $m = 1\,\text{kg}$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_hac_plants.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_hac_plants}Effect of IFF on the set of plants to control}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_hac_plant}Effect of Decentralized Integral Force Feedback on the positioning plant for a \(1\,\text{kg}\) sample mass (\subref{fig:nass_undamped_plant_effect_Wz}). The direct terms of the positioning plants for all considered payloads are shown in (\subref{fig:nass_undamped_plant_effect_mass}).}
|
||||
\end{figure}
|
||||
|
||||
The coupling between the nano-hexapod and the micro-station was evaluated through a comparative analysis of plant dynamics under two mounting conditions.
|
||||
In the first configuration, the nano-hexapod was mounted on an ideally rigid support, while in the second configuration, it was installed on the micro-station with finite compliance.
|
||||
|
||||
As illustrated in Figure \ref{fig:nass_effect_ustation_compliance}, the complex dynamics of the micro-station were found to have little impact on the plant dynamics.
|
||||
The only observable difference manifests as additional alternating poles and zeros above 100Hz, a frequency range sufficiently beyond the control bandwidth to avoid interference with the system performance.
|
||||
This result confirms effective dynamic decoupling between the nano-hexapod and the supporting micro-station structure.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[h!tbp]{figs/nass_effect_ustation_compliance.png}
|
||||
\caption{\label{fig:nass_effect_ustation_compliance}Effect of the micro-station limited compliance on the plant dynamics}
|
||||
\end{figure}
|
||||
\section{Effect of Nano-Hexapod Stiffness on System Dynamics}
|
||||
\label{ssec:nass_hac_stiffness}
|
||||
|
||||
The influence of nano-hexapod stiffness was investigated to validate earlier findings from simplified uniaxial and three-degree-of-freedom (3DoF) models.
|
||||
These models suggest that a moderate stiffness of approximately \(1\,N/\mu m\) would provide better performance than either very stiff or very soft configurations.
|
||||
|
||||
For the stiff nano-hexapod analysis, a system with an actuator stiffness of \(100\,N/\mu m\) was simulated with a \(25\,\text{kg}\) payload.
|
||||
The transfer function from \(\bm{f}\) to \(\bm{\epsilon}_{\mathcal{L}}\) was evaluated under two conditions: mounting on an infinitely rigid base and mounting on the micro-station.
|
||||
As shown in Figure \ref{fig:nass_stiff_nano_hexapod_coupling_ustation}, significant coupling was observed between the nano-hexapod and micro-station dynamics.
|
||||
This coupling introduces complex behavior that is difficult to model and predict accurately, thus corroborating the predictions of the simplified uniaxial model.
|
||||
|
||||
The soft nano-hexapod configuration was evaluated using a stiffness of \(0.01\,N/\mu m\) with a \(25\,\text{kg}\) payload.
|
||||
The dynamic response was characterized at three rotational velocities: 0, 36, and 360 deg/s.
|
||||
Figure \ref{fig:nass_soft_nano_hexapod_effect_Wz} demonstrates that rotation substantially affects system dynamics, manifesting as instability at high rotational velocities, increased coupling due to gyroscopic effects, and rotation-dependent resonance frequencies.
|
||||
The current approach of controlling the position in the strut frame is inadequate for soft nano-hexapods; but even shifting control to a frame matching the payload's center of mass would not overcome the substantial coupling and dynamic variations induced by gyroscopic effects.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_stiff_nano_hexapod_coupling_ustation.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_stiff_nano_hexapod_coupling_ustation}$k_a = 100\,N/\mu m$ - Coupling with the micro-station}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_soft_nano_hexapod_effect_Wz.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_soft_nano_hexapod_effect_Wz}$k_a = 0.01\,N/\mu m$ - Effect of Spindle rotation}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_soft_stiff_hexapod}Coupling between a stiff nano-hexapod (\(k_a = 100\,N/\mu m\)) and the micro-station (\subref{fig:nass_stiff_nano_hexapod_coupling_ustation}). Large effect of the spindle rotational velocity for a compliance (\(k_a = 0.01\,N/\mu m\)) nano-hexapod (\subref{fig:nass_soft_nano_hexapod_effect_Wz})}
|
||||
\end{figure}
|
||||
\section{Controller design}
|
||||
\label{ssec:nass_hac_controller}
|
||||
|
||||
\begin{itemize}
|
||||
\item Show robustness with Loci
|
||||
\end{itemize}
|
||||
A high authority controller was designed to meet two key requirements: stability for all payload masses (i.e. for all the damped plants of Figure \ref{fig:nass_hac_plants}), and achievement of sufficient bandwidth (targeted at 10Hz) for high performance operation.
|
||||
The controller structure is defined in Equation \eqref{eq:nass_robust_hac}, incorporating an integrator term for low frequency performance, a lead compensator for phase margin improvement, and a low-pass filter for robustness against high frequency modes.
|
||||
|
||||
\section{Sensitivity to disturbances}
|
||||
\begin{equation}\label{eq:nass_robust_hac}
|
||||
K_{\text{HAC}}(s) = g_0 \cdot \underbrace{\frac{\omega_c}{s}}_{\text{int}} \cdot \underbrace{\frac{1}{\sqrt{\alpha}}\frac{1 + \frac{s}{\omega_c/\sqrt{\alpha}}}{1 + \frac{s}{\omega_c\sqrt{\alpha}}}}_{\text{lead}} \cdot \underbrace{\frac{1}{1 + \frac{s}{\omega_0}}}_{\text{LPF}}, \quad \left( \omega_c = 2\pi10\,\text{rad/s},\ \alpha = 2,\ \omega_0 = 2\pi80\,\text{rad/s} \right)
|
||||
\end{equation}
|
||||
|
||||
\begin{itemize}
|
||||
\item Compute transfer functions from spindle vertical error to sample vertical error with HAC-IFF
|
||||
Compare without the NASS, and with just IFF
|
||||
\item Same for horizontal
|
||||
\item Maybe noise budgeting, but may be complex in MIMO\ldots{}
|
||||
\end{itemize}
|
||||
The controller performance was evaluated through two complementary analyses.
|
||||
First, the decentralized loop gain shown in Figure \ref{fig:nass_hac_loop_gain}, confirms the achievement of the desired 10Hz bandwidth.
|
||||
Second, the characteristic loci analysis presented in Figure \ref{fig:nass_hac_loci} demonstrates robustness for all payload masses, with adequate stability margins maintained throughout the operating envelope.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_hac_loop_gain.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_hac_loop_gain}Loop Gain}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/nass_hac_loci.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_hac_loci}Characteristic Loci}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_hac_controller}High Authority Controller - ``Diagonal Loop Gain'' (\subref{fig:nass_hac_loop_gain}) and Characteristic Loci (\subref{fig:nass_hac_loci})}
|
||||
\end{figure}
|
||||
\section{Tomography experiment}
|
||||
\label{ssec:nass_hac_tomography}
|
||||
|
||||
\begin{itemize}
|
||||
\item With HAC-IFF, perform tomography experiment, and compare with open-loop
|
||||
The Nano Active Stabilization System concept was validated through time-domain simulations of scientific experiments, with a particular focus on tomography scanning because of its demanding performance requirements.
|
||||
Simulations were conducted at the maximum operational rotational velocity of \(\Omega_z = 360\,\text{deg/s}\) to evaluate system performance under the most challenging conditions.
|
||||
|
||||
\item Take into account disturbances, metrology sensor noise. Maybe say here that we don't take in account other noise sources as they will be optimized latter (detail design phase)
|
||||
\item Tomography + lateral scans (same as what was done in open loop \href{file:///home/thomas/Cloud/work-projects/ID31-NASS/phd-thesis-chapters/A4-simscape-micro-station/simscape-micro-station.org}{here})
|
||||
\item Validation of concept
|
||||
\end{itemize}
|
||||
Performance metrics were established based on anticipated future beamline specifications, which specify a beam size of 200nm (horizontal) by 100nm (vertical).
|
||||
The primary requirement stipulates that the point of interest must remain within beam dimensions throughout operation.
|
||||
The simulation included two principal disturbance sources: ground motion and spindle vibrations.
|
||||
Additional noise sources, including measurement noise and electrical noise from DAC and voltage amplifiers, were not included in this analysis, as these parameters will be optimized during the detailed design phase.
|
||||
|
||||
\chapter{Conclusion}
|
||||
Figure \ref{fig:nass_tomo_1kg_60rpm} presents a comparative analysis of positioning errors under both open-loop and closed-loop conditions for a lightweight sample configuration (1kg).
|
||||
The results demonstrate the system's capability to maintain the sample's position within the specified beam dimensions, thus validating the fundamental concept of the stabilization system.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=0.9]{figs/nass_tomo_1kg_60rpm_xy.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_tomo_1kg_60rpm_xy}XY plane}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.48\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=0.9]{figs/nass_tomo_1kg_60rpm_yz.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_tomo_1kg_60rpm_yz}YZ plane}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_tomo_1kg_60rpm}Position error of the sample in the XY (\subref{fig:nass_tomo_1kg_60rpm_xy}) and YZ (\subref{fig:nass_tomo_1kg_60rpm_yz}) planes during a simulation of a tomography experiment at \(360\,\text{deg/s}\). 1kg payload is placed on top of the nano-hexapod.}
|
||||
\end{figure}
|
||||
|
||||
The robustness of the NASS to payload mass variation was evaluated through additional tomography scan simulations with 25 and 50kg payloads, complementing the initial 1kg test case.
|
||||
As illustrated in Figure \ref{fig:nass_tomography_hac_iff}, system performance exhibits some degradation with increasing payload mass, which is consistent with predictions from the control analysis.
|
||||
While the positioning accuracy for heavier payloads is outside the specified limits, it remains within acceptable bounds for typical operating conditions.
|
||||
|
||||
It should be noted that the maximum rotational velocity of 360deg/s is primarily intended for lightweight payload applications.
|
||||
For higher mass configurations, rotational velocities are expected to be below 36deg/s.
|
||||
|
||||
\begin{figure}[h!tbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=1]{figs/nass_tomography_hac_iff_m1.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_tomography_hac_iff_m1} $m = 1\,kg$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=1]{figs/nass_tomography_hac_iff_m25.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_tomography_hac_iff_m25} $m = 25\,kg$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=1]{figs/nass_tomography_hac_iff_m50.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:nass_tomography_hac_iff_m50} $m = 50\,kg$}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:nass_tomography_hac_iff}Simulation of tomography experiments - 360deg/s. Beam size is indicated by the dashed black ellipse}
|
||||
\end{figure}
|
||||
\chapter*{Conclusion}
|
||||
\label{sec:nass_conclusion}
|
||||
|
||||
The development and analysis presented in this chapter have successfully validated the Nano Active Stabilization System concept, marking the completion of the conceptual design phase.
|
||||
A comprehensive control strategy has been established, effectively combining external metrology with nano-hexapod sensor measurements to achieve precise position control.
|
||||
The control strategy implements a High Authority Control - Low Authority Control architecture - a proven approach that has been specifically adapted to meet the unique requirements of the rotating NASS.
|
||||
|
||||
The decentralized Integral Force Feedback component has been demonstrated to provide robust active damping under various operating conditions.
|
||||
The addition of parallel springs to the force sensors has been shown to ensure stability during spindle rotation.
|
||||
The centralized High Authority Controller, operating in the frame of the struts for simplicity, has successfully achieved the desired performance objectives of maintaining a bandwidth of \(10\,\text{Hz}\) while maintaining robustness against payload mass variations.
|
||||
This investigation has confirmed that the moderate actuator stiffness of \(1\,N/\mu m\) represents an adequate choice for the nano-hexapod, as both very stiff and very compliant configurations introduce significant performance limitations.
|
||||
|
||||
Simulations of tomography experiments have been performed, with positioning accuracy requirements defined by the expected minimum beam dimensions of \(200\,\text{nm}\) by \(100\,\text{nm}\).
|
||||
The system has demonstrated excellent performance at maximum rotational velocity with lightweight samples.
|
||||
While some degradation in positioning accuracy has been observed with heavier payloads, as anticipated by the control analysis, the overall performance remains sufficient to validate the fundamental concept of the NASS.
|
||||
|
||||
These results provide a solid foundation for advancing to the subsequent detailed design phase and experimental implementation.
|
||||
\printbibliography[heading=bibintoc,title={Bibliography}]
|
||||
\end{document}
|
||||
|