176 lines
5.0 KiB
Matlab
176 lines
5.0 KiB
Matlab
%% 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));
|