Initial commit
This commit is contained in:
commit
06cf168fab
48
.gitignore
vendored
Normal file
48
.gitignore
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
figs/*.svg
|
||||||
|
*.autosave
|
||||||
|
*.original
|
||||||
|
old/
|
||||||
|
|
||||||
|
# Windows default autosave extension
|
||||||
|
*.asv
|
||||||
|
|
||||||
|
# OSX / *nix default autosave extension
|
||||||
|
*.m~
|
||||||
|
|
||||||
|
# Compiled MEX binaries (all platforms)
|
||||||
|
*.mex*
|
||||||
|
|
||||||
|
# Packaged app and toolbox files
|
||||||
|
*.mlappinstall
|
||||||
|
*.mltbx
|
||||||
|
|
||||||
|
# Generated helpsearch folders
|
||||||
|
helpsearch*/
|
||||||
|
|
||||||
|
# Simulink code generation folders
|
||||||
|
slprj/
|
||||||
|
sccprj/
|
||||||
|
|
||||||
|
# Matlab code generation folders
|
||||||
|
codegen/
|
||||||
|
|
||||||
|
# Simulink autosave extension
|
||||||
|
*.autosave
|
||||||
|
|
||||||
|
# Simulink cache files
|
||||||
|
*.slxc
|
||||||
|
|
||||||
|
# Octave session info
|
||||||
|
octave-workspace
|
||||||
|
|
||||||
|
## Build tool auxiliary files:
|
||||||
|
*.fdb_latexmk
|
||||||
|
*.synctex
|
||||||
|
*.synctex(busy)
|
||||||
|
*.synctex.gz
|
||||||
|
*.synctex.gz(busy)
|
||||||
|
*.pdfsync
|
||||||
|
|
||||||
|
# auto folder when using emacs and auctex
|
||||||
|
./auto/*
|
||||||
|
*.el
|
145
css/htmlize.css
Normal file
145
css/htmlize.css
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
.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; }
|
1095
css/readtheorg.css
Normal file
1095
css/readtheorg.css
Normal file
File diff suppressed because it is too large
Load Diff
BIN
data/simscape_gravity.zip
Normal file
BIN
data/simscape_gravity.zip
Normal file
Binary file not shown.
BIN
figs/sim_add_external_force.pdf
Normal file
BIN
figs/sim_add_external_force.pdf
Normal file
Binary file not shown.
BIN
figs/sim_add_external_force.png
Normal file
BIN
figs/sim_add_external_force.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
BIN
figs/sim_change_eq_position.pdf
Normal file
BIN
figs/sim_change_eq_position.pdf
Normal file
Binary file not shown.
BIN
figs/sim_change_eq_position.png
Normal file
BIN
figs/sim_change_eq_position.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 77 KiB |
BIN
figs/sim_change_initial_position.pdf
Normal file
BIN
figs/sim_change_initial_position.pdf
Normal file
Binary file not shown.
BIN
figs/sim_change_initial_position.png
Normal file
BIN
figs/sim_change_initial_position.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 97 KiB |
BIN
figs/sim_init.pdf
Normal file
BIN
figs/sim_init.pdf
Normal file
Binary file not shown.
BIN
figs/sim_init.png
Normal file
BIN
figs/sim_init.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
BIN
figs/simscape_model.png
Normal file
BIN
figs/simscape_model.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 55 KiB |
BIN
gravity_test.slx
Normal file
BIN
gravity_test.slx
Normal file
Binary file not shown.
424
index.html
Normal file
424
index.html
Normal file
@ -0,0 +1,424 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!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-30 jeu. 15:07 -->
|
||||||
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<title>Gravity with Simscape Models</title>
|
||||||
|
<meta name="generator" content="Org mode" />
|
||||||
|
<meta name="author" content="Dehaeze Thomas" />
|
||||||
|
<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>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
|
||||||
|
<script type="text/javascript" src="./js/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="./js/bootstrap.min.js"></script>
|
||||||
|
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
|
||||||
|
<script type="text/javascript" src="./js/readtheorg.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the
|
||||||
|
JavaScript code in this tag.
|
||||||
|
|
||||||
|
Copyright (C) 2012-2020 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
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>
|
||||||
|
<script>
|
||||||
|
MathJax = {
|
||||||
|
tex: { macros: {
|
||||||
|
bm: ["\\boldsymbol{#1}",1],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||||
|
</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">Gravity with Simscape Models</h1>
|
||||||
|
<div id="table-of-contents">
|
||||||
|
<h2>Table of Contents</h2>
|
||||||
|
<div id="text-table-of-contents">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#org7dc51cd">1. Simulink</a></li>
|
||||||
|
<li><a href="#org8d21a55">2. Initial Simulation</a></li>
|
||||||
|
<li><a href="#org308b7c9">3. Change the equilibrium position</a></li>
|
||||||
|
<li><a href="#orgf4b9c9b">4. Add external force</a></li>
|
||||||
|
<li><a href="#org93c1a6d">5. Change initial position</a></li>
|
||||||
|
<li><a href="#org4f1210f">6. Conclusion</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We would like to include gravity in a Simscape multi-body model while starting the simulation at the equilibrium.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The basic idea is to first perform a simulation of the system until it goes at it rest position and save the rest position forces and deflection in each joint.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We can then think of three solutions to start a new simulation directly at the steady state position:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li>Change the equilibrium position \(l_0\) of each joint such that at \(t=0\), \(k \times l_0\) is equal to the previously measured force in the joint.
|
||||||
|
Here, it is suppose that we constrain the initial position of the joint to be equal to zero.
|
||||||
|
Then, these forces cancel each other and the simulation starts at equilibrium.</li>
|
||||||
|
<li>Add an External force (or maybe the “Internal Force”) in the direction of the joint (the “resolution frame” is fixed to the solids) equal to the opposite of the previously measured force.</li>
|
||||||
|
<li>After the first simulation, measure the final change of position of each joint, then set the initial position to be the measured static position.
|
||||||
|
Then, the simulation will start at equilibrium, but all the elements will be “deflected”.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The three solutions are tested below.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div id="outline-container-org7dc51cd" class="outline-2">
|
||||||
|
<h2 id="org7dc51cd"><span class="section-number-2">1</span> Simulink</h2>
|
||||||
|
<div class="outline-text-2" id="text-1">
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">open <span class="org-string">'gravity_test.slx'</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="org3b3589c" class="figure">
|
||||||
|
<p><img src="figs/simscape_model.png" alt="simscape_model.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 1: </span>Simscape model used for the simulations</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org8d21a55" class="outline-2">
|
||||||
|
<h2 id="org8d21a55"><span class="section-number-2">2</span> Initial Simulation</h2>
|
||||||
|
<div class="outline-text-2" id="text-2">
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">g = <span class="org-type">-</span>10; <span class="org-comment">% [m/s^2]</span>
|
||||||
|
|
||||||
|
k = 1e3; <span class="org-comment">% Stiffness [N/m]</span>
|
||||||
|
c = 10; <span class="org-comment">% Damping [N/(m/s)]</span>
|
||||||
|
|
||||||
|
l0 = 0; <span class="org-comment">% Initial wanted position [m]</span>
|
||||||
|
leq = 0; <span class="org-comment">% equilibrium position [m]</span>
|
||||||
|
|
||||||
|
F_ext = 0; <span class="org-comment">% External force [N]</span>
|
||||||
|
F_act = 0; <span class="org-comment">% Actuator force [N]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="org8a4e1c7" class="figure">
|
||||||
|
<p><img src="figs/sim_init.png" alt="sim_init.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 2: </span>Initial Simulation (<a href="./figs/sim_init.png">png</a>, <a href="./figs/sim_init.pdf">pdf</a>)</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org308b7c9" class="outline-2">
|
||||||
|
<h2 id="org308b7c9"><span class="section-number-2">3</span> Change the equilibrium position</h2>
|
||||||
|
<div class="outline-text-2" id="text-3">
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">l0 = 0; <span class="org-comment">% Initial wanted position [m]</span>
|
||||||
|
leq = <span class="org-type">-</span>out_init.Fm.Data(end)<span class="org-type">/</span>k; <span class="org-comment">% equilibrium position [m]</span>
|
||||||
|
|
||||||
|
F_ext = 0; <span class="org-comment">% External force [N]</span>
|
||||||
|
F_act = 0; <span class="org-comment">% Actuator force [N]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="orgace9d61" class="figure">
|
||||||
|
<p><img src="figs/sim_change_eq_position.png" alt="sim_change_eq_position.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 3: </span>Simulation after changing the equilibrium position of the joint (<a href="./figs/sim_change_eq_position.png">png</a>, <a href="./figs/sim_change_eq_position.pdf">pdf</a>)</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-orgf4b9c9b" class="outline-2">
|
||||||
|
<h2 id="orgf4b9c9b"><span class="section-number-2">4</span> Add external force</h2>
|
||||||
|
<div class="outline-text-2" id="text-4">
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">l0 = 0; <span class="org-comment">% Initial wanted position [m]</span>
|
||||||
|
leq = 0; <span class="org-comment">% equilibrium position [m]</span>
|
||||||
|
|
||||||
|
F_ext = <span class="org-type">-</span>out_init.Fm.Data(end); <span class="org-comment">% External force [N]</span>
|
||||||
|
F_act = 0; <span class="org-comment">% Actuator force [N]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="orge24bd38" class="figure">
|
||||||
|
<p><img src="figs/sim_add_external_force.png" alt="sim_add_external_force.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 4: </span>Simulater after adding an external force applied to the solid (<a href="./figs/sim_add_external_force.png">png</a>, <a href="./figs/sim_add_external_force.pdf">pdf</a>)</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-org93c1a6d" class="outline-2">
|
||||||
|
<h2 id="org93c1a6d"><span class="section-number-2">5</span> Change initial position</h2>
|
||||||
|
<div class="outline-text-2" id="text-5">
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">l0 = out_init.d.Data(end); <span class="org-comment">% Initial wanted position [m]</span>
|
||||||
|
leq = 0; <span class="org-comment">% equilibrium position [m]</span>
|
||||||
|
|
||||||
|
F_ext = 0; <span class="org-comment">% External force [N]</span>
|
||||||
|
F_act = 0; <span class="org-comment">% Actuator force [N]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="orgdedf3a7" class="figure">
|
||||||
|
<p><img src="figs/sim_change_initial_position.png" alt="sim_change_initial_position.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 5: </span>Simulation after changing the initial position of the joint (<a href="./figs/sim_change_initial_position.png">png</a>, <a href="./figs/sim_change_initial_position.pdf">pdf</a>)</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-org4f1210f" class="outline-2">
|
||||||
|
<h2 id="org4f1210f"><span class="section-number-2">6</span> Conclusion</h2>
|
||||||
|
<div class="outline-text-2" id="text-6">
|
||||||
|
<p>
|
||||||
|
Changing the equilibrium position of each joint seem the most practical solution.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="postamble" class="status">
|
||||||
|
<p class="author">Author: Dehaeze Thomas</p>
|
||||||
|
<p class="date">Created: 2020-01-30 jeu. 15:07</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
224
index.org
Normal file
224
index.org
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
#+TITLE: Gravity with Simscape Models
|
||||||
|
:DRAWER:
|
||||||
|
#+STARTUP: overview
|
||||||
|
|
||||||
|
#+LANGUAGE: en
|
||||||
|
#+EMAIL: dehaeze.thomas@gmail.com
|
||||||
|
#+AUTHOR: Dehaeze Thomas
|
||||||
|
|
||||||
|
#+HTML_LINK_HOME: ./index.html
|
||||||
|
#+HTML_LINK_UP: ./index.html
|
||||||
|
|
||||||
|
#+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: <link rel="stylesheet" type="text/css" href="./css/zenburn.css"/>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="./js/bootstrap.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="./js/readtheorg.js"></script>
|
||||||
|
|
||||||
|
#+HTML_MATHJAX: align: center tagside: right font: TeX
|
||||||
|
|
||||||
|
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||||
|
#+PROPERTY: header-args:matlab+ :comments org
|
||||||
|
#+PROPERTY: header-args:matlab+ :results none
|
||||||
|
#+PROPERTY: header-args:matlab+ :exports org
|
||||||
|
#+PROPERTY: header-args:matlab+ :tangle matlab/simscape_gravity.m
|
||||||
|
#+PROPERTY: header-args:matlab+ :eval no-export
|
||||||
|
#+PROPERTY: header-args:matlab+ :output-dir figs
|
||||||
|
#+PROPERTY: header-args:matlab+ :mkdirp yes
|
||||||
|
:END:
|
||||||
|
|
||||||
|
* Introduction :ignore:
|
||||||
|
We would like to include gravity in a Simscape multi-body model while starting the simulation at the equilibrium.
|
||||||
|
|
||||||
|
The basic idea is to first perform a simulation of the system until it goes at it rest position and save the rest position forces and deflection in each joint.
|
||||||
|
|
||||||
|
We can then think of three solutions to start a new simulation directly at the steady state position:
|
||||||
|
- Change the equilibrium position $l_0$ of each joint such that at $t=0$, $k \times l_0$ is equal to the previously measured force in the joint.
|
||||||
|
Here, it is suppose that we constrain the initial position of the joint to be equal to zero.
|
||||||
|
Then, these forces cancel each other and the simulation starts at equilibrium.
|
||||||
|
- Add an External force (or maybe the "Internal Force") in the direction of the joint (the "resolution frame" is fixed to the solids) equal to the opposite of the previously measured force.
|
||||||
|
- After the first simulation, measure the final change of position of each joint, then set the initial position to be the measured static position.
|
||||||
|
Then, the simulation will start at equilibrium, but all the elements will be "deflected".
|
||||||
|
|
||||||
|
The three solutions are tested below.
|
||||||
|
|
||||||
|
* ZIP file containing the data and matlab files :ignore:
|
||||||
|
#+begin_src bash :exports none :results none
|
||||||
|
if [ matlab/simscape_gravity.m -nt data/simscape_gravity.zip ]; then
|
||||||
|
cp matlab/simscape_gravity.m simscape_gravity.m;
|
||||||
|
zip data/simscape_gravity \
|
||||||
|
gravity_test.slx \
|
||||||
|
simscape_gravity.m
|
||||||
|
rm simscape_gravity.m;
|
||||||
|
fi
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_note
|
||||||
|
All the files (data and Matlab scripts) are accessible [[file:data/simscape_gravity.zip][here]].
|
||||||
|
#+end_note
|
||||||
|
|
||||||
|
* Matlab Init :noexport:ignore:
|
||||||
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||||
|
<<matlab-dir>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results silent :noweb yes
|
||||||
|
<<matlab-init>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Simulink
|
||||||
|
#+begin_src matlab
|
||||||
|
open 'gravity_test.slx'
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:simscape_model
|
||||||
|
#+caption: Simscape model used for the simulations
|
||||||
|
[[file:figs/simscape_model.png]]
|
||||||
|
|
||||||
|
* Initial Simulation
|
||||||
|
#+begin_src matlab
|
||||||
|
g = -10; % [m/s^2]
|
||||||
|
|
||||||
|
k = 1e3; % Stiffness [N/m]
|
||||||
|
c = 10; % Damping [N/(m/s)]
|
||||||
|
|
||||||
|
l0 = 0; % Initial wanted position [m]
|
||||||
|
leq = 0; % equilibrium position [m]
|
||||||
|
|
||||||
|
F_ext = 0; % External force [N]
|
||||||
|
F_act = 0; % Actuator force [N]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
out_init = sim('gravity_test.slx')
|
||||||
|
|
||||||
|
out_init.d.Name = 'Displacement';
|
||||||
|
out_init.Fm.Name = 'Force Sensor';
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
figure;
|
||||||
|
subplot(1,2,1)
|
||||||
|
plot(out_init.d)
|
||||||
|
title('');
|
||||||
|
subplot(1,2,2)
|
||||||
|
plot(out_init.Fm)
|
||||||
|
title('');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/sim_init.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:sim_init
|
||||||
|
#+CAPTION: Initial Simulation ([[./figs/sim_init.png][png]], [[./figs/sim_init.pdf][pdf]])
|
||||||
|
[[file:figs/sim_init.png]]
|
||||||
|
|
||||||
|
* Change the equilibrium position
|
||||||
|
#+begin_src matlab
|
||||||
|
l0 = 0; % Initial wanted position [m]
|
||||||
|
leq = -out_init.Fm.Data(end)/k; % equilibrium position [m]
|
||||||
|
|
||||||
|
F_ext = 0; % External force [N]
|
||||||
|
F_act = 0; % Actuator force [N]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
out = sim('gravity_test.slx');
|
||||||
|
|
||||||
|
out.d.Name = 'Displacement';
|
||||||
|
out.Fm.Name = 'Force Sensor';
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
figure;
|
||||||
|
subplot(1,2,1)
|
||||||
|
plot(out.d)
|
||||||
|
title('');
|
||||||
|
subplot(1,2,2)
|
||||||
|
plot(out.Fm)
|
||||||
|
title('');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/sim_change_eq_position.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:sim_change_eq_position
|
||||||
|
#+CAPTION: Simulation after changing the equilibrium position of the joint ([[./figs/sim_change_eq_position.png][png]], [[./figs/sim_change_eq_position.pdf][pdf]])
|
||||||
|
[[file:figs/sim_change_eq_position.png]]
|
||||||
|
|
||||||
|
* Add external force
|
||||||
|
#+begin_src matlab
|
||||||
|
l0 = 0; % Initial wanted position [m]
|
||||||
|
leq = 0; % equilibrium position [m]
|
||||||
|
|
||||||
|
F_ext = -out_init.Fm.Data(end); % External force [N]
|
||||||
|
F_act = 0; % Actuator force [N]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
out = sim('gravity_test.slx');
|
||||||
|
|
||||||
|
out.d.Name = 'Displacement';
|
||||||
|
out.Fm.Name = 'Force Sensor';
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
figure;
|
||||||
|
subplot(1,2,1)
|
||||||
|
plot(out.d)
|
||||||
|
title('');
|
||||||
|
subplot(1,2,2)
|
||||||
|
plot(out.Fm)
|
||||||
|
title('');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/sim_add_external_force.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:sim_add_external_force
|
||||||
|
#+CAPTION: Simulater after adding an external force applied to the solid ([[./figs/sim_add_external_force.png][png]], [[./figs/sim_add_external_force.pdf][pdf]])
|
||||||
|
[[file:figs/sim_add_external_force.png]]
|
||||||
|
* Change initial position
|
||||||
|
#+begin_src matlab
|
||||||
|
l0 = out_init.d.Data(end); % Initial wanted position [m]
|
||||||
|
leq = 0; % equilibrium position [m]
|
||||||
|
|
||||||
|
F_ext = 0; % External force [N]
|
||||||
|
F_act = 0; % Actuator force [N]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
out = sim('gravity_test.slx');
|
||||||
|
|
||||||
|
out.d.Name = 'Displacement';
|
||||||
|
out.Fm.Name = 'Force Sensor';
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
figure;
|
||||||
|
subplot(1,2,1)
|
||||||
|
plot(out.d)
|
||||||
|
title('');
|
||||||
|
subplot(1,2,2)
|
||||||
|
plot(out.Fm)
|
||||||
|
title('');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/sim_change_initial_position.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:sim_change_initial_position
|
||||||
|
#+CAPTION: Simulation after changing the initial position of the joint ([[./figs/sim_change_initial_position.png][png]], [[./figs/sim_change_initial_position.pdf][pdf]])
|
||||||
|
[[file:figs/sim_change_initial_position.png]]
|
||||||
|
* Conclusion
|
||||||
|
Changing the equilibrium position of each joint seem the most practical solution.
|
7
js/bootstrap.min.js
vendored
Normal file
7
js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
js/jquery.min.js
vendored
Normal file
4
js/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
js/jquery.stickytableheaders.min.js
vendored
Normal file
1
js/jquery.stickytableheaders.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
!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);
|
85
js/readtheorg.js
Normal file
85
js/readtheorg.js
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
$(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
|
||||||
|
};
|
||||||
|
}($));
|
98
matlab/simscape_gravity.m
Normal file
98
matlab/simscape_gravity.m
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
%% Clear Workspace and Close figures
|
||||||
|
clear; close all; clc;
|
||||||
|
|
||||||
|
%% Intialize Laplace variable
|
||||||
|
s = zpk('s');
|
||||||
|
|
||||||
|
% Simulink
|
||||||
|
|
||||||
|
open 'gravity_test.slx'
|
||||||
|
|
||||||
|
% Initial Simulation
|
||||||
|
|
||||||
|
g = -10; % [m/s^2]
|
||||||
|
|
||||||
|
k = 1e3; % Stiffness [N/m]
|
||||||
|
c = 10; % Damping [N/(m/s)]
|
||||||
|
|
||||||
|
l0 = 0; % Initial wanted position [m]
|
||||||
|
leq = 0; % equilibrium position [m]
|
||||||
|
|
||||||
|
F_ext = 0; % External force [N]
|
||||||
|
F_act = 0; % Actuator force [N]
|
||||||
|
|
||||||
|
out_init = sim('gravity_test.slx')
|
||||||
|
|
||||||
|
out_init.d.Name = 'Displacement';
|
||||||
|
out_init.Fm.Name = 'Force Sensor';
|
||||||
|
|
||||||
|
figure;
|
||||||
|
subplot(1,2,1)
|
||||||
|
plot(out_init.d)
|
||||||
|
title('');
|
||||||
|
subplot(1,2,2)
|
||||||
|
plot(out_init.Fm)
|
||||||
|
title('');
|
||||||
|
|
||||||
|
% Change the equilibrium position
|
||||||
|
|
||||||
|
l0 = 0; % Initial wanted position [m]
|
||||||
|
leq = -out_init.Fm.Data(end)/k; % equilibrium position [m]
|
||||||
|
|
||||||
|
F_ext = 0; % External force [N]
|
||||||
|
F_act = 0; % Actuator force [N]
|
||||||
|
|
||||||
|
out = sim('gravity_test.slx');
|
||||||
|
|
||||||
|
out.d.Name = 'Displacement';
|
||||||
|
out.Fm.Name = 'Force Sensor';
|
||||||
|
|
||||||
|
figure;
|
||||||
|
subplot(1,2,1)
|
||||||
|
plot(out.d)
|
||||||
|
title('');
|
||||||
|
subplot(1,2,2)
|
||||||
|
plot(out.Fm)
|
||||||
|
title('');
|
||||||
|
|
||||||
|
% Add external force
|
||||||
|
|
||||||
|
l0 = 0; % Initial wanted position [m]
|
||||||
|
leq = 0; % equilibrium position [m]
|
||||||
|
|
||||||
|
F_ext = -out_init.Fm.Data(end); % External force [N]
|
||||||
|
F_act = 0; % Actuator force [N]
|
||||||
|
|
||||||
|
out = sim('gravity_test.slx');
|
||||||
|
|
||||||
|
out.d.Name = 'Displacement';
|
||||||
|
out.Fm.Name = 'Force Sensor';
|
||||||
|
|
||||||
|
figure;
|
||||||
|
subplot(1,2,1)
|
||||||
|
plot(out.d)
|
||||||
|
title('');
|
||||||
|
subplot(1,2,2)
|
||||||
|
plot(out.Fm)
|
||||||
|
title('');
|
||||||
|
|
||||||
|
% Change initial position
|
||||||
|
|
||||||
|
l0 = out_init.d.Data(end); % Initial wanted position [m]
|
||||||
|
leq = 0; % equilibrium position [m]
|
||||||
|
|
||||||
|
F_ext = 0; % External force [N]
|
||||||
|
F_act = 0; % Actuator force [N]
|
||||||
|
|
||||||
|
out = sim('gravity_test.slx');
|
||||||
|
|
||||||
|
out.d.Name = 'Displacement';
|
||||||
|
out.Fm.Name = 'Force Sensor';
|
||||||
|
|
||||||
|
figure;
|
||||||
|
subplot(1,2,1)
|
||||||
|
plot(out.d)
|
||||||
|
title('');
|
||||||
|
subplot(1,2,2)
|
||||||
|
plot(out.Fm)
|
||||||
|
title('');
|
Loading…
Reference in New Issue
Block a user