Continue flexible joint study
1389
docs/figs/flex_joint_trans_dvf.pdf
Normal file
BIN
docs/figs/flex_joint_trans_dvf.png
Normal file
After Width: | Height: | Size: 134 KiB |
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 159 KiB |
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 86 KiB |
1649
docs/figs/flex_joints_rot_study_primary_plant.pdf
Normal file
BIN
docs/figs/flex_joints_rot_study_primary_plant.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
docs/figs/flex_joints_trans_primary_plant_L.pdf
Normal file
BIN
docs/figs/flex_joints_trans_primary_plant_L.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
docs/figs/flex_joints_trans_study_dvf.pdf
Normal file
BIN
docs/figs/flex_joints_trans_study_dvf.png
Normal file
After Width: | Height: | Size: 199 KiB |
BIN
docs/figs/flex_joints_trans_study_dvf_root_locus.pdf
Normal file
BIN
docs/figs/flex_joints_trans_study_dvf_root_locus.png
Normal file
After Width: | Height: | Size: 85 KiB |
1959
docs/figs/flex_joints_trans_study_primary_plant.pdf
Normal file
BIN
docs/figs/flex_joints_trans_study_primary_plant.png
Normal file
After Width: | Height: | Size: 194 KiB |
BIN
docs/figs/flex_joints_trans_study_root_locus_unzoom.pdf
Normal file
BIN
docs/figs/flex_joints_trans_study_root_locus_unzoom.png
Normal file
After Width: | Height: | Size: 103 KiB |
534
docs/flexible_joints_study.html
Normal file
@ -0,0 +1,534 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?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-05-05 mar. 10:34 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Study of the Flexible Joints</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<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>
|
||||
<script>MathJax = {
|
||||
tex: {
|
||||
tags: 'ams',
|
||||
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">Study of the Flexible Joints</h1>
|
||||
<div id="table-of-contents">
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org83db6d9">1. Rotational Stiffness</a>
|
||||
<ul>
|
||||
<li><a href="#orgd487aa8">1.1. Initialization</a></li>
|
||||
<li><a href="#orgbc5ab48">1.2. Realistic Rotational Stiffness Values</a>
|
||||
<ul>
|
||||
<li><a href="#orgfa496e1">1.2.1. Direct Velocity Feedback</a></li>
|
||||
<li><a href="#org2cf681e">1.2.2. Primary Plant</a></li>
|
||||
<li><a href="#org17b7568">1.2.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org8ad3f34">1.3. Parametric Study</a>
|
||||
<ul>
|
||||
<li><a href="#org067911e">1.3.1. Direct Velocity Feedback</a></li>
|
||||
<li><a href="#org3d67d1c">1.3.2. Primary Control</a></li>
|
||||
<li><a href="#org700e2da">1.3.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org81f1d95">2. Translation Stiffness</a>
|
||||
<ul>
|
||||
<li><a href="#org969d9e7">2.1. Realistic Translation Stiffness Values</a>
|
||||
<ul>
|
||||
<li><a href="#org4af6fbb">2.1.1. Initialization</a></li>
|
||||
<li><a href="#org5135788">2.1.2. Direct Velocity Feedback</a></li>
|
||||
<li><a href="#org7eb4054">2.1.3. Primary Plant</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org0275632">2.2. Parametric study</a>
|
||||
<ul>
|
||||
<li><a href="#org1f64e69">2.2.1. Direct Velocity Feedback</a></li>
|
||||
<li><a href="#orgb35fa00">2.2.2. Primary Control</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org81a1a77">2.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
In this document is studied the effect of the mechanical behavior of the flexible joints that are located the extremities of each nano-hexapod’s legs.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Ideally, we want the x and y rotations to be free and all the translations to be blocked.
|
||||
However, this is never the case and be have to consider:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Finite x and y rotational stiffnesses (Section <a href="#org3eb4121">1</a>)</li>
|
||||
<li>Translation stiffness in the direction of the legs (Section <a href="#org8f4d83b">2</a>)</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
This may impose some limitations, also, the goal is to specify the required joints stiffnesses.
|
||||
</p>
|
||||
|
||||
<div id="outline-container-org83db6d9" class="outline-2">
|
||||
<h2 id="org83db6d9"><span class="section-number-2">1</span> Rotational Stiffness</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
<a id="org3eb4121"></a>
|
||||
</p>
|
||||
<p>
|
||||
In this section, we wish to study the effect of the rotation flexibility of the nano-hexapod joints.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd487aa8" class="outline-3">
|
||||
<h3 id="orgd487aa8"><span class="section-number-3">1.1</span> Initialization</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
Let’s initialize all the stages with default parameters.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeGround();
|
||||
initializeGranite();
|
||||
initializeTy();
|
||||
initializeRy();
|
||||
initializeRz();
|
||||
initializeMicroHexapod();
|
||||
initializeAxisc();
|
||||
initializeMirror();
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Let’s consider the heaviest mass which should we the most problematic with it comes to the flexible joints.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeSample('mass', 50, 'freq', 200*ones(6,1));
|
||||
initializeReferences('Rz_type', 'rotating-not-filtered', 'Rz_period', 60);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgbc5ab48" class="outline-3">
|
||||
<h3 id="orgbc5ab48"><span class="section-number-3">1.2</span> Realistic Rotational Stiffness Values</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
<p>
|
||||
Let’s compare the ideal case (zero stiffness in rotation and infinite stiffness in translation) with a more realistic case:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>\(K_{\theta, \phi} = 15\,[Nm/rad]\) stiffness in flexion</li>
|
||||
<li>\(K_{\psi} = 20\,[Nm/rad]\) stiffness in torsion</li>
|
||||
</ul>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Kf_M = 15*ones(6,1);
|
||||
Kf_F = 15*ones(6,1);
|
||||
Kt_M = 20*ones(6,1);
|
||||
Kt_F = 20*ones(6,1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The stiffness and damping of the nano-hexapod’s legs are:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">k_opt = 1e5; % [N/m]
|
||||
c_opt = 2e2; % [N/(m/s)]
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
This corresponds to the optimal identified stiffness.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgfa496e1" class="outline-4">
|
||||
<h4 id="orgfa496e1"><span class="section-number-4">1.2.1</span> Direct Velocity Feedback</h4>
|
||||
<div class="outline-text-4" id="text-1-2-1">
|
||||
<p>
|
||||
We identify the dynamics from actuators force \(\tau_i\) to relative motion sensors \(d\mathcal{L}_i\) with and without considering the flexible joint stiffness.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The obtained dynamics are shown in Figure <a href="#org656fd1c">1</a>.
|
||||
It is shown that the adding of stiffness for the flexible joints does increase a little bit the frequencies of the mass suspension modes. It stiffen the structure.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org656fd1c" class="figure">
|
||||
<p><img src="figs/flex_joint_rot_dvf.png" alt="flex_joint_rot_dvf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Dynamics from actuators force \(\tau_i\) to relative motion sensors \(d\mathcal{L}_i\) with (blue) and without (red) considering the flexible joint stiffness</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2cf681e" class="outline-4">
|
||||
<h4 id="org2cf681e"><span class="section-number-4">1.2.2</span> Primary Plant</h4>
|
||||
<div class="outline-text-4" id="text-1-2-2">
|
||||
<p>
|
||||
Let’s now identify the dynamics from \(\bm{\tau}^\prime\) to \(\bm{\epsilon}_{\mathcal{X}_n}\) (for the primary controller designed in the frame of the legs).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The dynamics is compare with and without the joint flexibility in Figure <a href="#org4322feb">2</a>.
|
||||
The plant dynamics is not found to be changing significantly.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org4322feb" class="figure">
|
||||
<p><img src="figs/flex_joints_rot_primary_plant_L.png" alt="flex_joints_rot_primary_plant_L.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Dynamics from \(\bm{\tau}^\prime_i\) to \(\bm{\epsilon}_{\mathcal{X}_n,i}\) with perfect joints (dashed) and with flexible joints (solid)</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org17b7568" class="outline-4">
|
||||
<h4 id="org17b7568"><span class="section-number-4">1.2.3</span> Conclusion</h4>
|
||||
<div class="outline-text-4" id="text-1-2-3">
|
||||
<div class="important">
|
||||
<p>
|
||||
Considering realistic flexible joint rotational stiffness for the nano-hexapod does not seems to impose any limitation on the DVF control nor on the primary control.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
It only increases a little bit the suspension modes of the sample on top of the nano-hexapod.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8ad3f34" class="outline-3">
|
||||
<h3 id="org8ad3f34"><span class="section-number-3">1.3</span> Parametric Study</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<p>
|
||||
We wish now to see what is the impact of the rotation stiffness of the flexible joints on the dynamics.
|
||||
This will help to determine the requirements on the joint’s stiffness.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Let’s consider the following rotational stiffness of the flexible joints:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Ks = [1, 5, 10, 50, 100]; % [Nm/rad]
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
We also consider here a nano-hexapod with the identified optimal actuator stiffness.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org067911e" class="outline-4">
|
||||
<h4 id="org067911e"><span class="section-number-4">1.3.1</span> Direct Velocity Feedback</h4>
|
||||
<div class="outline-text-4" id="text-1-3-1">
|
||||
<p>
|
||||
The dynamics from the actuators to the relative displacement sensor in each leg is identified and shown in Figure <a href="#org8fbbf9d">3</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The corresponding Root Locus plot is shown in Figure <a href="#orgb9f3389">4</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
It is shown that the rotational stiffness of the flexible joints does indeed change a little the dynamics, but critical damping is stiff achievable with Direct Velocity Feedback.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org8fbbf9d" class="figure">
|
||||
<p><img src="figs/flex_joints_rot_study_dvf.png" alt="flex_joints_rot_study_dvf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Dynamics from \(\tau_i\) to \(d\mathcal{L}_i\) for all the considered Rotation Stiffnesses</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgb9f3389" class="figure">
|
||||
<p><img src="figs/flex_joints_rot_study_dvf_root_locus.png" alt="flex_joints_rot_study_dvf_root_locus.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Root Locus for all the considered Rotation Stiffnesses</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org3d67d1c" class="outline-4">
|
||||
<h4 id="org3d67d1c"><span class="section-number-4">1.3.2</span> Primary Control</h4>
|
||||
<div class="outline-text-4" id="text-1-3-2">
|
||||
<p>
|
||||
The dynamics from \(\bm{\tau}^\prime\) to \(\bm{\epsilon}_{\mathcal{X}_n}\) (for the primary controller designed in the frame of the legs) is shown in Figure <a href="#orgb739560">5</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
It is shown that the rotational stiffness of the flexible joints have very little impact on the dynamics.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgb739560" class="figure">
|
||||
<p><img src="figs/flex_joints_rot_study_primary_plant.png" alt="flex_joints_rot_study_primary_plant.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Diagonal elements of the transfer function matrix from \(\bm{\tau}^\prime\) to \(\bm{\epsilon}_{\mathcal{X}_n}\) for the considered rotational stiffnesses</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org700e2da" class="outline-4">
|
||||
<h4 id="org700e2da"><span class="section-number-4">1.3.3</span> Conclusion</h4>
|
||||
<div class="outline-text-4" id="text-1-3-3">
|
||||
<div class="important">
|
||||
<p>
|
||||
The rotational stiffness of the flexible joint does not significantly change the dynamics.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org81f1d95" class="outline-2">
|
||||
<h2 id="org81f1d95"><span class="section-number-2">2</span> Translation Stiffness</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
<a id="org8f4d83b"></a>
|
||||
</p>
|
||||
<p>
|
||||
Let’s know consider a flexibility in translation of the flexible joint, in the axis of the legs.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org969d9e7" class="outline-3">
|
||||
<h3 id="org969d9e7"><span class="section-number-3">2.1</span> Realistic Translation Stiffness Values</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
We choose realistic values of the axial stiffness of the joints:
|
||||
\[ K_a = 60\,[N/\mu m] \]
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Kz_F = 60e6*ones(6,1); % [N/m]
|
||||
Kz_M = 60e6*ones(6,1); % [N/m]
|
||||
Cz_F = 1*ones(6,1); % [N/(m/s)]
|
||||
Cz_M = 1*ones(6,1); % [N/(m/s)]
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4af6fbb" class="outline-4">
|
||||
<h4 id="org4af6fbb"><span class="section-number-4">2.1.1</span> Initialization</h4>
|
||||
<div class="outline-text-4" id="text-2-1-1">
|
||||
<p>
|
||||
Let’s initialize all the stages with default parameters.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeGround();
|
||||
initializeGranite();
|
||||
initializeTy();
|
||||
initializeRy();
|
||||
initializeRz();
|
||||
initializeMicroHexapod();
|
||||
initializeAxisc();
|
||||
initializeMirror();
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Let’s consider the heaviest mass which should we the most problematic with it comes to the flexible joints.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">initializeSample('mass', 50, 'freq', 200*ones(6,1));
|
||||
initializeReferences('Rz_type', 'rotating-not-filtered', 'Rz_period', 60);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5135788" class="outline-4">
|
||||
<h4 id="org5135788"><span class="section-number-4">2.1.2</span> Direct Velocity Feedback</h4>
|
||||
<div class="outline-text-4" id="text-2-1-2">
|
||||
<p>
|
||||
The dynamics from actuators force \(\tau_i\) to relative motion sensors \(d\mathcal{L}_i\) with and without considering the flexible joint stiffness are identified.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The obtained dynamics are shown in Figure <a href="#org78dd87a">6</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org78dd87a" class="figure">
|
||||
<p><img src="figs/flex_joint_trans_dvf.png" alt="flex_joint_trans_dvf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Dynamics from actuators force \(\tau_i\) to relative motion sensors \(d\mathcal{L}_i\) with (blue) and without (red) considering the flexible joint axis stiffness</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org7eb4054" class="outline-4">
|
||||
<h4 id="org7eb4054"><span class="section-number-4">2.1.3</span> Primary Plant</h4>
|
||||
<div class="outline-text-4" id="text-2-1-3">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Kdvf = 5e3*s/(1+s/2/pi/1e3)*eye(6);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Let’s now identify the dynamics from \(\bm{\tau}^\prime\) to \(\bm{\epsilon}_{\mathcal{X}_n}\) (for the primary controller designed in the frame of the legs).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The dynamics is compare with and without the joint flexibility in Figure <a href="#org9bd0791">7</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org9bd0791" class="figure">
|
||||
<p><img src="figs/flex_joints_trans_primary_plant_L.png" alt="flex_joints_trans_primary_plant_L.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Dynamics from \(\bm{\tau}^\prime_i\) to \(\bm{\epsilon}_{\mathcal{X}_n,i}\) with infinite axis stiffnes (solid) and with realistic axial stiffness (dashed)</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0275632" class="outline-3">
|
||||
<h3 id="org0275632"><span class="section-number-3">2.2</span> Parametric study</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<p>
|
||||
We wish now to see what is the impact of the <b>axial</b> stiffness of the flexible joints on the dynamics.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Let’s consider the following values for the axial stiffness:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Kzs = [1e4, 1e5, 1e6, 1e7, 1e8, 1e9]; % [N/m]
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
We also consider here a nano-hexapod with the identified optimal actuator stiffness (\(k = 10^5\,[N/m]\)).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1f64e69" class="outline-4">
|
||||
<h4 id="org1f64e69"><span class="section-number-4">2.2.1</span> Direct Velocity Feedback</h4>
|
||||
<div class="outline-text-4" id="text-2-2-1">
|
||||
<p>
|
||||
The dynamics from the actuators to the relative displacement sensor in each leg is identified and shown in Figure <a href="#orgab9ab86">8</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
It is shown that the axial stiffness of the flexible joints does have a huge impact on the dynamics.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If the axial stiffness of the flexible joints is \(K_a > 10^7\,[N/m]\) (here \(100\) times higher than the actuator stiffness), then the change of dynamics stays reasonably small.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This is more clear by looking at the root locus (Figures <a href="#org9d43966">9</a> and <a href="#org987d98e">10</a>).
|
||||
It can be seen that very little active damping can be achieve for rotational joint axial stiffnesses below \(10^7\,[N/m]\).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgab9ab86" class="figure">
|
||||
<p><img src="figs/flex_joints_trans_study_dvf.png" alt="flex_joints_trans_study_dvf.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Dynamics from \(\tau_i\) to \(d\mathcal{L}_i\) for all the considered axis Stiffnesses</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org9d43966" class="figure">
|
||||
<p><img src="figs/flex_joints_trans_study_dvf_root_locus.png" alt="flex_joints_trans_study_dvf_root_locus.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Root Locus for all the considered axial Stiffnesses</p>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">xlim([-1e3, 0]);
|
||||
ylim([0, 1e3]);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org987d98e" class="figure">
|
||||
<p><img src="figs/flex_joints_trans_study_root_locus_unzoom.png" alt="flex_joints_trans_study_root_locus_unzoom.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Root Locus (unzoom) for all the considered axial Stiffnesses</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb35fa00" class="outline-4">
|
||||
<h4 id="orgb35fa00"><span class="section-number-4">2.2.2</span> Primary Control</h4>
|
||||
<div class="outline-text-4" id="text-2-2-2">
|
||||
<p>
|
||||
The dynamics from \(\bm{\tau}^\prime\) to \(\bm{\epsilon}_{\mathcal{X}_n}\) (for the primary controller designed in the frame of the legs) is shown in Figure <a href="#org6070692">11</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org6070692" class="figure">
|
||||
<p><img src="figs/flex_joints_trans_study_primary_plant.png" alt="flex_joints_trans_study_primary_plant.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Diagonal elements of the transfer function matrix from \(\bm{\tau}^\prime\) to \(\bm{\epsilon}_{\mathcal{X}_n}\) for the considered axial stiffnesses</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org81a1a77" class="outline-3">
|
||||
<h3 id="org81a1a77"><span class="section-number-3">2.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<div class="important">
|
||||
<p>
|
||||
The axial stiffness of the flexible joints should be maximized.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For the considered actuator stiffness \(k = 10^5\,[N/m]\), the axial stiffness of the rotational joints should ideally be above \(10^7\,[N/m]\).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This is a reasonable stiffness value for such joints.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We may interpolate the results and say that the axial joint stiffness should be 100 times higher than the actuator stiffness, but this should be confirmed with further analysis.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-05-05 mar. 10:34</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -75,17 +75,19 @@ Let's compare the ideal case (zero stiffness in rotation and infinite stiffness
|
||||
|
||||
#+begin_src matlab
|
||||
Kf_M = 15*ones(6,1);
|
||||
Kt_M = 20*ones(6,1);
|
||||
Kf_F = 15*ones(6,1);
|
||||
Kt_M = 20*ones(6,1);
|
||||
Kt_F = 20*ones(6,1);
|
||||
#+end_src
|
||||
|
||||
The stiffness and damping of the nano-hexapod's legs are:
|
||||
#+begin_src matlab
|
||||
k = 1e5; % [N/m]
|
||||
c = 2e2; % [N/(m/s)]
|
||||
k_opt = 1e5; % [N/m]
|
||||
c_opt = 2e2; % [N/(m/s)]
|
||||
#+end_src
|
||||
|
||||
This corresponds to the optimal identified stiffness.
|
||||
|
||||
*** Direct Velocity Feedback
|
||||
We identify the dynamics from actuators force $\tau_i$ to relative motion sensors $d\mathcal{L}_i$ with and without considering the flexible joint stiffness.
|
||||
|
||||
@ -103,7 +105,7 @@ It is shown that the adding of stiffness for the flexible joints does increase a
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
initializeNanoHexapod('k', k, 'c', c, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal_p', ...
|
||||
'type_M', 'spherical_p');
|
||||
|
||||
@ -113,7 +115,7 @@ It is shown that the adding of stiffness for the flexible joints does increase a
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
initializeNanoHexapod('k', k, 'c', c, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal', ...
|
||||
'type_M', 'spherical', ...
|
||||
'Kf_M', Kf_M, ...
|
||||
@ -156,7 +158,7 @@ It is shown that the adding of stiffness for the flexible joints does increase a
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joint_rot_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
exportFig('figs/flex_joint_rot_dvf.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joint_rot_dvf
|
||||
@ -187,23 +189,20 @@ The plant dynamics is not found to be changing significantly.
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
initializeNanoHexapod('k', k, 'c', c, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal_p', ...
|
||||
'type_M', 'spherical_p');
|
||||
|
||||
G_p = linearize(mdl, io);
|
||||
G_p.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G_p.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
G = linearize(mdl, io);
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx_p = -G_p*inv(nano_hexapod.kinematics.J');
|
||||
Gx_p.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
|
||||
Gl_p = -nano_hexapod.kinematics.J*G_p;
|
||||
Gl_p = -nano_hexapod.kinematics.J*G;
|
||||
Gl_p.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
initializeNanoHexapod('k', k, 'c', c, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal', ...
|
||||
'type_M', 'spherical', ...
|
||||
'Kf_M', Kf_M, ...
|
||||
@ -215,9 +214,6 @@ The plant dynamics is not found to be changing significantly.
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
#+end_src
|
||||
@ -283,7 +279,7 @@ This will help to determine the requirements on the joint's stiffness.
|
||||
|
||||
Let's consider the following rotational stiffness of the flexible joints:
|
||||
#+begin_src matlab
|
||||
Ks = [1, 10, 100]; % [Nm/rad]
|
||||
Ks = [1, 5, 10, 50, 100]; % [Nm/rad]
|
||||
#+end_src
|
||||
|
||||
We also consider here a nano-hexapod with the identified optimal actuator stiffness.
|
||||
@ -307,28 +303,24 @@ It is shown that the rotational stiffness of the flexible joints does indeed cha
|
||||
%% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
|
||||
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Force Sensors
|
||||
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Relative Displacement Sensors
|
||||
|
||||
Gdvf_s = {zeros(length(Ks), 1)};
|
||||
G_dvf_s = {zeros(length(Ks), 1)};
|
||||
|
||||
for i = 1:length(Ks)
|
||||
initializeNanoHexapod('k', k, 'c', c, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal', ...
|
||||
'type_M', 'spherical', ...
|
||||
'Kf_M', Ks(i), ...
|
||||
'Kt_M', Ks(i), ...
|
||||
'Kf_F', Ks(i), ...
|
||||
'Kt_F', Ks(i), ...
|
||||
'Cf_M', 0.2*sqrt(Ks(i)*1), ...
|
||||
'Ct_M', 0.2*sqrt(Ks(i)*1), ...
|
||||
'Cf_F', 0.2*sqrt(Ks(i)*1), ...
|
||||
'Ct_F', 0.2*sqrt(Ks(i)*1));
|
||||
'Kt_F', Ks(i));
|
||||
|
||||
Gdvf = linearize(mdl, io);
|
||||
G_dvf.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G_dvf.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'};
|
||||
G = linearize(mdl, io);
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'};
|
||||
|
||||
Gdvf_s(i) = {Gdvf};
|
||||
G_dvf_s(i) = {G};
|
||||
end
|
||||
#+end_src
|
||||
|
||||
@ -340,7 +332,7 @@ It is shown that the rotational stiffness of the flexible joints does indeed cha
|
||||
ax1 = subplot(2, 1, 1);
|
||||
hold on;
|
||||
for i = 1:length(Ks)
|
||||
plot(freqs, abs(squeeze(freqresp(Gdvf_s{i}(1, 1), freqs, 'Hz'))));
|
||||
plot(freqs, abs(squeeze(freqresp(G_dvf_s{i}(1, 1), freqs, 'Hz'))));
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(G_dvf_p(1, 1), freqs, 'Hz'))), 'k--');
|
||||
hold off;
|
||||
@ -350,7 +342,7 @@ It is shown that the rotational stiffness of the flexible joints does indeed cha
|
||||
ax2 = subplot(2, 1, 2);
|
||||
hold on;
|
||||
for i = 1:length(Ks)
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gdvf_s{i}(1, 1), freqs, 'Hz')))), ...
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_dvf_s{i}(1, 1), freqs, 'Hz')))), ...
|
||||
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
|
||||
end
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_dvf_p(1, 1), freqs, 'Hz')))), 'k--', ...
|
||||
@ -366,7 +358,7 @@ It is shown that the rotational stiffness of the flexible joints does indeed cha
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joints_rot_study_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
exportFig('figs/flex_joints_rot_study_dvf.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joints_rot_study_dvf
|
||||
@ -382,14 +374,14 @@ exportFig('figs/flex_joints_rot_study_dvf.pdf', 'width', 'full', 'height', 'full
|
||||
hold on;
|
||||
for i = 1:length(Ks)
|
||||
set(gca,'ColorOrderIndex',i);
|
||||
plot(real(pole(Gdvf_s{i})), imag(pole(Gdvf_s{i})), 'x', ...
|
||||
plot(real(pole(G_dvf_s{i})), imag(pole(G_dvf_s{i})), 'x', ...
|
||||
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
|
||||
set(gca,'ColorOrderIndex',i);
|
||||
plot(real(tzero(Gdvf_s{i})), imag(tzero(Gdvf_s{i})), 'o', ...
|
||||
plot(real(tzero(G_dvf_s{i})), imag(tzero(G_dvf_s{i})), 'o', ...
|
||||
'HandleVisibility', 'off');
|
||||
for k = 1:length(gains)
|
||||
set(gca,'ColorOrderIndex',i);
|
||||
cl_poles = pole(feedback(Gdvf_s{i}, (gains(k)*s)*eye(6)));
|
||||
cl_poles = pole(feedback(G_dvf_s{i}, (gains(k)*s)*eye(6)));
|
||||
plot(real(cl_poles), imag(cl_poles), '.', ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
@ -403,7 +395,7 @@ exportFig('figs/flex_joints_rot_study_dvf.pdf', 'width', 'full', 'height', 'full
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joints_rot_study_dvf_root_locus.pdf', 'width', 'wide', 'height', 'tall')
|
||||
exportFig('figs/flex_joints_rot_study_dvf_root_locus.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joints_rot_study_dvf_root_locus
|
||||
@ -412,7 +404,11 @@ exportFig('figs/flex_joints_rot_study_dvf_root_locus.pdf', 'width', 'wide', 'hei
|
||||
[[file:figs/flex_joints_rot_study_dvf_root_locus.png]]
|
||||
|
||||
*** Primary Control
|
||||
#+begin_src matlab
|
||||
The dynamics from $\bm{\tau}^\prime$ to $\bm{\epsilon}_{\mathcal{X}_n}$ (for the primary controller designed in the frame of the legs) is shown in Figure [[fig:flex_joints_rot_study_primary_plant]].
|
||||
|
||||
It is shown that the rotational stiffness of the flexible joints have very little impact on the dynamics.
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kdvf = 5e3*s/(1+s/2/pi/1e3)*eye(6);
|
||||
#+end_src
|
||||
|
||||
@ -427,33 +423,24 @@ exportFig('figs/flex_joints_rot_study_dvf_root_locus.pdf', 'width', 'wide', 'hei
|
||||
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
|
||||
Gx_3dof_s = {zeros(length(Ks), 1)};
|
||||
Gl_3dof_s = {zeros(length(Ks), 1)};
|
||||
Gl_s = {zeros(length(Ks), 1)};
|
||||
|
||||
for i = 1:length(Ks)
|
||||
initializeNanoHexapod('k', k, 'c', c, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal', ...
|
||||
'type_M', 'spherical', ...
|
||||
'Kf_M', Ks(i), ...
|
||||
'Kt_M', 20, ...
|
||||
'Kt_M', Ks(i), ...
|
||||
'Kf_F', Ks(i), ...
|
||||
'Kt_F', 20, ...
|
||||
'Cf_M', 0, ...
|
||||
'Ct_M', 0, ...
|
||||
'Cf_F', 0, ...
|
||||
'Ct_F', 0);
|
||||
'Kt_F', Ks(i));
|
||||
|
||||
G = linearize(mdl, io);
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx_3dof = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx_3dof.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Gx_3dof_s(i) = {Gx_3dof};
|
||||
|
||||
Gl_3dof = -nano_hexapod.kinematics.J*G;
|
||||
Gl_3dof.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
Gl_3dof_s(i) = {Gl_3dof};
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
Gl_s(i) = {Gl};
|
||||
end
|
||||
#+end_src
|
||||
|
||||
@ -465,7 +452,7 @@ exportFig('figs/flex_joints_rot_study_dvf_root_locus.pdf', 'width', 'wide', 'hei
|
||||
ax1 = subplot(2, 1, 1);
|
||||
hold on;
|
||||
for i = 1:length(Ks)
|
||||
plot(freqs, abs(squeeze(freqresp(Gl_3dof_s{i}(1, 1), freqs, 'Hz'))));
|
||||
plot(freqs, abs(squeeze(freqresp(Gl_s{i}(1, 1), freqs, 'Hz'))));
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(Gl_p(1, 1), freqs, 'Hz'))), 'k--');
|
||||
hold off;
|
||||
@ -475,7 +462,7 @@ exportFig('figs/flex_joints_rot_study_dvf_root_locus.pdf', 'width', 'wide', 'hei
|
||||
ax2 = subplot(2, 1, 2);
|
||||
hold on;
|
||||
for i = 1:length(Ks)
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gl_3dof_s{i}(1, 1), freqs, 'Hz')))), ...
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gl_s{i}(1, 1), freqs, 'Hz')))), ...
|
||||
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
|
||||
end
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gl_p(1, 1), freqs, 'Hz')))), 'k--', ...
|
||||
@ -501,14 +488,14 @@ exportFig('figs/flex_joints_rot_study_dvf_root_locus.pdf', 'width', 'wide', 'hei
|
||||
|
||||
*** Conclusion
|
||||
#+begin_important
|
||||
|
||||
The rotational stiffness of the flexible joint does not significantly change the dynamics.
|
||||
#+end_important
|
||||
|
||||
* Translation Stiffness
|
||||
<<sec:trans_stiffness>>
|
||||
|
||||
** Introduction :ignore:
|
||||
Let's know consider a flexibility in translation of the flexible joint.
|
||||
Let's know consider a flexibility in translation of the flexible joint, in the axis of the legs.
|
||||
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
@ -528,7 +515,19 @@ Let's know consider a flexibility in translation of the flexible joint.
|
||||
open('nass_model.slx')
|
||||
#+end_src
|
||||
|
||||
** Initialization
|
||||
** Realistic Translation Stiffness Values
|
||||
*** Introduction :ignore:
|
||||
We choose realistic values of the axial stiffness of the joints:
|
||||
\[ K_a = 60\,[N/\mu m] \]
|
||||
|
||||
#+begin_src matlab
|
||||
Kz_F = 60e6*ones(6,1); % [N/m]
|
||||
Kz_M = 60e6*ones(6,1); % [N/m]
|
||||
Cz_F = 1*ones(6,1); % [N/(m/s)]
|
||||
Cz_M = 1*ones(6,1); % [N/(m/s)]
|
||||
#+end_src
|
||||
|
||||
*** Initialization
|
||||
Let's initialize all the stages with default parameters.
|
||||
#+begin_src matlab
|
||||
initializeGround();
|
||||
@ -560,13 +559,10 @@ Let's consider the heaviest mass which should we the most problematic with it co
|
||||
Kdvf = tf(zeros(6));
|
||||
#+end_src
|
||||
|
||||
** Direct Velocity Feedback
|
||||
#+begin_src matlab
|
||||
Kz_F = 60e6*ones(6,1); % [N/m]
|
||||
Kz_M = 60e6*ones(6,1); % [N/m]
|
||||
Cz_F = 1e2*ones(6,1); % [N/m]
|
||||
Cz_M = 1e2*ones(6,1); % [N/m]
|
||||
#+end_src
|
||||
*** Direct Velocity Feedback
|
||||
The dynamics from actuators force $\tau_i$ to relative motion sensors $d\mathcal{L}_i$ with and without considering the flexible joint stiffness are identified.
|
||||
|
||||
The obtained dynamics are shown in Figure [[fig:flex_joint_trans_dvf]].
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Name of the Simulink File
|
||||
@ -579,7 +575,7 @@ Let's consider the heaviest mass which should we the most problematic with it co
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
initializeNanoHexapod('k', 1e5, 'c', 2e2, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal_3dof', ...
|
||||
'type_M', 'spherical_3dof', ...
|
||||
'Kz_F', Kz_F, ...
|
||||
@ -593,7 +589,7 @@ Let's consider the heaviest mass which should we the most problematic with it co
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
initializeNanoHexapod('k', 1e5, 'c', 2e2, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal', ...
|
||||
'type_M', 'spherical');
|
||||
|
||||
@ -632,19 +628,23 @@ Let's consider the heaviest mass which should we the most problematic with it co
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joint_trans_dvf
|
||||
#+caption:
|
||||
#+caption: Dynamics from actuators force $\tau_i$ to relative motion sensors $d\mathcal{L}_i$ with (blue) and without (red) considering the flexible joint axis stiffness
|
||||
#+RESULTS:
|
||||
[[file:figs/flex_joint_trans_dvf.png]]
|
||||
|
||||
** Primary Plant
|
||||
*** Primary Plant
|
||||
#+begin_src matlab
|
||||
Kdvf = 5e3*s/(1+s/2/pi/1e3)*eye(6);
|
||||
#+end_src
|
||||
|
||||
Let's now identify the dynamics from $\bm{\tau}^\prime$ to $\bm{\epsilon}_{\mathcal{X}_n}$ (for the primary controller designed in the frame of the legs).
|
||||
|
||||
The dynamics is compare with and without the joint flexibility in Figure [[fig:flex_joints_trans_primary_plant_L]].
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Name of the Simulink File
|
||||
mdl = 'nass_model';
|
||||
@ -658,7 +658,7 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
initializeNanoHexapod('k', 1e5, 'c', 2e2, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal_3dof', ...
|
||||
'type_M', 'spherical_3dof', ...
|
||||
'Kz_F', Kz_F, ...
|
||||
@ -666,19 +666,16 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
'Cz_F', Cz_F, ...
|
||||
'Cz_M', Cz_M);
|
||||
|
||||
G_3dof = linearize(mdl, io);
|
||||
G_3dof.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G_3dof.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
G = linearize(mdl, io);
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx_3dof = -G_3dof*inv(nano_hexapod.kinematics.J');
|
||||
Gx_3dof.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
|
||||
Gl_3dof = -nano_hexapod.kinematics.J*G_3dof;
|
||||
Gl_3dof = -nano_hexapod.kinematics.J*G;
|
||||
Gl_3dof.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
initializeNanoHexapod('k', 1e5, 'c', 2e2, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal', ...
|
||||
'type_M', 'spherical');
|
||||
|
||||
@ -686,9 +683,6 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
|
||||
Gl = -nano_hexapod.kinematics.J*G;
|
||||
Gl.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
#+end_src
|
||||
@ -733,21 +727,40 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joints_trans_primary_plant_L.pdf', 'width', 'full', 'height', 'full')
|
||||
exportFig('figs/flex_joints_trans_primary_plant_L.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joints_trans_primary_plant_L
|
||||
#+caption:
|
||||
#+caption: Dynamics from $\bm{\tau}^\prime_i$ to $\bm{\epsilon}_{\mathcal{X}_n,i}$ with infinite axis stiffnes (solid) and with realistic axial stiffness (dashed)
|
||||
#+RESULTS:
|
||||
[[file:figs/flex_joints_trans_primary_plant_L.png]]
|
||||
|
||||
** Parametric study
|
||||
*** Introduction :ignore:
|
||||
We wish now to see what is the impact of the *axial* stiffness of the flexible joints on the dynamics.
|
||||
|
||||
Let's consider the following values for the axial stiffness:
|
||||
#+begin_src matlab
|
||||
Kzs = [1e4, 1e5, 1e6, 1e7, 1e8, 1e9]; % [N/m]
|
||||
#+end_src
|
||||
|
||||
We also consider here a nano-hexapod with the identified optimal actuator stiffness ($k = 10^5\,[N/m]$).
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
K = tf(zeros(6));
|
||||
Kdvf = tf(zeros(6));
|
||||
#+end_src
|
||||
|
||||
*** Direct Velocity Feedback
|
||||
The dynamics from the actuators to the relative displacement sensor in each leg is identified and shown in Figure [[fig:flex_joints_trans_study_dvf]].
|
||||
|
||||
It is shown that the axial stiffness of the flexible joints does have a huge impact on the dynamics.
|
||||
|
||||
If the axial stiffness of the flexible joints is $K_a > 10^7\,[N/m]$ (here $100$ times higher than the actuator stiffness), then the change of dynamics stays reasonably small.
|
||||
|
||||
This is more clear by looking at the root locus (Figures [[fig:flex_joints_trans_study_dvf_root_locus]] and [[fig:flex_joints_trans_study_root_locus_unzoom]]).
|
||||
It can be seen that very little active damping can be achieve for rotational joint axial stiffnesses below $10^7\,[N/m]$.
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Name of the Simulink File
|
||||
mdl = 'nass_model';
|
||||
@ -756,25 +769,23 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
|
||||
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Force Sensors
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Gdvf_3dof_s = {zeros(length(Kzs), 1)};
|
||||
G_dvf_3dof_s = {zeros(length(Kzs), 1)};
|
||||
|
||||
for i = 1:length(Kzs)
|
||||
initializeNanoHexapod('k', 1e5, 'c', 2e2, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal_3dof', ...
|
||||
'type_M', 'spherical_3dof', ...
|
||||
'Kz_F', Kzs(i), ...
|
||||
'Kz_M', Kzs(i), ...
|
||||
'Cz_F', 0.2*sqrt(Kzs(i)*10), ...
|
||||
'Cz_M', 0.2*sqrt(Kzs(i)*10));
|
||||
'Cz_F', 0.05*sqrt(Kzs(i)*10), ...
|
||||
'Cz_M', 0.05*sqrt(Kzs(i)*10));
|
||||
|
||||
G = linearize(mdl, io);
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'};
|
||||
|
||||
Gdvf_3dof_s(i) = {G};
|
||||
|
||||
G_dvf_3dof_s(i) = {G};
|
||||
end
|
||||
#+end_src
|
||||
|
||||
@ -786,9 +797,9 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
ax1 = subplot(2, 1, 1);
|
||||
hold on;
|
||||
for i = 1:length(Kzs)
|
||||
plot(freqs, abs(squeeze(freqresp(Gdvf_3dof_s{i}(1, 1), freqs, 'Hz'))));
|
||||
plot(freqs, abs(squeeze(freqresp(G_dvf_3dof_s{i}(1, 1), freqs, 'Hz'))));
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(Gdvf(1, 1), freqs, 'Hz'))), 'k--');
|
||||
plot(freqs, abs(squeeze(freqresp(G_dvf(1, 1), freqs, 'Hz'))), 'k--');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
|
||||
@ -796,23 +807,85 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
ax2 = subplot(2, 1, 2);
|
||||
hold on;
|
||||
for i = 1:length(Kzs)
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gdvf_3dof_s{i}(1, 1), freqs, 'Hz')))), ...
|
||||
'DisplayName', sprintf('$k = %.0g$ [N/m]', Kzs(i)));
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gdvf(1, 1), freqs, 'Hz')))), 'k--', ...
|
||||
'DisplayName', 'Perfect Joint');
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_dvf_3dof_s{i}(1, 1), freqs, 'Hz')))), ...
|
||||
'DisplayName', sprintf('$k = %.0g$ [N/m]', Kzs(i)));
|
||||
end
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_dvf(1, 1), freqs, 'Hz')))), 'k--', ...
|
||||
'DisplayName', 'Perfect Joint');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
|
||||
ylim([-270, 90]);
|
||||
yticks([-360:90:360]);
|
||||
legend('location', 'northeast');
|
||||
legend('location', 'southwest');
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
*** Primary Control
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joints_trans_study_dvf.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joints_trans_study_dvf
|
||||
#+caption: Dynamics from $\tau_i$ to $d\mathcal{L}_i$ for all the considered axis Stiffnesses
|
||||
#+RESULTS:
|
||||
[[file:figs/flex_joints_trans_study_dvf.png]]
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
|
||||
gains = logspace(2, 5, 300);
|
||||
|
||||
hold on;
|
||||
for i = 1:length(Kzs)
|
||||
set(gca,'ColorOrderIndex',i);
|
||||
plot(real(pole(G_dvf_3dof_s{i})), imag(pole(G_dvf_3dof_s{i})), 'x', ...
|
||||
'DisplayName', sprintf('$k = %.0g$ [N/m]', Kzs(i)));
|
||||
set(gca,'ColorOrderIndex',i);
|
||||
plot(real(tzero(G_dvf_3dof_s{i})), imag(tzero(G_dvf_3dof_s{i})), 'o', ...
|
||||
'HandleVisibility', 'off');
|
||||
for k = 1:length(gains)
|
||||
set(gca,'ColorOrderIndex',i);
|
||||
cl_poles = pole(feedback(G_dvf_3dof_s{i}, (gains(k)*s)*eye(6)));
|
||||
plot(real(cl_poles), imag(cl_poles), '.', ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
hold off;
|
||||
axis square;
|
||||
xlim([-140, 10]); ylim([0, 150]);
|
||||
|
||||
xlabel('Real Part'); ylabel('Imaginary Part');
|
||||
legend('location', 'northwest');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joints_trans_study_dvf_root_locus.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joints_trans_study_dvf_root_locus
|
||||
#+caption: Root Locus for all the considered axial Stiffnesses
|
||||
#+RESULTS:
|
||||
[[file:figs/flex_joints_trans_study_dvf_root_locus.png]]
|
||||
|
||||
#+begin_src matlab
|
||||
xlim([-1e3, 0]);
|
||||
ylim([0, 1e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joints_trans_study_root_locus_unzoom.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joints_trans_study_root_locus_unzoom
|
||||
#+caption: Root Locus (unzoom) for all the considered axial Stiffnesses
|
||||
#+RESULTS:
|
||||
[[file:figs/flex_joints_trans_study_root_locus_unzoom.png]]
|
||||
|
||||
*** Primary Control
|
||||
The dynamics from $\bm{\tau}^\prime$ to $\bm{\epsilon}_{\mathcal{X}_n}$ (for the primary controller designed in the frame of the legs) is shown in Figure [[fig:flex_joints_trans_study_primary_plant]].
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kdvf = 5e3*s/(1+s/2/pi/1e3)*eye(6);
|
||||
#+end_src
|
||||
|
||||
@ -826,29 +899,22 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'output', [], 'En'); io_i = io_i + 1; % Position Errror
|
||||
|
||||
load('mat/stages.mat', 'nano_hexapod');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Gx_3dof_s = {zeros(length(Kzs), 1)};
|
||||
Gl_3dof_s = {zeros(length(Kzs), 1)};
|
||||
|
||||
for i = 1:length(Kzs)
|
||||
initializeNanoHexapod('k', 1e5, 'c', 2e2, ...
|
||||
initializeNanoHexapod('k', k_opt, 'c', c_opt, ...
|
||||
'type_F', 'universal_3dof', ...
|
||||
'type_M', 'spherical_3dof', ...
|
||||
'Kz_F', Kzs(i), ...
|
||||
'Kz_M', Kzs(i), ...
|
||||
'Cz_F', 0.2*sqrt(Kzs(i)*10), ...
|
||||
'Cz_M', 0.2*sqrt(Kzs(i)*10));
|
||||
'Cz_F', 0.05*sqrt(Kzs(i)*10), ...
|
||||
'Cz_M', 0.05*sqrt(Kzs(i)*10));
|
||||
|
||||
G = linearize(mdl, io);
|
||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
|
||||
|
||||
Gx_3dof = -G*inv(nano_hexapod.kinematics.J');
|
||||
Gx_3dof.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
|
||||
Gx_3dof_s(i) = {Gx_3dof};
|
||||
|
||||
Gl_3dof = -nano_hexapod.kinematics.J*G;
|
||||
Gl_3dof.OutputName = {'E1', 'E2', 'E3', 'E4', 'E5', 'E6'};
|
||||
Gl_3dof_s(i) = {Gl_3dof};
|
||||
@ -885,7 +951,22 @@ exportFig('figs/flex_joint_trans_dvf.pdf', 'width', 'full', 'height', 'full')
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/flex_joints_trans_study_primary_plant.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:flex_joints_trans_study_primary_plant
|
||||
#+caption: Diagonal elements of the transfer function matrix from $\bm{\tau}^\prime$ to $\bm{\epsilon}_{\mathcal{X}_n}$ for the considered axial stiffnesses
|
||||
#+RESULTS:
|
||||
[[file:figs/flex_joints_trans_study_primary_plant.png]]
|
||||
|
||||
** Conclusion
|
||||
#+begin_important
|
||||
The axial stiffness of the flexible joints should be maximized.
|
||||
|
||||
For the considered actuator stiffness $k = 10^5\,[N/m]$, the axial stiffness of the rotational joints should ideally be above $10^7\,[N/m]$.
|
||||
|
||||
This is a reasonable stiffness value for such joints.
|
||||
|
||||
We may interpolate the results and say that the axial joint stiffness should be 100 times higher than the actuator stiffness, but this should be confirmed with further analysis.
|
||||
#+end_important
|
||||
|