Compare commits

..

No commits in common. "bb1364416bab5aa5a2ebfd9a6f1ddf7e805b73cf" and "f7510ef5c4e29f7fddee5d71af92af30d6ebb218" have entirely different histories.

17 changed files with 354 additions and 226 deletions

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -345,9 +345,7 @@ meas_flex = [[223, 226, 224, 214];
#+begin_src matlab :exports none
%% Histogram of the measured gap
figure;
hold on;
histogram([(meas_flex(:,1)+meas_flex(:,2))/2,(meas_flex(:,3)+meas_flex(:,4))/2], 7)
hold off;
xlabel("Measured beam thickness [$\mu m$]");
xticks([200, 205, 210, 215, 220, 225, 230, 235])
#+end_src
@ -733,6 +731,7 @@ A closer view on the force sensor tip is shown in Figure ref:fig:test_joints_pic
#+end_src
** Load Cell Calibration
In order to estimate the measured errors of the load cell "FC2231", it is compared against another load cell[fn:5].
The two load cells are measured simultaneously while they are pushed against each other (see Figure ref:fig:test_joints_force_sensor_calib_picture).
The contact between the two load cells is well defined as one has a spherical interface while the other has a flat surface.
@ -781,7 +780,7 @@ exportFig('figs/test_joints_force_sensor_calib_fit.pdf', 'width', 'half', 'heigh
#+end_src
#+name: fig:test_joints_force_sensor_calib
#+caption: Estimation of the load cell accuracy. A picture of the measurement bench is shown in (\subref{fig:test_joints_force_sensor_calib_picture}). Comparison of the two measured forces is made in (\subref{fig:test_joints_force_sensor_calib_fit})
#+caption: Caption with reference to sub figure (\subref{fig:test_joints_force_sensor_calib_picture}), (\subref{fig:test_joints_force_sensor_calib_fit})
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_joints_force_sensor_calib_picture}Zoom on the two force sensors in contact}
@ -839,10 +838,10 @@ exportFig('figs/test_joints_force_sensor_stiffness_fit.pdf', 'width', 'half', 'h
#+end_src
#+name: fig:test_joints_meas_force_sensor_stiffness
#+caption: Estimation of the load cell stiffness. Measurement setup is shown in (\subref{fig:test_joints_meas_force_sensor_stiffness_picture}). Measurement results is shown in (\subref{fig:test_joints_force_sensor_stiffness_fit}).
#+caption: Estimation of the load cell stiffness. Measurement setup is shown in (\subref{fig:test_joints_meas_force_sensor_stiffness_picture}). Measurement results is shown in (\subref{fig:test_joints_meas_force_sensor_stiffness_fit}).
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_joints_meas_force_sensor_stiffness_picture}Picture of the measurement bench}
#+attr_latex: :caption \subcaption{\label{fig:test_joints_meas_force_sensor_stiffness_picture}Picture of the test}
#+attr_latex: :options {0.49\textwidth}
#+begin_subfigure
#+attr_latex: :height 5.5cm
@ -867,52 +866,62 @@ The bending stiffness of the flexible joint can be estimated by computing the sl
The bending stroke can also be estimated as shown in Figure ref:fig:test_joints_meas_F_d_lin_fit and is found to be $\theta_{y,\text{max}} = 20.9\,\text{mrad}$.
#+begin_src matlab
%% Estimate the bending stiffness and stroke from the measurement - First Flexible joint
% Load Measured Data for first flexible joint
%% Load Measured Data for first flexible joint
load('meas_stiff_flex_1_x.mat', 't', 'F', 'd');
% Start measurement at t = 0.2 s
%% 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);
% Zero the force
F = F - mean(F(t < 0.2));
%% Compute torque and angular displacement
h = 22.5e-3; % Height [m]
Ty = h * F; % Applied torque in [Nm]
thetay = atan2(d, h); % Measured angle in [rad]
%% Reset the measured angular stroke such that it is equal at zero when the load cell touches the flexible joint
% 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
% thetay = thetay - thetay(i_l_start);
% Compute torque and angular displacement
h = 22.5e-3; % Height [m]
Tx = h * F; % Applied torque in [Nm]
thetax = atan2(d - d(i_l_start), h); % Measured angle in [rad]
%% Determine the linear region and region when touching the mechanical stop
% Find then the maximum torque is applied
[~, i_s_stop] = max(Tx);
[~, i_s_stop] = max(Ty);
% Linear region stops ~ when 90% of the stroke is reached
i_l_stop = find(thetax > 0.9*thetax(i_s_stop), 1, 'first');
i_l_stop = find(thetay > 0.9*thetay(i_s_stop), 1, 'first');
% Mechanical "Stop" region start ~20Nmm before maximum torque is applied
i_s_start = find(Tx > max(Tx)-20e-3, 1, 'first');
i_s_start = find(Ty > max(Ty)-20e-3, 1, 'first');
% Linear fit in the "linear" region
fit_l = polyfit(Tx(i_l_start:i_l_stop), thetax(i_l_start:i_l_stop), 1);
%% Define variables for the two regions
% Linear Region
Ty_l = Ty(i_l_start:i_l_stop);
thetay_l = thetay(i_l_start:i_l_stop);
% Linear fit in the "mechanical stop" region
fit_s = polyfit(Tx(i_s_start:i_s_stop), thetax(i_s_start:i_s_stop), 1);
% "Mechanical stop" Region
Ty_s = Ty(i_s_start:i_s_stop);
thetay_s = thetay(i_s_start:i_s_stop);
% Reset displacement more precisely based on fit
thetax = thetax - fit_l(2);
%% Fit the best straight line for the two regions
fit_l = polyfit(Ty_l, thetay_l, 1);
fit_s = polyfit(Ty_s, thetay_s, 1);
%% Reset displacement more precisely based on fit
thetay = thetay - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0;
%% Estimation of the bending stiffness
kRx_l = 1/fit_l(1); % Bending Stiffness [Nm/rad]
kRx_s = 1/fit_s(1); % Mechanical "Stop" Stiffness [Nm/rad]
kRy_l = 1/fit_l(1); % Bending Stiffness [Nm/rad]
kRy_s = 1/fit_s(1); % Mechanical "Stop" Stiffness [Nm/rad]
%% Estimation of the bending stroke
% This is done by finding the intersection of the two linear fits
theta_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)); % Maximum angular stroke [rad]
Tx_at_theta_max = (fit_s(2) - fit_l(2))/(fit_l(1) - fit_s(1));
Ty_at_theta_max = (fit_s(2) - fit_l(2))/(fit_l(1) - fit_s(1));
#+end_src
#+begin_src matlab :exports none :results none
@ -928,14 +937,14 @@ plot(0.4*cos(0:0.01:2*pi)+3, ...
1.1*sin(0:0.01:2*pi)+4.8, 'k--');
text(3.5, 4.8, sprintf('Mechanical\nStop'), 'horizontalalignment', 'left');
hold off;
ylabel('Force $F_y$ [N]');
ylabel('Force $F_x$ [N]');
ylim([-4, 6])
ylimr = get(gca,'Ylim');
yyaxis right
plot(t, 1e3*d);
xlabel('Time [s]');
ylabel('Displacement $d_y$ [mm]');
ylabel('Displacement $d_x$ [mm]');
xlim([0,5]);
% Make the force and displacement superimpose
ylim([0.364 - 4*(0.8315-0.364)/4.095, 0.364 + 6*(0.8315-0.364)/4.095])
@ -947,23 +956,22 @@ exportFig('figs/test_joints_meas_bend_time.pdf', 'width', 'half', 'height', 'nor
#+begin_src matlab :exports none
% Regions where to plot the fitted data
Tx_l_fit = [0, Tx_at_theta_max];
Tx_s_fit = [Tx_at_theta_max, Tx(i_s_stop)];
Ty_l_fit = [0, Ty_at_theta_max];
Ty_s_fit = [Ty_at_theta_max, Ty(i_s_stop)];
figure;
hold on;
plot(Tx(1:i_s_stop), 1e3*thetax(1:i_s_stop), '-k', 'DisplayName', 'Raw data')
plot(Tx_l_fit, 1e3*(Tx_l_fit*fit_l(1) + fit_l(2)), '--', 'DisplayName', sprintf('$k_{R_x} = %.1f$ Nm/rad', kRx_l))
plot(Tx_s_fit, 1e3*(Tx_s_fit*fit_s(1) + fit_s(2)), '--', 'DisplayName', sprintf('$k_{R_x,stop} = %.0f$ Nm/rad', kRx_s))
plot([0, Tx_at_theta_max], [1e3*theta_max, 1e3*theta_max], 'k--', 'HandleVisibility', 'off')
plot([0, Tx_at_theta_max], [0, 0], 'k--', 'HandleVisibility', 'off')
plot(Ty(1:i_s_stop), 1e3*thetay(1:i_s_stop), '-k', 'DisplayName', 'Raw data')
plot(Ty_l_fit, 1e3*(Ty_l_fit*fit_l(1) + fit_l(2)), '--', 'DisplayName', sprintf('$k_{R_y} = %.1f$ Nm/rad', kRy_l))
plot(Ty_s_fit, 1e3*(Ty_s_fit*fit_s(1) + fit_s(2)), '--', 'DisplayName', sprintf('$k_{R_y,stop} = %.0f$ Nm/rad', kRy_s))
plot([0, Ty_at_theta_max], [1e3*theta_max, 1e3*theta_max], 'k--', 'HandleVisibility', 'off')
anArrow = annotation('doublearrow', 'LineWidth', 0.5);
anArrow.Parent = gca;
anArrow.Position = [0.05, 0, 0, 1e3*fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1))];
text(0.052, 0.4*1e3*fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)), sprintf('$\\theta_{x,\\max} = %.1f$ mrad', 1e3*theta_max), 'horizontalalignment', 'left');
text(0.052, 0.4*1e3*fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)), sprintf('$\\theta_{y,\\max} = %.1f$ mrad', 1e3*theta_max), 'horizontalalignment', 'left');
hold off;
xlabel('Torque $T_x$ [Nm]');
ylabel('Angle $\theta_x$ [mrad]');
xlabel('Torque $T_y$ [Nm]');
ylabel('Angle $\theta_y$ [mrad]');
xlim([0, 0.15]);
ylim([-5,25]);
leg = legend('location', 'southeast', 'FontSize', 8);
@ -975,7 +983,7 @@ exportFig('figs/test_joints_meas_F_d_lin_fit.pdf', 'width', 'half', 'height', 'n
#+end_src
#+name: fig:test_joints_meas_example
#+caption: Results obtained on the first flexible joint. Measured force and displacement are shown in (\subref{fig:test_joints_meas_bend_time}). The estimated angular displacement $\theta_x$ as a function of the estimated applied torque $T_{x}$ is shown in (\subref{fig:test_joints_meas_F_d_lin_fit}). The bending stiffness $k_{R_x}$ of the flexible joint can be estimated by computing a best linear fit (red dashed line).
#+caption: Results obtained on the first flexible joint. Measured force and displacement are shown in (\subref{fig:test_joints_meas_bend_time}). The estimated angular displacement $\theta_y$ as a function of the estimated applied torque $T_{y}$ is shown in (\subref{fig:test_joints_meas_F_d_lin_fit}). The bending stiffness $k_{R_y}$ of the flexible joint can be estimated by computing a best linear fit (red dashed line).
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_joints_meas_bend_time}Force and displacement measured as a function of time}
@ -992,190 +1000,243 @@ exportFig('figs/test_joints_meas_F_d_lin_fit.pdf', 'width', 'half', 'height', 'n
#+end_subfigure
#+end_figure
** Measured flexible joint stiffnesses
The same measurement is performed for all the 16 flexible joints, both in the $x$ and $y$ directions.
The measured angular motion as a function of the applied torque are shown in Figure ref:fig:test_joints_meas_bending_all_raw_data for all the 16 flexible joints.
This gives a first idea of the dispersion of the measured bending stiffnesses (i.e. slope of the linear region) and of the angular stroke.
An histogram of the measured bending stiffnesses is show in Figure ref:fig:test_joints_bend_stiff_hist.
Most of the bending stiffnesses are between $4.6\,Nm/rad$ and $5.0\,Nm/rad$.
** TODO Comparison of the measured Stiffnesses
Now, let's estimate the bending stiffness and stroke for all the flexible joints.
#+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
%% Initialize variables
kRy = zeros(1,16);
kSy = zeros(1,16);
Rmy = zeros(1,16);
for i = 1:16
%% Load the data
load(['meas_stiff_flex_' num2str(i) '_y.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
kRy(i) = (h)^2/fit_l(1);
kSy(i) = (h)^2/fit_s(1);
Rmy(i) = atan2(d_max,h);
end
#+end_src
The results are summarized in Table ref:tab:test_joints_meas_results_x_dir for the X direction and in Table ref:tab:test_joints_meas_results_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
#+name: tab:test_joints_meas_results_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 |
#+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:test_joints_meas_results_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 |
The dispersion of the measured bending stiffness is shown in Figure ref:fig:test_joints_bend_stiff_hist and of the bending stroke in Figure ref:fig:test_joints_bend_stroke_hist.
#+begin_src matlab :exports none
%% Measure the bending stiffness and Stroke for all the flexible joints
figure;
hold on;
histogram(kRx, 'DisplayName', '$k_{R_x}$')
histogram(kRy, 'DisplayName', '$k_{R_y}$')
hold off;
xlabel('Bending Stiffness [Nm/rad]')
legend('FontSize', 8);
#+end_src
%% Start with the X-bending
% Initialize variables
Rx = zeros(1,16); % Bending stiffnesses [Nm/rad]
kSx = zeros(1,16); % Bending stiffnesses at "stop" [Nm/rad]
Rmx = zeros(1,16); % Bending stroke [rad]
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/test_joints_bend_stiff_hist.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
for i = 1:16
% Load the data
load(sprintf('meas_stiff_flex_%i_x.mat', i), 't', 'F', 'd');
#+name: fig:test_joints_bend_stiff_hist
#+caption: Histogram of the measured bending stiffness
#+RESULTS:
[[file:figs/test_joints_bend_stiff_hist.png]]
% 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);
#+begin_src matlab :exports none
figure;
hold on;
histogram(1e3*Rmx, 'DisplayName', '$k_{R_x}$')
histogram(1e3*Rmy, 'DisplayName', '$k_{R_y}$')
hold off;
xlabel('Bending Stroke [mrad]')
legend('FontSize', 8);
#+end_src
% Zero the force
F = F - mean(F(t < 0.2));
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/test_joints_bend_stroke_hist.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
% Find when the force sensor touches the flexible joint
i_l_start = find(F > 0.3, 1, 'first');
#+name: fig:test_joints_bend_stroke_hist
#+caption: Histogram of the measured bending stroke
#+RESULTS:
[[file:figs/test_joints_bend_stroke_hist.png]]
% Zero the displacement when it comes in contact
d = d - d(i_l_start);
The relation between the measured beam thickness and the measured bending stiffness is shown in Figure ref:fig:test_joints_thickness_stiffness.
% Compute torque and angular displacement
h = 22.5e-3; % Height [m]
Tx = h * F; % Applied torque in [Nm]
thetax = atan2(d, h); % Measured angle in [rad]
% Find then the maximum torque is applied
[~, i_s_stop] = max(Tx);
% Linear region stops ~ when 90% of the stroke is reached
i_l_stop = find(thetax > 0.9*thetax(i_s_stop), 1, 'first');
% Mechanical "Stop" region start ~20Nmm before maximum torque is applied
i_s_start = find(Tx > max(Tx)-20e-3, 1, 'first');
% Linear fit in the "linear" region
fit_l = polyfit(Tx(i_l_start:i_l_stop), thetax(i_l_start:i_l_stop), 1);
% Linear fit in the "mechanical stop" region
fit_s = polyfit(Tx(i_s_start:i_s_stop), thetax(i_s_start:i_s_stop), 1);
% Reset displacement more precisely based on fit
thetax = thetax - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0;
% Estimation of the bending stiffness and bending stroke
kRx(i) = 1/fit_l(1); % Bending Stiffness [Nm/rad]
kSx(i) = 1/fit_s(1); % Mechanical "Stop" Stiffness [Nm/rad]
Rmx(i) = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)); % Maximum angular stroke [rad]
if i == 1
plot(Tx(1:10:i_s_stop), 1e3*thetax(1:10:i_s_stop), '-', 'color', [colors(1,:), 0.4], ...
'DisplayName', '$k_{R_x}$')
else
plot(Tx(1:10:i_s_stop), 1e3*thetax(1:10:i_s_stop), '-', 'color', [colors(1,:), 0.4], ...
'HandleVisibility', 'off')
end
end
%% Continue with the Y-bending
% Initialize variables
kRy = zeros(1,16); % Bending stiffnesses [Nm/rad]
kSy = zeros(1,16); % Bending stiffnesses at "stop" [Nm/rad]
Rmy = zeros(1,16); % Bending stroke [rad]
for i = 1:16
% Load the data
load(sprintf('meas_stiff_flex_%i_y.mat', i), 't', 'F', 'd');
% 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);
% Zero the force
F = F - mean(F(t < 0.2));
% Find when the force sensor touches the flexible joint
i_l_start = find(F > 0.3, 1, 'first');
% Zero the displacement when it comes in contact
d = d - d(i_l_start);
% Compute torque and angular displacement
h = 22.5e-3; % Height [m]
Ty = h * F; % Applied torque in [Nm]
thetay = atan2(d, h); % Measured angle in [rad]
% Find then the maximum torque is applied
[~, i_s_stop] = max(Ty);
% Linear region stops ~ when 90% of the stroke is reached
i_l_stop = find(thetay > 0.9*thetay(i_s_stop), 1, 'first');
% Mechanical "Stop" region start ~20Nmm before maximum torque is applied
i_s_start = find(Ty > max(Ty)-20e-3, 1, 'first');
% Linear fit in the "linear" region
fit_l = polyfit(Ty(i_l_start:i_l_stop), thetay(i_l_start:i_l_stop), 1);
% Linear fit in the "mechanical stop" region
fit_s = polyfit(Ty(i_s_start:i_s_stop), thetay(i_s_start:i_s_stop), 1);
% Reset displacement more precisely based on fit
thetay = thetay - fit_l(2);
fit_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0;
% Estimation of the bending stiffness and bending stroke
kRy(i) = 1/fit_l(1); % Bending Stiffness [Nm/rad]
kSy(i) = 1/fit_s(1); % Mechanical "Stop" Stiffness [Nm/rad]
Rmy(i) = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)); % Maximum angular stroke [rad]
if i == 1
plot(Ty(1:10:i_s_stop), 1e3*thetay(1:10:i_s_stop), '-', 'color', [colors(2,:), 0.4], ...
'DisplayName', '$k_{R_y}$')
else
plot(Ty(1:10:i_s_stop), 1e3*thetay(1:10:i_s_stop), '-', 'color', [colors(2,:), 0.4], ...
'HandleVisibility', 'off')
end
end
xlabel('Torque $T$ [Nm]');
ylabel('Angle $\theta$ [mrad]');
xlim([0, 0.15]);
ylim([-5,25]);
#+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', 'FontSize', 8);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/test_joints_meas_bending_all_raw_data.pdf', 'width', 'half', 'height', 'normal');
exportFig('figs/test_joints_thickness_stiffness.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+begin_src matlab :exports none
figure;
histogram([kRx, kRy], [4:0.2:5])
xlabel('Bending stiffness [Nm/rad]')
xticks([4:0.2:5])
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/test_joints_bend_stiff_hist.pdf', 'width', 'half', 'height', 'normal');
#+end_src
#+name: fig:test_joints_meas_bending_results
#+caption: Result of measured $k_{R_x}$ and $k_{R_y}$ stiffnesses for all the 16 flexible joints. Raw data are shown in (\subref{fig:test_joints_meas_bending_all_raw_data}). An histogram of the measured stiffnesses is shown in (\subref{fig:test_joints_bend_stiff_hist})
#+attr_latex: :options [htbp]
#+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_joints_meas_bending_all_raw_data}Measured torque and angular motion for all the flexible joints}
#+attr_latex: :options {0.49\textwidth}
#+begin_subfigure
#+attr_latex: :height 5.3cm
[[file:figs/test_joints_meas_bending_all_raw_data.png]]
#+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:test_joints_bend_stiff_hist}Histogram of the measured bending stiffness in the x and y directions}
#+attr_latex: :options {0.49\textwidth}
#+begin_subfigure
#+attr_latex: :height 5.3cm
[[file:figs/test_joints_bend_stiff_hist.png]]
#+end_subfigure
#+end_figure
#+name: fig:test_joints_thickness_stiffness
#+caption: Measured bending stiffness as a function of the estimated flexible beam thickness
#+RESULTS:
[[file:figs/test_joints_thickness_stiffness.png]]
** Conclusion
:PROPERTIES:
:UNNUMBERED: t
:END:
#+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
* Conclusion
<<sec:test_joints_conclusion>>

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2024-04-06 Sat 00:30
% Created 2024-04-05 Fri 17:52
% Intended LaTeX compiler: pdflatex
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
@ -29,7 +29,6 @@ Deviations from this ideal properties will impact the dynamics of the Nano-Hexap
During the detailed design phase, specifications in term of stiffness and stroke have been determined and are summarized in Table \ref{tab:test_joints_specs}.
\begin{table}[htbp]
\caption{\label{tab:test_joints_specs}Specifications for the flexible joints and estimated characteristics from the Finite Element Model}
\centering
\begin{tabularx}{0.5\linewidth}{Xcc}
\toprule
@ -42,6 +41,8 @@ Torsion Stiffness & \(< 500\,Nm/\text{rad}\) & 260\\
Bending Stroke & \(> 1\,\text{mrad}\) & 24.5\\
\bottomrule
\end{tabularx}
\caption{\label{tab:test_joints_specs}Specifications for the flexible joints and estimated characteristics from the Finite Element Model}
\end{table}
After optimization using a finite element model, the geometry shown in Figure \ref{fig:test_joints_schematic} has been obtained and the corresponding flexible joints characteristics are summarized in Table \ref{tab:test_joints_specs}.
@ -103,7 +104,6 @@ Finally, the test bench is manufacturer and used to measure the bending stiffnes
Results are shown in Section \ref{sec:test_joints_bending_stiffness_meas}
\begin{table}[htbp]
\caption{\label{tab:test_joints_section_matlab_code}Report sections and corresponding Matlab files}
\centering
\begin{tabularx}{0.6\linewidth}{lX}
\toprule
@ -114,6 +114,8 @@ Section \ref{sec:test_joints_test_bench_desc} & \texttt{test\_joints\_2\_bench\_
Section \ref{sec:test_joints_bending_stiffness_meas} & \texttt{test\_joints\_3\_bending\_stiff\_meas.m}\\
\bottomrule
\end{tabularx}
\caption{\label{tab:test_joints_section_matlab_code}Report sections and corresponding Matlab files}
\end{table}
\chapter{Dimensional Measurements}
\label{sec:test_joints_flex_dim_meas}
@ -357,7 +359,6 @@ The most important source of error comes from estimation error of the distance b
An overall accuracy of \(\approx 5\,\%\) can be expected with this measurement bench, which should be enough for a first estimation of the bending stiffness of the flexible joints.
\begin{table}[htbp]
\caption{\label{tab:test_joints_error_budget}Summary of the error budget for the estimation of the bending stiffness}
\centering
\begin{tabularx}{0.4\linewidth}{lX}
\toprule
@ -370,6 +371,8 @@ Displacement sensor & \(\epsilon_d < 0.01\,\%\)\\
Force sensor & \(\epsilon_F < 1\,\%\)\\
\bottomrule
\end{tabularx}
\caption{\label{tab:test_joints_error_budget}Summary of the error budget for the estimation of the bending stiffness}
\end{table}
\chapter{Bending Stiffness Measurement}
\label{sec:test_joints_bending_stiffness_meas}
@ -394,6 +397,7 @@ A closer view on the force sensor tip is shown in Figure \ref{fig:test_joints_pi
\caption{\label{fig:test_joints_picture_bench}Caption with reference to sub figure (\subref{fig:fig_label_a})}
\end{figure}
\section{Load Cell Calibration}
In order to estimate the measured errors of the load cell ``FC2231'', it is compared against another load cell\footnote{XFL212R-50N from TE Connectivity. Measurement range is \(50\,N\). Specified accuracy is \(1\,\%\) of the full range}.
The two load cells are measured simultaneously while they are pushed against each other (see Figure \ref{fig:test_joints_force_sensor_calib_picture}).
The contact between the two load cells is well defined as one has a spherical interface while the other has a flat surface.
@ -415,11 +419,11 @@ However, the estimated non-linearity is bellow \(1\,\%\) for forces between \(0.
\end{center}
\subcaption{\label{fig:test_joints_force_sensor_calib_fit}Measured two force and linear fit}
\end{subfigure}
\caption{\label{fig:test_joints_force_sensor_calib}Estimation of the load cell accuracy. A picture of the measurement bench is shown in (\subref{fig:test_joints_force_sensor_calib_picture}). Comparison of the two measured forces is made in (\subref{fig:test_joints_force_sensor_calib_fit})}
\caption{\label{fig:test_joints_force_sensor_calib}Caption with reference to sub figure (\subref{fig:test_joints_force_sensor_calib_picture}), (\subref{fig:test_joints_force_sensor_calib_fit})}
\end{figure}
\section{Load Cell Stiffness}
The objective of this measurement is to estimate the stiffness \(k_F\) of the force sensor.
To do so, a stiff element (much stiffer than the estimated \(k_F \approx 1\,N/\mu m\)) is fixed in front of the force sensor as shown in Figure \ref{fig:test_joints_meas_force_sensor_stiffness_picture}.
To do so, a stiff element (much stiffer than the estimated \(k_F \approx 1\,N/\mu m\)) is fixed in front of the force sensor as shown in Figure \ref{fig:test_joints_meas_force_sensor_stiffness}.
Then, the force sensor is pushed again this stiff element while the force and the encoder displacement are measured.
Measured displacement as a function of the force is shown in Figure \ref{fig:test_joints_force_sensor_stiffness_fit}.
The load cell stiffness can then be estimated by computing a linear fit, and is found to be \(k_F \approx 0.75\,N/\mu m\).
@ -429,7 +433,7 @@ The load cell stiffness can then be estimated by computing a linear fit, and is
\begin{center}
\includegraphics[scale=1,height=5.5cm]{figs/test_joints_meas_force_sensor_stiffness_picture.jpg}
\end{center}
\subcaption{\label{fig:test_joints_meas_force_sensor_stiffness_picture}Picture of the measurement bench}
\subcaption{\label{fig:test_joints_meas_force_sensor_stiffness_picture}Picture of the test}
\end{subfigure}
\begin{subfigure}{0.49\textwidth}
\begin{center}
@ -437,9 +441,10 @@ The load cell stiffness can then be estimated by computing a linear fit, and is
\end{center}
\subcaption{\label{fig:test_joints_force_sensor_stiffness_fit}Measured displacement as a function of the force}
\end{subfigure}
\caption{\label{fig:test_joints_meas_force_sensor_stiffness}Estimation of the load cell stiffness. Measurement setup is shown in (\subref{fig:test_joints_meas_force_sensor_stiffness_picture}). Measurement results is shown in (\subref{fig:test_joints_force_sensor_stiffness_fit}).}
\caption{\label{fig:test_joints_meas_force_sensor_stiffness}Estimation of the load cell stiffness. (\subref{fig:test_joints_meas_force_sensor_stiffness_picture}) (\subref{fig:test_joints_meas_force_sensor_stiffness_fit})}
\end{figure}
\section{Bending Stiffness estimation}
\section{Analysis of one measurement}
The actual stiffness measurement in now performed by manually moving the translation stage from a start position where the force sensor is not yet in contact with the flexible joint to a position where flexible joint is on its mechanical stop.
The measured force and displacement as a function of time are shown in Figure \ref{fig:test_joints_meas_bend_time}.
@ -462,36 +467,98 @@ The bending stroke can also be estimated as shown in Figure \ref{fig:test_joints
\end{center}
\subcaption{\label{fig:test_joints_meas_F_d_lin_fit}Angular displacement measured as a function of the applied torque}
\end{subfigure}
\caption{\label{fig:test_joints_meas_example}Results obtained on the first flexible joint. Measured force and displacement are shown in (\subref{fig:test_joints_meas_bend_time}). The estimated angular displacement \(\theta_x\) as a function of the estimated applied torque \(T_{x}\) is shown in (\subref{fig:test_joints_meas_F_d_lin_fit}). The bending stiffness \(k_{R_x}\) of the flexible joint can be estimated by computing a best linear fit (red dashed line).}
\caption{\label{fig:test_joints_meas_example}Results obtained on the first flexible joint. Measured force and displacement are shown in (\subref{fig:test_joints_meas_bend_time}). The estimated angular displacement \(\theta_y\) as a function of the estimated applied torque \(T_{y}\) is shown in (\subref{fig:test_joints_meas_F_d_lin_fit}). The bending stiffness \(k_{R_y}\) of the flexible joint can be estimated by computing a best linear fit (red dashed line).}
\end{figure}
\section{Measured flexible joint stiffnesses}
The same measurement is performed for all the 16 flexible joints, both in the \(x\) and \(y\) directions.
The measured angular motion as a function of the applied torque are shown in Figure \ref{fig:test_joints_meas_bending_all_raw_data} for all the 16 flexible joints.
This gives a first idea of the dispersion of the measured bending stiffnesses (i.e. slope of the linear region) and of the angular stroke.
\section{Bending stiffness and bending stroke of all the flexible joints}
An histogram of the measured bending stiffnesses is show in Figure \ref{fig:test_joints_bend_stiff_hist}.
Most of the bending stiffnesses are between \(4.6\,Nm/rad\) and \(5.0\,Nm/rad\).
Now, let's estimate the bending stiffness and stroke for all the flexible joints.
The results are summarized in Table \ref{tab:test_joints_meas_results_x_dir} for the X direction and in Table \ref{tab:test_joints_meas_results_y_dir} for the Y direction.
\begin{table}[htbp]
\centering
\begin{tabularx}{0.6\linewidth}{cccc}
\toprule
& \(R_{R_x}\) {[}Nm/rad] & \(k_{R_x,s}\) {[}Nm/rad] & \(R_{x,\text{max}}\) {[}mrad]\\
\midrule
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\\
\bottomrule
\end{tabularx}
\caption{\label{tab:test_joints_meas_results_x_dir}Measured characteristics of the flexible joints in the X direction}
\end{table}
\begin{table}[htbp]
\centering
\begin{tabularx}{0.6\linewidth}{cccc}
\toprule
& \(R_{R_y}\) {[}Nm/rad] & \(k_{R_y,s}\) {[}Nm/rad] & \(R_{y,\text{may}}\) {[}mrad]\\
\midrule
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\\
\bottomrule
\end{tabularx}
\caption{\label{tab:test_joints_meas_results_y_dir}Measured characteristics of the flexible joints in the Y direction}
\end{table}
\section{Analysis}
The dispersion of the measured bending stiffness is shown in Figure \ref{fig:test_joints_bend_stiff_hist} and of the bending stroke in Figure \ref{fig:test_joints_bend_stroke_hist}.
\begin{figure}[htbp]
\begin{subfigure}{0.49\textwidth}
\begin{center}
\includegraphics[scale=1,height=5.3cm]{figs/test_joints_meas_bending_all_raw_data.png}
\end{center}
\subcaption{\label{fig:test_joints_meas_bending_all_raw_data}Measured torque and angular motion for all the flexible joints}
\end{subfigure}
\begin{subfigure}{0.49\textwidth}
\begin{center}
\includegraphics[scale=1,height=5.3cm]{figs/test_joints_bend_stiff_hist.png}
\end{center}
\subcaption{\label{fig:test_joints_bend_stiff_hist}Histogram of the measured bending stiffness in the x and y directions}
\end{subfigure}
\caption{\label{fig:test_joints_meas_bending_results}Result of measured \(k_{R_x}\) and \(k_{R_y}\) stiffnesses for all the 16 flexible joints. Raw data are shown in (\subref{fig:test_joints_meas_bending_all_raw_data}). An histogram of the measured stiffnesses is shown in (\subref{fig:test_joints_bend_stiff_hist})}
\centering
\includegraphics[scale=1]{figs/test_joints_bend_stiff_hist.png}
\caption{\label{fig:test_joints_bend_stiff_hist}Histogram of the measured bending stiffness}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/test_joints_bend_stroke_hist.png}
\caption{\label{fig:test_joints_bend_stroke_hist}Histogram of the measured bending stroke}
\end{figure}
The relation between the measured beam thickness and the measured bending stiffness is shown in Figure \ref{fig:test_joints_thickness_stiffness}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/test_joints_thickness_stiffness.png}
\caption{\label{fig:test_joints_thickness_stiffness}Measured bending stiffness as a function of the estimated flexible beam thickness}
\end{figure}
\section*{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}
\chapter{Conclusion}
\label{sec:test_joints_conclusion}
\printbibliography[heading=bibintoc,title={Bibliography}]