Rework the presentation of results + analysis
BIN
doc/flex_joints.pdf
Normal file
BIN
figs/flexible_joint_fem_geometry.pdf
Normal file
BIN
figs/flexible_joint_fem_geometry.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
figs/nano_hexapod.pdf
Normal file
BIN
figs/nano_hexapod.png
Normal file
After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 286 KiB After Width: | Height: | Size: 185 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 98 KiB |
BIN
figs/test_bench_principle.pdf
Normal file
BIN
figs/test_bench_principle.png
Normal file
After Width: | Height: | Size: 12 KiB |
2447
figs/test_bench_principle.svg
Normal file
After Width: | Height: | Size: 168 KiB |
@ -1,64 +0,0 @@
|
||||
%% Remove first second
|
||||
Ts = t(2)-t(1);
|
||||
t = t(ceil(1/Ts):end);
|
||||
d = d(ceil(1/Ts):end);
|
||||
dp = dp(ceil(1/Ts):end);
|
||||
F = F(ceil(1/Ts):end);
|
||||
|
||||
t = t - t(1);
|
||||
F = F - F(1);
|
||||
|
||||
%% LPf
|
||||
s = tf('s');
|
||||
G_lpf = 1/(1+s/2/pi/10);
|
||||
F = lsim(G_lpf, F, t);
|
||||
d = lsim(G_lpf, d, t);
|
||||
dp = lsim(G_lpf, dp, t);
|
||||
|
||||
%%
|
||||
figure;
|
||||
plot(t, F);
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(t, d, 'DisplayName', 'Encoder');
|
||||
plot(t, dp, 'DisplayName', 'Mahr')
|
||||
hold off;
|
||||
legend;
|
||||
|
||||
%%
|
||||
t_start = 0.05;
|
||||
t_end = 0.12;
|
||||
d = d(t < t_end & t > t_start);
|
||||
dp = dp(t < t_end & t > t_start);
|
||||
F = F(t < t_end & t > t_start);
|
||||
|
||||
d = d - d(1);
|
||||
dp = dp - dp(1);
|
||||
F = F - F(1);
|
||||
|
||||
%%
|
||||
figure;
|
||||
plot(F, dp);
|
||||
xlabel('Measured Force [N]');
|
||||
ylabel('Measured Displacement [m]');
|
||||
|
||||
%%
|
||||
sprintf('Stiffness is %.3f [N/mm]', abs(1e-3*(d\F)))
|
||||
|
||||
%%
|
||||
figure;
|
||||
hold on;
|
||||
plot(F, d);
|
||||
plot(F, F/(d\F));
|
||||
hold off;
|
||||
xlabel('Measured Force [N]');
|
||||
ylabel('Measured Displacement [m]');
|
||||
|
||||
%%
|
||||
figure;
|
||||
hold on;
|
||||
plot(dp, d);
|
||||
hold off;
|
||||
xlabel('Probe [m]');
|
||||
ylabel('Encoder [m]');
|
53
matlab/bench_dimensioning.m
Normal file
@ -0,0 +1,53 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
% Flexible joint Geometry
|
||||
% The flexible joint used for the Nano-Hexapod is shown in Figure [[fig:flexible_joint_geometry]].
|
||||
% Its bending stiffness is foreseen to be $k_{R_y}\approx 5\,\frac{Nm}{rad}$ and its stroke $\theta_{y,\text{max}}\approx 25\,mrad$.
|
||||
|
||||
% #+name: fig:flexible_joint_geometry
|
||||
% #+caption: Geometry of the flexible joint
|
||||
% [[file:figs/flexible_joint_geometry.png]]
|
||||
|
||||
% The height between the flexible point (center of the joint) and the point where external forces are applied is $h = 20\,mm$.
|
||||
|
||||
% Let's define the parameters on Matlab.
|
||||
|
||||
kRx = 5; % Bending Stiffness [Nm/rad]
|
||||
Rxmax = 25e-3; % Bending Stroke [rad]
|
||||
h = 20e-3; % Height [m]
|
||||
|
||||
% Required external applied force
|
||||
|
||||
% The bending $\theta_y$ of the flexible joint due to the force $F_x$ is:
|
||||
% \begin{equation}
|
||||
% \theta_y = \frac{M_y}{k_{R_y}} = \frac{F_x h}{k_{R_y}}
|
||||
% \end{equation}
|
||||
|
||||
% Therefore, the applied force to test the full range of the flexible joint is:
|
||||
% \begin{equation}
|
||||
% F_{x,\text{max}} = \frac{k_{R_y} \theta_{y,\text{max}}}{h}
|
||||
% \end{equation}
|
||||
|
||||
|
||||
Fxmax = kRx*Rxmax/h; % Force to induce maximum stroke [N]
|
||||
|
||||
|
||||
|
||||
% And we obtain:
|
||||
|
||||
sprintf('\\begin{equation} F_{x,max} = %.1f\\, [N] \\end{equation}', Fxmax)
|
||||
|
||||
% Required actuator stroke and sensors range
|
||||
|
||||
% The flexible joint is designed to allow a bending motion of $\pm 25\,mrad$.
|
||||
% The corresponding stroke at the location of the force sensor is:
|
||||
% \[ d_{x,\text{max}} = h \tan(R_{x,\text{max}}) \]
|
||||
|
||||
|
||||
dxmax = h*tan(Rxmax);
|
||||
|
||||
sprintf('\\begin{equation} d_{max} = %.1f\\, [mm] \\end{equation}', 1e3*dxmax)
|
67
matlab/error_budget.m
Normal file
@ -0,0 +1,67 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
% Finite Element Model
|
||||
% From the Finite Element Model, the stiffness and stroke of the flexible joint have been computed and summarized in Tables [[tab:axial_shear_characteristics]] and [[tab:bending_torsion_characteristics]].
|
||||
|
||||
|
||||
%% Stiffness
|
||||
ka = 94e6; % Axial Stiffness [N/m]
|
||||
ks = 13e6; % Shear Stiffness [N/m]
|
||||
kb = 5; % Bending Stiffness [Nm/rad]
|
||||
kt = 260; % Torsional Stiffness [Nm/rad]
|
||||
|
||||
%% Maximum force
|
||||
Fa = 469; % Axial Force before yield [N]
|
||||
Fs = 242; % Shear Force before yield [N]
|
||||
Fb = 0.118; % Bending Force before yield [Nm]
|
||||
Ft = 1.508; % Torsional Force before yield [Nm]
|
||||
|
||||
%% Compute the corresponding stroke
|
||||
Xa = Fa/ka; % Axial Stroke before yield [m]
|
||||
Xs = Fs/ks; % Shear Stroke before yield [m]
|
||||
Xb = Fb/kb; % Bending Stroke before yield [rad]
|
||||
Xt = Ft/kt; % Torsional Stroke before yield [rad]
|
||||
|
||||
% Setup
|
||||
|
||||
% The setup is schematically represented in Figure [[fig:test_bench_flex_side_bis]].
|
||||
|
||||
% The force is applied on top of the flexible joint with a distance $h$ with the joint's center.
|
||||
% The displacement of the flexible joint is also measured at the same height.
|
||||
|
||||
% The height between the joint's center and the force application point is:
|
||||
|
||||
h = 25e-3; % Height [m]
|
||||
|
||||
% Estimation error due to force sensor compression
|
||||
% The measured displacement is not done directly at the joint's location.
|
||||
% The force sensor compression will then induce an error on the joint's stiffness.
|
||||
|
||||
% The force sensor stiffness $k_F$ is estimated to be around:
|
||||
|
||||
kF = 50/0.05e-3; % [N/m]
|
||||
|
||||
sprintf('k_F = %.1e [N/m]', kF)
|
||||
|
||||
% Estimation error due to height estimation error
|
||||
% Let's consider an error in the estimation of the height from the application of the force to the joint's center:
|
||||
% \begin{equation}
|
||||
% h_{\text{est}} = h (1 + \epsilon)
|
||||
% \end{equation}
|
||||
|
||||
% The computed bending stiffness will be:
|
||||
% \begin{equation}
|
||||
% k_\text{est} \approx h_{\text{est}}^2 \frac{F_x}{d_x}
|
||||
% \end{equation}
|
||||
|
||||
% And the stiffness estimation error is:
|
||||
% \begin{equation}
|
||||
% \frac{k_{\text{est}}}{k_{R_y}} = (1 + \epsilon)^2
|
||||
% \end{equation}
|
||||
|
||||
|
||||
h_err = 0.2e-3; % Height estimation error [m]
|
62
matlab/probe_stiffness.m
Normal file
@ -0,0 +1,62 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
addpath('./mat/');
|
||||
|
||||
% Results :ignore:
|
||||
% Let's load the measurement results.
|
||||
|
||||
load('meas_stiff_probe.mat', 't', 'd', 'dp', 'F')
|
||||
|
||||
%% Sampling time [s]
|
||||
Ts = (t(end) - t(1))/(length(t)-1);
|
||||
|
||||
%% Remove first second
|
||||
t = t(ceil(1/Ts):end);
|
||||
d = d(ceil(1/Ts):end);
|
||||
dp = dp(ceil(1/Ts):end);
|
||||
F = F(ceil(1/Ts):end);
|
||||
|
||||
|
||||
%% Remove Offset
|
||||
t = t - t(1);
|
||||
F = F - mean(F(1:ceil(1/Ts)));
|
||||
|
||||
|
||||
|
||||
% The time domain measured force and displacement are shown in Figure [[fig:mahr_time_domain]].
|
||||
|
||||
|
||||
%% Time Domain plots
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
plot(t, F);
|
||||
ylabel('Force [N]'); set(gca, 'XTickLabel',[]);
|
||||
|
||||
ax2 = nexttile;
|
||||
plot(t, d);
|
||||
xlabel('Time [s]'); ylabel('Displacement [m]');
|
||||
|
||||
|
||||
|
||||
% #+RESULTS:
|
||||
% : Stiffness is 0.039 [N/mm]
|
||||
|
||||
% This is very close to the 0.04 [N/mm] written in the [[file:doc/tmp3m0cvmue_7888038c-cdc8-48d8-a837-35de02760685.pdf][Millimar 1318 probe datasheet]].
|
||||
|
||||
% And compare the linear fit with the raw measurement data (Figure [[fig:mahr_stiffness_f_d_plot]]).
|
||||
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(F, d, 'DisplayName', 'Raw data');
|
||||
plot(F, F/(d\F), 'DisplayName', 'Linear fit');
|
||||
hold off;
|
||||
xlabel('Measured Force [N]');
|
||||
ylabel('Measured Displacement [m]');
|
||||
legend('location', 'southeast');
|
86
matlab/probe_vs_encoder.m
Normal file
@ -0,0 +1,86 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
addpath('./mat/');
|
||||
|
||||
% Results :ignore:
|
||||
% Let's load the measurements.
|
||||
|
||||
load('meas_probe_against_encoder.mat', 't', 'd', 'dp', 'F')
|
||||
|
||||
%% Sampling time [s]
|
||||
Ts = (t(end) - t(1))/(length(t)-1);
|
||||
|
||||
%% Remove first second
|
||||
t = t(ceil(1/Ts):end);
|
||||
d = -d(ceil(1/Ts):end);
|
||||
dp = -dp(ceil(1/Ts):end);
|
||||
F = F(ceil(1/Ts):end);
|
||||
|
||||
|
||||
|
||||
% The time domain measured displacement by the probe and by the encoder is shown in Figure [[fig:comp_encoder_probe_time]].
|
||||
|
||||
|
||||
%% Time Domain plots
|
||||
figure;
|
||||
hold on;
|
||||
plot(t, d, 'DisplayName', 'Encoder');
|
||||
plot(t, dp, 'DisplayName', 'Probe');
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Displacement [m]');
|
||||
|
||||
|
||||
|
||||
% #+name: fig:comp_encoder_probe_time
|
||||
% #+caption: Time domain measurement
|
||||
% #+RESULTS:
|
||||
% [[file:figs/comp_encoder_probe_time.png]]
|
||||
|
||||
% If we zoom, we see that there is some delay between the encoder and the probe (Figure [[fig:comp_encoder_probe_time_zoom]]).
|
||||
|
||||
|
||||
%% Zoom
|
||||
figure;
|
||||
hold on;
|
||||
plot(t, d, 'DisplayName', 'Encoder');
|
||||
plot(t, dp, 'DisplayName', 'Probe');
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Displacement [m]');
|
||||
xlim([7.7, 7.9])
|
||||
|
||||
|
||||
|
||||
% #+RESULTS:
|
||||
% : The time delay is approximately 15.8 [ms]
|
||||
|
||||
% The measured mismatch between the encoder and the probe with and without compensating for the time delay are shown in Figure [[fig:comp_encoder_probe_mismatch]].
|
||||
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(t, d-dp, 'DisplayName', 'Raw Mismatch');
|
||||
plot(t(1:end-finddelay(d, dp)), d(1:end-finddelay(d, dp))-dp(finddelay(d, dp)+1:end), 'DisplayName', 'Removed Delay');
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Measurement Missmatch [m]');
|
||||
|
||||
|
||||
|
||||
% #+name: fig:comp_encoder_probe_mismatch
|
||||
% #+caption: Measurement mismatch, with and without delay compensation
|
||||
% #+RESULTS:
|
||||
% [[file:figs/comp_encoder_probe_mismatch.png]]
|
||||
|
||||
% Finally, the displacement of the probe is shown as a function of the displacement of the encoder and a linear fit is made (Figure [[fig:comp_encoder_probe_linear_fit]]).
|
||||
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e3*d, 1e3*dp, 'DisplayName', 'Raw data');
|
||||
plot(1e3*d, 1e3*d*(d\dp), 'DisplayName', sprintf('Linear fit: $\\alpha = %.5f$', (d\dp)));
|
||||
hold on;
|
||||
xlabel('Encoder [mm]'); ylabel('Probe [mm]');
|
||||
legend('location', 'southeast')
|
@ -3,9 +3,9 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2021-02-16 mar. 21:23 -->
|
||||
<!-- 2021-02-18 jeu. 11:33 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Flexible Joint - Test Bench</title>
|
||||
<title>Flexible Joints - Test Bench</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
@ -34,33 +34,40 @@
|
||||
|
|
||||
<a accesskey="H" href="../index.html"> HOME </a>
|
||||
</div><div id="content">
|
||||
<h1 class="title">Flexible Joint - Test Bench</h1>
|
||||
<h1 class="title">Flexible Joints - Test Bench</h1>
|
||||
<div id="table-of-contents">
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org7706130">1. Flexible Joints - Requirements</a></li>
|
||||
<li><a href="#org2925cfa">2. Test Bench Description</a>
|
||||
<li><a href="#org8b281d9">1. Flexible Joints</a></li>
|
||||
<li><a href="#org95f31e9">2. Measurement Test Bench - Bending Stiffness</a>
|
||||
<ul>
|
||||
<li><a href="#org1121b59">2.1. Flexible joint Geometry</a></li>
|
||||
<li><a href="#org8e5eddc">2.2. Required external applied force</a></li>
|
||||
<li><a href="#org5baf14d">2.3. Required actuator stroke and sensors range</a></li>
|
||||
<li><a href="#orge82143e">2.4. First try with the APA95ML</a></li>
|
||||
<li><a href="#orgfd806d9">2.5. Test Bench</a></li>
|
||||
<li><a href="#org49aa26d">2.1. Flexible joint Geometry</a></li>
|
||||
<li><a href="#org6176a07">2.2. Required external applied force</a></li>
|
||||
<li><a href="#orgd96e919">2.3. Required actuator stroke and sensors range</a></li>
|
||||
<li><a href="#org34c590e">2.4. Test Bench</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org169b47f">3. Agreement between the probe and the encoder</a>
|
||||
<li><a href="#org600c97d">3. Error budget</a>
|
||||
<ul>
|
||||
<li><a href="#org5ed49b7">3.1. Setup</a></li>
|
||||
<li><a href="#orga83f29f">3.2. Results</a></li>
|
||||
<li><a href="#orgc9ee1f1">3.1. Finite Element Model</a></li>
|
||||
<li><a href="#orga7f4716">3.2. Setup</a></li>
|
||||
<li><a href="#org82790b3">3.3. Effect of Bending</a></li>
|
||||
<li><a href="#org36529f3">3.4. Computation of the bending stiffness</a></li>
|
||||
<li><a href="#org8b414e4">3.5. Estimation error due to force and displacement sensors accuracy</a></li>
|
||||
<li><a href="#org1ab0479">3.6. Estimation error due to Shear</a></li>
|
||||
<li><a href="#org6765aeb">3.7. Estimation error due to force sensor compression</a></li>
|
||||
<li><a href="#orgdc33e2c">3.8. Estimation error due to height estimation error</a></li>
|
||||
<li><a href="#orgbff0a4b">3.9. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org0fbb329">4. Measurement of the Millimar 1318 probe stiffness</a>
|
||||
<li><a href="#orge6a23d4">4. First Measurements</a>
|
||||
<ul>
|
||||
<li><a href="#orgc7d7173">4.1. Results</a></li>
|
||||
<li><a href="#orgf3173a7">4.1. Agreement between the probe and the encoder</a></li>
|
||||
<li><a href="#org47cc77a">4.2. Measurement of the Millimar 1318 probe stiffness</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgda9e689">5. Experimental measurement</a></li>
|
||||
<li><a href="#org48987bc">5. Bending Stiffness Measurement</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@ -68,95 +75,186 @@
|
||||
<p>This report is also available as a <a href="./test-bench-flexible-joints.pdf">pdf</a>.</p>
|
||||
<hr>
|
||||
|
||||
<div id="outline-container-org7706130" class="outline-2">
|
||||
<h2 id="org7706130"><span class="section-number-2">1</span> Flexible Joints - Requirements</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<p>
|
||||
In this document, we present a test-bench that has been developed in order to measure the bending stiffness of flexible joints.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
It is structured as follow:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Section <a href="#org1f36cf1">1</a>: the geometry of the flexible joints and the expected stiffness and stroke are presented</li>
|
||||
<li>Section <a href="#org487b515">2</a>: the measurement bench is presented</li>
|
||||
<li>Section <a href="#orgdab23b9">3</a>: an error budget is performed in order to estimate the accuracy of the measured stiffness</li>
|
||||
<li>Section <a href="#org60b7659">4</a>: first measurements are performed</li>
|
||||
<li>Section <a href="#org34f6444">5</a>: the bending stiffness of the flexible joints are measured</li>
|
||||
</ul>
|
||||
|
||||
<div id="outline-container-org8b281d9" class="outline-2">
|
||||
<h2 id="org8b281d9"><span class="section-number-2">1</span> Flexible Joints</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
<a id="org1f36cf1"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The flexible joints that are going to be measured in this document have been design to be used with a Nano-Hexapod (Figure <a href="#orgd244b13">1</a>).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgd244b13" class="figure">
|
||||
<p><img src="figs/nano_hexapod.png" alt="nano_hexapod.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>CAD view of the Nano-Hexapod containing the flexible joints</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Ideally, these flexible joints would behave as perfect ball joints, that is to say:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>no bending and torsional stiffnesses</li>
|
||||
<li>infinite shear and axial stiffnesses</li>
|
||||
<li>un-limited bending and torsional stroke</li>
|
||||
<li>no friction, no backlash</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>
|
||||
The real characteristics of the flexible joints will influence the dynamics of the Nano-Hexapod.
|
||||
Using a multi-body dynamical model of the nano-hexapod, the specifications in term of stiffness and stroke of the flexible joints have been determined and summarized in Table <a href="#org42febf6">1</a>.
|
||||
</p>
|
||||
|
||||
<table id="org42febf6" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 1:</span> Specifications for the flexible joints and estimated characteristics from the Finite Element Model</caption>
|
||||
|
||||
<colgroup>
|
||||
<col class="org-left" />
|
||||
|
||||
<col class="org-left" />
|
||||
|
||||
<col class="org-right" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="org-left"> </th>
|
||||
<th scope="col" class="org-left"><b>Specification</b></th>
|
||||
<th scope="col" class="org-right"><b>FEM</b></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="org-left">Axial Stiffness</td>
|
||||
<td class="org-left">> 200 [N/um]</td>
|
||||
<td class="org-left">> 100 [N/um]</td>
|
||||
<td class="org-right">94</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-left">Shear Stiffness</td>
|
||||
<td class="org-left">> 1 [N/um]</td>
|
||||
<td class="org-right">13</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-left">Bending Stiffness</td>
|
||||
<td class="org-left">< 100 [Nm/rad]</td>
|
||||
<td class="org-right">5</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-left">Torsion Stiffness</td>
|
||||
<td class="org-left">< 500 [Nm/rad]</td>
|
||||
<td class="org-right">260</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-left">Bending Stroke</td>
|
||||
<td class="org-left">> 1 [mrad]</td>
|
||||
<td class="org-right">24.5</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-left">Torsion Stroke</td>
|
||||
<td class="org-left">> 5 [urad]</td>
|
||||
<td class="org-right"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
Then, the classical geometry of a flexible ball joint shown in Figure <a href="#org904f6bf">2</a> has been optimized in order to meet the requirements.
|
||||
This has been done using a Finite Element Software and the obtained joint’s characteristics are summarized in Table <a href="#org42febf6">1</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org904f6bf" class="figure">
|
||||
<p><img src="figs/flexible_joint_fem_geometry.png" alt="flexible_joint_fem_geometry.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Flexible part of the Joint used for FEM - CAD view</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The obtained geometry are defined in the <a href="doc/flex_joints.pdf">drawings of the flexible joints</a>.
|
||||
The material is a special kind of stainless steel called “F16PH”..
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2925cfa" class="outline-2">
|
||||
<h2 id="org2925cfa"><span class="section-number-2">2</span> Test Bench Description</h2>
|
||||
<div id="outline-container-org95f31e9" class="outline-2">
|
||||
<h2 id="org95f31e9"><span class="section-number-2">2</span> Measurement Test Bench - Bending Stiffness</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
The main characteristic of the flexible joint that we want to measure is its bending stiffness \(k_{R_x} \approx k_{R_y}\).
|
||||
<a id="org487b515"></a>
|
||||
</p>
|
||||
<p>
|
||||
The most important characteristic of the flexible joint that we want to measure is its bending stiffness \(k_{R_x} \approx k_{R_y}\).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To do so, a test bench is used.
|
||||
Specifications of the test bench to precisely measure the bending stiffness are described in this section.
|
||||
To do so, we have to apply a torque \(T_x\) on the flexible joint and measure its angular deflection \(\theta_x\).
|
||||
The stiffness is then
|
||||
</p>
|
||||
\begin{equation}
|
||||
k_{R_x} = \frac{T_x}{\theta_x}
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
As it is quite difficult to apply a pure torque, a force will be applied instead.
|
||||
The application point of the force should far enough from the flexible part such that the obtained bending is much larger than the displacement in shear.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The basic idea is to measured the angular deflection of the flexible joint as a function of the applied torque.
|
||||
The working principle of the bench is schematically shown in Figure <a href="#org5e03b2d">3</a>.
|
||||
One part of the flexible joint is fixed. On the mobile part, a force \(F_x\) is applied which is equivalent to a torque applied on the flexible joint center.
|
||||
The induced rotation is measured with a displacement sensor \(d_x\).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org5c42ee1" class="figure">
|
||||
<p><img src="figs/test-bench-schematic.png" alt="test-bench-schematic.png" />
|
||||
<div id="org5e03b2d" class="figure">
|
||||
<p><img src="figs/test_bench_principle.png" alt="test_bench_principle.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Schematic of the test bench to measure the bending stiffness of the flexible joints</p>
|
||||
</div>
|
||||
<p><span class="figure-number">Figure 3: </span>Test Bench - working principle</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1121b59" class="outline-3">
|
||||
<h3 id="org1121b59"><span class="section-number-3">2.1</span> Flexible joint Geometry</h3>
|
||||
|
||||
<p>
|
||||
This test-bench will be used to have a first approximation of the bending stiffnesss and stroke of the flexible joints.
|
||||
Another test-bench, better engineered will be used to measure the flexible joint’s characteristics with better accuracy.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org49aa26d" class="outline-3">
|
||||
<h3 id="org49aa26d"><span class="section-number-3">2.1</span> Flexible joint Geometry</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
The flexible joint used for the Nano-Hexapod is shown in Figure <a href="#org4639f1b">2</a>.
|
||||
Its bending stiffness is foreseen to be \(k_{R_y}\approx 20\,\frac{Nm}{rad}\) and its stroke \(\theta_{y,\text{max}}\approx 20\,mrad\).
|
||||
The flexible joint used for the Nano-Hexapod is shown in Figure <a href="#org8f874a3">4</a>.
|
||||
Its bending stiffness is foreseen to be \(k_{R_y}\approx 5\,\frac{Nm}{rad}\) and its stroke \(\theta_{y,\text{max}}\approx 25\,mrad\).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org4639f1b" class="figure">
|
||||
<div id="org8f874a3" class="figure">
|
||||
<p><img src="figs/flexible_joint_geometry.png" alt="flexible_joint_geometry.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Geometry of the flexible joint</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Geometry of the flexible joint</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
@ -167,16 +265,16 @@ The height between the flexible point (center of the joint) and the point where
|
||||
Let’s define the parameters on Matlab.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> kRx = 20; <span class="org-comment">% Bending Stiffness [Nm/rad]</span>
|
||||
Rxmax = 20e<span class="org-type">-</span>3; <span class="org-comment">% Bending Stroke [rad]</span>
|
||||
<pre class="src src-matlab">kRx = 5; <span class="org-comment">% Bending Stiffness [Nm/rad]</span>
|
||||
Rxmax = 25e<span class="org-type">-</span>3; <span class="org-comment">% Bending Stroke [rad]</span>
|
||||
h = 20e<span class="org-type">-</span>3; <span class="org-comment">% Height [m]</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8e5eddc" class="outline-3">
|
||||
<h3 id="org8e5eddc"><span class="section-number-3">2.2</span> Required external applied force</h3>
|
||||
<div id="outline-container-org6176a07" class="outline-3">
|
||||
<h3 id="org6176a07"><span class="section-number-3">2.2</span> Required external applied force</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<p>
|
||||
The bending \(\theta_y\) of the flexible joint due to the force \(F_x\) is:
|
||||
@ -200,23 +298,20 @@ Therefore, the applied force to test the full range of the flexible joint is:
|
||||
<p>
|
||||
And we obtain:
|
||||
</p>
|
||||
\begin{equation} F_{max} = 20.0\, [N] \end{equation}
|
||||
\begin{equation} F_{x,max} = 6.2\, [N] \end{equation}
|
||||
|
||||
<p>
|
||||
The measurement range of the force sensor should then be higher than \(20\,N\).
|
||||
The measurement range of the force sensor should then be higher than \(6.2\,N\).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5baf14d" class="outline-3">
|
||||
<h3 id="org5baf14d"><span class="section-number-3">2.3</span> Required actuator stroke and sensors range</h3>
|
||||
<div id="outline-container-orgd96e919" class="outline-3">
|
||||
<h3 id="orgd96e919"><span class="section-number-3">2.3</span> Required actuator stroke and sensors range</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<p>
|
||||
The flexible joint is designed to allow a bending motion of \(\pm 20\,mrad\).
|
||||
The corresponding actuator stroke to impose such motion is:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The flexible joint is designed to allow a bending motion of \(\pm 25\,mrad\).
|
||||
The corresponding stroke at the location of the force sensor is:
|
||||
\[ d_{x,\text{max}} = h \tan(R_{x,\text{max}}) \]
|
||||
</p>
|
||||
|
||||
@ -225,122 +320,436 @@ The corresponding actuator stroke to impose such motion is:
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
\begin{equation} d_{max} = 0.4\, [mm] \end{equation}
|
||||
\begin{equation} d_{max} = 0.5\, [mm] \end{equation}
|
||||
|
||||
<p>
|
||||
In order to test the full range of the flexible joint, the stroke of the actuator should be higher than \(0.4\,mm\).
|
||||
The measurement range of the displacement sensor should also be higher than \(0.4\,mm\).
|
||||
In order to test the full range of the flexible joint, the stroke of the translation stage used to move the force sensor should be higher than \(0.5\,mm\).
|
||||
Similarly, the measurement range of the displacement sensor should also be higher than \(0.5\,mm\).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge82143e" class="outline-3">
|
||||
<h3 id="orge82143e"><span class="section-number-3">2.4</span> First try with the APA95ML</h3>
|
||||
<div id="outline-container-org34c590e" class="outline-3">
|
||||
<h3 id="org34c590e"><span class="section-number-3">2.4</span> Test Bench</h3>
|
||||
<div class="outline-text-3" id="text-2-4">
|
||||
<p>
|
||||
The APA95ML as a stroke of \(100\,\mu m\) and the encoder in parallel can easily measure the required stroke.
|
||||
A CAD view of the measurement bench is shown in Figure <a href="#org8ec9f08">5</a>.
|
||||
</p>
|
||||
|
||||
<div class="note" id="org8dbefd9">
|
||||
<p>
|
||||
Suppose the full stroke of the APA can be used to bend the flexible joint (ideal case), the measured force will be:
|
||||
Here are the different elements used in this bench:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> Fxmax = kRx<span class="org-type">*</span>100e<span class="org-type">-</span>6<span class="org-type">/</span>h<span class="org-type">^</span>2; <span class="org-comment">% Force at maximum stroke [N]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
\begin{equation} F_{max} = 5.0\, [N] \end{equation}
|
||||
|
||||
<p>
|
||||
And the tested angular range is:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> Rmax = tan(100e<span class="org-type">-</span>6<span class="org-type">/</span>h);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
\begin{equation} \theta_{max} = 5.0\, [mrad] \end{equation}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgfd806d9" class="outline-3">
|
||||
<h3 id="orgfd806d9"><span class="section-number-3">2.5</span> Test Bench</h3>
|
||||
<div class="outline-text-3" id="text-2-5">
|
||||
|
||||
<div id="org0957ecc" class="figure">
|
||||
<p><img src="figs/test_bench_flex_overview.png" alt="test_bench_flex_overview.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Schematic of the test bench to measure the bending stiffness of the flexible joints</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="org5b8e491" class="figure">
|
||||
<p><img src="figs/test_bench_flex_side.png" alt="test_bench_flex_side.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Schematic of the test bench to measure the bending stiffness of the flexible joints</p>
|
||||
</div>
|
||||
|
||||
<div class="note" id="org96d3620">
|
||||
<ul class="org-ul">
|
||||
<li><b>Translation Stage</b>: <a href="doc/V-408-Datasheet.pdf">V-408</a></li>
|
||||
<li><b>Load Cells</b>: <a href="doc/A700000007147087.pdf">FC2231-0000-0010-L</a> and <a href="doc/FRE_DS_XFL212R_FR_A3.pdf">XFL212R</a></li>
|
||||
<li><b>Load Cells</b>: <a href="doc/A700000007147087.pdf">FC2231-0000-0010-L</a></li>
|
||||
<li><b>Encoder</b>: <a href="doc/L-9517-9448-05-B_Data_sheet_RESOLUTE_BiSS_en.pdf">Renishaw Resolute 1nm</a></li>
|
||||
<li><b>Displacement Probe</b>: <a href="doc/Millimar--3723046--BA--C1208-C1216-C1240--FR--2016-11-08.pdf">Millimar C1216 electronics</a> and <a href="doc/tmp3m0cvmue_7888038c-cdc8-48d8-a837-35de02760685.pdf">Millimar 1318 probe</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Both the measured force and displacement are acquired at the same time using a Speedgoat machine.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org8ec9f08" class="figure">
|
||||
<p><img src="figs/test_bench_flex_overview.png" alt="test_bench_flex_overview.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Schematic of the test bench to measure the bending stiffness of the flexible joints</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
A side view of the bench with the important quantities are shown in Figure <a href="#orge104838">6</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orge104838" class="figure">
|
||||
<p><img src="figs/test_bench_flex_side.png" alt="test_bench_flex_side.png" width="300px" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Schematic of the test bench to measure the bending stiffness of the flexible joints</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org169b47f" class="outline-2">
|
||||
<h2 id="org169b47f"><span class="section-number-2">3</span> Agreement between the probe and the encoder</h2>
|
||||
<div id="outline-container-org600c97d" class="outline-2">
|
||||
<h2 id="org600c97d"><span class="section-number-2">3</span> Error budget</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
<a id="orgdab23b9"></a>
|
||||
</p>
|
||||
<p>
|
||||
Many things can impact the accuracy of the measured bending stiffness such as:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Errors in the force and displacement measurement</li>
|
||||
<li>Shear effects</li>
|
||||
<li>Deflection of the Force sensor</li>
|
||||
<li>Errors in the geometry of the bench</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
In this section, we wish to estimate the attainable accuracy with the current bench, and identified the limiting factors.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-org5ed49b7" class="outline-3">
|
||||
<h3 id="org5ed49b7"><span class="section-number-3">3.1</span> Setup</h3>
|
||||
<div id="outline-container-orgc9ee1f1" class="outline-3">
|
||||
<h3 id="orgc9ee1f1"><span class="section-number-3">3.1</span> Finite Element Model</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
From the Finite Element Model, the stiffness and stroke of the flexible joint have been computed and summarized in Tables <a href="#org6032011">2</a> and <a href="#org949868f">3</a>.
|
||||
</p>
|
||||
|
||||
<table id="org6032011" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 2:</span> Axial/Shear characteristics</caption>
|
||||
|
||||
<colgroup>
|
||||
<col class="org-left" />
|
||||
|
||||
<col class="org-right" />
|
||||
|
||||
<col class="org-right" />
|
||||
|
||||
<col class="org-right" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="org-left"> </th>
|
||||
<th scope="col" class="org-right">Stiffness [N/um]</th>
|
||||
<th scope="col" class="org-right">Max Force [N]</th>
|
||||
<th scope="col" class="org-right">Stroke [um]</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="org-left">Axial</td>
|
||||
<td class="org-right">94</td>
|
||||
<td class="org-right">469</td>
|
||||
<td class="org-right">5</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-left">Shear</td>
|
||||
<td class="org-right">13</td>
|
||||
<td class="org-right">242</td>
|
||||
<td class="org-right">19</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table id="org949868f" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
<caption class="t-above"><span class="table-number">Table 3:</span> Bending/Torsion characteristics</caption>
|
||||
|
||||
<colgroup>
|
||||
<col class="org-left" />
|
||||
|
||||
<col class="org-right" />
|
||||
|
||||
<col class="org-right" />
|
||||
|
||||
<col class="org-right" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="org-left"> </th>
|
||||
<th scope="col" class="org-right">Stiffness [Nm/rad]</th>
|
||||
<th scope="col" class="org-right">Max Torque [Nmm]</th>
|
||||
<th scope="col" class="org-right">Stroke [mrad]</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="org-left">Bending</td>
|
||||
<td class="org-right">5</td>
|
||||
<td class="org-right">118</td>
|
||||
<td class="org-right">24</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-left">Torsional</td>
|
||||
<td class="org-right">260</td>
|
||||
<td class="org-right">1508</td>
|
||||
<td class="org-right">6</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga7f4716" class="outline-3">
|
||||
<h3 id="orga7f4716"><span class="section-number-3">3.2</span> Setup</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<p>
|
||||
The setup is schematically represented in Figure <a href="#org9f57086">7</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The force is applied on top of the flexible joint with a distance \(h\) with the joint’s center.
|
||||
The displacement of the flexible joint is also measured at the same height.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The height between the joint’s center and the force application point is:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">h = 25e<span class="org-type">-</span>3; <span class="org-comment">% Height [m]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org9f57086" class="figure">
|
||||
<p><img src="figs/test_bench_flex_side.png" alt="test_bench_flex_side.png" width="300px" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Schematic of the test bench to measure the bending stiffness of the flexible joints</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org82790b3" class="outline-3">
|
||||
<h3 id="org82790b3"><span class="section-number-3">3.3</span> Effect of Bending</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<p>
|
||||
The torque applied is:
|
||||
</p>
|
||||
\begin{equation}
|
||||
M_y = F_x \cdot h
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
The flexible joint is experiencing a rotation \(\theta_y\) due to the torque \(M_y\):
|
||||
</p>
|
||||
\begin{equation}
|
||||
\theta_y = \frac{M_y}{k_{R_y}} = \frac{F_x \cdot h}{k_{R_y}}
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
This rotation is then measured by the displacement sensor.
|
||||
The measured displacement is:
|
||||
</p>
|
||||
\begin{equation}
|
||||
D_b = h \tan(\theta_y) = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right) \label{eq:bending_stiffness_formula}
|
||||
\end{equation}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org36529f3" class="outline-3">
|
||||
<h3 id="org36529f3"><span class="section-number-3">3.4</span> Computation of the bending stiffness</h3>
|
||||
<div class="outline-text-3" id="text-3-4">
|
||||
<p>
|
||||
From equation \eqref{eq:bending_stiffness_formula}, we can compute the bending stiffness:
|
||||
</p>
|
||||
\begin{equation}
|
||||
k_{R_y} = \frac{F_x \cdot h}{\tan^{-1}\left( \frac{D_b}{h} \right)}
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
For small displacement, we have
|
||||
</p>
|
||||
\begin{equation}
|
||||
\boxed{k_{R_y} \approx h^2 \frac{F_x}{d_x}}
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
And therefore, to precisely measure \(k_{R_y}\), we need to:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>precisely measure the motion \(d_x\)</li>
|
||||
<li>precisely measure the applied force \(F_x\)</li>
|
||||
<li>precisely now the height of the force application point \(h\)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8b414e4" class="outline-3">
|
||||
<h3 id="org8b414e4"><span class="section-number-3">3.5</span> Estimation error due to force and displacement sensors accuracy</h3>
|
||||
<div class="outline-text-3" id="text-3-5">
|
||||
<p>
|
||||
The maximum error on the measured displacement with the encoder is 40 nm.
|
||||
This quite negligible compared to the measurement range of 0.5 mm.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The accuracy of the force sensor is around 1% and therefore, we should expect to have an accuracy on the measured stiffness of at most 1%.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1ab0479" class="outline-3">
|
||||
<h3 id="org1ab0479"><span class="section-number-3">3.6</span> Estimation error due to Shear</h3>
|
||||
<div class="outline-text-3" id="text-3-6">
|
||||
<p>
|
||||
The effect of Shear on the measured displacement is simply:
|
||||
</p>
|
||||
\begin{equation}
|
||||
D_s = \frac{F_x}{k_s}
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
The measured displacement will be the effect of shear + effect of bending
|
||||
</p>
|
||||
\begin{equation}
|
||||
d_x = D_b + D_s = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right) + \frac{F_x}{k_s} \approx F_x \left( \frac{h^2}{k_{R_y}} + \frac{1}{k_s} \right)
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
The estimated bending stiffness \(k_{\text{est}}\) will then be:
|
||||
</p>
|
||||
\begin{equation}
|
||||
k_{\text{est}} = h^2 \frac{F_x}{d_x} \approx k_{R_y} \frac{1}{1 + \frac{k_{R_y}}{k_s h^2}}
|
||||
\end{equation}
|
||||
|
||||
<pre class="example">
|
||||
The measurement error due to Shear is 0.1 %
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org6765aeb" class="outline-3">
|
||||
<h3 id="org6765aeb"><span class="section-number-3">3.7</span> Estimation error due to force sensor compression</h3>
|
||||
<div class="outline-text-3" id="text-3-7">
|
||||
<p>
|
||||
The measured displacement is not done directly at the joint’s location.
|
||||
The force sensor compression will then induce an error on the joint’s stiffness.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The force sensor stiffness \(k_F\) is estimated to be around:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">kF = 50<span class="org-type">/</span>0.05e<span class="org-type">-</span>3; <span class="org-comment">% [N/m]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
k_F = 1.0e+06 [N/m]
|
||||
</pre>
|
||||
|
||||
|
||||
<p>
|
||||
The measured displacement will be the sum of the displacement induced by the bending and by the compression of the force sensor:
|
||||
</p>
|
||||
\begin{equation}
|
||||
d_x = D_b + \frac{F_x}{k_F} = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right) + \frac{F_x}{k_F} \approx F_x \left( \frac{h^2}{k_{R_y}} + \frac{1}{k_F} \right)
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
The estimated bending stiffness \(k_{\text{est}}\) will then be:
|
||||
</p>
|
||||
\begin{equation}
|
||||
k_{\text{est}} = h^2 \frac{F_x}{d_x} \approx k_{R_y} \frac{1}{1 + \frac{k_{R_y}}{k_F h^2}}
|
||||
\end{equation}
|
||||
|
||||
<pre class="example">
|
||||
The measurement error due to height estimation errors is 0.8 %
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgdc33e2c" class="outline-3">
|
||||
<h3 id="orgdc33e2c"><span class="section-number-3">3.8</span> Estimation error due to height estimation error</h3>
|
||||
<div class="outline-text-3" id="text-3-8">
|
||||
<p>
|
||||
Let’s consider an error in the estimation of the height from the application of the force to the joint’s center:
|
||||
</p>
|
||||
\begin{equation}
|
||||
h_{\text{est}} = h (1 + \epsilon)
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
The computed bending stiffness will be:
|
||||
</p>
|
||||
\begin{equation}
|
||||
k_\text{est} \approx h_{\text{est}}^2 \frac{F_x}{d_x}
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
And the stiffness estimation error is:
|
||||
</p>
|
||||
\begin{equation}
|
||||
\frac{k_{\text{est}}}{k_{R_y}} = (1 + \epsilon)^2
|
||||
\end{equation}
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">h_err = 0.2e<span class="org-type">-</span>3; <span class="org-comment">% Height estimation error [m]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
The measurement error due to height estimation errors of 0.2 [mm] is 1.6 %
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgbff0a4b" class="outline-3">
|
||||
<h3 id="orgbff0a4b"><span class="section-number-3">3.9</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-3-9">
|
||||
<p>
|
||||
Based on the above analysis, we should expect no better than few percent of accuracy using the current test-bench.
|
||||
This is well enough for a first estimation of the bending stiffness of the flexible joints.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Another measurement bench allowing better accuracy will be developed.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge6a23d4" class="outline-2">
|
||||
<h2 id="orge6a23d4"><span class="section-number-2">4</span> First Measurements</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
<p>
|
||||
<a id="org60b7659"></a>
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Section <a href="#org950c08c">4.1</a>:</li>
|
||||
<li>Section <a href="#org08bd7f1">4.2</a>:</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="outline-container-orgf3173a7" class="outline-3">
|
||||
<h3 id="orgf3173a7"><span class="section-number-3">4.1</span> Agreement between the probe and the encoder</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
<a id="org950c08c"></a>
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li><b>Load Cells</b>: <a href="doc/A700000007147087.pdf">FC2231-0000-0010-L</a> (and <a href="doc/FRE_DS_XFL212R_FR_A3.pdf">XFL212R</a>)</li>
|
||||
<li><b>Encoder</b>: <a href="doc/L-9517-9448-05-B_Data_sheet_RESOLUTE_BiSS_en.pdf">Renishaw Resolute 1nm</a></li>
|
||||
<li><b>Displacement Probe</b>: <a href="doc/Millimar--3723046--BA--C1208-C1216-C1240--FR--2016-11-08.pdf">Millimar C1216 electronics</a> and <a href="doc/tmp3m0cvmue_7888038c-cdc8-48d8-a837-35de02760685.pdf">Millimar 1318 probe</a></li>
|
||||
</ul>
|
||||
<p>
|
||||
The measurement setup is made such that the probe measured the translation table displacement.
|
||||
It should then measure the same displacement as the encoder.
|
||||
Using this setup, we should be able to compare the probe and the encoder.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga83f29f" class="outline-3">
|
||||
<h3 id="orga83f29f"><span class="section-number-3">3.2</span> Results</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<p>
|
||||
Let’s load the measurements.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'meas_probe_against_encoder.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'d'</span>, <span class="org-string">'dp'</span>, <span class="org-string">'F'</span>)
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The time domain measured displacement by the probe and by the encoder is shown in Figure <a href="#orgfed4851">5</a>.
|
||||
The time domain measured displacement by the probe and by the encoder is shown in Figure <a href="#org582a172">8</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgfed4851" class="figure">
|
||||
<div id="org582a172" class="figure">
|
||||
<p><img src="figs/comp_encoder_probe_time.png" alt="comp_encoder_probe_time.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Time domain measurement</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Time domain measurement</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
If we zoom, we see that there is some delay between the encoder and the probe (Figure <a href="#org8b829e0">6</a>).
|
||||
If we zoom, we see that there is some delay between the encoder and the probe (Figure <a href="#orgdf303a4">9</a>).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org8b829e0" class="figure">
|
||||
<div id="orgdf303a4" class="figure">
|
||||
<p><img src="figs/comp_encoder_probe_time_zoom.png" alt="comp_encoder_probe_time_zoom.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Time domain measurement (Zoom)</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Time domain measurement (Zoom)</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
@ -353,28 +762,28 @@ The time delay is approximately 15.8 [ms]
|
||||
|
||||
|
||||
<p>
|
||||
The measured mismatch between the encoder and the probe with and without compensating for the time delay are shown in Figure <a href="#org325c41d">7</a>.
|
||||
The measured mismatch between the encoder and the probe with and without compensating for the time delay are shown in Figure <a href="#org8a6d0a7">10</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org325c41d" class="figure">
|
||||
<div id="org8a6d0a7" class="figure">
|
||||
<p><img src="figs/comp_encoder_probe_mismatch.png" alt="comp_encoder_probe_mismatch.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Measurement mismatch, with and without delay compensation</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Measurement mismatch, with and without delay compensation</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Finally, the displacement of the probe is shown as a function of the displacement of the encoder and a linear fit is made (Figure <a href="#org6b2fa2a">8</a>).
|
||||
Finally, the displacement of the probe is shown as a function of the displacement of the encoder and a linear fit is made (Figure <a href="#org7323329">11</a>).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org6b2fa2a" class="figure">
|
||||
<div id="org7323329" class="figure">
|
||||
<p><img src="figs/comp_encoder_probe_linear_fit.png" alt="comp_encoder_probe_linear_fit.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Measured displacement by the probe as a function of the measured displacement by the encoder</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Measured displacement by the probe as a function of the measured displacement by the encoder</p>
|
||||
</div>
|
||||
|
||||
<div class="important" id="orgd63f29c">
|
||||
<div class="important" id="orgd8436d3">
|
||||
<p>
|
||||
From the measurement, it is shown that the probe is well calibrated.
|
||||
However, there is some time delay of tens of milliseconds that could induce some measurement errors.
|
||||
@ -383,12 +792,14 @@ However, there is some time delay of tens of milliseconds that could induce some
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0fbb329" class="outline-2">
|
||||
<h2 id="org0fbb329"><span class="section-number-2">4</span> Measurement of the Millimar 1318 probe stiffness</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
<div class="note" id="org8fed4a1">
|
||||
<div id="outline-container-org47cc77a" class="outline-3">
|
||||
<h3 id="org47cc77a"><span class="section-number-3">4.2</span> Measurement of the Millimar 1318 probe stiffness</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<p>
|
||||
<a id="org08bd7f1"></a>
|
||||
</p>
|
||||
<div class="note" id="org2dc97c3">
|
||||
<ul class="org-ul">
|
||||
<li><b>Translation Stage</b>: <a href="doc/V-408-Datasheet.pdf">V-408</a></li>
|
||||
<li><b>Load Cell</b>: <a href="doc/A700000007147087.pdf">FC2231-0000-0010-L</a></li>
|
||||
@ -399,23 +810,18 @@ However, there is some time delay of tens of milliseconds that could induce some
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org2cc75ab" class="figure">
|
||||
<div id="org5312017" class="figure">
|
||||
<p><img src="figs/setup_mahr_stiff_meas_side.jpg" alt="setup_mahr_stiff_meas_side.jpg" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Setup - Side View</p>
|
||||
<p><span class="figure-number">Figure 12: </span>Setup - Side View</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org91485ce" class="figure">
|
||||
<div id="orge5425ad" class="figure">
|
||||
<p><img src="figs/setup_mahr_stiff_meas_top.jpg" alt="setup_mahr_stiff_meas_top.jpg" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Setup - Top View</p>
|
||||
<p><span class="figure-number">Figure 13: </span>Setup - Top View</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc7d7173" class="outline-3">
|
||||
<h3 id="orgc7d7173"><span class="section-number-3">4.1</span> Results</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
Let’s load the measurement results.
|
||||
</p>
|
||||
@ -425,14 +831,14 @@ Let’s load the measurement results.
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The time domain measured force and displacement are shown in Figure <a href="#orgd45dfc2">11</a>.
|
||||
The time domain measured force and displacement are shown in Figure <a href="#org411a5b9">14</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgd45dfc2" class="figure">
|
||||
<div id="org411a5b9" class="figure">
|
||||
<p><img src="figs/mahr_time_domain.png" alt="mahr_time_domain.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Time domain measurements</p>
|
||||
<p><span class="figure-number">Figure 14: </span>Time domain measurements</p>
|
||||
</div>
|
||||
|
||||
|
||||
@ -450,17 +856,17 @@ This is very close to the 0.04 [N/mm] written in the <a href="doc/tmp3m0cvmue_78
|
||||
</p>
|
||||
|
||||
<p>
|
||||
And compare the linear fit with the raw measurement data (Figure <a href="#org4939523">12</a>).
|
||||
And compare the linear fit with the raw measurement data (Figure <a href="#org784b37d">15</a>).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org4939523" class="figure">
|
||||
<div id="org784b37d" class="figure">
|
||||
<p><img src="figs/mahr_stiffness_f_d_plot.png" alt="mahr_stiffness_f_d_plot.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 12: </span>Measured displacement as a function of the measured force. Raw data and linear fit</p>
|
||||
<p><span class="figure-number">Figure 15: </span>Measured displacement as a function of the measured force. Raw data and linear fit</p>
|
||||
</div>
|
||||
|
||||
<div class="summary" id="org18e09dc">
|
||||
<div class="summary" id="orgbc46442">
|
||||
<p>
|
||||
The Millimar 1318 probe has a stiffness of \(\approx 0.04\,[N/mm]\).
|
||||
</p>
|
||||
@ -470,13 +876,18 @@ The Millimar 1318 probe has a stiffness of \(\approx 0.04\,[N/mm]\).
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgda9e689" class="outline-2">
|
||||
<h2 id="orgda9e689"><span class="section-number-2">5</span> Experimental measurement</h2>
|
||||
<div id="outline-container-org48987bc" class="outline-2">
|
||||
<h2 id="org48987bc"><span class="section-number-2">5</span> Bending Stiffness Measurement</h2>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
<p>
|
||||
<a id="org34f6444"></a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2021-02-16 mar. 21:23</p>
|
||||
<p class="date">Created: 2021-02-18 jeu. 11:33</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
#+TITLE: Flexible Joint - Test Bench
|
||||
#+TITLE: Flexible Joints - Test Bench
|
||||
:DRAWER:
|
||||
#+LANGUAGE: en
|
||||
#+EMAIL: dehaeze.thomas@gmail.com
|
||||
@ -46,30 +46,88 @@
|
||||
<hr>
|
||||
#+end_export
|
||||
|
||||
* Flexible Joints - Requirements
|
||||
* Introduction :ignore:
|
||||
In this document, we present a test-bench that has been developed in order to measure the bending stiffness of flexible joints.
|
||||
|
||||
| | *Specification* |
|
||||
|-------------------+-----------------|
|
||||
| Axial Stiffness | > 200 [N/um] |
|
||||
| Shear Stiffness | > 1 [N/um] |
|
||||
| Bending Stiffness | < 100 [Nm/rad] |
|
||||
| Torsion Stiffness | < 500 [Nm/rad] |
|
||||
| Bending Stroke | > 1 [mrad] |
|
||||
| Torsion Stroke | > 5 [urad] |
|
||||
It is structured as follow:
|
||||
- Section [[sec:flexible_joints]]: the geometry of the flexible joints and the expected stiffness and stroke are presented
|
||||
- Section [[sec:test_bench_desc]]: the measurement bench is presented
|
||||
- Section [[sec:error_budget]]: an error budget is performed in order to estimate the accuracy of the measured stiffness
|
||||
- Section [[sec:first_measurements]]: first measurements are performed
|
||||
- Section [[sec:bending_stiffness_meas]]: the bending stiffness of the flexible joints are measured
|
||||
|
||||
* Test Bench Description
|
||||
* Flexible Joints
|
||||
<<sec:flexible_joints>>
|
||||
|
||||
The flexible joints that are going to be measured in this document have been design to be used with a Nano-Hexapod (Figure [[fig:nano_hexapod]]).
|
||||
|
||||
#+name: fig:nano_hexapod
|
||||
#+caption: CAD view of the Nano-Hexapod containing the flexible joints
|
||||
#+attr_latex: :width 0.7\linewidth
|
||||
[[file:figs/nano_hexapod.png]]
|
||||
|
||||
Ideally, these flexible joints would behave as perfect ball joints, that is to say:
|
||||
- no bending and torsional stiffnesses
|
||||
- infinite shear and axial stiffnesses
|
||||
- un-limited bending and torsional stroke
|
||||
- no friction, no backlash
|
||||
|
||||
|
||||
The real characteristics of the flexible joints will influence the dynamics of the Nano-Hexapod.
|
||||
Using a multi-body dynamical model of the nano-hexapod, the specifications in term of stiffness and stroke of the flexible joints have been determined and summarized in Table [[tab:flexible_joints_specs]].
|
||||
|
||||
#+name: tab:flexible_joints_specs
|
||||
#+caption: Specifications for the flexible joints and estimated characteristics from the Finite Element Model
|
||||
#+attr_latex: :environment tabularx :width 0.5\linewidth :align Xcc
|
||||
#+attr_latex: :center t :booktabs t :float t
|
||||
| | *Specification* | *FEM* |
|
||||
|-------------------+-----------------+-------|
|
||||
| Axial Stiffness | > 100 [N/um] | 94 |
|
||||
| Shear Stiffness | > 1 [N/um] | 13 |
|
||||
| Bending Stiffness | < 100 [Nm/rad] | 5 |
|
||||
| Torsion Stiffness | < 500 [Nm/rad] | 260 |
|
||||
| Bending Stroke | > 1 [mrad] | 24.5 |
|
||||
| Torsion Stroke | > 5 [urad] | |
|
||||
|
||||
Then, the classical geometry of a flexible ball joint shown in Figure [[fig:flexible_joint_fem_geometry]] has been optimized in order to meet the requirements.
|
||||
This has been done using a Finite Element Software and the obtained joint's characteristics are summarized in Table [[tab:flexible_joints_specs]].
|
||||
|
||||
#+name: fig:flexible_joint_fem_geometry
|
||||
#+caption: Flexible part of the Joint used for FEM - CAD view
|
||||
#+attr_latex: :width 0.5\linewidth
|
||||
[[file:figs/flexible_joint_fem_geometry.png]]
|
||||
|
||||
The obtained geometry are defined in the [[file:doc/flex_joints.pdf][drawings of the flexible joints]].
|
||||
The material is a special kind of stainless steel called "F16PH"..
|
||||
|
||||
* Measurement Test Bench - Bending Stiffness
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle ./matlab/bench_dimensioning.m
|
||||
:END:
|
||||
<<sec:test_bench_desc>>
|
||||
** Introduction :ignore:
|
||||
The most important characteristic of the flexible joint that we want to measure is its bending stiffness $k_{R_x} \approx k_{R_y}$.
|
||||
|
||||
The main characteristic of the flexible joint that we want to measure is its bending stiffness $k_{R_x} \approx k_{R_y}$.
|
||||
To do so, we have to apply a torque $T_x$ on the flexible joint and measure its angular deflection $\theta_x$.
|
||||
The stiffness is then
|
||||
\begin{equation}
|
||||
k_{R_x} = \frac{T_x}{\theta_x}
|
||||
\end{equation}
|
||||
|
||||
To do so, a test bench is used.
|
||||
Specifications of the test bench to precisely measure the bending stiffness are described in this section.
|
||||
As it is quite difficult to apply a pure torque, a force will be applied instead.
|
||||
The application point of the force should far enough from the flexible part such that the obtained bending is much larger than the displacement in shear.
|
||||
|
||||
The basic idea is to measured the angular deflection of the flexible joint as a function of the applied torque.
|
||||
The working principle of the bench is schematically shown in Figure [[fig:test_bench_principle]].
|
||||
One part of the flexible joint is fixed. On the mobile part, a force $F_x$ is applied which is equivalent to a torque applied on the flexible joint center.
|
||||
The induced rotation is measured with a displacement sensor $d_x$.
|
||||
|
||||
#+name: fig:test-bench-schematic
|
||||
#+caption: Schematic of the test bench to measure the bending stiffness of the flexible joints
|
||||
[[file:figs/test-bench-schematic.png]]
|
||||
#+name: fig:test_bench_principle
|
||||
#+caption: Test Bench - working principle
|
||||
[[file:figs/test_bench_principle.png]]
|
||||
|
||||
|
||||
This test-bench will be used to have a first approximation of the bending stiffnesss and stroke of the flexible joints.
|
||||
Another test-bench, better engineered will be used to measure the flexible joint's characteristics with better accuracy.
|
||||
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
@ -82,7 +140,7 @@ The basic idea is to measured the angular deflection of the flexible joint as a
|
||||
|
||||
** Flexible joint Geometry
|
||||
The flexible joint used for the Nano-Hexapod is shown in Figure [[fig:flexible_joint_geometry]].
|
||||
Its bending stiffness is foreseen to be $k_{R_y}\approx 20\,\frac{Nm}{rad}$ and its stroke $\theta_{y,\text{max}}\approx 20\,mrad$.
|
||||
Its bending stiffness is foreseen to be $k_{R_y}\approx 5\,\frac{Nm}{rad}$ and its stroke $\theta_{y,\text{max}}\approx 25\,mrad$.
|
||||
|
||||
#+name: fig:flexible_joint_geometry
|
||||
#+caption: Geometry of the flexible joint
|
||||
@ -92,8 +150,8 @@ The height between the flexible point (center of the joint) and the point where
|
||||
|
||||
Let's define the parameters on Matlab.
|
||||
#+begin_src matlab
|
||||
kRx = 20; % Bending Stiffness [Nm/rad]
|
||||
Rxmax = 20e-3; % Bending Stroke [rad]
|
||||
kRx = 5; % Bending Stiffness [Nm/rad]
|
||||
Rxmax = 25e-3; % Bending Stroke [rad]
|
||||
h = 20e-3; % Height [m]
|
||||
#+end_src
|
||||
|
||||
@ -115,19 +173,18 @@ Therefore, the applied force to test the full range of the flexible joint is:
|
||||
|
||||
And we obtain:
|
||||
#+begin_src matlab :results value raw replace :exports results
|
||||
sprintf('\\begin{equation} F_{max} = %.1f\\, [N] \\end{equation}', Fxmax)
|
||||
sprintf('\\begin{equation} F_{x,max} = %.1f\\, [N] \\end{equation}', Fxmax)
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
\begin{equation} F_{max} = 20.0\, [N] \end{equation}
|
||||
\begin{equation} F_{x,max} = 6.2\, [N] \end{equation}
|
||||
|
||||
The measurement range of the force sensor should then be higher than $20\,N$.
|
||||
The measurement range of the force sensor should then be higher than $6.2\,N$.
|
||||
|
||||
** Required actuator stroke and sensors range
|
||||
|
||||
The flexible joint is designed to allow a bending motion of $\pm 20\,mrad$.
|
||||
The corresponding actuator stroke to impose such motion is:
|
||||
|
||||
The flexible joint is designed to allow a bending motion of $\pm 25\,mrad$.
|
||||
The corresponding stroke at the location of the force sensor is:
|
||||
\[ d_{x,\text{max}} = h \tan(R_{x,\text{max}}) \]
|
||||
|
||||
#+begin_src matlab
|
||||
@ -139,67 +196,284 @@ The corresponding actuator stroke to impose such motion is:
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
\begin{equation} d_{max} = 0.4\, [mm] \end{equation}
|
||||
\begin{equation} d_{max} = 0.5\, [mm] \end{equation}
|
||||
|
||||
In order to test the full range of the flexible joint, the stroke of the actuator should be higher than $0.4\,mm$.
|
||||
The measurement range of the displacement sensor should also be higher than $0.4\,mm$.
|
||||
|
||||
** First try with the APA95ML
|
||||
|
||||
The APA95ML as a stroke of $100\,\mu m$ and the encoder in parallel can easily measure the required stroke.
|
||||
|
||||
Suppose the full stroke of the APA can be used to bend the flexible joint (ideal case), the measured force will be:
|
||||
#+begin_src matlab
|
||||
Fxmax = kRx*100e-6/h^2; % Force at maximum stroke [N]
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results value raw replace :exports results
|
||||
sprintf('\\begin{equation} F_{max} = %.1f\\, [N] \\end{equation}', Fxmax)
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
\begin{equation} F_{max} = 5.0\, [N] \end{equation}
|
||||
|
||||
And the tested angular range is:
|
||||
#+begin_src matlab
|
||||
Rmax = tan(100e-6/h);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results value raw replace :exports results
|
||||
sprintf('\\begin{equation} \\theta_{max} = %.1f\\, [mrad] \\end{equation}', 1e3*Rmax)
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
\begin{equation} \theta_{max} = 5.0\, [mrad] \end{equation}
|
||||
In order to test the full range of the flexible joint, the stroke of the translation stage used to move the force sensor should be higher than $0.5\,mm$.
|
||||
Similarly, the measurement range of the displacement sensor should also be higher than $0.5\,mm$.
|
||||
|
||||
** Test Bench
|
||||
|
||||
A CAD view of the measurement bench is shown in Figure [[fig:test_bench_flex_overview]].
|
||||
|
||||
#+begin_note
|
||||
Here are the different elements used in this bench:
|
||||
- *Translation Stage*: [[file:doc/V-408-Datasheet.pdf][V-408]]
|
||||
- *Load Cells*: [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]]
|
||||
- *Encoder*: [[file:doc/L-9517-9448-05-B_Data_sheet_RESOLUTE_BiSS_en.pdf][Renishaw Resolute 1nm]]
|
||||
#+end_note
|
||||
|
||||
Both the measured force and displacement are acquired at the same time using a Speedgoat machine.
|
||||
|
||||
#+name: fig:test_bench_flex_overview
|
||||
#+caption: Schematic of the test bench to measure the bending stiffness of the flexible joints
|
||||
#+attr_latex: :width 0.8\linewidth
|
||||
[[file:figs/test_bench_flex_overview.png]]
|
||||
|
||||
A side view of the bench with the important quantities are shown in Figure [[fig:test_bench_flex_side]].
|
||||
|
||||
#+name: fig:test_bench_flex_side
|
||||
#+caption: Schematic of the test bench to measure the bending stiffness of the flexible joints
|
||||
#+attr_latex: :width 0.25\linewidth
|
||||
#+attr_html: :width 300px
|
||||
[[file:figs/test_bench_flex_side.png]]
|
||||
|
||||
#+begin_note
|
||||
- *Translation Stage*: [[file:doc/V-408-Datasheet.pdf][V-408]]
|
||||
- *Load Cells*: [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]] and [[file:doc/FRE_DS_XFL212R_FR_A3.pdf][XFL212R]]
|
||||
* Error budget
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle ./matlab/error_budget.m
|
||||
:END:
|
||||
<<sec:error_budget>>
|
||||
** Introduction :ignore:
|
||||
|
||||
Many things can impact the accuracy of the measured bending stiffness such as:
|
||||
- Errors in the force and displacement measurement
|
||||
- Shear effects
|
||||
- Deflection of the Force sensor
|
||||
- Errors in the geometry of the bench
|
||||
|
||||
In this section, we wish to estimate the attainable accuracy with the current bench, and identified the limiting factors.
|
||||
|
||||
|
||||
** 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
|
||||
|
||||
** Finite Element Model
|
||||
From the Finite Element Model, the stiffness and stroke of the flexible joint have been computed and summarized in Tables [[tab:axial_shear_characteristics]] and [[tab:bending_torsion_characteristics]].
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Stiffness
|
||||
ka = 94e6; % Axial Stiffness [N/m]
|
||||
ks = 13e6; % Shear Stiffness [N/m]
|
||||
kb = 5; % Bending Stiffness [Nm/rad]
|
||||
kt = 260; % Torsional Stiffness [Nm/rad]
|
||||
|
||||
%% Maximum force
|
||||
Fa = 469; % Axial Force before yield [N]
|
||||
Fs = 242; % Shear Force before yield [N]
|
||||
Fb = 0.118; % Bending Force before yield [Nm]
|
||||
Ft = 1.508; % Torsional Force before yield [Nm]
|
||||
|
||||
%% Compute the corresponding stroke
|
||||
Xa = Fa/ka; % Axial Stroke before yield [m]
|
||||
Xs = Fs/ks; % Shear Stroke before yield [m]
|
||||
Xb = Fb/kb; % Bending Stroke before yield [rad]
|
||||
Xt = Ft/kt; % Torsional Stroke before yield [rad]
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([1e-6*ka, Fa, 1e6*Xa; 1e-6*ks, Fs, 1e6*Xs], {'Axial', 'Shear'}, {'Stiffness [N/um]', 'Max Force [N]', 'Stroke [um]'}, ' %.0f ');
|
||||
#+end_src
|
||||
|
||||
#+name: tab:axial_shear_characteristics
|
||||
#+caption: Axial/Shear characteristics
|
||||
#+attr_latex: :environment tabularx :width 0.6\linewidth :align Xccc
|
||||
#+attr_latex: :center t :booktabs t :float t
|
||||
#+RESULTS:
|
||||
| | Stiffness [N/um] | Max Force [N] | Stroke [um] |
|
||||
|-------+------------------+---------------+-------------|
|
||||
| Axial | 94 | 469 | 5 |
|
||||
| Shear | 13 | 242 | 19 |
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([kb, 1e3*Fb, 1e3*Xb; kt, 1e3*Ft, 1e3*Xt], {'Bending', 'Torsional'}, {'Stiffness [Nm/rad]', 'Max Torque [Nmm]', 'Stroke [mrad]'}, ' %.0f ');
|
||||
#+end_src
|
||||
|
||||
#+name: tab:bending_torsion_characteristics
|
||||
#+caption: Bending/Torsion characteristics
|
||||
#+attr_latex: :environment tabularx :width 0.7\linewidth :align Xccc
|
||||
#+attr_latex: :center t :booktabs t :float t
|
||||
#+RESULTS:
|
||||
| | Stiffness [Nm/rad] | Max Torque [Nmm] | Stroke [mrad] |
|
||||
|-----------+--------------------+------------------+---------------|
|
||||
| Bending | 5 | 118 | 24 |
|
||||
| Torsional | 260 | 1508 | 6 |
|
||||
|
||||
** Setup
|
||||
|
||||
The setup is schematically represented in Figure [[fig:test_bench_flex_side_bis]].
|
||||
|
||||
The force is applied on top of the flexible joint with a distance $h$ with the joint's center.
|
||||
The displacement of the flexible joint is also measured at the same height.
|
||||
|
||||
The height between the joint's center and the force application point is:
|
||||
#+begin_src matlab
|
||||
h = 25e-3; % Height [m]
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_bench_flex_side_bis
|
||||
#+caption: Schematic of the test bench to measure the bending stiffness of the flexible joints
|
||||
#+attr_latex: :width 0.25\linewidth
|
||||
#+attr_html: :width 300px
|
||||
[[file:figs/test_bench_flex_side.png]]
|
||||
|
||||
** Effect of Bending
|
||||
The torque applied is:
|
||||
\begin{equation}
|
||||
M_y = F_x \cdot h
|
||||
\end{equation}
|
||||
|
||||
The flexible joint is experiencing a rotation $\theta_y$ due to the torque $M_y$:
|
||||
\begin{equation}
|
||||
\theta_y = \frac{M_y}{k_{R_y}} = \frac{F_x \cdot h}{k_{R_y}}
|
||||
\end{equation}
|
||||
|
||||
This rotation is then measured by the displacement sensor.
|
||||
The measured displacement is:
|
||||
\begin{equation}
|
||||
D_b = h \tan(\theta_y) = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right) \label{eq:bending_stiffness_formula}
|
||||
\end{equation}
|
||||
|
||||
** Computation of the bending stiffness
|
||||
From equation eqref:eq:bending_stiffness_formula, we can compute the bending stiffness:
|
||||
\begin{equation}
|
||||
k_{R_y} = \frac{F_x \cdot h}{\tan^{-1}\left( \frac{D_b}{h} \right)}
|
||||
\end{equation}
|
||||
|
||||
For small displacement, we have
|
||||
\begin{equation}
|
||||
\boxed{k_{R_y} \approx h^2 \frac{F_x}{d_x}}
|
||||
\end{equation}
|
||||
|
||||
And therefore, to precisely measure $k_{R_y}$, we need to:
|
||||
- precisely measure the motion $d_x$
|
||||
- precisely measure the applied force $F_x$
|
||||
- precisely now the height of the force application point $h$
|
||||
|
||||
** Estimation error due to force and displacement sensors accuracy
|
||||
The maximum error on the measured displacement with the encoder is 40 nm.
|
||||
This quite negligible compared to the measurement range of 0.5 mm.
|
||||
|
||||
The accuracy of the force sensor is around 1% and therefore, we should expect to have an accuracy on the measured stiffness of at most 1%.
|
||||
|
||||
** Estimation error due to Shear
|
||||
The effect of Shear on the measured displacement is simply:
|
||||
\begin{equation}
|
||||
D_s = \frac{F_x}{k_s}
|
||||
\end{equation}
|
||||
|
||||
The measured displacement will be the effect of shear + effect of bending
|
||||
\begin{equation}
|
||||
d_x = D_b + D_s = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right) + \frac{F_x}{k_s} \approx F_x \left( \frac{h^2}{k_{R_y}} + \frac{1}{k_s} \right)
|
||||
\end{equation}
|
||||
|
||||
The estimated bending stiffness $k_{\text{est}}$ will then be:
|
||||
\begin{equation}
|
||||
k_{\text{est}} = h^2 \frac{F_x}{d_x} \approx k_{R_y} \frac{1}{1 + \frac{k_{R_y}}{k_s h^2}}
|
||||
\end{equation}
|
||||
|
||||
#+begin_src matlab :results value replace :exports results :tangle no
|
||||
sprintf('The measurement error due to Shear is %.1f %%', 100*abs(1-1/(1 + kb/(ks*h^2))))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: The measurement error due to Shear is 0.1 %
|
||||
|
||||
** Estimation error due to force sensor compression
|
||||
The measured displacement is not done directly at the joint's location.
|
||||
The force sensor compression will then induce an error on the joint's stiffness.
|
||||
|
||||
The force sensor stiffness $k_F$ is estimated to be around:
|
||||
#+begin_src matlab
|
||||
kF = 50/0.05e-3; % [N/m]
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results value replace :exports results
|
||||
sprintf('k_F = %.1e [N/m]', kF)
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: k_F = 1.0e+06 [N/m]
|
||||
|
||||
The measured displacement will be the sum of the displacement induced by the bending and by the compression of the force sensor:
|
||||
\begin{equation}
|
||||
d_x = D_b + \frac{F_x}{k_F} = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right) + \frac{F_x}{k_F} \approx F_x \left( \frac{h^2}{k_{R_y}} + \frac{1}{k_F} \right)
|
||||
\end{equation}
|
||||
|
||||
The estimated bending stiffness $k_{\text{est}}$ will then be:
|
||||
\begin{equation}
|
||||
k_{\text{est}} = h^2 \frac{F_x}{d_x} \approx k_{R_y} \frac{1}{1 + \frac{k_{R_y}}{k_F h^2}}
|
||||
\end{equation}
|
||||
|
||||
#+begin_src matlab :results value replace :exports results :tangle no
|
||||
sprintf('The measurement error due to height estimation errors is %.1f %%', 100*abs(1-1/(1 + kb/(kF*h^2))))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: The measurement error due to height estimation errors is 0.8 %
|
||||
|
||||
** Estimation error due to height estimation error
|
||||
Let's consider an error in the estimation of the height from the application of the force to the joint's center:
|
||||
\begin{equation}
|
||||
h_{\text{est}} = h (1 + \epsilon)
|
||||
\end{equation}
|
||||
|
||||
The computed bending stiffness will be:
|
||||
\begin{equation}
|
||||
k_\text{est} \approx h_{\text{est}}^2 \frac{F_x}{d_x}
|
||||
\end{equation}
|
||||
|
||||
And the stiffness estimation error is:
|
||||
\begin{equation}
|
||||
\frac{k_{\text{est}}}{k_{R_y}} = (1 + \epsilon)^2
|
||||
\end{equation}
|
||||
|
||||
#+begin_src matlab
|
||||
h_err = 0.2e-3; % Height estimation error [m]
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results value replace :exports results :tangle no
|
||||
sprintf('The measurement error due to height estimation errors of %.1f [mm] is %.1f %%', 1e3*h_err, 100*abs(1-(1 + h_err/h)^2))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: The measurement error due to height estimation errors of 0.2 [mm] is 1.6 %
|
||||
|
||||
** Conclusion
|
||||
Based on the above analysis, we should expect no better than few percent of accuracy using the current test-bench.
|
||||
This is well enough for a first estimation of the bending stiffness of the flexible joints.
|
||||
|
||||
Another measurement bench allowing better accuracy will be developed.
|
||||
|
||||
* First Measurements
|
||||
<<sec:first_measurements>>
|
||||
** Introduction :ignore:
|
||||
|
||||
|
||||
- Section [[sec:test_meas_probe]]:
|
||||
- Section [[sec:meas_probe_stiffness]]:
|
||||
|
||||
** Agreement between the probe and the encoder
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle ./matlab/probe_vs_encoder.m
|
||||
:END:
|
||||
<<sec:test_meas_probe>>
|
||||
*** Introduction :ignore:
|
||||
|
||||
- *Load Cells*: [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]] (and [[file:doc/FRE_DS_XFL212R_FR_A3.pdf][XFL212R]])
|
||||
- *Encoder*: [[file:doc/L-9517-9448-05-B_Data_sheet_RESOLUTE_BiSS_en.pdf][Renishaw Resolute 1nm]]
|
||||
- *Displacement Probe*: [[file:doc/Millimar--3723046--BA--C1208-C1216-C1240--FR--2016-11-08.pdf][Millimar C1216 electronics]] and [[file:doc/tmp3m0cvmue_7888038c-cdc8-48d8-a837-35de02760685.pdf][Millimar 1318 probe]]
|
||||
#+end_note
|
||||
|
||||
* Agreement between the probe and the encoder
|
||||
** Introduction :ignore:
|
||||
** Setup
|
||||
*** Setup :ignore:
|
||||
The measurement setup is made such that the probe measured the translation table displacement.
|
||||
It should then measure the same displacement as the encoder.
|
||||
Using this setup, we should be able to compare the probe and the encoder.
|
||||
|
||||
** Matlab Init :noexport:ignore:
|
||||
*** 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
|
||||
@ -217,9 +491,8 @@ addpath('./matlab/');
|
||||
addpath('./mat/');
|
||||
#+end_src
|
||||
|
||||
** Results
|
||||
*** Results :ignore:
|
||||
Let's load the measurements.
|
||||
|
||||
#+begin_src matlab
|
||||
load('meas_probe_against_encoder.mat', 't', 'd', 'dp', 'F')
|
||||
#+end_src
|
||||
@ -333,8 +606,12 @@ From the measurement, it is shown that the probe is well calibrated.
|
||||
However, there is some time delay of tens of milliseconds that could induce some measurement errors.
|
||||
#+end_important
|
||||
|
||||
* Measurement of the Millimar 1318 probe stiffness
|
||||
** Introduction :ignore:
|
||||
** Measurement of the Millimar 1318 probe stiffness
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle ./matlab/probe_stiffness.m
|
||||
:END:
|
||||
<<sec:meas_probe_stiffness>>
|
||||
*** Introduction :ignore:
|
||||
|
||||
#+begin_note
|
||||
- *Translation Stage*: [[file:doc/V-408-Datasheet.pdf][V-408]]
|
||||
@ -353,7 +630,7 @@ However, there is some time delay of tens of milliseconds that could induce some
|
||||
#+attr_latex: :width \linewidth
|
||||
[[file:figs/setup_mahr_stiff_meas_top.jpg]]
|
||||
|
||||
** Matlab Init :noexport:ignore:
|
||||
*** 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
|
||||
@ -371,7 +648,7 @@ addpath('./matlab/');
|
||||
addpath('./mat/');
|
||||
#+end_src
|
||||
|
||||
** Results
|
||||
*** Results :ignore:
|
||||
Let's load the measurement results.
|
||||
#+begin_src matlab
|
||||
load('meas_stiff_probe.mat', 't', 'd', 'dp', 'F')
|
||||
@ -456,4 +733,5 @@ exportFig('figs/mahr_stiffness_f_d_plot.pdf', 'width', 'wide', 'height', 'normal
|
||||
The Millimar 1318 probe has a stiffness of $\approx 0.04\,[N/mm]$.
|
||||
#+end_summary
|
||||
|
||||
* Experimental measurement
|
||||
* Bending Stiffness Measurement
|
||||
<<sec:bending_stiffness_meas>>
|
||||
|