Better estimate bending stiffness

This commit is contained in:
Thomas Dehaeze 2024-04-06 00:27:19 +02:00
parent f7510ef5c4
commit 57bf1e0b80
13 changed files with 243 additions and 289 deletions

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 10 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: 41 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -345,7 +345,9 @@ meas_flex = [[223, 226, 224, 214];
#+begin_src matlab :exports none #+begin_src matlab :exports none
%% Histogram of the measured gap %% Histogram of the measured gap
figure; figure;
hold on;
histogram([(meas_flex(:,1)+meas_flex(:,2))/2,(meas_flex(:,3)+meas_flex(:,4))/2], 7) histogram([(meas_flex(:,1)+meas_flex(:,2))/2,(meas_flex(:,3)+meas_flex(:,4))/2], 7)
hold off;
xlabel("Measured beam thickness [$\mu m$]"); xlabel("Measured beam thickness [$\mu m$]");
xticks([200, 205, 210, 215, 220, 225, 230, 235]) xticks([200, 205, 210, 215, 220, 225, 230, 235])
#+end_src #+end_src
@ -731,7 +733,6 @@ A closer view on the force sensor tip is shown in Figure ref:fig:test_joints_pic
#+end_src #+end_src
** Load Cell Calibration ** Load Cell Calibration
In order to estimate the measured errors of the load cell "FC2231", it is compared against another load cell[fn:5]. 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 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. The contact between the two load cells is well defined as one has a spherical interface while the other has a flat surface.
@ -780,7 +781,7 @@ exportFig('figs/test_joints_force_sensor_calib_fit.pdf', 'width', 'half', 'heigh
#+end_src #+end_src
#+name: fig:test_joints_force_sensor_calib #+name: fig:test_joints_force_sensor_calib
#+caption: Caption with reference to sub figure (\subref{fig:test_joints_force_sensor_calib_picture}), (\subref{fig:test_joints_force_sensor_calib_fit}) #+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})
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_joints_force_sensor_calib_picture}Zoom on the two force sensors in contact} #+attr_latex: :caption \subcaption{\label{fig:test_joints_force_sensor_calib_picture}Zoom on the two force sensors in contact}
@ -838,10 +839,10 @@ exportFig('figs/test_joints_force_sensor_stiffness_fit.pdf', 'width', 'half', 'h
#+end_src #+end_src
#+name: fig:test_joints_meas_force_sensor_stiffness #+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_meas_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_force_sensor_stiffness_fit}).
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_joints_meas_force_sensor_stiffness_picture}Picture of the test} #+attr_latex: :caption \subcaption{\label{fig:test_joints_meas_force_sensor_stiffness_picture}Picture of the measurement bench}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :height 5.5cm #+attr_latex: :height 5.5cm
@ -866,62 +867,52 @@ 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}$. 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 #+begin_src matlab
%% Load Measured Data for first flexible joint %% Estimate the bending stiffness and stroke from the measurement - First Flexible joint
% Load Measured Data for first flexible joint
load('meas_stiff_flex_1_x.mat', 't', 'F', 'd'); load('meas_stiff_flex_1_x.mat', 't', 'F', 'd');
%% Zero the force % Start measurement at t = 0.2 s
F = F - mean(F(t > 0.1 & t < 0.3));
%% Start measurement at t = 0.2 s
d = d(t > 0.2); d = d(t > 0.2);
F = F(t > 0.2); F = F(t > 0.2);
t = t(t > 0.2); t = t - t(1); t = t(t > 0.2); t = t - t(1);
%% Compute torque and angular displacement % Zero the force
h = 22.5e-3; % Height [m] F = F - mean(F(t < 0.2));
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 % Find when the force sensor touches the flexible joint
i_l_start = find(F > 0.3, 1, 'first'); i_l_start = find(F > 0.3, 1, 'first');
% Reset the measured diplacement at that point
% thetay = thetay - thetay(i_l_start);
%% Determine the linear region and region when touching the mechanical stop % 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]
% Find then the maximum torque is applied % Find then the maximum torque is applied
[~, i_s_stop] = max(Ty); [~, i_s_stop] = max(Tx);
% Linear region stops ~ when 90% of the stroke is reached % Linear region stops ~ when 90% of the stroke is reached
i_l_stop = find(thetay > 0.9*thetay(i_s_stop), 1, 'first'); i_l_stop = find(thetax > 0.9*thetax(i_s_stop), 1, 'first');
% Mechanical "Stop" region start ~20Nmm before maximum torque is applied % Mechanical "Stop" region start ~20Nmm before maximum torque is applied
i_s_start = find(Ty > max(Ty)-20e-3, 1, 'first'); i_s_start = find(Tx > max(Tx)-20e-3, 1, 'first');
%% Define variables for the two regions % Linear fit in the "linear" region
% Linear Region fit_l = polyfit(Tx(i_l_start:i_l_stop), thetax(i_l_start:i_l_stop), 1);
Ty_l = Ty(i_l_start:i_l_stop);
thetay_l = thetay(i_l_start:i_l_stop);
% "Mechanical stop" Region % Linear fit in the "mechanical stop" region
Ty_s = Ty(i_s_start:i_s_stop); fit_s = polyfit(Tx(i_s_start:i_s_stop), thetax(i_s_start:i_s_stop), 1);
thetay_s = thetay(i_s_start:i_s_stop);
%% Fit the best straight line for the two regions % Reset displacement more precisely based on fit
fit_l = polyfit(Ty_l, thetay_l, 1); thetax = thetax - fit_l(2);
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_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0; fit_l(2) = 0;
%% Estimation of the bending stiffness %% Estimation of the bending stiffness
kRy_l = 1/fit_l(1); % Bending Stiffness [Nm/rad] kRx_l = 1/fit_l(1); % Bending Stiffness [Nm/rad]
kRy_s = 1/fit_s(1); % Mechanical "Stop" Stiffness [Nm/rad] kRx_s = 1/fit_s(1); % Mechanical "Stop" Stiffness [Nm/rad]
%% Estimation of the bending stroke %% Estimation of the bending stroke
% This is done by finding the intersection of the two linear fits % 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] theta_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)); % Maximum angular stroke [rad]
Ty_at_theta_max = (fit_s(2) - fit_l(2))/(fit_l(1) - fit_s(1)); Tx_at_theta_max = (fit_s(2) - fit_l(2))/(fit_l(1) - fit_s(1));
#+end_src #+end_src
#+begin_src matlab :exports none :results none #+begin_src matlab :exports none :results none
@ -937,14 +928,14 @@ plot(0.4*cos(0:0.01:2*pi)+3, ...
1.1*sin(0:0.01:2*pi)+4.8, 'k--'); 1.1*sin(0:0.01:2*pi)+4.8, 'k--');
text(3.5, 4.8, sprintf('Mechanical\nStop'), 'horizontalalignment', 'left'); text(3.5, 4.8, sprintf('Mechanical\nStop'), 'horizontalalignment', 'left');
hold off; hold off;
ylabel('Force $F_x$ [N]'); ylabel('Force $F_y$ [N]');
ylim([-4, 6]) ylim([-4, 6])
ylimr = get(gca,'Ylim'); ylimr = get(gca,'Ylim');
yyaxis right yyaxis right
plot(t, 1e3*d); plot(t, 1e3*d);
xlabel('Time [s]'); xlabel('Time [s]');
ylabel('Displacement $d_x$ [mm]'); ylabel('Displacement $d_y$ [mm]');
xlim([0,5]); xlim([0,5]);
% Make the force and displacement superimpose % 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]) ylim([0.364 - 4*(0.8315-0.364)/4.095, 0.364 + 6*(0.8315-0.364)/4.095])
@ -956,22 +947,23 @@ exportFig('figs/test_joints_meas_bend_time.pdf', 'width', 'half', 'height', 'nor
#+begin_src matlab :exports none #+begin_src matlab :exports none
% Regions where to plot the fitted data % Regions where to plot the fitted data
Ty_l_fit = [0, Ty_at_theta_max]; Tx_l_fit = [0, Tx_at_theta_max];
Ty_s_fit = [Ty_at_theta_max, Ty(i_s_stop)]; Tx_s_fit = [Tx_at_theta_max, Tx(i_s_stop)];
figure; figure;
hold on; hold on;
plot(Ty(1:i_s_stop), 1e3*thetay(1:i_s_stop), '-k', 'DisplayName', 'Raw data') plot(Tx(1:i_s_stop), 1e3*thetax(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(Tx_l_fit, 1e3*(Tx_l_fit*fit_l(1) + fit_l(2)), '--', 'DisplayName', sprintf('$k_{R_x} = %.1f$ Nm/rad', kRx_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(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, Ty_at_theta_max], [1e3*theta_max, 1e3*theta_max], 'k--', 'HandleVisibility', 'off') 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')
anArrow = annotation('doublearrow', 'LineWidth', 0.5); anArrow = annotation('doublearrow', 'LineWidth', 0.5);
anArrow.Parent = gca; anArrow.Parent = gca;
anArrow.Position = [0.05, 0, 0, 1e3*fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1))]; 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_{y,\\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_{x,\\max} = %.1f$ mrad', 1e3*theta_max), 'horizontalalignment', 'left');
hold off; hold off;
xlabel('Torque $T_y$ [Nm]'); xlabel('Torque $T_x$ [Nm]');
ylabel('Angle $\theta_y$ [mrad]'); ylabel('Angle $\theta_x$ [mrad]');
xlim([0, 0.15]); xlim([0, 0.15]);
ylim([-5,25]); ylim([-5,25]);
leg = legend('location', 'southeast', 'FontSize', 8); leg = legend('location', 'southeast', 'FontSize', 8);
@ -983,7 +975,7 @@ exportFig('figs/test_joints_meas_F_d_lin_fit.pdf', 'width', 'half', 'height', 'n
#+end_src #+end_src
#+name: fig:test_joints_meas_example #+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_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). #+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).
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_joints_meas_bend_time}Force and displacement measured as a function of time} #+attr_latex: :caption \subcaption{\label{fig:test_joints_meas_bend_time}Force and displacement measured as a function of time}
@ -1000,210 +992,208 @@ exportFig('figs/test_joints_meas_F_d_lin_fit.pdf', 'width', 'half', 'height', 'n
#+end_subfigure #+end_subfigure
#+end_figure #+end_figure
** TODO Comparison of the measured Stiffnesses ** Measured flexible joint stiffnesses
Now, let's estimate the bending stiffness and stroke for all the flexible joints. 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$.
#+begin_src matlab :exports none #+begin_src matlab :exports none
%% Initialize variables %% Measure the bending stiffness and Stroke for all the flexible joints
kRx = zeros(1,16); figure;
kSx = zeros(1,16); hold on;
Rmx = zeros(1,16);
%% 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]
for i = 1:16 for i = 1:16
%% Load the data % Load the data
load(['meas_stiff_flex_' num2str(i) '_x.mat'], 't', 'F', 'd'); load(sprintf('meas_stiff_flex_%i_x.mat', i), 't', 'F', 'd');
%% Automatic Zero of the force % Start measurement at t = 0.2 s
F = F - mean(F(t > 0.1 & t < 0.3));
%% Start measurement at t = 0.2 s
d = d(t > 0.2); d = d(t > 0.2);
F = F(t > 0.2); F = F(t > 0.2);
t = t(t > 0.2); t = t - t(1); t = t(t > 0.2); t = t - t(1);
%% Estimate linear region and "stop" region % 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'); i_l_start = find(F > 0.3, 1, 'first');
% Zero the displacement when it comes in contact
d = d - d(i_l_start); 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); % Compute torque and angular displacement
d_l = d(i_l_start:i_l_stop); h = 22.5e-3; % Height [m]
Tx = h * F; % Applied torque in [Nm]
thetax = atan2(d, h); % Measured angle in [rad]
F_s = F(i_s_start:i_s_stop); % Find then the maximum torque is applied
d_s = d(i_s_start:i_s_stop); [~, 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');
%% Straight line fit % Linear fit in the "linear" region
fit_l = polyfit(F_l, d_l, 1); fit_l = polyfit(Tx(i_l_start:i_l_stop), thetax(i_l_start:i_l_stop), 1);
fit_s = polyfit(F_s, d_s, 1);
%% Reset displacement based on fit % Linear fit in the "mechanical stop" region
d = d - fit_l(2); 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_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0; fit_l(2) = 0;
%% Estimated Stroke % Estimation of the bending stiffness and bending stroke
d_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)); kRx(i) = 1/fit_l(1); % Bending Stiffness [Nm/rad]
kSx(i) = 1/fit_s(1); % Mechanical "Stop" Stiffness [Nm/rad]
%% Save stiffnesses and stroke Rmx(i) = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)); % Maximum angular stroke [rad]
kRx(i) = (h)^2/fit_l(1);
kSx(i) = (h)^2/fit_s(1);
Rmx(i) = atan2(d_max,h);
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 end
#+end_src
#+begin_src matlab :exports none %% Continue with the Y-bending
%% Initialize variables % Initialize variables
kRy = zeros(1,16); kRy = zeros(1,16); % Bending stiffnesses [Nm/rad]
kSy = zeros(1,16); kSy = zeros(1,16); % Bending stiffnesses at "stop" [Nm/rad]
Rmy = zeros(1,16); Rmy = zeros(1,16); % Bending stroke [rad]
for i = 1:16 for i = 1:16
%% Load the data % Load the data
load(['meas_stiff_flex_' num2str(i) '_y.mat'], 't', 'F', 'd'); load(sprintf('meas_stiff_flex_%i_y.mat', i), 't', 'F', 'd');
%% Automatic Zero of the force % Start measurement at t = 0.2 s
F = F - mean(F(t > 0.1 & t < 0.3));
%% Start measurement at t = 0.2 s
d = d(t > 0.2); d = d(t > 0.2);
F = F(t > 0.2); F = F(t > 0.2);
t = t(t > 0.2); t = t - t(1); t = t(t > 0.2); t = t - t(1);
%% Estimate linear region and "stop" region % 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'); i_l_start = find(F > 0.3, 1, 'first');
% Zero the displacement when it comes in contact
d = d - d(i_l_start); 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); % Compute torque and angular displacement
d_l = d(i_l_start:i_l_stop); h = 22.5e-3; % Height [m]
Ty = h * F; % Applied torque in [Nm]
thetay = atan2(d, h); % Measured angle in [rad]
F_s = F(i_s_start:i_s_stop); % Find then the maximum torque is applied
d_s = d(i_s_start:i_s_stop); [~, 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');
%% Straight line fit % Linear fit in the "linear" region
fit_l = polyfit(F_l, d_l, 1); fit_l = polyfit(Ty(i_l_start:i_l_stop), thetay(i_l_start:i_l_stop), 1);
fit_s = polyfit(F_s, d_s, 1);
%% Reset displacement based on fit % Linear fit in the "mechanical stop" region
d = d - fit_l(2); 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_s(2) = fit_s(2) - fit_l(2);
fit_l(2) = 0; fit_l(2) = 0;
%% Estimated Stroke % Estimation of the bending stiffness and bending stroke
d_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)); kRy(i) = 1/fit_l(1); % Bending Stiffness [Nm/rad]
kSy(i) = 1/fit_s(1); % Mechanical "Stop" Stiffness [Nm/rad]
%% Save stiffnesses and stroke Rmy(i) = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1)); % Maximum angular stroke [rad]
kRy(i) = (h)^2/fit_l(1);
kSy(i) = (h)^2/fit_s(1);
Rmy(i) = atan2(d_max,h);
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
end
xlabel('Torque $T$ [Nm]');
ylabel('Angle $\theta$ [mrad]');
xlim([0, 0.15]);
ylim([-5,25]);
legend('location', 'southeast', 'FontSize', 8);
#+end_src #+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 :tangle no :exports results :results file replace
exportFig('figs/test_joints_meas_bending_all_raw_data.pdf', 'width', 'half', '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
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) #+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 '); data2orgtable([kRx; kRy]', {'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'}, {'$R_{R_x}$ [Nm/rad]', '$k_{R_y}$ [Nm/rad]'}, ' %.1f ');
#+end_src #+end_src
#+name: tab:test_joints_meas_results_x_dir #+name: tab:test_joints_meas_results_x_dir
#+caption: Measured characteristics of the flexible joints in the X direction #+caption: Measured bending stiffnesses
#+attr_latex: :environment tabularx :width 0.6\linewidth :align cccc #+attr_latex: :environment tabularx :width 0.6\linewidth :align Xccc
#+attr_latex: :center t :booktabs t :float t #+attr_latex: :center t :booktabs t :float t
#+RESULTS: #+RESULTS:
| | $R_{R_x}$ [Nm/rad] | $k_{R_x,s}$ [Nm/rad] | $R_{x,\text{max}}$ [mrad] | | | $R_{R_x}$ [Nm/rad] | $k_{R_y}$ [Nm/rad] | |
|----+--------------------+----------------------+---------------------------| |----+--------------------+--------------------+---|
| 1 | 5.5 | 173.6 | 18.9 | | 1 | 4.4 | 4.6 | X |
| 2 | 6.1 | 195.0 | 17.6 | | 2 | 5.0 | 4.8 | X |
| 3 | 6.1 | 191.3 | 17.7 | | 3 | 5.0 | 4.8 | X |
| 4 | 5.8 | 136.7 | 18.3 | | 4 | 4.7 | 4.6 | X |
| 5 | 5.7 | 88.9 | 22.0 | | 5 | 4.6 | 4.7 | X |
| 6 | 5.7 | 183.9 | 18.7 | | 6 | 4.6 | 4.7 | X |
| 7 | 5.7 | 157.9 | 17.9 | | 7 | 4.7 | 4.3 | |
| 8 | 5.8 | 166.1 | 17.9 | | 8 | 4.7 | 4.7 | X |
| 9 | 5.8 | 159.5 | 18.2 | | 9 | 4.7 | 4.6 | X |
| 10 | 6.0 | 143.6 | 18.1 | | 10 | 4.9 | 4.8 | X |
| 11 | 5.0 | 163.8 | 17.7 | | 11 | 4.0 | 3.9 | |
| 12 | 6.1 | 111.9 | 17.0 | | 12 | 4.9 | 4.8 | X |
| 13 | 6.0 | 142.0 | 17.4 | | 13 | 4.9 | 4.9 | X |
| 14 | 5.8 | 130.1 | 17.9 | | 14 | 4.7 | 4.7 | X |
| 15 | 5.7 | 170.7 | 18.6 | | 15 | 4.6 | 4.4 | |
| 16 | 6.0 | 148.7 | 17.5 | | 16 | 4.9 | 4.3 | |
#+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
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
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/test_joints_bend_stiff_hist.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:test_joints_bend_stiff_hist
#+caption: Histogram of the measured bending stiffness
#+RESULTS:
[[file:figs/test_joints_bend_stiff_hist.png]]
#+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
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/test_joints_bend_stroke_hist.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:test_joints_bend_stroke_hist
#+caption: Histogram of the measured bending stroke
#+RESULTS:
[[file:figs/test_joints_bend_stroke_hist.png]]
The relation between the measured beam thickness and the measured bending stiffness is shown in Figure ref:fig:test_joints_thickness_stiffness.
#+begin_src matlab :exports none #+begin_src matlab :exports none
load('flex_meas_dim.mat', 'meas_flex'); load('flex_meas_dim.mat', 'meas_flex');

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2024-04-05 Fri 17:52 % Created 2024-04-06 Sat 00:18
% Intended LaTeX compiler: pdflatex % Intended LaTeX compiler: pdflatex
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
@ -29,6 +29,7 @@ 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}. 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] \begin{table}[htbp]
\caption{\label{tab:test_joints_specs}Specifications for the flexible joints and estimated characteristics from the Finite Element Model}
\centering \centering
\begin{tabularx}{0.5\linewidth}{Xcc} \begin{tabularx}{0.5\linewidth}{Xcc}
\toprule \toprule
@ -41,8 +42,6 @@ Torsion Stiffness & \(< 500\,Nm/\text{rad}\) & 260\\
Bending Stroke & \(> 1\,\text{mrad}\) & 24.5\\ Bending Stroke & \(> 1\,\text{mrad}\) & 24.5\\
\bottomrule \bottomrule
\end{tabularx} \end{tabularx}
\caption{\label{tab:test_joints_specs}Specifications for the flexible joints and estimated characteristics from the Finite Element Model}
\end{table} \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}. 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}.
@ -104,6 +103,7 @@ 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} Results are shown in Section \ref{sec:test_joints_bending_stiffness_meas}
\begin{table}[htbp] \begin{table}[htbp]
\caption{\label{tab:test_joints_section_matlab_code}Report sections and corresponding Matlab files}
\centering \centering
\begin{tabularx}{0.6\linewidth}{lX} \begin{tabularx}{0.6\linewidth}{lX}
\toprule \toprule
@ -114,8 +114,6 @@ 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}\\ Section \ref{sec:test_joints_bending_stiffness_meas} & \texttt{test\_joints\_3\_bending\_stiff\_meas.m}\\
\bottomrule \bottomrule
\end{tabularx} \end{tabularx}
\caption{\label{tab:test_joints_section_matlab_code}Report sections and corresponding Matlab files}
\end{table} \end{table}
\chapter{Dimensional Measurements} \chapter{Dimensional Measurements}
\label{sec:test_joints_flex_dim_meas} \label{sec:test_joints_flex_dim_meas}
@ -359,6 +357,7 @@ 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. 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] \begin{table}[htbp]
\caption{\label{tab:test_joints_error_budget}Summary of the error budget for the estimation of the bending stiffness}
\centering \centering
\begin{tabularx}{0.4\linewidth}{lX} \begin{tabularx}{0.4\linewidth}{lX}
\toprule \toprule
@ -371,8 +370,6 @@ Displacement sensor & \(\epsilon_d < 0.01\,\%\)\\
Force sensor & \(\epsilon_F < 1\,\%\)\\ Force sensor & \(\epsilon_F < 1\,\%\)\\
\bottomrule \bottomrule
\end{tabularx} \end{tabularx}
\caption{\label{tab:test_joints_error_budget}Summary of the error budget for the estimation of the bending stiffness}
\end{table} \end{table}
\chapter{Bending Stiffness Measurement} \chapter{Bending Stiffness Measurement}
\label{sec:test_joints_bending_stiffness_meas} \label{sec:test_joints_bending_stiffness_meas}
@ -397,7 +394,6 @@ 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})} \caption{\label{fig:test_joints_picture_bench}Caption with reference to sub figure (\subref{fig:fig_label_a})}
\end{figure} \end{figure}
\section{Load Cell Calibration} \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}. 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 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. The contact between the two load cells is well defined as one has a spherical interface while the other has a flat surface.
@ -423,7 +419,7 @@ However, the estimated non-linearity is bellow \(1\,\%\) for forces between \(0.
\end{figure} \end{figure}
\section{Load Cell Stiffness} \section{Load Cell Stiffness}
The objective of this measurement is to estimate the stiffness \(k_F\) of the force sensor. 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}. 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}.
Then, the force sensor is pushed again this stiff element while the force and the encoder displacement are measured. 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}. 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\). 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\).
@ -441,10 +437,9 @@ The load cell stiffness can then be estimated by computing a linear fit, and is
\end{center} \end{center}
\subcaption{\label{fig:test_joints_force_sensor_stiffness_fit}Measured displacement as a function of the force} \subcaption{\label{fig:test_joints_force_sensor_stiffness_fit}Measured displacement as a function of the force}
\end{subfigure} \end{subfigure}
\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})} \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}).}
\end{figure} \end{figure}
\section{Analysis of one measurement} \section{Bending Stiffness estimation}
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 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}. The measured force and displacement as a function of time are shown in Figure \ref{fig:test_joints_meas_bend_time}.
@ -467,85 +462,54 @@ The bending stroke can also be estimated as shown in Figure \ref{fig:test_joints
\end{center} \end{center}
\subcaption{\label{fig:test_joints_meas_F_d_lin_fit}Angular displacement measured as a function of the applied torque} \subcaption{\label{fig:test_joints_meas_F_d_lin_fit}Angular displacement measured as a function of the applied torque}
\end{subfigure} \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_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).} \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).}
\end{figure} \end{figure}
\section{Bending stiffness and bending stroke of all the flexible joints} \section{Measured flexible joint stiffnesses}
The same measurement is performed for all the 16 flexible joints, both in the \(x\) and \(y\) directions.
Now, let's estimate the bending stiffness and stroke for all the flexible joints. The measured torque and angular motion are all shown in Figure \ref{fig:test_joints_meas_bending_all_raw_data}.
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{figure}[htbp]
\centering \begin{subfigure}{0.49\textwidth}
\includegraphics[scale=1]{figs/test_joints_bend_stiff_hist.png} \begin{center}
\caption{\label{fig:test_joints_bend_stiff_hist}Histogram of the measured bending stiffness} \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 stiffnesses for all the 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})}
\end{figure} \end{figure}
\begin{figure}[htbp] \begin{table}[htbp]
\caption{\label{tab:test_joints_meas_results_x_dir}Measured bending stiffnesses}
\centering \centering
\includegraphics[scale=1]{figs/test_joints_bend_stroke_hist.png} \begin{tabularx}{0.6\linewidth}{Xccc}
\caption{\label{fig:test_joints_bend_stroke_hist}Histogram of the measured bending stroke} \toprule
\end{figure} & \(R_{R_x}\) {[}Nm/rad] & \(k_{R_y}\) {[}Nm/rad] & \\
\midrule
The relation between the measured beam thickness and the measured bending stiffness is shown in Figure \ref{fig:test_joints_thickness_stiffness}. 1 & 4.4 & 4.6 & X\\
2 & 5.0 & 4.8 & X\\
3 & 5.0 & 4.8 & X\\
4 & 4.7 & 4.6 & X\\
5 & 4.6 & 4.7 & X\\
6 & 4.6 & 4.7 & X\\
7 & 4.7 & 4.3 & \\
8 & 4.7 & 4.7 & X\\
9 & 4.7 & 4.6 & X\\
10 & 4.9 & 4.8 & X\\
11 & 4.0 & 3.9 & \\
12 & 4.9 & 4.8 & X\\
13 & 4.9 & 4.9 & X\\
14 & 4.7 & 4.7 & X\\
15 & 4.6 & 4.4 & \\
16 & 4.9 & 4.3 & \\
\bottomrule
\end{tabularx}
\end{table}
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering