Compare commits
7 Commits
43057b35e9
...
master
Author | SHA1 | Date | |
---|---|---|---|
57ad5bf2e4 | |||
d84bbe471f | |||
fa7cb8c66f | |||
39a5950de7 | |||
133404907c | |||
e5358877c2 | |||
4b74249455 |
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
|
Before Width: | Height: | Size: 964 KiB After Width: | Height: | Size: 964 KiB |
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 122 KiB |
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 178 KiB |
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
@@ -114,6 +114,9 @@
|
|||||||
<path d="M 8.375 -6.359375 L 8.375 -6.828125 L 7.25 -6.796875 C 6.859375 -6.796875 6.34375 -6.796875 5.953125 -6.828125 L 5.953125 -6.359375 C 6.046875 -6.359375 6.828125 -6.359375 6.828125 -6.234375 C 6.828125 -6.203125 6.796875 -6.15625 6.78125 -6.125 L 4.78125 -1.59375 L 2.65625 -6.359375 L 3.59375 -6.359375 L 3.59375 -6.828125 C 3.21875 -6.796875 2.265625 -6.796875 1.828125 -6.796875 C 1.4375 -6.796875 0.609375 -6.796875 0.265625 -6.828125 L 0.265625 -6.359375 L 1.171875 -6.359375 L 3.921875 -0.171875 C 4 0 4.046875 0.078125 4.3125 0.078125 C 4.484375 0.078125 4.609375 0.078125 4.71875 -0.15625 L 7.359375 -6.140625 C 7.421875 -6.265625 7.46875 -6.359375 8.1875 -6.359375 Z M 8.375 -6.359375 "/>
|
<path d="M 8.375 -6.359375 L 8.375 -6.828125 L 7.25 -6.796875 C 6.859375 -6.796875 6.34375 -6.796875 5.953125 -6.828125 L 5.953125 -6.359375 C 6.046875 -6.359375 6.828125 -6.359375 6.828125 -6.234375 C 6.828125 -6.203125 6.796875 -6.15625 6.78125 -6.125 L 4.78125 -1.59375 L 2.65625 -6.359375 L 3.59375 -6.359375 L 3.59375 -6.828125 C 3.21875 -6.796875 2.265625 -6.796875 1.828125 -6.796875 C 1.4375 -6.796875 0.609375 -6.796875 0.265625 -6.828125 L 0.265625 -6.359375 L 1.171875 -6.359375 L 3.921875 -0.171875 C 4 0 4.046875 0.078125 4.3125 0.078125 C 4.484375 0.078125 4.609375 0.078125 4.71875 -0.15625 L 7.359375 -6.140625 C 7.421875 -6.265625 7.46875 -6.359375 8.1875 -6.359375 Z M 8.375 -6.359375 "/>
|
||||||
</g>
|
</g>
|
||||||
<g id="glyph-2-2">
|
<g id="glyph-2-2">
|
||||||
|
<path d="M 4.34375 -6.09375 C 4.34375 -6.515625 3.984375 -6.96875 3.21875 -6.96875 C 2.234375 -6.96875 1.171875 -6.546875 1.171875 -5.421875 L 1.171875 -4.421875 L 0.421875 -4.421875 L 0.421875 -3.953125 L 1.171875 -3.953125 L 1.171875 -0.46875 L 0.484375 -0.46875 L 0.484375 0 L 1.734375 -0.03125 C 2.109375 -0.03125 2.75 -0.03125 3.109375 0 L 3.109375 -0.46875 L 2.234375 -0.46875 L 2.234375 -3.953125 L 3.390625 -3.953125 L 3.390625 -4.421875 L 2.1875 -4.421875 L 2.1875 -5.421875 C 2.1875 -6.515625 2.9375 -6.609375 3.1875 -6.609375 C 3.234375 -6.609375 3.28125 -6.609375 3.359375 -6.59375 C 3.203125 -6.484375 3.125 -6.296875 3.125 -6.09375 C 3.125 -5.671875 3.46875 -5.484375 3.734375 -5.484375 C 4.03125 -5.484375 4.34375 -5.6875 4.34375 -6.09375 Z M 4.34375 -6.09375 "/>
|
||||||
|
</g>
|
||||||
|
<g id="glyph-2-3">
|
||||||
<path d="M 5.984375 0 L 5.984375 -0.46875 C 5.359375 -0.46875 5.296875 -0.46875 5.296875 -0.859375 L 5.296875 -6.90625 L 3.53125 -6.828125 L 3.53125 -6.359375 C 4.15625 -6.359375 4.21875 -6.359375 4.21875 -5.96875 L 4.21875 -4.03125 C 3.71875 -4.421875 3.203125 -4.484375 2.875 -4.484375 C 1.421875 -4.484375 0.375 -3.609375 0.375 -2.203125 C 0.375 -0.890625 1.296875 0.0625 2.765625 0.0625 C 3.375 0.0625 3.859375 -0.171875 4.15625 -0.421875 L 4.15625 0.0625 Z M 4.15625 -1.03125 C 4.03125 -0.84375 3.625 -0.296875 2.859375 -0.296875 C 1.65625 -0.296875 1.65625 -1.5 1.65625 -2.203125 C 1.65625 -2.671875 1.65625 -3.21875 1.90625 -3.609375 C 2.203125 -4.015625 2.671875 -4.125 2.96875 -4.125 C 3.546875 -4.125 3.9375 -3.796875 4.15625 -3.515625 Z M 4.15625 -1.03125 "/>
|
<path d="M 5.984375 0 L 5.984375 -0.46875 C 5.359375 -0.46875 5.296875 -0.46875 5.296875 -0.859375 L 5.296875 -6.90625 L 3.53125 -6.828125 L 3.53125 -6.359375 C 4.15625 -6.359375 4.21875 -6.359375 4.21875 -5.96875 L 4.21875 -4.03125 C 3.71875 -4.421875 3.203125 -4.484375 2.875 -4.484375 C 1.421875 -4.484375 0.375 -3.609375 0.375 -2.203125 C 0.375 -0.890625 1.296875 0.0625 2.765625 0.0625 C 3.375 0.0625 3.859375 -0.171875 4.15625 -0.421875 L 4.15625 0.0625 Z M 4.15625 -1.03125 C 4.03125 -0.84375 3.625 -0.296875 2.859375 -0.296875 C 1.65625 -0.296875 1.65625 -1.5 1.65625 -2.203125 C 1.65625 -2.671875 1.65625 -3.21875 1.90625 -3.609375 C 2.203125 -4.015625 2.671875 -4.125 2.96875 -4.125 C 3.546875 -4.125 3.9375 -3.796875 4.15625 -3.515625 Z M 4.15625 -1.03125 "/>
|
||||||
</g>
|
</g>
|
||||||
<g id="glyph-3-0">
|
<g id="glyph-3-0">
|
||||||
@@ -132,15 +135,12 @@
|
|||||||
<path d="M 4.421875 -7.265625 C 4.421875 -7.375 4.328125 -7.46875 4.21875 -7.46875 C 4.15625 -7.46875 4.078125 -7.4375 4.046875 -7.375 L 0.59375 2.109375 C 0.546875 2.234375 0.546875 2.296875 0.546875 2.296875 C 0.546875 2.40625 0.640625 2.484375 0.75 2.484375 C 0.875 2.484375 0.90625 2.421875 0.96875 2.25 L 4.375 -7.09375 C 4.421875 -7.21875 4.421875 -7.265625 4.421875 -7.265625 Z M 4.421875 -7.265625 "/>
|
<path d="M 4.421875 -7.265625 C 4.421875 -7.375 4.328125 -7.46875 4.21875 -7.46875 C 4.15625 -7.46875 4.078125 -7.4375 4.046875 -7.375 L 0.59375 2.109375 C 0.546875 2.234375 0.546875 2.296875 0.546875 2.296875 C 0.546875 2.40625 0.640625 2.484375 0.75 2.484375 C 0.875 2.484375 0.90625 2.421875 0.96875 2.25 L 4.375 -7.09375 C 4.421875 -7.21875 4.421875 -7.265625 4.421875 -7.265625 Z M 4.421875 -7.265625 "/>
|
||||||
</g>
|
</g>
|
||||||
<g id="glyph-4-2">
|
<g id="glyph-4-2">
|
||||||
<path d="M 5.09375 -4.046875 C 5.09375 -4.296875 4.875 -4.296875 4.6875 -4.296875 L 1.90625 -4.296875 C 1.703125 -4.296875 1.3125 -4.296875 0.875 -3.828125 C 0.546875 -3.46875 0.265625 -2.984375 0.265625 -2.921875 C 0.265625 -2.921875 0.265625 -2.828125 0.390625 -2.828125 C 0.46875 -2.828125 0.484375 -2.859375 0.546875 -2.953125 C 1.03125 -3.71875 1.609375 -3.71875 1.8125 -3.71875 L 2.640625 -3.71875 L 1.65625 -0.515625 C 1.625 -0.390625 1.5625 -0.1875 1.5625 -0.15625 C 1.5625 -0.046875 1.625 0.125 1.84375 0.125 C 2.1875 0.125 2.234375 -0.15625 2.265625 -0.3125 L 2.921875 -3.71875 L 4.59375 -3.71875 C 4.734375 -3.71875 5.09375 -3.71875 5.09375 -4.046875 Z M 5.09375 -4.046875 "/>
|
|
||||||
</g>
|
|
||||||
<g id="glyph-4-3">
|
|
||||||
<path d="M 8.765625 -6.6875 C 8.765625 -6.6875 8.765625 -6.796875 8.640625 -6.796875 C 8.3125 -6.796875 7.96875 -6.765625 7.640625 -6.765625 C 7.296875 -6.765625 6.953125 -6.796875 6.625 -6.796875 C 6.5625 -6.796875 6.4375 -6.796875 6.4375 -6.59375 C 6.4375 -6.484375 6.546875 -6.484375 6.625 -6.484375 C 7.1875 -6.484375 7.296875 -6.265625 7.296875 -6.046875 C 7.296875 -6.015625 7.28125 -5.875 7.265625 -5.84375 L 6.15625 -1.40625 L 3.953125 -6.609375 C 3.875 -6.78125 3.859375 -6.796875 3.640625 -6.796875 L 2.296875 -6.796875 C 2.09375 -6.796875 2.015625 -6.796875 2.015625 -6.59375 C 2.015625 -6.484375 2.09375 -6.484375 2.296875 -6.484375 C 2.34375 -6.484375 2.96875 -6.484375 2.96875 -6.40625 L 1.625 -1.0625 C 1.53125 -0.65625 1.359375 -0.34375 0.5625 -0.3125 C 0.5 -0.3125 0.390625 -0.296875 0.390625 -0.109375 C 0.390625 -0.046875 0.4375 0 0.515625 0 C 0.84375 0 1.1875 -0.03125 1.515625 -0.03125 C 1.84375 -0.03125 2.203125 0 2.53125 0 C 2.59375 0 2.71875 0 2.71875 -0.203125 C 2.71875 -0.296875 2.625 -0.3125 2.515625 -0.3125 C 1.9375 -0.328125 1.859375 -0.546875 1.859375 -0.75 C 1.859375 -0.8125 1.875 -0.859375 1.90625 -0.96875 L 3.21875 -6.234375 C 3.25 -6.171875 3.25 -6.15625 3.296875 -6.046875 L 5.78125 -0.1875 C 5.859375 -0.015625 5.875 0 5.96875 0 C 6.078125 0 6.078125 -0.03125 6.125 -0.203125 L 7.53125 -5.75 C 7.625 -6.15625 7.796875 -6.453125 8.59375 -6.484375 C 8.65625 -6.484375 8.765625 -6.5 8.765625 -6.6875 Z M 8.765625 -6.6875 "/>
|
<path d="M 8.765625 -6.6875 C 8.765625 -6.6875 8.765625 -6.796875 8.640625 -6.796875 C 8.3125 -6.796875 7.96875 -6.765625 7.640625 -6.765625 C 7.296875 -6.765625 6.953125 -6.796875 6.625 -6.796875 C 6.5625 -6.796875 6.4375 -6.796875 6.4375 -6.59375 C 6.4375 -6.484375 6.546875 -6.484375 6.625 -6.484375 C 7.1875 -6.484375 7.296875 -6.265625 7.296875 -6.046875 C 7.296875 -6.015625 7.28125 -5.875 7.265625 -5.84375 L 6.15625 -1.40625 L 3.953125 -6.609375 C 3.875 -6.78125 3.859375 -6.796875 3.640625 -6.796875 L 2.296875 -6.796875 C 2.09375 -6.796875 2.015625 -6.796875 2.015625 -6.59375 C 2.015625 -6.484375 2.09375 -6.484375 2.296875 -6.484375 C 2.34375 -6.484375 2.96875 -6.484375 2.96875 -6.40625 L 1.625 -1.0625 C 1.53125 -0.65625 1.359375 -0.34375 0.5625 -0.3125 C 0.5 -0.3125 0.390625 -0.296875 0.390625 -0.109375 C 0.390625 -0.046875 0.4375 0 0.515625 0 C 0.84375 0 1.1875 -0.03125 1.515625 -0.03125 C 1.84375 -0.03125 2.203125 0 2.53125 0 C 2.59375 0 2.71875 0 2.71875 -0.203125 C 2.71875 -0.296875 2.625 -0.3125 2.515625 -0.3125 C 1.9375 -0.328125 1.859375 -0.546875 1.859375 -0.75 C 1.859375 -0.8125 1.875 -0.859375 1.90625 -0.96875 L 3.21875 -6.234375 C 3.25 -6.171875 3.25 -6.15625 3.296875 -6.046875 L 5.78125 -0.1875 C 5.859375 -0.015625 5.875 0 5.96875 0 C 6.078125 0 6.078125 -0.03125 6.125 -0.203125 L 7.53125 -5.75 C 7.625 -6.15625 7.796875 -6.453125 8.59375 -6.484375 C 8.65625 -6.484375 8.765625 -6.5 8.765625 -6.6875 Z M 8.765625 -6.6875 "/>
|
||||||
</g>
|
</g>
|
||||||
<g id="glyph-4-4">
|
<g id="glyph-4-3">
|
||||||
<path d="M 3.5625 -0.390625 C 3.5625 -0.421875 3.546875 -0.53125 3.46875 -0.53125 C 3.46875 -0.53125 3.421875 -0.53125 3.328125 -0.484375 C 3.03125 -0.28125 2.65625 -0.109375 2.296875 -0.109375 C 1.71875 -0.109375 1.21875 -0.53125 1.21875 -1.40625 C 1.21875 -1.75 1.296875 -2.125 1.328125 -2.25 L 2.96875 -2.25 C 3.125 -2.25 3.296875 -2.25 3.296875 -2.421875 C 3.296875 -2.5625 3.1875 -2.5625 3.015625 -2.5625 L 1.40625 -2.5625 C 1.640625 -3.40625 2.203125 -3.984375 3.109375 -3.984375 L 3.40625 -3.984375 C 3.578125 -3.984375 3.75 -3.984375 3.75 -4.15625 C 3.75 -4.296875 3.609375 -4.296875 3.4375 -4.296875 L 3.09375 -4.296875 C 1.796875 -4.296875 0.46875 -3.296875 0.46875 -1.765625 C 0.46875 -0.671875 1.21875 0.109375 2.265625 0.109375 C 2.921875 0.109375 3.5625 -0.28125 3.5625 -0.390625 Z M 3.5625 -0.390625 "/>
|
<path d="M 3.5625 -0.390625 C 3.5625 -0.421875 3.546875 -0.53125 3.46875 -0.53125 C 3.46875 -0.53125 3.421875 -0.53125 3.328125 -0.484375 C 3.03125 -0.28125 2.65625 -0.109375 2.296875 -0.109375 C 1.71875 -0.109375 1.21875 -0.53125 1.21875 -1.40625 C 1.21875 -1.75 1.296875 -2.125 1.328125 -2.25 L 2.96875 -2.25 C 3.125 -2.25 3.296875 -2.25 3.296875 -2.421875 C 3.296875 -2.5625 3.1875 -2.5625 3.015625 -2.5625 L 1.40625 -2.5625 C 1.640625 -3.40625 2.203125 -3.984375 3.109375 -3.984375 L 3.40625 -3.984375 C 3.578125 -3.984375 3.75 -3.984375 3.75 -4.15625 C 3.75 -4.296875 3.609375 -4.296875 3.4375 -4.296875 L 3.09375 -4.296875 C 1.796875 -4.296875 0.46875 -3.296875 0.46875 -1.765625 C 0.46875 -0.671875 1.21875 0.109375 2.265625 0.109375 C 2.921875 0.109375 3.5625 -0.28125 3.5625 -0.390625 Z M 3.5625 -0.390625 "/>
|
||||||
</g>
|
</g>
|
||||||
<g id="glyph-4-5">
|
<g id="glyph-4-4">
|
||||||
<path d="M 8.4375 -1.421875 C 8.4375 -1.515625 8.34375 -1.515625 8.328125 -1.515625 C 8.21875 -1.515625 8.21875 -1.5 8.171875 -1.34375 C 8.015625 -0.8125 7.703125 -0.109375 7.15625 -0.109375 C 6.984375 -0.109375 6.921875 -0.203125 6.921875 -0.4375 C 6.921875 -0.6875 7 -0.921875 7.09375 -1.140625 C 7.28125 -1.65625 7.703125 -2.765625 7.703125 -3.328125 C 7.703125 -3.984375 7.3125 -4.40625 6.5625 -4.40625 C 5.8125 -4.40625 5.3125 -3.96875 4.9375 -3.4375 C 4.921875 -3.5625 4.890625 -3.90625 4.625 -4.140625 C 4.375 -4.34375 4.046875 -4.40625 3.796875 -4.40625 C 2.90625 -4.40625 2.421875 -3.765625 2.25 -3.53125 C 2.203125 -4.09375 1.78125 -4.40625 1.328125 -4.40625 C 0.875 -4.40625 0.6875 -4.015625 0.59375 -3.828125 C 0.421875 -3.484375 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.453125 -0.1875 1.578125 -0.65625 1.625 -0.90625 L 1.84375 -1.796875 C 1.90625 -2.015625 1.96875 -2.234375 2.015625 -2.46875 L 2.15625 -2.96875 C 2.296875 -3.28125 2.828125 -4.1875 3.765625 -4.1875 C 4.21875 -4.1875 4.3125 -3.8125 4.3125 -3.484375 C 4.3125 -3.234375 4.234375 -2.953125 4.15625 -2.65625 L 3.875 -1.5 C 3.78125 -1.140625 3.765625 -1.078125 3.6875 -0.75 C 3.640625 -0.546875 3.546875 -0.203125 3.546875 -0.15625 C 3.546875 0.015625 3.6875 0.109375 3.84375 0.109375 C 4.15625 0.109375 4.203125 -0.140625 4.296875 -0.453125 L 4.890625 -2.859375 C 4.921875 -2.984375 5.4375 -4.1875 6.53125 -4.1875 C 6.953125 -4.1875 7.0625 -3.84375 7.0625 -3.484375 C 7.0625 -2.921875 6.65625 -1.78125 6.453125 -1.25 C 6.359375 -1.015625 6.3125 -0.90625 6.3125 -0.703125 C 6.3125 -0.234375 6.671875 0.109375 7.140625 0.109375 C 8.078125 0.109375 8.4375 -1.34375 8.4375 -1.421875 Z M 8.4375 -1.421875 "/>
|
<path d="M 8.4375 -1.421875 C 8.4375 -1.515625 8.34375 -1.515625 8.328125 -1.515625 C 8.21875 -1.515625 8.21875 -1.5 8.171875 -1.34375 C 8.015625 -0.8125 7.703125 -0.109375 7.15625 -0.109375 C 6.984375 -0.109375 6.921875 -0.203125 6.921875 -0.4375 C 6.921875 -0.6875 7 -0.921875 7.09375 -1.140625 C 7.28125 -1.65625 7.703125 -2.765625 7.703125 -3.328125 C 7.703125 -3.984375 7.3125 -4.40625 6.5625 -4.40625 C 5.8125 -4.40625 5.3125 -3.96875 4.9375 -3.4375 C 4.921875 -3.5625 4.890625 -3.90625 4.625 -4.140625 C 4.375 -4.34375 4.046875 -4.40625 3.796875 -4.40625 C 2.90625 -4.40625 2.421875 -3.765625 2.25 -3.53125 C 2.203125 -4.09375 1.78125 -4.40625 1.328125 -4.40625 C 0.875 -4.40625 0.6875 -4.015625 0.59375 -3.828125 C 0.421875 -3.484375 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.453125 -0.1875 1.578125 -0.65625 1.625 -0.90625 L 1.84375 -1.796875 C 1.90625 -2.015625 1.96875 -2.234375 2.015625 -2.46875 L 2.15625 -2.96875 C 2.296875 -3.28125 2.828125 -4.1875 3.765625 -4.1875 C 4.21875 -4.1875 4.3125 -3.8125 4.3125 -3.484375 C 4.3125 -3.234375 4.234375 -2.953125 4.15625 -2.65625 L 3.875 -1.5 C 3.78125 -1.140625 3.765625 -1.078125 3.6875 -0.75 C 3.640625 -0.546875 3.546875 -0.203125 3.546875 -0.15625 C 3.546875 0.015625 3.6875 0.109375 3.84375 0.109375 C 4.15625 0.109375 4.203125 -0.140625 4.296875 -0.453125 L 4.890625 -2.859375 C 4.921875 -2.984375 5.4375 -4.1875 6.53125 -4.1875 C 6.953125 -4.1875 7.0625 -3.84375 7.0625 -3.484375 C 7.0625 -2.921875 6.65625 -1.78125 6.453125 -1.25 C 6.359375 -1.015625 6.3125 -0.90625 6.3125 -0.703125 C 6.3125 -0.234375 6.671875 0.109375 7.140625 0.109375 C 8.078125 0.109375 8.4375 -1.34375 8.4375 -1.421875 Z M 8.4375 -1.421875 "/>
|
||||||
</g>
|
</g>
|
||||||
<g id="glyph-5-0">
|
<g id="glyph-5-0">
|
||||||
@@ -319,10 +319,10 @@
|
|||||||
<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 -137.560529 0.000869966 L -119.514075 0.000869966 " transform="matrix(0.99959, 0, 0, -0.99959, 258.847936, 61.922745)"/>
|
<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 -137.560529 0.000869966 L -119.514075 0.000869966 " transform="matrix(0.99959, 0, 0, -0.99959, 258.847936, 61.922745)"/>
|
||||||
<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.051918 0.000869966 L 1.608692 1.681246 L 3.08586 0.000869966 L 1.608692 -1.683414 Z M 6.051918 0.000869966 " transform="matrix(0.99959, 0, 0, -0.99959, 136.54431, 61.922745)"/>
|
<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.051918 0.000869966 L 1.608692 1.681246 L 3.08586 0.000869966 L 1.608692 -1.683414 Z M 6.051918 0.000869966 " transform="matrix(0.99959, 0, 0, -0.99959, 136.54431, 61.922745)"/>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-2-0" x="127.090924" y="56.611921"/>
|
<use xlink:href="#glyph-2-1" x="125.943394" y="56.611921"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-5-0" x="133.453317" y="58.105309"/>
|
<use xlink:href="#glyph-5-0" x="134.600847" y="58.105309"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-3-0" x="125.878421" y="73.20812"/>
|
<use xlink:href="#glyph-3-0" x="125.878421" y="73.20812"/>
|
||||||
@@ -336,13 +336,13 @@
|
|||||||
<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 -79.868931 0.000869966 L -61.826384 0.000869966 " transform="matrix(0.99959, 0, 0, -0.99959, 258.847936, 61.922745)"/>
|
<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 -79.868931 0.000869966 L -61.826384 0.000869966 " transform="matrix(0.99959, 0, 0, -0.99959, 258.847936, 61.922745)"/>
|
||||||
<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.053627 0.000869966 L 1.610401 1.681246 L 3.087568 0.000869966 L 1.610401 -1.683414 Z M 6.053627 0.000869966 " transform="matrix(0.99959, 0, 0, -0.99959, 194.210571, 61.922745)"/>
|
<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.053627 0.000869966 L 1.610401 1.681246 L 3.087568 0.000869966 L 1.610401 -1.683414 Z M 6.053627 0.000869966 " transform="matrix(0.99959, 0, 0, -0.99959, 194.210571, 61.922745)"/>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-4-2" x="192.382171" y="58.105309"/>
|
<use xlink:href="#glyph-2-2" x="193.234821" y="58.105309"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-3-0" x="183.193936" y="73.20812"/>
|
<use xlink:href="#glyph-3-0" x="183.193936" y="73.20812"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-4-3" x="186.009782" y="73.20812"/>
|
<use xlink:href="#glyph-4-2" x="186.009782" y="73.20812"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-3-1" x="195.097058" y="73.20812"/>
|
<use xlink:href="#glyph-3-1" x="195.097058" y="73.20812"/>
|
||||||
@@ -350,13 +350,13 @@
|
|||||||
<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 57.191114 -25.810483 L 75.237568 -25.810483 " transform="matrix(0.99959, 0, 0, -0.99959, 258.847936, 61.922745)"/>
|
<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 57.191114 -25.810483 L 75.237568 -25.810483 " transform="matrix(0.99959, 0, 0, -0.99959, 258.847936, 61.922745)"/>
|
||||||
<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.052621 0.000796746 L 1.609395 1.681173 L 3.086562 0.000796746 L 1.609395 -1.683487 Z M 6.052621 0.000796746 " transform="matrix(0.99959, 0, 0, -0.99959, 331.215483, 87.723453)"/>
|
<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.052621 0.000796746 L 1.609395 1.681173 L 3.086562 0.000796746 L 1.609395 -1.683487 Z M 6.052621 0.000796746 " transform="matrix(0.99959, 0, 0, -0.99959, 331.215483, 87.723453)"/>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-4-4" x="330.824443" y="83.905737"/>
|
<use xlink:href="#glyph-4-3" x="330.824443" y="83.905737"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-3-0" x="320.540657" y="99.008549"/>
|
<use xlink:href="#glyph-3-0" x="320.540657" y="99.008549"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-4-5" x="323.356503" y="99.008549"/>
|
<use xlink:href="#glyph-4-4" x="323.356503" y="99.008549"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-3-1" x="332.099921" y="99.008549"/>
|
<use xlink:href="#glyph-3-1" x="332.099921" y="99.008549"/>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<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 57.191114 25.812223 L 75.237568 25.812223 " transform="matrix(0.99959, 0, 0, -0.99959, 258.847936, 61.922745)"/>
|
<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 57.191114 25.812223 L 75.237568 25.812223 " transform="matrix(0.99959, 0, 0, -0.99959, 258.847936, 61.922745)"/>
|
||||||
<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.052621 0.000943187 L 1.609395 1.681319 L 3.086562 0.000943187 L 1.609395 -1.68334 Z M 6.052621 0.000943187 " transform="matrix(0.99959, 0, 0, -0.99959, 331.215483, 36.122037)"/>
|
<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.052621 0.000943187 L 1.609395 1.681319 L 3.086562 0.000943187 L 1.609395 -1.68334 Z M 6.052621 0.000943187 " transform="matrix(0.99959, 0, 0, -0.99959, 331.215483, 36.122037)"/>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-2-2" x="324.227147" y="30.811493"/>
|
<use xlink:href="#glyph-2-3" x="324.227147" y="30.811493"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-5-2" x="330.58954" y="32.304881"/>
|
<use xlink:href="#glyph-5-2" x="330.58954" y="32.304881"/>
|
||||||
@@ -416,7 +416,7 @@
|
|||||||
<use xlink:href="#glyph-3-0" x="320.540657" y="47.407692"/>
|
<use xlink:href="#glyph-3-0" x="320.540657" y="47.407692"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-4-5" x="323.356503" y="47.407692"/>
|
<use xlink:href="#glyph-4-4" x="323.356503" y="47.407692"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-3-1" x="332.099921" y="47.407692"/>
|
<use xlink:href="#glyph-3-1" x="332.099921" y="47.407692"/>
|
||||||
@@ -430,7 +430,7 @@
|
|||||||
<use xlink:href="#glyph-4-1" x="413.163705" y="38.611297"/>
|
<use xlink:href="#glyph-4-1" x="413.163705" y="38.611297"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-2-2" x="443.170409" y="30.811493"/>
|
<use xlink:href="#glyph-2-3" x="443.170409" y="30.811493"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-5-2" x="449.532802" y="32.304881"/>
|
<use xlink:href="#glyph-5-2" x="449.532802" y="32.304881"/>
|
||||||
@@ -439,7 +439,7 @@
|
|||||||
<use xlink:href="#glyph-3-0" x="439.48392" y="47.407692"/>
|
<use xlink:href="#glyph-3-0" x="439.48392" y="47.407692"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-4-5" x="442.299766" y="47.407692"/>
|
<use xlink:href="#glyph-4-4" x="442.299766" y="47.407692"/>
|
||||||
</g>
|
</g>
|
||||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||||
<use xlink:href="#glyph-3-1" x="451.043183" y="47.407692"/>
|
<use xlink:href="#glyph-3-1" x="451.043183" y="47.407692"/>
|
||||||
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
@@ -1,6 +1,4 @@
|
|||||||
% Matlab Init :noexport:ignore:
|
%% test_nhexa_1_suspended_table.m
|
||||||
|
|
||||||
%% test_nhexa_table.m
|
|
||||||
|
|
||||||
%% Clear Workspace and Close figures
|
%% Clear Workspace and Close figures
|
||||||
clear; close all; clc;
|
clear; close all; clc;
|
||||||
@@ -28,25 +26,6 @@ colors = colororder;
|
|||||||
%% Frequency Vector
|
%% Frequency Vector
|
||||||
freqs = logspace(log10(10), log10(2e3), 1000);
|
freqs = logspace(log10(10), log10(2e3), 1000);
|
||||||
|
|
||||||
% Simscape Model of the suspended table
|
|
||||||
% <<ssec:test_nhexa_table_model>>
|
|
||||||
|
|
||||||
% The Simscape model of the suspended table simply consists of two solid bodies connected by 4 springs.
|
|
||||||
% The 4 springs are here modelled with "bushing joints" that have stiffness and damping properties in x, y and z directions.
|
|
||||||
% The 3D representation of the model is displayed in Figure ref:fig:test_nhexa_suspended_table_simscape where the 4 "bushing joints" are represented by the blue cylinders.
|
|
||||||
|
|
||||||
% #+name: fig:test_nhexa_suspended_table_simscape
|
|
||||||
% #+caption: 3D representation of the simscape model
|
|
||||||
% #+attr_latex: :width 0.8\linewidth
|
|
||||||
% [[file:figs/test_nhexa_suspended_table_simscape.png]]
|
|
||||||
|
|
||||||
% The model order is 12, and it represents the 6 suspension modes.
|
|
||||||
% The inertia properties of the parts are set from the geometry and material densities.
|
|
||||||
% The stiffness of the springs was initially set from the datasheet nominal value of $17.8\,N/mm$ and then reduced down to $14\,N/mm$ to better match the measured suspension modes.
|
|
||||||
% The stiffness of the springs in the horizontal plane is set at $0.5\,N/mm$.
|
|
||||||
% The obtained suspension modes of the simscape model are compared with the measured ones in Table ref:tab:test_nhexa_suspended_table_simscape_modes.
|
|
||||||
|
|
||||||
|
|
||||||
%% Configure Simscape Model
|
%% Configure Simscape Model
|
||||||
table_type = 'Suspended'; % On top of vibration table
|
table_type = 'Suspended'; % On top of vibration table
|
||||||
device_type = 'None'; % No device on the vibration table
|
device_type = 'None'; % No device on the vibration table
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
% Matlab Init :noexport:ignore:
|
%% test_nhexa_2_dynamics.m
|
||||||
|
% Identification of the nano-hexapod dynamics from u to de and to Vs
|
||||||
%% test_nhexa_dynamics.m
|
|
||||||
% Identification of the nano-hexapod dynamics from u to dL and to Vs
|
|
||||||
% Encoders are fixed to the plates
|
% Encoders are fixed to the plates
|
||||||
|
|
||||||
%% Clear Workspace and Close figures
|
%% Clear Workspace and Close figures
|
||||||
@@ -22,32 +20,11 @@ colors = colororder;
|
|||||||
%% Frequency Vector
|
%% Frequency Vector
|
||||||
freqs = logspace(log10(10), log10(2e3), 1000);
|
freqs = logspace(log10(10), log10(2e3), 1000);
|
||||||
|
|
||||||
% Identification of the dynamics
|
%% Identification of the transfer function from u to de and from u to Vs without payload
|
||||||
% <<ssec:test_nhexa_identification>>
|
% Load identification data
|
||||||
|
|
||||||
% The dynamics of the nano-hexapod from the six command signals ($u_1$ to $u_6$) the six measured displacement by the encoders ($d_{e1}$ to $d_{e6}$) and to the six force sensors ($V_{s1}$ to $V_{s6}$) are identified by generating a low pass filtered white noise for each of the command signals, one by one.
|
|
||||||
|
|
||||||
% The $6 \times 6$ FRF matrix from $\mathbf{u}$ ot $\mathbf{d}_e$ is shown in Figure ref:fig:test_nhexa_identified_frf_de.
|
|
||||||
% The diagonal terms are displayed using colorful lines, and all the 30 off-diagonal terms are displayed by grey lines.
|
|
||||||
|
|
||||||
% All the six diagonal terms are well superimposed up to at least $1\,kHz$, indicating good manufacturing and mounting uniformity.
|
|
||||||
% Below the first suspension mode, good decoupling can be observed (the amplitude of the all of off-diagonal terms are $\approx 20$ times smaller than the diagonal terms).
|
|
||||||
|
|
||||||
% From 10Hz up to 1kHz, around 10 resonance frequencies can be observed.
|
|
||||||
% The first 4 are suspension modes (at 122Hz, 143Hz, 165Hz and 191Hz) which correlate the modes measured during the modal analysis in Section ref:ssec:test_nhexa_enc_struts_modal_analysis.
|
|
||||||
% Then, three modes at 237Hz, 349Hz and 395Hz are attributed to the internal strut resonances (this will be checked in Section ref:ssec:test_nhexa_comp_model_coupling).
|
|
||||||
% Except the mode at 237Hz, their amplitude is rather low.
|
|
||||||
% Two modes at 665Hz and 695Hz are attributed to the flexible modes of the top platform.
|
|
||||||
% Other modes can be observed above 1kHz, which can be attributed to flexible modes of the encoder supports or to flexible modes of the top platform.
|
|
||||||
|
|
||||||
% Up to at least 1kHz, an alternating pole/zero pattern is observed, which renders the control easier to tune.
|
|
||||||
% This would not have been the case if the encoders were fixed to the struts.
|
|
||||||
|
|
||||||
|
|
||||||
%% Load identification data
|
|
||||||
load('test_nhexa_identification_data_mass_0.mat', 'data');
|
load('test_nhexa_identification_data_mass_0.mat', 'data');
|
||||||
|
|
||||||
%% Setup useful variables
|
% Setup useful variables
|
||||||
Ts = 1e-4; % Sampling Time [s]
|
Ts = 1e-4; % Sampling Time [s]
|
||||||
Nfft = floor(1/Ts); % Number of points for the FFT computation
|
Nfft = floor(1/Ts); % Number of points for the FFT computation
|
||||||
win = hanning(Nfft); % Hanning window
|
win = hanning(Nfft); % Hanning window
|
||||||
@@ -56,21 +33,21 @@ Noverlap = floor(Nfft/2); % Overlap between frequency analysis
|
|||||||
% And we get the frequency vector
|
% And we get the frequency vector
|
||||||
[~, f] = tfestimate(data{1}.u, data{1}.de, win, Noverlap, Nfft, 1/Ts);
|
[~, f] = tfestimate(data{1}.u, data{1}.de, win, Noverlap, Nfft, 1/Ts);
|
||||||
|
|
||||||
%% Transfer function from u to dLm
|
% Transfer function from u to de
|
||||||
G_de = zeros(length(f), 6, 6);
|
G_de = zeros(length(f), 6, 6);
|
||||||
|
|
||||||
for i = 1:6
|
for i = 1:6
|
||||||
G_de(:,:,i) = tfestimate(data{i}.u, data{i}.de, win, Noverlap, Nfft, 1/Ts);
|
G_de(:,:,i) = tfestimate(data{i}.u, data{i}.de, win, Noverlap, Nfft, 1/Ts);
|
||||||
end
|
end
|
||||||
|
|
||||||
%% Transfer function from u to Vs
|
% Transfer function from u to Vs
|
||||||
G_Vs = zeros(length(f), 6, 6);
|
G_Vs = zeros(length(f), 6, 6);
|
||||||
|
|
||||||
for i = 1:6
|
for i = 1:6
|
||||||
G_Vs(:,:,i) = tfestimate(data{i}.u, data{i}.Vs, win, Noverlap, Nfft, 1/Ts);
|
G_Vs(:,:,i) = tfestimate(data{i}.u, data{i}.Vs, win, Noverlap, Nfft, 1/Ts);
|
||||||
end
|
end
|
||||||
|
|
||||||
%% Bode plot for the transfer function from u to dLm
|
%% Bode plot for the transfer function from u to de
|
||||||
figure;
|
figure;
|
||||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||||
|
|
||||||
@@ -93,7 +70,7 @@ hold off;
|
|||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
||||||
ylim([1e-8, 5e-4]);
|
ylim([1e-8, 5e-4]);
|
||||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 4);
|
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 4);
|
||||||
leg.ItemTokenSize(1) = 15;
|
leg.ItemTokenSize(1) = 15;
|
||||||
|
|
||||||
ax2 = nexttile;
|
ax2 = nexttile;
|
||||||
@@ -111,20 +88,6 @@ yticks(-360:90:360);
|
|||||||
linkaxes([ax1,ax2],'x');
|
linkaxes([ax1,ax2],'x');
|
||||||
xlim([10, 2e3]);
|
xlim([10, 2e3]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% #+name: fig:test_nhexa_identified_frf_de
|
|
||||||
% #+caption: Measured FRF for the transfer function from $\mathbf{u}$ to $\mathbf{d}_e$. The 6 diagonal terms are the colorfull lines (all superimposed), and the 30 off-diagonal terms are the shaded black lines.
|
|
||||||
% #+RESULTS:
|
|
||||||
% [[file:figs/test_nhexa_identified_frf_de.png]]
|
|
||||||
|
|
||||||
|
|
||||||
% Similarly, the $6 \times 6$ FRF matrix from $\mathbf{u}$ to $\mathbf{V}_s$ is shown in Figure ref:fig:test_nhexa_identified_frf_Vs.
|
|
||||||
% Alternating poles and zeros is observed up to at least 2kHz, which is a necessary characteristics in order to apply decentralized IFF.
|
|
||||||
% Similar to what was observed for the encoder outputs, all the "diagonal" terms are well superimposed, indicating that the same controller can be applied for all the struts.
|
|
||||||
% The first flexible mode of the struts as 235Hz is appearing, and therefore is should be possible to add some damping to this mode using IFF.
|
|
||||||
|
|
||||||
|
|
||||||
%% Bode plot of the IFF Plant (transfer function from u to Vs)
|
%% Bode plot of the IFF Plant (transfer function from u to Vs)
|
||||||
figure;
|
figure;
|
||||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||||
@@ -166,29 +129,20 @@ yticks(-360:90:360);
|
|||||||
linkaxes([ax1,ax2],'x');
|
linkaxes([ax1,ax2],'x');
|
||||||
xlim([10, 2e3]);
|
xlim([10, 2e3]);
|
||||||
|
|
||||||
% Effect of payload mass on the dynamics
|
%% Set to true only if all the FRF matrices should again computed
|
||||||
% <<ssec:test_nhexa_added_mass>>
|
% from the experimental data
|
||||||
|
compute_frf = false;
|
||||||
|
if compute_frf
|
||||||
|
|
||||||
% As one major challenge in the control of the NASS is the wanted robustness to change of payload mass, it is necessary to understand how the dynamics of the nano-hexapod changes with a change of payload mass.
|
%% Identification of the FRF matrices from u to de and to Vs
|
||||||
|
% Load identification Data
|
||||||
% In order to study this change of dynamics with the payload mass, up to three "cylindrical masses" of $13\,kg$ each can be added for a total of $\approx 40\,kg$.
|
|
||||||
% These three cylindrical masses on top of the nano-hexapod are shown in Figure ref:fig:test_nhexa_table_mass_3.
|
|
||||||
|
|
||||||
% #+name: fig:test_nhexa_table_mass_3
|
|
||||||
% #+caption: Picture of the nano-hexapod with the added three cylindrical masses for a total of $\approx 40\,kg$
|
|
||||||
% #+attr_org: :width 800px
|
|
||||||
% #+attr_latex: :width 0.8\linewidth
|
|
||||||
% [[file:figs/test_nhexa_table_mass_3.jpg]]
|
|
||||||
|
|
||||||
|
|
||||||
%% Load identification Data
|
|
||||||
meas_added_mass = {...
|
meas_added_mass = {...
|
||||||
load('test_nhexa_identification_data_mass_0.mat', 'data'), ....
|
load('test_nhexa_identification_data_mass_0.mat', 'data'), ....
|
||||||
load('test_nhexa_identification_data_mass_1.mat', 'data'), ....
|
load('test_nhexa_identification_data_mass_1.mat', 'data'), ....
|
||||||
load('test_nhexa_identification_data_mass_2.mat', 'data'), ....
|
load('test_nhexa_identification_data_mass_2.mat', 'data'), ....
|
||||||
load('test_nhexa_identification_data_mass_3.mat', 'data')};
|
load('test_nhexa_identification_data_mass_3.mat', 'data')};
|
||||||
|
|
||||||
%% Setup useful variables
|
% Setup useful variables
|
||||||
Ts = 1e-4; % Sampling Time [s]
|
Ts = 1e-4; % Sampling Time [s]
|
||||||
Nfft = floor(1/Ts); % Number of points for the FFT computation
|
Nfft = floor(1/Ts); % Number of points for the FFT computation
|
||||||
win = hanning(Nfft); % Hanning window
|
win = hanning(Nfft); % Hanning window
|
||||||
@@ -197,6 +151,7 @@ Noverlap = floor(Nfft/2); % Overlap between frequency analysis
|
|||||||
% And we get the frequency vector
|
% And we get the frequency vector
|
||||||
[~, f] = tfestimate(meas_added_mass{1}.data{1}.u, meas_added_mass{1}.data{1}.de, win, Noverlap, Nfft, 1/Ts);
|
[~, f] = tfestimate(meas_added_mass{1}.data{1}.u, meas_added_mass{1}.data{1}.de, win, Noverlap, Nfft, 1/Ts);
|
||||||
|
|
||||||
|
% FRF from u to de
|
||||||
G_de = {};
|
G_de = {};
|
||||||
|
|
||||||
for i_mass = [0:3]
|
for i_mass = [0:3]
|
||||||
@@ -206,7 +161,7 @@ for i_mass = [0:3]
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
%% IFF Plant (transfer function from u to Vs)
|
% FRF from u to Vs
|
||||||
G_Vs = {};
|
G_Vs = {};
|
||||||
|
|
||||||
for i_mass = [0:3]
|
for i_mass = [0:3]
|
||||||
@@ -216,30 +171,15 @@ for i_mass = [0:3]
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
% The identified dynamics are then saved for further use.
|
||||||
save('./mat/test_nhexa_identified_frf_masses.mat', 'f', 'G_Vs', 'G_de')
|
save('./mat/test_nhexa_identified_frf_masses.mat', 'f', 'G_Vs', 'G_de')
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
%% Load the identified transfer functions
|
%% Load the identified transfer functions
|
||||||
frf_ol = load('test_nhexa_identified_frf_masses.mat', 'f', 'G_Vs', 'G_de');
|
frf_ol = load('test_nhexa_identified_frf_masses.mat', 'f', 'G_Vs', 'G_de');
|
||||||
|
|
||||||
|
%% Bode plot for the transfer function from u to de - Several payloads
|
||||||
|
|
||||||
% The obtained frequency response functions from actuator signal $u_i$ to the associated encoder $d_{ei}$ for the four payload conditions (no mass, 13kg, 26kg and 39kg) are shown in Figure ref:fig:test_nhexa_identified_frf_de_masses.
|
|
||||||
% As expected, the frequency of the suspension modes are decreasing with an increase of the payload mass.
|
|
||||||
% The low frequency gain does not change as it is linked to the stiffness property of the nano-hexapod, and not to its mass property.
|
|
||||||
|
|
||||||
% The frequencies of the two flexible modes of the top plate are first decreased a lot when the first mass is added (from $\approx 700\,Hz$ to $\approx 400\,Hz$).
|
|
||||||
% This is due to the fact that the added mass is composed of two half cylinders which are not fixed together.
|
|
||||||
% It therefore adds a lot of mass to the top plate without adding stiffness in one direction.
|
|
||||||
% When more than one "mass layer" is added, the half cylinders are added with some angles such that rigidity are added in all directions (see how the three mass "layers" are positioned in Figure ref:fig:test_nhexa_table_mass_3).
|
|
||||||
% In that case, the frequency of these flexible modes are increased.
|
|
||||||
% In practice, the payload should be one solid body, and no decrease of the frequency of this flexible mode should be observed.
|
|
||||||
% The apparent amplitude of the flexible mode of the strut at 237Hz becomes smaller as the payload mass is increased.
|
|
||||||
|
|
||||||
% The measured FRF from $u_i$ to $V_{si}$ are shown in Figure ref:fig:test_nhexa_identified_frf_Vs_masses.
|
|
||||||
% For all the tested payloads, the measured FRF always have alternating poles and zeros, indicating that IFF can be applied in a robust way.
|
|
||||||
|
|
||||||
|
|
||||||
%% Bode plot for the transfer function from u to dLm - Several payloads
|
|
||||||
masses = [0, 13, 26, 39];
|
masses = [0, 13, 26, 39];
|
||||||
figure;
|
figure;
|
||||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||||
@@ -286,7 +226,7 @@ ylim([-90, 180])
|
|||||||
linkaxes([ax1,ax2],'x');
|
linkaxes([ax1,ax2],'x');
|
||||||
xlim([10, 2e3]);
|
xlim([10, 2e3]);
|
||||||
|
|
||||||
%% Bode plot for the transfer function from u to dLm
|
%% Bode plot for the transfer function from u to de
|
||||||
figure;
|
figure;
|
||||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
% Matlab Init :noexport:ignore:
|
|
||||||
|
|
||||||
%% test_nhexa_3_model.m
|
%% test_nhexa_3_model.m
|
||||||
% Compare the measured dynamics from u to de and to Vs with the Simscape model
|
% Compare the measured dynamics from u to de and to Vs with the Simscape model
|
||||||
|
|
||||||
@@ -29,11 +27,9 @@ colors = colororder;
|
|||||||
%% Frequency Vector
|
%% Frequency Vector
|
||||||
freqs = logspace(log10(10), log10(2e3), 1000);
|
freqs = logspace(log10(10), log10(2e3), 1000);
|
||||||
|
|
||||||
% Extract transfer function matrices from the Simscape Model :noexport:
|
|
||||||
|
|
||||||
%% Set to true only if all the dynamics should again computed
|
%% Set to true only if all the dynamics should again computed
|
||||||
% from the simscape model
|
% from the simscape model
|
||||||
extract_simscape_dynamics = false
|
extract_simscape_dynamics = false;
|
||||||
if extract_simscape_dynamics
|
if extract_simscape_dynamics
|
||||||
|
|
||||||
%% Extract the transfer function matrix from the Simscape model
|
%% Extract the transfer function matrix from the Simscape model
|
||||||
@@ -98,28 +94,10 @@ if extract_simscape_dynamics
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
% Nano-Hexapod model dynamics
|
|
||||||
% <<ssec:test_nhexa_comp_model>>
|
|
||||||
|
|
||||||
|
|
||||||
%% Load Simscape Model and measured FRF
|
%% Load Simscape Model and measured FRF
|
||||||
sim_ol = load('test_nhexa_simscape_masses.mat', 'G_Vs', 'G_de');
|
sim_ol = load('test_nhexa_simscape_masses.mat', 'G_Vs', 'G_de');
|
||||||
frf_ol = load('test_nhexa_identified_frf_masses.mat', 'f', 'G_Vs', 'G_de');
|
frf_ol = load('test_nhexa_identified_frf_masses.mat', 'f', 'G_Vs', 'G_de');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% The Simscape model of the nano-hexapod is first configured with 4-DoF flexible joints, 2-DoF APA and rigid top and bottom platforms.
|
|
||||||
% The stiffness of the flexible joints are chosen based on the values estimated using the test bench and based on FEM.
|
|
||||||
% The parameters of the APA model are the ones determined from the test bench of the APA.
|
|
||||||
% The $6 \times 6$ transfer function matrices from $\mathbf{u}$ to $\mathbf{d}_e$ and from $\mathbf{u}$ to $\mathbf{V}_s$ are extracted then from the Simscape model.
|
|
||||||
|
|
||||||
% A first feature that should be checked is that the model well represents the "direct" terms of the measured FRF matrix.
|
|
||||||
% To do so, the diagonal terms of the extracted transfer function matrices are compared with the measured FRF in Figure ref:fig:test_nhexa_comp_simscape_diag.
|
|
||||||
% It can be seen that the 4 suspension modes of the nano-hexapod (at 122Hz, 143Hz, 165Hz and 191Hz) are well modelled.
|
|
||||||
% The three resonances that were attributed to "internal" flexible modes of the struts (at 237Hz, 349Hz and 395Hz) cannot be seen in the model, which is reasonable as the APA are here modelled as a simple uniaxial 2-DoF system.
|
|
||||||
% At higher frequencies, no resonances can be seen in the model, as the as the top plate and the encoder supports are modelled as rigid bodies.
|
|
||||||
|
|
||||||
|
|
||||||
%% Diagonal elements of the FRF matrix from u to de
|
%% Diagonal elements of the FRF matrix from u to de
|
||||||
figure;
|
figure;
|
||||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||||
@@ -194,15 +172,6 @@ yticks([-180, -90, 0, 90, 180]);
|
|||||||
linkaxes([ax1,ax2],'x');
|
linkaxes([ax1,ax2],'x');
|
||||||
xlim([freqs(1), freqs(end)]);
|
xlim([freqs(1), freqs(end)]);
|
||||||
|
|
||||||
% Modelling dynamical coupling
|
|
||||||
% <<ssec:test_nhexa_comp_model_coupling>>
|
|
||||||
|
|
||||||
% Another wanted feature of the model is that it well represents the coupling in the system as this is often the limiting factor for the control of MIMO systems.
|
|
||||||
% Instead of comparing the full 36 elements of the $6 \times 6$ FFR matrix from $\mathbf{u}$ to $\mathbf{d}_e$, only the first "column" is compared (Figure ref:fig:test_nhexa_comp_simscape_de_all), which corresponds to the transfer function from the command $u_1$ to the six measured encoder displacements $d_{e1}$ to $d_{e6}$.
|
|
||||||
% It can be seen that the coupling in the model is well matching the measurements up to the first un-modelled flexible mode at 237Hz.
|
|
||||||
% Similar results are observed for all the other coupling terms, as well as for the transfer function from $\mathbf{u}$ to $\mathbf{V}_s$.
|
|
||||||
|
|
||||||
|
|
||||||
%% Comparison of the plants (encoder output) when tuning the misalignment
|
%% Comparison of the plants (encoder output) when tuning the misalignment
|
||||||
i_input = 1;
|
i_input = 1;
|
||||||
|
|
||||||
@@ -273,20 +242,6 @@ xticks([50, 100, 200, 400])
|
|||||||
linkaxes([ax1,ax2,ax3,ax4,ax5,ax6],'xy');
|
linkaxes([ax1,ax2,ax3,ax4,ax5,ax6],'xy');
|
||||||
xlim([50, 5e2]); ylim([1e-8, 5e-4]);
|
xlim([50, 5e2]); ylim([1e-8, 5e-4]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% #+name: fig:test_nhexa_comp_simscape_de_all
|
|
||||||
% #+caption: Comparison of the measured (in blue) and modelled (in red) frequency transfer functions from the first control signal $u_1$ to the six encoders $d_{e1}$ to $d_{e6}$
|
|
||||||
% #+RESULTS:
|
|
||||||
% [[file:figs/test_nhexa_comp_simscape_de_all.png]]
|
|
||||||
|
|
||||||
% The APA300ML are then modelled with a /super-element/ extracted from a FE-software.
|
|
||||||
% The obtained transfer functions from $u_1$ to the six measured encoder displacements $d_{e1}$ to $d_{e6}$ are compared with the measured FRF in Figure ref:fig:test_nhexa_comp_simscape_de_all_flex.
|
|
||||||
% While the damping of the suspension modes for the /super-element/ is underestimated (which could be solved by properly tuning the proportional damping coefficients), the flexible modes of the struts at 237Hz and 349Hz are well modelled.
|
|
||||||
% Even the mode 395Hz can be observed in the model.
|
|
||||||
% Therefore, if the modes of the struts are to be modelled, the /super-element/ of the APA300ML may be used, at the cost of obtaining a much higher order model.
|
|
||||||
|
|
||||||
|
|
||||||
%% Load the plant model with Flexible APA
|
%% Load the plant model with Flexible APA
|
||||||
flex_ol = load('test_nhexa_simscape_flexible_masses.mat', 'G_Vs', 'G_de');
|
flex_ol = load('test_nhexa_simscape_flexible_masses.mat', 'G_Vs', 'G_de');
|
||||||
|
|
||||||
@@ -360,19 +315,6 @@ xticks([50, 100, 200, 400])
|
|||||||
linkaxes([ax1,ax2,ax3,ax4,ax5,ax6],'xy');
|
linkaxes([ax1,ax2,ax3,ax4,ax5,ax6],'xy');
|
||||||
xlim([50, 5e2]); ylim([1e-8, 5e-4]);
|
xlim([50, 5e2]); ylim([1e-8, 5e-4]);
|
||||||
|
|
||||||
% Modelling the effect of payload mass
|
|
||||||
% <<ssec:test_nhexa_comp_model_masses>>
|
|
||||||
|
|
||||||
% Another important characteristics of the model is that it should well represents the dynamics of the system for all considered payloads.
|
|
||||||
% The model dynamics is therefore compared with the measured dynamics for 4 payloads (no payload, 13kg, 26kg and 39kg) in Figure ref:fig:test_nhexa_comp_simscape_diag_masses.
|
|
||||||
% The observed shift to lower frequency of the suspension modes with an increased payload mass is well represented by the Simscape model.
|
|
||||||
% The complex conjugate zeros are also well matching with the experiments both for the encoder outputs (Figure ref:fig:test_nhexa_comp_simscape_de_diag_masses) and the force sensor outputs (Figure ref:fig:test_nhexa_comp_simscape_Vs_diag_masses).
|
|
||||||
|
|
||||||
% Note that the model displays smaller damping that what is observed experimentally for high values of the payload mass.
|
|
||||||
% One option could be to tune the damping as a function of the mass (similar to what is done with the Rayleigh damping).
|
|
||||||
% However, as decentralized IFF will be applied, the damping will be brought actively, and the open-loop damping value should have very little impact on the obtained plant.
|
|
||||||
|
|
||||||
|
|
||||||
%% Bode plot for the transfer function from u to de
|
%% Bode plot for the transfer function from u to de
|
||||||
masses = [0, 13, 26, 39];
|
masses = [0, 13, 26, 39];
|
||||||
figure;
|
figure;
|
||||||
@@ -389,7 +331,7 @@ for i_mass = [0:3]
|
|||||||
end
|
end
|
||||||
set(gca, 'ColorOrderIndex', i_mass+1)
|
set(gca, 'ColorOrderIndex', i_mass+1)
|
||||||
plot(freqs, abs(squeeze(freqresp(sim_ol.G_de{i_mass+1}(1,1), freqs, 'Hz'))), '--', ...
|
plot(freqs, abs(squeeze(freqresp(sim_ol.G_de{i_mass+1}(1,1), freqs, 'Hz'))), '--', ...
|
||||||
'DisplayName', 'Simscape');
|
'DisplayName', 'Model');
|
||||||
end
|
end
|
||||||
hold off;
|
hold off;
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
@@ -433,7 +375,7 @@ for i_mass = 0:3
|
|||||||
'HandleVisibility', 'off');
|
'HandleVisibility', 'off');
|
||||||
end
|
end
|
||||||
plot(freqs, abs(squeeze(freqresp(sim_ol.G_Vs{i_mass+1}(1,1), freqs, 'Hz'))), '--', 'color', colors(i_mass+1,:), ...
|
plot(freqs, abs(squeeze(freqresp(sim_ol.G_Vs{i_mass+1}(1,1), freqs, 'Hz'))), '--', 'color', colors(i_mass+1,:), ...
|
||||||
'DisplayName', 'Simscape');
|
'DisplayName', 'Model');
|
||||||
end
|
end
|
||||||
hold off;
|
hold off;
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
@@ -460,31 +402,6 @@ linkaxes([ax1,ax2],'x');
|
|||||||
xlim([20, 2e2]);
|
xlim([20, 2e2]);
|
||||||
xticks([20, 50, 100, 200])
|
xticks([20, 50, 100, 200])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% #+name: fig:test_nhexa_comp_simscape_diag_masses
|
|
||||||
% #+caption: Comparison of the diagonal elements (i.e. "direct" terms) of the measured FRF matrix and the identified dynamics from the Simscape model. Both for the dynamics from $u$ to $d_e$ (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from $u$ to $V_s$ (\subref{fig:test_nhexa_comp_simscape_Vs_diag})
|
|
||||||
% #+attr_latex: :options [htbp]
|
|
||||||
% #+begin_figure
|
|
||||||
% #+attr_latex: :caption \subcaption{\label{fig:test_nhexa_comp_simscape_de_diag_masses}from $u$ to $d_e$}
|
|
||||||
% #+attr_latex: :options {0.49\textwidth}
|
|
||||||
% #+begin_subfigure
|
|
||||||
% #+attr_latex: :width 0.95\linewidth
|
|
||||||
% [[file:figs/test_nhexa_comp_simscape_de_diag_masses.png]]
|
|
||||||
% #+end_subfigure
|
|
||||||
% #+attr_latex: :caption \subcaption{\label{fig:test_nhexa_comp_simscape_Vs_diag_masses}from $u$ to $V_s$}
|
|
||||||
% #+attr_latex: :options {0.49\textwidth}
|
|
||||||
% #+begin_subfigure
|
|
||||||
% #+attr_latex: :width 0.95\linewidth
|
|
||||||
% [[file:figs/test_nhexa_comp_simscape_Vs_diag_masses.png]]
|
|
||||||
% #+end_subfigure
|
|
||||||
% #+end_figure
|
|
||||||
|
|
||||||
% In order to also check if the model well represents the coupling when high payload masses are used, the transfer functions from $u_1$ to $d_{e1}$ to $d_{e6}$ are compared in the case of the 39kg payload in Figure ref:fig:test_nhexa_comp_simscape_de_all_high_mass.
|
|
||||||
% Excellent match between the experimental coupling and the model coupling is observed.
|
|
||||||
% The model therefore well represents the system dynamical coupling for different considered payloads.
|
|
||||||
|
|
||||||
|
|
||||||
%% Comparison of the plants (encoder output) when tuning the misalignment
|
%% Comparison of the plants (encoder output) when tuning the misalignment
|
||||||
i_input = 1;
|
i_input = 1;
|
||||||
|
|
||||||
|
@@ -14,3 +14,5 @@
|
|||||||
|
|
||||||
\makeindex
|
\makeindex
|
||||||
\makeglossaries
|
\makeglossaries
|
||||||
|
|
||||||
|
\usepackage{bm}
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
\usepackage{enumitem}
|
\usepackage{enumitem}
|
||||||
|
|
||||||
\usepackage{caption,tabularx,booktabs}
|
\usepackage{caption,tabularx,booktabs}
|
||||||
\usepackage{bm}
|
|
||||||
|
|
||||||
\usepackage{xpatch} % Recommanded for biblatex
|
\usepackage{xpatch} % Recommanded for biblatex
|
||||||
\usepackage[ % use biblatex for bibliography
|
\usepackage[ % use biblatex for bibliography
|
||||||
|
@@ -1,49 +0,0 @@
|
|||||||
@article{souleille18_concep_activ_mount_space_applic,
|
|
||||||
author = {Souleille, Adrien and Lampert, Thibault and Lafarga, V and
|
|
||||||
Hellegouarch, Sylvain and Rondineau, Alan and Rodrigues,
|
|
||||||
Gon{\c{c}}alo and Collette, Christophe},
|
|
||||||
title = {A Concept of Active Mount for Space Applications},
|
|
||||||
journal = {CEAS Space Journal},
|
|
||||||
volume = 10,
|
|
||||||
number = 2,
|
|
||||||
pages = {157--165},
|
|
||||||
year = 2018,
|
|
||||||
publisher = {Springer},
|
|
||||||
}
|
|
||||||
|
|
||||||
@phdthesis{poel10_explor_activ_hard_mount_vibrat,
|
|
||||||
author = {van der Poel, Gerrit Wijnand},
|
|
||||||
doi = {10.3990/1.9789036530163},
|
|
||||||
isbn = {978-90-365-3016-3},
|
|
||||||
keywords = {parallel robot},
|
|
||||||
school = {University of Twente},
|
|
||||||
title = {An Exploration of Active Hard Mount Vibration Isolation for
|
|
||||||
Precision Equipment},
|
|
||||||
year = 2010,
|
|
||||||
}
|
|
||||||
|
|
||||||
@book{indri20_mechat_robot,
|
|
||||||
author = {Indri, Marina and Oboe, Roberto},
|
|
||||||
title = {Mechatronics and Robotics: New Trends and Challenges},
|
|
||||||
year = 2020,
|
|
||||||
publisher = {CRC Press},
|
|
||||||
}
|
|
||||||
|
|
||||||
@book{skogestad07_multiv_feedb_contr,
|
|
||||||
author = {Skogestad, Sigurd and Postlethwaite, Ian},
|
|
||||||
title = {Multivariable Feedback Control: Analysis and Design -
|
|
||||||
Second Edition},
|
|
||||||
year = 2007,
|
|
||||||
publisher = {John Wiley},
|
|
||||||
isbn = {978-0470011683},
|
|
||||||
keywords = {favorite},
|
|
||||||
}
|
|
||||||
|
|
||||||
@article{oomen15_ident_robus_contr_compl_system,
|
|
||||||
author = {Oomen, Tom and Steinbuch, Maarten},
|
|
||||||
title = {Identification for Robust Control of Complex Systems:
|
|
||||||
Algorithm and Motion Application},
|
|
||||||
journal = {Control-oriented modelling and identification: theory and
|
|
||||||
applications, IET},
|
|
||||||
year = 2015,
|
|
||||||
}
|
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
#+BIND: org-latex-bib-compiler "biber"
|
#+BIND: org-latex-bib-compiler "biber"
|
||||||
|
|
||||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||||
#+PROPERTY: header-args:matlab+ :comments org
|
#+PROPERTY: header-args:matlab+ :comments no
|
||||||
#+PROPERTY: header-args:matlab+ :exports none
|
#+PROPERTY: header-args:matlab+ :exports none
|
||||||
#+PROPERTY: header-args:matlab+ :results none
|
#+PROPERTY: header-args:matlab+ :results none
|
||||||
#+PROPERTY: header-args:matlab+ :eval no-export
|
#+PROPERTY: header-args:matlab+ :eval no-export
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
* Notes :noexport:
|
* Notes :noexport:
|
||||||
|
** Notes
|
||||||
Prefix is =test_nhexa=
|
Prefix is =test_nhexa=
|
||||||
|
|
||||||
Add these documents:
|
Add these documents:
|
||||||
@@ -134,7 +134,12 @@ Maybe the rest is not so interesting here as it will be presented again in the n
|
|||||||
- High Authority Controller HAC
|
- High Authority Controller HAC
|
||||||
- Decoupling Strategy
|
- Decoupling Strategy
|
||||||
|
|
||||||
** TODO [#C] See if the FEM in Simscape can model the struts modes
|
** TODO [#B] Rework captions
|
||||||
|
|
||||||
|
** DONE [#C] See if the FEM in Simscape can model the struts modes
|
||||||
|
CLOSED: [2024-11-14 Thu 11:17]
|
||||||
|
Yes !
|
||||||
|
|
||||||
** TODO [#C] Add nice pictures
|
** TODO [#C] Add nice pictures
|
||||||
|
|
||||||
[[file:~/Cloud/pictures/work/nano-hexapod/vibration-table]]
|
[[file:~/Cloud/pictures/work/nano-hexapod/vibration-table]]
|
||||||
@@ -230,21 +235,21 @@ Prior to the nano-hexapod assembly, all the struts were mounted and individually
|
|||||||
In Section ref:sec:test_nhexa_mounting, the assembly procedure of the nano-hexapod is presented.
|
In Section ref:sec:test_nhexa_mounting, the assembly procedure of the nano-hexapod is presented.
|
||||||
|
|
||||||
To identify the dynamics of the nano-hexapod, a special suspended table was developed, which consisted of a stiff "optical breadboard" suspended on top of four soft springs.
|
To identify the dynamics of the nano-hexapod, a special suspended table was developed, which consisted of a stiff "optical breadboard" suspended on top of four soft springs.
|
||||||
The Nano-Hexapod was then fixed on top of the suspended table such that its dynamics is not affected by complex dynamics except from the suspension modes of the table that can be well characterized and modeled (Section ref:sec:test_nhexa_table).
|
The Nano-Hexapod was then mounted on top of the suspended table such that its dynamics is not affected by complex dynamics except from the suspension modes of the table that can be well characterized and modeled (Section ref:sec:test_nhexa_table).
|
||||||
|
|
||||||
The obtained nano-hexapod dynamics is analyzed in Section ref:sec:test_nhexa_dynamics, and compared with the Simscape model in Section ref:sec:test_nhexa_model.
|
The obtained nano-hexapod dynamics is analyzed in Section ref:sec:test_nhexa_dynamics, and compared with the multi-body model in Section ref:sec:test_nhexa_model.
|
||||||
|
|
||||||
* Nano-Hexapod Assembly Procedure
|
* Nano-Hexapod Assembly Procedure
|
||||||
<<sec:test_nhexa_mounting>>
|
<<sec:test_nhexa_mounting>>
|
||||||
The assembly of the nano-hexapod is critical for both avoiding additional stress in the flexible joints (that would result in a loss of stroke) and for the precisely determining the Jacobian matrix.
|
The assembly of the nano-hexapod is critical for both avoiding additional stress in the flexible joints (that would result in a loss of stroke) and for precisely determining the Jacobian matrix.
|
||||||
The goal was to fix the six struts to the two nano-hexapod plates (shown in Figure ref:fig:test_nhexa_nano_hexapod_plates) while the two plates were parallel and aligned vertically so that all the flexible joints did not experience any stress.
|
The goal was to fix the six struts to the two nano-hexapod plates (shown in Figure ref:fig:test_nhexa_nano_hexapod_plates) while the two plates were parallel and aligned vertically so that all the flexible joints did not experience any stress.
|
||||||
To do so, a precisely machined mounting tool (Figure ref:fig:test_nhexa_center_part_hexapod_mounting) is used to position the two nano-hexapod plates during the assembly procedure.
|
To do so, a precisely machined mounting tool (Figure ref:fig:test_nhexa_center_part_hexapod_mounting) is used to position the two nano-hexapod plates during the assembly procedure.
|
||||||
|
|
||||||
#+name: fig:test_nhexa_received_parts
|
#+name: fig:test_nhexa_received_parts
|
||||||
#+caption: Received Nano-Hexapod plates (\subref{fig:test_nhexa_nano_hexapod_plates}) and mounting tool used to position the two plates during assembly (\subref{fig:test_nhexa_center_part_hexapod_mounting})
|
#+caption: Nano-Hexapod plates (\subref{fig:test_nhexa_nano_hexapod_plates}) and mounting tool used to position the two plates during assembly (\subref{fig:test_nhexa_center_part_hexapod_mounting})
|
||||||
#+attr_latex: :options [htbp]
|
#+attr_latex: :options [htbp]
|
||||||
#+begin_figure
|
#+begin_figure
|
||||||
#+attr_latex: :caption \subcaption{\label{fig:test_nhexa_nano_hexapod_plates}Received top and bottom plates}
|
#+attr_latex: :caption \subcaption{\label{fig:test_nhexa_nano_hexapod_plates}Top and bottom plates}
|
||||||
#+attr_latex: :options {0.59\textwidth}
|
#+attr_latex: :options {0.59\textwidth}
|
||||||
#+begin_subfigure
|
#+begin_subfigure
|
||||||
#+attr_org: :width 800px
|
#+attr_org: :width 800px
|
||||||
@@ -260,13 +265,13 @@ To do so, a precisely machined mounting tool (Figure ref:fig:test_nhexa_center_p
|
|||||||
#+end_subfigure
|
#+end_subfigure
|
||||||
#+end_figure
|
#+end_figure
|
||||||
|
|
||||||
The mechanical tolerances of the received plates were checked using a FARO arm[fn:1] (Figure ref:fig:test_nhexa_plates_tolerances) and were found to comply with the requirements[fn:2].
|
The mechanical tolerances of the received plates were checked using a FARO arm[fn:test_nhexa_1] (Figure ref:fig:test_nhexa_plates_tolerances) and were found to comply with the requirements[fn:test_nhexa_2].
|
||||||
The same is done for the mounting tool[fn:3]
|
The same was done for the mounting tool[fn:test_nhexa_3].
|
||||||
The two plates were then fixed to the mounting tool, as shown in Figure ref:fig:test_nhexa_mounting_tool_hexapod_top_view.
|
The two plates were then fixed to the mounting tool, as shown in Figure ref:fig:test_nhexa_mounting_tool_hexapod_top_view.
|
||||||
The main goal of this "mounting tool" is to position the flexible joint interfaces (the "V" shapes) of both plates so that a cylinder can rest on the 4 flat interfaces at the same time.
|
The main goal of this "mounting tool" is to position the flexible joint interfaces (the "V" shapes) of both plates so that a cylinder can rest on the 4 flat interfaces at the same time.
|
||||||
|
|
||||||
#+name: fig:test_nhexa_dimensional_check
|
#+name: fig:test_nhexa_dimensional_check
|
||||||
#+caption: A Faro arm is used to dimensionally check the received parts (\subref{fig:test_nhexa_plates_tolerances}) and after mounting the two plates with the mounting part (\subref{fig:test_nhexa_mounting_tool_hexapod_top_view})
|
#+caption: A FARO arm is used to dimensionally check the received parts (\subref{fig:test_nhexa_plates_tolerances}) and after mounting the two plates with the mounting part (\subref{fig:test_nhexa_mounting_tool_hexapod_top_view})
|
||||||
#+attr_latex: :options [htbp]
|
#+attr_latex: :options [htbp]
|
||||||
#+begin_figure
|
#+begin_figure
|
||||||
#+attr_latex: :caption \subcaption{\label{fig:test_nhexa_plates_tolerances}Dimensional check of the bottom plate}
|
#+attr_latex: :caption \subcaption{\label{fig:test_nhexa_plates_tolerances}Dimensional check of the bottom plate}
|
||||||
@@ -288,7 +293,7 @@ The main goal of this "mounting tool" is to position the flexible joint interfac
|
|||||||
The quality of the positioning can be estimated by measuring the "straightness" of the top and bottom "V" interfaces.
|
The quality of the positioning can be estimated by measuring the "straightness" of the top and bottom "V" interfaces.
|
||||||
This corresponds to the diameter of the smallest cylinder which contains all points along the measured axis.
|
This corresponds to the diameter of the smallest cylinder which contains all points along the measured axis.
|
||||||
This was again done using the FARO arm, and the results for all six struts are summarized in Table ref:tab:measured_straightness.
|
This was again done using the FARO arm, and the results for all six struts are summarized in Table ref:tab:measured_straightness.
|
||||||
The straightness was found to be better than $15\,\mu m$ for all struts[fn:4], which is sufficiently good to not induce significant stress of the flexible joint during assembly.
|
The straightness was found to be better than $15\,\mu m$ for all struts[fn:test_nhexa_4], which is sufficiently good to not induce significant stress of the flexible joint during assembly.
|
||||||
|
|
||||||
#+name: tab:measured_straightness
|
#+name: tab:measured_straightness
|
||||||
#+caption: Measured straightness between the two "V" shapes for the six struts. These measurements were performed twice for each strut.
|
#+caption: Measured straightness between the two "V" shapes for the six struts. These measurements were performed twice for each strut.
|
||||||
@@ -349,13 +354,13 @@ This may results in additional modes appearing in the system dynamics, which are
|
|||||||
To prevent this issue, the strategy adopted here is to mount the nano-hexapod on top a suspended table with low frequency suspension modes.
|
To prevent this issue, the strategy adopted here is to mount the nano-hexapod on top a suspended table with low frequency suspension modes.
|
||||||
|
|
||||||
In this case, the modes of the suspended table were chosen to be at much lower frequency than those of the nano-hexapod such that good decoupling is obtained.
|
In this case, the modes of the suspended table were chosen to be at much lower frequency than those of the nano-hexapod such that good decoupling is obtained.
|
||||||
Another key advantage is that the suspension modes of the table can be easily modeled using Simscape.
|
Another key advantage is that the suspension modes of the table can be easily represented using a multi-body model.
|
||||||
Therefore, the measured dynamics of the nano-hexapod on top of the suspended table can be compared to a Simscape model representing the same experimental conditions.
|
Therefore, the measured dynamics of the nano-hexapod on top of the suspended table can be compared to a multi-body model representing the same experimental conditions.
|
||||||
The model of the Nano-Hexapod can thus be precisely tuned to match the measured dynamics.
|
The model of the Nano-Hexapod can thus be precisely tuned to match the measured dynamics.
|
||||||
|
|
||||||
The developed suspended table is described in Section ref:ssec:test_nhexa_table_setup.
|
The developed suspended table is described in Section ref:ssec:test_nhexa_table_setup.
|
||||||
The modal analysis of the table is done in ref:ssec:test_nhexa_table_identification.
|
The modal analysis of the table is done in ref:ssec:test_nhexa_table_identification.
|
||||||
Finally, the Simscape model representing the suspended table was tuned to match the measured modes (Section ref:ssec:test_nhexa_table_model).
|
Finally, the multi-body model representing the suspended table was tuned to match the measured modes (Section ref:ssec:test_nhexa_table_model).
|
||||||
|
|
||||||
** Matlab Init :noexport:ignore:
|
** Matlab Init :noexport:ignore:
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
@@ -390,8 +395,8 @@ Finally, the Simscape model representing the suspended table was tuned to match
|
|||||||
<<ssec:test_nhexa_table_setup>>
|
<<ssec:test_nhexa_table_setup>>
|
||||||
|
|
||||||
The design of the suspended table is quite straightforward.
|
The design of the suspended table is quite straightforward.
|
||||||
First, an optical table with high frequency flexible mode was selected[fn:5].
|
First, an optical table with high frequency flexible mode was selected[fn:test_nhexa_5].
|
||||||
Then, four springs[fn:6] were selected with low spring rate such that the suspension modes are below 10Hz.
|
Then, four springs[fn:test_nhexa_6] were selected with low spring rate such that the suspension modes are below 10Hz.
|
||||||
Finally, some interface elements were designed, and mechanical lateral mechanical stops were added (Figure ref:fig:test_nhexa_suspended_table_cad).
|
Finally, some interface elements were designed, and mechanical lateral mechanical stops were added (Figure ref:fig:test_nhexa_suspended_table_cad).
|
||||||
|
|
||||||
#+name: fig:test_nhexa_suspended_table_cad
|
#+name: fig:test_nhexa_suspended_table_cad
|
||||||
@@ -402,7 +407,7 @@ Finally, some interface elements were designed, and mechanical lateral mechanica
|
|||||||
** Modal analysis of the suspended table
|
** Modal analysis of the suspended table
|
||||||
<<ssec:test_nhexa_table_identification>>
|
<<ssec:test_nhexa_table_identification>>
|
||||||
|
|
||||||
In order to perform a modal analysis of the suspended table, a total of 15 3-axis accelerometers[fn:7] were fixed to the breadboard.
|
In order to perform a modal analysis of the suspended table, a total of 15 3-axis accelerometers[fn:test_nhexa_7] were fixed to the breadboard.
|
||||||
Using an instrumented hammer, the first 9 modes could be identified and are summarized in Table ref:tab:test_nhexa_suspended_table_modes.
|
Using an instrumented hammer, the first 9 modes could be identified and are summarized in Table ref:tab:test_nhexa_suspended_table_modes.
|
||||||
The first 6 modes are suspension modes (i.e. rigid body mode of the breadboard) and are located below 10Hz.
|
The first 6 modes are suspension modes (i.e. rigid body mode of the breadboard) and are located below 10Hz.
|
||||||
The next modes are the flexible modes of the breadboard as shown in Figure ref:fig:test_nhexa_table_flexible_modes, and are located above 700Hz.
|
The next modes are the flexible modes of the breadboard as shown in Figure ref:fig:test_nhexa_table_flexible_modes, and are located above 700Hz.
|
||||||
@@ -461,23 +466,17 @@ The next modes are the flexible modes of the breadboard as shown in Figure ref:f
|
|||||||
#+end_subfigure
|
#+end_subfigure
|
||||||
#+end_figure
|
#+end_figure
|
||||||
|
|
||||||
** Simscape Model of the suspended table
|
** Multi-body Model of the suspended table
|
||||||
<<ssec:test_nhexa_table_model>>
|
<<ssec:test_nhexa_table_model>>
|
||||||
|
|
||||||
The Simscape model of the suspended table consists simply of two solid bodies connected by 4 springs.
|
The multi-body model of the suspended table consists simply of two solid bodies connected by 4 springs.
|
||||||
The 4 springs are here modeled with "bushing joints" that have stiffness and damping properties in x, y, and z directions.
|
The 4 springs are here modeled with "bushing joints" that have stiffness and damping properties in x, y, and z directions.
|
||||||
The 3D representation of the model is shown in Figure ref:fig:test_nhexa_suspended_table_simscape where the 4 "bushing joints" are represented by blue cylinders.
|
|
||||||
|
|
||||||
#+name: fig:test_nhexa_suspended_table_simscape
|
|
||||||
#+caption: 3D representation of the simscape model
|
|
||||||
#+attr_latex: :width 0.8\linewidth
|
|
||||||
[[file:figs/test_nhexa_suspended_table_simscape.png]]
|
|
||||||
|
|
||||||
The model order is 12, which corresponds to the 6 suspension modes.
|
The model order is 12, which corresponds to the 6 suspension modes.
|
||||||
The inertia properties of the parts were determined from the geometry and material densities.
|
The inertia properties of the parts were determined from the geometry and material densities.
|
||||||
The stiffness of the springs was initially set from the datasheet nominal value of $17.8\,N/mm$ and then reduced down to $14\,N/mm$ to better match the measured suspension modes.
|
The stiffness of the springs was initially set from the datasheet nominal value of $17.8\,N/mm$ and then reduced down to $14\,N/mm$ to better match the measured suspension modes.
|
||||||
The stiffness of the springs in the horizontal plane is set at $0.5\,N/mm$.
|
The stiffness of the springs in the horizontal plane is set at $0.5\,N/mm$.
|
||||||
The obtained suspension modes of the Simscape model are compared with the measured modes in Table ref:tab:test_nhexa_suspended_table_simscape_modes.
|
The obtained suspension modes of the multi-body model are compared with the measured modes in Table ref:tab:test_nhexa_suspended_table_simscape_modes.
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% Configure Simscape Model
|
%% Configure Simscape Model
|
||||||
@@ -501,26 +500,13 @@ ws = ws(imag(ws) > 0);
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: tab:test_nhexa_suspended_table_simscape_modes
|
#+name: tab:test_nhexa_suspended_table_simscape_modes
|
||||||
#+caption: Comparison of the identified suspension modes with the Simscape model and measured experimentally
|
#+caption: Comparison of suspension modes of the multi-body model and the measured ones
|
||||||
#+attr_latex: :environment tabularx :width 0.6\linewidth :align Xcccc
|
#+attr_latex: :environment tabularx :width 0.6\linewidth :align Xcccc
|
||||||
#+attr_latex: :center t :booktabs t
|
#+attr_latex: :center t :booktabs t
|
||||||
| Directions | $D_x$, $D_y$ | $R_z$ | $D_z$ | $R_x$, $R_y$ |
|
| Directions | $D_x$, $D_y$ | $R_z$ | $D_z$ | $R_x$, $R_y$ |
|
||||||
|--------------+--------------+--------+--------+--------------|
|
|--------------+--------------+--------+--------+--------------|
|
||||||
|
| Multi-body | 1.3 Hz | 1.8 Hz | 6.8 Hz | 9.5 Hz |
|
||||||
| Experimental | 1.3 Hz | 2.0 Hz | 6.9 Hz | 9.5 Hz |
|
| Experimental | 1.3 Hz | 2.0 Hz | 6.9 Hz | 9.5 Hz |
|
||||||
| Simscape | 1.3 Hz | 1.8 Hz | 6.8 Hz | 9.5 Hz |
|
|
||||||
|
|
||||||
** Conclusion
|
|
||||||
:PROPERTIES:
|
|
||||||
:UNNUMBERED: t
|
|
||||||
:END:
|
|
||||||
|
|
||||||
In this section, a suspended table with low frequency suspension modes and high frequency flexible modes was presented.
|
|
||||||
This suspended table is used in Section ref:sec:test_nhexa_dynamics for dynamical identification of the Nano-Hexapod.
|
|
||||||
The objective is to accurately identify the dynamics of the nano-hexapod, isolated from complex support dynamics.
|
|
||||||
The key point of this strategy was the ability to accurately model the suspended table.
|
|
||||||
|
|
||||||
To do so, a modal analysis of the suspended table was performed in Section ref:ssec:test_nhexa_table_identification, validating the low frequency suspension modes and high frequency flexible modes.
|
|
||||||
Then, a multi-body model of this suspended table was tuned to match the measurements (Section ref:ssec:test_nhexa_table_model).
|
|
||||||
|
|
||||||
* Nano-Hexapod Measured Dynamics
|
* Nano-Hexapod Measured Dynamics
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
@@ -566,8 +552,8 @@ The effect of the payload mass on the dynamics is discussed in Section ref:ssec:
|
|||||||
% Connections and labels
|
% Connections and labels
|
||||||
\draw[->] ($(F_DAC.west)+(-0.8,0)$) node[above right]{$\mathbf{u}$} node[below right]{$[V]$} -- node[sloped]{$/$} (F_DAC.west);
|
\draw[->] ($(F_DAC.west)+(-0.8,0)$) node[above right]{$\mathbf{u}$} node[below right]{$[V]$} -- node[sloped]{$/$} (F_DAC.west);
|
||||||
\draw[->] (F_DAC.east) -- node[midway, above]{$\tilde{\mathbf{u}}$}node[midway, below]{$[V]$} (PD200.west);
|
\draw[->] (F_DAC.east) -- node[midway, above]{$\tilde{\mathbf{u}}$}node[midway, below]{$[V]$} (PD200.west);
|
||||||
\draw[->] (PD200.east) -- node[midway, above]{$\mathbf{u}_a$}node[midway, below]{$[V]$} (F_stack.west);
|
\draw[->] (PD200.east) -- node[midway, above]{$\mathbf{V}_a$}node[midway, below]{$[V]$} (F_stack.west);
|
||||||
\draw[->] (F_stack.east) -- (inputF) node[above left]{$\mathbf{\tau}$}node[below left]{$[N]$};
|
\draw[->] (F_stack.east) -- (inputF) node[above left]{$\mathbf{f}$}node[below left]{$[N]$};
|
||||||
|
|
||||||
\draw[->] (outputF) -- (Fm_stack.west) node[above left]{$\mathbf{\epsilon}$} node[below left]{$[m]$};
|
\draw[->] (outputF) -- (Fm_stack.west) node[above left]{$\mathbf{\epsilon}$} node[below left]{$[m]$};
|
||||||
\draw[->] (Fm_stack.east) -- node[midway, above]{$\tilde{\mathbf{V}}_s$}node[midway, below]{$[V]$} (Fm_ADC.west);
|
\draw[->] (Fm_stack.east) -- node[midway, above]{$\tilde{\mathbf{V}}_s$}node[midway, below]{$[V]$} (Fm_ADC.west);
|
||||||
@@ -586,7 +572,7 @@ The effect of the payload mass on the dynamics is discussed in Section ref:ssec:
|
|||||||
|
|
||||||
#+name: fig:test_nhexa_nano_hexapod_signals
|
#+name: fig:test_nhexa_nano_hexapod_signals
|
||||||
#+caption: Block diagram of the studied system. The command signal generated by the speedgoat is $\mathbf{u}$, and the measured dignals are $\mathbf{d}_{e}$ and $\mathbf{V}_s$. Units are indicated in square brackets.
|
#+caption: Block diagram of the studied system. The command signal generated by the speedgoat is $\mathbf{u}$, and the measured dignals are $\mathbf{d}_{e}$ and $\mathbf{V}_s$. Units are indicated in square brackets.
|
||||||
#+attr_latex: :scale 1
|
#+attr_latex: :width \linewidth
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/test_nhexa_nano_hexapod_signals.png]]
|
[[file:figs/test_nhexa_nano_hexapod_signals.png]]
|
||||||
|
|
||||||
@@ -674,7 +660,7 @@ The $6 \times 6$ FRF matrix from $\mathbf{u}$ ot $\mathbf{d}_e$ is shown in Figu
|
|||||||
The diagonal terms are displayed using colored lines, and all the 30 off-diagonal terms are displayed by gray lines.
|
The diagonal terms are displayed using colored lines, and all the 30 off-diagonal terms are displayed by gray lines.
|
||||||
|
|
||||||
All six diagonal terms are well superimposed up to at least $1\,kHz$, indicating good manufacturing and mounting uniformity.
|
All six diagonal terms are well superimposed up to at least $1\,kHz$, indicating good manufacturing and mounting uniformity.
|
||||||
Below the first suspension mode, good decoupling can be observed (the amplitude of all off-diagonal terms are $\approx 20$ times smaller than the diagonal terms).
|
Below the first suspension mode, good decoupling can be observed (the amplitude of all off-diagonal terms are $\approx 20$ times smaller than the diagonal terms), indicating the correct assembly of all parts.
|
||||||
|
|
||||||
From 10Hz up to 1kHz, around 10 resonance frequencies can be observed.
|
From 10Hz up to 1kHz, around 10 resonance frequencies can be observed.
|
||||||
The first 4 are suspension modes (at 122Hz, 143Hz, 165Hz and 191Hz) which correlate the modes measured during the modal analysis in Section ref:ssec:test_nhexa_enc_struts_modal_analysis.
|
The first 4 are suspension modes (at 122Hz, 143Hz, 165Hz and 191Hz) which correlate the modes measured during the modal analysis in Section ref:ssec:test_nhexa_enc_struts_modal_analysis.
|
||||||
@@ -739,7 +725,7 @@ hold off;
|
|||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
|
||||||
ylim([1e-8, 5e-4]);
|
ylim([1e-8, 5e-4]);
|
||||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 4);
|
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 4);
|
||||||
leg.ItemTokenSize(1) = 15;
|
leg.ItemTokenSize(1) = 15;
|
||||||
|
|
||||||
ax2 = nexttile;
|
ax2 = nexttile;
|
||||||
@@ -759,11 +745,12 @@ xlim([10, 2e3]);
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
exportFig('figs/test_nhexa_identified_frf_de.pdf', 'width', 'wide', 'height', 600);
|
exportFig('figs/test_nhexa_identified_frf_de.pdf', 'width', 'full', 'height', 600);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:test_nhexa_identified_frf_de
|
#+name: fig:test_nhexa_identified_frf_de
|
||||||
#+caption: Measured FRF for the transfer function from $\mathbf{u}$ to $\mathbf{d}_e$. The 6 diagonal terms are the colored lines (all superimposed), and the 30 off-diagonal terms are the gray lines.
|
#+caption: Measured FRF for the transfer function from $\mathbf{u}$ to $\mathbf{d}_e$. The 6 diagonal terms are the colored lines (all superimposed), and the 30 off-diagonal terms are the gray lines.
|
||||||
|
#+attr_latex: :width \linewidth
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/test_nhexa_identified_frf_de.png]]
|
[[file:figs/test_nhexa_identified_frf_de.png]]
|
||||||
|
|
||||||
@@ -817,18 +804,19 @@ xlim([10, 2e3]);
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
exportFig('figs/test_nhexa_identified_frf_Vs.pdf', 'width', 'wide', 'height', 600);
|
exportFig('figs/test_nhexa_identified_frf_Vs.pdf', 'width', 'full', 'height', 600);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:test_nhexa_identified_frf_Vs
|
#+name: fig:test_nhexa_identified_frf_Vs
|
||||||
#+caption: Measured FRF for the transfer function from $\mathbf{u}$ to $\mathbf{V}_s$. The 6 diagonal terms are the colored lines (all superimposed), and the 30 off-diagonal terms are the shaded black lines.
|
#+caption: Measured FRF for the transfer function from $\mathbf{u}$ to $\mathbf{V}_s$. The 6 diagonal terms are the colored lines (all superimposed), and the 30 off-diagonal terms are the shaded black lines.
|
||||||
|
#+attr_latex: :width \linewidth
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/test_nhexa_identified_frf_Vs.png]]
|
[[file:figs/test_nhexa_identified_frf_Vs.png]]
|
||||||
|
|
||||||
** Effect of payload mass on the dynamics
|
** Effect of payload mass on the dynamics
|
||||||
<<ssec:test_nhexa_added_mass>>
|
<<ssec:test_nhexa_added_mass>>
|
||||||
|
|
||||||
One major challenge in the control of the NASS is the wanted robustness to a change of payload mass; therefore, it is necessary to understand how the dynamics of the nano-hexapod changes with a change in payload mass.
|
One major challenge for controlling the NASS is the wanted robustness to a variation of payload mass; therefore, it is necessary to understand how the dynamics of the nano-hexapod changes with a change in payload mass.
|
||||||
|
|
||||||
To study how the dynamics changes with the payload mass, up to three "cylindrical masses" of $13\,kg$ each can be added for a total of $\approx 40\,kg$.
|
To study how the dynamics changes with the payload mass, up to three "cylindrical masses" of $13\,kg$ each can be added for a total of $\approx 40\,kg$.
|
||||||
These three cylindrical masses on top of the nano-hexapod are shown in Figure ref:fig:test_nhexa_table_mass_3.
|
These three cylindrical masses on top of the nano-hexapod are shown in Figure ref:fig:test_nhexa_table_mass_3.
|
||||||
@@ -1023,7 +1011,7 @@ xlim([10, 2e3]);
|
|||||||
exportFig('figs/test_nhexa_identified_frf_Vs_masses.pdf', 'width', 'half', 'height', 600);
|
exportFig('figs/test_nhexa_identified_frf_Vs_masses.pdf', 'width', 'half', 'height', 600);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:test_struts_mounting
|
#+name: fig:test_nhexa_identified_frf_masses
|
||||||
#+caption: Measured Frequency Response Functions from $u_i$ to $d_{ei}$ (\subref{fig:test_nhexa_identified_frf_de_masses}) and from $u_i$ to $V_{si}$ (\subref{fig:test_nhexa_identified_frf_Vs_masses}) for all 4 payload conditions. Only diagonal terms are shown.
|
#+caption: Measured Frequency Response Functions from $u_i$ to $d_{ei}$ (\subref{fig:test_nhexa_identified_frf_de_masses}) and from $u_i$ to $V_{si}$ (\subref{fig:test_nhexa_identified_frf_Vs_masses}) for all 4 payload conditions. Only diagonal terms are shown.
|
||||||
#+attr_latex: :options [htbp]
|
#+attr_latex: :options [htbp]
|
||||||
#+begin_figure
|
#+begin_figure
|
||||||
@@ -1041,23 +1029,6 @@ exportFig('figs/test_nhexa_identified_frf_Vs_masses.pdf', 'width', 'half', 'heig
|
|||||||
#+end_subfigure
|
#+end_subfigure
|
||||||
#+end_figure
|
#+end_figure
|
||||||
|
|
||||||
** Conclusion
|
|
||||||
:PROPERTIES:
|
|
||||||
:UNNUMBERED: t
|
|
||||||
:END:
|
|
||||||
|
|
||||||
After the Nano-Hexapod was fixed on top of the suspended table, its dynamics was identified.
|
|
||||||
|
|
||||||
The frequency response functions from the six DAC voltages $\mathbf{u}$ to the six encoders measured displacements $\mathbf{d}_e$ displays alternating complex conjugate poles and complex conjugate zeros up to at least 1kHz.
|
|
||||||
At low frequencies, the coupling is small, indicating the correct assembly of all parts.
|
|
||||||
This should enable the design of a decentralized positioning controller based on the encoders for relative positioning purposes.
|
|
||||||
The suspension and flexible modes measured during the modal analysis (Section ref:ssec:test_nhexa_enc_struts_modal_analysis) are also observed in the dynamics.
|
|
||||||
Many other modes are present above 700Hz, which will inevitably limit the achievable bandwidth.
|
|
||||||
The observed effect of the payload's mass on the dynamics was quite large, which also represents a complex control challenge.
|
|
||||||
|
|
||||||
The frequency response functions from the six DAC voltages $\mathbf{u}$ to the six force sensors voltages $\mathbf{V}_s$ all have alternating complex conjugate poles and complex conjugate zeros for all the tested payloads.
|
|
||||||
This indicates that it is possible to implement decentralized Integral Force Feedback in a robust manner.
|
|
||||||
|
|
||||||
* Nano-Hexapod Model Dynamics
|
* Nano-Hexapod Model Dynamics
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:matlab+: :tangle matlab/test_nhexa_3_model.m
|
:header-args:matlab+: :tangle matlab/test_nhexa_3_model.m
|
||||||
@@ -1066,17 +1037,17 @@ This indicates that it is possible to implement decentralized Integral Force Fee
|
|||||||
|
|
||||||
** Introduction :ignore:
|
** Introduction :ignore:
|
||||||
|
|
||||||
In this section, the dynamics measured in Section ref:sec:test_nhexa_dynamics is compared with those estimated from the Simscape model.
|
In this section, the dynamics measured in Section ref:sec:test_nhexa_dynamics is compared with those estimated from the multi-body model.
|
||||||
The nano-hexapod simscape model was therefore added on top of the vibration table Simscape model, as shown in Figure ref:fig:test_nhexa_hexa_simscape.
|
The nano-hexapod multi-body model was therefore added on top of the vibration table multi-body model, as shown in Figure ref:fig:test_nhexa_hexa_simscape.
|
||||||
|
|
||||||
#+name: fig:test_nhexa_hexa_simscape
|
#+name: fig:test_nhexa_hexa_simscape
|
||||||
#+caption: 3D representation of the simscape model with the nano-hexapod on top of the suspended table. Three mass "layers" are here added
|
#+caption: 3D representation of the multi-body model with the nano-hexapod on top of the suspended table. Three mass "layers" are here added
|
||||||
#+attr_latex: :width 0.8\linewidth
|
#+attr_latex: :width 0.8\linewidth
|
||||||
[[file:figs/test_nhexa_hexa_simscape.png]]
|
[[file:figs/test_nhexa_hexa_simscape.png]]
|
||||||
|
|
||||||
The model should exhibit certain characteristics that are verified in this section.
|
The model should exhibit certain characteristics that are verified in this section.
|
||||||
First, it should match the measured system dynamics from actuators to sensors presented in Section ref:sec:test_nhexa_dynamics.
|
First, it should match the measured system dynamics from actuators to sensors presented in Section ref:sec:test_nhexa_dynamics.
|
||||||
Both the "direct" terms (Section ref:ssec:test_nhexa_comp_model) and "coupling" terms (Section ref:ssec:test_nhexa_comp_model_coupling) of the Simscape model are compared with the measured dynamics.
|
Both the "direct" terms (Section ref:ssec:test_nhexa_comp_model) and "coupling" terms (Section ref:ssec:test_nhexa_comp_model_coupling) of the multi-body model are compared with the measured dynamics.
|
||||||
Second, it should also represents how the system dynamics changes when a payload is fixed to the top platform.
|
Second, it should also represents how the system dynamics changes when a payload is fixed to the top platform.
|
||||||
This is checked in Section ref:ssec:test_nhexa_comp_model_masses.
|
This is checked in Section ref:ssec:test_nhexa_comp_model_masses.
|
||||||
|
|
||||||
@@ -1209,10 +1180,10 @@ sim_ol = load('test_nhexa_simscape_masses.mat', 'G_Vs', 'G_de');
|
|||||||
frf_ol = load('test_nhexa_identified_frf_masses.mat', 'f', 'G_Vs', 'G_de');
|
frf_ol = load('test_nhexa_identified_frf_masses.mat', 'f', 'G_Vs', 'G_de');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
The Simscape model of the nano-hexapod was first configured with 4-DoF flexible joints, 2-DoF APA, and rigid top and bottom plates.
|
The multi-body model of the nano-hexapod was first configured with 4-DoF flexible joints, 2-DoF APA, and rigid top and bottom plates.
|
||||||
The stiffness values of the flexible joints were chosen based on the values estimated using the test bench and on the FEM.
|
The stiffness values of the flexible joints were chosen based on the values estimated using the test bench and on the FEM.
|
||||||
The parameters of the APA model were determined from the test bench of the APA.
|
The parameters of the APA model were determined from the test bench of the APA.
|
||||||
The $6 \times 6$ transfer function matrices from $\mathbf{u}$ to $\mathbf{d}_e$ and from $\mathbf{u}$ to $\mathbf{V}_s$ are then extracted from the Simscape model.
|
The $6 \times 6$ transfer function matrices from $\mathbf{u}$ to $\mathbf{d}_e$ and from $\mathbf{u}$ to $\mathbf{V}_s$ are then extracted from the multi-body model.
|
||||||
|
|
||||||
First, is it evaluated how well the models matches the "direct" terms of the measured FRF matrix.
|
First, is it evaluated how well the models matches the "direct" terms of the measured FRF matrix.
|
||||||
To do so, the diagonal terms of the extracted transfer function matrices are compared with the measured FRF in Figure ref:fig:test_nhexa_comp_simscape_diag.
|
To do so, the diagonal terms of the extracted transfer function matrices are compared with the measured FRF in Figure ref:fig:test_nhexa_comp_simscape_diag.
|
||||||
@@ -1307,7 +1278,7 @@ exportFig('figs/test_nhexa_comp_simscape_Vs_diag.pdf', 'width', 'half', 'height'
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:test_nhexa_comp_simscape_diag
|
#+name: fig:test_nhexa_comp_simscape_diag
|
||||||
#+caption: Comparison of the diagonal elements (i.e. "direct" terms) of the measured FRF matrix and the dynamics identified from the Simscape model. Both for the dynamics from $u$ to $d_e$ (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from $u$ to $V_s$ (\subref{fig:test_nhexa_comp_simscape_Vs_diag})
|
#+caption: Comparison of the diagonal elements (i.e. "direct" terms) of the measured FRF matrix and the dynamics identified from the multi-body model. Both for the dynamics from $u$ to $d_e$ (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from $u$ to $V_s$ (\subref{fig:test_nhexa_comp_simscape_Vs_diag})
|
||||||
#+attr_latex: :options [htbp]
|
#+attr_latex: :options [htbp]
|
||||||
#+begin_figure
|
#+begin_figure
|
||||||
#+attr_latex: :caption \subcaption{\label{fig:test_nhexa_comp_simscape_de_diag}from $u$ to $d_e$}
|
#+attr_latex: :caption \subcaption{\label{fig:test_nhexa_comp_simscape_de_diag}from $u$ to $d_e$}
|
||||||
@@ -1324,7 +1295,7 @@ exportFig('figs/test_nhexa_comp_simscape_Vs_diag.pdf', 'width', 'half', 'height'
|
|||||||
#+end_subfigure
|
#+end_subfigure
|
||||||
#+end_figure
|
#+end_figure
|
||||||
|
|
||||||
** Modeling dynamical coupling
|
** Dynamical coupling
|
||||||
<<ssec:test_nhexa_comp_model_coupling>>
|
<<ssec:test_nhexa_comp_model_coupling>>
|
||||||
|
|
||||||
Another desired feature of the model is that it effectively represents coupling in the system, as this is often the limiting factor for the control of MIMO systems.
|
Another desired feature of the model is that it effectively represents coupling in the system, as this is often the limiting factor for the control of MIMO systems.
|
||||||
@@ -1409,7 +1380,7 @@ exportFig('figs/test_nhexa_comp_simscape_de_all.pdf', 'width', 'full', 'height',
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:test_nhexa_comp_simscape_de_all
|
#+name: fig:test_nhexa_comp_simscape_de_all
|
||||||
#+caption: Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal $u_1$ to the six encoders $d_{e1}$ to $d_{e6}$
|
#+caption: Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal $u_1$ to the six encoders $d_{e1}$ to $d_{e6}$. The APA are here modeled with a 2-DoF mass-spring-damper system.
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/test_nhexa_comp_simscape_de_all.png]]
|
[[file:figs/test_nhexa_comp_simscape_de_all.png]]
|
||||||
|
|
||||||
@@ -1501,16 +1472,16 @@ exportFig('figs/test_nhexa_comp_simscape_de_all_flex.pdf', 'width', 'full', 'hei
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:test_nhexa_comp_simscape_de_all_flex
|
#+name: fig:test_nhexa_comp_simscape_de_all_flex
|
||||||
#+caption: Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal $u_1$ to the six encoders $d_{e1}$ to $d_{e6}$
|
#+caption: Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal $u_1$ to the six encoders $d_{e1}$ to $d_{e6}$. The APA are here modeled with a "super-element".
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/test_nhexa_comp_simscape_de_all_flex.png]]
|
[[file:figs/test_nhexa_comp_simscape_de_all_flex.png]]
|
||||||
|
|
||||||
** Modeling the effect of payload mass
|
** Effect of payload mass
|
||||||
<<ssec:test_nhexa_comp_model_masses>>
|
<<ssec:test_nhexa_comp_model_masses>>
|
||||||
|
|
||||||
Another important characteristic of the model is that it should represents the dynamics of the system well for all considered payloads.
|
Another important characteristic of the model is that it should represents the dynamics of the system well for all considered payloads.
|
||||||
The model dynamics is therefore compared with the measured dynamics for 4 payloads (no payload, 13kg, 26kg and 39kg) in Figure ref:fig:test_nhexa_comp_simscape_diag_masses.
|
The model dynamics is therefore compared with the measured dynamics for 4 payloads (no payload, 13kg, 26kg and 39kg) in Figure ref:fig:test_nhexa_comp_simscape_diag_masses.
|
||||||
The observed shift of the suspension modes to lower frequencies with increased payload mass is well represented by the Simscape model.
|
The observed shift of the suspension modes to lower frequencies with increased payload mass is well represented by the multi-body model.
|
||||||
The complex conjugate zeros also well match the experiments both for the encoder outputs (Figure ref:fig:test_nhexa_comp_simscape_de_diag_masses) and the force sensor outputs (Figure ref:fig:test_nhexa_comp_simscape_Vs_diag_masses).
|
The complex conjugate zeros also well match the experiments both for the encoder outputs (Figure ref:fig:test_nhexa_comp_simscape_de_diag_masses) and the force sensor outputs (Figure ref:fig:test_nhexa_comp_simscape_Vs_diag_masses).
|
||||||
|
|
||||||
Note that the model displays smaller damping than that observed experimentally for high values of the payload mass.
|
Note that the model displays smaller damping than that observed experimentally for high values of the payload mass.
|
||||||
@@ -1534,7 +1505,7 @@ for i_mass = [0:3]
|
|||||||
end
|
end
|
||||||
set(gca, 'ColorOrderIndex', i_mass+1)
|
set(gca, 'ColorOrderIndex', i_mass+1)
|
||||||
plot(freqs, abs(squeeze(freqresp(sim_ol.G_de{i_mass+1}(1,1), freqs, 'Hz'))), '--', ...
|
plot(freqs, abs(squeeze(freqresp(sim_ol.G_de{i_mass+1}(1,1), freqs, 'Hz'))), '--', ...
|
||||||
'DisplayName', 'Simscape');
|
'DisplayName', 'Model');
|
||||||
end
|
end
|
||||||
hold off;
|
hold off;
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
@@ -1584,7 +1555,7 @@ for i_mass = 0:3
|
|||||||
'HandleVisibility', 'off');
|
'HandleVisibility', 'off');
|
||||||
end
|
end
|
||||||
plot(freqs, abs(squeeze(freqresp(sim_ol.G_Vs{i_mass+1}(1,1), freqs, 'Hz'))), '--', 'color', colors(i_mass+1,:), ...
|
plot(freqs, abs(squeeze(freqresp(sim_ol.G_Vs{i_mass+1}(1,1), freqs, 'Hz'))), '--', 'color', colors(i_mass+1,:), ...
|
||||||
'DisplayName', 'Simscape');
|
'DisplayName', 'Model');
|
||||||
end
|
end
|
||||||
hold off;
|
hold off;
|
||||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
@@ -1617,7 +1588,7 @@ exportFig('figs/test_nhexa_comp_simscape_Vs_diag_masses.pdf', 'width', 'half', '
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:test_nhexa_comp_simscape_diag_masses
|
#+name: fig:test_nhexa_comp_simscape_diag_masses
|
||||||
#+caption: Comparison of the diagonal elements (i.e. "direct" terms) of the measured FRF matrix and the dynamics identified from the Simscape model. Both for the dynamics from $u$ to $d_e$ (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from $u$ to $V_s$ (\subref{fig:test_nhexa_comp_simscape_Vs_diag})
|
#+caption: Comparison of the diagonal elements (i.e. "direct" terms) of the measured FRF matrix and the dynamics identified from the multi-body model. Both for the dynamics from $u$ to $d_e$ (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from $u$ to $V_s$ (\subref{fig:test_nhexa_comp_simscape_Vs_diag})
|
||||||
#+attr_latex: :options [htbp]
|
#+attr_latex: :options [htbp]
|
||||||
#+begin_figure
|
#+begin_figure
|
||||||
#+attr_latex: :caption \subcaption{\label{fig:test_nhexa_comp_simscape_de_diag_masses}from $u$ to $d_e$}
|
#+attr_latex: :caption \subcaption{\label{fig:test_nhexa_comp_simscape_de_diag_masses}from $u$ to $d_e$}
|
||||||
@@ -1719,26 +1690,25 @@ exportFig('figs/test_nhexa_comp_simscape_de_all_high_mass.pdf', 'width', 'full',
|
|||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/test_nhexa_comp_simscape_de_all_high_mass.png]]
|
[[file:figs/test_nhexa_comp_simscape_de_all_high_mass.png]]
|
||||||
|
|
||||||
** Conclusion
|
|
||||||
:PROPERTIES:
|
|
||||||
:UNNUMBERED: t
|
|
||||||
:END:
|
|
||||||
|
|
||||||
As illustrated in this section, the developed Simscape model accurately represents the suspension modes of the Nano-Hexapod.
|
|
||||||
Both FRF matrices from $\mathbf{u}$ to $\mathbf{V}_s$ and from $\mathbf{u}$ to $\mathbf{d}_e$ are well matching with the measurements, even when considering coupling (i.e. off-diagonal) terms, which are very important from a control perspective.
|
|
||||||
|
|
||||||
At frequencies above the suspension modes, the Nano-Hexapod model became inaccurate because the flexible modes were not modeled.
|
|
||||||
It was found that modeling the APA300ML using a "super-element" allows to model the internal resonances of the struts.
|
|
||||||
The same can be done with the top platform and the encoder supports; however, the model order would be higher and may become unpractical for simulation.
|
|
||||||
|
|
||||||
* Conclusion
|
* Conclusion
|
||||||
|
|
||||||
The goal of this test bench was to obtain an accurate model of the nano-hexapod that could then be included on top of the micro-station model.
|
The goal of this test bench was to obtain an accurate model of the nano-hexapod that could then be included on top of the micro-station model.
|
||||||
|
The adopted strategy was to identify the nano-hexapod dynamics under conditions in which all factors that could have affected the nano-hexapod dynamics were considered.
|
||||||
|
This was achieved by developing a suspended table with low frequency suspension modes that can be accurately modeled (Section ref:sec:test_nhexa_table).
|
||||||
|
Although the dynamics of the nano-hexapod was indeed impacted by the dynamics of the suspended platform, this impact was also considered in the multi-body model.
|
||||||
|
|
||||||
This strategy was to identify the nano-hexapod dynamics under conditions in which all factors that could have affected the nano-hexapod dynamics were considered.
|
The dynamics of the nano-hexapod was then identified in Section ref:sec:test_nhexa_dynamics.
|
||||||
This was achieved by developing a suspended table with low frequency suspension modes that can be accurately modeled.
|
Below the first suspension mode, good decoupling could be observed for the transfer function from $\bm{u}$ to $\bm{d}_e$, which enables the design of a decentralized positioning controller based on the encoders for relative positioning purposes.
|
||||||
|
Many other modes were present above 700Hz, which will inevitably limit the achievable bandwidth.
|
||||||
|
The observed effect of the payload's mass on the dynamics was quite large, which also represents a complex control challenge.
|
||||||
|
|
||||||
Although the dynamics of the nano-hexapod was indeed impacted by the dynamics of the suspended platform, this impact was also considered in the Simscape model, and a good match was obtained.
|
The frequency response functions from the six DAC voltages $\bm{u}$ to the six force sensors voltages $\bm{V}_s$ all have alternating complex conjugate poles and complex conjugate zeros for all the tested payloads (Figure ref:fig:test_nhexa_comp_simscape_Vs_diag_masses).
|
||||||
|
This indicates that it is possible to implement decentralized Integral Force Feedback in a robust manner.
|
||||||
|
|
||||||
|
The developed multi-body model of the nano-hexapod was found to accurately represents the suspension modes of the Nano-Hexapod (Section ref:sec:test_nhexa_model).
|
||||||
|
Both FRF matrices from $\mathbf{u}$ to $\mathbf{V}_s$ and from $\mathbf{u}$ to $\mathbf{d}_e$ are well matching with the measurements, even when considering coupling (i.e. off-diagonal) terms, which are very important from a control perspective.
|
||||||
|
At frequencies above the suspension modes, the Nano-Hexapod model became inaccurate because the flexible modes were not modeled.
|
||||||
|
It was found that modeling the APA300ML using a /super-element/ allows to model the internal resonances of the struts.
|
||||||
|
The same can be done with the top platform and the encoder supports; however, the model order would be higher and may become unpractical for simulation.
|
||||||
|
|
||||||
Obtaining a model that accurately represents the complex dynamics of the Nano-Hexapod was made possible by the modeling approach used in this study.
|
Obtaining a model that accurately represents the complex dynamics of the Nano-Hexapod was made possible by the modeling approach used in this study.
|
||||||
This approach involved tuning and validating models of individual components (such as the APA and flexible joints) using dedicated test benches.
|
This approach involved tuning and validating models of individual components (such as the APA and flexible joints) using dedicated test benches.
|
||||||
@@ -2189,10 +2159,10 @@ end
|
|||||||
|
|
||||||
* Footnotes
|
* Footnotes
|
||||||
|
|
||||||
[fn:7]PCB 356B18. Sensitivity is $1\,V/g$, measurement range is $\pm 5\,g$ and bandwidth is $0.5$ to $5\,\text{kHz}$.
|
[fn:test_nhexa_7]PCB 356B18. Sensitivity is $1\,V/g$, measurement range is $\pm 5\,g$ and bandwidth is $0.5$ to $5\,\text{kHz}$.
|
||||||
[fn:6]"SZ8005 20 x 044" from Steinel. The spring rate is specified at $17.8\,N/mm$
|
[fn:test_nhexa_6]"SZ8005 20 x 044" from Steinel. The spring rate is specified at $17.8\,N/mm$
|
||||||
[fn:5]The 450 mm x 450 mm x 60 mm Nexus B4545A from Thorlabs.
|
[fn:test_nhexa_5]The 450 mm x 450 mm x 60 mm Nexus B4545A from Thorlabs.
|
||||||
[fn:4]As the accuracy of the FARO arm is $\pm 13\,\mu m$, the true straightness is probably better than the values indicated. The limitation of the instrument is here reached.
|
[fn:test_nhexa_4]As the accuracy of the FARO arm is $\pm 13\,\mu m$, the true straightness is probably better than the values indicated. The limitation of the instrument is here reached.
|
||||||
[fn:3]The height dimension is better than $40\,\mu m$. The diameter fitting of 182g6 and 24g6 with the two plates is verified.
|
[fn:test_nhexa_3]The height dimension is better than $40\,\mu m$. The diameter fitting of 182g6 and 24g6 with the two plates is verified.
|
||||||
[fn:2]Location of all the interface surfaces with the flexible joints were checked. The fittings (182H7 and 24H8) with the interface element were also checked.
|
[fn:test_nhexa_2]Location of all the interface surfaces with the flexible joints were checked. The fittings (182H7 and 24H8) with the interface element were also checked.
|
||||||
[fn:1]Faro Arm Platinum 4ft, specified accuracy of $\pm 13\mu m$
|
[fn:test_nhexa_1]FARO Arm Platinum 4ft, specified accuracy of $\pm 13\mu m$
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
% Created 2024-10-29 Tue 19:17
|
% Created 2024-11-18 Mon 11:41
|
||||||
% Intended LaTeX compiler: pdflatex
|
% Intended LaTeX compiler: pdflatex
|
||||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||||
|
|
||||||
@@ -28,13 +28,13 @@ Prior to the nano-hexapod assembly, all the struts were mounted and individually
|
|||||||
In Section \ref{sec:test_nhexa_mounting}, the assembly procedure of the nano-hexapod is presented.
|
In Section \ref{sec:test_nhexa_mounting}, the assembly procedure of the nano-hexapod is presented.
|
||||||
|
|
||||||
To identify the dynamics of the nano-hexapod, a special suspended table was developed, which consisted of a stiff ``optical breadboard'' suspended on top of four soft springs.
|
To identify the dynamics of the nano-hexapod, a special suspended table was developed, which consisted of a stiff ``optical breadboard'' suspended on top of four soft springs.
|
||||||
The Nano-Hexapod was then fixed on top of the suspended table such that its dynamics is not affected by complex dynamics except from the suspension modes of the table that can be well characterized and modeled (Section \ref{sec:test_nhexa_table}).
|
The Nano-Hexapod was then mounted on top of the suspended table such that its dynamics is not affected by complex dynamics except from the suspension modes of the table that can be well characterized and modeled (Section \ref{sec:test_nhexa_table}).
|
||||||
|
|
||||||
The obtained nano-hexapod dynamics is analyzed in Section \ref{sec:test_nhexa_dynamics}, and compared with the Simscape model in Section \ref{sec:test_nhexa_model}.
|
The obtained nano-hexapod dynamics is analyzed in Section \ref{sec:test_nhexa_dynamics}, and compared with the multi-body model in Section \ref{sec:test_nhexa_model}.
|
||||||
|
|
||||||
\chapter{Nano-Hexapod Assembly Procedure}
|
\chapter{Nano-Hexapod Assembly Procedure}
|
||||||
\label{sec:test_nhexa_mounting}
|
\label{sec:test_nhexa_mounting}
|
||||||
The assembly of the nano-hexapod is critical for both avoiding additional stress in the flexible joints (that would result in a loss of stroke) and for the precisely determining the Jacobian matrix.
|
The assembly of the nano-hexapod is critical for both avoiding additional stress in the flexible joints (that would result in a loss of stroke) and for precisely determining the Jacobian matrix.
|
||||||
The goal was to fix the six struts to the two nano-hexapod plates (shown in Figure \ref{fig:test_nhexa_nano_hexapod_plates}) while the two plates were parallel and aligned vertically so that all the flexible joints did not experience any stress.
|
The goal was to fix the six struts to the two nano-hexapod plates (shown in Figure \ref{fig:test_nhexa_nano_hexapod_plates}) while the two plates were parallel and aligned vertically so that all the flexible joints did not experience any stress.
|
||||||
To do so, a precisely machined mounting tool (Figure \ref{fig:test_nhexa_center_part_hexapod_mounting}) is used to position the two nano-hexapod plates during the assembly procedure.
|
To do so, a precisely machined mounting tool (Figure \ref{fig:test_nhexa_center_part_hexapod_mounting}) is used to position the two nano-hexapod plates during the assembly procedure.
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ To do so, a precisely machined mounting tool (Figure \ref{fig:test_nhexa_center_
|
|||||||
\begin{center}
|
\begin{center}
|
||||||
\includegraphics[scale=1,height=4cm]{figs/test_nhexa_nano_hexapod_plates.jpg}
|
\includegraphics[scale=1,height=4cm]{figs/test_nhexa_nano_hexapod_plates.jpg}
|
||||||
\end{center}
|
\end{center}
|
||||||
\subcaption{\label{fig:test_nhexa_nano_hexapod_plates}Received top and bottom plates}
|
\subcaption{\label{fig:test_nhexa_nano_hexapod_plates}Top and bottom plates}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\begin{subfigure}{0.39\textwidth}
|
\begin{subfigure}{0.39\textwidth}
|
||||||
\begin{center}
|
\begin{center}
|
||||||
@@ -51,11 +51,11 @@ To do so, a precisely machined mounting tool (Figure \ref{fig:test_nhexa_center_
|
|||||||
\end{center}
|
\end{center}
|
||||||
\subcaption{\label{fig:test_nhexa_center_part_hexapod_mounting}Mounting tool}
|
\subcaption{\label{fig:test_nhexa_center_part_hexapod_mounting}Mounting tool}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\caption{\label{fig:test_nhexa_received_parts}Received Nano-Hexapod plates (\subref{fig:test_nhexa_nano_hexapod_plates}) and mounting tool used to position the two plates during assembly (\subref{fig:test_nhexa_center_part_hexapod_mounting})}
|
\caption{\label{fig:test_nhexa_received_parts}Nano-Hexapod plates (\subref{fig:test_nhexa_nano_hexapod_plates}) and mounting tool used to position the two plates during assembly (\subref{fig:test_nhexa_center_part_hexapod_mounting})}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The mechanical tolerances of the received plates were checked using a FARO arm\footnote{Faro Arm Platinum 4ft, specified accuracy of \(\pm 13\mu m\)} (Figure \ref{fig:test_nhexa_plates_tolerances}) and were found to comply with the requirements\footnote{Location of all the interface surfaces with the flexible joints were checked. The fittings (182H7 and 24H8) with the interface element were also checked.}.
|
The mechanical tolerances of the received plates were checked using a FARO arm\footnote{FARO Arm Platinum 4ft, specified accuracy of \(\pm 13\mu m\)} (Figure \ref{fig:test_nhexa_plates_tolerances}) and were found to comply with the requirements\footnote{Location of all the interface surfaces with the flexible joints were checked. The fittings (182H7 and 24H8) with the interface element were also checked.}.
|
||||||
The same is done for the mounting tool\footnote{The height dimension is better than \(40\,\mu m\). The diameter fitting of 182g6 and 24g6 with the two plates is verified.}
|
The same was done for the mounting tool\footnote{The height dimension is better than \(40\,\mu m\). The diameter fitting of 182g6 and 24g6 with the two plates is verified.}.
|
||||||
The two plates were then fixed to the mounting tool, as shown in Figure \ref{fig:test_nhexa_mounting_tool_hexapod_top_view}.
|
The two plates were then fixed to the mounting tool, as shown in Figure \ref{fig:test_nhexa_mounting_tool_hexapod_top_view}.
|
||||||
The main goal of this ``mounting tool'' is to position the flexible joint interfaces (the ``V'' shapes) of both plates so that a cylinder can rest on the 4 flat interfaces at the same time.
|
The main goal of this ``mounting tool'' is to position the flexible joint interfaces (the ``V'' shapes) of both plates so that a cylinder can rest on the 4 flat interfaces at the same time.
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ The main goal of this ``mounting tool'' is to position the flexible joint interf
|
|||||||
\end{center}
|
\end{center}
|
||||||
\subcaption{\label{fig:test_nhexa_mounting_tool_hexapod_top_view}Wanted coaxiality between interfaces}
|
\subcaption{\label{fig:test_nhexa_mounting_tool_hexapod_top_view}Wanted coaxiality between interfaces}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\caption{\label{fig:test_nhexa_dimensional_check}A Faro arm is used to dimensionally check the received parts (\subref{fig:test_nhexa_plates_tolerances}) and after mounting the two plates with the mounting part (\subref{fig:test_nhexa_mounting_tool_hexapod_top_view})}
|
\caption{\label{fig:test_nhexa_dimensional_check}A FARO arm is used to dimensionally check the received parts (\subref{fig:test_nhexa_plates_tolerances}) and after mounting the two plates with the mounting part (\subref{fig:test_nhexa_mounting_tool_hexapod_top_view})}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The quality of the positioning can be estimated by measuring the ``straightness'' of the top and bottom ``V'' interfaces.
|
The quality of the positioning can be estimated by measuring the ``straightness'' of the top and bottom ``V'' interfaces.
|
||||||
@@ -81,6 +81,7 @@ This was again done using the FARO arm, and the results for all six struts are s
|
|||||||
The straightness was found to be better than \(15\,\mu m\) for all struts\footnote{As the accuracy of the FARO arm is \(\pm 13\,\mu m\), the true straightness is probably better than the values indicated. The limitation of the instrument is here reached.}, which is sufficiently good to not induce significant stress of the flexible joint during assembly.
|
The straightness was found to be better than \(15\,\mu m\) for all struts\footnote{As the accuracy of the FARO arm is \(\pm 13\,\mu m\), the true straightness is probably better than the values indicated. The limitation of the instrument is here reached.}, which is sufficiently good to not induce significant stress of the flexible joint during assembly.
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
|
\caption{\label{tab:measured_straightness}Measured straightness between the two ``V'' shapes for the six struts. These measurements were performed twice for each strut.}
|
||||||
\centering
|
\centering
|
||||||
\begin{tabularx}{0.35\linewidth}{Xcc}
|
\begin{tabularx}{0.35\linewidth}{Xcc}
|
||||||
\toprule
|
\toprule
|
||||||
@@ -94,8 +95,6 @@ The straightness was found to be better than \(15\,\mu m\) for all struts\footno
|
|||||||
6 & \(6\, \mu m\) & \(7\, \mu m\)\\
|
6 & \(6\, \mu m\) & \(7\, \mu m\)\\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabularx}
|
\end{tabularx}
|
||||||
\caption{\label{tab:measured_straightness}Measured straightness between the two ``V'' shapes for the six struts. These measurements were performed twice for each strut.}
|
|
||||||
|
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
The encoder rulers and heads were then fixed to the top and bottom plates, respectively (Figure \ref{fig:test_nhexa_mount_encoder}), and the encoder heads were aligned to maximize the received contrast.
|
The encoder rulers and heads were then fixed to the top and bottom plates, respectively (Figure \ref{fig:test_nhexa_mount_encoder}), and the encoder heads were aligned to maximize the received contrast.
|
||||||
@@ -137,13 +136,13 @@ This may results in additional modes appearing in the system dynamics, which are
|
|||||||
To prevent this issue, the strategy adopted here is to mount the nano-hexapod on top a suspended table with low frequency suspension modes.
|
To prevent this issue, the strategy adopted here is to mount the nano-hexapod on top a suspended table with low frequency suspension modes.
|
||||||
|
|
||||||
In this case, the modes of the suspended table were chosen to be at much lower frequency than those of the nano-hexapod such that good decoupling is obtained.
|
In this case, the modes of the suspended table were chosen to be at much lower frequency than those of the nano-hexapod such that good decoupling is obtained.
|
||||||
Another key advantage is that the suspension modes of the table can be easily modeled using Simscape.
|
Another key advantage is that the suspension modes of the table can be easily represented using a multi-body model.
|
||||||
Therefore, the measured dynamics of the nano-hexapod on top of the suspended table can be compared to a Simscape model representing the same experimental conditions.
|
Therefore, the measured dynamics of the nano-hexapod on top of the suspended table can be compared to a multi-body model representing the same experimental conditions.
|
||||||
The model of the Nano-Hexapod can thus be precisely tuned to match the measured dynamics.
|
The model of the Nano-Hexapod can thus be precisely tuned to match the measured dynamics.
|
||||||
|
|
||||||
The developed suspended table is described in Section \ref{ssec:test_nhexa_table_setup}.
|
The developed suspended table is described in Section \ref{ssec:test_nhexa_table_setup}.
|
||||||
The modal analysis of the table is done in \ref{ssec:test_nhexa_table_identification}.
|
The modal analysis of the table is done in \ref{ssec:test_nhexa_table_identification}.
|
||||||
Finally, the Simscape model representing the suspended table was tuned to match the measured modes (Section \ref{ssec:test_nhexa_table_model}).
|
Finally, the multi-body model representing the suspended table was tuned to match the measured modes (Section \ref{ssec:test_nhexa_table_model}).
|
||||||
|
|
||||||
\section{Experimental Setup}
|
\section{Experimental Setup}
|
||||||
\label{ssec:test_nhexa_table_setup}
|
\label{ssec:test_nhexa_table_setup}
|
||||||
@@ -177,6 +176,7 @@ The next modes are the flexible modes of the breadboard as shown in Figure \ref{
|
|||||||
\begin{minipage}[b]{0.45\linewidth}
|
\begin{minipage}[b]{0.45\linewidth}
|
||||||
\begin{scriptsize}
|
\begin{scriptsize}
|
||||||
\begin{center}
|
\begin{center}
|
||||||
|
\captionof{table}{\label{tab:test_nhexa_suspended_table_modes}Obtained modes of the suspended table}
|
||||||
\begin{tabularx}{0.9\linewidth}{clX}
|
\begin{tabularx}{0.9\linewidth}{clX}
|
||||||
\toprule
|
\toprule
|
||||||
\textbf{Modes} & \textbf{Frequency} & \textbf{Description}\\
|
\textbf{Modes} & \textbf{Frequency} & \textbf{Description}\\
|
||||||
@@ -191,8 +191,6 @@ The next modes are the flexible modes of the breadboard as shown in Figure \ref{
|
|||||||
9 & 1025 Hz & Complex mode\\
|
9 & 1025 Hz & Complex mode\\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabularx}
|
\end{tabularx}
|
||||||
\captionof{table}{\label{tab:test_nhexa_suspended_table_modes}Obtained modes of the suspended table}
|
|
||||||
|
|
||||||
\end{center}
|
\end{center}
|
||||||
\end{scriptsize}
|
\end{scriptsize}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
@@ -220,48 +218,31 @@ The next modes are the flexible modes of the breadboard as shown in Figure \ref{
|
|||||||
\caption{\label{fig:test_nhexa_table_flexible_modes}Three identified flexible modes of the suspended table}
|
\caption{\label{fig:test_nhexa_table_flexible_modes}Three identified flexible modes of the suspended table}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section{Simscape Model of the suspended table}
|
\section{Multi-body Model of the suspended table}
|
||||||
\label{ssec:test_nhexa_table_model}
|
\label{ssec:test_nhexa_table_model}
|
||||||
|
|
||||||
The Simscape model of the suspended table consists simply of two solid bodies connected by 4 springs.
|
The multi-body model of the suspended table consists simply of two solid bodies connected by 4 springs.
|
||||||
The 4 springs are here modeled with ``bushing joints'' that have stiffness and damping properties in x, y, and z directions.
|
The 4 springs are here modeled with ``bushing joints'' that have stiffness and damping properties in x, y, and z directions.
|
||||||
The 3D representation of the model is shown in Figure \ref{fig:test_nhexa_suspended_table_simscape} where the 4 ``bushing joints'' are represented by blue cylinders.
|
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
|
||||||
\centering
|
|
||||||
\includegraphics[scale=1,width=0.8\linewidth]{figs/test_nhexa_suspended_table_simscape.png}
|
|
||||||
\caption{\label{fig:test_nhexa_suspended_table_simscape}3D representation of the simscape model}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
The model order is 12, which corresponds to the 6 suspension modes.
|
The model order is 12, which corresponds to the 6 suspension modes.
|
||||||
The inertia properties of the parts were determined from the geometry and material densities.
|
The inertia properties of the parts were determined from the geometry and material densities.
|
||||||
The stiffness of the springs was initially set from the datasheet nominal value of \(17.8\,N/mm\) and then reduced down to \(14\,N/mm\) to better match the measured suspension modes.
|
The stiffness of the springs was initially set from the datasheet nominal value of \(17.8\,N/mm\) and then reduced down to \(14\,N/mm\) to better match the measured suspension modes.
|
||||||
The stiffness of the springs in the horizontal plane is set at \(0.5\,N/mm\).
|
The stiffness of the springs in the horizontal plane is set at \(0.5\,N/mm\).
|
||||||
The obtained suspension modes of the Simscape model are compared with the measured modes in Table \ref{tab:test_nhexa_suspended_table_simscape_modes}.
|
The obtained suspension modes of the multi-body model are compared with the measured modes in Table \ref{tab:test_nhexa_suspended_table_simscape_modes}.
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
|
\caption{\label{tab:test_nhexa_suspended_table_simscape_modes}Comparison of suspension modes of the multi-body model and the measured ones}
|
||||||
\centering
|
\centering
|
||||||
\begin{tabularx}{0.6\linewidth}{Xcccc}
|
\begin{tabularx}{0.6\linewidth}{Xcccc}
|
||||||
\toprule
|
\toprule
|
||||||
Directions & \(D_x\), \(D_y\) & \(R_z\) & \(D_z\) & \(R_x\), \(R_y\)\\
|
Directions & \(D_x\), \(D_y\) & \(R_z\) & \(D_z\) & \(R_x\), \(R_y\)\\
|
||||||
\midrule
|
\midrule
|
||||||
|
Multi-body & 1.3 Hz & 1.8 Hz & 6.8 Hz & 9.5 Hz\\
|
||||||
Experimental & 1.3 Hz & 2.0 Hz & 6.9 Hz & 9.5 Hz\\
|
Experimental & 1.3 Hz & 2.0 Hz & 6.9 Hz & 9.5 Hz\\
|
||||||
Simscape & 1.3 Hz & 1.8 Hz & 6.8 Hz & 9.5 Hz\\
|
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabularx}
|
\end{tabularx}
|
||||||
\caption{\label{tab:test_nhexa_suspended_table_simscape_modes}Comparison of the identified suspension modes with the Simscape model and measured experimentally}
|
|
||||||
|
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\section*{Conclusion}
|
|
||||||
In this section, a suspended table with low frequency suspension modes and high frequency flexible modes was presented.
|
|
||||||
This suspended table is used in Section \ref{sec:test_nhexa_dynamics} for dynamical identification of the Nano-Hexapod.
|
|
||||||
The objective is to accurately identify the dynamics of the nano-hexapod, isolated from complex support dynamics.
|
|
||||||
The key point of this strategy was the ability to accurately model the suspended table.
|
|
||||||
|
|
||||||
To do so, a modal analysis of the suspended table was performed in Section \ref{ssec:test_nhexa_table_identification}, validating the low frequency suspension modes and high frequency flexible modes.
|
|
||||||
Then, a multi-body model of this suspended table was tuned to match the measurements (Section \ref{ssec:test_nhexa_table_model}).
|
|
||||||
|
|
||||||
\chapter{Nano-Hexapod Measured Dynamics}
|
\chapter{Nano-Hexapod Measured Dynamics}
|
||||||
\label{sec:test_nhexa_dynamics}
|
\label{sec:test_nhexa_dynamics}
|
||||||
The Nano-Hexapod was then mounted on top of the suspended table, as shown in Figure \ref{fig:test_nhexa_hexa_suspended_table}.
|
The Nano-Hexapod was then mounted on top of the suspended table, as shown in Figure \ref{fig:test_nhexa_hexa_suspended_table}.
|
||||||
@@ -282,7 +263,7 @@ The effect of the payload mass on the dynamics is discussed in Section \ref{ssec
|
|||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[scale=1,scale=1]{figs/test_nhexa_nano_hexapod_signals.png}
|
\includegraphics[scale=1,width=\linewidth]{figs/test_nhexa_nano_hexapod_signals.png}
|
||||||
\caption{\label{fig:test_nhexa_nano_hexapod_signals}Block diagram of the studied system. The command signal generated by the speedgoat is \(\mathbf{u}\), and the measured dignals are \(\mathbf{d}_{e}\) and \(\mathbf{V}_s\). Units are indicated in square brackets.}
|
\caption{\label{fig:test_nhexa_nano_hexapod_signals}Block diagram of the studied system. The command signal generated by the speedgoat is \(\mathbf{u}\), and the measured dignals are \(\mathbf{d}_{e}\) and \(\mathbf{V}_s\). Units are indicated in square brackets.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
@@ -303,6 +284,7 @@ At around 700Hz, two flexible modes of the top plate were observed (see Figure \
|
|||||||
These modes are summarized in Table \ref{tab:test_nhexa_hexa_modal_modes_list}.
|
These modes are summarized in Table \ref{tab:test_nhexa_hexa_modal_modes_list}.
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
|
\caption{\label{tab:test_nhexa_hexa_modal_modes_list}Description of the identified modes of the Nano-Hexapod}
|
||||||
\centering
|
\centering
|
||||||
\begin{tabularx}{0.7\linewidth}{ccX}
|
\begin{tabularx}{0.7\linewidth}{ccX}
|
||||||
\toprule
|
\toprule
|
||||||
@@ -318,8 +300,6 @@ These modes are summarized in Table \ref{tab:test_nhexa_hexa_modal_modes_list}.
|
|||||||
8 & 709 Hz & Second flexible mode of the top platform\\
|
8 & 709 Hz & Second flexible mode of the top platform\\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabularx}
|
\end{tabularx}
|
||||||
\caption{\label{tab:test_nhexa_hexa_modal_modes_list}Description of the identified modes of the Nano-Hexapod}
|
|
||||||
|
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
@@ -347,7 +327,7 @@ The \(6 \times 6\) FRF matrix from \(\mathbf{u}\) ot \(\mathbf{d}_e\) is shown i
|
|||||||
The diagonal terms are displayed using colored lines, and all the 30 off-diagonal terms are displayed by gray lines.
|
The diagonal terms are displayed using colored lines, and all the 30 off-diagonal terms are displayed by gray lines.
|
||||||
|
|
||||||
All six diagonal terms are well superimposed up to at least \(1\,kHz\), indicating good manufacturing and mounting uniformity.
|
All six diagonal terms are well superimposed up to at least \(1\,kHz\), indicating good manufacturing and mounting uniformity.
|
||||||
Below the first suspension mode, good decoupling can be observed (the amplitude of all off-diagonal terms are \(\approx 20\) times smaller than the diagonal terms).
|
Below the first suspension mode, good decoupling can be observed (the amplitude of all off-diagonal terms are \(\approx 20\) times smaller than the diagonal terms), indicating the correct assembly of all parts.
|
||||||
|
|
||||||
From 10Hz up to 1kHz, around 10 resonance frequencies can be observed.
|
From 10Hz up to 1kHz, around 10 resonance frequencies can be observed.
|
||||||
The first 4 are suspension modes (at 122Hz, 143Hz, 165Hz and 191Hz) which correlate the modes measured during the modal analysis in Section \ref{ssec:test_nhexa_enc_struts_modal_analysis}.
|
The first 4 are suspension modes (at 122Hz, 143Hz, 165Hz and 191Hz) which correlate the modes measured during the modal analysis in Section \ref{ssec:test_nhexa_enc_struts_modal_analysis}.
|
||||||
@@ -361,7 +341,7 @@ This would not have occurred if the encoders were fixed to the struts.
|
|||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[scale=1]{figs/test_nhexa_identified_frf_de.png}
|
\includegraphics[scale=1,width=\linewidth]{figs/test_nhexa_identified_frf_de.png}
|
||||||
\caption{\label{fig:test_nhexa_identified_frf_de}Measured FRF for the transfer function from \(\mathbf{u}\) to \(\mathbf{d}_e\). The 6 diagonal terms are the colored lines (all superimposed), and the 30 off-diagonal terms are the gray lines.}
|
\caption{\label{fig:test_nhexa_identified_frf_de}Measured FRF for the transfer function from \(\mathbf{u}\) to \(\mathbf{d}_e\). The 6 diagonal terms are the colored lines (all superimposed), and the 30 off-diagonal terms are the gray lines.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
@@ -373,14 +353,14 @@ The first flexible mode of the struts as 235Hz has large amplitude, and therefor
|
|||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[scale=1]{figs/test_nhexa_identified_frf_Vs.png}
|
\includegraphics[scale=1,width=\linewidth]{figs/test_nhexa_identified_frf_Vs.png}
|
||||||
\caption{\label{fig:test_nhexa_identified_frf_Vs}Measured FRF for the transfer function from \(\mathbf{u}\) to \(\mathbf{V}_s\). The 6 diagonal terms are the colored lines (all superimposed), and the 30 off-diagonal terms are the shaded black lines.}
|
\caption{\label{fig:test_nhexa_identified_frf_Vs}Measured FRF for the transfer function from \(\mathbf{u}\) to \(\mathbf{V}_s\). The 6 diagonal terms are the colored lines (all superimposed), and the 30 off-diagonal terms are the shaded black lines.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section{Effect of payload mass on the dynamics}
|
\section{Effect of payload mass on the dynamics}
|
||||||
\label{ssec:test_nhexa_added_mass}
|
\label{ssec:test_nhexa_added_mass}
|
||||||
|
|
||||||
One major challenge in the control of the NASS is the wanted robustness to a change of payload mass; therefore, it is necessary to understand how the dynamics of the nano-hexapod changes with a change in payload mass.
|
One major challenge for controlling the NASS is the wanted robustness to a variation of payload mass; therefore, it is necessary to understand how the dynamics of the nano-hexapod changes with a change in payload mass.
|
||||||
|
|
||||||
To study how the dynamics changes with the payload mass, up to three ``cylindrical masses'' of \(13\,kg\) each can be added for a total of \(\approx 40\,kg\).
|
To study how the dynamics changes with the payload mass, up to three ``cylindrical masses'' of \(13\,kg\) each can be added for a total of \(\approx 40\,kg\).
|
||||||
These three cylindrical masses on top of the nano-hexapod are shown in Figure \ref{fig:test_nhexa_table_mass_3}.
|
These three cylindrical masses on top of the nano-hexapod are shown in Figure \ref{fig:test_nhexa_table_mass_3}.
|
||||||
@@ -422,43 +402,30 @@ For all tested payloads, the measured FRF always have alternating poles and zero
|
|||||||
\caption{\label{fig:test_struts_mounting}Measured Frequency Response Functions from \(u_i\) to \(d_{ei}\) (\subref{fig:test_nhexa_identified_frf_de_masses}) and from \(u_i\) to \(V_{si}\) (\subref{fig:test_nhexa_identified_frf_Vs_masses}) for all 4 payload conditions. Only diagonal terms are shown.}
|
\caption{\label{fig:test_struts_mounting}Measured Frequency Response Functions from \(u_i\) to \(d_{ei}\) (\subref{fig:test_nhexa_identified_frf_de_masses}) and from \(u_i\) to \(V_{si}\) (\subref{fig:test_nhexa_identified_frf_Vs_masses}) for all 4 payload conditions. Only diagonal terms are shown.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section*{Conclusion}
|
|
||||||
After the Nano-Hexapod was fixed on top of the suspended table, its dynamics was identified.
|
|
||||||
|
|
||||||
The frequency response functions from the six DAC voltages \(\mathbf{u}\) to the six encoders measured displacements \(\mathbf{d}_e\) displays alternating complex conjugate poles and complex conjugate zeros up to at least 1kHz.
|
|
||||||
At low frequencies, the coupling is small, indicating the correct assembly of all parts.
|
|
||||||
This should enable the design of a decentralized positioning controller based on the encoders for relative positioning purposes.
|
|
||||||
The suspension and flexible modes measured during the modal analysis (Section \ref{ssec:test_nhexa_enc_struts_modal_analysis}) are also observed in the dynamics.
|
|
||||||
Many other modes are present above 700Hz, which will inevitably limit the achievable bandwidth.
|
|
||||||
The observed effect of the payload's mass on the dynamics was quite large, which also represents a complex control challenge.
|
|
||||||
|
|
||||||
The frequency response functions from the six DAC voltages \(\mathbf{u}\) to the six force sensors voltages \(\mathbf{V}_s\) all have alternating complex conjugate poles and complex conjugate zeros for all the tested payloads.
|
|
||||||
This indicates that it is possible to implement decentralized Integral Force Feedback in a robust manner.
|
|
||||||
|
|
||||||
\chapter{Nano-Hexapod Model Dynamics}
|
\chapter{Nano-Hexapod Model Dynamics}
|
||||||
\label{sec:test_nhexa_model}
|
\label{sec:test_nhexa_model}
|
||||||
In this section, the dynamics measured in Section \ref{sec:test_nhexa_dynamics} is compared with those estimated from the Simscape model.
|
In this section, the dynamics measured in Section \ref{sec:test_nhexa_dynamics} is compared with those estimated from the multi-body model.
|
||||||
The nano-hexapod simscape model was therefore added on top of the vibration table Simscape model, as shown in Figure \ref{fig:test_nhexa_hexa_simscape}.
|
The nano-hexapod multi-body model was therefore added on top of the vibration table multi-body model, as shown in Figure \ref{fig:test_nhexa_hexa_simscape}.
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[scale=1,width=0.8\linewidth]{figs/test_nhexa_hexa_simscape.png}
|
\includegraphics[scale=1,width=0.8\linewidth]{figs/test_nhexa_hexa_simscape.png}
|
||||||
\caption{\label{fig:test_nhexa_hexa_simscape}3D representation of the simscape model with the nano-hexapod on top of the suspended table. Three mass ``layers'' are here added}
|
\caption{\label{fig:test_nhexa_hexa_simscape}3D representation of the multi-body model with the nano-hexapod on top of the suspended table. Three mass ``layers'' are here added}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The model should exhibit certain characteristics that are verified in this section.
|
The model should exhibit certain characteristics that are verified in this section.
|
||||||
First, it should match the measured system dynamics from actuators to sensors presented in Section \ref{sec:test_nhexa_dynamics}.
|
First, it should match the measured system dynamics from actuators to sensors presented in Section \ref{sec:test_nhexa_dynamics}.
|
||||||
Both the ``direct'' terms (Section \ref{ssec:test_nhexa_comp_model}) and ``coupling'' terms (Section \ref{ssec:test_nhexa_comp_model_coupling}) of the Simscape model are compared with the measured dynamics.
|
Both the ``direct'' terms (Section \ref{ssec:test_nhexa_comp_model}) and ``coupling'' terms (Section \ref{ssec:test_nhexa_comp_model_coupling}) of the multi-body model are compared with the measured dynamics.
|
||||||
Second, it should also represents how the system dynamics changes when a payload is fixed to the top platform.
|
Second, it should also represents how the system dynamics changes when a payload is fixed to the top platform.
|
||||||
This is checked in Section \ref{ssec:test_nhexa_comp_model_masses}.
|
This is checked in Section \ref{ssec:test_nhexa_comp_model_masses}.
|
||||||
|
|
||||||
\section{Nano-Hexapod model dynamics}
|
\section{Nano-Hexapod model dynamics}
|
||||||
\label{ssec:test_nhexa_comp_model}
|
\label{ssec:test_nhexa_comp_model}
|
||||||
|
|
||||||
The Simscape model of the nano-hexapod was first configured with 4-DoF flexible joints, 2-DoF APA, and rigid top and bottom plates.
|
The multi-body model of the nano-hexapod was first configured with 4-DoF flexible joints, 2-DoF APA, and rigid top and bottom plates.
|
||||||
The stiffness values of the flexible joints were chosen based on the values estimated using the test bench and on the FEM.
|
The stiffness values of the flexible joints were chosen based on the values estimated using the test bench and on the FEM.
|
||||||
The parameters of the APA model were determined from the test bench of the APA.
|
The parameters of the APA model were determined from the test bench of the APA.
|
||||||
The \(6 \times 6\) transfer function matrices from \(\mathbf{u}\) to \(\mathbf{d}_e\) and from \(\mathbf{u}\) to \(\mathbf{V}_s\) are then extracted from the Simscape model.
|
The \(6 \times 6\) transfer function matrices from \(\mathbf{u}\) to \(\mathbf{d}_e\) and from \(\mathbf{u}\) to \(\mathbf{V}_s\) are then extracted from the multi-body model.
|
||||||
|
|
||||||
First, is it evaluated how well the models matches the ``direct'' terms of the measured FRF matrix.
|
First, is it evaluated how well the models matches the ``direct'' terms of the measured FRF matrix.
|
||||||
To do so, the diagonal terms of the extracted transfer function matrices are compared with the measured FRF in Figure \ref{fig:test_nhexa_comp_simscape_diag}.
|
To do so, the diagonal terms of the extracted transfer function matrices are compared with the measured FRF in Figure \ref{fig:test_nhexa_comp_simscape_diag}.
|
||||||
@@ -479,10 +446,10 @@ At higher frequencies, no resonances can be observed in the model, as the top pl
|
|||||||
\end{center}
|
\end{center}
|
||||||
\subcaption{\label{fig:test_nhexa_comp_simscape_Vs_diag}from $u$ to $V_s$}
|
\subcaption{\label{fig:test_nhexa_comp_simscape_Vs_diag}from $u$ to $V_s$}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\caption{\label{fig:test_nhexa_comp_simscape_diag}Comparison of the diagonal elements (i.e. ``direct'' terms) of the measured FRF matrix and the dynamics identified from the Simscape model. Both for the dynamics from \(u\) to \(d_e\) (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from \(u\) to \(V_s\) (\subref{fig:test_nhexa_comp_simscape_Vs_diag})}
|
\caption{\label{fig:test_nhexa_comp_simscape_diag}Comparison of the diagonal elements (i.e. ``direct'' terms) of the measured FRF matrix and the dynamics identified from the multi-body model. Both for the dynamics from \(u\) to \(d_e\) (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from \(u\) to \(V_s\) (\subref{fig:test_nhexa_comp_simscape_Vs_diag})}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section{Modeling dynamical coupling}
|
\section{Dynamical coupling}
|
||||||
\label{ssec:test_nhexa_comp_model_coupling}
|
\label{ssec:test_nhexa_comp_model_coupling}
|
||||||
|
|
||||||
Another desired feature of the model is that it effectively represents coupling in the system, as this is often the limiting factor for the control of MIMO systems.
|
Another desired feature of the model is that it effectively represents coupling in the system, as this is often the limiting factor for the control of MIMO systems.
|
||||||
@@ -493,7 +460,7 @@ Similar results are observed for all other coupling terms and for the transfer f
|
|||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[scale=1]{figs/test_nhexa_comp_simscape_de_all.png}
|
\includegraphics[scale=1]{figs/test_nhexa_comp_simscape_de_all.png}
|
||||||
\caption{\label{fig:test_nhexa_comp_simscape_de_all}Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal \(u_1\) to the six encoders \(d_{e1}\) to \(d_{e6}\)}
|
\caption{\label{fig:test_nhexa_comp_simscape_de_all}Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal \(u_1\) to the six encoders \(d_{e1}\) to \(d_{e6}\). The APA are here modeled with a 2-DoF mass-spring-damper system.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The APA300ML was then modeled with a \emph{super-element} extracted from a FE-software.
|
The APA300ML was then modeled with a \emph{super-element} extracted from a FE-software.
|
||||||
@@ -505,15 +472,15 @@ Therefore, if the modes of the struts are to be modeled, the \emph{super-element
|
|||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[scale=1]{figs/test_nhexa_comp_simscape_de_all_flex.png}
|
\includegraphics[scale=1]{figs/test_nhexa_comp_simscape_de_all_flex.png}
|
||||||
\caption{\label{fig:test_nhexa_comp_simscape_de_all_flex}Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal \(u_1\) to the six encoders \(d_{e1}\) to \(d_{e6}\)}
|
\caption{\label{fig:test_nhexa_comp_simscape_de_all_flex}Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal \(u_1\) to the six encoders \(d_{e1}\) to \(d_{e6}\). The APA are here modeled with a ``super-element''.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section{Modeling the effect of payload mass}
|
\section{Effect of payload mass}
|
||||||
\label{ssec:test_nhexa_comp_model_masses}
|
\label{ssec:test_nhexa_comp_model_masses}
|
||||||
|
|
||||||
Another important characteristic of the model is that it should represents the dynamics of the system well for all considered payloads.
|
Another important characteristic of the model is that it should represents the dynamics of the system well for all considered payloads.
|
||||||
The model dynamics is therefore compared with the measured dynamics for 4 payloads (no payload, 13kg, 26kg and 39kg) in Figure \ref{fig:test_nhexa_comp_simscape_diag_masses}.
|
The model dynamics is therefore compared with the measured dynamics for 4 payloads (no payload, 13kg, 26kg and 39kg) in Figure \ref{fig:test_nhexa_comp_simscape_diag_masses}.
|
||||||
The observed shift of the suspension modes to lower frequencies with increased payload mass is well represented by the Simscape model.
|
The observed shift of the suspension modes to lower frequencies with increased payload mass is well represented by the multi-body model.
|
||||||
The complex conjugate zeros also well match the experiments both for the encoder outputs (Figure \ref{fig:test_nhexa_comp_simscape_de_diag_masses}) and the force sensor outputs (Figure \ref{fig:test_nhexa_comp_simscape_Vs_diag_masses}).
|
The complex conjugate zeros also well match the experiments both for the encoder outputs (Figure \ref{fig:test_nhexa_comp_simscape_de_diag_masses}) and the force sensor outputs (Figure \ref{fig:test_nhexa_comp_simscape_Vs_diag_masses}).
|
||||||
|
|
||||||
Note that the model displays smaller damping than that observed experimentally for high values of the payload mass.
|
Note that the model displays smaller damping than that observed experimentally for high values of the payload mass.
|
||||||
@@ -533,7 +500,7 @@ However, as decentralized IFF will be applied, the damping is actively brought,
|
|||||||
\end{center}
|
\end{center}
|
||||||
\subcaption{\label{fig:test_nhexa_comp_simscape_Vs_diag_masses}from $u$ to $V_s$}
|
\subcaption{\label{fig:test_nhexa_comp_simscape_Vs_diag_masses}from $u$ to $V_s$}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\caption{\label{fig:test_nhexa_comp_simscape_diag_masses}Comparison of the diagonal elements (i.e. ``direct'' terms) of the measured FRF matrix and the dynamics identified from the Simscape model. Both for the dynamics from \(u\) to \(d_e\) (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from \(u\) to \(V_s\) (\subref{fig:test_nhexa_comp_simscape_Vs_diag})}
|
\caption{\label{fig:test_nhexa_comp_simscape_diag_masses}Comparison of the diagonal elements (i.e. ``direct'' terms) of the measured FRF matrix and the dynamics identified from the multi-body model. Both for the dynamics from \(u\) to \(d_e\) (\subref{fig:test_nhexa_comp_simscape_de_diag}) and from \(u\) to \(V_s\) (\subref{fig:test_nhexa_comp_simscape_Vs_diag})}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
In order to also check if the model well represents the coupling when high payload masses are used, the transfer functions from \(u_1\) to \(d_{e1}\) to \(d_{e6}\) are compared in the case of the 39kg payload in Figure \ref{fig:test_nhexa_comp_simscape_de_all_high_mass}.
|
In order to also check if the model well represents the coupling when high payload masses are used, the transfer functions from \(u_1\) to \(d_{e1}\) to \(d_{e6}\) are compared in the case of the 39kg payload in Figure \ref{fig:test_nhexa_comp_simscape_de_all_high_mass}.
|
||||||
@@ -546,22 +513,25 @@ Therefore, the model effectively represents the system coupling for different pa
|
|||||||
\caption{\label{fig:test_nhexa_comp_simscape_de_all_high_mass}Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal \(u_1\) to the six encoders \(d_{e1}\) to \(d_{e6}\)}
|
\caption{\label{fig:test_nhexa_comp_simscape_de_all_high_mass}Comparison of the measured (in blue) and modeled (in red) frequency transfer functions from the first control signal \(u_1\) to the six encoders \(d_{e1}\) to \(d_{e6}\)}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section*{Conclusion}
|
|
||||||
As illustrated in this section, the developed Simscape model accurately represents the suspension modes of the Nano-Hexapod.
|
|
||||||
Both FRF matrices from \(\mathbf{u}\) to \(\mathbf{V}_s\) and from \(\mathbf{u}\) to \(\mathbf{d}_e\) are well matching with the measurements, even when considering coupling (i.e. off-diagonal) terms, which are very important from a control perspective.
|
|
||||||
|
|
||||||
At frequencies above the suspension modes, the Nano-Hexapod model became inaccurate because the flexible modes were not modeled.
|
|
||||||
It was found that modeling the APA300ML using a ``super-element'' allows to model the internal resonances of the struts.
|
|
||||||
The same can be done with the top platform and the encoder supports; however, the model order would be higher and may become unpractical for simulation.
|
|
||||||
|
|
||||||
\chapter{Conclusion}
|
\chapter{Conclusion}
|
||||||
|
|
||||||
The goal of this test bench was to obtain an accurate model of the nano-hexapod that could then be included on top of the micro-station model.
|
The goal of this test bench was to obtain an accurate model of the nano-hexapod that could then be included on top of the micro-station model.
|
||||||
|
The adopted strategy was to identify the nano-hexapod dynamics under conditions in which all factors that could have affected the nano-hexapod dynamics were considered.
|
||||||
|
This was achieved by developing a suspended table with low frequency suspension modes that can be accurately modeled (Section \ref{sec:test_nhexa_table}).
|
||||||
|
Although the dynamics of the nano-hexapod was indeed impacted by the dynamics of the suspended platform, this impact was also considered in the multi-body model.
|
||||||
|
|
||||||
This strategy was to identify the nano-hexapod dynamics under conditions in which all factors that could have affected the nano-hexapod dynamics were considered.
|
The dynamics of the nano-hexapod was then identified in Section \ref{sec:test_nhexa_dynamics}.
|
||||||
This was achieved by developing a suspended table with low frequency suspension modes that can be accurately modeled.
|
Below the first suspension mode, good decoupling could be observed for the transfer function from \(\bm{u}\) to \(\bm{d}_e\), which enables the design of a decentralized positioning controller based on the encoders for relative positioning purposes.
|
||||||
|
Many other modes were present above 700Hz, which will inevitably limit the achievable bandwidth.
|
||||||
|
The observed effect of the payload's mass on the dynamics was quite large, which also represents a complex control challenge.
|
||||||
|
|
||||||
Although the dynamics of the nano-hexapod was indeed impacted by the dynamics of the suspended platform, this impact was also considered in the Simscape model, and a good match was obtained.
|
The frequency response functions from the six DAC voltages \(\bm{u}\) to the six force sensors voltages \(\bm{V}_s\) all have alternating complex conjugate poles and complex conjugate zeros for all the tested payloads (Figure \ref{fig:test_nhexa_comp_simscape_Vs_diag_masses}).
|
||||||
|
This indicates that it is possible to implement decentralized Integral Force Feedback in a robust manner.
|
||||||
|
|
||||||
|
The developed multi-body model of the nano-hexapod was found to accurately represents the suspension modes of the Nano-Hexapod (Section \ref{sec:test_nhexa_model}).
|
||||||
|
Both FRF matrices from \(\mathbf{u}\) to \(\mathbf{V}_s\) and from \(\mathbf{u}\) to \(\mathbf{d}_e\) are well matching with the measurements, even when considering coupling (i.e. off-diagonal) terms, which are very important from a control perspective.
|
||||||
|
At frequencies above the suspension modes, the Nano-Hexapod model became inaccurate because the flexible modes were not modeled.
|
||||||
|
It was found that modeling the APA300ML using a \emph{super-element} allows to model the internal resonances of the struts.
|
||||||
|
The same can be done with the top platform and the encoder supports; however, the model order would be higher and may become unpractical for simulation.
|
||||||
|
|
||||||
Obtaining a model that accurately represents the complex dynamics of the Nano-Hexapod was made possible by the modeling approach used in this study.
|
Obtaining a model that accurately represents the complex dynamics of the Nano-Hexapod was made possible by the modeling approach used in this study.
|
||||||
This approach involved tuning and validating models of individual components (such as the APA and flexible joints) using dedicated test benches.
|
This approach involved tuning and validating models of individual components (such as the APA and flexible joints) using dedicated test benches.
|
||||||
|