Compare commits
13 Commits
5ee0701244
...
master
Author | SHA1 | Date | |
---|---|---|---|
d3f8f1cc4e | |||
86a72b9ee7 | |||
3e39eadc12 | |||
2fc62f5deb | |||
7f03d4c2ac | |||
8457e33e26 | |||
ebdde7b4b7 | |||
44d82fb66a | |||
54ab59a00c | |||
ef78808a52 | |||
92f78dda18 | |||
6923496e4f | |||
a0394c8136 |
21
LICENSE.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 Dehaeze Thomas
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
184
css/htmlize.css
@@ -1,184 +0,0 @@
|
||||
.org-bold { /* bold */ font-weight: bold; }
|
||||
.org-bold-italic { /* bold-italic */ font-weight: bold; font-style: italic; }
|
||||
.org-buffer-menu-buffer { /* buffer-menu-buffer */ font-weight: bold; }
|
||||
.org-builtin { /* font-lock-builtin-face */ color: #7a378b; }
|
||||
.org-button { /* button */ text-decoration: underline; }
|
||||
.org-calendar-today { /* calendar-today */ text-decoration: underline; }
|
||||
.org-change-log-acknowledgement { /* change-log-acknowledgement */ color: #b22222; }
|
||||
.org-change-log-conditionals { /* change-log-conditionals */ color: #a0522d; }
|
||||
.org-change-log-date { /* change-log-date */ color: #8b2252; }
|
||||
.org-change-log-email { /* change-log-email */ color: #a0522d; }
|
||||
.org-change-log-file { /* change-log-file */ color: #0000ff; }
|
||||
.org-change-log-function { /* change-log-function */ color: #a0522d; }
|
||||
.org-change-log-list { /* change-log-list */ color: #a020f0; }
|
||||
.org-change-log-name { /* change-log-name */ color: #008b8b; }
|
||||
.org-comint-highlight-input { /* comint-highlight-input */ font-weight: bold; }
|
||||
.org-comint-highlight-prompt { /* comint-highlight-prompt */ color: #00008b; }
|
||||
.org-comment { /* font-lock-comment-face */ color: #999988; font-style: italic; }
|
||||
.org-comment-delimiter { /* font-lock-comment-delimiter-face */ color: #999988; font-style: italic; }
|
||||
.org-completions-annotations { /* completions-annotations */ font-style: italic; }
|
||||
.org-completions-common-part { /* completions-common-part */ color: #000000; background-color: #ffffff; }
|
||||
.org-completions-first-difference { /* completions-first-difference */ font-weight: bold; }
|
||||
.org-constant { /* font-lock-constant-face */ color: #008b8b; }
|
||||
.org-diary { /* diary */ color: #ff0000; }
|
||||
.org-diff-context { /* diff-context */ color: #7f7f7f; }
|
||||
.org-diff-file-header { /* diff-file-header */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-function { /* diff-function */ background-color: #cccccc; }
|
||||
.org-diff-header { /* diff-header */ background-color: #cccccc; }
|
||||
.org-diff-hunk-header { /* diff-hunk-header */ background-color: #cccccc; }
|
||||
.org-diff-index { /* diff-index */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-nonexistent { /* diff-nonexistent */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-refine-change { /* diff-refine-change */ background-color: #d9d9d9; }
|
||||
.org-dired-directory { /* dired-directory */ color: #0000ff; }
|
||||
.org-dired-flagged { /* dired-flagged */ color: #ff0000; font-weight: bold; }
|
||||
.org-dired-header { /* dired-header */ color: #228b22; }
|
||||
.org-dired-ignored { /* dired-ignored */ color: #7f7f7f; }
|
||||
.org-dired-mark { /* dired-mark */ color: #008b8b; }
|
||||
.org-dired-marked { /* dired-marked */ color: #ff0000; font-weight: bold; }
|
||||
.org-dired-perm-write { /* dired-perm-write */ color: #b22222; }
|
||||
.org-dired-symlink { /* dired-symlink */ color: #a020f0; }
|
||||
.org-dired-warning { /* dired-warning */ color: #ff0000; font-weight: bold; }
|
||||
.org-doc { /* font-lock-doc-face */ color: #8b2252; }
|
||||
.org-escape-glyph { /* escape-glyph */ color: #a52a2a; }
|
||||
.org-file-name-shadow { /* file-name-shadow */ color: #7f7f7f; }
|
||||
.org-flyspell-duplicate { /* flyspell-duplicate */ color: #cdad00; font-weight: bold; text-decoration: underline; }
|
||||
.org-flyspell-incorrect { /* flyspell-incorrect */ color: #ff4500; font-weight: bold; text-decoration: underline; }
|
||||
.org-fringe { /* fringe */ background-color: #f2f2f2; }
|
||||
.org-function-name { /* font-lock-function-name-face */ color: teal; }
|
||||
.org-header-line { /* header-line */ color: #333333; background-color: #e5e5e5; }
|
||||
.org-help-argument-name { /* help-argument-name */ font-style: italic; }
|
||||
.org-highlight { /* highlight */ background-color: #b4eeb4; }
|
||||
.org-holiday { /* holiday */ background-color: #ffc0cb; }
|
||||
.org-isearch { /* isearch */ color: #b0e2ff; background-color: #cd00cd; }
|
||||
.org-isearch-fail { /* isearch-fail */ background-color: #ffc1c1; }
|
||||
.org-italic { /* italic */ font-style: italic; }
|
||||
.org-keyword { /* font-lock-keyword-face */ color: #0086b3; }
|
||||
.org-lazy-highlight { /* lazy-highlight */ background-color: #afeeee; }
|
||||
.org-link { /* link */ color: #0000ff; text-decoration: underline; }
|
||||
.org-link-visited { /* link-visited */ color: #8b008b; text-decoration: underline; }
|
||||
.org-log-edit-header { /* log-edit-header */ color: #a020f0; }
|
||||
.org-log-edit-summary { /* log-edit-summary */ color: #0000ff; }
|
||||
.org-log-edit-unknown-header { /* log-edit-unknown-header */ color: #b22222; }
|
||||
.org-match { /* match */ background-color: #ffff00; }
|
||||
.org-next-error { /* next-error */ background-color: #eedc82; }
|
||||
.org-nobreak-space { /* nobreak-space */ color: #a52a2a; text-decoration: underline; }
|
||||
.org-org-archived { /* org-archived */ color: #7f7f7f; }
|
||||
.org-org-block { /* org-block */ color: #7f7f7f; }
|
||||
.org-org-block-begin-line { /* org-block-begin-line */ color: #b22222; }
|
||||
.org-org-block-end-line { /* org-block-end-line */ color: #b22222; }
|
||||
.org-org-checkbox { /* org-checkbox */ font-weight: bold; }
|
||||
.org-org-checkbox-statistics-done { /* org-checkbox-statistics-done */ color: #228b22; font-weight: bold; }
|
||||
.org-org-checkbox-statistics-todo { /* org-checkbox-statistics-todo */ color: #ff0000; font-weight: bold; }
|
||||
.org-org-clock-overlay { /* org-clock-overlay */ background-color: #ffff00; }
|
||||
.org-org-code { /* org-code */ color: #7f7f7f; }
|
||||
.org-org-column { /* org-column */ background-color: #e5e5e5; }
|
||||
.org-org-column-title { /* org-column-title */ background-color: #e5e5e5; font-weight: bold; text-decoration: underline; }
|
||||
.org-org-date { /* org-date */ color: #a020f0; text-decoration: underline; }
|
||||
.org-org-document-info { /* org-document-info */ color: #191970; }
|
||||
.org-org-document-info-keyword { /* org-document-info-keyword */ color: #7f7f7f; }
|
||||
.org-org-document-title { /* org-document-title */ color: #191970; font-size: 144%; font-weight: bold; }
|
||||
.org-org-done { /* org-done */ color: #228b22; font-weight: bold; }
|
||||
.org-org-drawer { /* org-drawer */ color: #0000ff; }
|
||||
.org-org-ellipsis { /* org-ellipsis */ color: #b8860b; text-decoration: underline; }
|
||||
.org-org-footnote { /* org-footnote */ color: #a020f0; text-decoration: underline; }
|
||||
.org-org-formula { /* org-formula */ color: #b22222; }
|
||||
.org-org-headline-done { /* org-headline-done */ color: #bc8f8f; }
|
||||
.org-org-hide { /* org-hide */ color: #ffffff; }
|
||||
.org-org-latex-and-export-specials { /* org-latex-and-export-specials */ color: #8b4513; }
|
||||
.org-org-level-1 { /* org-level-1 */ color: #0000ff; }
|
||||
.org-org-level-2 { /* org-level-2 */ color: #a0522d; }
|
||||
.org-org-level-3 { /* org-level-3 */ color: #a020f0; }
|
||||
.org-org-level-4 { /* org-level-4 */ color: #b22222; }
|
||||
.org-org-level-5 { /* org-level-5 */ color: #228b22; }
|
||||
.org-org-level-6 { /* org-level-6 */ color: #008b8b; }
|
||||
.org-org-level-7 { /* org-level-7 */ color: #7a378b; }
|
||||
.org-org-level-8 { /* org-level-8 */ color: #8b2252; }
|
||||
.org-org-link { /* org-link */ color: #0000ff; text-decoration: underline; }
|
||||
.org-org-meta-line { /* org-meta-line */ color: #b22222; }
|
||||
.org-org-mode-line-clock { /* org-mode-line-clock */ color: #000000; background-color: #bfbfbf; }
|
||||
.org-org-mode-line-clock-overrun { /* org-mode-line-clock-overrun */ color: #000000; background-color: #ff0000; }
|
||||
.org-org-quote { /* org-quote */ color: #7f7f7f; }
|
||||
.org-org-scheduled { /* org-scheduled */ color: #006400; }
|
||||
.org-org-scheduled-previously { /* org-scheduled-previously */ color: #b22222; }
|
||||
.org-org-scheduled-today { /* org-scheduled-today */ color: #006400; }
|
||||
.org-org-sexp-date { /* org-sexp-date */ color: #a020f0; }
|
||||
.org-org-special-keyword { /* org-special-keyword */ color: #a020f0; }
|
||||
.org-org-table { /* org-table */ color: #0000ff; }
|
||||
.org-org-tag { /* org-tag */ font-weight: bold; }
|
||||
.org-org-target { /* org-target */ text-decoration: underline; }
|
||||
.org-org-time-grid { /* org-time-grid */ color: #b8860b; }
|
||||
.org-org-todo { /* org-todo */ color: #ff0000; font-weight: bold; }
|
||||
.org-org-upcoming-deadline { /* org-upcoming-deadline */ color: #b22222; }
|
||||
.org-org-verbatim { /* org-verbatim */ color: #7f7f7f; }
|
||||
.org-org-verse { /* org-verse */ color: #7f7f7f; }
|
||||
.org-org-warning { /* org-warning */ color: #ff0000; font-weight: bold; }
|
||||
.org-outline-1 { /* outline-1 */ color: #0000ff; }
|
||||
.org-outline-2 { /* outline-2 */ color: #a0522d; }
|
||||
.org-outline-3 { /* outline-3 */ color: #a020f0; }
|
||||
.org-outline-4 { /* outline-4 */ color: #b22222; }
|
||||
.org-outline-5 { /* outline-5 */ color: #228b22; }
|
||||
.org-outline-6 { /* outline-6 */ color: #008b8b; }
|
||||
.org-outline-7 { /* outline-7 */ color: #7a378b; }
|
||||
.org-outline-8 { /* outline-8 */ color: #8b2252; }
|
||||
.org-preprocessor { /* font-lock-preprocessor-face */ color: #7a378b; }
|
||||
.org-query-replace { /* query-replace */ color: #b0e2ff; background-color: #cd00cd; }
|
||||
.org-regexp-grouping-backslash { /* font-lock-regexp-grouping-backslash */ font-weight: bold; }
|
||||
.org-regexp-grouping-construct { /* font-lock-regexp-grouping-construct */ font-weight: bold; }
|
||||
.org-region { /* region */ background-color: #eedc82; }
|
||||
.org-secondary-selection { /* secondary-selection */ background-color: #ffff00; }
|
||||
.org-shadow { /* shadow */ color: #7f7f7f; }
|
||||
.org-show-paren-match { /* show-paren-match */ background-color: #40e0d0; }
|
||||
.org-show-paren-mismatch { /* show-paren-mismatch */ color: #ffffff; background-color: #a020f0; }
|
||||
.org-string { /* font-lock-string-face */ color: #dd1144; }
|
||||
.org-tool-bar { /* tool-bar */ color: #000000; background-color: #bfbfbf; }
|
||||
.org-tooltip { /* tooltip */ color: #000000; background-color: #ffffe0; }
|
||||
.org-trailing-whitespace { /* trailing-whitespace */ background-color: #ff0000; }
|
||||
.org-type { /* font-lock-type-face */ color: #228b22; }
|
||||
.org-underline { /* underline */ text-decoration: underline; }
|
||||
.org-variable-name { /* font-lock-variable-name-face */ color: teal; }
|
||||
.org-warning { /* font-lock-warning-face */ color: #ff0000; font-weight: bold; }
|
||||
.org-widget-button { /* widget-button */ font-weight: bold; }
|
||||
.org-widget-button-pressed { /* widget-button-pressed */ color: #ff0000; }
|
||||
.org-widget-documentation { /* widget-documentation */ color: #006400; }
|
||||
.org-widget-field { /* widget-field */ background-color: #d9d9d9; }
|
||||
.org-widget-inactive { /* widget-inactive */ color: #7f7f7f; }
|
||||
.org-widget-single-line-field { /* widget-single-line-field */ background-color: #d9d9d9; }
|
||||
|
||||
|
||||
pre {background-color:#FFFFFF;}
|
||||
pre span.org-builtin {color:#006FE0;font-weight:bold;}
|
||||
pre span.org-string {color:#008000;}
|
||||
pre span.org-doc {color:#008000;}
|
||||
pre span.org-keyword {color:#0000FF;}
|
||||
pre span.org-variable-name {color:#BA36A5;}
|
||||
pre span.org-function-name {color:#006699;}
|
||||
pre span.org-type {color:#6434A3;}
|
||||
pre span.org-preprocessor {color:#808080;font-weight:bold;}
|
||||
pre span.org-constant {color:#D0372D;}
|
||||
pre span.org-comment-delimiter {color:#8D8D84;}
|
||||
pre span.org-comment {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-1 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-2 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-3 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-4 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-5 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-6 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-7 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-8 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-outshine-level-9 {color:#8D8D84;font-style:italic}
|
||||
pre span.org-rainbow-delimiters-depth-1 {color:#707183;}
|
||||
pre span.org-rainbow-delimiters-depth-2 {color:#7388d6;}
|
||||
pre span.org-rainbow-delimiters-depth-3 {color:#909183;}
|
||||
pre span.org-rainbow-delimiters-depth-4 {color:#709870;}
|
||||
pre span.org-rainbow-delimiters-depth-5 {color:#907373;}
|
||||
pre span.org-rainbow-delimiters-depth-6 {color:#6276ba;}
|
||||
pre span.org-rainbow-delimiters-depth-7 {color:#858580;}
|
||||
pre span.org-rainbow-delimiters-depth-8 {color:#80a880;}
|
||||
pre span.org-rainbow-delimiters-depth-9 {color:#887070;}
|
||||
pre span.org-sh-quoted-exec {color:#FF1493;}
|
||||
pre span.org-diff-added {color:#008000;}
|
||||
pre span.org-diff-changed {color:#0000FF;}
|
||||
pre span.org-diff-header {color:#800000;}
|
||||
pre span.org-diff-hunk-header {color:#990099;}
|
||||
pre span.org-diff-none {color:#545454;}
|
||||
pre span.org-diff-removed {color:#A60000;}
|
1134
css/readtheorg.css
70
index.html
@@ -3,55 +3,77 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-10-03 sam. 19:04 -->
|
||||
<!-- 2021-09-10 ven. 11:07 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Robust and Optimal Sensor Fusion</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<title>Robust and Optimal Sensor Fusion using Complementary Filters</title>
|
||||
<meta name="author" content="Thomas Dehaeze" />
|
||||
<link rel="stylesheet" type="text/css" href="css/htmlize.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="css/readtheorg.css"/>
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/bootstrap.min.js"></script>
|
||||
<script src="js/jquery.stickytableheaders.min.js"></script>
|
||||
<script src="js/readtheorg.js"></script>
|
||||
<meta name="generator" content="Org Mode" />
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
<style> #content {margin: auto;} </style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="org-div-home-and-up">
|
||||
<a accesskey="h" href="../index.html"> UP </a>
|
||||
|
|
||||
<a accesskey="H" href="../index.html"> HOME </a>
|
||||
</div><div id="content">
|
||||
<h1 class="title">Robust and Optimal Sensor Fusion
|
||||
</div><div id="content" class="content">
|
||||
<h1 class="title">Robust and Optimal Sensor Fusion using Complementary Filters
|
||||
<br />
|
||||
<span class="subtitle">Dehaeze Thomas and Collette Christophe</span>
|
||||
</h1>
|
||||
|
||||
<div id="outline-container-org0ec4732" class="outline-2">
|
||||
<h2 id="org0ec4732">Paper</h2>
|
||||
<div class="outline-text-2" id="text-org0ec4732">
|
||||
<blockquote>
|
||||
<p>
|
||||
The PDF version of the paper is accessible <a href="paper/paper.pdf">here</a>.
|
||||
<b>Abstract</b>:
|
||||
</p>
|
||||
</blockquote>
|
||||
|
||||
<div id="outline-container-orga601f2f" class="outline-2">
|
||||
<h2 id="orga601f2f">Paper (<a href="paper/dehaeze22_optim_robus_compl_filte.pdf">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-orga601f2f">
|
||||
<p>
|
||||
The paper has been created <a href="https://orgmode.org/">Org Mode</a> (generating <a href="https://www.latex-project.org/">LaTeX</a> code) under <a href="https://www.gnu.org/software/emacs/">Emacs</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge418504" class="outline-2">
|
||||
<h2 id="orge418504">Matlab Scripts</h2>
|
||||
<div class="outline-text-2" id="text-orge418504">
|
||||
<div id="outline-container-orgd50e329" class="outline-2">
|
||||
<h2 id="orgd50e329">Matlab Scripts (<a href="matlab/dehaeze22_optim_robus_compl_filte_matlab.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-orgd50e329">
|
||||
<p>
|
||||
The Matlab scripts that permits to obtain all the results presented in the paper are accessible <a href="matlab/index.html">here</a>.
|
||||
All the <a href="https://fr.mathworks.com/">Matlab</a> code that was used for the paper are accessible so that all the results are reproducible.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org99adac0" class="outline-2">
|
||||
<h2 id="org99adac0">Tikz Figures</h2>
|
||||
<div class="outline-text-2" id="text-org99adac0">
|
||||
<div id="outline-container-org3b999bd" class="outline-2">
|
||||
<h2 id="org3b999bd">Tikz Figures (<a href="tikz/dehaeze22_optim_robus_compl_filte_tikz.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-org3b999bd">
|
||||
<p>
|
||||
All the figures in the paper are generated using <a href="https://sourceforge.net/projects/pgf/">TikZ</a>. The code snippets that was used to generate the figures are accessible <a href="tikz/index.html">here</a>.
|
||||
All the figures for the paper have been generated using <a href="https://sourceforge.net/projects/pgf/">TikZ</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org870b921" class="outline-2">
|
||||
<h2 id="org870b921">Cite this paper</h2>
|
||||
<div class="outline-text-2" id="text-org870b921">
|
||||
<p>
|
||||
To cite this paper use the following bibtex code.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-bibtex">
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
You can also use the formatted citation below.
|
||||
</p>
|
||||
<blockquote>
|
||||
nil</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
45
index.org
@@ -1,35 +1,50 @@
|
||||
#+TITLE: Robust and Optimal Sensor Fusion
|
||||
#+TITLE: Robust and Optimal Sensor Fusion using Complementary Filters
|
||||
:DRAWER:
|
||||
#+SUBTITLE: Dehaeze Thomas and Collette Christophe
|
||||
|
||||
#+HTML_LINK_HOME: ../index.html
|
||||
#+HTML_LINK_UP: ../index.html
|
||||
#+HTML_LINK_UP: ../index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
#+HTML_HEAD: <style> #content {margin: auto;} </style>
|
||||
|
||||
#+OPTIONS: toc:nil
|
||||
#+OPTIONS: html-postamble:nil
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="js/readtheorg.js"></script>
|
||||
:END:
|
||||
|
||||
* Paper
|
||||
#+begin_quote
|
||||
*Abstract*:
|
||||
|
||||
#+end_quote
|
||||
|
||||
* Paper ([[file:paper/dehaeze22_optim_robus_compl_filte.pdf][link]])
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
The PDF version of the paper is accessible [[file:paper/paper.pdf][here]].
|
||||
The paper has been created [[https://orgmode.org/][Org Mode]] (generating [[https://www.latex-project.org/][LaTeX]] code) under [[https://www.gnu.org/software/emacs/][Emacs]].
|
||||
|
||||
* Matlab Scripts
|
||||
* Matlab Scripts ([[file:matlab/dehaeze22_optim_robus_compl_filte_matlab.org][link]])
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
The Matlab scripts that permits to obtain all the results presented in the paper are accessible [[file:matlab/index.org][here]].
|
||||
All the [[https://fr.mathworks.com/][Matlab]] code that was used for the paper are accessible so that all the results are reproducible.
|
||||
|
||||
* Tikz Figures
|
||||
* Tikz Figures ([[file:tikz/dehaeze22_optim_robus_compl_filte_tikz.org][link]])
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
All the figures in the paper are generated using [[https://sourceforge.net/projects/pgf/][TikZ]]. The code snippets that was used to generate the figures are accessible [[file:tikz/index.org][here]].
|
||||
All the figures for the paper have been generated using [[https://sourceforge.net/projects/pgf/][TikZ]].
|
||||
|
||||
|
||||
* Cite this paper
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
To cite this paper use the following bibtex code.
|
||||
#+begin_src bibtex
|
||||
#+end_src
|
||||
|
||||
You can also use the formatted citation below.
|
||||
#+begin_quote
|
||||
#+end_quote
|
||||
|
98
journal/.latexmkrc
Normal file
@@ -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=('dehaeze22_optim_robus_compl_filte.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 = 1; # 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
|
||||
$bibtex = "bibtex %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*.*";
|
@@ -1,25 +1,15 @@
|
||||
#+TITLE: Optimal and Robust Sensor Fusion
|
||||
#+TITLE: Optimal and Robust Sensor Fusion using Complementary Filters
|
||||
:DRAWER:
|
||||
#+LATEX_CLASS: IEEEtran
|
||||
#+LATEX_CLASS_OPTIONS: [conference]
|
||||
#+LATEX_CLASS_OPTIONS: [10pt,final,journal,a4paper]
|
||||
#+OPTIONS: toc:nil todo:nil
|
||||
#+STARTUP: overview
|
||||
|
||||
#+DATE: {{{time(%Y-%m-%d)}}}
|
||||
|
||||
#+AUTHOR: @@latex:\IEEEauthorblockN{Dehaeze Thomas}@@
|
||||
#+AUTHOR: @@latex:\IEEEauthorblockA{\textit{European Synchrotron Radiation Facility} \\@@
|
||||
#+AUTHOR: @@latex:Grenoble, France\\@@
|
||||
#+AUTHOR: @@latex:\textit{Precision Mechatronics Laboratory} \\@@
|
||||
#+AUTHOR: @@latex:\textit{University of Liege}, Belgium \\@@
|
||||
#+AUTHOR: @@latex:thomas.dehaeze@esrf.fr@@
|
||||
#+AUTHOR: @@latex:}\and@@
|
||||
#+AUTHOR: @@latex:\IEEEauthorblockN{Collette Christophe}@@
|
||||
#+AUTHOR: @@latex:\IEEEauthorblockA{\textit{BEAMS Department}\\@@
|
||||
#+AUTHOR: @@latex:\textit{Free University of Brussels}, Belgium\\@@
|
||||
#+AUTHOR: @@latex:\textit{Precision Mechatronics Laboratory} \\@@
|
||||
#+AUTHOR: @@latex:\textit{University of Liege}, Belgium \\@@
|
||||
#+AUTHOR: @@latex:ccollett@ulb.ac.be@@
|
||||
#+AUTHOR: @@latex:\author{Thomas~Dehaeze, Mohit~Verma, and~Christophe~Collette@@
|
||||
#+AUTHOR: @@latex:\thanks{The authors are with the Precision Mechatronics Laboratory at the University of Liege, Belgium.}@@
|
||||
#+AUTHOR: @@latex:\thanks{Corresponding author: thomas.dehaeze@esrf.fr}@@
|
||||
#+AUTHOR: @@latex:}@@
|
||||
|
||||
#+LATEX_HEADER: \IEEEoverridecommandlockouts
|
||||
@@ -38,40 +28,44 @@
|
||||
#+LATEX_HEADER_EXTRA: \usepackage{showframe}
|
||||
|
||||
#+LATEX_HEADER: \def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
|
||||
|
||||
\bibliographystyle{IEEEtran}
|
||||
:END:
|
||||
|
||||
* LaTeX Config :noexport:
|
||||
#+begin_src latex :tangle config.tex
|
||||
#+end_src
|
||||
|
||||
* Build :noexport:
|
||||
#+NAME: startblock
|
||||
#+BEGIN_SRC emacs-lisp :results none
|
||||
(add-to-list 'org-latex-classes
|
||||
'("IEEEtran"
|
||||
"\\documentclass{IEEEtran}"
|
||||
("\\section{%s}" . "\\section*{%s}")
|
||||
("\\subsection{%s}" . "\\subsection*{%s}")
|
||||
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
|
||||
("\\paragraph{%s}" . "\\paragraph*{%s}")
|
||||
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
|
||||
)
|
||||
(add-to-list 'org-latex-classes
|
||||
'("IEEEtran"
|
||||
"\\documentclass{IEEEtran}"
|
||||
("\\section{%s}" . "\\section*{%s}")
|
||||
("\\subsection{%s}" . "\\subsection*{%s}")
|
||||
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
|
||||
("\\paragraph{%s}" . "\\paragraph*{%s}")
|
||||
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
|
||||
)
|
||||
|
||||
(defun delete-org-comments (backend)
|
||||
(loop for comment in (reverse (org-element-map (org-element-parse-buffer)
|
||||
'comment 'identity))
|
||||
do
|
||||
(setf (buffer-substring (org-element-property :begin comment)
|
||||
(org-element-property :end comment))
|
||||
"")))
|
||||
;; Remove automatic org headings
|
||||
(defun my-latex-filter-removeOrgAutoLabels (text backend info)
|
||||
"Org-mode automatically generates labels for headings despite explicit use of `#+LABEL`. This filter forcibly removes all automatically generated org-labels in headings."
|
||||
(when (org-export-derived-backend-p backend 'latex)
|
||||
(replace-regexp-in-string "\\\\label{sec:org[a-f0-9]+}\n" "" text)))
|
||||
|
||||
;; add to export hook
|
||||
(add-hook 'org-export-before-processing-hook 'delete-org-comments)
|
||||
(add-to-list 'org-export-filter-headline-functions
|
||||
'my-latex-filter-removeOrgAutoLabels)
|
||||
|
||||
;; Remove hypersetup
|
||||
(setq org-latex-with-hyperref nil)
|
||||
;; Automatic delete org org-comments
|
||||
(defun delete-org-comments (backend)
|
||||
(loop for comment in (reverse (org-element-map (org-element-parse-buffer)
|
||||
'comment 'identity))
|
||||
do
|
||||
(setf (buffer-substring (org-element-property :begin comment)
|
||||
(org-element-property :end comment))
|
||||
"")))
|
||||
|
||||
;; add to export hook
|
||||
(add-hook 'org-export-before-processing-hook 'delete-org-comments)
|
||||
|
||||
;; Remove hypersetup
|
||||
(setq org-latex-with-hyperref nil)
|
||||
#+END_SRC
|
||||
|
||||
* Abstract :ignore:
|
||||
@@ -87,6 +81,8 @@
|
||||
* Introduction
|
||||
<<sec:introduction>>
|
||||
|
||||
cite:mahony08_nonlin_compl_filter_special_orthog_group
|
||||
|
||||
- Section ref:sec:optimal_fusion
|
||||
- Section ref:sec:robust_fusion
|
||||
- Section ref:sec:optimal_robust_fusion
|
||||
@@ -468,7 +464,7 @@ The synthesis objective is to:
|
||||
- Minimize the $\mathcal{H}_2$ norm from $w$ to $(z_{2,1}, z_{2,2})$
|
||||
|
||||
#+name: fig:mixed_h2_hinf_synthesis
|
||||
#+caption: Generalized plant $P_{\mathcal{H}_2/\matlcal{H}_\infty}$ used for the mixed $\mathcal{H}_2/\mathcal{H}_\infty$ synthesis of complementary filters
|
||||
#+caption: Generalized plant $P_{\mathcal{H}_2/\mathcal{H}_\infty}$ used for the mixed $\mathcal{H}_2/\mathcal{H}_\infty$ synthesis of complementary filters
|
||||
#+attr_latex: :scale 1
|
||||
[[file:figs/mixed_h2_hinf_synthesis.pdf]]
|
||||
|
||||
@@ -511,4 +507,10 @@ The synthesis objective is to:
|
||||
* Acknowledgment
|
||||
|
||||
* Bibliography :ignore:
|
||||
\bibliographystyle{IEEEtran}
|
||||
\bibliography{ref}
|
||||
|
||||
* Local Variables :noexport:
|
||||
# Local Variables:
|
||||
# org-latex-packages-alist: nil
|
||||
# End:
|
@@ -1,6 +1,6 @@
|
||||
% Created 2020-10-05 lun. 15:33
|
||||
% Created 2021-09-10 ven. 11:01
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[conference]{IEEEtran}
|
||||
\documentclass[10pt,final,journal,a4paper]{IEEEtran}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage{graphicx}
|
||||
@@ -14,12 +14,6 @@
|
||||
\usepackage{amssymb}
|
||||
\usepackage{capt-of}
|
||||
\usepackage{hyperref}
|
||||
\usepackage[most]{tcolorbox}
|
||||
\usepackage{bm}
|
||||
\usepackage{booktabs}
|
||||
\usepackage{tabularx}
|
||||
\usepackage{array}
|
||||
\usepackage{siunitx}
|
||||
\IEEEoverridecommandlockouts
|
||||
\usepackage{cite}
|
||||
\usepackage{amsmath,amssymb,amsfonts}
|
||||
@@ -34,9 +28,9 @@
|
||||
\renewcommand{\citedash}{--}
|
||||
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
|
||||
\usepackage{showframe}
|
||||
\author{\IEEEauthorblockN{Dehaeze Thomas} \IEEEauthorblockA{\textit{European Synchrotron Radiation Facility} \\ Grenoble, France\\ \textit{Precision Mechatronics Laboratory} \\ \textit{University of Liege}, Belgium \\ thomas.dehaeze@esrf.fr }\and \IEEEauthorblockN{Collette Christophe} \IEEEauthorblockA{\textit{BEAMS Department}\\ \textit{Free University of Brussels}, Belgium\\ \textit{Precision Mechatronics Laboratory} \\ \textit{University of Liege}, Belgium \\ ccollett@ulb.ac.be }}
|
||||
\date{2020-10-05}
|
||||
\title{Optimal and Robust Sensor Fusion}
|
||||
\author{\author{Thomas~Dehaeze, Mohit~Verma, and~Christophe~Collette \thanks{The authors are with the Precision Mechatronics Laboratory at the University of Liege, Belgium.} \thanks{Corresponding author: thomas.dehaeze@esrf.fr} }}
|
||||
\date{2021-09-10}
|
||||
\title{Optimal and Robust Sensor Fusion using Complementary Filters}
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
@@ -50,9 +44,10 @@ Complementary Filters, Sensor Fusion, H-Infinity Synthesis
|
||||
\end{IEEEkeywords}
|
||||
|
||||
\section{Introduction}
|
||||
\label{sec:org26a7400}
|
||||
\label{sec:introduction}
|
||||
|
||||
\cite{mahony08_nonlin_compl_filter_special_orthog_group}
|
||||
|
||||
\begin{itemize}
|
||||
\item Section \ref{sec:optimal_fusion}
|
||||
\item Section \ref{sec:robust_fusion}
|
||||
@@ -61,11 +56,9 @@ Complementary Filters, Sensor Fusion, H-Infinity Synthesis
|
||||
\end{itemize}
|
||||
|
||||
\section{Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis}
|
||||
\label{sec:org49e80fd}
|
||||
\label{sec:optimal_fusion}
|
||||
|
||||
\subsection{Sensor Model}
|
||||
\label{sec:org9555932}
|
||||
Let's consider a sensor measuring a physical quantity \(x\) (Figure \ref{fig:sensor_model_noise}).
|
||||
The sensor has an internal dynamics which is here modelled with a Linear Time Invariant (LTI) system transfer function \(G_i(s)\).
|
||||
|
||||
@@ -96,19 +89,18 @@ In order to obtain an estimate \(\hat{x}_i\) of \(x\), a model \(\hat{G}_i\) of
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensor_model_noise.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensor_model_noise.pdf}
|
||||
\caption{\label{fig:sensor_model_noise}Sensor Model}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Sensor Fusion Architecture}
|
||||
\label{sec:orga12ae12}
|
||||
Let's now consider two sensors measuring the same physical quantity \(x\) but with different dynamics \((G_1, G_2)\) and noise characteristics \((N_1, N_2)\) (Figure \ref{fig:sensor_fusion_noise_arch}).
|
||||
|
||||
The noise sources \(\tilde{n}_1\) and \(\tilde{n}_2\) are considered to be uncorrelated.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensor_fusion_noise_arch.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensor_fusion_noise_arch.pdf}
|
||||
\caption{\label{fig:sensor_fusion_noise_arch}Sensor Fusion Architecture with sensor noise}
|
||||
\end{figure}
|
||||
|
||||
@@ -138,7 +130,6 @@ In such case, the super sensor estimate \(\hat{x}\) is equal to \(x\) plus the n
|
||||
\end{equation}
|
||||
|
||||
\subsection{Super Sensor Noise}
|
||||
\label{sec:org924b750}
|
||||
Let's note \(n\) the super sensor noise.
|
||||
\begin{equation}
|
||||
n = \left( H_1 N_1 \right) \tilde{n}_1 + \left( H_2 N_2 \right) \tilde{n}_2
|
||||
@@ -152,7 +143,6 @@ As the noise of both sensors are considered to be uncorrelated, the PSD of the s
|
||||
It is clear that the PSD of the super sensor depends on the norm of the complementary filters.
|
||||
|
||||
\subsection{\(\mathcal{H}_2\) Synthesis of Complementary Filters}
|
||||
\label{sec:org042a601}
|
||||
The goal is to design \(H_1(s)\) and \(H_2(s)\) such that the effect of the noise sources \(\tilde{n}_1\) and \(\tilde{n}_2\) has the smallest possible effect on the noise \(n\) of the estimation \(\hat{x}\).
|
||||
|
||||
And the goal is the minimize the Root Mean Square (RMS) value of \(n\):
|
||||
@@ -191,67 +181,63 @@ We then have that the \(\mathcal{H}_2\) synthesis applied on \(P_{\mathcal{H}_2}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/h_two_optimal_fusion.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/h_two_optimal_fusion.pdf}
|
||||
\caption{\label{fig:h_two_optimal_fusion}Generalized plant \(P_{\mathcal{H}_2}\) used for the \(\mathcal{H}_2\) synthesis of complementary filters}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Example}
|
||||
\label{sec:org98c54c2}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensors_nominal_dynamics.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensors_nominal_dynamics.pdf}
|
||||
\caption{\label{fig:sensors_nominal_dynamics}Sensor nominal dynamics from the velocity of the object to the output voltage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensors_noise.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensors_noise.pdf}
|
||||
\caption{\label{fig:sensors_noise}Amplitude spectral density of the sensors \(\sqrt{\Phi_{n_i}(\omega)} = |N_i(j\omega)|\)}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/htwo_comp_filters.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/htwo_comp_filters.pdf}
|
||||
\caption{\label{fig:htwo_comp_filters}Obtained complementary filters using the \(\mathcal{H}_2\) Synthesis}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/psd_sensors_htwo_synthesis.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/psd_sensors_htwo_synthesis.pdf}
|
||||
\caption{\label{fig:psd_sensors_htwo_synthesis}Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the optimally fused signal}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/super_sensor_time_domain_h2.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/super_sensor_time_domain_h2.pdf}
|
||||
\caption{\label{fig:super_sensor_time_domain_h2}Noise of individual sensors and noise of the super sensor}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Robustness Problem}
|
||||
\label{sec:org81a0772}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensors_nominal_dynamics_and_uncertainty.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensors_nominal_dynamics_and_uncertainty.pdf}
|
||||
\caption{\label{fig:sensors_nominal_dynamics_and_uncertainty}Nominal Sensor Dynamics \(\hat{G}_i\) (solid lines) as well as the spread of the dynamical uncertainty (background color)}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/super_sensor_dynamical_uncertainty_H2.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/super_sensor_dynamical_uncertainty_H2.pdf}
|
||||
\caption{\label{fig:super_sensor_dynamical_uncertainty_H2}Super sensor dynamical uncertainty when using the \(\mathcal{H}_2\) Synthesis}
|
||||
\end{figure}
|
||||
|
||||
\section{Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis}
|
||||
\label{sec:org78ced60}
|
||||
\label{sec:robust_fusion}
|
||||
|
||||
\subsection{Representation of Sensor Dynamical Uncertainty}
|
||||
\label{sec:org9df3b01}
|
||||
|
||||
In Section \ref{sec:optimal_fusion}, the model \(\hat{G}_i(s)\) of the sensor was considered to be perfect.
|
||||
In reality, there are always uncertainty (neglected dynamics) associated with the estimation of the sensor dynamics.
|
||||
@@ -266,12 +252,11 @@ The sensor can then be represented as shown in Figure \ref{fig:sensor_model_unce
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensor_model_uncertainty.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensor_model_uncertainty.pdf}
|
||||
\caption{\label{fig:sensor_model_uncertainty}Sensor Model including Dynamical Uncertainty}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Sensor Fusion Architecture}
|
||||
\label{sec:orgf4531ff}
|
||||
Let's consider the sensor fusion architecture shown in Figure \ref{fig:sensor_fusion_arch_uncertainty} where the dynamical uncertainties of both sensors are included.
|
||||
|
||||
The super sensor estimate is then:
|
||||
@@ -291,12 +276,11 @@ As \(H_1\) and \(H_2\) are complementary filters, we finally have:
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensor_fusion_arch_uncertainty.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensor_fusion_arch_uncertainty.pdf}
|
||||
\caption{\label{fig:sensor_fusion_arch_uncertainty}Sensor Fusion Architecture with sensor model uncertainty}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Super Sensor Dynamical Uncertainty}
|
||||
\label{sec:orgf5bb33e}
|
||||
The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at frequency \(\omega\) is bounded in the complex plane by a circle centered on 1 and with a radius equal to \(|W_1(j\omega) H_1(j\omega)| + |W_2(j\omega) H_2(j\omega)|\) as shown in Figure \ref{fig:uncertainty_set_super_sensor}.
|
||||
|
||||
|
||||
@@ -304,14 +288,13 @@ And we can see that the dynamical uncertainty of the super sensor is equal to th
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/uncertainty_set_super_sensor.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/uncertainty_set_super_sensor.pdf}
|
||||
\caption{\label{fig:uncertainty_set_super_sensor}Super Sensor model uncertainty displayed in the complex plane}
|
||||
\end{figure}
|
||||
|
||||
At frequencies where \(\left|W_i(j\omega)\right| > 1\) the uncertainty exceeds \(100\%\) and sensor fusion is impossible.
|
||||
|
||||
\subsection{\(\mathcal{H_\infty}\) Synthesis of Complementary Filters}
|
||||
\label{sec:orgf07efa7}
|
||||
In order for the fusion to be ``robust'', meaning no phase drop will be induced in the super sensor dynamics,
|
||||
|
||||
The goal is to design two complementary filters \(H_1(s)\) and \(H_2(s)\) such that the super sensor noise uncertainty is kept reasonably small.
|
||||
@@ -352,51 +335,48 @@ The \(\mathcal{H}_\infty\) norm of Eq. \eqref{eq:Hinf_norm} is equals to \(\sigm
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/h_infinity_robust_fusion.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/h_infinity_robust_fusion.pdf}
|
||||
\caption{\label{fig:h_infinity_robust_fusion}Generalized plant \(P_{\mathcal{H}_\infty}\) used for the \(\mathcal{H}_\infty\) synthesis of complementary filters}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Example}
|
||||
\label{sec:org0ca6ef9}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensors_uncertainty_weights.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensors_uncertainty_weights.pdf}
|
||||
\caption{\label{fig:sensors_uncertainty_weights}Magnitude of the multiplicative uncertainty weights \(|W_i(j\omega)|\)}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/weight_uncertainty_bounds_Wu.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/weight_uncertainty_bounds_Wu.pdf}
|
||||
\caption{\label{fig:weight_uncertainty_bounds_Wu}Uncertainty region of the two sensors as well as the wanted maximum uncertainty of the super sensor (dashed lines)}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/hinf_comp_filters.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/hinf_comp_filters.pdf}
|
||||
\caption{\label{fig:hinf_comp_filters}Obtained complementary filters using the \(\mathcal{H}_\infty\) Synthesis}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/super_sensor_dynamical_uncertainty_Hinf.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/super_sensor_dynamical_uncertainty_Hinf.pdf}
|
||||
\caption{\label{fig:super_sensor_dynamical_uncertainty_Hinf}Super sensor dynamical uncertainty (solid curve) when using the \(\mathcal{H}_\infty\) Synthesis}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/psd_sensors_hinf_synthesis.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/psd_sensors_hinf_synthesis.pdf}
|
||||
\caption{\label{fig:psd_sensors_hinf_synthesis}Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the \(\mathcal{H}_\infty\) synthesis}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\section{Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis}
|
||||
\label{sec:orgf642e73}
|
||||
\label{sec:optimal_robust_fusion}
|
||||
|
||||
\subsection{Sensor with noise and model uncertainty}
|
||||
\label{sec:org8949812}
|
||||
We wish now to combine the two previous synthesis, that is to say
|
||||
|
||||
The sensors are now modelled by a white noise with unitary PSD \(\tilde{n}_i\) shaped by a LTI transfer function \(N_i(s)\).
|
||||
@@ -412,12 +392,11 @@ Multiplying by the inverse of the nominal model of the sensor dynamics gives an
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensor_model_noise_uncertainty.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensor_model_noise_uncertainty.pdf}
|
||||
\caption{\label{fig:sensor_model_noise_uncertainty}Sensor Model including Noise and Dynamical Uncertainty}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Sensor Fusion Architecture}
|
||||
\label{sec:orgcbc3d54}
|
||||
|
||||
For reason of space, the blocks \(\hat{G}_i\) and \(\hat{G}_i^{-1}\) are omitted.
|
||||
|
||||
@@ -439,12 +418,11 @@ The estimate \(\hat{x}\) of \(x\)
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/sensor_fusion_arch_full.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/sensor_fusion_arch_full.pdf}
|
||||
\caption{\label{fig:sensor_fusion_arch_full}Super Sensor Fusion with both sensor noise and sensor model uncertainty}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis}
|
||||
\label{sec:org9d3f160}
|
||||
|
||||
The synthesis objective is to generate two complementary filters \(H_1(s)\) and \(H_2(s)\) such that the uncertainty associated with the super sensor is kept reasonably small and such that the RMS value of super sensors noise is minimized.
|
||||
|
||||
@@ -474,59 +452,52 @@ The synthesis objective is to:
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/mixed_h2_hinf_synthesis.pdf}
|
||||
\caption{\label{fig:mixed_h2_hinf_synthesis}Generalized plant \(P_{\mathcal{H}_2/\matlcal{H}_\infty}\) used for the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of complementary filters}
|
||||
\includegraphics[scale=1,scale=1]{figs/mixed_h2_hinf_synthesis.pdf}
|
||||
\caption{\label{fig:mixed_h2_hinf_synthesis}Generalized plant \(P_{\mathcal{H}_2/\mathcal{H}_\infty}\) used for the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of complementary filters}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Example}
|
||||
\label{sec:org85f304b}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/htwo_hinf_comp_filters.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/htwo_hinf_comp_filters.pdf}
|
||||
\caption{\label{fig:htwo_hinf_comp_filters}Obtained complementary filters after mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/psd_sensors_htwo_hinf_synthesis.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/psd_sensors_htwo_hinf_synthesis.pdf}
|
||||
\caption{\label{fig:psd_sensors_htwo_hinf_synthesis}Power Spectral Density of the Super Sensor obtained with the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/super_sensor_time_domain_h2_hinf.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/super_sensor_time_domain_h2_hinf.pdf}
|
||||
\caption{\label{fig:super_sensor_time_domain_h2_hinf}Noise of individual sensors and noise of the super sensor}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf}
|
||||
\includegraphics[scale=1,scale=1]{figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf}
|
||||
\caption{\label{fig:super_sensor_dynamical_uncertainty_Htwo_Hinf}Super sensor dynamical uncertainty (solid curve) when using the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis}
|
||||
\end{figure}
|
||||
|
||||
\section{Experimental Validation}
|
||||
\label{sec:org49bf34a}
|
||||
\label{sec:experimental_validation}
|
||||
|
||||
\subsection{Experimental Setup}
|
||||
\label{sec:orgdd8fce6}
|
||||
|
||||
\subsection{Sensor Noise and Dynamical Uncertainty}
|
||||
\label{sec:org21add72}
|
||||
|
||||
\subsection{Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis}
|
||||
\label{sec:org30521a3}
|
||||
|
||||
\subsection{Super Sensor Noise and Dynamical Uncertainty}
|
||||
\label{sec:org86cde79}
|
||||
|
||||
\section{Conclusion}
|
||||
\label{sec:org16245b7}
|
||||
\label{sec:conclusion}
|
||||
|
||||
\section{Acknowledgment}
|
||||
\label{sec:orgd992049}
|
||||
|
||||
\bibliographystyle{IEEEtran}
|
||||
\bibliography{ref}
|
||||
\end{document}
|
BIN
journal/doc/IEEEtran_HOWTO.pdf
Normal file
BIN
journal/doc/IEEEtran_bst_HOWTO.pdf
Normal file
BIN
journal/doc/Transactions-instructions-only.pdf
Normal file
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
BIN
journal/figs/hinf_comp_filters.pdf
Normal file
BIN
journal/figs/htwo_comp_filters.pdf
Normal file
BIN
journal/figs/htwo_hinf_comp_filters.pdf
Normal file
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
BIN
journal/figs/sensors_nominal_dynamics.pdf
Normal file
BIN
journal/figs/sensors_nominal_dynamics_and_uncertainty.pdf
Normal file
BIN
journal/figs/super_sensor_dynamical_uncertainty_H2.pdf
Normal file
BIN
journal/figs/super_sensor_dynamical_uncertainty_Hinf.pdf
Normal file
BIN
journal/figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf
Normal file
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
BIN
journal/figs/weight_uncertainty_bounds_Wu.pdf
Normal file
7
js/bootstrap.min.js
vendored
4
js/jquery.min.js
vendored
1
js/jquery.stickytableheaders.min.js
vendored
@@ -1 +0,0 @@
|
||||
!function(a,b){"use strict";function c(c,g){var h=this;h.$el=a(c),h.el=c,h.id=e++,h.$window=a(b),h.$document=a(document),h.$el.bind("destroyed",a.proxy(h.teardown,h)),h.$clonedHeader=null,h.$originalHeader=null,h.isSticky=!1,h.hasBeenSticky=!1,h.leftOffset=null,h.topOffset=null,h.init=function(){h.$el.each(function(){var b=a(this);b.css("padding",0),h.$originalHeader=a("thead:first",this),h.$clonedHeader=h.$originalHeader.clone(),b.trigger("clonedHeader."+d,[h.$clonedHeader]),h.$clonedHeader.addClass("tableFloatingHeader"),h.$clonedHeader.css("display","none"),h.$originalHeader.addClass("tableFloatingHeaderOriginal"),h.$originalHeader.after(h.$clonedHeader),h.$printStyle=a('<style type="text/css" media="print">.tableFloatingHeader{display:none !important;}.tableFloatingHeaderOriginal{position:static !important;}</style>'),a("head").append(h.$printStyle)}),h.setOptions(g),h.updateWidth(),h.toggleHeaders(),h.bind()},h.destroy=function(){h.$el.unbind("destroyed",h.teardown),h.teardown()},h.teardown=function(){h.isSticky&&h.$originalHeader.css("position","static"),a.removeData(h.el,"plugin_"+d),h.unbind(),h.$clonedHeader.remove(),h.$originalHeader.removeClass("tableFloatingHeaderOriginal"),h.$originalHeader.css("visibility","visible"),h.$printStyle.remove(),h.el=null,h.$el=null},h.bind=function(){h.$scrollableArea.on("scroll."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.on("scroll."+d+h.id,h.setPositionValues),h.$window.on("resize."+d+h.id,h.toggleHeaders)),h.$scrollableArea.on("resize."+d,h.toggleHeaders),h.$scrollableArea.on("resize."+d,h.updateWidth)},h.unbind=function(){h.$scrollableArea.off("."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.off("."+d+h.id,h.setPositionValues),h.$window.off("."+d+h.id,h.toggleHeaders)),h.$scrollableArea.off("."+d,h.updateWidth)},h.toggleHeaders=function(){h.$el&&h.$el.each(function(){var b,c=a(this),d=h.isWindowScrolling?isNaN(h.options.fixedOffset)?h.options.fixedOffset.outerHeight():h.options.fixedOffset:h.$scrollableArea.offset().top+(isNaN(h.options.fixedOffset)?0:h.options.fixedOffset),e=c.offset(),f=h.$scrollableArea.scrollTop()+d,g=h.$scrollableArea.scrollLeft(),i=h.isWindowScrolling?f>e.top:d>e.top,j=(h.isWindowScrolling?f:0)<e.top+c.height()-h.$clonedHeader.height()-(h.isWindowScrolling?0:d);i&&j?(b=e.left-g+h.options.leftOffset,h.$originalHeader.css({position:"fixed","margin-top":h.options.marginTop,left:b,"z-index":3}),h.leftOffset=b,h.topOffset=d,h.$clonedHeader.css("display",""),h.isSticky||(h.isSticky=!0,h.updateWidth()),h.setPositionValues()):h.isSticky&&(h.$originalHeader.css("position","static"),h.$clonedHeader.css("display","none"),h.isSticky=!1,h.resetWidth(a("td,th",h.$clonedHeader),a("td,th",h.$originalHeader)))})},h.setPositionValues=function(){var a=h.$window.scrollTop(),b=h.$window.scrollLeft();!h.isSticky||0>a||a+h.$window.height()>h.$document.height()||0>b||b+h.$window.width()>h.$document.width()||h.$originalHeader.css({top:h.topOffset-(h.isWindowScrolling?0:a),left:h.leftOffset-(h.isWindowScrolling?0:b)})},h.updateWidth=function(){if(h.isSticky){h.$originalHeaderCells||(h.$originalHeaderCells=a("th,td",h.$originalHeader)),h.$clonedHeaderCells||(h.$clonedHeaderCells=a("th,td",h.$clonedHeader));var b=h.getWidth(h.$clonedHeaderCells);h.setWidth(b,h.$clonedHeaderCells,h.$originalHeaderCells),h.$originalHeader.css("width",h.$clonedHeader.width())}},h.getWidth=function(c){var d=[];return c.each(function(c){var e,f=a(this);if("border-box"===f.css("box-sizing"))e=f[0].getBoundingClientRect().width;else{var g=a("th",h.$originalHeader);if("collapse"===g.css("border-collapse"))if(b.getComputedStyle)e=parseFloat(b.getComputedStyle(this,null).width);else{var i=parseFloat(f.css("padding-left")),j=parseFloat(f.css("padding-right")),k=parseFloat(f.css("border-width"));e=f.outerWidth()-i-j-k}else e=f.width()}d[c]=e}),d},h.setWidth=function(a,b,c){b.each(function(b){var d=a[b];c.eq(b).css({"min-width":d,"max-width":d})})},h.resetWidth=function(b,c){b.each(function(b){var d=a(this);c.eq(b).css({"min-width":d.css("min-width"),"max-width":d.css("max-width")})})},h.setOptions=function(c){h.options=a.extend({},f,c),h.$scrollableArea=a(h.options.scrollableArea),h.isWindowScrolling=h.$scrollableArea[0]===b},h.updateOptions=function(a){h.setOptions(a),h.unbind(),h.bind(),h.updateWidth(),h.toggleHeaders()},h.init()}var d="stickyTableHeaders",e=0,f={fixedOffset:0,leftOffset:0,marginTop:0,scrollableArea:b};a.fn[d]=function(b){return this.each(function(){var e=a.data(this,"plugin_"+d);e?"string"==typeof b?e[b].apply(e):e.updateOptions(b):"destroy"!==b&&a.data(this,"plugin_"+d,new c(this,b))})}}(jQuery,window);
|
@@ -1,85 +0,0 @@
|
||||
$(function() {
|
||||
$('.note').before("<p class='admonition-title note'>Note</p>");
|
||||
$('.seealso').before("<p class='admonition-title seealso'>See also</p>");
|
||||
$('.warning').before("<p class='admonition-title warning'>Warning</p>");
|
||||
$('.caution').before("<p class='admonition-title caution'>Caution</p>");
|
||||
$('.attention').before("<p class='admonition-title attention'>Attention</p>");
|
||||
$('.tip').before("<p class='admonition-title tip'>Tip</p>");
|
||||
$('.important').before("<p class='admonition-title important'>Important</p>");
|
||||
$('.hint').before("<p class='admonition-title hint'>Hint</p>");
|
||||
$('.error').before("<p class='admonition-title error'>Error</p>");
|
||||
$('.danger').before("<p class='admonition-title danger'>Danger</p>");
|
||||
});
|
||||
|
||||
$( document ).ready(function() {
|
||||
|
||||
// Shift nav in mobile when clicking the menu.
|
||||
$(document).on('click', "[data-toggle='wy-nav-top']", function() {
|
||||
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
// Close menu when you click a link.
|
||||
$(document).on('click', ".wy-menu-vertical .current ul li a", function() {
|
||||
$("[data-toggle='wy-nav-shift']").removeClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
$(document).on('click', "[data-toggle='rst-current-version']", function() {
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift-up");
|
||||
});
|
||||
// Make tables responsive
|
||||
$("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
|
||||
});
|
||||
|
||||
$( document ).ready(function() {
|
||||
$('#text-table-of-contents ul').first().addClass('nav');
|
||||
// ScrollSpy also requires that we use
|
||||
// a Bootstrap nav component.
|
||||
$('body').scrollspy({target: '#text-table-of-contents'});
|
||||
|
||||
// add sticky table headers
|
||||
$('table').stickyTableHeaders();
|
||||
|
||||
// set the height of tableOfContents
|
||||
var $postamble = $('#postamble');
|
||||
var $tableOfContents = $('#table-of-contents');
|
||||
$tableOfContents.css({paddingBottom: $postamble.outerHeight()});
|
||||
|
||||
// add TOC button
|
||||
var toggleSidebar = $('<div id="toggle-sidebar"><a href="#table-of-contents"><h2>Table of Contents</h2></a></div>');
|
||||
$('#content').prepend(toggleSidebar);
|
||||
|
||||
// add close button when sidebar showed in mobile screen
|
||||
var closeBtn = $('<a class="close-sidebar" href="#">Close</a>');
|
||||
var tocTitle = $('#table-of-contents').find('h2');
|
||||
tocTitle.append(closeBtn);
|
||||
});
|
||||
|
||||
window.SphinxRtdTheme = (function (jquery) {
|
||||
var stickyNav = (function () {
|
||||
var navBar,
|
||||
win,
|
||||
stickyNavCssClass = 'stickynav',
|
||||
applyStickNav = function () {
|
||||
if (navBar.height() <= win.height()) {
|
||||
navBar.addClass(stickyNavCssClass);
|
||||
} else {
|
||||
navBar.removeClass(stickyNavCssClass);
|
||||
}
|
||||
},
|
||||
enable = function () {
|
||||
applyStickNav();
|
||||
win.on('resize', applyStickNav);
|
||||
},
|
||||
init = function () {
|
||||
navBar = jquery('nav.wy-nav-side:first');
|
||||
win = jquery(window);
|
||||
};
|
||||
jquery(init);
|
||||
return {
|
||||
enable : enable
|
||||
};
|
||||
}());
|
||||
return {
|
||||
StickyNav : stickyNav
|
||||
};
|
||||
}($));
|
@@ -1,19 +1,14 @@
|
||||
#+TITLE: Robust and Optimal Sensor Fusion - Matlab Computation
|
||||
:DRAWER:
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
#+HTML_LINK_HOME: ../index.html
|
||||
#+HTML_LINK_UP: ../index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+BIND: org-latex-image-default-option "scale=1"
|
||||
#+BIND: org-latex-image-default-width ""
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="../js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="../js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="../js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="../js/readtheorg.js"></script>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/dreampulse/computer-modern-web-font/master/fonts.css">
|
||||
|
||||
#+STARTUP: overview
|
||||
#+OPTIONS: toc:2
|
||||
|
||||
@@ -145,8 +140,10 @@ The true sensor dynamics has some uncertainty associated to it and described in
|
||||
Both sensor dynamics in $[\frac{V}{m/s}]$ are shown in Figure [[fig:sensors_nominal_dynamics]].
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
% Magnitude
|
||||
ax1 = subplot(2,1,1);
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(G1, freqs, 'Hz'))), '-', 'DisplayName', '$G_1(j\omega)$');
|
||||
plot(freqs, abs(squeeze(freqresp(G2, freqs, 'Hz'))), '-', 'DisplayName', '$G_2(j\omega)$');
|
||||
@@ -156,7 +153,7 @@ Both sensor dynamics in $[\frac{V}{m/s}]$ are shown in Figure [[fig:sensors_nomi
|
||||
hold off;
|
||||
|
||||
% Phase
|
||||
ax2 = subplot(2,1,2);
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G1, freqs, 'Hz'))), '-');
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G2, freqs, 'Hz'))), '-');
|
||||
@@ -165,6 +162,7 @@ Both sensor dynamics in $[\frac{V}{m/s}]$ are shown in Figure [[fig:sensors_nomi
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
#+end_src
|
||||
@@ -190,7 +188,7 @@ The true sensor dynamics $G_i(s)$ is then described by eqref:eq:sensor_dynamics_
|
||||
|
||||
The weights $W_i(s)$ representing the dynamical uncertainty are defined below and their magnitude is shown in Figure [[fig:sensors_uncertainty_weights]].
|
||||
#+begin_src matlab
|
||||
W1 = createWeight('n', 2, 'w0', 2*pi*3, 'G0', 2, 'G1', 0.1, 'Gc', 1) * ...
|
||||
W1 = createWeight('n', 2, 'w0', 2*pi*3, 'G0', 2, 'G1', 0.1, 'Gc', 1) * ...
|
||||
createWeight('n', 2, 'w0', 2*pi*1e3, 'G0', 1, 'G1', 4/0.1, 'Gc', 1/0.1);
|
||||
|
||||
W2 = createWeight('n', 2, 'w0', 2*pi*1e2, 'G0', 0.05, 'G1', 4, 'Gc', 1);
|
||||
@@ -222,8 +220,10 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
% Magnitude
|
||||
ax1 = subplot(2,1,1);
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plotMagUncertainty(W1, freqs, 'G', G1, 'color_i', 1, 'DisplayName', '$G_1$');
|
||||
plotMagUncertainty(W2, freqs, 'G', G2, 'color_i', 2, 'DisplayName', '$G_2$');
|
||||
@@ -240,7 +240,7 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
|
||||
ylim([1e-2, 1e4])
|
||||
|
||||
% Phase
|
||||
ax2 = subplot(2,1,2);
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plotPhaseUncertainty(W1, freqs, 'G', G1, 'color_i', 1);
|
||||
plotPhaseUncertainty(W2, freqs, 'G', G2, 'color_i', 2);
|
||||
@@ -253,6 +253,7 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
#+end_src
|
||||
@@ -473,9 +474,10 @@ Finally, $H_1(s)$ is defined as follows
|
||||
The obtained complementary filters are shown in Figure [[fig:htwo_comp_filters]].
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
% Magnitude
|
||||
ax1 = subplot(2,1,1);
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(H1, freqs, 'Hz'))), 'DisplayName', '$H_1$');
|
||||
plot(freqs, abs(squeeze(freqresp(H2, freqs, 'Hz'))), 'DisplayName', '$H_2$');
|
||||
@@ -486,7 +488,7 @@ The obtained complementary filters are shown in Figure [[fig:htwo_comp_filters]]
|
||||
legend('location', 'northeast', 'FontSize', 8);
|
||||
|
||||
% Phase
|
||||
ax2 = subplot(2,1,2);
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(H1, freqs, 'Hz'))));
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(H2, freqs, 'Hz'))));
|
||||
@@ -640,8 +642,10 @@ As a result the super sensor signal can not be used for feedback applications ab
|
||||
Dphi_ss(abs(squeeze(freqresp(W2*H2, freqs, 'Hz'))) + abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))) > 1) = 360;
|
||||
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
% Magnitude
|
||||
ax1 = subplot(2,1,1);
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$');
|
||||
plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$');
|
||||
@@ -657,7 +661,7 @@ As a result the super sensor signal can not be used for feedback applications ab
|
||||
hold off;
|
||||
|
||||
% Phase
|
||||
ax2 = subplot(2,1,2);
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plotPhaseUncertainty(W1, freqs, 'color_i', 1);
|
||||
plotPhaseUncertainty(W2, freqs, 'color_i', 2);
|
||||
@@ -668,6 +672,7 @@ As a result the super sensor signal can not be used for feedback applications ab
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
#+end_src
|
||||
@@ -770,8 +775,10 @@ The uncertainty bounds of the two individual sensor as well as the wanted maximu
|
||||
Dphi_Wu(abs(squeeze(freqresp(inv(Wu), freqs, 'Hz'))) > 1) = 360;
|
||||
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
% Magnitude
|
||||
ax1 = subplot(2,1,1);
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$');
|
||||
plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$');
|
||||
@@ -787,7 +794,7 @@ The uncertainty bounds of the two individual sensor as well as the wanted maximu
|
||||
hold off;
|
||||
|
||||
% Phase
|
||||
ax2 = subplot(2,1,2);
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plotPhaseUncertainty(W1, freqs, 'color_i', 1);
|
||||
plotPhaseUncertainty(W2, freqs, 'color_i', 2);
|
||||
@@ -879,29 +886,31 @@ The obtained complementary filters as well as the wanted upper bounds are shown
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = subplot(2,1,1);
|
||||
% Magnitude
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plot(freqs, 1./abs(squeeze(freqresp(Wu*W1, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_1|$');
|
||||
plot(freqs, 1./abs(squeeze(freqresp(Wu*W2, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_2|$');
|
||||
set(gca,'ColorOrderIndex',1)
|
||||
plot(freqs, abs(squeeze(freqresp(H1, freqs, 'Hz'))), '-', 'DisplayName', '$|H_1|$');
|
||||
plot(freqs, abs(squeeze(freqresp(H2, freqs, 'Hz'))), '-', 'DisplayName', '$|H_2|$');
|
||||
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Magnitude');
|
||||
set(gca, 'XTickLabel',[]);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
|
||||
ax2 = subplot(2,1,2);
|
||||
% Phase
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plot(freqs, 180/pi*phase(squeeze(freqresp(H1, freqs, 'Hz'))), '-');
|
||||
plot(freqs, 180/pi*phase(squeeze(freqresp(H2, freqs, 'Hz'))), '-');
|
||||
hold off;
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
set(gca, 'XScale', 'log');
|
||||
yticks([-360:90:360]);
|
||||
ylim([-90, 90]); yticks([-360:90:360]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
@@ -930,8 +939,10 @@ The $\mathcal{H}_\infty$ synthesis thus allows to design filters such that the s
|
||||
Dphi_ss(abs(squeeze(freqresp(W2*H2, freqs, 'Hz'))) + abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))) > 1) = 360;
|
||||
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
% Magnitude
|
||||
ax1 = subplot(2,1,1);
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$');
|
||||
plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$');
|
||||
@@ -951,7 +962,7 @@ The $\mathcal{H}_\infty$ synthesis thus allows to design filters such that the s
|
||||
hold off;
|
||||
|
||||
% Phase
|
||||
ax2 = subplot(2,1,2);
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plotPhaseUncertainty(W1, freqs, 'color_i', 1);
|
||||
plotPhaseUncertainty(W2, freqs, 'color_i', 2);
|
||||
@@ -964,6 +975,7 @@ The $\mathcal{H}_\infty$ synthesis thus allows to design filters such that the s
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
#+end_src
|
||||
@@ -1126,31 +1138,31 @@ The obtained complementary filters are shown in Figure [[fig:htwo_hinf_comp_filt
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = subplot(2,1,1);
|
||||
% Magnitude
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plot(freqs, 1./abs(squeeze(freqresp(Wu*W1, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_1|$');
|
||||
plot(freqs, 1./abs(squeeze(freqresp(Wu*W2, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_2|$');
|
||||
|
||||
set(gca,'ColorOrderIndex',1)
|
||||
plot(freqs, abs(squeeze(freqresp(H1, freqs, 'Hz'))), '-', 'DisplayName', '$H_1$');
|
||||
plot(freqs, abs(squeeze(freqresp(H2, freqs, 'Hz'))), '-', 'DisplayName', '$H_2$');
|
||||
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Magnitude');
|
||||
set(gca, 'XTickLabel',[]);
|
||||
ylabel('Magnitude'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-3, 2]);
|
||||
legend('location', 'southeast', 'FontSize', 8);
|
||||
|
||||
ax2 = subplot(2,1,2);
|
||||
% Phase
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plot(freqs, 180/pi*phase(squeeze(freqresp(H1, freqs, 'Hz'))), '-');
|
||||
plot(freqs, 180/pi*phase(squeeze(freqresp(H2, freqs, 'Hz'))), '-');
|
||||
hold off;
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
set(gca, 'XScale', 'log');
|
||||
yticks([-360:90:360]);
|
||||
ylim([-90, 90]); yticks([-360:90:360]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
@@ -1283,8 +1295,10 @@ The uncertainty on the super sensor's dynamics is shown in Figure [[fig:super_se
|
||||
Dphi_ss(abs(squeeze(freqresp(W2*H2, freqs, 'Hz'))) + abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))) > 1) = 360;
|
||||
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
% Magnitude
|
||||
ax1 = subplot(2,1,1);
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$');
|
||||
plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$');
|
||||
@@ -1304,7 +1318,7 @@ The uncertainty on the super sensor's dynamics is shown in Figure [[fig:super_se
|
||||
hold off;
|
||||
|
||||
% Phase
|
||||
ax2 = subplot(2,1,2);
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plotPhaseUncertainty(W1, freqs, 'color_i', 1);
|
||||
plotPhaseUncertainty(W2, freqs, 'color_i', 2);
|
||||
@@ -1313,10 +1327,10 @@ The uncertainty on the super sensor's dynamics is shown in Figure [[fig:super_se
|
||||
plot(freqs, Dphi_Wu, 'k--');
|
||||
plot(freqs, -Dphi_Wu, 'k--');
|
||||
set(gca,'xscale','log');
|
||||
yticks(-180:90:180);
|
||||
ylim([-180 180]);
|
||||
ylim([-180 180]); yticks(-180:90:180);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
#+end_src
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 99 KiB |
@@ -3,18 +3,13 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-10-05 lun. 15:08 -->
|
||||
<!-- 2020-11-12 jeu. 10:42 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Robust and Optimal Sensor Fusion - Matlab Computation</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Thomas Dehaeze" />
|
||||
<link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
|
||||
<script src="../js/jquery.min.js"></script>
|
||||
<script src="../js/bootstrap.min.js"></script>
|
||||
<script src="../js/jquery.stickytableheaders.min.js"></script>
|
||||
<script src="../js/readtheorg.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/dreampulse/computer-modern-web-font/master/fonts.css">
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
<script>MathJax = {
|
||||
tex: {
|
||||
tags: 'ams',
|
||||
@@ -26,59 +21,59 @@
|
||||
</head>
|
||||
<body>
|
||||
<div id="org-div-home-and-up">
|
||||
<a accesskey="h" href="./index.html"> UP </a>
|
||||
<a accesskey="h" href="../index.html"> UP </a>
|
||||
|
|
||||
<a accesskey="H" href="./index.html"> HOME </a>
|
||||
<a accesskey="H" href="../index.html"> HOME </a>
|
||||
</div><div id="content">
|
||||
<h1 class="title">Robust and Optimal Sensor Fusion - Matlab Computation</h1>
|
||||
<div id="table-of-contents">
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org0a492b7">1. Sensor Description</a>
|
||||
<li><a href="#orgb558a2f">1. Sensor Description</a>
|
||||
<ul>
|
||||
<li><a href="#org9575585">1.1. Sensor Dynamics</a></li>
|
||||
<li><a href="#orgec8c81d">1.2. Sensor Model Uncertainty</a></li>
|
||||
<li><a href="#org81d9a34">1.3. Sensor Noise</a></li>
|
||||
<li><a href="#org4e23f6c">1.4. Save Model</a></li>
|
||||
<li><a href="#org2e756d8">1.1. Sensor Dynamics</a></li>
|
||||
<li><a href="#orgf266a4b">1.2. Sensor Model Uncertainty</a></li>
|
||||
<li><a href="#orgb768f02">1.3. Sensor Noise</a></li>
|
||||
<li><a href="#org426c21e">1.4. Save Model</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org2cab1a2">2. Introduction to Sensor Fusion</a>
|
||||
<li><a href="#orgce0ac83">2. Introduction to Sensor Fusion</a>
|
||||
<ul>
|
||||
<li><a href="#org0cbc92d">2.1. Sensor Fusion Architecture</a></li>
|
||||
<li><a href="#orge9e0bd4">2.2. Super Sensor Noise</a></li>
|
||||
<li><a href="#orgefb4347">2.3. Super Sensor Dynamical Uncertainty</a></li>
|
||||
<li><a href="#orgbb36114">2.1. Sensor Fusion Architecture</a></li>
|
||||
<li><a href="#org3a4f4b8">2.2. Super Sensor Noise</a></li>
|
||||
<li><a href="#org3f0594e">2.3. Super Sensor Dynamical Uncertainty</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org5896b60">3. Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis</a>
|
||||
<li><a href="#org096192f">3. Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis</a>
|
||||
<ul>
|
||||
<li><a href="#orgf5a8a84">3.1. \(\mathcal{H}_2\) Synthesis</a></li>
|
||||
<li><a href="#org72159df">3.2. Super Sensor Noise</a></li>
|
||||
<li><a href="#org8ffba19">3.3. Discrepancy between sensor dynamics and model</a></li>
|
||||
<li><a href="#org9188eae">3.1. \(\mathcal{H}_2\) Synthesis</a></li>
|
||||
<li><a href="#org6d6d909">3.2. Super Sensor Noise</a></li>
|
||||
<li><a href="#org850d99e">3.3. Discrepancy between sensor dynamics and model</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org26ea7b1">4. Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis</a>
|
||||
<li><a href="#org6d1270a">4. Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis</a>
|
||||
<ul>
|
||||
<li><a href="#org8dfd9d2">4.1. Weighting Function used to bound the super sensor uncertainty</a></li>
|
||||
<li><a href="#org7422ade">4.2. \(\mathcal{H}_\infty\) Synthesis</a></li>
|
||||
<li><a href="#orga0267c6">4.3. Super sensor uncertainty</a></li>
|
||||
<li><a href="#org979fede">4.4. Super sensor noise</a></li>
|
||||
<li><a href="#orgda33992">4.5. Conclusion</a></li>
|
||||
<li><a href="#orgc5a0221">4.1. Weighting Function used to bound the super sensor uncertainty</a></li>
|
||||
<li><a href="#org334f826">4.2. \(\mathcal{H}_\infty\) Synthesis</a></li>
|
||||
<li><a href="#org211e432">4.3. Super sensor uncertainty</a></li>
|
||||
<li><a href="#org7672e0e">4.4. Super sensor noise</a></li>
|
||||
<li><a href="#orgdcb47cf">4.5. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org15afe90">5. Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</a>
|
||||
<li><a href="#org49a7cc2">5. Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</a>
|
||||
<ul>
|
||||
<li><a href="#org0f81a91">5.1. Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis</a></li>
|
||||
<li><a href="#org417aabd">5.2. Obtained Super Sensor’s noise</a></li>
|
||||
<li><a href="#org2dce888">5.3. Obtained Super Sensor’s Uncertainty</a></li>
|
||||
<li><a href="#org47da78c">5.4. Conclusion</a></li>
|
||||
<li><a href="#org7ed8ed7">5.1. Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis</a></li>
|
||||
<li><a href="#orgfb839cf">5.2. Obtained Super Sensor’s noise</a></li>
|
||||
<li><a href="#orgb8596ac">5.3. Obtained Super Sensor’s Uncertainty</a></li>
|
||||
<li><a href="#orgfcfa8a2">5.4. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org0afe5ef">6. Matlab Functions</a>
|
||||
<li><a href="#orgf267700">6. Matlab Functions</a>
|
||||
<ul>
|
||||
<li><a href="#orge81e522">6.1. <code>createWeight</code></a></li>
|
||||
<li><a href="#org37ec2b4">6.2. <code>plotMagUncertainty</code></a></li>
|
||||
<li><a href="#org9f73572">6.3. <code>plotPhaseUncertainty</code></a></li>
|
||||
<li><a href="#org005db82">6.1. <code>createWeight</code></a></li>
|
||||
<li><a href="#org816b32a">6.2. <code>plotMagUncertainty</code></a></li>
|
||||
<li><a href="#orgddb3773">6.3. <code>plotPhaseUncertainty</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -89,27 +84,27 @@
|
||||
This document is arranged as follows:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Section <a href="#orgee25d07">1</a>: the sensors are described (dynamics, uncertainty, noise)</li>
|
||||
<li>Section <a href="#orga64daad">2</a>: the sensor fusion architecture is described and the super sensor noise and dynamical uncertainty are derived</li>
|
||||
<li>Section <a href="#orgdd6b9ce">3</a>: the \(\mathcal{H}_2\) synthesis is used to design complementary filters such that the RMS value of the super sensor’s noise is minimized</li>
|
||||
<li>Section <a href="#org5d93f37">4</a>: the \(\mathcal{H}_\infty\) synthesis is used to design complementary filters such that the super sensor’s uncertainty is bonded to acceptable values</li>
|
||||
<li>Section <a href="#org9f98c16">5</a>: the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is used to both limit the super sensor’s uncertainty and to lower the RMS value of the super sensor’s noise</li>
|
||||
<li>Section <a href="#orgf41dc8d">6</a>: Matlab functions used for the analysis are described</li>
|
||||
<li>Section <a href="#org3cd5225">1</a>: the sensors are described (dynamics, uncertainty, noise)</li>
|
||||
<li>Section <a href="#orge87db28">2</a>: the sensor fusion architecture is described and the super sensor noise and dynamical uncertainty are derived</li>
|
||||
<li>Section <a href="#orgbaf748a">3</a>: the \(\mathcal{H}_2\) synthesis is used to design complementary filters such that the RMS value of the super sensor’s noise is minimized</li>
|
||||
<li>Section <a href="#orgea66128">4</a>: the \(\mathcal{H}_\infty\) synthesis is used to design complementary filters such that the super sensor’s uncertainty is bonded to acceptable values</li>
|
||||
<li>Section <a href="#org2aeafb3">5</a>: the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is used to both limit the super sensor’s uncertainty and to lower the RMS value of the super sensor’s noise</li>
|
||||
<li>Section <a href="#org50a28ec">6</a>: Matlab functions used for the analysis are described</li>
|
||||
</ul>
|
||||
|
||||
<div id="outline-container-org0a492b7" class="outline-2">
|
||||
<h2 id="org0a492b7"><span class="section-number-2">1</span> Sensor Description</h2>
|
||||
<div id="outline-container-orgb558a2f" class="outline-2">
|
||||
<h2 id="orgb558a2f"><span class="section-number-2">1</span> Sensor Description</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
<a id="orgee25d07"></a>
|
||||
<a id="org3cd5225"></a>
|
||||
</p>
|
||||
<p>
|
||||
In Figure <a href="#org35e2340">1</a> is shown a schematic of a sensor model that is used in the following study.
|
||||
In Figure <a href="#orgd79f98f">1</a> is shown a schematic of a sensor model that is used in the following study.
|
||||
In this example, the measured quantity \(x\) is the velocity of an object.
|
||||
</p>
|
||||
|
||||
<table id="org2fe6194" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 1:</span> Description of signals in Figure <a href="#org35e2340">1</a></caption>
|
||||
<table id="org5aafbb9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 1:</span> Description of signals in Figure <a href="#orgd79f98f">1</a></caption>
|
||||
|
||||
<colgroup>
|
||||
<col class="org-left" />
|
||||
@@ -176,8 +171,8 @@ In this example, the measured quantity \(x\) is the velocity of an object.
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table id="org281ecb3" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 2:</span> Description of Systems in Figure <a href="#org35e2340">1</a></caption>
|
||||
<table id="org3780b2b" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 2:</span> Description of Systems in Figure <a href="#orgd79f98f">1</a></caption>
|
||||
|
||||
<colgroup>
|
||||
<col class="org-left" />
|
||||
@@ -221,18 +216,18 @@ In this example, the measured quantity \(x\) is the velocity of an object.
|
||||
</table>
|
||||
|
||||
|
||||
<div id="org35e2340" class="figure">
|
||||
<div id="orgd79f98f" class="figure">
|
||||
<p><img src="figs-paper/sensor_model_noise_uncertainty.png" alt="sensor_model_noise_uncertainty.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Sensor Model</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9575585" class="outline-3">
|
||||
<h3 id="org9575585"><span class="section-number-3">1.1</span> Sensor Dynamics</h3>
|
||||
<div id="outline-container-org2e756d8" class="outline-3">
|
||||
<h3 id="org2e756d8"><span class="section-number-3">1.1</span> Sensor Dynamics</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
<a id="org52415aa"></a>
|
||||
<a id="org01c4832"></a>
|
||||
Let’s consider two sensors measuring the velocity of an object.
|
||||
</p>
|
||||
|
||||
@@ -263,14 +258,14 @@ G2 = g_pos<span class="org-type">/</span>s<span class="org-type">/</span>(1 <spa
|
||||
|
||||
<p>
|
||||
These nominal dynamics are also taken as the model of the sensor dynamics.
|
||||
The true sensor dynamics has some uncertainty associated to it and described in section <a href="#orgf04439d">1.2</a>.
|
||||
The true sensor dynamics has some uncertainty associated to it and described in section <a href="#org3943238">1.2</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure <a href="#org2d1ef0b">2</a>.
|
||||
Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure <a href="#org355b3fc">2</a>.
|
||||
</p>
|
||||
|
||||
<div id="org2d1ef0b" class="figure">
|
||||
<div id="org355b3fc" class="figure">
|
||||
<p><img src="figs/sensors_nominal_dynamics.png" alt="sensors_nominal_dynamics.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Sensor nominal dynamics from the velocity of the object to the output voltage</p>
|
||||
@@ -278,12 +273,12 @@ Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure <a href="#org2d1
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgec8c81d" class="outline-3">
|
||||
<h3 id="orgec8c81d"><span class="section-number-3">1.2</span> Sensor Model Uncertainty</h3>
|
||||
<div id="outline-container-orgf266a4b" class="outline-3">
|
||||
<h3 id="orgf266a4b"><span class="section-number-3">1.2</span> Sensor Model Uncertainty</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
<p>
|
||||
<a id="orgf04439d"></a>
|
||||
The uncertainty on the sensor dynamics is described by multiplicative uncertainty (Figure <a href="#org35e2340">1</a>).
|
||||
<a id="org3943238"></a>
|
||||
The uncertainty on the sensor dynamics is described by multiplicative uncertainty (Figure <a href="#orgd79f98f">1</a>).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -295,10 +290,10 @@ The true sensor dynamics \(G_i(s)\) is then described by \eqref{eq:sensor_dynami
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
The weights \(W_i(s)\) representing the dynamical uncertainty are defined below and their magnitude is shown in Figure <a href="#org557e062">3</a>.
|
||||
The weights \(W_i(s)\) representing the dynamical uncertainty are defined below and their magnitude is shown in Figure <a href="#org2530a6e">3</a>.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">W1 = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-string">'w0'</span>, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>3, <span class="org-string">'G0'</span>, 2, <span class="org-string">'G1'</span>, 0.1, <span class="org-string">'Gc'</span>, 1) <span class="org-type">*</span> ...
|
||||
<pre class="src src-matlab">W1 = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-string">'w0'</span>, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>3, <span class="org-string">'G0'</span>, 2, <span class="org-string">'G1'</span>, 0.1, <span class="org-string">'Gc'</span>, 1) <span class="org-type">*</span> ...
|
||||
createWeight(<span class="org-string">'n'</span>, 2, <span class="org-string">'w0'</span>, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>1e3, <span class="org-string">'G0'</span>, 1, <span class="org-string">'G1'</span>, 4<span class="org-type">/</span>0.1, <span class="org-string">'Gc'</span>, 1<span class="org-type">/</span>0.1);
|
||||
|
||||
W2 = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-string">'w0'</span>, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>1e2, <span class="org-string">'G0'</span>, 0.05, <span class="org-string">'G1'</span>, 4, <span class="org-string">'Gc'</span>, 1);
|
||||
@@ -306,18 +301,18 @@ W2 = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-strin
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The bode plot of the sensors nominal dynamics as well as their defined dynamical spread are shown in Figure <a href="#orgc218675">4</a>.
|
||||
The bode plot of the sensors nominal dynamics as well as their defined dynamical spread are shown in Figure <a href="#org415740c">4</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org557e062" class="figure">
|
||||
<div id="org2530a6e" class="figure">
|
||||
<p><img src="figs/sensors_uncertainty_weights.png" alt="sensors_uncertainty_weights.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Magnitude of the multiplicative uncertainty weights \(|W_i(j\omega)|\)</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgc218675" class="figure">
|
||||
<div id="org415740c" class="figure">
|
||||
<p><img src="figs/sensors_nominal_dynamics_and_uncertainty.png" alt="sensors_nominal_dynamics_and_uncertainty.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Nominal Sensor Dynamics \(\hat{G}_i\) (solid lines) as well as the spread of the dynamical uncertainty (background color)</p>
|
||||
@@ -325,12 +320,12 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org81d9a34" class="outline-3">
|
||||
<h3 id="org81d9a34"><span class="section-number-3">1.3</span> Sensor Noise</h3>
|
||||
<div id="outline-container-orgb768f02" class="outline-3">
|
||||
<h3 id="orgb768f02"><span class="section-number-3">1.3</span> Sensor Noise</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<p>
|
||||
<a id="org71b587e"></a>
|
||||
The noise of the sensors \(n_i\) are modelled by shaping a white noise with unitary PSD \(\tilde{n}_i\) \eqref{eq:unitary_noise_psd} with a LTI transfer function \(N_i(s)\) (Figure <a href="#org35e2340">1</a>).
|
||||
<a id="orgfd557c8"></a>
|
||||
The noise of the sensors \(n_i\) are modelled by shaping a white noise with unitary PSD \(\tilde{n}_i\) \eqref{eq:unitary_noise_psd} with a LTI transfer function \(N_i(s)\) (Figure <a href="#orgd79f98f">1</a>).
|
||||
</p>
|
||||
\begin{equation}
|
||||
\Phi_{\tilde{n}_i}(\omega) = 1 \label{eq:unitary_noise_psd}
|
||||
@@ -344,7 +339,7 @@ The Power Spectral Density of the sensor noise \(\Phi_{n_i}(\omega)\) is then co
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
The weights \(N_1\) and \(N_2\) representing the amplitude spectral density of the sensor noises are defined below and shown in Figure <a href="#org51f9788">5</a>.
|
||||
The weights \(N_1\) and \(N_2\) representing the amplitude spectral density of the sensor noises are defined below and shown in Figure <a href="#org5e2cd13">5</a>.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">omegac = 0.15<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span>; G0 = 1e<span class="org-type">-</span>1; Ginf = 1e<span class="org-type">-</span>6;
|
||||
@@ -356,7 +351,7 @@ N2 = (Ginf<span class="org-type">*</span>s<span class="org-type">/</span>omegac
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org51f9788" class="figure">
|
||||
<div id="org5e2cd13" class="figure">
|
||||
<p><img src="figs/sensors_noise.png" alt="sensors_noise.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Amplitude spectral density of the sensors \(\sqrt{\Phi_{n_i}(\omega)} = |N_i(j\omega)|\)</p>
|
||||
@@ -364,8 +359,8 @@ N2 = (Ginf<span class="org-type">*</span>s<span class="org-type">/</span>omegac
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4e23f6c" class="outline-3">
|
||||
<h3 id="org4e23f6c"><span class="section-number-3">1.4</span> Save Model</h3>
|
||||
<div id="outline-container-org426c21e" class="outline-3">
|
||||
<h3 id="org426c21e"><span class="section-number-3">1.4</span> Save Model</h3>
|
||||
<div class="outline-text-3" id="text-1-4">
|
||||
<p>
|
||||
All the dynamical systems representing the sensors are saved for further use.
|
||||
@@ -379,27 +374,27 @@ All the dynamical systems representing the sensors are saved for further use.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2cab1a2" class="outline-2">
|
||||
<h2 id="org2cab1a2"><span class="section-number-2">2</span> Introduction to Sensor Fusion</h2>
|
||||
<div id="outline-container-orgce0ac83" class="outline-2">
|
||||
<h2 id="orgce0ac83"><span class="section-number-2">2</span> Introduction to Sensor Fusion</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
<a id="orga64daad"></a>
|
||||
<a id="orge87db28"></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0cbc92d" class="outline-3">
|
||||
<h3 id="org0cbc92d"><span class="section-number-3">2.1</span> Sensor Fusion Architecture</h3>
|
||||
<div id="outline-container-orgbb36114" class="outline-3">
|
||||
<h3 id="orgbb36114"><span class="section-number-3">2.1</span> Sensor Fusion Architecture</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
<a id="org31e00a0"></a>
|
||||
<a id="org80d2a51"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The two sensors presented in Section <a href="#orgee25d07">1</a> are now merged together using complementary filters \(H_1(s)\) and \(H_2(s)\) to form a super sensor (Figure <a href="#org48a16fd">6</a>).
|
||||
The two sensors presented in Section <a href="#org3cd5225">1</a> are now merged together using complementary filters \(H_1(s)\) and \(H_2(s)\) to form a super sensor (Figure <a href="#orgffed4ec">6</a>).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org48a16fd" class="figure">
|
||||
<div id="orgffed4ec" class="figure">
|
||||
<p><img src="figs-paper/sensor_fusion_noise_arch.png" alt="sensor_fusion_noise_arch.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Sensor Fusion Architecture</p>
|
||||
@@ -423,11 +418,11 @@ The super sensor estimate \(\hat{x}\) is given by \eqref{eq:super_sensor_estimat
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge9e0bd4" class="outline-3">
|
||||
<h3 id="orge9e0bd4"><span class="section-number-3">2.2</span> Super Sensor Noise</h3>
|
||||
<div id="outline-container-org3a4f4b8" class="outline-3">
|
||||
<h3 id="org3a4f4b8"><span class="section-number-3">2.2</span> Super Sensor Noise</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<p>
|
||||
<a id="orgff055a3"></a>
|
||||
<a id="org3e73362"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -458,15 +453,15 @@ And the Root Mean Square (RMS) value of the super sensor noise \(\sigma_n\) is g
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgefb4347" class="outline-3">
|
||||
<h3 id="orgefb4347"><span class="section-number-3">2.3</span> Super Sensor Dynamical Uncertainty</h3>
|
||||
<div id="outline-container-org3f0594e" class="outline-3">
|
||||
<h3 id="org3f0594e"><span class="section-number-3">2.3</span> Super Sensor Dynamical Uncertainty</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<p>
|
||||
<a id="org859b213"></a>
|
||||
<a id="orgd73f82f"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not being perfectly equal to our model \(\hat{G}_i\)) that we model by the use of multiplicative uncertainty (Figure <a href="#org54538d7">7</a>), the super sensor dynamics is then equals to:
|
||||
If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not being perfectly equal to our model \(\hat{G}_i\)) that we model by the use of multiplicative uncertainty (Figure <a href="#org05e7617">7</a>), the super sensor dynamics is then equals to:
|
||||
</p>
|
||||
|
||||
\begin{equation}
|
||||
@@ -478,18 +473,18 @@ If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not
|
||||
\end{equation}
|
||||
|
||||
|
||||
<div id="org54538d7" class="figure">
|
||||
<div id="org05e7617" class="figure">
|
||||
<p><img src="figs-paper/sensor_model_uncertainty.png" alt="sensor_model_uncertainty.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Sensor Model including Dynamical Uncertainty</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at frequency \(\omega\) is bounded in the complex plane by a circle centered on 1 and with a radius equal to \(|W_1(j\omega) H_1(j\omega)| + |W_2(j\omega) H_2(j\omega)|\) as shown in Figure <a href="#orgb11ef23">8</a>.
|
||||
The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at frequency \(\omega\) is bounded in the complex plane by a circle centered on 1 and with a radius equal to \(|W_1(j\omega) H_1(j\omega)| + |W_2(j\omega) H_2(j\omega)|\) as shown in Figure <a href="#org1ff6ff8">8</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgb11ef23" class="figure">
|
||||
<div id="org1ff6ff8" class="figure">
|
||||
<p><img src="figs-paper/uncertainty_set_super_sensor.png" alt="uncertainty_set_super_sensor.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Super Sensor model uncertainty displayed in the complex plane</p>
|
||||
@@ -498,11 +493,11 @@ The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at freque
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5896b60" class="outline-2">
|
||||
<h2 id="org5896b60"><span class="section-number-2">3</span> Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis</h2>
|
||||
<div id="outline-container-org096192f" class="outline-2">
|
||||
<h2 id="org096192f"><span class="section-number-2">3</span> Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
<a id="orgdd6b9ce"></a>
|
||||
<a id="orgbaf748a"></a>
|
||||
</p>
|
||||
<p>
|
||||
In this section, the complementary filters \(H_1(s)\) and \(H_2(s)\) are designed in order to minimize the RMS value of super sensor noise \(\sigma_n\).
|
||||
@@ -520,23 +515,23 @@ The RMS value of the super sensor noise is (neglecting the model uncertainty):
|
||||
|
||||
<p>
|
||||
The goal is to design \(H_1(s)\) and \(H_2(s)\) such that \(H_1(s) + H_2(s) = 1\) (complementary property) and such that \(\left\| \begin{matrix} H_1 N_1 \\ H_2 N_2 \end{matrix} \right\|_2\) is minimized (minimized RMS value of the super sensor noise).
|
||||
This is done using the \(\mathcal{H}_2\) synthesis in Section <a href="#org5bc9386">3.1</a>.
|
||||
This is done using the \(\mathcal{H}_2\) synthesis in Section <a href="#orgf1e20ae">3.1</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf5a8a84" class="outline-3">
|
||||
<h3 id="orgf5a8a84"><span class="section-number-3">3.1</span> \(\mathcal{H}_2\) Synthesis</h3>
|
||||
<div id="outline-container-org9188eae" class="outline-3">
|
||||
<h3 id="org9188eae"><span class="section-number-3">3.1</span> \(\mathcal{H}_2\) Synthesis</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
<a id="org5bc9386"></a>
|
||||
<a id="orgf1e20ae"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Consider the generalized plant \(P_{\mathcal{H}_2}\) shown in Figure <a href="#orgd218886">9</a> and described by Equation \eqref{eq:H2_generalized_plant}.
|
||||
Consider the generalized plant \(P_{\mathcal{H}_2}\) shown in Figure <a href="#org95769ad">9</a> and described by Equation \eqref{eq:H2_generalized_plant}.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgd218886" class="figure">
|
||||
<div id="org95769ad" class="figure">
|
||||
<p><img src="figs-paper/h_two_optimal_fusion.png" alt="h_two_optimal_fusion.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters</p>
|
||||
@@ -592,10 +587,10 @@ Finally, \(H_1(s)\) is defined as follows
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The obtained complementary filters are shown in Figure <a href="#org8c7ba6b">10</a>.
|
||||
The obtained complementary filters are shown in Figure <a href="#org02514a9">10</a>.
|
||||
</p>
|
||||
|
||||
<div id="org8c7ba6b" class="figure">
|
||||
<div id="org02514a9" class="figure">
|
||||
<p><img src="figs/htwo_comp_filters.png" alt="htwo_comp_filters.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Obtained complementary filters using the \(\mathcal{H}_2\) Synthesis</p>
|
||||
@@ -603,11 +598,11 @@ The obtained complementary filters are shown in Figure <a href="#org8c7ba6b">10<
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org72159df" class="outline-3">
|
||||
<h3 id="org72159df"><span class="section-number-3">3.2</span> Super Sensor Noise</h3>
|
||||
<div id="outline-container-org6d6d909" class="outline-3">
|
||||
<h3 id="org6d6d909"><span class="section-number-3">3.2</span> Super Sensor Noise</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<p>
|
||||
<a id="orgc7cc0a8"></a>
|
||||
<a id="org497847a"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -622,13 +617,13 @@ PSD_H2 = abs(squeeze(freqresp(N1<span class="org-type">*</span>H1, freqs, <span
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The obtained ASD are shown in Figure <a href="#orge481bcd">11</a>.
|
||||
The obtained ASD are shown in Figure <a href="#orgd3690df">11</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The RMS value of the individual sensors and of the super sensor are listed in Table <a href="#org3918d27">3</a>.
|
||||
The RMS value of the individual sensors and of the super sensor are listed in Table <a href="#org04c5321">3</a>.
|
||||
</p>
|
||||
<table id="org3918d27" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<table id="org04c5321" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 3:</span> RMS value of the individual sensor noise and of the super sensor using the \(\mathcal{H}_2\) Synthesis</caption>
|
||||
|
||||
<colgroup>
|
||||
@@ -661,7 +656,7 @@ The RMS value of the individual sensors and of the super sensor are listed in Ta
|
||||
</table>
|
||||
|
||||
|
||||
<div id="orge481bcd" class="figure">
|
||||
<div id="orgd3690df" class="figure">
|
||||
<p><img src="figs/psd_sensors_htwo_synthesis.png" alt="psd_sensors_htwo_synthesis.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the optimally fused signal</p>
|
||||
@@ -670,19 +665,19 @@ The RMS value of the individual sensors and of the super sensor are listed in Ta
|
||||
<p>
|
||||
A time domain simulation is now performed.
|
||||
The measured velocity \(x\) is set to be a sweep sine with an amplitude of \(0.1\ [m/s]\).
|
||||
The velocity estimates from the two sensors and from the super sensors are shown in Figure <a href="#org9c2a7e4">12</a>.
|
||||
The resulting noises are displayed in Figure <a href="#org4cc42bf">13</a>.
|
||||
The velocity estimates from the two sensors and from the super sensors are shown in Figure <a href="#orgf112864">12</a>.
|
||||
The resulting noises are displayed in Figure <a href="#org1ab022b">13</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org9c2a7e4" class="figure">
|
||||
<div id="orgf112864" class="figure">
|
||||
<p><img src="figs/super_sensor_time_domain_h2.png" alt="super_sensor_time_domain_h2.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 12: </span>Noise of individual sensors and noise of the super sensor</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org4cc42bf" class="figure">
|
||||
<div id="org1ab022b" class="figure">
|
||||
<p><img src="figs/sensor_noise_H2_time_domain.png" alt="sensor_noise_H2_time_domain.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 13: </span>Noise of the two sensors \(n_1, n_2\) and noise of the super sensor \(n\)</p>
|
||||
@@ -690,15 +685,15 @@ The resulting noises are displayed in Figure <a href="#org4cc42bf">13</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8ffba19" class="outline-3">
|
||||
<h3 id="org8ffba19"><span class="section-number-3">3.3</span> Discrepancy between sensor dynamics and model</h3>
|
||||
<div id="outline-container-org850d99e" class="outline-3">
|
||||
<h3 id="org850d99e"><span class="section-number-3">3.3</span> Discrepancy between sensor dynamics and model</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<p>
|
||||
If we consider sensor dynamical uncertainty as explained in Section <a href="#orgf04439d">1.2</a>, we can compute what would be the super sensor dynamical uncertainty when using the complementary filters obtained using the \(\mathcal{H}_2\) Synthesis.
|
||||
If we consider sensor dynamical uncertainty as explained in Section <a href="#org3943238">1.2</a>, we can compute what would be the super sensor dynamical uncertainty when using the complementary filters obtained using the \(\mathcal{H}_2\) Synthesis.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The super sensor dynamical uncertainty is shown in Figure <a href="#org865879b">14</a>.
|
||||
The super sensor dynamical uncertainty is shown in Figure <a href="#org35f4dc2">14</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -706,7 +701,7 @@ It is shown that the phase uncertainty is not bounded between 100Hz and 200Hz.
|
||||
As a result the super sensor signal can not be used for feedback applications about 100Hz.
|
||||
</p>
|
||||
|
||||
<div id="org865879b" class="figure">
|
||||
<div id="org35f4dc2" class="figure">
|
||||
<p><img src="figs/super_sensor_dynamical_uncertainty_H2.png" alt="super_sensor_dynamical_uncertainty_H2.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 14: </span>Super sensor dynamical uncertainty when using the \(\mathcal{H}_2\) Synthesis</p>
|
||||
@@ -715,11 +710,11 @@ As a result the super sensor signal can not be used for feedback applications ab
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org26ea7b1" class="outline-2">
|
||||
<h2 id="org26ea7b1"><span class="section-number-2">4</span> Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis</h2>
|
||||
<div id="outline-container-org6d1270a" class="outline-2">
|
||||
<h2 id="org6d1270a"><span class="section-number-2">4</span> Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
<p>
|
||||
<a id="org5d93f37"></a>
|
||||
<a id="orgea66128"></a>
|
||||
</p>
|
||||
<p>
|
||||
We initially considered perfectly known sensor dynamics so that it can be perfectly inverted.
|
||||
@@ -727,18 +722,18 @@ We initially considered perfectly known sensor dynamics so that it can be perfec
|
||||
|
||||
<p>
|
||||
We now take into account the fact that the sensor dynamics is only partially known.
|
||||
To do so, we model the uncertainty that we have on the sensor dynamics by multiplicative input uncertainty as shown in Figure <a href="#org2b71ca6">15</a>.
|
||||
To do so, we model the uncertainty that we have on the sensor dynamics by multiplicative input uncertainty as shown in Figure <a href="#org3a26ad3">15</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org2b71ca6" class="figure">
|
||||
<div id="org3a26ad3" class="figure">
|
||||
<p><img src="figs-paper/sensor_fusion_arch_uncertainty.png" alt="sensor_fusion_arch_uncertainty.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 15: </span>Sensor fusion architecture with sensor dynamics uncertainty</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
As explained in Section <a href="#orgf04439d">1.2</a>, at each frequency \(\omega\), the dynamical uncertainty of the super sensor can be represented in the complex plane by a circle with a radius equals to \(|H_1(j\omega) W_1(j\omega)| + |H_2(j\omega) W_2(j\omega)|\) and centered on 1.
|
||||
As explained in Section <a href="#org3943238">1.2</a>, at each frequency \(\omega\), the dynamical uncertainty of the super sensor can be represented in the complex plane by a circle with a radius equals to \(|H_1(j\omega) W_1(j\omega)| + |H_2(j\omega) W_2(j\omega)|\) and centered on 1.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -760,7 +755,7 @@ In order to specify a wanted upper bound on the dynamical uncertainty, a weight
|
||||
\end{align}
|
||||
|
||||
<p>
|
||||
The choice of \(W_u\) is presented in Section <a href="#orgefed264">4.1</a>.
|
||||
The choice of \(W_u\) is presented in Section <a href="#org5b00e7a">4.1</a>.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -778,15 +773,15 @@ The objective is to design \(H_1(s)\) and \(H_2(s)\) such that \(H_1(s) + H_2(s)
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This is done using the \(\mathcal{H}_\infty\) synthesis in Section <a href="#org2c990ce">4.2</a>.
|
||||
This is done using the \(\mathcal{H}_\infty\) synthesis in Section <a href="#org7bd80be">4.2</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8dfd9d2" class="outline-3">
|
||||
<h3 id="org8dfd9d2"><span class="section-number-3">4.1</span> Weighting Function used to bound the super sensor uncertainty</h3>
|
||||
<div id="outline-container-orgc5a0221" class="outline-3">
|
||||
<h3 id="orgc5a0221"><span class="section-number-3">4.1</span> Weighting Function used to bound the super sensor uncertainty</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
<a id="orgefed264"></a>
|
||||
<a id="org5b00e7a"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -799,7 +794,7 @@ This is done using the \(\mathcal{H}_\infty\) synthesis in Section <a href="#org
|
||||
\end{align}
|
||||
|
||||
<p>
|
||||
The uncertainty bounds of the two individual sensor as well as the wanted maximum uncertainty bounds of the super sensor are shown in Figure <a href="#orgdffee80">16</a>.
|
||||
The uncertainty bounds of the two individual sensor as well as the wanted maximum uncertainty bounds of the super sensor are shown in Figure <a href="#orge13d408">16</a>.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
@@ -810,7 +805,7 @@ Wu = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-strin
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgdffee80" class="figure">
|
||||
<div id="orge13d408" class="figure">
|
||||
<p><img src="figs/weight_uncertainty_bounds_Wu.png" alt="weight_uncertainty_bounds_Wu.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 16: </span>Uncertainty region of the two sensors as well as the wanted maximum uncertainty of the super sensor (dashed lines)</p>
|
||||
@@ -818,19 +813,19 @@ Wu = createWeight(<span class="org-string">'n'</span>, 2, <span class="org-strin
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7422ade" class="outline-3">
|
||||
<h3 id="org7422ade"><span class="section-number-3">4.2</span> \(\mathcal{H}_\infty\) Synthesis</h3>
|
||||
<div id="outline-container-org334f826" class="outline-3">
|
||||
<h3 id="org334f826"><span class="section-number-3">4.2</span> \(\mathcal{H}_\infty\) Synthesis</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<p>
|
||||
<a id="org2c990ce"></a>
|
||||
<a id="org7bd80be"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The generalized plant \(P_{\mathcal{H}_\infty}\) used for the \(\mathcal{H}_\infty\) Synthesis of the complementary filters is shown in Figure <a href="#org59777f5">17</a> and is described by Equation \eqref{eq:Hinf_generalized_plant}.
|
||||
The generalized plant \(P_{\mathcal{H}_\infty}\) used for the \(\mathcal{H}_\infty\) Synthesis of the complementary filters is shown in Figure <a href="#org461ce6a">17</a> and is described by Equation \eqref{eq:Hinf_generalized_plant}.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org59777f5" class="figure">
|
||||
<div id="org461ce6a" class="figure">
|
||||
<p><img src="figs-paper/h_infinity_robust_fusion.png" alt="h_infinity_robust_fusion.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 17: </span>Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters</p>
|
||||
@@ -866,7 +861,7 @@ And the \(\mathcal{H}_\infty\) synthesis is performed using the <code>hinfsyn</c
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
<pre class="example" id="orge32bb33">
|
||||
Test bounds: 0.7071 <= gamma <= 1.291
|
||||
|
||||
gamma X>=0 Y>=0 rho(XY)<1 p/f
|
||||
@@ -897,11 +892,11 @@ The \(\mathcal{H}_\infty\) is successful as the \(\mathcal{H}_\infty\) norm of t
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The obtained complementary filters as well as the wanted upper bounds are shown in Figure <a href="#orga1806e3">18</a>.
|
||||
The obtained complementary filters as well as the wanted upper bounds are shown in Figure <a href="#org938a541">18</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orga1806e3" class="figure">
|
||||
<div id="org938a541" class="figure">
|
||||
<p><img src="figs/hinf_comp_filters.png" alt="hinf_comp_filters.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 18: </span>Obtained complementary filters using the \(\mathcal{H}_\infty\) Synthesis</p>
|
||||
@@ -909,11 +904,11 @@ The obtained complementary filters as well as the wanted upper bounds are shown
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga0267c6" class="outline-3">
|
||||
<h3 id="orga0267c6"><span class="section-number-3">4.3</span> Super sensor uncertainty</h3>
|
||||
<div id="outline-container-org211e432" class="outline-3">
|
||||
<h3 id="org211e432"><span class="section-number-3">4.3</span> Super sensor uncertainty</h3>
|
||||
<div class="outline-text-3" id="text-4-3">
|
||||
<p>
|
||||
The super sensor dynamical uncertainty is displayed in Figure <a href="#orge75f5ef">19</a>.
|
||||
The super sensor dynamical uncertainty is displayed in Figure <a href="#org52cdb78">19</a>.
|
||||
It is confirmed that the super sensor dynamical uncertainty is less than the maximum allowed uncertainty defined by the norm of \(W_u(s)\).
|
||||
</p>
|
||||
|
||||
@@ -922,7 +917,7 @@ The \(\mathcal{H}_\infty\) synthesis thus allows to design filters such that the
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orge75f5ef" class="figure">
|
||||
<div id="org52cdb78" class="figure">
|
||||
<p><img src="figs/super_sensor_dynamical_uncertainty_Hinf.png" alt="super_sensor_dynamical_uncertainty_Hinf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 19: </span>Super sensor dynamical uncertainty (solid curve) when using the \(\mathcal{H}_\infty\) Synthesis</p>
|
||||
@@ -930,12 +925,12 @@ The \(\mathcal{H}_\infty\) synthesis thus allows to design filters such that the
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org979fede" class="outline-3">
|
||||
<h3 id="org979fede"><span class="section-number-3">4.4</span> Super sensor noise</h3>
|
||||
<div id="outline-container-org7672e0e" class="outline-3">
|
||||
<h3 id="org7672e0e"><span class="section-number-3">4.4</span> Super sensor noise</h3>
|
||||
<div class="outline-text-3" id="text-4-4">
|
||||
<p>
|
||||
We now compute the obtain Power Spectral Density of the super sensor’s noise.
|
||||
The Amplitude Spectral Densities are shown in Figure <a href="#org5aac73f">20</a>.
|
||||
The Amplitude Spectral Densities are shown in Figure <a href="#org06b08df">20</a>.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
@@ -947,18 +942,18 @@ PSD_Hinf = abs(squeeze(freqresp(N1<span class="org-type">*</span>H1, freqs, <spa
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The obtained RMS of the super sensor noise in the \(\mathcal{H}_2\) and \(\mathcal{H}_\infty\) case are shown in Table <a href="#org3e08452">4</a>.
|
||||
The obtained RMS of the super sensor noise in the \(\mathcal{H}_2\) and \(\mathcal{H}_\infty\) case are shown in Table <a href="#org3cf92ce">4</a>.
|
||||
As expected, the super sensor obtained from the \(\mathcal{H}_\infty\) synthesis is much noisier than the super sensor obtained from the \(\mathcal{H}_2\) synthesis.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org5aac73f" class="figure">
|
||||
<div id="org06b08df" class="figure">
|
||||
<p><img src="figs/psd_sensors_hinf_synthesis.png" alt="psd_sensors_hinf_synthesis.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 20: </span>Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the</p>
|
||||
<p><span class="figure-number">Figure 20: </span>Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the \(\mathcal{H}_\infty\) synthesis</p>
|
||||
</div>
|
||||
|
||||
<table id="org3e08452" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<table id="org3cf92ce" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 4:</span> Comparison of the obtained RMS noise of the super sensor</caption>
|
||||
|
||||
<colgroup>
|
||||
@@ -987,8 +982,8 @@ As expected, the super sensor obtained from the \(\mathcal{H}_\infty\) synthesis
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgda33992" class="outline-3">
|
||||
<h3 id="orgda33992"><span class="section-number-3">4.5</span> Conclusion</h3>
|
||||
<div id="outline-container-orgdcb47cf" class="outline-3">
|
||||
<h3 id="orgdcb47cf"><span class="section-number-3">4.5</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-4-5">
|
||||
<p>
|
||||
Using the \(\mathcal{H}_\infty\) synthesis, the dynamical uncertainty of the super sensor can be bounded to acceptable values.
|
||||
@@ -1001,22 +996,22 @@ However, the RMS of the super sensor noise is not optimized as it was the case w
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org15afe90" class="outline-2">
|
||||
<h2 id="org15afe90"><span class="section-number-2">5</span> Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</h2>
|
||||
<div id="outline-container-org49a7cc2" class="outline-2">
|
||||
<h2 id="org49a7cc2"><span class="section-number-2">5</span> Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</h2>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
<p>
|
||||
<a id="org9f98c16"></a>
|
||||
<a id="org2aeafb3"></a>
|
||||
</p>
|
||||
<p>
|
||||
The (optima) \(\mathcal{H}_2\) synthesis and the (robust) \(\mathcal{H}_\infty\) synthesis are now combined to form an Optimal and Robust synthesis of complementary filters for sensor fusion.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The sensor fusion architecture is shown in Figure <a href="#org3cc874e">21</a> (\(\hat{G}_i\) are omitted for space reasons).
|
||||
The sensor fusion architecture is shown in Figure <a href="#orgd633d12">21</a> (\(\hat{G}_i\) are omitted for space reasons).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org3cc874e" class="figure">
|
||||
<div id="orgd633d12" class="figure">
|
||||
<p><img src="figs-paper/sensor_fusion_arch_full.png" alt="sensor_fusion_arch_full.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 21: </span>Sensor fusion architecture with sensor dynamics uncertainty</p>
|
||||
@@ -1031,18 +1026,18 @@ The goal is to design complementary filters such that:
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
To do so, we can use the Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis presented in Section <a href="#orgbbc8594">5.1</a>.
|
||||
To do so, we can use the Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis presented in Section <a href="#org669093b">5.1</a>.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-org0f81a91" class="outline-3">
|
||||
<h3 id="org0f81a91"><span class="section-number-3">5.1</span> Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis</h3>
|
||||
<div id="outline-container-org7ed8ed7" class="outline-3">
|
||||
<h3 id="org7ed8ed7"><span class="section-number-3">5.1</span> Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis</h3>
|
||||
<div class="outline-text-3" id="text-5-1">
|
||||
<p>
|
||||
<a id="orgbbc8594"></a>
|
||||
<a id="org669093b"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The synthesis architecture that is used here is shown in Figure <a href="#orga971cdb">22</a>.
|
||||
The synthesis architecture that is used here is shown in Figure <a href="#orgc870005">22</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -1054,7 +1049,7 @@ The filter \(H_2(s)\) is synthesized such that it:
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="orga971cdb" class="figure">
|
||||
<div id="orgc870005" class="figure">
|
||||
<p><img src="figs-paper/mixed_h2_hinf_synthesis.png" alt="mixed_h2_hinf_synthesis.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 22: </span>Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</p>
|
||||
@@ -1098,11 +1093,11 @@ And the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is performed.
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The obtained complementary filters are shown in Figure <a href="#org30e8a3f">23</a>.
|
||||
The obtained complementary filters are shown in Figure <a href="#orgf37f308">23</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org30e8a3f" class="figure">
|
||||
<div id="orgf37f308" class="figure">
|
||||
<p><img src="figs/htwo_hinf_comp_filters.png" alt="htwo_hinf_comp_filters.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 23: </span>Obtained complementary filters after mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis</p>
|
||||
@@ -1110,19 +1105,19 @@ The obtained complementary filters are shown in Figure <a href="#org30e8a3f">23<
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org417aabd" class="outline-3">
|
||||
<h3 id="org417aabd"><span class="section-number-3">5.2</span> Obtained Super Sensor’s noise</h3>
|
||||
<div id="outline-container-orgfb839cf" class="outline-3">
|
||||
<h3 id="orgfb839cf"><span class="section-number-3">5.2</span> Obtained Super Sensor’s noise</h3>
|
||||
<div class="outline-text-3" id="text-5-2">
|
||||
<p>
|
||||
The Amplitude Spectral Density of the super sensor’s noise is shown in Figure <a href="#orgfdfbf76">24</a>.
|
||||
The Amplitude Spectral Density of the super sensor’s noise is shown in Figure <a href="#orgb3c92e4">24</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A time domain simulation is shown in Figure <a href="#orgdf5905f">25</a>.
|
||||
A time domain simulation is shown in Figure <a href="#org4a0db9b">25</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The RMS values of the super sensor noise for the presented three synthesis are listed in Table <a href="#org3b7df55">5</a>.
|
||||
The RMS values of the super sensor noise for the presented three synthesis are listed in Table <a href="#org3b10edf">5</a>.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
@@ -1134,20 +1129,20 @@ PSD_H2Hinf = abs(squeeze(freqresp(N1<span class="org-type">*</span>H1, freqs, <s
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgfdfbf76" class="figure">
|
||||
<div id="orgb3c92e4" class="figure">
|
||||
<p><img src="figs/psd_sensors_htwo_hinf_synthesis.png" alt="psd_sensors_htwo_hinf_synthesis.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 24: </span>Power Spectral Density of the Super Sensor obtained with the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgdf5905f" class="figure">
|
||||
<div id="org4a0db9b" class="figure">
|
||||
<p><img src="figs/super_sensor_time_domain_h2_hinf.png" alt="super_sensor_time_domain_h2_hinf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 25: </span>Noise of individual sensors and noise of the super sensor</p>
|
||||
</div>
|
||||
|
||||
<table id="org3b7df55" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<table id="org3b10edf" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 5:</span> Comparison of the obtained RMS noise of the super sensor</caption>
|
||||
|
||||
<colgroup>
|
||||
@@ -1181,15 +1176,15 @@ PSD_H2Hinf = abs(squeeze(freqresp(N1<span class="org-type">*</span>H1, freqs, <s
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2dce888" class="outline-3">
|
||||
<h3 id="org2dce888"><span class="section-number-3">5.3</span> Obtained Super Sensor’s Uncertainty</h3>
|
||||
<div id="outline-container-orgb8596ac" class="outline-3">
|
||||
<h3 id="orgb8596ac"><span class="section-number-3">5.3</span> Obtained Super Sensor’s Uncertainty</h3>
|
||||
<div class="outline-text-3" id="text-5-3">
|
||||
<p>
|
||||
The uncertainty on the super sensor’s dynamics is shown in Figure <a href="#orgb2d28c5">26</a>.
|
||||
The uncertainty on the super sensor’s dynamics is shown in Figure <a href="#org11fe014">26</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgb2d28c5" class="figure">
|
||||
<div id="org11fe014" class="figure">
|
||||
<p><img src="figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.png" alt="super_sensor_dynamical_uncertainty_Htwo_Hinf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 26: </span>Super sensor dynamical uncertainty (solid curve) when using the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis</p>
|
||||
@@ -1197,8 +1192,8 @@ The uncertainty on the super sensor’s dynamics is shown in Figure <a href=
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org47da78c" class="outline-3">
|
||||
<h3 id="org47da78c"><span class="section-number-3">5.4</span> Conclusion</h3>
|
||||
<div id="outline-container-orgfcfa8a2" class="outline-3">
|
||||
<h3 id="orgfcfa8a2"><span class="section-number-3">5.4</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-5-4">
|
||||
<p>
|
||||
The mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of the complementary filters allows to:
|
||||
@@ -1211,18 +1206,18 @@ The mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of the complementary fi
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0afe5ef" class="outline-2">
|
||||
<h2 id="org0afe5ef"><span class="section-number-2">6</span> Matlab Functions</h2>
|
||||
<div id="outline-container-orgf267700" class="outline-2">
|
||||
<h2 id="orgf267700"><span class="section-number-2">6</span> Matlab Functions</h2>
|
||||
<div class="outline-text-2" id="text-6">
|
||||
<p>
|
||||
<a id="orgf41dc8d"></a>
|
||||
<a id="org50a28ec"></a>
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-orge81e522" class="outline-3">
|
||||
<h3 id="orge81e522"><span class="section-number-3">6.1</span> <code>createWeight</code></h3>
|
||||
<div id="outline-container-org005db82" class="outline-3">
|
||||
<h3 id="org005db82"><span class="section-number-3">6.1</span> <code>createWeight</code></h3>
|
||||
<div class="outline-text-3" id="text-6-1">
|
||||
<p>
|
||||
<a id="org89bad6d"></a>
|
||||
<a id="orgb602691"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -1274,11 +1269,11 @@ This Matlab function is accessible <a href="src/createWeight.m">here</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org37ec2b4" class="outline-3">
|
||||
<h3 id="org37ec2b4"><span class="section-number-3">6.2</span> <code>plotMagUncertainty</code></h3>
|
||||
<div id="outline-container-org816b32a" class="outline-3">
|
||||
<h3 id="org816b32a"><span class="section-number-3">6.2</span> <code>plotMagUncertainty</code></h3>
|
||||
<div class="outline-text-3" id="text-6-2">
|
||||
<p>
|
||||
<a id="org8739875"></a>
|
||||
<a id="org2963b0d"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -1329,11 +1324,11 @@ p.FaceAlpha = args.opacity;
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9f73572" class="outline-3">
|
||||
<h3 id="org9f73572"><span class="section-number-3">6.3</span> <code>plotPhaseUncertainty</code></h3>
|
||||
<div id="outline-container-orgddb3773" class="outline-3">
|
||||
<h3 id="orgddb3773"><span class="section-number-3">6.3</span> <code>plotPhaseUncertainty</code></h3>
|
||||
<div class="outline-text-3" id="text-6-3">
|
||||
<p>
|
||||
<a id="org49e21eb"></a>
|
||||
<a id="org8d340da"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -1397,7 +1392,7 @@ p.FaceAlpha = args.opacity;
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Thomas Dehaeze</p>
|
||||
<p class="date">Created: 2020-10-05 lun. 15:08</p>
|
||||
<p class="date">Created: 2020-11-12 jeu. 10:42</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
BIN
matlab/index.pdf
BIN
matlab/matlab/mat/H2_Hinf_filters.mat
Normal file
BIN
matlab/matlab/mat/H2_filters.mat
Normal file
BIN
matlab/matlab/mat/Hinf_filters.mat
Normal file
BIN
matlab/matlab/mat/Wu.mat
Normal file
BIN
matlab/matlab/mat/model.mat
Normal file
@@ -1,28 +0,0 @@
|
||||
% H Infini
|
||||
\newcommand{\hinf}{\mathcal{H}_\infty}
|
||||
|
||||
% H 2
|
||||
\newcommand{\htwo}{\mathcal{H}_2}
|
||||
|
||||
% Omega
|
||||
\newcommand{\w}{\omega}
|
||||
|
||||
% H-Infinity Norm
|
||||
\newcommand{\hnorm}[1]{\left\|#1\right\|_{\infty}}
|
||||
|
||||
% H-2 Norm
|
||||
\newcommand{\normtwo}[1]{\left\|#1\right\|_{2}}
|
||||
|
||||
% Norm
|
||||
\newcommand{\norm}[1]{\left\|#1\right\|}
|
||||
|
||||
% Absolute value
|
||||
\newcommand{\abs}[1]{\left\lvert #1 \right\lvert}
|
||||
|
||||
% Minimum Subscript
|
||||
\newcommand{\smin}{_{\text{min}}}
|
||||
|
||||
% Maximum Subscript
|
||||
\newcommand{\smax}{_{\text{max}}}
|
||||
|
||||
\newcommand*\colvec[1]{\begin{bmatrix}#1\end{bmatrix}}
|