Compare commits
12 Commits
f7510ef5c4
...
merged
Author | SHA1 | Date | |
---|---|---|---|
2d4f9c4fab | |||
59494b410b | |||
f0d3b25e48 | |||
519d02dc24 | |||
a8a1967624 | |||
0525349412 | |||
0d491e013c | |||
6244caff9c | |||
75aaa4e97b | |||
c2165c9fcb | |||
bb1364416b | |||
57bf1e0b80 |
3
.gitattributes
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*.pdf binary
|
||||
*.svg binary
|
||||
*.mat binary
|
18
figs/inkscape/convert_svg.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Directory containing SVG files
|
||||
INPUT_DIR="."
|
||||
|
||||
# Loop through all SVG files in the directory
|
||||
for svg_file in "$INPUT_DIR"/*.svg; do
|
||||
# Check if there are SVG files in the directory
|
||||
if [ -f "$svg_file" ]; then
|
||||
# Output PDF file name
|
||||
pdf_file="../${svg_file%.svg}.pdf"
|
||||
png_file="../${svg_file%.svg}"
|
||||
|
||||
# Convert SVG to PDF using Inkscape
|
||||
inkscape "$svg_file" --export-filename="$pdf_file" && \
|
||||
pdftocairo -png -singlefile -cropbox "$pdf_file" "$png_file"
|
||||
fi
|
||||
done
|
Before Width: | Height: | Size: 396 KiB After Width: | Height: | Size: 396 KiB |
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
147
figs/inkscape/test_joints_force_sensor_calib_picture.svg
Normal file
After Width: | Height: | Size: 313 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 222 KiB |
BIN
figs/test_joints_force_sensor_calib_picture.png
Normal file
After Width: | Height: | Size: 767 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 42 KiB |
28878
figs/test_joints_meas_bending_all_raw_data.pdf
Normal file
BIN
figs/test_joints_meas_bending_all_raw_data.png
Normal file
After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 703 KiB After Width: | Height: | Size: 703 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 32 KiB |
BIN
matlab/mat/calibration_force_sensor.mat
Normal file
BIN
matlab/mat/flex_meas_dim.mat
Normal file
BIN
matlab/mat/force_sensor_stiffness_meas.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_10_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_10_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_11_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_11_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_12_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_12_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_13_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_13_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_14_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_14_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_15_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_15_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_16_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_16_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_1_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_1_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_2_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_2_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_3_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_3_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_4_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_4_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_5_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_5_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_6_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_6_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_7_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_7_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_8_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_8_y.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_9_x.mat
Normal file
BIN
matlab/mat/meas_stiff_flex_9_y.mat
Normal file
@@ -10,17 +10,7 @@ addpath('./mat/'); % Path for data
|
||||
%% Colors for the figures
|
||||
colors = colororder;
|
||||
|
||||
% Measurement Results
|
||||
% # - Strange shape: 5
|
||||
|
||||
% 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 ref:tab:test_joints_flex_dim.
|
||||
|
||||
|
||||
%% Measured gap for the 16 flexible joints
|
||||
meas_flex = [[223, 226, 224, 214];
|
||||
[229, 231, 237, 224];
|
||||
[234, 230, 239, 231];
|
||||
@@ -38,38 +28,13 @@ meas_flex = [[223, 226, 224, 214];
|
||||
[209, 214, 220, 221];
|
||||
[213, 210, 230, 229]];
|
||||
|
||||
|
||||
|
||||
% #+name: tab:test_joints_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:
|
||||
% | | Y1 | Y2 | X1 | X2 |
|
||||
% |----+-----+-----+-----+-----|
|
||||
% | 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 ref:fig:test_joints_size_hist.
|
||||
|
||||
|
||||
%% Histogram of the measured gap
|
||||
figure;
|
||||
hold on;
|
||||
histogram([(meas_flex(:,1)+meas_flex(:,2))/2,(meas_flex(:,3)+meas_flex(:,4))/2], 7)
|
||||
xlabel("Beam's Thickness [$\mu m$]");
|
||||
hold off;
|
||||
xlabel("Measured beam thickness [$\mu m$]");
|
||||
xticks([200, 205, 210, 215, 220, 225, 230, 235])
|
||||
|
||||
%% Save beam sizes
|
||||
save('./mat/flex_meas_dim.mat', 'meas_flex');
|
||||
|
@@ -10,50 +10,41 @@ addpath('./mat/'); % Path for data
|
||||
%% Colors for the figures
|
||||
colors = colororder;
|
||||
|
||||
% Flexible joint Geometry
|
||||
% The flexible joint used for the Nano-Hexapod is shown in Figure ref:fig:test_joints_bend_geometry.
|
||||
% Its bending stiffness is foreseen to be $k_{R_y}\approx 5\,\frac{Nm}{rad}$ and its stroke $\theta_{y,\text{max}}\approx 25\,mrad$.
|
||||
|
||||
% #+name: fig:test_joints_bend_geometry
|
||||
% #+caption: Geometry of the flexible joint
|
||||
% [[file:figs/test_joints_bend_geometry.png]]
|
||||
|
||||
% The height between the flexible point (center of the joint) and the point where external forces are applied is $h = 20\,mm$.
|
||||
|
||||
% Let's define the parameters on Matlab.
|
||||
|
||||
%% Parameters for study
|
||||
kRx = 5; % Bending Stiffness [Nm/rad]
|
||||
Rxmax = 25e-3; % Bending Stroke [rad]
|
||||
h = 20e-3; % Height [m]
|
||||
|
||||
% Required external applied force
|
||||
|
||||
% The bending $\theta_y$ of the flexible joint due to the force $F_x$ is:
|
||||
% \begin{equation}
|
||||
% \theta_y = \frac{M_y}{k_{R_y}} = \frac{F_x h}{k_{R_y}}
|
||||
% \end{equation}
|
||||
|
||||
% Therefore, the applied force to test the full range of the flexible joint is:
|
||||
% \begin{equation}
|
||||
% F_{x,\text{max}} = \frac{k_{R_y} \theta_{y,\text{max}}}{h}
|
||||
% \end{equation}
|
||||
|
||||
h = 22.5e-3; % Height [m]
|
||||
|
||||
%% Estimation of the force to test the full stroke
|
||||
Fxmax = kRx*Rxmax/h; % Force to induce maximum stroke [N]
|
||||
|
||||
|
||||
|
||||
% And we obtain:
|
||||
|
||||
sprintf('\\begin{equation} F_{x,max} = %.1f\\, [N] \\end{equation}', Fxmax)
|
||||
|
||||
% Required actuator stroke and sensors range
|
||||
|
||||
% The flexible joint is designed to allow a bending motion of $\pm 25\,mrad$.
|
||||
% The corresponding stroke at the location of the force sensor is:
|
||||
% \[ d_{x,\text{max}} = h \tan(R_{x,\text{max}}) \]
|
||||
|
||||
|
||||
%% Estimated maximum stroke [m]
|
||||
dxmax = h*tan(Rxmax);
|
||||
|
||||
sprintf('\\begin{equation} d_{max} = %.1f\\, [mm] \\end{equation}', 1e3*dxmax)
|
||||
%% Stiffness
|
||||
ka = 94e6; % Axial Stiffness [N/m]
|
||||
ks = 13e6; % Shear Stiffness [N/m]
|
||||
kb = 5; % Bending Stiffness [Nm/rad]
|
||||
kt = 260; % Torsional Stiffness [Nm/rad]
|
||||
|
||||
%% Maximum force
|
||||
Fa = 469; % Axial Force before yield [N]
|
||||
Fs = 242; % Shear Force before yield [N]
|
||||
Fb = 0.118; % Bending Force before yield [Nm]
|
||||
Ft = 1.508; % Torsional Force before yield [Nm]
|
||||
|
||||
%% Compute the corresponding stroke
|
||||
Xa = Fa/ka; % Axial Stroke before yield [m]
|
||||
Xs = Fs/ks; % Shear Stroke before yield [m]
|
||||
Xb = Fb/kb; % Bending Stroke before yield [rad]
|
||||
Xt = Ft/kt; % Torsional Stroke before yield [rad]
|
||||
|
||||
%% Height between the joint's center and the force application point
|
||||
h = 22.5e-3; % [m]
|
||||
|
||||
%% Estimated error due to shear
|
||||
epsilon_s = 100*abs(1-1/(1 + kb/(ks*h^2))); % Error in %
|
||||
|
||||
%% Estimated error due to limited load cell stiffness
|
||||
kF = 50/0.05e-3; % Estimated load cell stiffness [N/m]
|
||||
epsilon_f = 100*abs(1-1/(1 + kb/(kF*h^2))); % Error in %
|
||||
|
309
matlab/test_joints_3_bending_stiff_meas.m
Normal file
@@ -0,0 +1,309 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
%% Path for functions, data and scripts
|
||||
addpath('./mat/'); % Path for data
|
||||
|
||||
%% Colors for the figures
|
||||
colors = colororder;
|
||||
|
||||
%% Force Sensor Calibration
|
||||
% Load measurement data
|
||||
load('calibration_force_sensor.mat', 't', 'F', 'Fc')
|
||||
|
||||
% Remove any offset such that they are both measuring no force when not in contact.
|
||||
F = F - mean(F( t > 0.5 & t < 1.0)); % FC2231 [N]
|
||||
Fc = Fc - mean(Fc(t > 0.5 & t < 1.0)); % XFL212R [N]
|
||||
|
||||
% Only get useful stroke
|
||||
F = F( t > 2 & t < 2.2);
|
||||
Fc = Fc(t > 2 & t < 2.2);
|
||||
t = t( t > 2 & t < 2.2);
|
||||
|
||||
% Make a line fit
|
||||
fit_F = polyfit(Fc, F, 1);
|
||||
|
||||
% Estimate the gain mismatch
|
||||
F_gain_mismatch = 100*(1 - fit_F(1)); % in %
|
||||
|
||||
% Estimate non-linearity of the sensors
|
||||
F_non_linearity = 100*(F - (Fc*fit_F(1) + fit_F(2)))./Fc; % in %
|
||||
|
||||
%% Measured two forces and linear fit
|
||||
figure;
|
||||
yyaxis left
|
||||
hold on;
|
||||
plot(Fc, F, '.', 'DisplayName', 'Raw Data');
|
||||
plot([0, 6], [0,6]*fit_F(1) + fit_F(2), '-', 'color', [colors(3,:), 0.5], 'DisplayName', 'Line Fit');
|
||||
hold off;
|
||||
xlabel('XFL212R [N]'); ylabel('FC2231 [N]');
|
||||
xlim([0,6]); ylim([0,6]);
|
||||
xticks([0:6])
|
||||
yticks([0:6])
|
||||
|
||||
yyaxis right
|
||||
plot(Fc, movmean(F_non_linearity, 200), '-', 'DisplayName', 'Non linearity');
|
||||
ylim([-0.15, 0.15]);
|
||||
ylabel('Non Linearity [$\%$]')
|
||||
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
%% Estimaetd load cell stiffness
|
||||
% Load measurement data
|
||||
load('force_sensor_stiffness_meas.mat', 't', 'F', 'd')
|
||||
|
||||
% Remove offset
|
||||
F = F - mean(F(t > 0.5 & t < 1.0));
|
||||
|
||||
% Select important part of data
|
||||
F = F( t > 4.55 & t < 7.24);
|
||||
d = d( t > 4.55 & t < 7.24); d = d - d(1);
|
||||
t = t( t > 4.55 & t < 7.24);
|
||||
|
||||
% Linear fit
|
||||
fit_k = polyfit(F(F<10), d(F<10), 1);
|
||||
|
||||
%% Displacement as a function of the measured force
|
||||
figure;
|
||||
hold on;
|
||||
plot(F, 1e6*d, 'k-', 'DisplayName', 'Raw Data');
|
||||
plot(F([1,end]), 1e6*(F([1,end])*fit_k(1) + fit_k(2)), '--', 'DisplayName', sprintf('Fit, $k_F \\approx %.2f N/\\mu m$', 1e-6/fit_k(1)));
|
||||
hold off;
|
||||
xlabel('Force [$N$]'); ylabel('Displacement [$\mu m$]');
|
||||
xlim([0,45]); ylim([0,60]);
|
||||
legend('location', 'southeast', 'FontSize', 8);
|
||||
|
||||
%% 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');
|
||||
|
||||
% 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');
|
||||
|
||||
% 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
|
||||
[~, 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
|
||||
kRx_l = 1/fit_l(1); % Bending Stiffness [Nm/rad]
|
||||
kRx_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));
|
||||
|
||||
%% Measured force and displacement as a function of time
|
||||
figure;
|
||||
yyaxis left
|
||||
hold on;
|
||||
plot(t, F);
|
||||
plot(0.8*cos(0:0.01:2*pi)+0.8, ...
|
||||
2.8*sin(0:0.01:2*pi)-1, 'k--', 'HandleVisibility', 'off');
|
||||
text(1.8, -1.2, sprintf('Not in\ncontact'), 'horizontalalignment', 'left');
|
||||
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]');
|
||||
ylim([-4, 6])
|
||||
ylimr = get(gca,'Ylim');
|
||||
|
||||
yyaxis right
|
||||
plot(t, 1e3*d);
|
||||
xlabel('Time [s]');
|
||||
ylabel('Displacement $d_y$ [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])
|
||||
|
||||
% 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)];
|
||||
|
||||
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')
|
||||
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');
|
||||
hold off;
|
||||
xlabel('Torque $T_x$ [Nm]');
|
||||
ylabel('Angle $\theta_x$ [mrad]');
|
||||
xlim([0, 0.15]);
|
||||
ylim([-5,25]);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
%% Measure the bending stiffness and Stroke for all the flexible joints
|
||||
figure;
|
||||
hold on;
|
||||
|
||||
%% 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
|
||||
% Load the data
|
||||
load(sprintf('meas_stiff_flex_%i_x.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]
|
||||
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]);
|
||||
legend('location', 'southeast', 'FontSize', 8);
|
||||
|
||||
figure;
|
||||
histogram([kRx, kRy], [4:0.2:5])
|
||||
xlabel('Bending stiffness [Nm/rad]')
|
||||
xticks([4:0.2:5])
|
@@ -1,73 +0,0 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
%% Path for functions, data and scripts
|
||||
addpath('./mat/'); % Path for data
|
||||
|
||||
%% Colors for the figures
|
||||
colors = colororder;
|
||||
|
||||
% Finite Element Model
|
||||
% From the Finite Element Model, the stiffness and stroke of the flexible joint have been computed and summarized in Tables ref:tab:test_joints_axial_shear_prop and ref:tab:test_joints_bending_torsion_prop.
|
||||
|
||||
|
||||
%% Stiffness
|
||||
ka = 94e6; % Axial Stiffness [N/m]
|
||||
ks = 13e6; % Shear Stiffness [N/m]
|
||||
kb = 5; % Bending Stiffness [Nm/rad]
|
||||
kt = 260; % Torsional Stiffness [Nm/rad]
|
||||
|
||||
%% Maximum force
|
||||
Fa = 469; % Axial Force before yield [N]
|
||||
Fs = 242; % Shear Force before yield [N]
|
||||
Fb = 0.118; % Bending Force before yield [Nm]
|
||||
Ft = 1.508; % Torsional Force before yield [Nm]
|
||||
|
||||
%% Compute the corresponding stroke
|
||||
Xa = Fa/ka; % Axial Stroke before yield [m]
|
||||
Xs = Fs/ks; % Shear Stroke before yield [m]
|
||||
Xb = Fb/kb; % Bending Stroke before yield [rad]
|
||||
Xt = Ft/kt; % Torsional Stroke before yield [rad]
|
||||
|
||||
% Setup
|
||||
|
||||
% The setup is schematically represented in Figure ref:fig:test_joints_bench_side_bis.
|
||||
|
||||
% The force is applied on top of the flexible joint with a distance $h$ with the joint's center.
|
||||
% The displacement of the flexible joint is also measured at the same height.
|
||||
|
||||
% The height between the joint's center and the force application point is:
|
||||
|
||||
h = 25e-3; % Height [m]
|
||||
|
||||
% Estimation error due to force sensor compression
|
||||
% The measured displacement is not done directly at the joint's location.
|
||||
% The force sensor compression will then induce an error on the joint's stiffness.
|
||||
|
||||
% The force sensor stiffness $k_F$ is estimated to be around:
|
||||
|
||||
kF = 50/0.05e-3; % [N/m]
|
||||
|
||||
sprintf('k_F = %.1e [N/m]', kF)
|
||||
|
||||
% Estimation error due to height estimation error
|
||||
% Let's consider an error in the estimation of the height from the application of the force to the joint's center:
|
||||
% \begin{equation}
|
||||
% h_{\text{est}} = h (1 + \epsilon)
|
||||
% \end{equation}
|
||||
|
||||
% The computed bending stiffness will be:
|
||||
% \begin{equation}
|
||||
% k_\text{est} \approx h_{\text{est}}^2 \frac{F_x}{d_x}
|
||||
% \end{equation}
|
||||
|
||||
% And the stiffness estimation error is:
|
||||
% \begin{equation}
|
||||
% \frac{k_{\text{est}}}{k_{R_y}} = (1 + \epsilon)^2
|
||||
% \end{equation}
|
||||
|
||||
|
||||
h_err = 0.2e-3; % Height estimation error [m]
|
@@ -1,175 +0,0 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
%% Path for functions, data and scripts
|
||||
addpath('./mat/'); % Path for data
|
||||
|
||||
%% Colors for the figures
|
||||
colors = colororder;
|
||||
|
||||
% Force Sensor Calibration
|
||||
|
||||
% #+begin_note
|
||||
% *Load Cells*:
|
||||
% - [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]]
|
||||
% - [[file:doc/FRE_DS_XFL212R_FR_A3.pdf][XFL212R]]
|
||||
% #+end_note
|
||||
|
||||
% There are both specified to have $\pm 1 \%$ of non-linearity over the full range.
|
||||
|
||||
% The XFL212R has a spherical interface while the FC2231 has a flat surface.
|
||||
% Therefore, we should have a nice point contact when using the two force sensors as shown in Figure ref:fig:test_joints_force_sensor_calib.
|
||||
|
||||
% #+name: fig:test_joints_force_sensor_calib
|
||||
% #+caption: Zoom on the two force sensors in contact
|
||||
% #+attr_latex: :width 0.8\linewidth
|
||||
% [[file:figs/test_joints_force_sensor_calib.jpg]]
|
||||
|
||||
% The two force sensors are therefore measuring the exact same force, and we can compare the two measurements.
|
||||
|
||||
% Let's load the measured force of both sensors.
|
||||
|
||||
%% Load measurement data
|
||||
load('calibration_force_sensor.mat', 't', 'F', 'Fc')
|
||||
|
||||
|
||||
|
||||
% We remove any offset such that they are both measuring no force when not in contact.
|
||||
|
||||
%% Remove offset
|
||||
F = F - mean(F( t > 0.5 & t < 1.0));
|
||||
Fc = Fc - mean(Fc(t > 0.5 & t < 1.0));
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(t, F, 'DisplayName', 'FC2231');
|
||||
plot(t, Fc, 'DisplayName', 'XFL212R');
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Measured Force [N]');
|
||||
xlim([0,15]); ylim([0,55]);
|
||||
legend('location', 'southeast');
|
||||
|
||||
|
||||
|
||||
% #+name: fig:test_joints_force_sensor_calib_time
|
||||
% #+caption: Measured force using both sensors as a function of time
|
||||
% #+RESULTS:
|
||||
% [[file:figs/test_joints_force_sensor_calib_time.png]]
|
||||
|
||||
% Let's select only the first part from the moment they are in contact until the maximum force is reached.
|
||||
|
||||
|
||||
%% Only get the first part until maximum force
|
||||
F = F( t > 1.55 & t < 4.65);
|
||||
Fc = Fc(t > 1.55 & t < 4.65);
|
||||
|
||||
|
||||
|
||||
% Then, let's make a linear fit between the two measured forces.
|
||||
|
||||
|
||||
%% Make a line fit
|
||||
fit_F = polyfit(Fc, F, 1);
|
||||
|
||||
|
||||
|
||||
% The two forces are plotted against each other as well as the linear fit in Figure ref:fig:test_joints_force_sensor_calib_fit.
|
||||
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(Fc, F, '-', 'DisplayName', 'Raw Data');
|
||||
plot(Fc([1,end]), Fc([1,end])*fit_F(1) + fit_F(2), '--', 'DisplayName', 'Line Fit');
|
||||
hold off;
|
||||
xlabel('XFL212R [N]'); ylabel('FC2231 [N]');
|
||||
xlim([0,50]); ylim([0,50]);
|
||||
legend('location', 'southeast');
|
||||
|
||||
|
||||
|
||||
% #+name: fig:test_joints_force_sensor_calib_fit
|
||||
% #+caption: Measured two forces and linear fit
|
||||
% #+RESULTS:
|
||||
% [[file:figs/test_joints_force_sensor_calib_fit.png]]
|
||||
|
||||
% The measurement error between the two sensors is shown in Figure ref:fig:test_joints_force_sensor_calib_error.
|
||||
% It is below 0.1N for the full measurement range.
|
||||
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(Fc, F - (Fc*fit_F(1) + fit_F(2)), 'k-');
|
||||
hold off;
|
||||
xlim([0,50]); ylim([-0.12, 0.12]);
|
||||
xlabel('Measured Force [N]');
|
||||
ylabel('Error [N]')
|
||||
|
||||
% Force Sensor Stiffness
|
||||
|
||||
% The objective of this measurement is to estimate the stiffness of the force sensor [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]].
|
||||
|
||||
% To do so, a very stiff element is fixed in front of the force sensor as shown in Figure ref:fig:test_joints_meas_force_sensor_stiffness.
|
||||
|
||||
% Then, we apply a force on the stiff element through the force sensor.
|
||||
% We measure the deflection of the force sensor using an encoder.
|
||||
|
||||
% Then, having the force and the deflection, we should be able to estimate the stiffness of the force sensor supposing the stiffness of the other elements are much larger.
|
||||
|
||||
% #+name: fig:test_joints_meas_force_sensor_stiffness
|
||||
% #+caption: Bench used to measured the stiffness of the force sensor
|
||||
% #+attr_latex: :width 0.6\linewidth
|
||||
% [[file:figs/test_joints_meas_force_sensor_stiffness.jpg]]
|
||||
|
||||
% From the documentation, the deflection of the sensor at the maximum load (50N) is 0.05mm, the stiffness is therefore foreseen to be around $1\,N/\mu m$.
|
||||
|
||||
% Let's load the measured force as well as the measured displacement.
|
||||
|
||||
%% Load measurement data
|
||||
load('force_sensor_stiffness_meas.mat', 't', 'F', 'd')
|
||||
|
||||
|
||||
|
||||
% Some pre-processing is applied on the data.
|
||||
|
||||
%% Remove offset
|
||||
F = F - mean(F(t > 0.5 & t < 1.0));
|
||||
|
||||
%% Select important part of data
|
||||
F = F( t > 4.55 & t < 7.24);
|
||||
d = d( t > 4.55 & t < 7.24); d = d - d(1);
|
||||
t = t( t > 4.55 & t < 7.24);
|
||||
|
||||
|
||||
|
||||
% The linear fit is performed.
|
||||
|
||||
%% Linear fit
|
||||
fit_k = polyfit(F, d, 1);
|
||||
|
||||
|
||||
|
||||
% The displacement as a function of the force as well as the linear fit are shown in Figure ref:fig:test_joints_force_sensor_stiffness_fit.
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(F, 1e6*d, '-', 'DisplayName', 'Raw Data');
|
||||
plot(F([1,end]), 1e6*(F([1,end])*fit_k(1) + fit_k(2)), '--', 'DisplayName', 'Line Fit');
|
||||
hold off;
|
||||
xlabel('Force [$N$]'); ylabel('Displacement [$\mu m$]');
|
||||
xlim([0,45]); ylim([0,60]);
|
||||
legend('location', 'southeast');
|
||||
|
||||
|
||||
|
||||
% #+name: fig:test_joints_force_sensor_stiffness_fit
|
||||
% #+caption: Displacement as a function of the measured force
|
||||
% #+RESULTS:
|
||||
% [[file:figs/test_joints_force_sensor_stiffness_fit.png]]
|
||||
|
||||
% And we obtain the following stiffness:
|
||||
|
||||
%% Force Sensor Stiffness
|
||||
sprintf('k = %.2f [N/um]', 1e-6*1/fit_k(1));
|
@@ -1,285 +0,0 @@
|
||||
%% Clear Workspace and Close figures
|
||||
clear; close all; clc;
|
||||
|
||||
%% Intialize Laplace variable
|
||||
s = zpk('s');
|
||||
|
||||
%% Path for functions, data and scripts
|
||||
addpath('./mat/'); % Path for data
|
||||
|
||||
%% Colors for the figures
|
||||
colors = colororder;
|
||||
|
||||
% 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:
|
||||
|
||||
h = 25e-3; % [m]
|
||||
|
||||
%% Load Data
|
||||
load('meas_stiff_flex_1_x.mat', 't', 'F', 'd');
|
||||
|
||||
%% 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);
|
||||
|
||||
|
||||
|
||||
% The obtained time domain measurements are shown in Figure ref:fig:test_joints_meas_bend_time.
|
||||
|
||||
|
||||
%% Time Domain plots
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
plot(t, F);
|
||||
ylabel('Force [N]'); set(gca, 'XTickLabel',[]);
|
||||
|
||||
ax2 = nexttile;
|
||||
plot(t, 1e3*d);
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Displacement [mm]');
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([0,5]);
|
||||
|
||||
|
||||
|
||||
% #+name: fig:test_joints_meas_bend_time
|
||||
% #+caption: Typical time domain measurements
|
||||
% #+RESULTS:
|
||||
% [[file:figs/test_joints_meas_bend_time.png]]
|
||||
|
||||
% The displacement as a function of the force is then shown in Figure ref:fig:test_joints_meas_F_d.
|
||||
|
||||
|
||||
figure;
|
||||
plot(F, 1e3*d);
|
||||
xlabel('Force [N]'); ylabel('Displacement [mm]');
|
||||
xlim([0,6]); ylim([0,1]);
|
||||
|
||||
|
||||
|
||||
% #+name: fig:test_joints_meas_F_d
|
||||
% #+caption: Typical measurement of the diplacement as a function of the applied force
|
||||
% #+RESULTS:
|
||||
% [[file:figs/test_joints_meas_F_d.png]]
|
||||
|
||||
% The bending stiffness can be estimated by computing the slope of the curve in Figure ref:fig:test_joints_meas_F_d.
|
||||
% The bending stroke and the stiffness when touching the mechanical stop can also be estimated from the same figure.
|
||||
|
||||
|
||||
%% 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);
|
||||
|
||||
%% 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);
|
||||
|
||||
%% Reset displacement based on fit
|
||||
d = d - fit_l(2);
|
||||
fit_s(2) = fit_s(2) - fit_l(2);
|
||||
fit_l(2) = 0;
|
||||
|
||||
|
||||
|
||||
% The raw data as well as the fit corresponding to the two stiffnesses are shown in Figure ref:fig:test_joints_meas_F_d_lin_fit.
|
||||
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
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('Force [N]'); ylabel('Displacement [mm]');
|
||||
xlim([0,6]);
|
||||
|
||||
|
||||
|
||||
% #+name: fig:test_joints_meas_F_d_lin_fit
|
||||
% #+caption: Typical measurement of the diplacement as a function of the applied force with estimated linear fits
|
||||
% #+RESULTS:
|
||||
% [[file:figs/test_joints_meas_F_d_lin_fit.png]]
|
||||
|
||||
% Then, the bending stroke is estimated as crossing point between the two fitted lines:
|
||||
|
||||
d_max = fit_l(1)*fit_s(2)/(fit_l(1) - fit_s(1));
|
||||
|
||||
% Bending stiffness and bending stroke of all the flexible joints
|
||||
|
||||
% Now, let's estimate the bending stiffness and stroke for all the flexible joints.
|
||||
|
||||
|
||||
%% 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
|
||||
|
||||
%% 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
|
||||
|
||||
% 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.
|
||||
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
histogram(kRx, 'DisplayName', '$k_{R_x}$')
|
||||
histogram(kRy, 'DisplayName', '$k_{R_y}$')
|
||||
hold off;
|
||||
xlabel('Bending Stiffness [Nm/rad]')
|
||||
legend();
|
||||
|
||||
|
||||
|
||||
% #+name: fig:test_joints_bend_stiff_hist
|
||||
% #+caption: Histogram of the measured bending stiffness
|
||||
% #+RESULTS:
|
||||
% [[file:figs/test_joints_bend_stiff_hist.png]]
|
||||
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
histogram(1e3*Rmx, 'DisplayName', '$k_{R_x}$')
|
||||
histogram(1e3*Rmy, 'DisplayName', '$k_{R_y}$')
|
||||
hold off;
|
||||
xlabel('Bending Stroke [mrad]')
|
||||
legend();
|
||||
|
||||
|
||||
|
||||
% #+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.
|
||||
|
||||
|
||||
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');
|
149
preamble.tex
@@ -1,139 +1,16 @@
|
||||
\usepackage{float}
|
||||
\usepackage{enumitem}
|
||||
\usepackage[ %
|
||||
acronym, % Separate acronyms and glossary
|
||||
toc, % appear in ToC
|
||||
automake, % auto-use the makeglossaries command (requires shell-escape)
|
||||
nonumberlist, % don't back reference pages
|
||||
nogroupskip, % don't group by letter
|
||||
nopostdot % don't add a dot at the end of each element
|
||||
]{glossaries}
|
||||
|
||||
\usepackage{caption,tabularx,booktabs}
|
||||
\usepackage{bm}
|
||||
\usepackage[stylemods=longextra]{glossaries-extra}
|
||||
|
||||
\usepackage{xpatch} % Recommanded for biblatex
|
||||
\usepackage[ % use biblatex for bibliography
|
||||
backend=biber, % use biber backend (bibtex replacement) or bibtex
|
||||
style=ieee, % bib style
|
||||
citestyle=numeric-comp, % bib style
|
||||
hyperref=true, % activate hyperref support
|
||||
backref=true, % activate backrefs
|
||||
isbn=false, % don't show isbn tags
|
||||
url=false, % don't show url tags
|
||||
doi=false, % don't show doi tags
|
||||
urldate=long, % display type for dates
|
||||
maxnames=3, %
|
||||
minnames=1, %
|
||||
maxbibnames=5, %
|
||||
minbibnames=3, %
|
||||
maxcitenames=2, %
|
||||
mincitenames=1 %
|
||||
]{biblatex}
|
||||
\setabbreviationstyle[acronym]{long-short}
|
||||
\setglossarystyle{long-name-desc}
|
||||
|
||||
\setlength\bibitemsep{1.1\itemsep}
|
||||
|
||||
% \renewcommand*{\bibfont}{\footnotesize}
|
||||
|
||||
\usepackage{fontawesome}
|
||||
|
||||
\usepackage{caption}
|
||||
\usepackage{subcaption}
|
||||
|
||||
\captionsetup[figure]{labelfont=bf}
|
||||
\captionsetup[subfigure]{labelfont=bf}
|
||||
\captionsetup[listing]{labelfont=bf}
|
||||
\captionsetup[table]{labelfont=bf}
|
||||
|
||||
\usepackage{xcolor}
|
||||
|
||||
\definecolor{my-blue}{HTML}{6b7adb}
|
||||
\definecolor{my-pale-blue}{HTML}{e6e9f9}
|
||||
\definecolor{my-red}{HTML}{db6b6b}
|
||||
\definecolor{my-pale-red}{HTML}{f9e6e6}
|
||||
\definecolor{my-green}{HTML}{6bdbb6}
|
||||
\definecolor{my-pale-green}{HTML}{e6f9f3}
|
||||
\definecolor{my-yellow}{HTML}{dbd26b}
|
||||
\definecolor{my-pale-yellow}{HTML}{f9f7e6}
|
||||
\definecolor{my-orange}{HTML}{dba76b}
|
||||
\definecolor{my-pale-orange}{HTML}{f9f0e6}
|
||||
\definecolor{my-grey}{HTML}{a3a3a3}
|
||||
\definecolor{my-pale-grey}{HTML}{f0f0f0}
|
||||
\definecolor{my-turq}{HTML}{6bc7db}
|
||||
\definecolor{my-pale-turq}{HTML}{e6f6f9}
|
||||
|
||||
\usepackage{inconsolata}
|
||||
|
||||
\usepackage[newfloat=true, chapter]{minted}
|
||||
\usemintedstyle{autumn}
|
||||
|
||||
\setminted{frame=lines,breaklines=true,tabsize=4,fontsize=\scriptsize,autogobble=true,labelposition=topline,bgcolor=my-pale-grey}
|
||||
\setminted[matlab]{label=Matlab}
|
||||
\setminted[latex]{label=LaTeX}
|
||||
\setminted[bash]{label=Bash}
|
||||
\setminted[python]{label=Python}
|
||||
\setminted[text]{label=Results}
|
||||
\setminted[md]{label=Org Mode}
|
||||
|
||||
\setmintedinline{fontsize=\normalsize,bgcolor=my-pale-grey}
|
||||
|
||||
\usepackage[most]{tcolorbox}
|
||||
|
||||
\tcbuselibrary{minted}
|
||||
|
||||
\newtcolorbox{seealso}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=See Also}
|
||||
\newtcolorbox{hint}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=Hint}
|
||||
\newtcolorbox{definition}{enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Definition}
|
||||
\newtcolorbox{important}{ enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Important}
|
||||
\newtcolorbox{exampl}[1][]{ enhanced,breakable,colback=my-pale-green,colframe=my-green,fonttitle=\bfseries,title=Example,#1}
|
||||
\newtcolorbox{exercice}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Exercice}
|
||||
\newtcolorbox{question}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Question}
|
||||
\newtcolorbox{answer}{ enhanced,breakable,colback=my-pale-turq,colframe=my-turq,fonttitle=\bfseries,title=Answer}
|
||||
\newtcolorbox{summary}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Summary}
|
||||
\newtcolorbox{note}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Note}
|
||||
\newtcolorbox{caution}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Caution}
|
||||
\newtcolorbox{warning}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Warning}
|
||||
|
||||
\newtcolorbox{my-quote}[1]{%
|
||||
colback=my-pale-grey,
|
||||
grow to right by=-10mm,
|
||||
grow to left by=-10mm,
|
||||
boxrule=0pt,
|
||||
boxsep=0pt,
|
||||
breakable,
|
||||
enhanced jigsaw,
|
||||
borderline west={4pt}{0pt}{my-grey}}
|
||||
|
||||
\renewenvironment{quote}{\begin{my-quote}}{\end{my-quote}}
|
||||
|
||||
\newtcolorbox{my-verse}[1]{%
|
||||
colback=my-pale-grey,
|
||||
grow to right by=-10mm,
|
||||
grow to left by=-10mm,
|
||||
boxrule=0pt,
|
||||
boxsep=0pt,
|
||||
breakable,
|
||||
enhanced jigsaw,
|
||||
borderline west={4pt}{0pt}{my-grey}}
|
||||
|
||||
\renewenvironment{verse}{\begin{my-verse}}{\end{my-verse}}
|
||||
|
||||
\usepackage{environ}% http://ctan.org/pkg/environ
|
||||
\NewEnviron{aside}{%
|
||||
\marginpar{\BODY}
|
||||
}
|
||||
|
||||
\renewenvironment{verbatim}{\VerbatimEnvironment\begin{minted}[]{text}}{\end{minted}}
|
||||
|
||||
\usepackage{soul}
|
||||
\sethlcolor{my-pale-grey}
|
||||
|
||||
\let\OldTexttt\texttt
|
||||
\renewcommand{\texttt}[1]{{\ttfamily\hl{\mbox{\,#1\,}}}}
|
||||
|
||||
\makeatletter
|
||||
\preto\Gin@extensions{png,}
|
||||
\DeclareGraphicsRule{.png}{pdf}{.pdf}{\noexpand\Gin@base.pdf}
|
||||
\preto\Gin@extensions{gif,}
|
||||
\DeclareGraphicsRule{.gif}{png}{.png}{\noexpand\Gin@base.png}
|
||||
\makeatother
|
||||
|
||||
\usepackage{hyperref}
|
||||
\hypersetup{
|
||||
colorlinks = true,
|
||||
allcolors = my-blue
|
||||
}
|
||||
|
||||
\usepackage{hypcap}
|
||||
\makeindex
|
||||
\makeglossaries
|
||||
|
134
preamble_extra.tex
Normal file
@@ -0,0 +1,134 @@
|
||||
\usepackage{float}
|
||||
\usepackage{enumitem}
|
||||
|
||||
\usepackage{caption,tabularx,booktabs}
|
||||
\usepackage{bm}
|
||||
|
||||
\usepackage{xpatch} % Recommanded for biblatex
|
||||
\usepackage[ % use biblatex for bibliography
|
||||
backend=biber, % use biber backend (bibtex replacement) or bibtex
|
||||
style=ieee, % bib style
|
||||
hyperref=true, % activate hyperref support
|
||||
backref=true, % activate backrefs
|
||||
isbn=false, % don't show isbn tags
|
||||
url=false, % don't show url tags
|
||||
doi=false, % don't show doi tags
|
||||
urldate=long, % display type for dates
|
||||
maxnames=3, %
|
||||
minnames=1, %
|
||||
maxbibnames=5, %
|
||||
minbibnames=3, %
|
||||
maxcitenames=2, %
|
||||
mincitenames=1 %
|
||||
]{biblatex}
|
||||
|
||||
\setlength\bibitemsep{1.1\itemsep}
|
||||
|
||||
\usepackage{caption}
|
||||
\usepackage{subcaption}
|
||||
|
||||
\captionsetup[figure]{labelfont=bf}
|
||||
\captionsetup[subfigure]{labelfont=bf}
|
||||
\captionsetup[listing]{labelfont=bf}
|
||||
\captionsetup[table]{labelfont=bf}
|
||||
|
||||
\usepackage{xcolor}
|
||||
|
||||
\definecolor{my-blue}{HTML}{6b7adb}
|
||||
\definecolor{my-pale-blue}{HTML}{e6e9f9}
|
||||
\definecolor{my-red}{HTML}{db6b6b}
|
||||
\definecolor{my-pale-red}{HTML}{f9e6e6}
|
||||
\definecolor{my-green}{HTML}{6bdbb6}
|
||||
\definecolor{my-pale-green}{HTML}{e6f9f3}
|
||||
\definecolor{my-yellow}{HTML}{dbd26b}
|
||||
\definecolor{my-pale-yellow}{HTML}{f9f7e6}
|
||||
\definecolor{my-orange}{HTML}{dba76b}
|
||||
\definecolor{my-pale-orange}{HTML}{f9f0e6}
|
||||
\definecolor{my-grey}{HTML}{a3a3a3}
|
||||
\definecolor{my-pale-grey}{HTML}{f0f0f0}
|
||||
\definecolor{my-turq}{HTML}{6bc7db}
|
||||
\definecolor{my-pale-turq}{HTML}{e6f6f9}
|
||||
|
||||
\usepackage{inconsolata}
|
||||
|
||||
\usepackage[newfloat=true, chapter]{minted}
|
||||
\usemintedstyle{autumn}
|
||||
|
||||
\setminted{frame=lines,breaklines=true,tabsize=4,fontsize=\scriptsize,autogobble=true,labelposition=topline,bgcolor=my-pale-grey}
|
||||
\setminted[matlab]{label=Matlab}
|
||||
\setminted[latex]{label=LaTeX}
|
||||
\setminted[bash]{label=Bash}
|
||||
\setminted[python]{label=Python}
|
||||
\setminted[text]{label=Results}
|
||||
\setminted[md]{label=Org Mode}
|
||||
|
||||
\setmintedinline{fontsize=\normalsize,bgcolor=my-pale-grey}
|
||||
|
||||
\usepackage[most]{tcolorbox}
|
||||
|
||||
\tcbuselibrary{minted}
|
||||
|
||||
\newtcolorbox{seealso}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=See Also}
|
||||
\newtcolorbox{hint}{ enhanced,breakable,colback=my-pale-grey,colframe=my-grey,fonttitle=\bfseries,title=Hint}
|
||||
\newtcolorbox{definition}{enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Definition}
|
||||
\newtcolorbox{important}{ enhanced,breakable,colback=my-pale-red, colframe=my-red, fonttitle=\bfseries,title=Important}
|
||||
\newtcolorbox{exampl}[1][]{ enhanced,breakable,colback=my-pale-green,colframe=my-green,fonttitle=\bfseries,title=Example,#1}
|
||||
\newtcolorbox{exercice}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Exercice}
|
||||
\newtcolorbox{question}{ enhanced,breakable,colback=my-pale-yellow,colframe=my-yellow,fonttitle=\bfseries,title=Question}
|
||||
\newtcolorbox{answer}{ enhanced,breakable,colback=my-pale-turq,colframe=my-turq,fonttitle=\bfseries,title=Answer}
|
||||
\newtcolorbox{summary}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Summary}
|
||||
\newtcolorbox{note}{ enhanced,breakable,colback=my-pale-blue,colframe=my-blue,fonttitle=\bfseries,title=Note}
|
||||
\newtcolorbox{caution}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Caution}
|
||||
\newtcolorbox{warning}{ enhanced,breakable,colback=my-pale-orange,colframe=my-orange,fonttitle=\bfseries,title=Warning}
|
||||
|
||||
\newtcolorbox{my-quote}[1]{%
|
||||
colback=my-pale-grey,
|
||||
grow to right by=-10mm,
|
||||
grow to left by=-10mm,
|
||||
boxrule=0pt,
|
||||
boxsep=0pt,
|
||||
breakable,
|
||||
enhanced jigsaw,
|
||||
borderline west={4pt}{0pt}{my-grey}}
|
||||
|
||||
\renewenvironment{quote}{\begin{my-quote}}{\end{my-quote}}
|
||||
|
||||
\newtcolorbox{my-verse}[1]{%
|
||||
colback=my-pale-grey,
|
||||
grow to right by=-10mm,
|
||||
grow to left by=-10mm,
|
||||
boxrule=0pt,
|
||||
boxsep=0pt,
|
||||
breakable,
|
||||
enhanced jigsaw,
|
||||
borderline west={4pt}{0pt}{my-grey}}
|
||||
|
||||
\renewenvironment{verse}{\begin{my-verse}}{\end{my-verse}}
|
||||
|
||||
\usepackage{environ}% http://ctan.org/pkg/environ
|
||||
\NewEnviron{aside}{%
|
||||
\marginpar{\BODY}
|
||||
}
|
||||
|
||||
\renewenvironment{verbatim}{\VerbatimEnvironment\begin{minted}[]{text}}{\end{minted}}
|
||||
|
||||
\usepackage{soul}
|
||||
\sethlcolor{my-pale-grey}
|
||||
|
||||
\let\OldTexttt\texttt
|
||||
\renewcommand{\texttt}[1]{{\ttfamily\hl{\mbox{\,#1\,}}}}
|
||||
|
||||
\makeatletter
|
||||
\preto\Gin@extensions{png,}
|
||||
\DeclareGraphicsRule{.png}{pdf}{.pdf}{\noexpand\Gin@base.pdf}
|
||||
\preto\Gin@extensions{gif,}
|
||||
\DeclareGraphicsRule{.gif}{png}{.png}{\noexpand\Gin@base.png}
|
||||
\makeatother
|
||||
|
||||
\usepackage{hyperref}
|
||||
\hypersetup{
|
||||
colorlinks = true,
|
||||
allcolors = my-blue
|
||||
}
|
||||
|
||||
\usepackage{hypcap}
|
@@ -1,8 +1,9 @@
|
||||
% Created 2024-04-05 Fri 17:52
|
||||
% Created 2024-11-18 Mon 13:00
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||
|
||||
\input{preamble.tex}
|
||||
\input{preamble_extra.tex}
|
||||
\bibliography{test-bench-flexible-joints.bib}
|
||||
\author{Dehaeze Thomas}
|
||||
\date{\today}
|
||||
@@ -12,7 +13,7 @@
|
||||
pdftitle={Flexible Joints - Test Bench},
|
||||
pdfkeywords={},
|
||||
pdfsubject={},
|
||||
pdfcreator={Emacs 29.3 (Org mode 9.7)},
|
||||
pdfcreator={Emacs 29.4 (Org mode 9.6)},
|
||||
pdflang={English}}
|
||||
\usepackage{biblatex}
|
||||
|
||||
@@ -22,11 +23,12 @@
|
||||
\tableofcontents
|
||||
|
||||
\clearpage
|
||||
At both ends of the nano-hexapod struts, a flexible spherical joint is used.
|
||||
Ideally, these flexible joints would behave as perfect spherical joints, that is to say no bending and torsional stiffnesses, infinite shear and axial stiffnesses, unlimited bending and torsional stroke, no friction and no backlash.
|
||||
|
||||
Deviations from this ideal properties will impact the dynamics of the Nano-Hexapod and could limit the attainable performances.
|
||||
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}.
|
||||
At both ends of the nano-hexapod struts, a flexible joint is used.
|
||||
Ideally, these flexible joints would behave as perfect spherical joints, that is to say no bending and torsional stiffness, infinite shear and axial stiffness, unlimited bending and torsional stroke, no friction, and no backlash.
|
||||
|
||||
Deviations from these ideal properties will impact the dynamics of the Nano-Hexapod and could limit the attainable performance.
|
||||
During the detailed design phase, specifications in terms of stiffness and stroke were determined and are summarized in Table \ref{tab:test_joints_specs}.
|
||||
|
||||
\begin{table}[htbp]
|
||||
\centering
|
||||
@@ -45,14 +47,14 @@ Bending Stroke & \(> 1\,\text{mrad}\) & 24.5\\
|
||||
|
||||
\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 joint characteristics are summarized in Table \ref{tab:test_joints_specs}.
|
||||
This flexible joint is a monolithic piece of stainless steel\footnote{The alloy used is called \emph{F16PH}, also refereed as ``1.4542''} manufactured using wire electrical discharge machining.
|
||||
It serves several functions as shown in Figure \ref{fig:test_joints_iso}, such as:
|
||||
It serves several functions, as shown in Figure \ref{fig:test_joints_iso}, such as:
|
||||
\begin{itemize}
|
||||
\item Rigid interfacing with the nano-hexapod plates (yellow surfaces)
|
||||
\item Rigid interfacing with the amplified piezoelectric actuator (blue surface)
|
||||
\item Allow two rotations between the ``yellow'' and the ``blue'' interfaces.
|
||||
The rotation axes are represented by the dashed lines which are intersecting
|
||||
The rotation axes are represented by the dashed lines that intersect
|
||||
\end{itemize}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
@@ -77,7 +79,7 @@ The rotation axes are represented by the dashed lines which are intersecting
|
||||
\caption{\label{fig:test_joints_schematic}Geometry of the optimized flexible joints}
|
||||
\end{figure}
|
||||
|
||||
16 flexible joints have been ordered (shown in Figure \ref{fig:test_joints_received}) such some selection can be made for the 12 that will be used on the nano-hexapod.
|
||||
Sixteen flexible joints have been ordered (shown in Figure \ref{fig:test_joints_received}) such that some selection can be made for the twelve that will be used on the nano-hexapod.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.64\textwidth}
|
||||
@@ -95,73 +97,61 @@ The rotation axes are represented by the dashed lines which are intersecting
|
||||
\caption{\label{fig:test_joints_picture}Pictures of the received 16 flexible joints}
|
||||
\end{figure}
|
||||
|
||||
In this document, the received flexible joints are characterize to make sure they are fulfilling the requirements and such that they can well be modelled.
|
||||
In this document, the received flexible joints are characterized to ensure that they fulfill the requirements and such that they can well be modeled.
|
||||
|
||||
First, the flexible joints are visually inspected, and the minimum gaps (responsible for most of the joint compliance) are measured (Section \ref{sec:test_joints_flex_dim_meas}).
|
||||
Then, a test bench is developed to measure the bending stiffness of the flexible joints.
|
||||
Then, a test bench was developed to measure the bending stiffness of the flexible joints.
|
||||
The development of this test bench is presented in Section \ref{sec:test_joints_test_bench_desc}, including a noise budget and some requirements in terms of instrumentation.
|
||||
Finally, the test bench is manufacturer and used to measure the bending stiffnesses of all the flexible joints.
|
||||
The test bench is then used to measure the bending stiffnesses of all the flexible joints.
|
||||
Results are shown in Section \ref{sec:test_joints_bending_stiffness_meas}
|
||||
|
||||
\begin{table}[htbp]
|
||||
\centering
|
||||
\begin{tabularx}{0.6\linewidth}{lX}
|
||||
\toprule
|
||||
\textbf{Sections} & \textbf{Matlab File}\\
|
||||
\midrule
|
||||
Section \ref{sec:test_joints_flex_dim_meas} & \texttt{test\_joints\_1\_dim\_meas.m}\\
|
||||
Section \ref{sec:test_joints_test_bench_desc} & \texttt{test\_joints\_2\_bench\_dimensioning.m}\\
|
||||
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}
|
||||
\section{Measurement Bench}
|
||||
|
||||
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.
|
||||
Two dimensions are critical for the bending stiffness of the flexible joints.
|
||||
These dimensions can be measured using a profilometer.
|
||||
The dimensions of the flexible joint in the Y-Z plane will contribute to the X-bending stiffness, whereas the dimensions in the X-Z plane will contribute to the Y-bending stiffness.
|
||||
|
||||
The setup to measure the dimension of the ``X'' flexible beam is shown in Figure \ref{fig:test_joints_profilometer_setup}.
|
||||
|
||||
What we typically observe is shown in Figure \ref{fig:test_joints_profilometer_image}.
|
||||
It is then possible to estimate to dimension of the flexible beam with an accuracy of \(\approx 5\,\mu m\),
|
||||
The setup used to measure the dimensions of the ``X'' flexible beam is shown in Figure \ref{fig:test_joints_profilometer_setup}.
|
||||
What is typically observed is shown in Figure \ref{fig:test_joints_profilometer_image}.
|
||||
It is then possible to estimate the dimension of the flexible beam with an accuracy of \(\approx 5\,\mu m\),
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_joints_profilometer_image.jpg}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_joints_profilometer_setup.jpg}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_joints_profilometer_image}Flexible joint fixed on the profilometer}
|
||||
\subcaption{\label{fig:test_joints_profilometer_setup}Flexible joint fixed on the profilometer}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_joints_profilometer_setup.png}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_joints_profilometer_image.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_joints_profilometer_setup}Obtain image to estimate the gap}
|
||||
\subcaption{\label{fig:test_joints_profilometer_image}Picture of the gap}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_joints_profilometer}Setup to measure the dimension of the flexible beam corresponding to the X-bending stiffness. The flexible joint is fixed to the profilometer (\subref{fig:test_joints_profilometer_image}) and a image is obtained with which the gap can be estimated (\subref{fig:test_joints_profilometer_setup})}
|
||||
\caption{\label{fig:test_joints_profilometer}Setup to measure the dimension of the flexible beam corresponding to the X-bending stiffness. The flexible joint is fixed to the profilometer (\subref{fig:test_joints_profilometer_setup}) and a image is obtained with which the gap can be estimated (\subref{fig:test_joints_profilometer_image})}
|
||||
\end{figure}
|
||||
|
||||
\section{Measurement Results}
|
||||
The specified flexible beam thickness (gap) is \(250\,\mu m\).
|
||||
Four gaps are measured for each flexible joints (2 in the \(x\) direction and 2 in the \(y\) direction).
|
||||
The ``beam thickness'' is then estimated to be the mean between the gaps measured on opposite sides.
|
||||
Four gaps are measured for each flexible joint (2 in the \(x\) direction and 2 in the \(y\) direction).
|
||||
The ``beam thickness'' is then estimated as the mean between the gaps measured on opposite sides.
|
||||
|
||||
An histogram of the measured beam thicknesses is shown in Figure \ref{fig:test_joints_size_hist}.
|
||||
The measured thickness is less thant the specified value of \(250\,\mu m\), but this optical method may not be very accurate as the estimated gap can depend on the lighting of the part and of its proper alignment.
|
||||
A histogram of the measured beam thicknesses is shown in Figure \ref{fig:test_joints_size_hist}.
|
||||
The measured thickness is less than the specified value of \(250\,\mu m\), but this optical method may not be very accurate because the estimated gap can depend on the lighting of the part and of its proper alignment.
|
||||
|
||||
However, what is more important than the true value of the thickness is the consistency between all the flexible joints.
|
||||
However, what is more important than the true value of the thickness is the consistency between all flexible joints.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_joints_size_hist.png}
|
||||
\caption{\label{fig:test_joints_size_hist}Histogram for the (16x2) measured beams' thickness}
|
||||
\caption{\label{fig:test_joints_size_hist}Histogram for the (16x2) measured beams' thicknesses}
|
||||
\end{figure}
|
||||
|
||||
\section{Bad flexible joints}
|
||||
|
||||
Using this profilometer allowed to detect flexible joints with manufacturing defects such as non-symmetrical shape (see Figure \ref{fig:test_joints_bad_shape}) or flexible joints with machining chips stuck in the gap (see Figure \ref{fig:test_joints_bad_chips}).
|
||||
Using this profilometer allowed to detect flexible joints with manufacturing defects such as non-symmetrical shapes (see Figure \ref{fig:test_joints_bad_shape}) or flexible joints with machining chips stuck in the gap (see Figure \ref{fig:test_joints_bad_chips}).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
@@ -178,12 +168,13 @@ Using this profilometer allowed to detect flexible joints with manufacturing def
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_joints_bad}Example of two flexible joints that were considered unsatisfactory after visual inspection}
|
||||
\end{figure}
|
||||
\chapter{Development of the Measurement Test Bench}
|
||||
|
||||
\chapter{Compliance Measurement Test Bench}
|
||||
\label{sec:test_joints_test_bench_desc}
|
||||
The most important characteristic of the flexible joint to be measured is its bending stiffness \(k_{R_x} \approx k_{R_y}\).
|
||||
|
||||
To estimate the bending stiffness, the basic idea is to apply a torque \(T_{x}\) to the flexible joints and to measure its angular deflection \(\theta_{x}\).
|
||||
Then, the bending stiffness can be computed from equation \eqref{eq:test_joints_bending_stiffness}.
|
||||
The bending stiffness can then be computed from equation \eqref{eq:test_joints_bending_stiffness}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_bending_stiffness}
|
||||
\boxed{k_{R_x} = \frac{T_x}{\theta_x}, \quad k_{R_y} = \frac{T_y}{\theta_y}}
|
||||
@@ -191,17 +182,16 @@ Then, the bending stiffness can be computed from equation \eqref{eq:test_joints_
|
||||
\section{Measurement principle}
|
||||
\label{ssec:test_joints_meas_principle}
|
||||
\paragraph{Torque and Rotation measurement}
|
||||
|
||||
In order to apply torque \(T_{y}\) between the two mobile parts of the flexible joint, a known ``linear'' force \(F_{x}\) can be applied instead at the certain height \(h\) with respect to the rotation point.
|
||||
In that case the equivalent applied torque can be estimated from equation \eqref{eq:test_joints_force_torque_distance}.
|
||||
Note that the application point of the force should be far enough from the rotation axis such that the resulting bending motion is much larger than the displacement due to shear.
|
||||
Such effect is studied in Section \ref{ssec:test_joints_error_budget}.
|
||||
To apply torque \(T_{y}\) between the two mobile parts of the flexible joint, a known ``linear'' force \(F_{x}\) can be applied instead at a certain distance \(h\) with respect to the rotation point.
|
||||
In this case, the equivalent applied torque can be estimated from equation \eqref{eq:test_joints_force_torque_distance}.
|
||||
Note that the application point of the force should be sufficiently far from the rotation axis such that the resulting bending motion is much larger than the displacement due to shear.
|
||||
Such effects are studied in Section \ref{ssec:test_joints_error_budget}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_force_torque_distance}
|
||||
T_y = h F_x, \quad T_x = h F_y
|
||||
\end{equation}
|
||||
|
||||
Similarly, instead of directly measuring the bending motion \(\theta_y\) of the flexible joint, its linear motion \(d_x\) at a certain height \(h\) from the rotation points is measured.
|
||||
Similarly, instead of directly measuring the bending motion \(\theta_y\) of the flexible joint, its linear motion \(d_x\) at a certain distance \(h\) from the rotation points is measured.
|
||||
The equivalent rotation is estimated from \eqref{eq:test_joints_rot_displ}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_rot_displ}
|
||||
@@ -219,15 +209,15 @@ k_{R_y} &= \frac{T_y}{\theta_y} = \frac{h F_x}{\tan^{-1}\left( \frac{d_x}{h} \ri
|
||||
|
||||
The working principle of the measurement bench is schematically shown in Figure \ref{fig:test_joints_bench_working_principle}.
|
||||
One part of the flexible joint is fixed to a rigid frame while a (known) force \(F_x\) is applied to the other side of the flexible joint.
|
||||
The deflection of the joint \(d_x\) is measured by a displacement sensor.
|
||||
The deflection of the joint \(d_x\) is measured using a displacement sensor.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_joints_bench_working_principle.png}
|
||||
\caption{\label{fig:test_joints_bench_working_principle}Workind principle of the test bench used to estimate the bending stiffness \(k_{R_y}\) of the flexible joints by measuring \(F_x\), \(d_x\) and \(h\)}
|
||||
\caption{\label{fig:test_joints_bench_working_principle}Working principle of the test bench used to estimate the bending stiffness \(k_{R_y}\) of the flexible joints by measuring \(F_x\), \(d_x\) and \(h\)}
|
||||
\end{figure}
|
||||
\paragraph{Required external applied force}
|
||||
|
||||
\paragraph{Required external applied force}
|
||||
The bending stiffness is foreseen to be \(k_{R_y} \approx k_{R_x} \approx 5\,\frac{Nm}{rad}\) and its stroke \(\theta_{y,\text{max}}\approx \theta_{x,\text{max}}\approx 25\,mrad\).
|
||||
The height between the flexible point (center of the joint) and the point where external forces are applied is \(h = 22.5\,mm\) (see Figure \ref{fig:test_joints_bench_working_principle}).
|
||||
|
||||
@@ -237,39 +227,136 @@ The bending \(\theta_y\) of the flexible joint due to the force \(F_x\) is given
|
||||
\theta_y = \frac{T_y}{k_{R_y}} = \frac{F_x h}{k_{R_y}}
|
||||
\end{equation}
|
||||
|
||||
Therefore, the force that has to be applied to test the full range of the flexible joint is given by equation \eqref{eq:test_joints_max_force}.
|
||||
Therefore, the force that must be applied to test the full range of the flexible joints is given by equation \eqref{eq:test_joints_max_force}.
|
||||
The measurement range of the force sensor should then be higher than \(5.5\,N\).
|
||||
|
||||
\begin{equation}\label{eq:test_joints_max_force}
|
||||
F_{x,\text{max}} = \frac{k_{R_y} \theta_{y,\text{max}}}{h} \approx 5.5\,N
|
||||
\end{equation}
|
||||
\paragraph{Required actuator stroke and sensors range}
|
||||
|
||||
\paragraph{Required actuator stroke and sensors range}
|
||||
The flexible joint is designed to allow a bending motion of \(\pm 25\,mrad\).
|
||||
The corresponding stroke at the location of the force sensor is given by \eqref{eq:test_joints_max_stroke}.
|
||||
In order to test the full range of the flexible joint, the means of applying a force (explained in the next section) should allow a motion of at least \(0.5\,mm\).
|
||||
To test the full range of the flexible joint, the means of applying a force (explained in the next section) should allow a motion of at least \(0.5\,mm\).
|
||||
Similarly, the measurement range of the displacement sensor should also be higher than \(0.5\,mm\).
|
||||
|
||||
\begin{equation}\label{eq:test_joints_max_stroke}
|
||||
d_{x,\text{max}} = h \tan(R_{x,\text{max}}) \approx 0.5\,mm
|
||||
\end{equation}
|
||||
\section{Developed test bench}
|
||||
|
||||
\paragraph{Force and Displacement measurements}
|
||||
To determine the applied force, a load cell will be used in series with the mechanism that applied the force.
|
||||
The measured deflection of the flexible joint will be indirectly estimated from the displacement of the force sensor itself (see Section \ref{ssec:test_joints_test_bench}).
|
||||
Indirectly measuring the deflection of the flexible joint induces some errors because of the limited stiffness between the force sensor and the displacement sensor.
|
||||
Such an effect will be estimated in the error budget (Section \ref{ssec:test_joints_error_budget})
|
||||
|
||||
\section{Error budget}
|
||||
\label{ssec:test_joints_error_budget}
|
||||
To estimate the accuracy of the measured bending stiffness that can be obtained using this measurement principle, an error budget is performed.
|
||||
|
||||
Based on equation \eqref{eq:test_joints_stiff_displ_force}, several errors can affect the accuracy of the measured bending stiffness:
|
||||
\begin{itemize}
|
||||
\item Errors in the measured torque \(M_x, M_y\): this is mainly due to inaccuracies in the load cell and of the height estimation \(h\)
|
||||
\item Errors in the measured bending motion of the flexible joints \(\theta_x, \theta_y\): errors from limited shear stiffness, from the deflection of the load cell itself, and inaccuracy of the height estimation \(h\)
|
||||
\end{itemize}
|
||||
|
||||
If only the bending stiffness is considered, the induced displacement is described by \eqref{eq:test_joints_dbx}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_dbx}
|
||||
d_{x,b} = h \tan(\theta_y) = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right)
|
||||
\end{equation}
|
||||
\paragraph{Effect of Shear}
|
||||
The applied force \(F_x\) will induce some shear \(d_{x,s}\) which is described by \eqref{eq:test_joints_shear_displ} with \(k_s\) the shear stiffness of the flexible joint.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_shear_displ}
|
||||
d_{x,s} = \frac{F_x}{k_s}
|
||||
\end{equation}
|
||||
|
||||
The measured displacement \(d_x\) is affected shear, as shown in equation \eqref{eq:test_joints_displ_shear}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_displ_shear}
|
||||
d_x = d_{x,b} + d_{x,s} = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right) + \frac{F_x}{k_s} \approx F_x \left( \frac{h^2}{k_{R_y}} + \frac{1}{k_s} \right)
|
||||
\end{equation}
|
||||
|
||||
The estimated bending stiffness \(k_{\text{est}}\) then depends on the shear stiffness \eqref{eq:test_joints_error_shear}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_error_shear}
|
||||
k_{R_y,\text{est}} = h^2 \frac{F_x}{d_x} \approx k_{R_y} \frac{1}{1 + \frac{k_{R_y}}{k_s h^2}} \approx k_{R_y} \Bigl( 1 - \underbrace{\frac{k_{R_y}}{k_s h^2}}_{\epsilon_{s}} \Bigl)
|
||||
\end{equation}
|
||||
|
||||
With an estimated shear stiffness \(k_s = 13\,N/\mu m\) from the finite element model and an height \(h=25\,mm\), the estimation errors of the bending stiffness due to shear is \(\epsilon_s < 0.1\,\%\)
|
||||
|
||||
\paragraph{Effect of load cell limited stiffness}
|
||||
As explained in the previous section, because the measurement of the flexible joint deflection is indirectly performed with the encoder, errors will be made if the load cell experiences some compression.
|
||||
|
||||
Suppose the load cell has an internal stiffness \(k_f\), the same reasoning that was made for the effect of shear can be applied here.
|
||||
The estimation error of the bending stiffness due to the limited stiffness of the load cell is then described by \eqref{eq:test_joints_error_load_cell_stiffness}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_error_load_cell_stiffness}
|
||||
k_{R_y,\text{est}} = h^2 \frac{F_x}{d_x} \approx k_{R_y} \frac{1}{1 + \frac{k_{R_y}}{k_F h^2}} \approx k_{R_y} \Bigl( 1 - \underbrace{\frac{k_{R_y}}{k_F h^2}}_{\epsilon_f} \Bigl)
|
||||
\end{equation}
|
||||
|
||||
With an estimated load cell stiffness of \(k_f \approx 1\,N/\mu m\) (from the documentation), the errors due to the load cell limited stiffness is around \(\epsilon_f = 1\,\%\).
|
||||
|
||||
\paragraph{Estimation error due to height estimation error}
|
||||
Now consider an error \(\delta h\) in the estimation of the height \(h\) as described by \eqref{eq:test_joints_est_h_error}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_est_h_error}
|
||||
h_{\text{est}} = h + \delta h
|
||||
\end{equation}
|
||||
|
||||
The computed bending stiffness will be \eqref{eq:test_joints_stiffness_height_error}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_stiffness_height_error}
|
||||
k_{R_y, \text{est}} \approx h_{\text{est}}^2 \frac{F_x}{d_x} \approx k_{R_y} \Bigl( 1 + \underbrace{2 \frac{\delta h}{h} + \frac{\delta h ^2}{h^2}}_{\epsilon_h} \Bigl)
|
||||
\end{equation}
|
||||
|
||||
The height estimation is foreseen to be accurate to within \(|\delta h| < 0.4\,mm\) which corresponds to a stiffness error \(\epsilon_h < 3.5\,\%\).
|
||||
|
||||
\paragraph{Estimation error due to force and displacement sensors accuracy}
|
||||
An optical encoder is used to measure the displacement (see Section \ref{ssec:test_joints_test_bench}) whose maximum non-linearity is \(40\,nm\).
|
||||
As the measured displacement is foreseen to be \(0.5\,mm\), the error \(\epsilon_d\) due to the encoder non-linearity is negligible \(\epsilon_d < 0.01\,\%\).
|
||||
|
||||
The accuracy of the load cell is specified at \(1\,\%\) and therefore, estimation errors of the bending stiffness due to the limited load cell accuracy should be \(\epsilon_F < 1\,\%\)
|
||||
|
||||
\paragraph{Conclusion}
|
||||
|
||||
The different sources of errors are summarized in Table \ref{tab:test_joints_error_budget}.
|
||||
The most important source of error is the estimation error of the distance between the flexible joint rotation axis and its contact with the force sensor.
|
||||
An overall accuracy of \(\approx 5\,\%\) can be expected with this measurement bench, which should be sufficient for an estimation of the bending stiffness of the flexible joints.
|
||||
|
||||
\begin{table}[htbp]
|
||||
\centering
|
||||
\begin{tabularx}{0.4\linewidth}{lX}
|
||||
\toprule
|
||||
\textbf{Effect} & \textbf{Error}\\
|
||||
\midrule
|
||||
Shear effect & \(\epsilon_s < 0.1\,\%\)\\
|
||||
Load cell compliance & \(\epsilon_f = 1\,\%\)\\
|
||||
Height error & \(\epsilon_h < 3.5\,\%\)\\
|
||||
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 estimating the bending stiffness}
|
||||
|
||||
\end{table}
|
||||
|
||||
\section{Mechanical Design}
|
||||
\label{ssec:test_joints_test_bench}
|
||||
|
||||
As explained in Section \ref{ssec:test_joints_meas_principle}, the flexible joint's bending stiffness is estimated by applying a known force to the flexible joint's tip and by measuring its deflection at the same point.
|
||||
|
||||
The force is applied using a load cell\footnote{The load cell is FC22 from TE Connectivity. Measurement range is \(50\,N\). Specified accuracy is \(1\,\%\) of the full range} such that the applied force to the flexible joint's tip is directly measured.
|
||||
In order to control the height and direction of the applied force, a cylinder cut in half is fixed at the tip of the force sensor (pink element in Figure \ref{fig:test_joints_bench_side}) that initially had a flat surface.
|
||||
This way, the contact between the flexible joint cylindrical tip and the force sensor is a point (intersection of two cylinders) at a precise height, and the force is applied in a known direction.
|
||||
To translate the load cell at a constant height, it is fixed to a translation stage\footnote{V-408 PIMag\textsuperscript{\textregistered} linear stage is used. Crossed roller are used to guide the motion.} which is moved by hand.
|
||||
The force is applied using a load cell\footnote{The load cell is FC22 from TE Connectivity. The measurement range is \(50\,N\). The specified accuracy is \(1\,\%\) of the full range} such that the applied force to the flexible joint's tip is directly measured.
|
||||
To control the height and direction of the applied force, a cylinder cut in half is fixed at the tip of the force sensor (pink element in Figure \ref{fig:test_joints_bench_side}) that initially had a flat surface.
|
||||
Doing so, the contact between the flexible joint cylindrical tip and the force sensor is a point (intersection of two cylinders) at a precise height, and the force is applied in a known direction.
|
||||
To translate the load cell at a constant height, it is fixed to a translation stage\footnote{V-408 PIMag\textsuperscript{\textregistered} linear stage is used. Crossed rollers are used to guide the motion.} which is moved by hand.
|
||||
|
||||
Instead of measuring the displacement directly at the tip of the flexible joint (with a probe or an interferometer for instance), the displacement of the load cell itself is measured.
|
||||
To do so, an encoder\footnote{Resolute\texttrademark{} encoder with \(1\,nm\) resolution and \(\pm 40\,nm\) maximum non-linearity} is used that measures the motion of a ruler.
|
||||
To do so, an encoder\footnote{Resolute\texttrademark{} encoder with \(1\,nm\) resolution and \(\pm 40\,nm\) maximum non-linearity} is used, which measures the motion of a ruler.
|
||||
This ruler is fixed to the translation stage in line (i.e. at the same height) with the application point to reduce Abbe errors (see Figure \ref{fig:test_joints_bench_overview}).
|
||||
Indirectly measuring the deflection of the flexible joint induces some errors due to the limited stiffness between the tip of the force sensor and the ruler.
|
||||
Such error will be estimated in Section \ref{ssec:test_joints_error_budget}.
|
||||
|
||||
The flexible joint can be rotated by 90 degrees in order to measure the bending stiffness in the two directions.
|
||||
The flexible joint can be rotated by \(90^o\) in order to measure the bending stiffness in the two directions.
|
||||
The obtained CAD design of the measurement bench is shown in Figure \ref{fig:test_joints_bench_overview} while a zoom on the flexible joint with the associated important quantities is shown in Figure \ref{fig:test_joints_bench_side}.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
@@ -285,101 +372,13 @@ The obtained CAD design of the measurement bench is shown in Figure \ref{fig:tes
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_joints_bench_side} Zoom}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_joints_bench}CAD view of the test bench developped to measure the bending stiffness of the flexible joints. Different parts are shown in (\subref{fig:test_joints_bench_overview}) while a zoom on the flexible joint is shown in (\subref{fig:test_joints_bench_side})}
|
||||
\caption{\label{fig:test_joints_bench}CAD view of the test bench developed to measure the bending stiffness of the flexible joints. Different parts are shown in (\subref{fig:test_joints_bench_overview}) while a zoom on the flexible joint is shown in (\subref{fig:test_joints_bench_side})}
|
||||
\end{figure}
|
||||
\section{Error budget}
|
||||
\label{ssec:test_joints_error_budget}
|
||||
In order to estimate the accuracy of the measured bending stiffness that can be obtained using this measurement bench, an error budget is performed.
|
||||
|
||||
Based on equation \eqref{eq:test_joints_stiff_displ_force}, several errors can impact the accuracy of the measured bending stiffness:
|
||||
\begin{itemize}
|
||||
\item Errors in the measured torque \(M_x, M_y\): this is mainly due to inaccuracies of the load cell and of the height estimation \(h\)
|
||||
\item Errors in the measured bending motion of the flexible joints \(\theta_x, \theta_y\): errors from limited shear stiffness, from the deflection of the load cell itself, and from inaccuracy of the height estimation \(h\)
|
||||
\end{itemize}
|
||||
|
||||
Let's first estimate the displacement induced only by the bending stiffness.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_dbx}
|
||||
d_{x,b} = h \tan(\theta_y) = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right)
|
||||
\end{equation}
|
||||
\paragraph{Effect of Shear}
|
||||
The applied force \(F_x\) will induce some shear \(d_{x,s}\) which is described by \eqref{eq:test_joints_shear_displ} with \(k_s\) the shear stiffness of the flexible joint.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_shear_displ}
|
||||
d_{x,s} = \frac{F_x}{k_s}
|
||||
\end{equation}
|
||||
|
||||
The measured displacement \(d_x\) is affected by the shear as shown in equation \eqref{eq:test_joints_displ_shear}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_displ_shear}
|
||||
d_x = d_{x,b} + d_{x,s} = h \tan\left( \frac{F_x \cdot h}{k_{R_y}} \right) + \frac{F_x}{k_s} \approx F_x \left( \frac{h^2}{k_{R_y}} + \frac{1}{k_s} \right)
|
||||
\end{equation}
|
||||
|
||||
The estimated bending stiffness \(k_{\text{est}}\) then depends on the shear stiffness \eqref{eq:test_joints_error_shear}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_error_shear}
|
||||
k_{R_y,\text{est}} = h^2 \frac{F_x}{d_x} \approx k_{R_y} \frac{1}{1 + \frac{k_{R_y}}{k_s h^2}} \approx k_{R_y} \Bigl( 1 - \underbrace{\frac{k_{R_y}}{k_s h^2}}_{\epsilon_{s}} \Bigl)
|
||||
\end{equation}
|
||||
|
||||
With an estimated shear stiffness \(k_s = 13\,N/\mu m\) from the finite element model and an height \(h=25\,mm\), the estimation errors of the bending stiffness due to shear is \(\epsilon_s < 0.1\,\%\)
|
||||
\paragraph{Effect of load cell limited stiffness}
|
||||
As explained in the previous section, because the measurement of the flexible joint deflection is indirectly made with the encoder, errors will be made if the load cell experiences some compression.
|
||||
|
||||
Suppose the load cell has an internal stiffness \(k_f\), the same reasoning that was made for the effect of shear can be applied here.
|
||||
The estimation error of the bending stiffness due to the limited stiffness of the load cell is then described by \eqref{eq:test_joints_error_load_cell_stiffness}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_error_load_cell_stiffness}
|
||||
k_{R_y,\text{est}} = h^2 \frac{F_x}{d_x} \approx k_{R_y} \frac{1}{1 + \frac{k_{R_y}}{k_F h^2}} \approx k_{R_y} \Bigl( 1 - \underbrace{\frac{k_{R_y}}{k_F h^2}}_{\epsilon_f} \Bigl)
|
||||
\end{equation}
|
||||
|
||||
With an estimated load cell stiffness of \(k_f \approx 1\,N/\mu m\) (from the documentation), the errors due to the load cell limited stiffness is around \(\epsilon_f = 1\,\%\).
|
||||
\paragraph{Estimation error due to height estimation error}
|
||||
Let's consider an error \(\delta h\) in the estimation of the height \(h\) as described by \eqref{eq:test_joints_est_h_error}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_est_h_error}
|
||||
h_{\text{est}} = h + \delta h
|
||||
\end{equation}
|
||||
|
||||
The computed bending stiffness will be \eqref{eq:test_joints_stiffness_height_error}.
|
||||
|
||||
\begin{equation}\label{eq:test_joints_stiffness_height_error}
|
||||
k_{R_y, \text{est}} \approx h_{\text{est}}^2 \frac{F_x}{d_x} \approx k_{R_y} \Bigl( 1 + \underbrace{2 \frac{\delta h}{h} + \frac{\delta h ^2}{h^2}}_{\epsilon_h} \Bigl)
|
||||
\end{equation}
|
||||
|
||||
The height estimation is foreseen to be accurate to within \(|\delta h| < 0.4\,mm\) which corresponds to a stiffness error \(\epsilon_h < 3.5\,\%\).
|
||||
\paragraph{Estimation error due to force and displacement sensors accuracy}
|
||||
The maximum error of the measured displacement due the encoder non-linearity is \(40\,nm\).
|
||||
As the measured displacement is foreseen to be \(0.5\,mm\), the error \(\epsilon_d\) due to the encoder non linearity is very small \(\epsilon_d < 0.01\,\%\).
|
||||
|
||||
The accuracy of the load cell is specified at \(1\,\%\) and therefore, estimation errors of the bending stiffness due to the limited load cell accuracy should be \(\epsilon_F < 1\,\%\)
|
||||
\paragraph{Conclusion}
|
||||
|
||||
The different sources of errors are summarized in Table \ref{tab:test_joints_error_budget}.
|
||||
The most important source of error comes from estimation error of the distance between the flexible joint rotation axis and its contact with the force sensor.
|
||||
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]
|
||||
\centering
|
||||
\begin{tabularx}{0.4\linewidth}{lX}
|
||||
\toprule
|
||||
\textbf{Effect} & \textbf{Error}\\
|
||||
\midrule
|
||||
Shear effect & \(\epsilon_s < 0.1\,\%\)\\
|
||||
Load cell compliance & \(\epsilon_f = 1\,\%\)\\
|
||||
Height error & \(\epsilon_h < 3.5\,\%\)\\
|
||||
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}
|
||||
\section{Introduction}
|
||||
|
||||
A picture of the bench used to measure the X-bending stiffness of the flexible joints is shown in Figure \ref{fig:test_joints_picture_bench_overview}.
|
||||
A closer view on the force sensor tip is shown in Figure \ref{fig:test_joints_picture_bench_zoom}.
|
||||
A closer view of the force sensor tip is shown in Figure \ref{fig:test_joints_picture_bench_zoom}.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.70\textwidth}
|
||||
@@ -394,46 +393,46 @@ A closer view on the force sensor tip is shown in Figure \ref{fig:test_joints_pi
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_joints_picture_bench_zoom}Zoom on the tip}
|
||||
\end{subfigure}
|
||||
\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}Manufactured test bench for compliance measurement of the flexible joints}
|
||||
\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}.
|
||||
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. The measurement range is \(50\,N\). The 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.
|
||||
The contact between the two load cells is well defined as one has a spherical interface and the other has a flat surface.
|
||||
|
||||
The measured forces are compared in Figure \ref{fig:test_joints_force_sensor_calib_fit}.
|
||||
The gain mismatch between the two load cells is approximately \(4\,\%\) which is higher than what was specified in the data-sheets.
|
||||
However, the estimated non-linearity is bellow \(1\,\%\) for forces between \(0.5\,N\) and \(5\,N\).
|
||||
The gain mismatch between the two load cells is approximately \(4\,\%\) which is higher than that specified in the data sheets.
|
||||
However, the estimated non-linearity is bellow \(0.2\,\%\) for forces between \(1\,N\) and \(5\,N\).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,height=5.5cm]{figs/test_joints_force_sensor_calib_picture.jpg}
|
||||
\includegraphics[scale=1,height=5.5cm]{figs/test_joints_force_sensor_calib_picture.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_joints_force_sensor_calib_picture}Zoom on the two force sensors in contact}
|
||||
\subcaption{\label{fig:test_joints_force_sensor_calib_picture}Zoom on the two load cells in contact}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,height=5.5cm]{figs/test_joints_force_sensor_calib_fit.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_joints_force_sensor_calib_fit}Measured two force and linear fit}
|
||||
\subcaption{\label{fig:test_joints_force_sensor_calib_fit}Measured two forces}
|
||||
\end{subfigure}
|
||||
\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})}
|
||||
\caption{\label{fig:test_joints_force_sensor_calib}Estimation of the load cell accuracy by comparing the measured force of two load cells. A picture of the measurement bench is shown in (\subref{fig:test_joints_force_sensor_calib_picture}). Comparison of the two measured forces and estimated non-linearity are shown in (\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}.
|
||||
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\).
|
||||
To do so, a stiff element (much stiffer than the estimated \(k_F \approx 1\,N/\mu m\)) is mounted 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 against this stiff element while the force sensor and the encoder displacement are measured.
|
||||
The measured displacement as a function of the measured 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.68\,N/\mu m\).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\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 test}
|
||||
\subcaption{\label{fig:test_joints_meas_force_sensor_stiffness_picture}Picture of the measurement bench}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
@@ -441,16 +440,16 @@ 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. (\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. The measurement setup is shown in (\subref{fig:test_joints_meas_force_sensor_stiffness_picture}). The measurement results are shown in (\subref{fig:test_joints_force_sensor_stiffness_fit}).}
|
||||
\end{figure}
|
||||
\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.
|
||||
\section{Bending Stiffness estimation}
|
||||
The actual stiffness is now estimated 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 the 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}.
|
||||
Three regions can be observed: first the force sensor tip is not in contact with the flexible joint and the measured force is zero, then the flexible joint deforms linearly, finally the flexible joint comes in contact with the mechanical stops.
|
||||
Three regions can be observed: first, the force sensor tip is not in contact with the flexible joint and the measured force is zero; then, the flexible joint deforms linearly; and finally, the flexible joint comes in contact with the mechanical stop.
|
||||
|
||||
The angular motion \(\theta_{y}\) computed from the displacement \(d_x\) is displacement as function of the measured torque \(T_{y}\) in displayed in Figure \ref{fig:test_joints_meas_F_d_lin_fit}.
|
||||
The angular motion \(\theta_{y}\) computed from the displacement \(d_x\) is displayed as function of the measured torque \(T_{y}\) in Figure \ref{fig:test_joints_meas_F_d_lin_fit}.
|
||||
The bending stiffness of the flexible joint can be estimated by computing the slope of the curve in the linear regime (red dashed line) and is found to be \(k_{R_y} = 4.4\,Nm/\text{rad}\).
|
||||
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}\).
|
||||
|
||||
@@ -467,99 +466,46 @@ 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_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. The 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}
|
||||
\section{Bending stiffness and bending stroke of all the flexible joints}
|
||||
|
||||
Now, let's estimate the bending stiffness and stroke for all the flexible joints.
|
||||
\section{Measured flexible joint stiffness}
|
||||
|
||||
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.
|
||||
The same measurement was 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 is shown in Figure \ref{fig:test_joints_meas_bending_all_raw_data} for 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.
|
||||
|
||||
\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}.
|
||||
A histogram of the measured bending stiffnesses is shown 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{figure}[htbp]
|
||||
\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}
|
||||
\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 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 the 16 flexible joints. Raw data are shown in (\subref{fig:test_joints_meas_bending_all_raw_data}). A histogram of the measured stiffnesses is shown in (\subref{fig:test_joints_bend_stiff_hist})}
|
||||
\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}
|
||||
\chapter*{Conclusion}
|
||||
\label{sec:test_joints_conclusion}
|
||||
|
||||
The flexible joints are a key element of the nano-hexapod.
|
||||
Careful dimensional measurements (Section \ref{sec:test_joints_flex_dim_meas}) allowed for the early identification of faulty flexible joints.
|
||||
This was crucial in preventing potential complications that could have arisen from the installation of faulty joints on the nano-hexapod.
|
||||
|
||||
A dedicated test bench was developed to asses the bending stiffness of the flexible joints.
|
||||
Through meticulous error analysis and budgeting, a satisfactory level of measurement accuracy could be guaranteed.
|
||||
The measured bending stiffness values exhibited good agreement with the predictions from the finite element model (\(k_{R_x} = k_{R_y} = 5\,Nm/\text{rad}\)).
|
||||
These measurements are helpful for refining the model of the flexible joints, thereby enhancing the overall accuracy of the nano-hexapod model.
|
||||
Furthermore, the data obtained from these measurements have provided the necessary information to select the most suitable flexible joints for the nano-hexapod, ensuring optimal performance.
|
||||
|
||||
\printbibliography[heading=bibintoc,title={Bibliography}]
|
||||
\end{document}
|
||||
|