Analyze measurement of flexible joints

This commit is contained in:
Thomas Dehaeze 2021-03-04 17:29:33 +01:00
parent d7a8a125c3
commit 4006603d23
36 changed files with 3791 additions and 445 deletions

BIN
figs/CaptureScreen_1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
figs/CaptureScreen_2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

BIN
figs/beam_dim_histogram.pdf Normal file

Binary file not shown.

BIN
figs/beam_dim_histogram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

2409
figs/flexible_joint_axis.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -51,7 +51,8 @@ In this document, we present a test-bench that has been developed in order to me
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:flex_dim_meas]]: each flexible joint is measured using a profile projector
- Section [[sec:test_bench_desc]]: the stiffness 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
@ -98,39 +99,47 @@ This has been done using a Finite Element Software and the obtained joint's char
[[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"..
The material is a special kind of stainless steel called "F16PH".
* Dimensions
The flexible joints can be seen on Figure [[fig:received_flex]].
** Measurements
#+name: fig:received_flex
#+caption: 15 of the 16 flexible joints
#+attr_latex: :width \linewidth
[[file:figs/IMG_20210302_173619.jpg]]
Few notes:
- dirt inside: 3,10,12,13
- strange surface quality: 15,16
- Strange shape: 5
* Dimensional Measurements
:PROPERTIES:
:header-args:matlab+: :tangle ./matlab/dim_meas.m
:END:
<<sec:flex_dim_meas>>
** Measurement Bench
The axis corresponding to the flexible joints are defined in Figure [[fig:flexible_joint_axis]].
#+name: fig:flexible_joint_axis
#+caption: Define axis for the flexible joints
#+attr_latex: :width 0.3\linewidth
[[file:figs/flexible_joint_axis.png]]
The dimensions of the flexible part in the Y-Z plane will contribute to the X-bending stiffness.
Similarly, the dimensions of the flexible part in the X-Z plane will contribute to the Y-bending stiffness.
The setup to measure the dimension of the "Y" flexible beam is shown in Figure [[fig:flexible_joint_y_flex_meas_setup]].
#+name: fig:flexible_joint_y_flex_meas_setup
#+caption: Setup to measure the dimension of the flexible beam corresponding to the X-bending stiffness
#+attr_latex: :width 1.0\linewidth
[[file:figs/flexible_joint_y_flex_meas_setup.png]]
What we typically observe is shown in Figure [[fig:soft_measure_flex_size]].
It is then possible to estimate to dimension of the flexible beam with an accuracy of $\approx 5\,\mu m$,
#+name: fig:soft_measure_flex_size
#+attr_latex: :width 1.0\linewidth
#+caption: Image used to measure the flexible joint's dimensions
[[file:figs/soft_measure_flex_size.jpg]]
#+name: flex_dim
#+caption: Table caption
#+attr_latex: :environment tabularx :width 0.6\linewidth :align Xcccc
#+attr_latex: :center t :booktabs t :float t
| Num | X1 | X2 | Y1 | Y2 |
|-----+-----+-----+-----+-----|
| 1 | 224 | 214 | 223 | 226 |
| 2 | 237 | 224 | 229 | 231 |
| 3 | 239 | 231 | 234 | 230 |
| 4 | 229 | 232 | 233 | 227 |
| 5 | 228 | 228 | 225 | 212 |
| 6 | 224 | 220 | 220 | 221 |
| 7 | 228 | 226 | 206 | 207 |
| 8 | 224 | 223 | 230 | 224 |
| 9 | 228 | 233 | 223 | 231 |
| 10 | 235 | 231 | 228 | 230 |
| 11 | 211 | 204 | 197 | 207 |
| 12 | 225 | 226 | 227 | 226 |
| 13 | 231 | 220 | 215 | 228 |
| 14 | 224 | 221 | 216 | 224 |
| 15 | 220 | 221 | 209 | 214 |
| 16 | 230 | 229 | 213 | 210 |
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
@ -150,12 +159,82 @@ addpath('./matlab/');
addpath('./mat/');
#+end_src
** Analysis
** Measurement Results
# - Strange shape: 5
#+begin_src matlab :var data=flex_dim
mean(data(:,2:end))
std(data(:,2:end))
std(data(:,2:end)')
The expected flexible beam thickness is $250\,\mu m$.
However, it is more important that the thickness of all beams are close to each other.
The dimension of the beams are been measured at each end to be able to estimate the mean of the beam thickness.
All the measured dimensions are summarized in Table [[tab:flex_dim]].
#+begin_src matlab :exports none
meas_flex = [[223, 226, 224, 214];
[229, 231, 237, 224];
[234, 230, 239, 231];
[233, 227, 229, 232];
[225, 212, 228, 228];
[220, 221, 224, 220];
[206, 207, 228, 226];
[230, 224, 224, 223];
[223, 231, 228, 233];
[228, 230, 235, 231];
[197, 207, 211, 204];
[227, 226, 225, 226];
[215, 228, 231, 220];
[216, 224, 224, 221];
[209, 214, 220, 221];
[213, 210, 230, 229]];
#+end_src
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable(meas_flex, {'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'}, {'X1', 'X2', 'X3', 'X4'}, ' %.0f ');
#+end_src
#+name: tab:flex_dim
#+caption: Measured Dimensions of the flexible beams in $\mu m$
#+attr_latex: :environment tabularx :width 0.4\linewidth :align Xcccc
#+attr_latex: :center t :booktabs t :float t
#+RESULTS:
| | X1 | X2 | X3 | X4 |
|----+-----+-----+-----+-----|
| 1 | 223 | 226 | 224 | 214 |
| 2 | 229 | 231 | 237 | 224 |
| 3 | 234 | 230 | 239 | 231 |
| 4 | 233 | 227 | 229 | 232 |
| 5 | 225 | 212 | 228 | 228 |
| 6 | 220 | 221 | 224 | 220 |
| 7 | 206 | 207 | 228 | 226 |
| 8 | 230 | 224 | 224 | 223 |
| 9 | 223 | 231 | 228 | 233 |
| 10 | 228 | 230 | 235 | 231 |
| 11 | 197 | 207 | 211 | 204 |
| 12 | 227 | 226 | 225 | 226 |
| 13 | 215 | 228 | 231 | 220 |
| 14 | 216 | 224 | 224 | 221 |
| 15 | 209 | 214 | 220 | 221 |
| 16 | 213 | 210 | 230 | 229 |
An histogram of these measured dimensions is shown in Figure [[fig:beam_dim_histogram]].
#+begin_src matlab :exports none
figure;
histogram([(meas_flex(:,1)+meas_flex(:,2))/2,(meas_flex(:,3)+meas_flex(:,4))/2], 7)
xlabel("Beam's Thickness [$\mu m$]");
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/beam_dim_histogram.pdf', 'width', 'normal', 'height', 'normal');
#+end_src
#+name: fig:beam_dim_histogram
#+caption: Histogram for the (16x2) measured beams' thickness
#+RESULTS:
[[file:figs/beam_dim_histogram.png]]
#+begin_src matlab :tangle no :exports none
save('matlab/mat/flex_meas_dim.mat', 'meas_flex');
#+end_src
* Measurement Test Bench - Bending Stiffness
@ -789,7 +868,38 @@ The Millimar 1318 probe has a stiffness of $\approx 0.04\,[N/mm]$.
#+end_summary
* Bending Stiffness Measurement
:PROPERTIES:
:header-args:matlab+: :tangle ./matlab/bending_stiff_meas.m
:END:
<<sec:bending_stiffness_meas>>
** Introduction
A picture of the bench used to measure the X-bending stiffness of the flexible joints is shown in Figure [[fig:picture_bending_x_meas_side_overview]].
A closer view on flexible joint is shown in Figure [[fig:picture_bending_x_meas_side_close]] and a zoom on the force sensor tip is shown in Figure [[fig:picture_bending_x_meas_side_zoom]].
#+name: fig:picture_bending_x_meas_side_overview
#+caption: Side view of the flexible joint stiffness bench. X-Bending stiffness is measured.
#+attr_latex: :width \linewidth
[[file:figs/picture_bending_x_meas_side_overview.jpg]]
#+name: fig:picture_bending_x_meas_side_close
#+caption: Zoom on the flexible joint - Side view
#+attr_latex: :width \linewidth
[[file:figs/picture_bending_x_meas_side_close.jpg]]
#+name: fig:picture_bending_x_meas_side_zoom
#+caption: Zoom on the tip of the force sensor
#+attr_latex: :width 0.4\linewidth
[[file:figs/picture_bending_x_meas_side_zoom.jpg]]
The same bench used to measure the Y-bending stiffness of the flexible joint is shown in Figure [[fig:picture_bending_y_meas_side_close]].
#+name: fig:picture_bending_y_meas_side_close
#+caption: Stiffness measurement bench - Y-d bending measurement
#+attr_latex: :width \linewidth
[[file:figs/picture_bending_y_meas_side_close.jpg]]
** 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>>
@ -808,21 +918,34 @@ addpath('./matlab/');
addpath('./mat/');
#+end_src
** Results
** Analysis of one measurement
In this section is shown how the data are analysis in order to measured:
- the bending stiffness
- the bending stroke
- the stiffness once the mechanical stops are in contact
The height from the flexible joint's center and the point of application force $h$ is defined below:
#+begin_src matlab
load('meas_stiff_flex_12_x.mat', 't', 'd', 'F');
h = 25e-3; % [m]
#+end_src
#+begin_src matlab
d = d(t > 5.35 & t < 14.0);
F = F(t > 5.35 & t < 14.0);
t = t(t > 5.35 & t < 14.0);
%% Load Data
load('meas_stiff_flex_1_x.mat', 't', 'F', 'd');
d = d - d(1);
F = F - F(1);
t = t - t(1);
%% Zero the force
F = F - mean(F(t > 0.1 & t < 0.3));
%% Start measurement at t = 0.2 s
d = d(t > 0.2);
F = F(t > 0.2);
t = t(t > 0.2); t = t - t(1);
#+end_src
The obtained time domain measurements are shown in Figure [[fig:flex_joint_meas_example_time_domain]].
#+begin_src matlab :exports none
%% Time Domain plots
figure;
@ -833,98 +956,67 @@ plot(t, F);
ylabel('Force [N]'); set(gca, 'XTickLabel',[]);
ax2 = nexttile;
plot(t, d);
xlabel('Time [s]'); ylabel('Displacement [m]');
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(F, d, 'DisplayName', 'Raw data');
% plot(F, F/(d\F), 'DisplayName', 'Linear fit');
plot(t, 1e3*d);
hold off;
xlabel('Measured Force [N]');
ylabel('Measured Displacement [m]');
legend('location', 'southeast');
#+end_src
#+begin_src matlab
ta = [0.05, 1.13];
tb = [5.75, 7.2];
d_l = [d(t > ta(1) & t < ta(2)); d(t > tb(1) & t < tb(2))];
F_l = [F(t > ta(1) & t < ta(2)); F(t > tb(1) & t < tb(2))];
d_l = d_l - d_l(1);
F_l = F_l - F_l(1);
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(F_l, d_l, '.', 'DisplayName', 'Raw data');
plot(F_l, F_l/(d_l\F_l), 'DisplayName', 'Linear fit');
hold off;
xlabel('Measured Force [N]');
ylabel('Measured Displacement [m]');
legend('location', 'southeast');
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
h = 25e-3;
sprintf('Stiffness is %.3f [Nm/rad]', abs(h^2*(d_l\F_l)))
#+end_src
#+RESULTS:
: Stiffness is 5.579 [Nm/rad]
** Results - Y
#+begin_src matlab
load('meas_stiff_flex_12_y.mat', 't', 'd', 'F');
#+end_src
#+begin_src matlab
%% Automatic Zero of the force
F = F - mean(F(t > 0.9 & t < 1.1));
%% Start measurement at t = 1.0 s
d = d(t > 1.0);
F = F(t > 1.0);
t = t(t > 1.0); t = t - t(1);
#+end_src
#+begin_src matlab :exports none
%% 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);
hold off;
xlabel('Time [s]'); ylabel('Displacement [m]');
xlabel('Time [s]'); ylabel('Displacement [mm]');
linkaxes([ax1,ax2],'x');
xlim([0,5]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/flex_joint_meas_example_time_domain.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:flex_joint_meas_example_time_domain
#+caption: Typical time domain measurements
#+RESULTS:
[[file:figs/flex_joint_meas_example_time_domain.png]]
The displacement as a function of the force is then shown in Figure [[fig:flex_joint_meas_example_F_d]].
#+begin_src matlab :exports none
figure;
plot(F, 1e3*d);
xlabel('Force [N]'); ylabel('Displacement [mm]');
xlim([0,6]); ylim([0,1]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/flex_joint_meas_example_F_d.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:flex_joint_meas_example_F_d
#+caption: Typical measurement of the diplacement as a function of the applied force
#+RESULTS:
[[file:figs/flex_joint_meas_example_F_d.png]]
The bending stiffness can be estimated by computing the slope of the curve in Figure [[fig:flex_joint_meas_example_F_d]].
The bending stroke and the stiffness when touching the mechanical stop can also be estimated from the same figure.
#+begin_src matlab
%% Determine the linear region and region when touching the mechanical stop
% Find when the force sensor touches the flexible joint
i_l_start = find(F > 0.3, 1, 'first');
% Reset the measured diplacement at that point
d = d - d(i_l_start);
% Find then the maximum force is applied
[~, i_s_stop] = max(F);
% Linear region stops ~ when 90% of the stroke is reached
i_l_stop = find(d > 0.9*d(i_s_stop), 1, 'first');
% "Stop" region start ~1N before maximum force is applied
i_s_start = find(F > max(F)-1, 1, 'first');
%% Define variables for the two regions
F_l = F(i_l_start:i_l_stop);
d_l = d(i_l_start:i_l_stop);
F_s = F(i_s_start:i_s_stop);
d_s = d(i_s_start:i_s_stop);
#+end_src
#+begin_src matlab
t_l = [5.58, 6.75]; % Time of flexible joint's linear region
t_s = [6.9, 7.24]; % Time of stop's linear region
#+end_src
#+begin_src matlab :exports none
%% Linear Fit
h = 25e-3;
F_l = F(t > t_l(1) & t < t_l(2));
d_l = d(t > t_l(1) & t < t_l(2));
F_s = F(t > t_s(1) & t < t_s(2));
d_s = d(t > t_s(1) & t < t_s(2));
%% Fit the best straight line for the two regions
fit_l = polyfit(F_l, d_l, 1);
fit_s = polyfit(F_s, d_s, 1);
@ -932,217 +1024,283 @@ fit_s = polyfit(F_s, d_s, 1);
d = d - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0;
%% Estimated Stroke
F_max = fit_s(2)/(fit_l(1) - fit_s(1));
d_max = fit_l(1)*F_max;
#+end_src
The raw data as well as the fit corresponding to the two stiffnesses are shown in Figure [[fig:flex_joint_meas_example_F_d_lin_fit]].
#+begin_src matlab :exports none
figure;
hold on;
% plot(F_l, d_l, 'k.', 'DisplayName', 'Raw Data');
% plot(F_s, d_s, 'k.', 'HandleVisibility', 'off');
plot(F, d, 'k.', 'DisplayName', 'Raw data');
set(gca,'ColorOrderIndex',1)
plot(F_l, fit_l(1)*F_l + fit_l(2), '--', 'DisplayName', sprintf('$k_{R_x} = %.1f [Nm/rad]$', (h)^2/fit_l(1)));
plot(F_s, fit_s(1)*F_s + fit_s(2), '--', 'DisplayName', sprintf('$k_s = %.1f [Nm/rad]$', (h)^2/fit_s(1)));
plot([0.8*F_max, 1.2*F_max], [d_max, d_max], '--', 'DisplayName', sprintf('$R_{x,max} = %.1f [mrad]$', 1e3*atan2(d_max,h)));
plot(F(1:i_s_stop), 1e3*d(1:i_s_stop), '.k')
plot(F_l, 1e3*(F_l*fit_l(1) + fit_l(2)))
plot(F_s, 1e3*(F_s*fit_s(1) + fit_s(2)))
hold off;
xlabel('Measured Force [N]');
ylabel('Measured Displacement [m]');
legend('location', 'southeast');
ylim([-1e-4,inf])
xlabel('Force [N]'); ylabel('Displacement [mm]');
xlim([0,6]);
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('Bending Stiffness is %.1f [Nm/rad]', (h)^2/fit_l(1))
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/flex_joint_meas_example_F_d_lin_fit.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:flex_joint_meas_example_F_d_lin_fit
#+caption: Typical measurement of the diplacement as a function of the applied force with estimated linear fits
#+RESULTS:
: Bending Stiffness is 5.5 [Nm/rad]
[[file:figs/flex_joint_meas_example_F_d_lin_fit.png]]
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('Bending Stroke is %.1f [mrad]', 1e3*atan2(d_max,h))
Then, the bending stroke is estimated as crossing point between the two fitted lines:
#+begin_src matlab
d_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1));
#+end_src
The obtained characteristics are summarized in Table [[tab:obtained_caracteristics_flex_1_x]].
#+begin_src matlab :exports results :results value table replace :tangle no
data2orgtable([(h)^2/fit_l(1); (h)^2/fit_s(1); 1e3*atan2(d_max,h)], {'Bending Stiffness [Nm/rad]', 'Bending Stiffness @ stop [Nm/rad]', 'Bending Stroke [mrad]'}, {}, ' %.1f ');
#+end_src
#+name: tab:obtained_caracteristics_flex_1_x
#+caption: Estimated characteristics of the flexible joint number 1 for the X-direction
#+attr_latex: :environment tabularx :width 0.5\linewidth :align lc
#+attr_latex: :center t :booktabs t :float t
#+RESULTS:
: Bending Stroke is 17.9 [mrad]
| Bending Stiffness [Nm/rad] | 5.5 |
| Bending Stiffness @ stop [Nm/rad] | 173.6 |
| Bending Stroke [mrad] | 18.9 |
** Results - X
#+begin_src matlab
load('meas_stiff_flex_12_x.mat', 't', 'd', 'F');
#+end_src
** Bending stiffness and bending stroke of all the flexible joints
#+begin_src matlab
%% Automatic Zero of the force
F = F - mean(F(t > 0.9 & t < 1.1));
Now, let's estimate the bending stiffness and stroke for all the flexible joints.
%% Start measurement at t = 1.0 s
d = d(t > 1.0);
F = F(t > 1.0);
t = t(t > 1.0); t = t - t(1);
#+begin_src matlab :exports none
%% Initialize variables
kRx = zeros(1,16);
kSx = zeros(1,16);
Rmx = zeros(1,16);
for i = 1:16
%% Load the data
load(['meas_stiff_flex_' num2str(i) '_x.mat'], 't', 'F', 'd');
%% Automatic Zero of the force
F = F - mean(F(t > 0.1 & t < 0.3));
%% Start measurement at t = 0.2 s
d = d(t > 0.2);
F = F(t > 0.2);
t = t(t > 0.2); t = t - t(1);
%% Estimate linear region and "stop" region
i_l_start = find(F > 0.3, 1, 'first');
d = d - d(i_l_start);
[~, i_s_stop] = max(F);
i_l_stop = find(d > 0.9*d(i_s_stop), 1, 'first');
i_s_start = find(F > max(F)-1, 1, 'first');
F_l = F(i_l_start:i_l_stop);
d_l = d(i_l_start:i_l_stop);
F_s = F(i_s_start:i_s_stop);
d_s = d(i_s_start:i_s_stop);
%% Straight line fit
fit_l = polyfit(F_l, d_l, 1);
fit_s = polyfit(F_s, d_s, 1);
%% Reset displacement based on fit
d = d - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0;
%% Estimated Stroke
d_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1));
%% Save stiffnesses and stroke
kRx(i) = (h)^2/fit_l(1);
kSx(i) = (h)^2/fit_s(1);
Rmx(i) = atan2(d_max,h);
end
#+end_src
#+begin_src matlab :exports none
%% Time Domain plots
figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
%% Initialize variables
kRy = zeros(1,16);
kSy = zeros(1,16);
Rmy = zeros(1,16);
ax1 = nexttile;
plot(t, F);
ylabel('Force [N]'); set(gca, 'XTickLabel',[]);
for i = 1:16
%% Load the data
load(['meas_stiff_flex_' num2str(i) '_y.mat'], 't', 'F', 'd');
ax2 = nexttile;
plot(t, d);
hold off;
xlabel('Time [s]'); ylabel('Displacement [m]');
%% Automatic Zero of the force
F = F - mean(F(t > 0.1 & t < 0.3));
linkaxes([ax1,ax2],'x');
%% Start measurement at t = 0.2 s
d = d(t > 0.2);
F = F(t > 0.2);
t = t(t > 0.2); t = t - t(1);
%% Estimate linear region and "stop" region
i_l_start = find(F > 0.3, 1, 'first');
d = d - d(i_l_start);
[~, i_s_stop] = max(F);
i_l_stop = find(d > 0.9*d(i_s_stop), 1, 'first');
i_s_start = find(F > max(F)-1, 1, 'first');
F_l = F(i_l_start:i_l_stop);
d_l = d(i_l_start:i_l_stop);
F_s = F(i_s_start:i_s_stop);
d_s = d(i_s_start:i_s_stop);
%% Straight line fit
fit_l = polyfit(F_l, d_l, 1);
fit_s = polyfit(F_s, d_s, 1);
%% Reset displacement based on fit
d = d - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0;
%% Estimated Stroke
d_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1));
%% Save stiffnesses and stroke
kRy(i) = (h)^2/fit_l(1);
kSy(i) = (h)^2/fit_s(1);
Rmy(i) = atan2(d_max,h);
end
#+end_src
#+begin_src matlab
t_l = [4.365, 5.47]; % Time of flexible joint's linear region
t_s = [5.65, 6.09]; % Time of stop's linear region
The results are summarized in Table [[tab:meas_flexible_joints_x_dir]] for the X direction and in Table [[tab:meas_flexible_joints_y_dir]] for the Y direction.
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable([kRx; kSx; 1e3*Rmx]', {'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'}, {'$R_{R_x}$ [Nm/rad]', '$k_{R_x,s}$ [Nm/rad]', '$R_{x,\text{max}}$ [mrad]'}, ' %.1f ');
#+end_src
#+begin_src matlab :exports none
%% Linear Fit
h = 25e-3;
#+name: tab:meas_flexible_joints_x_dir
#+caption: Measured characteristics of the flexible joints in the X direction
#+attr_latex: :environment tabularx :width 0.6\linewidth :align cccc
#+attr_latex: :center t :booktabs t :float t
#+RESULTS:
| | $R_{R_x}$ [Nm/rad] | $k_{R_x,s}$ [Nm/rad] | $R_{x,\text{max}}$ [mrad] |
|----+--------------------+----------------------+---------------------------|
| 1 | 5.5 | 173.6 | 18.9 |
| 2 | 6.1 | 195.0 | 17.6 |
| 3 | 6.1 | 191.3 | 17.7 |
| 4 | 5.8 | 136.7 | 18.3 |
| 5 | 5.7 | 88.9 | 22.0 |
| 6 | 5.7 | 183.9 | 18.7 |
| 7 | 5.7 | 157.9 | 17.9 |
| 8 | 5.8 | 166.1 | 17.9 |
| 9 | 5.8 | 159.5 | 18.2 |
| 10 | 6.0 | 143.6 | 18.1 |
| 11 | 5.0 | 163.8 | 17.7 |
| 12 | 6.1 | 111.9 | 17.0 |
| 13 | 6.0 | 142.0 | 17.4 |
| 14 | 5.8 | 130.1 | 17.9 |
| 15 | 5.7 | 170.7 | 18.6 |
| 16 | 6.0 | 148.7 | 17.5 |
F_l = F(t > t_l(1) & t < t_l(2));
d_l = d(t > t_l(1) & t < t_l(2));
F_s = F(t > t_s(1) & t < t_s(2));
d_s = d(t > t_s(1) & t < t_s(2));
fit_l = polyfit(F_l, d_l, 1);
fit_s = polyfit(F_s, d_s, 1);
%% Reset displacement based on fit
d = d - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0;
%% Estimated Stroke
F_max = fit_s(2)/(fit_l(1) - fit_s(1));
d_max = fit_l(1)*F_max;
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable([kRy; kSy; 1e3*Rmy]', {'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'}, {'$R_{R_y}$ [Nm/rad]', '$k_{R_y,s}$ [Nm/rad]', '$R_{y,\text{may}}$ [mrad]'}, ' %.1f ');
#+end_src
#+name: tab:meas_flexible_joints_y_dir
#+caption: Measured characteristics of the flexible joints in the Y direction
#+attr_latex: :environment tabularx :width 0.6\linewidth :align cccc
#+attr_latex: :center t :booktabs t :float t
#+RESULTS:
| | $R_{R_y}$ [Nm/rad] | $k_{R_y,s}$ [Nm/rad] | $R_{y,\text{may}}$ [mrad] |
|----+--------------------+----------------------+---------------------------|
| 1 | 5.7 | 323.5 | 17.9 |
| 2 | 5.9 | 306.0 | 17.2 |
| 3 | 6.0 | 224.4 | 16.8 |
| 4 | 5.7 | 247.3 | 17.8 |
| 5 | 5.8 | 250.9 | 13.0 |
| 6 | 5.8 | 244.5 | 17.8 |
| 7 | 5.3 | 214.8 | 18.1 |
| 8 | 5.8 | 217.2 | 17.6 |
| 9 | 5.7 | 225.0 | 17.6 |
| 10 | 6.0 | 254.7 | 17.3 |
| 11 | 4.9 | 261.1 | 18.4 |
| 12 | 5.9 | 161.5 | 16.7 |
| 13 | 6.1 | 227.6 | 16.8 |
| 14 | 5.9 | 221.3 | 17.8 |
| 15 | 5.4 | 241.5 | 17.8 |
| 16 | 5.3 | 291.1 | 17.7 |
** Analysis
The dispersion of the measured bending stiffness is shown in Figure [[fig:bending_stiffness_histogram]] and of the bending stroke in Figure [[fig:bending_stroke_histogram]].
#+begin_src matlab :exports none
figure;
hold on;
plot(F, d, 'k.', 'DisplayName', 'Raw data');
set(gca,'ColorOrderIndex',1)
plot(F_l, fit_l(1)*F_l + fit_l(2), '-', 'DisplayName', sprintf('$k_{R_x} = %.1f [Nm/rad]$', (h)^2/fit_l(1)));
plot(F_s, fit_s(1)*F_s + fit_s(2), '-', 'DisplayName', sprintf('$k_s = %.1f [Nm/rad]$', (h)^2/fit_s(1)));
plot([0.8*F_max, 1.2*F_max], [d_max, d_max], '-', 'DisplayName', sprintf('$R_{x,max} = %.1f [mrad]$', 1e3*atan2(d_max,h)));
histogram(kRx, 'DisplayName', '$k_{R_x}$')
histogram(kRy, 'DisplayName', '$k_{R_y}$')
hold off;
xlabel('Measured Force [N]');
ylabel('Measured Displacement [m]');
legend('location', 'southeast');
ylim([-1e-4,inf])
xlabel('Bending Stiffness [Nm/rad]')
legend();
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('Bending Stiffness is %.1f [Nm/rad]', (h)^2/fit_l(1))
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/bending_stiffness_histogram.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:bending_stiffness_histogram
#+caption: Histogram of the measured bending stiffness
#+RESULTS:
: Bending Stiffness is 5.7 [Nm/rad]
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('Bending Stroke is %.1f [mrad]', 1e3*atan2(d_max,h))
#+end_src
#+RESULTS:
: Bending Stroke is 17.9 [mrad]
** Results - XY
#+begin_src matlab
load('meas_stiff_flex_12_xy.mat', 't', 'd', 'F');
#+end_src
#+begin_src matlab
%% Automatic Zero of the force
F = F - mean(F(t > 0.9 & t < 1.1));
%% Start measurement at t = 1.0 s
d = d(t > 1.0);
F = F(t > 1.0);
t = t(t > 1.0); t = t - t(1);
#+end_src
#+begin_src matlab :exports none
%% 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);
hold off;
xlabel('Time [s]'); ylabel('Displacement [m]');
linkaxes([ax1,ax2],'x');
#+end_src
#+begin_src matlab
t_l = [4.99, 6.5]; % Time of flexible joint's linear region
t_s = [6.8, 7.10]; % Time of stop's linear region
#+end_src
#+begin_src matlab :exports none
%% Linear Fit
h = 25e-3;
F_l = F(t > t_l(1) & t < t_l(2));
d_l = d(t > t_l(1) & t < t_l(2));
F_s = F(t > t_s(1) & t < t_s(2));
d_s = d(t > t_s(1) & t < t_s(2));
fit_l = polyfit(F_l, d_l, 1);
fit_s = polyfit(F_s, d_s, 1);
%% Reset displacement based on fit
d = d - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0;
%% Estimated Stroke
F_max = fit_s(2)/(fit_l(1) - fit_s(1));
d_max = fit_l(1)*F_max;
#+end_src
[[file:figs/bending_stiffness_histogram.png]]
#+begin_src matlab :exports none
figure;
hold on;
plot(F, d, 'k.', 'DisplayName', 'Raw data');
set(gca,'ColorOrderIndex',1)
plot(F_l, fit_l(1)*F_l + fit_l(2), '-', 'DisplayName', sprintf('$k_{R_x} = %.1f [Nm/rad]$', (h)^2/fit_l(1)));
plot(F_s, fit_s(1)*F_s + fit_s(2), '-', 'DisplayName', sprintf('$k_s = %.1f [Nm/rad]$', (h)^2/fit_s(1)));
plot([0.8*F_max, 1.2*F_max], [d_max, d_max], '-', 'DisplayName', sprintf('$R_{x,max} = %.1f [mrad]$', 1e3*atan2(d_max,h)));
histogram(1e3*Rmx, 'DisplayName', '$k_{R_x}$')
histogram(1e3*Rmy, 'DisplayName', '$k_{R_y}$')
hold off;
xlabel('Measured Force [N]');
ylabel('Measured Displacement [m]');
xlabel('Bending Stroke [mrad]')
legend();
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/bending_stroke_histogram.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:bending_stroke_histogram
#+caption: Histogram of the measured bending stroke
#+RESULTS:
[[file:figs/bending_stroke_histogram.png]]
The relation between the measured beam thickness and the measured bending stiffness is shown in Figure [[fig:flex_thickness_vs_bending_stiff]].
#+begin_src matlab :exports none
load('flex_meas_dim.mat', 'meas_flex');
figure;
hold on;
plot((meas_flex(:,1)+meas_flex(:,2))/2, kRx, 'o', 'DisplayName', '$x$')
plot((meas_flex(:,3)+meas_flex(:,4))/2, kRy, 'o', 'DisplayName', '$y$')
hold off;
xlabel('Flexible Beam Thickness [$\mu m$]');
ylabel('Bending Stiffness [Nm/rad]');
legend('location', 'southeast');
ylim([-1e-4,inf])
#+end_src
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('Bending Stiffness is %.1f [Nm/rad]', (h)^2/fit_l(1))
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/flex_thickness_vs_bending_stiff.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:flex_thickness_vs_bending_stiff
#+caption: Measured bending stiffness as a function of the estimated flexible beam thickness
#+RESULTS:
: Bending Stiffness is 5.6 [Nm/rad]
[[file:figs/flex_thickness_vs_bending_stiff.png]]
#+begin_src matlab :results value replace :exports results :tangle no
sprintf('Bending Stroke is %.1f [mrad]', 1e3*atan2(d_max,h))
#+end_src
** Conclusion
#+begin_important
The measured bending stiffness and bending stroke of the flexible joints are very close to the estimated one using a Finite Element Model.
The characteristics of all the flexible joints are also quite close to each other.
This should allow us to model them with unique parameters.
#+end_important
#+RESULTS:
: Bending Stroke is 23.1 [mrad]

Binary file not shown.