diff --git a/.gitmodules b/.gitmodules index 18fb59c..07710cc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "matlab/nass-simscape"] path = matlab/nass-simscape url = https://git.tdehaeze.xyz/tdehaeze/nass-simscape +[submodule "matlab/vibration-table"] + path = matlab/vibration-table + url = https://git.tdehaeze.xyz/tdehaeze/vibration-table diff --git a/.latexmkrc b/.latexmkrc new file mode 100644 index 0000000..3ee3141 --- /dev/null +++ b/.latexmkrc @@ -0,0 +1,98 @@ +#!/bin/env perl + +# Shebang is only to get syntax highlighting right across GitLab, GitHub and IDEs. +# This file is not meant to be run, but read by `latexmk`. + +# ====================================================================================== +# Perl `latexmk` configuration file +# ====================================================================================== + +# ====================================================================================== +# PDF Generation/Building/Compilation +# ====================================================================================== + +@default_files=('test-bench-nano-hexapod.tex'); + +# PDF-generating modes are: +# 1: pdflatex, as specified by $pdflatex variable (still largely in use) +# 2: postscript conversion, as specified by the $ps2pdf variable (useless) +# 3: dvi conversion, as specified by the $dvipdf variable (useless) +# 4: lualatex, as specified by the $lualatex variable (best) +# 5: xelatex, as specified by the $xelatex variable (second best) +$pdf_mode = 1; + +# Treat undefined references and citations as well as multiply defined references as +# ERRORS instead of WARNINGS. +# This is only checked in the *last* run, since naturally, there are undefined references +# in initial runs. +# This setting is potentially annoying when debugging/editing, but highly desirable +# in the CI pipeline, where such a warning should result in a failed pipeline, since the +# final document is incomplete/corrupted. +# +# However, I could not eradicate all warnings, so that `latexmk` currently fails with +# this option enabled. +# Specifically, `microtype` fails together with `fontawesome`/`fontawesome5`, see: +# https://tex.stackexchange.com/a/547514/120853 +# The fix in that answer did not help. +# Setting `verbose=silent` to mute `microtype` warnings did not work. +# Switching between `fontawesome` and `fontawesome5` did not help. +$warnings_as_errors = 0; + +# Show used CPU time. Looks like: https://tex.stackexchange.com/a/312224/120853 +$show_time = 1; + +# Default is 5; we seem to need more owed to the complexity of the document. +# Actual documents probably don't need this many since they won't use all features, +# plus won't be compiling from cold each time. +$max_repeat=7; + +# --shell-escape option (execution of code outside of latex) is required for the +#'svg' package. +# It converts raw SVG files to the PDF+PDF_TEX combo using InkScape. +# +# SyncTeX allows to jump between source (code) and output (PDF) in IDEs with support +# (many have it). A value of `1` is enabled (gzipped), `-1` is enabled but uncompressed, +# `0` is off. +# Testing in VSCode w/ LaTeX Workshop only worked for the compressed version. +# Adjust this as needed. Of course, only relevant for local use, no effect on a remote +# CI pipeline (except for slower compilation, probably). +# +# %O and %S will forward Options and the Source file, respectively, given to latexmk. +# +# `set_tex_cmds` applies to all *latex commands (latex, xelatex, lualatex, ...), so +# no need to specify these each. This allows to simply change `$pdf_mode` to get a +# different engine. Check if this works with `latexmk --commands`. +set_tex_cmds("--shell-escape -interaction=nonstopmode --synctex=1 %O %S"); + +# Use default pdf viewer +$pdf_previewer = 'zathura'; + +# option 2 is same as 1 (run biber when necessary), but also deletes the +# regeneratable bbl-file in a clenaup (`latexmk -c`). Do not use if original +# bib file is not available! +$bibtex_use = 2; # default: 1 + +# Change default `biber` call, help catch errors faster/clearer. See +# https://web.archive.org/web/20200526101657/https://www.semipol.de/2018/06/12/latex-best-practices.html#database-entries +$biber = "biber --validate-datamodel %O %S"; + +# ====================================================================================== +# Auxiliary Files +# ====================================================================================== + +# Let latexmk know about generated files, so they can be used to detect if a +# rerun is required, or be deleted in a cleanup. +# loe: List of Examples (KOMAScript) +# lol: List of Listings (`listings` and `minted` packages) +# run.xml: biber runs +# glg: glossaries log +# glstex: generated from glossaries-extra +push @generated_exts, 'loe', 'lol', 'run.xml', 'glg', 'glstex'; + +# Also delete the *.glstex files from package glossaries-extra. Problem is, +# that that package generates files of the form "basename-digit.glstex" if +# multiple glossaries are present. Latexmk looks for "basename.glstex" and so +# does not find those. For that purpose, use wildcard. +# Also delete files generated by gnuplot/pgfplots contour plots +# (.dat, .script, .table). +$clean_ext = "%R-*.glstex %R_contourtmp*.*"; diff --git a/doc/PD200-V7-R1.pdf b/doc/PD200-V7-R1.pdf new file mode 100644 index 0000000..9fd00fe Binary files /dev/null and b/doc/PD200-V7-R1.pdf differ diff --git a/figs/bode_plot_hac_iff_loop_gain_diag_inverse.pdf b/figs/bode_plot_hac_iff_loop_gain_diag_inverse.pdf new file mode 100644 index 0000000..1f796fb Binary files /dev/null and b/figs/bode_plot_hac_iff_loop_gain_diag_inverse.pdf differ diff --git a/figs/bode_plot_hac_iff_loop_gain_diag_inverse.png b/figs/bode_plot_hac_iff_loop_gain_diag_inverse.png new file mode 100644 index 0000000..f8d999b Binary files /dev/null and b/figs/bode_plot_hac_iff_loop_gain_diag_inverse.png differ diff --git a/figs/bode_plot_hac_iff_loop_gain_jacobian_cok.pdf b/figs/bode_plot_hac_iff_loop_gain_jacobian_cok.pdf new file mode 100644 index 0000000..0d129ca Binary files /dev/null and b/figs/bode_plot_hac_iff_loop_gain_jacobian_cok.pdf differ diff --git a/figs/bode_plot_hac_iff_loop_gain_jacobian_cok.png b/figs/bode_plot_hac_iff_loop_gain_jacobian_cok.png new file mode 100644 index 0000000..5bb1e0a Binary files /dev/null and b/figs/bode_plot_hac_iff_loop_gain_jacobian_cok.png differ diff --git a/figs/bode_plot_hac_iff_loop_gain_svd.pdf b/figs/bode_plot_hac_iff_loop_gain_svd.pdf new file mode 100644 index 0000000..f380280 Binary files /dev/null and b/figs/bode_plot_hac_iff_loop_gain_svd.pdf differ diff --git a/figs/bode_plot_hac_iff_loop_gain_svd.png b/figs/bode_plot_hac_iff_loop_gain_svd.png new file mode 100644 index 0000000..d40350b Binary files /dev/null and b/figs/bode_plot_hac_iff_loop_gain_svd.png differ diff --git a/figs/bode_plot_hac_iff_plant_jacobian_cok.pdf b/figs/bode_plot_hac_iff_plant_jacobian_cok.pdf new file mode 100644 index 0000000..2d4f25d Binary files /dev/null and b/figs/bode_plot_hac_iff_plant_jacobian_cok.pdf differ diff --git a/figs/bode_plot_hac_iff_plant_jacobian_cok.png b/figs/bode_plot_hac_iff_plant_jacobian_cok.png new file mode 100644 index 0000000..6e63dd8 Binary files /dev/null and b/figs/bode_plot_hac_iff_plant_jacobian_cok.png differ diff --git a/figs/bode_plot_hac_iff_plant_svd.pdf b/figs/bode_plot_hac_iff_plant_svd.pdf new file mode 100644 index 0000000..87bda2c Binary files /dev/null and b/figs/bode_plot_hac_iff_plant_svd.pdf differ diff --git a/figs/bode_plot_hac_iff_plant_svd.png b/figs/bode_plot_hac_iff_plant_svd.png new file mode 100644 index 0000000..bd31b62 Binary files /dev/null and b/figs/bode_plot_hac_iff_plant_svd.png differ diff --git a/figs/comp_iff_plant_frf_sim.pdf b/figs/comp_iff_plant_frf_sim.pdf new file mode 100644 index 0000000..282b7a6 Binary files /dev/null and b/figs/comp_iff_plant_frf_sim.pdf differ diff --git a/figs/comp_iff_plant_frf_sim.png b/figs/comp_iff_plant_frf_sim.png new file mode 100644 index 0000000..6460a40 Binary files /dev/null and b/figs/comp_iff_plant_frf_sim.png differ diff --git a/figs/comp_masses_model_exp_dvf.pdf b/figs/comp_masses_model_exp_dvf.pdf new file mode 100644 index 0000000..8beb46d Binary files /dev/null and b/figs/comp_masses_model_exp_dvf.pdf differ diff --git a/figs/comp_masses_model_exp_dvf.png b/figs/comp_masses_model_exp_dvf.png new file mode 100644 index 0000000..7ad2355 Binary files /dev/null and b/figs/comp_masses_model_exp_dvf.png differ diff --git a/figs/comp_masses_model_exp_dvf_zoom.pdf b/figs/comp_masses_model_exp_dvf_zoom.pdf new file mode 100644 index 0000000..ce2d34b Binary files /dev/null and b/figs/comp_masses_model_exp_dvf_zoom.pdf differ diff --git a/figs/comp_masses_model_exp_dvf_zoom.png b/figs/comp_masses_model_exp_dvf_zoom.png new file mode 100644 index 0000000..55a30a5 Binary files /dev/null and b/figs/comp_masses_model_exp_dvf_zoom.png differ diff --git a/figs/comp_masses_model_exp_iff.pdf b/figs/comp_masses_model_exp_iff.pdf new file mode 100644 index 0000000..ee18f8f Binary files /dev/null and b/figs/comp_masses_model_exp_iff.pdf differ diff --git a/figs/comp_masses_model_exp_iff.png b/figs/comp_masses_model_exp_iff.png new file mode 100644 index 0000000..ff9b3d6 Binary files /dev/null and b/figs/comp_masses_model_exp_iff.png differ diff --git a/figs/comp_masses_model_exp_iff_zoom.pdf b/figs/comp_masses_model_exp_iff_zoom.pdf new file mode 100644 index 0000000..b986289 Binary files /dev/null and b/figs/comp_masses_model_exp_iff_zoom.pdf differ diff --git a/figs/comp_masses_model_exp_iff_zoom.png b/figs/comp_masses_model_exp_iff_zoom.png new file mode 100644 index 0000000..2c262fb Binary files /dev/null and b/figs/comp_masses_model_exp_iff_zoom.png differ diff --git a/figs/comp_plant_coupling_payloads_dvf.pdf b/figs/comp_plant_coupling_payloads_dvf.pdf new file mode 100644 index 0000000..fb5cfd6 Binary files /dev/null and b/figs/comp_plant_coupling_payloads_dvf.pdf differ diff --git a/figs/comp_plant_coupling_payloads_dvf.png b/figs/comp_plant_coupling_payloads_dvf.png new file mode 100644 index 0000000..ab1bdf8 Binary files /dev/null and b/figs/comp_plant_coupling_payloads_dvf.png differ diff --git a/figs/comp_plant_coupling_payloads_iff.pdf b/figs/comp_plant_coupling_payloads_iff.pdf new file mode 100644 index 0000000..ebb47f5 Binary files /dev/null and b/figs/comp_plant_coupling_payloads_iff.pdf differ diff --git a/figs/comp_plant_coupling_payloads_iff.png b/figs/comp_plant_coupling_payloads_iff.png new file mode 100644 index 0000000..7c2e55e Binary files /dev/null and b/figs/comp_plant_coupling_payloads_iff.png differ diff --git a/figs/comp_plant_payloads_dvf.pdf b/figs/comp_plant_payloads_dvf.pdf new file mode 100644 index 0000000..cfa5024 Binary files /dev/null and b/figs/comp_plant_payloads_dvf.pdf differ diff --git a/figs/comp_plant_payloads_dvf.png b/figs/comp_plant_payloads_dvf.png new file mode 100644 index 0000000..68ff04d Binary files /dev/null and b/figs/comp_plant_payloads_dvf.png differ diff --git a/figs/comp_plant_payloads_iff.pdf b/figs/comp_plant_payloads_iff.pdf new file mode 100644 index 0000000..b82f554 Binary files /dev/null and b/figs/comp_plant_payloads_iff.pdf differ diff --git a/figs/comp_plant_payloads_iff.png b/figs/comp_plant_payloads_iff.png new file mode 100644 index 0000000..2a8c63c Binary files /dev/null and b/figs/comp_plant_payloads_iff.png differ diff --git a/figs/comp_undamped_damped_plant_meas_frf.pdf b/figs/comp_undamped_damped_plant_meas_frf.pdf new file mode 100644 index 0000000..ccd2333 Binary files /dev/null and b/figs/comp_undamped_damped_plant_meas_frf.pdf differ diff --git a/figs/comp_undamped_damped_plant_meas_frf.png b/figs/comp_undamped_damped_plant_meas_frf.png new file mode 100644 index 0000000..723a27d Binary files /dev/null and b/figs/comp_undamped_damped_plant_meas_frf.png differ diff --git a/figs/control_architecture_hac_iff_struts.pdf b/figs/control_architecture_hac_iff_struts.pdf index c2d0ea8..c7b2c2e 100644 Binary files a/figs/control_architecture_hac_iff_struts.pdf and b/figs/control_architecture_hac_iff_struts.pdf differ diff --git a/figs/control_architecture_hac_iff_struts.png b/figs/control_architecture_hac_iff_struts.png index 0c98af7..47407a6 100644 Binary files a/figs/control_architecture_hac_iff_struts.png and b/figs/control_architecture_hac_iff_struts.png differ diff --git a/figs/control_architecture_hac_iff_struts.svg b/figs/control_architecture_hac_iff_struts.svg index 1e189ff..37fac3c 100644 Binary files a/figs/control_architecture_hac_iff_struts.svg and b/figs/control_architecture_hac_iff_struts.svg differ diff --git a/figs/control_architecture_hac_iff_struts_L.pdf b/figs/control_architecture_hac_iff_struts_L.pdf new file mode 100644 index 0000000..cd56f09 Binary files /dev/null and b/figs/control_architecture_hac_iff_struts_L.pdf differ diff --git a/figs/control_architecture_hac_iff_struts_L.png b/figs/control_architecture_hac_iff_struts_L.png new file mode 100644 index 0000000..75f6a73 Binary files /dev/null and b/figs/control_architecture_hac_iff_struts_L.png differ diff --git a/figs/control_architecture_hac_iff_struts_L.svg b/figs/control_architecture_hac_iff_struts_L.svg new file mode 100644 index 0000000..8b440d7 Binary files /dev/null and b/figs/control_architecture_hac_iff_struts_L.svg differ diff --git a/figs/damped_iff_plant_meas_frf.pdf b/figs/damped_iff_plant_meas_frf.pdf new file mode 100644 index 0000000..fc7302d Binary files /dev/null and b/figs/damped_iff_plant_meas_frf.pdf differ diff --git a/figs/damped_iff_plant_meas_frf.png b/figs/damped_iff_plant_meas_frf.png new file mode 100644 index 0000000..96f31d1 Binary files /dev/null and b/figs/damped_iff_plant_meas_frf.png differ diff --git a/figs/damped_plant_model_masses.pdf b/figs/damped_plant_model_masses.pdf new file mode 100644 index 0000000..644012b Binary files /dev/null and b/figs/damped_plant_model_masses.pdf differ diff --git a/figs/damped_plant_model_masses.png b/figs/damped_plant_model_masses.png new file mode 100644 index 0000000..8944b0c Binary files /dev/null and b/figs/damped_plant_model_masses.png differ diff --git a/figs/decoupling_arch_crossover.pdf b/figs/decoupling_arch_crossover.pdf new file mode 100644 index 0000000..32c5594 Binary files /dev/null and b/figs/decoupling_arch_crossover.pdf differ diff --git a/figs/decoupling_arch_crossover.png b/figs/decoupling_arch_crossover.png new file mode 100644 index 0000000..a5d7eca Binary files /dev/null and b/figs/decoupling_arch_crossover.png differ diff --git a/figs/decoupling_arch_crossover.svg b/figs/decoupling_arch_crossover.svg new file mode 100644 index 0000000..5e538b5 Binary files /dev/null and b/figs/decoupling_arch_crossover.svg differ diff --git a/figs/decoupling_arch_decentralized.pdf b/figs/decoupling_arch_decentralized.pdf new file mode 100644 index 0000000..b73f3b9 Binary files /dev/null and b/figs/decoupling_arch_decentralized.pdf differ diff --git a/figs/decoupling_arch_decentralized.png b/figs/decoupling_arch_decentralized.png new file mode 100644 index 0000000..2221488 Binary files /dev/null and b/figs/decoupling_arch_decentralized.png differ diff --git a/figs/decoupling_arch_decentralized.svg b/figs/decoupling_arch_decentralized.svg new file mode 100644 index 0000000..6a4bf60 Binary files /dev/null and b/figs/decoupling_arch_decentralized.svg differ diff --git a/figs/decoupling_arch_dynamic.png b/figs/decoupling_arch_dynamic.png new file mode 100644 index 0000000..997a147 Binary files /dev/null and b/figs/decoupling_arch_dynamic.png differ diff --git a/figs/decoupling_arch_dynamic.svg b/figs/decoupling_arch_dynamic.svg new file mode 100644 index 0000000..a4cd1ee Binary files /dev/null and b/figs/decoupling_arch_dynamic.svg differ diff --git a/figs/decoupling_arch_jacobian_cok.pdf b/figs/decoupling_arch_jacobian_cok.pdf new file mode 100644 index 0000000..d6d1cad Binary files /dev/null and b/figs/decoupling_arch_jacobian_cok.pdf differ diff --git a/figs/decoupling_arch_jacobian_cok.png b/figs/decoupling_arch_jacobian_cok.png new file mode 100644 index 0000000..3e258db Binary files /dev/null and b/figs/decoupling_arch_jacobian_cok.png differ diff --git a/figs/decoupling_arch_jacobian_cok.svg b/figs/decoupling_arch_jacobian_cok.svg new file mode 100644 index 0000000..0bb78f8 Binary files /dev/null and b/figs/decoupling_arch_jacobian_cok.svg differ diff --git a/figs/decoupling_arch_jacobian_com.pdf b/figs/decoupling_arch_jacobian_com.pdf new file mode 100644 index 0000000..e439408 Binary files /dev/null and b/figs/decoupling_arch_jacobian_com.pdf differ diff --git a/figs/decoupling_arch_jacobian_com.png b/figs/decoupling_arch_jacobian_com.png new file mode 100644 index 0000000..f8565a9 Binary files /dev/null and b/figs/decoupling_arch_jacobian_com.png differ diff --git a/figs/decoupling_arch_jacobian_com.svg b/figs/decoupling_arch_jacobian_com.svg new file mode 100644 index 0000000..fcd2642 Binary files /dev/null and b/figs/decoupling_arch_jacobian_com.svg differ diff --git a/figs/decoupling_arch_static.pdf b/figs/decoupling_arch_static.pdf new file mode 100644 index 0000000..ddf996f Binary files /dev/null and b/figs/decoupling_arch_static.pdf differ diff --git a/figs/decoupling_arch_static.png b/figs/decoupling_arch_static.png new file mode 100644 index 0000000..0109d9e Binary files /dev/null and b/figs/decoupling_arch_static.png differ diff --git a/figs/decoupling_arch_static.svg b/figs/decoupling_arch_static.svg new file mode 100644 index 0000000..580eccb Binary files /dev/null and b/figs/decoupling_arch_static.svg differ diff --git a/figs/decoupling_arch_svd.pdf b/figs/decoupling_arch_svd.pdf new file mode 100644 index 0000000..2b592ee Binary files /dev/null and b/figs/decoupling_arch_svd.pdf differ diff --git a/figs/decoupling_arch_svd.png b/figs/decoupling_arch_svd.png new file mode 100644 index 0000000..05acf51 Binary files /dev/null and b/figs/decoupling_arch_svd.png differ diff --git a/figs/decoupling_arch_svd.svg b/figs/decoupling_arch_svd.svg new file mode 100644 index 0000000..e70b154 Binary files /dev/null and b/figs/decoupling_arch_svd.svg differ diff --git a/figs/frf_damp_unbalanced_mass.pdf b/figs/frf_damp_unbalanced_mass.pdf new file mode 100644 index 0000000..4be8c7e Binary files /dev/null and b/figs/frf_damp_unbalanced_mass.pdf differ diff --git a/figs/frf_damp_unbalanced_mass.png b/figs/frf_damp_unbalanced_mass.png new file mode 100644 index 0000000..4b832c1 Binary files /dev/null and b/figs/frf_damp_unbalanced_mass.png differ diff --git a/figs/hac_iff_plates_exp_loop_gain_redesigned_K.pdf b/figs/hac_iff_plates_exp_loop_gain_redesigned_K.pdf index 14f535b..2c20f69 100644 Binary files a/figs/hac_iff_plates_exp_loop_gain_redesigned_K.pdf and b/figs/hac_iff_plates_exp_loop_gain_redesigned_K.pdf differ diff --git a/figs/hac_iff_plates_exp_loop_gain_redesigned_K.png b/figs/hac_iff_plates_exp_loop_gain_redesigned_K.png index 137b4d7..69bf442 100644 Binary files a/figs/hac_iff_plates_exp_loop_gain_redesigned_K.png and b/figs/hac_iff_plates_exp_loop_gain_redesigned_K.png differ diff --git a/figs/iff_loop_gain_masses.pdf b/figs/iff_loop_gain_masses.pdf new file mode 100644 index 0000000..58649b4 Binary files /dev/null and b/figs/iff_loop_gain_masses.pdf differ diff --git a/figs/iff_loop_gain_masses.png b/figs/iff_loop_gain_masses.png new file mode 100644 index 0000000..d79d9ef Binary files /dev/null and b/figs/iff_loop_gain_masses.png differ diff --git a/figs/iff_root_locus_masses.pdf b/figs/iff_root_locus_masses.pdf new file mode 100644 index 0000000..301f8e4 Binary files /dev/null and b/figs/iff_root_locus_masses.pdf differ diff --git a/figs/iff_root_locus_masses.png b/figs/iff_root_locus_masses.png new file mode 100644 index 0000000..30639f9 Binary files /dev/null and b/figs/iff_root_locus_masses.png differ diff --git a/figs/interaction_J_cok_plant.pdf b/figs/interaction_J_cok_plant.pdf new file mode 100644 index 0000000..935b450 Binary files /dev/null and b/figs/interaction_J_cok_plant.pdf differ diff --git a/figs/interaction_J_cok_plant.png b/figs/interaction_J_cok_plant.png new file mode 100644 index 0000000..79e0da2 Binary files /dev/null and b/figs/interaction_J_cok_plant.png differ diff --git a/figs/interaction_J_com_plant.pdf b/figs/interaction_J_com_plant.pdf new file mode 100644 index 0000000..1aca7d2 Binary files /dev/null and b/figs/interaction_J_com_plant.pdf differ diff --git a/figs/interaction_J_com_plant.png b/figs/interaction_J_com_plant.png new file mode 100644 index 0000000..4a18a4c Binary files /dev/null and b/figs/interaction_J_com_plant.png differ diff --git a/figs/interaction_compare_rga_numbers.pdf b/figs/interaction_compare_rga_numbers.pdf new file mode 100644 index 0000000..7ffc255 Binary files /dev/null and b/figs/interaction_compare_rga_numbers.pdf differ diff --git a/figs/interaction_compare_rga_numbers.png b/figs/interaction_compare_rga_numbers.png new file mode 100644 index 0000000..b946f78 Binary files /dev/null and b/figs/interaction_compare_rga_numbers.png differ diff --git a/figs/interaction_compare_rga_numbers_rob.pdf b/figs/interaction_compare_rga_numbers_rob.pdf new file mode 100644 index 0000000..0e22cbd Binary files /dev/null and b/figs/interaction_compare_rga_numbers_rob.pdf differ diff --git a/figs/interaction_compare_rga_numbers_rob.png b/figs/interaction_compare_rga_numbers_rob.png new file mode 100644 index 0000000..f4bb3e6 Binary files /dev/null and b/figs/interaction_compare_rga_numbers_rob.png differ diff --git a/figs/interaction_decentralized_plant.pdf b/figs/interaction_decentralized_plant.pdf new file mode 100644 index 0000000..02f323f Binary files /dev/null and b/figs/interaction_decentralized_plant.pdf differ diff --git a/figs/interaction_decentralized_plant.png b/figs/interaction_decentralized_plant.png new file mode 100644 index 0000000..afcf7a5 Binary files /dev/null and b/figs/interaction_decentralized_plant.png differ diff --git a/figs/interaction_dynamic_dec_plant.pdf b/figs/interaction_dynamic_dec_plant.pdf new file mode 100644 index 0000000..3fd7c85 Binary files /dev/null and b/figs/interaction_dynamic_dec_plant.pdf differ diff --git a/figs/interaction_dynamic_dec_plant.png b/figs/interaction_dynamic_dec_plant.png new file mode 100644 index 0000000..a464202 Binary files /dev/null and b/figs/interaction_dynamic_dec_plant.png differ diff --git a/figs/interaction_rga_J_cok.pdf b/figs/interaction_rga_J_cok.pdf new file mode 100644 index 0000000..046fa21 Binary files /dev/null and b/figs/interaction_rga_J_cok.pdf differ diff --git a/figs/interaction_rga_J_cok.png b/figs/interaction_rga_J_cok.png new file mode 100644 index 0000000..9789045 Binary files /dev/null and b/figs/interaction_rga_J_cok.png differ diff --git a/figs/interaction_rga_J_com.pdf b/figs/interaction_rga_J_com.pdf new file mode 100644 index 0000000..4232e1f Binary files /dev/null and b/figs/interaction_rga_J_com.pdf differ diff --git a/figs/interaction_rga_J_com.png b/figs/interaction_rga_J_com.png new file mode 100644 index 0000000..9e6148c Binary files /dev/null and b/figs/interaction_rga_J_com.png differ diff --git a/figs/interaction_rga_decentralized.pdf b/figs/interaction_rga_decentralized.pdf new file mode 100644 index 0000000..7d3e934 Binary files /dev/null and b/figs/interaction_rga_decentralized.pdf differ diff --git a/figs/interaction_rga_decentralized.png b/figs/interaction_rga_decentralized.png new file mode 100644 index 0000000..85bd4c9 Binary files /dev/null and b/figs/interaction_rga_decentralized.png differ diff --git a/figs/interaction_rga_dynamic_dec.pdf b/figs/interaction_rga_dynamic_dec.pdf new file mode 100644 index 0000000..0d56ee8 Binary files /dev/null and b/figs/interaction_rga_dynamic_dec.pdf differ diff --git a/figs/interaction_rga_dynamic_dec.png b/figs/interaction_rga_dynamic_dec.png new file mode 100644 index 0000000..6b1c21e Binary files /dev/null and b/figs/interaction_rga_dynamic_dec.png differ diff --git a/figs/interaction_rga_static_dec.pdf b/figs/interaction_rga_static_dec.pdf new file mode 100644 index 0000000..a405cbd Binary files /dev/null and b/figs/interaction_rga_static_dec.pdf differ diff --git a/figs/interaction_rga_static_dec.png b/figs/interaction_rga_static_dec.png new file mode 100644 index 0000000..0aa8288 Binary files /dev/null and b/figs/interaction_rga_static_dec.png differ diff --git a/figs/interaction_rga_svd.pdf b/figs/interaction_rga_svd.pdf new file mode 100644 index 0000000..1f296b1 Binary files /dev/null and b/figs/interaction_rga_svd.pdf differ diff --git a/figs/interaction_rga_svd.png b/figs/interaction_rga_svd.png new file mode 100644 index 0000000..6582310 Binary files /dev/null and b/figs/interaction_rga_svd.png differ diff --git a/figs/interaction_rga_wc.pdf b/figs/interaction_rga_wc.pdf new file mode 100644 index 0000000..d0cb161 Binary files /dev/null and b/figs/interaction_rga_wc.pdf differ diff --git a/figs/interaction_rga_wc.png b/figs/interaction_rga_wc.png new file mode 100644 index 0000000..4728a1c Binary files /dev/null and b/figs/interaction_rga_wc.png differ diff --git a/figs/interaction_static_dec_plant.pdf b/figs/interaction_static_dec_plant.pdf new file mode 100644 index 0000000..68b1c7b Binary files /dev/null and b/figs/interaction_static_dec_plant.pdf differ diff --git a/figs/interaction_static_dec_plant.png b/figs/interaction_static_dec_plant.png new file mode 100644 index 0000000..6554005 Binary files /dev/null and b/figs/interaction_static_dec_plant.png differ diff --git a/figs/interaction_svd_plant.pdf b/figs/interaction_svd_plant.pdf new file mode 100644 index 0000000..6f0734f Binary files /dev/null and b/figs/interaction_svd_plant.pdf differ diff --git a/figs/interaction_svd_plant.png b/figs/interaction_svd_plant.png new file mode 100644 index 0000000..f6d740c Binary files /dev/null and b/figs/interaction_svd_plant.png differ diff --git a/figs/interaction_wc_plant.pdf b/figs/interaction_wc_plant.pdf new file mode 100644 index 0000000..9fde506 Binary files /dev/null and b/figs/interaction_wc_plant.pdf differ diff --git a/figs/interaction_wc_plant.png b/figs/interaction_wc_plant.png new file mode 100644 index 0000000..88a83ce Binary files /dev/null and b/figs/interaction_wc_plant.png differ diff --git a/figs/loci_hac_iff_loop_gain_diag_inverse.pdf b/figs/loci_hac_iff_loop_gain_diag_inverse.pdf new file mode 100644 index 0000000..5140824 Binary files /dev/null and b/figs/loci_hac_iff_loop_gain_diag_inverse.pdf differ diff --git a/figs/loci_hac_iff_loop_gain_diag_inverse.png b/figs/loci_hac_iff_loop_gain_diag_inverse.png new file mode 100644 index 0000000..d5a54b4 Binary files /dev/null and b/figs/loci_hac_iff_loop_gain_diag_inverse.png differ diff --git a/figs/loci_hac_iff_loop_gain_jacobian_cok.pdf b/figs/loci_hac_iff_loop_gain_jacobian_cok.pdf new file mode 100644 index 0000000..ae73137 Binary files /dev/null and b/figs/loci_hac_iff_loop_gain_jacobian_cok.pdf differ diff --git a/figs/loci_hac_iff_loop_gain_jacobian_cok.png b/figs/loci_hac_iff_loop_gain_jacobian_cok.png new file mode 100644 index 0000000..6a0c2f1 Binary files /dev/null and b/figs/loci_hac_iff_loop_gain_jacobian_cok.png differ diff --git a/figs/loci_hac_iff_loop_gain_svd.pdf b/figs/loci_hac_iff_loop_gain_svd.pdf new file mode 100644 index 0000000..7ed30b5 Binary files /dev/null and b/figs/loci_hac_iff_loop_gain_svd.pdf differ diff --git a/figs/loci_hac_iff_loop_gain_svd.png b/figs/loci_hac_iff_loop_gain_svd.png new file mode 100644 index 0000000..b813d1c Binary files /dev/null and b/figs/loci_hac_iff_loop_gain_svd.png differ diff --git a/figs/loop_gain_hac_iff_struts.pdf b/figs/loop_gain_hac_iff_struts.pdf index b8d87e4..a223e21 100644 Binary files a/figs/loop_gain_hac_iff_struts.pdf and b/figs/loop_gain_hac_iff_struts.pdf differ diff --git a/figs/loop_gain_hac_iff_struts.png b/figs/loop_gain_hac_iff_struts.png index 32e3022..222d70c 100644 Binary files a/figs/loop_gain_hac_iff_struts.png and b/figs/loop_gain_hac_iff_struts.png differ diff --git a/figs/nano_hexapod_damped_bode_plot.pdf b/figs/nano_hexapod_damped_bode_plot.pdf new file mode 100644 index 0000000..83ebf41 Binary files /dev/null and b/figs/nano_hexapod_damped_bode_plot.pdf differ diff --git a/figs/nano_hexapod_damped_bode_plot.png b/figs/nano_hexapod_damped_bode_plot.png new file mode 100644 index 0000000..32f2b29 Binary files /dev/null and b/figs/nano_hexapod_damped_bode_plot.png differ diff --git a/figs/nano_hexapod_enc_bode_plot.pdf b/figs/nano_hexapod_enc_bode_plot.pdf new file mode 100644 index 0000000..c09316c Binary files /dev/null and b/figs/nano_hexapod_enc_bode_plot.pdf differ diff --git a/figs/nano_hexapod_enc_bode_plot.png b/figs/nano_hexapod_enc_bode_plot.png new file mode 100644 index 0000000..a9b5821 Binary files /dev/null and b/figs/nano_hexapod_enc_bode_plot.png differ diff --git a/figs/nano_hexapod_identification_comp_simscape.pdf b/figs/nano_hexapod_identification_comp_simscape.pdf new file mode 100644 index 0000000..495a569 Binary files /dev/null and b/figs/nano_hexapod_identification_comp_simscape.pdf differ diff --git a/figs/nano_hexapod_identification_comp_simscape.png b/figs/nano_hexapod_identification_comp_simscape.png new file mode 100644 index 0000000..7411e57 Binary files /dev/null and b/figs/nano_hexapod_identification_comp_simscape.png differ diff --git a/figs/nano_hexapod_identification_comp_simscape_full.pdf b/figs/nano_hexapod_identification_comp_simscape_full.pdf new file mode 100644 index 0000000..003f46d Binary files /dev/null and b/figs/nano_hexapod_identification_comp_simscape_full.pdf differ diff --git a/figs/nano_hexapod_identification_comp_simscape_full.png b/figs/nano_hexapod_identification_comp_simscape_full.png new file mode 100644 index 0000000..f71c070 Binary files /dev/null and b/figs/nano_hexapod_identification_comp_simscape_full.png differ diff --git a/figs/nano_hexapod_identification_damp_comp_simscape.pdf b/figs/nano_hexapod_identification_damp_comp_simscape.pdf new file mode 100644 index 0000000..ca696e8 Binary files /dev/null and b/figs/nano_hexapod_identification_damp_comp_simscape.pdf differ diff --git a/figs/nano_hexapod_identification_damp_comp_simscape.png b/figs/nano_hexapod_identification_damp_comp_simscape.png new file mode 100644 index 0000000..76b8f64 Binary files /dev/null and b/figs/nano_hexapod_identification_damp_comp_simscape.png differ diff --git a/figs/nano_hexapod_identification_damp_comp_simscape_both.pdf b/figs/nano_hexapod_identification_damp_comp_simscape_both.pdf new file mode 100644 index 0000000..f10a77a Binary files /dev/null and b/figs/nano_hexapod_identification_damp_comp_simscape_both.pdf differ diff --git a/figs/nano_hexapod_identification_damp_comp_simscape_both.png b/figs/nano_hexapod_identification_damp_comp_simscape_both.png new file mode 100644 index 0000000..ff2e8a0 Binary files /dev/null and b/figs/nano_hexapod_identification_damp_comp_simscape_both.png differ diff --git a/figs/nano_hexapod_iff_bode_plot.pdf b/figs/nano_hexapod_iff_bode_plot.pdf new file mode 100644 index 0000000..5ab7732 Binary files /dev/null and b/figs/nano_hexapod_iff_bode_plot.pdf differ diff --git a/figs/nano_hexapod_iff_bode_plot.png b/figs/nano_hexapod_iff_bode_plot.png new file mode 100644 index 0000000..83e5ab1 Binary files /dev/null and b/figs/nano_hexapod_iff_bode_plot.png differ diff --git a/figs/nano_hexapod_signals_hac_iff.pdf b/figs/nano_hexapod_signals_hac_iff.pdf new file mode 100644 index 0000000..4fa39b0 Binary files /dev/null and b/figs/nano_hexapod_signals_hac_iff.pdf differ diff --git a/figs/nano_hexapod_signals_hac_iff.png b/figs/nano_hexapod_signals_hac_iff.png new file mode 100644 index 0000000..ed18047 Binary files /dev/null and b/figs/nano_hexapod_signals_hac_iff.png differ diff --git a/figs/nano_hexapod_signals_hac_iff.svg b/figs/nano_hexapod_signals_hac_iff.svg new file mode 100644 index 0000000..3802238 Binary files /dev/null and b/figs/nano_hexapod_signals_hac_iff.svg differ diff --git a/figs/nano_hexapod_signals_iff.pdf b/figs/nano_hexapod_signals_iff.pdf new file mode 100644 index 0000000..7c1b7c9 Binary files /dev/null and b/figs/nano_hexapod_signals_iff.pdf differ diff --git a/figs/nano_hexapod_signals_iff.png b/figs/nano_hexapod_signals_iff.png new file mode 100644 index 0000000..ed18047 Binary files /dev/null and b/figs/nano_hexapod_signals_iff.png differ diff --git a/figs/nano_hexapod_signals_iff.svg b/figs/nano_hexapod_signals_iff.svg new file mode 100644 index 0000000..3802238 Binary files /dev/null and b/figs/nano_hexapod_signals_iff.svg differ diff --git a/figs/nass_ref_rx_ry.pdf b/figs/nass_ref_rx_ry.pdf new file mode 100644 index 0000000..9608178 Binary files /dev/null and b/figs/nass_ref_rx_ry.pdf differ diff --git a/figs/nass_ref_rx_ry.png b/figs/nass_ref_rx_ry.png new file mode 100644 index 0000000..22f08a8 Binary files /dev/null and b/figs/nass_ref_rx_ry.png differ diff --git a/figs/nass_ref_xy_plane.pdf b/figs/nass_ref_xy_plane.pdf new file mode 100644 index 0000000..70a10bd Binary files /dev/null and b/figs/nass_ref_xy_plane.pdf differ diff --git a/figs/nass_ref_xy_plane.png b/figs/nass_ref_xy_plane.png new file mode 100644 index 0000000..2eb1058 Binary files /dev/null and b/figs/nass_ref_xy_plane.png differ diff --git a/figs/nass_scan_conclusion_slide.svg b/figs/nass_scan_conclusion_slide.svg new file mode 100644 index 0000000..aa09710 Binary files /dev/null and b/figs/nass_scan_conclusion_slide.svg differ diff --git a/figs/nass_scans_first_test_exp.pdf b/figs/nass_scans_first_test_exp.pdf index 03b96da..a1e921c 100644 Binary files a/figs/nass_scans_first_test_exp.pdf and b/figs/nass_scans_first_test_exp.pdf differ diff --git a/figs/nass_scans_first_test_exp.png b/figs/nass_scans_first_test_exp.png index a471a1c..6cd3eac 100644 Binary files a/figs/nass_scans_first_test_exp.png and b/figs/nass_scans_first_test_exp.png differ diff --git a/figs/picture_added_3_masses.jpg b/figs/picture_added_3_masses.jpg new file mode 100644 index 0000000..ed4bb5d Binary files /dev/null and b/figs/picture_added_3_masses.jpg differ diff --git a/figs/picture_unbalanced_payload.jpg b/figs/picture_unbalanced_payload.jpg new file mode 100644 index 0000000..4d1a54e Binary files /dev/null and b/figs/picture_unbalanced_payload.jpg differ diff --git a/figs/reduced_coupling_iff_masses.pdf b/figs/reduced_coupling_iff_masses.pdf new file mode 100644 index 0000000..673c016 Binary files /dev/null and b/figs/reduced_coupling_iff_masses.pdf differ diff --git a/figs/reduced_coupling_iff_masses.png b/figs/reduced_coupling_iff_masses.png new file mode 100644 index 0000000..5767955 Binary files /dev/null and b/figs/reduced_coupling_iff_masses.png differ diff --git a/figs/tilt_scan_example_trajectory.pdf b/figs/tilt_scan_example_trajectory.pdf new file mode 100644 index 0000000..0eb7047 Binary files /dev/null and b/figs/tilt_scan_example_trajectory.pdf differ diff --git a/figs/tilt_scan_example_trajectory.png b/figs/tilt_scan_example_trajectory.png new file mode 100644 index 0000000..b4565d3 Binary files /dev/null and b/figs/tilt_scan_example_trajectory.png differ diff --git a/figs/tilt_scan_example_trajectory_struts.pdf b/figs/tilt_scan_example_trajectory_struts.pdf new file mode 100644 index 0000000..ec10501 Binary files /dev/null and b/figs/tilt_scan_example_trajectory_struts.pdf differ diff --git a/figs/tilt_scan_example_trajectory_struts.png b/figs/tilt_scan_example_trajectory_struts.png new file mode 100644 index 0000000..9ad78d6 Binary files /dev/null and b/figs/tilt_scan_example_trajectory_struts.png differ diff --git a/figs/yz_scan_example_trajectory.pdf b/figs/yz_scan_example_trajectory.pdf index e4aa04f..ded9297 100644 Binary files a/figs/yz_scan_example_trajectory.pdf and b/figs/yz_scan_example_trajectory.pdf differ diff --git a/figs/yz_scan_example_trajectory.png b/figs/yz_scan_example_trajectory.png index 2c05e1d..8863412 100644 Binary files a/figs/yz_scan_example_trajectory.png and b/figs/yz_scan_example_trajectory.png differ diff --git a/figs/yz_scan_example_trajectory_struts.pdf b/figs/yz_scan_example_trajectory_struts.pdf index e74fa13..920b37e 100644 Binary files a/figs/yz_scan_example_trajectory_struts.pdf and b/figs/yz_scan_example_trajectory_struts.pdf differ diff --git a/figs/yz_scan_example_trajectory_struts.png b/figs/yz_scan_example_trajectory_struts.png index 0ceac54..9468648 100644 Binary files a/figs/yz_scan_example_trajectory_struts.png and b/figs/yz_scan_example_trajectory_struts.png differ diff --git a/figs/yz_scan_example_trajectory_yz_plane.pdf b/figs/yz_scan_example_trajectory_yz_plane.pdf index 702b1a1..850bf72 100644 Binary files a/figs/yz_scan_example_trajectory_yz_plane.pdf and b/figs/yz_scan_example_trajectory_yz_plane.pdf differ diff --git a/figs/yz_scan_example_trajectory_yz_plane.png b/figs/yz_scan_example_trajectory_yz_plane.png index 7bd4cff..b9eafc4 100644 Binary files a/figs/yz_scan_example_trajectory_yz_plane.png and b/figs/yz_scan_example_trajectory_yz_plane.png differ diff --git a/figs/yz_scans_exp_results_first_K.pdf b/figs/yz_scans_exp_results_first_K.pdf index dd8fc51..c3232a4 100644 Binary files a/figs/yz_scans_exp_results_first_K.pdf and b/figs/yz_scans_exp_results_first_K.pdf differ diff --git a/matlab/src/generateXYZTrajectory.m b/matlab/src/generateXYZTrajectory.m index e3a15da..3c2e69f 100644 --- a/matlab/src/generateXYZTrajectory.m +++ b/matlab/src/generateXYZTrajectory.m @@ -12,9 +12,9 @@ function [ref] = generateXYZTrajectory(args) arguments args.points double {mustBeNumeric} = zeros(2, 3) % [m] - args.ti (1,1) double {mustBeNumeric, mustBePositive} = 1 % Time to go to first point and after last point [s] - args.tw (1,1) double {mustBeNumeric, mustBePositive} = 0.5 % Time wait between each point [s] - args.tm (1,1) double {mustBeNumeric, mustBePositive} = 1 % Motion time between points [s] + args.ti (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % Time to go to first point and after last point [s] + args.tw (1,1) double {mustBeNumeric, mustBeNonnegative} = 0.5 % Time wait between each point [s] + args.tm (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % Motion time between points [s] args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % Sampling Time [s] end diff --git a/matlab/src/generateYZScanTrajectory.m b/matlab/src/generateYZScanTrajectory.m index d40da82..e23b168 100644 --- a/matlab/src/generateYZScanTrajectory.m +++ b/matlab/src/generateYZScanTrajectory.m @@ -10,17 +10,17 @@ function [ref] = generateYZScanTrajectory(args) % - ref - Reference Signal arguments - args.y_tot (1,1) double {mustBeNumeric} = 10e-6 % [m] - args.z_tot (1,1) double {mustBeNumeric} = 10e-6 % [m] + args.y_tot (1,1) double {mustBeNumeric, mustBePositive} = 10e-6 % [m] + args.z_tot (1,1) double {mustBeNumeric, mustBePositive} = 10e-6 % [m] args.n (1,1) double {mustBeInteger, mustBePositive} = 10 % [-] args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-4 % [s] - args.ti (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] - args.tw (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] - args.ty (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] - args.tz (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] + args.ti (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % [s] + args.tw (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % [s] + args.ty (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % [s] + args.tz (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % [s] end time_i = 0:args.Ts:args.ti; diff --git a/ref.bib b/ref.bib index 0bd32bc..1c67b3f 100644 --- a/ref.bib +++ b/ref.bib @@ -22,3 +22,26 @@ url = {https://doi.org/10.3990/1.9789036530163}, 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}, +} diff --git a/test-bench-nano-hexapod.html b/test-bench-nano-hexapod.html index afadbf6..f982462 100644 --- a/test-bench-nano-hexapod.html +++ b/test-bench-nano-hexapod.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +generateXYZTrajectory
-
generateYZScanTrajectory
+generateXYZTrajectory
+
getTransformationMatrixAcc
+generateYZScanTrajectory
getJacobianNanoHexapod
+generateSpiralAngleTrajectory
+getTransformationMatrixAcc
+
+getJacobianNanoHexapod
+
-This document is dedicated to the experimental study of the nano-hexapod shown in Figure 1. +This document is dedicated to the experimental study of the nano-hexapod shown in Figure 1.
-
Figure 1: Nano-Hexapod
-Here are the documentation of the equipment used for this test bench (lots of them are shwon in Figure 2): +Here are the documentation of the equipment used for this test bench (lots of them are shwon in Figure 2):
Figure 2: Nano-Hexapod and the control electronics
-In Figure 3 is shown a block diagram of the experimental setup. -When possible, the notations are consistent with this diagram and summarized in Table 1. +In Figure 3 is shown a block diagram of the experimental setup. +When possible, the notations are consistent with this diagram and summarized in Table 1.
-
Figure 3: Block diagram of the system with named signals
-62011.5 | +3910.6 | +4299.3 | +660.7 | +-4016.5 | +-4373.6 | +
3914.4 | +-61991.2 | +-4356.8 | +-4019.2 | +640.2 | +4281.6 | +
-4020.0 | +-4370.5 | +-62004.5 | +3914.6 | +4295.8 | +653.8 | +
660.9 | +4292.4 | +3903.3 | +-62012.2 | +-4366.5 | +-4008.9 | +
4302.8 | +655.6 | +-4025.8 | +-4377.8 | +-62006.0 | +3919.7 | +
-4377.9 | +-4013.2 | +668.6 | +4303.7 | +3906.8 | +-62019.3 | +
+
+Figure 86: Bode Plot of the static decoupled plant
++
+Figure 87: RGA number for the statically decoupled plant
++
+Figure 88: Decoupling using the inverse of a dynamical model \(\bm{\hat{G}}\) of the plant dynamics \(\bm{G}\)
+67229.8 | +3769.3 | +-13704.6 | +-23084.8 | +-6318.2 | +23378.7 | +
3486.2 | +67708.9 | +23220.0 | +-6314.5 | +-22699.8 | +-14060.6 | +
-5731.7 | +22471.7 | +66701.4 | +3070.2 | +-13205.6 | +-21944.6 | +
-23305.5 | +-14542.6 | +2743.2 | +70097.6 | +24846.8 | +-5295.0 | +
-14882.9 | +-22957.8 | +-5344.4 | +25786.2 | +70484.6 | +2979.9 | +
24353.3 | +-5195.2 | +-22449.0 | +-14459.2 | +2203.6 | +69484.2 | +
+
+Figure 89: Bode Plot of the plant decoupled at the crossover
+%% Compute RGA Matrix +RGA_wc = zeros(size(frf_coupled)); +for i = 1:length(frf_iff.f) + RGA_wc(i,:,:) = squeeze(G_dL_wc(i,:,:)).*inv(squeeze(G_dL_wc(i,:,:))).'; +end + +%% Compute RGA-number +RGA_wc_sum = zeros(size(RGA_wc, 1), 1); +for i = 1:size(RGA_wc, 1) + RGA_wc_sum(i) = sum(sum(abs(eye(6) - squeeze(RGA_wc(i,:,:))))); +end ++
+
+Figure 90: RGA number for the plant decoupled at the crossover
++
+Figure 91: Decoupling using the Singular Value Decomposition
++
+Figure 92: Bode Plot of the plant decoupled using the Singular Value Decomposition
+%% Compute the RGA matrix for the SVD decoupled plant +RGA_svd = zeros(size(frf_coupled)); +for i = 1:length(frf_iff.f) + RGA_svd(i,:,:) = squeeze(G_dL_svd(i,:,:)).*inv(squeeze(G_dL_svd(i,:,:))).'; +end + +%% Compute the RGA-number +RGA_svd_sum = zeros(size(RGA_svd, 1), 1); +for i = 1:length(frf_iff.f) + RGA_svd_sum(i) = sum(sum(abs(eye(6) - squeeze(RGA_svd(i,:,:))))); +end ++
%% RGA Number for the SVD decoupled plant +figure; +plot(frf_iff.f, RGA_svd_sum, 'k-'); +set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); +xlabel('Frequency [Hz]'); ylabel('RGA Number'); +xlim([10, 1e3]); ylim([1e-2, 1e2]); ++
+
+Figure 93: RGA number for the plant decoupled using the SVD
++
+Figure 97: Decoupling using Jacobian matrices evaluated at the Center of Stiffness
++
+Figure 98: Bode Plot of the plant decoupled using the Jacobian evaluated at the “center of stiffness”
++
+Figure 99: RGA number for the plant decoupled using the Jacobian evaluted at the Center of Stiffness
++
+Figure 100: Decoupling using Jacobian matrices evaluated at the Center of Mass
++
+Figure 101: Bode Plot of the plant decoupled using the Jacobian evaluated at the Center of Mass
++
+Figure 102: RGA number for the plant decoupled using the Jacobian evaluted at the Center of Mass
++Let’s now compare all of the decoupling methods (Figure 103). +
+ ++From Figure 103, the following remarks are made: +
++
+Figure 103: Comparison of the obtained RGA-numbers for all the decoupling methods
++Let’s now see how the decoupling is changing when changing the payload’s mass. +
+frf_new = frf_iff.G_dL{3}; ++
+The obtained RGA-numbers are shown in Figure 104. +
+ ++From Figure 104: +
++
+Figure 104: Change of the RGA-number with a change of the payload. Indication of the robustness of the inversion method.
++Several decoupling methods can be used: +
+Method | +RGA | +Diag Plant | +Robustness | +
---|---|---|---|
Decentralized | +-- | +Equal | +++ | +
Static dec. | +-- | +Equal | +++ | +
Crossover dec. | +- | +Equal | +0 | +
SVD | +++ | +Diff | ++ | +
Dynamic dec. | +++ | +Unity, equal | +- | +
Jacobian - CoK | ++ | +Diff | +++ | +
Jacobian - CoM | +0 | +Diff | ++ | +
+In this section we wish to develop a robust High Authority Controller (HAC) that is working for all payloads. +
+ ++(Indri and Oboe 2020) +
+G_nom = frf_iff.G_dL{2}; % Nominal Plant ++
+
+Figure 105: Bode plot of the decoupled plant using the Jacobian evaluated at the Center of Stiffness
++As the diagonal elements of the plant are not equal, several SISO controllers are designed and then combined to form a diagonal controller. +All the diagonal terms of the controller consists of: +
++
+Figure 106: Bode plot of the Loop Gain when using the Jacobian evaluated at the Center of Stiffness to decouple the system
+%% Controller to be implemented +Kd = inv(J_cok')*input_normalize*ss(Kd_diag)*inv(Js_cok); ++
+Now the stability of the feedback loop is verified using the generalized Nyquist criteria. +
+ + ++
+Figure 107: Loci of \(L(j\omega)\) in the complex plane.
+save('mat/Khac_iff_struts_jacobian_cok.mat', 'Kd') ++
G_nom = frf_iff.G_dL{2}; % Nominal Plant ++
+
+Figure 108: Bode plot of the decoupled plant using the SVD
++
+Figure 109: Bode plot of Loop Gain when using the SVD
+%% Compute the Eigenvalues of the loop gain +Ldet = zeros(3, 6, length(frf_iff.f)); + +for i = 1:3 + Lmimo = pagemtimes(permute(frf_iff.G_dL{i}, [2,3,1]),squeeze(freqresp(Kd, frf_iff.f, 'Hz'))); + for i_f = 2:length(frf_iff.f) + Ldet(i,:, i_f) = eig(squeeze(Lmimo(:,:,i_f))); + end +end ++
+
+Figure 110: Locis of \(L(j\omega)\) in the complex plane.
+save('mat/Khac_iff_struts_svd.mat', 'Kd') ++
generateXYZTrajectory
generateXYZTrajectory
function [ref] = generateXYZTrajectory(args) -% generateXYZTrajectory - +% generateXYZTrajectory - % -% Syntax: [ref] = generateXYZTrajectory(args) +% Syntax: [ref] = generateXYZTrajectory(args) % -% Inputs: -% - args +% Inputs: +% - args % -% Outputs: -% - ref - Reference Signal +% Outputs: +% - ref - Reference Signal
arguments - args.points double {mustBeNumeric} = zeros(2, 3) % [m] +arguments + args.points double {mustBeNumeric} = zeros(2, 3) % [m] - args.ti (1,1) double {mustBeNumeric, mustBePositive} = 1 % Time to go to first point and after last point [s] - args.tw (1,1) double {mustBeNumeric, mustBePositive} = 0.5 % Time wait between each point [s] - args.tm (1,1) double {mustBeNumeric, mustBePositive} = 1 % Motion time between points [s] + args.ti (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % Time to go to first point and after last point [s] + args.tw (1,1) double {mustBeNumeric, mustBeNonnegative} = 0.5 % Time wait between each point [s] + args.tm (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % Motion time between points [s] - args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % Sampling Time [s] + args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % Sampling Time [s] end
time_i = 0:args.Ts:args.ti; -time_w = 0:args.Ts:args.tw; -time_m = 0:args.Ts:args.tm; +time_i = 0:args.Ts:args.ti; +time_w = 0:args.Ts:args.tw; +time_m = 0:args.Ts:args.tm;
% Go to initial position -xyz = (args.points(1,:))'*(time_i/args.ti); +% Go to initial position +xyz = (args.points(1,:))'*(time_i/args.ti); -% Wait -xyz = [xyz, xyz(:,end).*ones(size(time_w))]; +% Wait +xyz = [xyz, xyz(:,end).*ones(size(time_w))]; -% Scans -for i = 2:size(args.points, 1) - % Go to next point - xyz = [xyz, xyz(:,end) + (args.points(i,:)' - xyz(:,end))*(time_m/args.tm)]; - % Wait a litle bit - xyz = [xyz, xyz(:,end).*ones(size(time_w))]; +% Scans +for i = 2:size(args.points, 1) + % Go to next point + xyz = [xyz, xyz(:,end) + (args.points(i,:)' - xyz(:,end))*(time_m/args.tm)]; + % Wait a litle bit + xyz = [xyz, xyz(:,end).*ones(size(time_w))]; end -% End motion -xyz = [xyz, xyz(:,end) - xyz(:,end)*(time_i/args.ti)]; +% End motion +xyz = [xyz, xyz(:,end) - xyz(:,end)*(time_i/args.ti)];
t = 0:args.Ts:args.Ts*(length(xyz) - 1); +t = 0:args.Ts:args.Ts*(length(xyz) - 1);
ref = zeros(length(xyz), 7); -ref(:, 1) = t; -ref(:, 2:4) = xyz'; +ref(:, 1) = t; +ref(:, 2:4) = xyz';
generateYZScanTrajectory
generateYZScanTrajectory
function [ref] = generateYZScanTrajectory(args) -% generateYZScanTrajectory - +% generateYZScanTrajectory - % -% Syntax: [ref] = generateYZScanTrajectory(args) +% Syntax: [ref] = generateYZScanTrajectory(args) % -% Inputs: -% - args +% Inputs: +% - args % -% Outputs: -% - ref - Reference Signal +% Outputs: +% - ref - Reference Signal
arguments - args.y_tot (1,1) double {mustBeNumeric} = 10e-6 % [m] - args.z_tot (1,1) double {mustBeNumeric} = 10e-6 % [m] +arguments + args.y_tot (1,1) double {mustBeNumeric, mustBePositive} = 10e-6 % [m] + args.z_tot (1,1) double {mustBeNumeric, mustBePositive} = 10e-6 % [m] - args.n (1,1) double {mustBeInteger, mustBePositive} = 10 % [-] + args.n (1,1) double {mustBeInteger, mustBePositive} = 10 % [-] - args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-4 % [s] + args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-4 % [s] - args.ti (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] - args.tw (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] - args.ty (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] - args.tz (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] + args.ti (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % [s] + args.tw (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % [s] + args.ty (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % [s] + args.tz (1,1) double {mustBeNumeric, mustBeNonnegative} = 1 % [s] end
time_i = 0:args.Ts:args.ti; -time_w = 0:args.Ts:args.tw; -time_y = 0:args.Ts:args.ty; -time_z = 0:args.Ts:args.tz; +time_i = 0:args.Ts:args.ti; +time_w = 0:args.Ts:args.tw; +time_y = 0:args.Ts:args.ty; +time_z = 0:args.Ts:args.tz;
% Go to initial position -y = (time_i/args.ti)*(args.y_tot/2); +% Go to initial position +y = (time_i/args.ti)*(args.y_tot/2); -% Wait -y = [y, y(end)*ones(size(time_w))]; +% Wait +y = [y, y(end)*ones(size(time_w))]; -% Scans -for i = 1:args.n - if mod(i,2) == 0 - y = [y, -(args.y_tot/2) + (time_y/args.ty)*args.y_tot]; +% Scans +for i = 1:args.n + if mod(i,2) == 0 + y = [y, -(args.y_tot/2) + (time_y/args.ty)*args.y_tot]; else - y = [y, (args.y_tot/2) - (time_y/args.ty)*args.y_tot]; + y = [y, (args.y_tot/2) - (time_y/args.ty)*args.y_tot]; end - if i < args.n - y = [y, y(end)*ones(size(time_z))]; + if i < args.n + y = [y, y(end)*ones(size(time_z))]; end end -% Wait a litle bit -y = [y, y(end)*ones(size(time_w))]; +% Wait a litle bit +y = [y, y(end)*ones(size(time_w))]; -% End motion -y = [y, y(end) - y(end)*time_i/args.ti]; +% End motion +y = [y, y(end) - y(end)*time_i/args.ti];
% Go to initial position -z = (time_i/args.ti)*(args.z_tot/2); +% Go to initial position +z = (time_i/args.ti)*(args.z_tot/2); -% Wait -z = [z, z(end)*ones(size(time_w))]; +% Wait +z = [z, z(end)*ones(size(time_w))]; -% Scans -for i = 1:args.n - z = [z, z(end)*ones(size(time_y))]; +% Scans +for i = 1:args.n + z = [z, z(end)*ones(size(time_y))]; - if i < args.n - z = [z, z(end) - (time_z/args.tz)*args.z_tot/(args.n-1)]; + if i < args.n + z = [z, z(end) - (time_z/args.tz)*args.z_tot/(args.n-1)]; end end -% Wait a litle bit -z = [z, z(end)*ones(size(time_w))]; +% Wait a litle bit +z = [z, z(end)*ones(size(time_w))]; -% End motion -z = [z, z(end) - z(end)*time_i/args.ti]; +% End motion +z = [z, z(end) - z(end)*time_i/args.ti];
t = 0:args.Ts:args.Ts*(length(y) - 1); +t = 0:args.Ts:args.Ts*(length(y) - 1);
ref = zeros(length(y), 7); -ref(:, 1) = t; -ref(:, 3) = y; -ref(:, 4) = z; +ref(:, 1) = t; +ref(:, 3) = y; +ref(:, 4) = z;
getTransformationMatrixAcc
generateSpiralAngleTrajectory
function [M] = getTransformationMatrixAcc(Opm, Osm) -% getTransformationMatrixAcc - +function [ref] = generateSpiralAngleTrajectory(args) +% generateSpiralAngleTrajectory - % -% Syntax: [M] = getTransformationMatrixAcc(Opm, Osm) +% Syntax: [ref] = generateSpiralAngleTrajectory(args) % -% Inputs: -% - Opm - Nx3 (N = number of accelerometer measurements) X,Y,Z position of accelerometers -% - Opm - Nx3 (N = number of accelerometer measurements) Unit vectors representing the accelerometer orientation +% Inputs: +% - args % -% Outputs: -% - M - Transformation Matrix +% Outputs: +% - ref - Reference Signal
arguments + args.R_tot (1,1) double {mustBeNumeric, mustBePositive} = 10e-6 % [rad] + args.n_turn (1,1) double {mustBeInteger, mustBePositive} = 5 % [-] + args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % [s] + args.t_turn (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] + args.t_end (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] +end ++
time_s = 0:args.Ts:args.n_turn*args.t_turn; +time_e = 0:args.Ts:args.t_end; ++
Rx = sin(2*pi*time_s/args.t_turn).*(args.R_tot*time_s/(args.n_turn*args.t_turn)); +Ry = cos(2*pi*time_s/args.t_turn).*(args.R_tot*time_s/(args.n_turn*args.t_turn)); ++
Rx = [Rx, 0*time_e]; +Ry = [Ry, Ry(end) - Ry(end)*time_e/args.t_end]; ++
t = 0:args.Ts:args.Ts*(length(Rx) - 1); ++
ref = zeros(length(Rx), 7); + +ref(:, 1) = t; +ref(:, 5) = Rx; +ref(:, 6) = Ry; ++
getTransformationMatrixAcc
function [M] = getTransformationMatrixAcc(Opm, Osm) +% getTransformationMatrixAcc - +% +% Syntax: [M] = getTransformationMatrixAcc(Opm, Osm) +% +% Inputs: +% - Opm - Nx3 (N = number of accelerometer measurements) X,Y,Z position of accelerometers +% - Opm - Nx3 (N = number of accelerometer measurements) Unit vectors representing the accelerometer orientation +% +% Outputs: +% - M - Transformation Matrix ++
Let’s try to estimate the x-y-z acceleration of any point of the solid body from the acceleration/angular acceleration of the solid body expressed in \(\{O\}\). For any point \(p_i\) of the solid body (corresponding to an accelerometer), we can write: @@ -3352,7 +4969,7 @@ a_i = \begin{bmatrix} And finally we can combine the 6 (line) vectors for the 6 accelerometers to write that in a matrix form. We obtain Eq. \eqref{eq:M_matrix}.
-The transformation from solid body acceleration \({}^O\vec{x}\) from sensor measured acceleration \(\vec{a}\) is:
@@ -3376,12 +4993,12 @@ Let’s define such matrix using matlab:M = zeros(length(Opm), 6); -for i = 1:length(Opm) - Ri = [0, Opm(3,i), -Opm(2,i); - -Opm(3,i), 0, Opm(1,i); - Opm(2,i), -Opm(1,i), 0]; - M(i, 1:3) = Osm(:,i)'; - M(i, 4:6) = Osm(:,i)'*Ri; +for i = 1:length(Opm) + Ri = [0, Opm(3,i), -Opm(2,i); + -Opm(3,i), 0, Opm(1,i); + Opm(2,i), -Opm(1,i), 0]; + M(i, 1:3) = Osm(:,i)'; + M(i, 4:6) = Osm(:,i)'*Ri; end