Analyze measurement of flexible joints
BIN
figs/CaptureScreen_1.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
figs/CaptureScreen_2.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
figs/IMG_20210302_144000.jpg
Normal file
After Width: | Height: | Size: 3.8 MiB |
BIN
figs/IMG_20210302_173619.jpg
Normal file
After Width: | Height: | Size: 415 KiB |
BIN
figs/beam_dim_histogram.pdf
Normal file
BIN
figs/beam_dim_histogram.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
figs/bending_stiffness_histogram.pdf
Normal file
BIN
figs/bending_stiffness_histogram.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
figs/bending_stroke_histogram.pdf
Normal file
BIN
figs/bending_stroke_histogram.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
figs/flex_joint_meas_example_F_d.pdf
Normal file
BIN
figs/flex_joint_meas_example_F_d.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
figs/flex_joint_meas_example_F_d_lin_fit.pdf
Normal file
BIN
figs/flex_joint_meas_example_F_d_lin_fit.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
figs/flex_joint_meas_example_time_domain.pdf
Normal file
BIN
figs/flex_joint_meas_example_time_domain.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
figs/flex_thickness_vs_bending_stiff.pdf
Normal file
BIN
figs/flex_thickness_vs_bending_stiff.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
figs/flexible_joint_axis.pdf
Normal file
BIN
figs/flexible_joint_axis.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
2409
figs/flexible_joint_axis.svg
Normal file
After Width: | Height: | Size: 167 KiB |
BIN
figs/flexible_joint_y_flex_meas_setup.jpg
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
figs/flexible_joint_y_flex_meas_setup.pdf
Normal file
BIN
figs/flexible_joint_y_flex_meas_setup.png
Normal file
After Width: | Height: | Size: 630 KiB |
BIN
figs/picture_bending_x_meas_side_close.jpg
Normal file
After Width: | Height: | Size: 230 KiB |
BIN
figs/picture_bending_x_meas_side_overview.jpg
Normal file
After Width: | Height: | Size: 233 KiB |
BIN
figs/picture_bending_x_meas_side_zoom.jpg
Normal file
After Width: | Height: | Size: 237 KiB |
BIN
figs/picture_bending_y_meas_side_close.jpg
Normal file
After Width: | Height: | Size: 212 KiB |
BIN
figs/setup_meas_flex_dim_y.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
figs/soft_measure_flex_size.jpg
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
matlab/mat/flex_meas_dim.mat
Normal 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]
|
||||
|