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: 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: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: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:first_measurements]]: first measurements are performed
- Section [[sec:bending_stiffness_meas]]: the bending stiffness of the flexible joints are measured - 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]] [[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 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: * Dimensional Measurements
- dirt inside: 3,10,12,13 :PROPERTIES:
- strange surface quality: 15,16 :header-args:matlab+: :tangle ./matlab/dim_meas.m
- Strange shape: 5 :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: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+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/'); addpath('./mat/');
#+end_src #+end_src
** Analysis ** Measurement Results
# - Strange shape: 5
#+begin_src matlab :var data=flex_dim The expected flexible beam thickness is $250\,\mu m$.
mean(data(:,2:end)) However, it is more important that the thickness of all beams are close to each other.
std(data(:,2:end))
std(data(:,2:end)') 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 #+end_src
* Measurement Test Bench - Bending Stiffness * Measurement Test Bench - Bending Stiffness
@ -789,7 +868,38 @@ The Millimar 1318 probe has a stiffness of $\approx 0.04\,[N/mm]$.
#+end_summary #+end_summary
* Bending Stiffness Measurement * Bending Stiffness Measurement
:PROPERTIES:
:header-args:matlab+: :tangle ./matlab/bending_stiff_meas.m
:END:
<<sec:bending_stiffness_meas>> <<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: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
@ -808,21 +918,34 @@ addpath('./matlab/');
addpath('./mat/'); addpath('./mat/');
#+end_src #+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 #+begin_src matlab
load('meas_stiff_flex_12_x.mat', 't', 'd', 'F'); h = 25e-3; % [m]
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
d = d(t > 5.35 & t < 14.0); %% Load Data
F = F(t > 5.35 & t < 14.0); load('meas_stiff_flex_1_x.mat', 't', 'F', 'd');
t = t(t > 5.35 & t < 14.0);
d = d - d(1); %% Zero the force
F = F - F(1); F = F - mean(F(t > 0.1 & t < 0.3));
t = t - t(1);
%% 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 #+end_src
The obtained time domain measurements are shown in Figure [[fig:flex_joint_meas_example_time_domain]].
#+begin_src matlab :exports none #+begin_src matlab :exports none
%% Time Domain plots %% Time Domain plots
figure; figure;
@ -833,98 +956,67 @@ plot(t, F);
ylabel('Force [N]'); set(gca, 'XTickLabel',[]); ylabel('Force [N]'); set(gca, 'XTickLabel',[]);
ax2 = nexttile; ax2 = nexttile;
plot(t, d); plot(t, 1e3*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');
hold off; hold off;
xlabel('Measured Force [N]'); xlabel('Time [s]'); ylabel('Displacement [mm]');
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]');
linkaxes([ax1,ax2],'x'); 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 #+end_src
#+begin_src matlab #+begin_src matlab
t_l = [5.58, 6.75]; % Time of flexible joint's linear region %% Fit the best straight line for the two regions
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_l = polyfit(F_l, d_l, 1); fit_l = polyfit(F_l, d_l, 1);
fit_s = polyfit(F_s, d_s, 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); d = d - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2); fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0; 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 #+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 #+begin_src matlab :exports none
figure; figure;
hold on; hold on;
% plot(F_l, d_l, 'k.', 'DisplayName', 'Raw Data'); plot(F(1:i_s_stop), 1e3*d(1:i_s_stop), '.k')
% plot(F_s, d_s, 'k.', 'HandleVisibility', 'off'); plot(F_l, 1e3*(F_l*fit_l(1) + fit_l(2)))
plot(F, d, 'k.', 'DisplayName', 'Raw data'); plot(F_s, 1e3*(F_s*fit_s(1) + fit_s(2)))
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)));
hold off; hold off;
xlabel('Measured Force [N]'); xlabel('Force [N]'); ylabel('Displacement [mm]');
ylabel('Measured Displacement [m]'); xlim([0,6]);
legend('location', 'southeast');
ylim([-1e-4,inf])
#+end_src #+end_src
#+begin_src matlab :results value replace :exports results :tangle no #+begin_src matlab :tangle no :exports results :results file replace
sprintf('Bending Stiffness is %.1f [Nm/rad]', (h)^2/fit_l(1)) exportFig('figs/flex_joint_meas_example_F_d_lin_fit.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+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: #+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 Then, the bending stroke is estimated as crossing point between the two fitted lines:
sprintf('Bending Stroke is %.1f [mrad]', 1e3*atan2(d_max,h)) #+begin_src matlab
d_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1));
#+end_src #+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: #+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 ** Bending stiffness and bending stroke of all the flexible joints
#+begin_src matlab
load('meas_stiff_flex_12_x.mat', 't', 'd', 'F');
#+end_src
#+begin_src matlab Now, let's estimate the bending stiffness and stroke for all the flexible joints.
%% Automatic Zero of the force
F = F - mean(F(t > 0.9 & t < 1.1));
%% Start measurement at t = 1.0 s #+begin_src matlab :exports none
d = d(t > 1.0); %% Initialize variables
F = F(t > 1.0); kRx = zeros(1,16);
t = t(t > 1.0); t = t - t(1); 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 #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
%% Time Domain plots %% Initialize variables
figure; kRy = zeros(1,16);
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None'); kSy = zeros(1,16);
Rmy = zeros(1,16);
ax1 = nexttile; for i = 1:16
plot(t, F); %% Load the data
ylabel('Force [N]'); set(gca, 'XTickLabel',[]); load(['meas_stiff_flex_' num2str(i) '_y.mat'], 't', 'F', 'd');
ax2 = nexttile; %% Automatic Zero of the force
plot(t, d); F = F - mean(F(t > 0.1 & t < 0.3));
hold off;
xlabel('Time [s]'); ylabel('Displacement [m]');
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 #+end_src
#+begin_src matlab 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.
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 #+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 #+end_src
#+begin_src matlab :exports none #+name: tab:meas_flexible_joints_x_dir
%% Linear Fit #+caption: Measured characteristics of the flexible joints in the X direction
h = 25e-3; #+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)); #+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
d_l = d(t > t_l(1) & t < t_l(2)); 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 ');
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 #+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 #+begin_src matlab :exports none
figure; figure;
hold on; hold on;
plot(F, d, 'k.', 'DisplayName', 'Raw data'); histogram(kRx, 'DisplayName', '$k_{R_x}$')
set(gca,'ColorOrderIndex',1) histogram(kRy, 'DisplayName', '$k_{R_y}$')
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)));
hold off; hold off;
xlabel('Measured Force [N]'); xlabel('Bending Stiffness [Nm/rad]')
ylabel('Measured Displacement [m]'); legend();
legend('location', 'southeast');
ylim([-1e-4,inf])
#+end_src #+end_src
#+begin_src matlab :results value replace :exports results :tangle no #+begin_src matlab :tangle no :exports results :results file replace
sprintf('Bending Stiffness is %.1f [Nm/rad]', (h)^2/fit_l(1)) exportFig('figs/bending_stiffness_histogram.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+end_src
#+name: fig:bending_stiffness_histogram
#+caption: Histogram of the measured bending stiffness
#+RESULTS: #+RESULTS:
: Bending Stiffness is 5.7 [Nm/rad] [[file:figs/bending_stiffness_histogram.png]]
#+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
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
hold on; hold on;
plot(F, d, 'k.', 'DisplayName', 'Raw data'); histogram(1e3*Rmx, 'DisplayName', '$k_{R_x}$')
set(gca,'ColorOrderIndex',1) histogram(1e3*Rmy, 'DisplayName', '$k_{R_y}$')
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)));
hold off; hold off;
xlabel('Measured Force [N]'); xlabel('Bending Stroke [mrad]')
ylabel('Measured Displacement [m]'); 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'); legend('location', 'southeast');
ylim([-1e-4,inf])
#+end_src #+end_src
#+begin_src matlab :results value replace :exports results :tangle no #+begin_src matlab :tangle no :exports results :results file replace
sprintf('Bending Stiffness is %.1f [Nm/rad]', (h)^2/fit_l(1)) exportFig('figs/flex_thickness_vs_bending_stiff.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+end_src
#+name: fig:flex_thickness_vs_bending_stiff
#+caption: Measured bending stiffness as a function of the estimated flexible beam thickness
#+RESULTS: #+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 ** Conclusion
sprintf('Bending Stroke is %.1f [mrad]', 1e3*atan2(d_max,h)) #+begin_important
#+end_src 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.