2019-03-22 12:03:59 +01:00
<?xml version="1.0" encoding="utf-8"?>
2020-01-06 18:17:22 +01:00
<?xml version="1.0" encoding="utf-8"?>
2019-03-22 12:03:59 +01:00
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"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-01-28 17:37:55 +01:00
<!-- 2020 - 01 - 28 mar. 17:37 -->
2019-03-22 12:03:59 +01:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > Stewart Platform - Simscape Model< / title >
< meta name = "generator" content = "Org mode" / >
2020-01-06 18:17:22 +01:00
< meta name = "author" content = "Dehaeze Thomas" / >
2019-03-22 12:03:59 +01:00
< style type = "text/css" >
<!-- /* --> <![CDATA[/*> <!-- */
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
< / style >
2019-08-26 11:58:44 +02:00
< 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 >
2019-03-22 12:03:59 +01:00
< script type = "text/javascript" >
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
2020-01-22 11:35:38 +01:00
Copyright (C) 2012-2020 Free Software Foundation, Inc.
2019-03-22 12:03:59 +01:00
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!-- /* --> <![CDATA[/*> <!-- */
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
< / script >
< / head >
< body >
2019-08-26 11:58:44 +02:00
< 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" >
2019-03-22 12:03:59 +01:00
< h1 class = "title" > Stewart Platform - Simscape Model< / h1 >
2020-01-28 17:37:55 +01:00
< div id = "table-of-contents" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
< li > < a href = "#orgc3777e1" > 1. Parameters used for the Simscape Model< / a > < / li >
< li > < a href = "#org7fa1a16" > 2. Simulation Configuration - Configuration reference< / a > < / li >
< li > < a href = "#org7e9bc96" > 3. Subsystem Reference< / a > < / li >
< li > < a href = "#orgfa5fbd3" > 4. Basic configuration for the Fixed base, Mobile Platform and Struts< / a > < / li >
< li > < a href = "#org09d2012" > 5. Sensors included in the Struts and on the Mobile Platform< / a > < / li >
< li > < a href = "#orgbe9032d" > 6. Inertial Sensors< / a >
< ul >
< li > < a href = "#org8a7e37e" > 6.1. Z-Axis Geophone< / a > < / li >
< li > < a href = "#orgcd29586" > 6.2. Z-Axis Accelerometer< / a > < / li >
< / ul >
< / li >
< / ul >
< / div >
< / div >
< div id = "outline-container-orgc3777e1" class = "outline-2" >
< h2 id = "orgc3777e1" > < span class = "section-number-2" > 1< / span > Parameters used for the Simscape Model< / h2 >
< / div >
< div id = "outline-container-org7fa1a16" class = "outline-2" >
< h2 id = "org7fa1a16" > < span class = "section-number-2" > 2< / span > Simulation Configuration - Configuration reference< / h2 >
< div class = "outline-text-2" id = "text-2" >
< p >
As multiple simulink files will be used for simulation and tests, it is very useful to determine good simulation configuration that will be shared among all the simulink files.
< / p >
< p >
This is done using something called “ Configuration Reference” (< a href = "https://fr.mathworks.com/help/simulink/ug/more-about-configuration-references.html" > documentation< / a > ).
< / p >
< p >
Basically, the configuration is stored in a mat file < code > conf_simscape.mat< / code > and then loaded in the workspace for it to be accessible to all the simulink models.
It is automatically loaded when the Simulink project is open. It can be loaded manually with the command:
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > load(< span class = "org-string" > 'mat/conf_simscape.mat'< / span > );
< / pre >
< / div >
< p >
It is however possible to modify specific parameters just for one Simulink file using the < code > set_param< / code > command:
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-simulink-keyword" > set_param< / span > (< span class = "org-variable-name" > conf_simscape< / span > , < span class = "org-string" > 'StopTime'< / span > , 1);
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-org7e9bc96" class = "outline-2" >
< h2 id = "org7e9bc96" > < span class = "section-number-2" > 3< / span > Subsystem Reference< / h2 >
< div class = "outline-text-2" id = "text-3" >
< p >
Several Stewart platform models are used, for instance one is use to study the dynamics while the other is used to apply active damping techniques.
< / p >
< p >
However, all the Simscape models share some subsystems using the < b > Subsystem Reference< / b > Simulink block (< a href = "https://fr.mathworks.com/help/simulink/ug/referenced-subsystem-1.html" > documentation< / a > ).
< / p >
< p >
These shared subsystems are:
< / p >
< ul class = "org-ul" >
< li > < code > Fixed_Based.slx< / code > - Fixed base of the Stewart Platform< / li >
< li > < code > Mobile_Platform.slx< / code > - Mobile platform of the Stewart Platform< / li >
< li > < code > stewart_strut.slx< / code > - One strut containing two spherical/universal joints, the actuator as well as the included sensors. A parameter < code > i< / code > is initialized to determine what it the “ number” of the strut.< / li >
< / ul >
< p >
These subsystems are referenced from another subsystem called < code > Stewart_Platform.slx< / code > , that basically connect them correctly.
This subsystem is then referenced in other simulink models for various purposes.
< / p >
< / div >
< / div >
< div id = "outline-container-orgfa5fbd3" class = "outline-2" >
< h2 id = "orgfa5fbd3" > < span class = "section-number-2" > 4< / span > Basic configuration for the Fixed base, Mobile Platform and Struts< / h2 >
< / div >
< div id = "outline-container-org09d2012" class = "outline-2" >
< h2 id = "org09d2012" > < span class = "section-number-2" > 5< / span > Sensors included in the Struts and on the Mobile Platform< / h2 >
< / div >
2020-01-22 11:35:38 +01:00
2020-01-28 17:37:55 +01:00
< div id = "outline-container-orgbe9032d" class = "outline-2" >
< h2 id = "orgbe9032d" > < span class = "section-number-2" > 6< / span > Inertial Sensors< / h2 >
< div class = "outline-text-2" id = "text-6" >
< / div >
< div id = "outline-container-org8a7e37e" class = "outline-3" >
< h3 id = "org8a7e37e" > < span class = "section-number-3" > 6.1< / span > Z-Axis Geophone< / h3 >
< div class = "outline-text-3" id = "text-6-1" >
< p >
< a id = "org8a1f5cd" > < / a >
< / p >
< p >
This Matlab function is accessible < a href = "../src/initializeZAxisGeophone.m" > here< / a > .
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-keyword" > function< / span > < span class = "org-variable-name" > [geophone]< / span > = < span class = "org-function-name" > initializeZAxisGeophone< / span > (< span class = "org-variable-name" > args< / span > )
arguments
args.mass (1,1) double {mustBeNumeric, mustBePositive} = 1e< span class = "org-type" > -< / span > 3 < span class = "org-comment" > % [kg]< / span >
args.freq (1,1) double {mustBeNumeric, mustBePositive} = 1 < span class = "org-comment" > % [Hz]< / span >
< span class = "org-keyword" > end< / span >
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %%< / span > < / span >
geophone.m = args.mass;
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% The Stiffness is set to have the damping resonance frequency< / span > < / span >
geophone.k = geophone.m < span class = "org-type" > *< / span > (2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > args.freq)< span class = "org-type" > ^< / span > 2;
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% We set the damping value to have critical damping< / span > < / span >
geophone.c = 2< span class = "org-type" > *< / span > sqrt(geophone.m < span class = "org-type" > *< / span > geophone.k);
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Save< / span > < / span >
save(< span class = "org-string" > './mat/geophone_z_axis.mat'< / span > , < span class = "org-string" > 'geophone'< / span > );
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-orgcd29586" class = "outline-3" >
< h3 id = "orgcd29586" > < span class = "section-number-3" > 6.2< / span > Z-Axis Accelerometer< / h3 >
< div class = "outline-text-3" id = "text-6-2" >
< p >
< a id = "org0db4022" > < / a >
< / p >
< p >
This Matlab function is accessible < a href = "../src/initializeZAxisAccelerometer.m" > here< / a > .
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-keyword" > function< / span > < span class = "org-variable-name" > [accelerometer]< / span > = < span class = "org-function-name" > initializeZAxisAccelerometer< / span > (< span class = "org-variable-name" > args< / span > )
arguments
args.mass (1,1) double {mustBeNumeric, mustBePositive} = 1e< span class = "org-type" > -< / span > 3 < span class = "org-comment" > % [kg]< / span >
args.freq (1,1) double {mustBeNumeric, mustBePositive} = 5e3 < span class = "org-comment" > % [Hz]< / span >
< span class = "org-keyword" > end< / span >
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %%< / span > < / span >
accelerometer.m = args.mass;
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% The Stiffness is set to have the damping resonance frequency< / span > < / span >
accelerometer.k = accelerometer.m < span class = "org-type" > *< / span > (2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > args.freq)< span class = "org-type" > ^< / span > 2;
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% We set the damping value to have critical damping< / span > < / span >
accelerometer.c = 2< span class = "org-type" > *< / span > sqrt(accelerometer.m < span class = "org-type" > *< / span > accelerometer.k);
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Gain correction of the accelerometer to have a unity gain until the resonance< / span > < / span >
accelerometer.gain = < span class = "org-type" > -< / span > accelerometer.k< span class = "org-type" > /< / span > accelerometer.m;
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Save< / span > < / span >
save(< span class = "org-string" > './mat/accelerometer_z_axis.mat'< / span > , < span class = "org-string" > 'accelerometer'< / span > );
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< / div >
< / div >
< / div >
2019-03-22 12:03:59 +01:00
< / div >
< div id = "postamble" class = "status" >
2020-01-06 18:17:22 +01:00
< p class = "author" > Author: Dehaeze Thomas< / p >
2020-01-28 17:37:55 +01:00
< p class = "date" > Created: 2020-01-28 mar. 17:37< / p >
2019-03-22 12:03:59 +01:00
< / div >
< / body >
< / html >