Skip to content

Commit

Permalink
Deployed 0e15ecd with MkDocs version: 1.4.2
Browse files Browse the repository at this point in the history
  • Loading branch information
BJCaasenbrood committed Apr 24, 2024
1 parent 8d9eba9 commit da7ce9b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 18 deletions.
35 changes: 18 additions & 17 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -537,8 +537,8 @@ <h2 id="what-can-sorotoki-do">What can Sorotoki do?</h2>
<summary>But, is it easy to code?</summary>
<p>Well, absolutely! Sorotoki is aimed at removing complexity -- not only for soft robots but also for coding your problems! See the following example codes below: </p>
<ul>
<li>Code for multi-gait soft crawler: <a href="https://github.com/BJCaasenbrood/SorotokiCode/blob/master/scripts/fem/2D/dynamic/fem_crawler.m">Locomotion example</a></li>
<li>Code for multi-finger soft gripper (beaker): <a href="https://github.com/BJCaasenbrood/SorotokiCode/blob/master/scripts/mdl/mdl_suzumori_screw.m">Grasping example</a> and <a href="https://github.com/BJCaasenbrood/SorotokiCode/blob/master/scripts/mdl/mdl_suzumori_screw.m">Object manipulation example</a></li>
<li>Code for multi-gait soft crawler: <a href="https://github.com/BJCaasenbrood/SorotokiCode/blob/master/examples/paper/multigait_crawler.m">Locomotion example</a></li>
<li>Code for multi-finger soft gripper (beaker): <a href="https://github.com/BJCaasenbrood/SorotokiCode/blob/master/examples/paper/suzumori_gripper.m">Grasping example</a></li>
</ul>
</details>
<h2 id="list-of-functionalities">List of functionalities</h2>
Expand Down Expand Up @@ -571,8 +571,8 @@ <h2 id="short-examples">Short examples</h2>
<span class="c">% boundary conditions</span>
<span class="n">fem</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fem</span><span class="p">.</span><span class="n">addMaterial</span><span class="p">(</span><span class="n">NeoHookean</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mf">0.4</span><span class="p">));</span>
<span class="n">fem</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fem</span><span class="p">.</span><span class="n">addGravity</span><span class="p">();</span>
<span class="n">fem</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fem</span><span class="p">.</span><span class="n">addPressure</span><span class="p">(</span><span class="s">'AllHole'</span><span class="p">,</span><span class="w"> </span><span class="mi">30</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mf">1e-3</span><span class="p">);</span>
<span class="n">fem</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fem</span><span class="p">.</span><span class="n">addSupport</span><span class="p">(</span><span class="s">'Left'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">]);</span>
<span class="n">fem</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fem</span><span class="p">.</span><span class="n">addPressure</span><span class="p">(</span><span class="s">'allhole'</span><span class="p">,</span><span class="w"> </span><span class="mi">30</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mf">1e-3</span><span class="p">);</span>
<span class="n">fem</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fem</span><span class="p">.</span><span class="n">addSupport</span><span class="p">(</span><span class="s">'left'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">]);</span>

<span class="c">% magic</span>
<span class="n">fem</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fem</span><span class="p">.</span><span class="n">solve</span><span class="p">();</span>
Expand Down Expand Up @@ -641,9 +641,9 @@ <h2 id="short-examples">Short examples</h2>
<source src="./assets/mdl_control_jacobian.mp4" type="video/mp4"/>
</video>
</div></p>
<p>The next example shows the implementation of model-based controllers in Sorotoki. Consider a soft tentacle of length <span class="arithmatex">\(L = 100\)</span> mm, radius <span class="arithmatex">\(R = 5\)</span> mm, and a tapering of <span class="arithmatex">\(75\%\)</span>. We assume the tentacle is composed of DragonSkin10A silicone. </p>
<p>The next example shows the implementation of model-based controllers in Sorotoki. Consider a soft tentacle of length <span class="arithmatex">\(L = 100\)</span> mm, radius <span class="arithmatex">\(R = 5\)</span> mm, and a tapering of <span class="arithmatex">\(75\%\)</span>. We assume the tentacle is composed of NeoHookean material.</p>
<div class="arithmatex">\[\tau = J_v^\top\left[k_p (X_d - X) - k_d \dot{X}\right] + \nabla_q \mathcal{V}\]</div>
<p>where <span class="arithmatex">\(J_v(q) := \lfloor J(q,L) \rfloor_3\)</span> is the linear velocity part of the manipulator Jacobian matrix at the tip (<span class="arithmatex">\(\sigma = L\)</span>), <span class="arithmatex">\(\nabla_q \mathcal{V}\)</span> is simply the gradient of the potential energy w.r.t to its states <span class="arithmatex">\(q\)</span>, <span class="arithmatex">\(X\)</span> and <span class="arithmatex">\(X_d\)</span> the end-effector position and the desired position, respectively. Note that we can compute the end-effector velocity by <span class="arithmatex">\(\dot{X} = J_v(q) \dot{q}\)</span>. </p>
<p>where <span class="arithmatex">\(J_v(q) := \lfloor J(q,L) \rfloor_3\)</span> is the linear velocity part of the manipulator Jacobian matrix at the tip (<span class="arithmatex">\(\sigma = L\)</span>), <span class="arithmatex">\(\nabla_q \mathcal{V}\)</span> is simply the gradient of the potential energy w.r.t to its states <span class="arithmatex">\(q\)</span>, <span class="arithmatex">\(X\)</span> and <span class="arithmatex">\(X_d\)</span> the end-effector position and the desired position, respectively. Note that the end-effector velocity is given by <span class="arithmatex">\(\dot{X} = J_v(q) \dot{q}\)</span> (which Sorotoki pre-computes).</p>
<details class="info" open="open">
<summary>Code for simulation</summary>
<div class="highlight"><pre><span></span><code><span class="c">% CODE: Example 2 -- Task-space controller</span>
Expand All @@ -653,29 +653,30 @@ <h2 id="short-examples">Short examples</h2>
<span class="c">% build continuum shape</span>
<span class="n">POD</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">chebyspace</span><span class="p">(</span><span class="mi">60</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span><span class="w"> </span><span class="c">% POD basis</span>
<span class="n">shp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Shapes</span><span class="p">(</span><span class="n">POD</span><span class="p">,[</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="k">...</span><span class="c"> % pure bending XY</span>
<span class="w"> </span><span class="s">'Length'</span><span class="p">,</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span><span class="w"> </span><span class="k">...</span>
<span class="w"> </span><span class="s">'Material'</span><span class="p">,</span><span class="w"> </span><span class="n">Dragonskin10</span><span class="p">);</span>
<span class="w"> </span><span class="s">'Material'</span><span class="p">,</span><span class="w"> </span><span class="n">NeoHookean</span><span class="p">(</span><span class="mf">0.01</span><span class="p">,</span><span class="mf">0.3</span><span class="p">));</span>

<span class="c">% geometry and boundary conditions</span>
<span class="n">shp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">setRadius</span><span class="p">(</span><span class="mi">5</span><span class="p">);</span><span class="w"> </span><span class="c">% R = 5 mm</span>
<span class="n">shp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">setRamp</span><span class="p">(</span><span class="mf">0.75</span><span class="p">);</span><span class="w"> </span><span class="c">% R is reduced by 75% at s=L</span>
<span class="n">shp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">addGravity</span><span class="p">();</span>

<span class="c">% model composer</span>
<span class="n">mdl</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Model</span><span class="p">(</span><span class="n">shp</span><span class="p">,</span><span class="s">'TimeStep'</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">60</span><span class="p">,</span><span class="w"> </span><span class="k">...</span>
<span class="w"> </span><span class="s">'Controller'</span><span class="p">,</span><span class="w"> </span><span class="p">@(</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="n">tau</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">Xd</span><span class="p">)</span><span class="w"> </span><span class="p">);</span>
<span class="c">% assign controller</span>
<span class="n">shp</span><span class="p">.</span><span class="n">system</span><span class="p">.</span><span class="n">Controller</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">@(</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="n">Control</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">Xd</span><span class="p">);</span>

<span class="c">% magic ;)</span>
<span class="n">mdl</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">mdl</span><span class="p">.</span><span class="n">simulate</span><span class="p">();</span>
<span class="n">shp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">simulate</span><span class="p">();</span>

<span class="c">% task-space controller (called by solver)</span>
<span class="k">function</span><span class="w"> </span>tau<span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nf">tau</span><span class="p">(</span>mdl,Xd<span class="p">)</span>
<span class="w"> </span><span class="nb">log</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">mdl</span><span class="p">.</span><span class="n">Systems</span><span class="p">{</span><span class="mi">1</span><span class="p">}.</span><span class="n">Log</span><span class="p">;</span>
<span class="w"> </span><span class="n">X</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">log</span><span class="p">.</span><span class="n">FK</span><span class="p">.</span><span class="n">g</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="k">end</span><span class="p">);</span>
<span class="w"> </span><span class="n">Jv</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">log</span><span class="p">.</span><span class="n">FK</span><span class="p">.</span><span class="n">J</span><span class="p">(</span><span class="mi">4</span><span class="p">:</span><span class="mi">6</span><span class="p">,:,</span><span class="k">end</span><span class="p">);</span>
<span class="w"> </span><span class="n">Vq</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">log</span><span class="p">.</span><span class="n">PH</span><span class="p">.</span><span class="n">dVdq</span><span class="p">;</span>
<span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">system</span><span class="p">.</span><span class="n">Jacobian</span><span class="p">(</span><span class="mi">4</span><span class="p">:</span><span class="mi">6</span><span class="p">,:,</span><span class="k">end</span><span class="p">);</span>
<span class="w"> </span><span class="n">ve</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">system</span><span class="p">.</span><span class="n">Velocity</span><span class="p">(</span><span class="mi">4</span><span class="p">:</span><span class="mi">6</span><span class="p">,:,</span><span class="k">end</span><span class="p">);</span>
<span class="w"> </span><span class="n">fe</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">system</span><span class="p">.</span><span class="n">fElastic</span><span class="p">;</span>
<span class="w"> </span><span class="n">fg</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">system</span><span class="p">.</span><span class="n">fBody</span><span class="p">;</span>
<span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">shp</span><span class="p">.</span><span class="n">system</span><span class="p">.</span><span class="n">Backbone</span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="k">end</span><span class="p">);</span>

<span class="w"> </span><span class="n">tau</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Jv</span><span class="p">.</span><span class="o">'*</span><span class="p">(</span><span class="mf">1e-3</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">Xd</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">X</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1e-4</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">Jv</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nb">log</span><span class="p">.</span><span class="n">dq</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">Vq</span><span class="p">;</span>
<span class="w"> </span><span class="p">[</span><span class="n">kd</span><span class="p">,</span><span class="w"> </span><span class="n">kp</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">deal</span><span class="p">(</span><span class="mf">5e-6</span><span class="p">);</span>

<span class="w"> </span><span class="n">tau</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fe</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">fg</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">kp</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">J</span><span class="p">.</span><span class="o">'*</span><span class="p">(</span><span class="n">Xd</span><span class="p">(:)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">kd</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">J</span><span class="p">.</span><span class="o">'</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">ve</span><span class="p">;</span>
<span class="k">end</span>
</code></pre></div>
</details>
Expand Down
2 changes: 1 addition & 1 deletion search/search_index.json

Large diffs are not rendered by default.

Binary file modified sitemap.xml.gz
Binary file not shown.

0 comments on commit da7ce9b

Please sign in to comment.