dcm-simscape-model/matlab/dcm_kinematics.m

115 lines
2.7 KiB
Matlab

% Matlab Init :noexport:ignore:
%% dcm_kinematics.m
% Computation of the DCM kinematics
%% 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
%% Simscape Model - Nano Hexapod
addpath('./STEPS/')
%% Colors for the figures
colors = colororder;
%% Frequency Vector
freqs = logspace(1, 3, 1000);
% Bragg Angle
% There is a simple relation eqref:eq:bragg_angle_formula between:
% - $d_{\text{off}}$ is the wanted offset between the incident x-ray and the output x-ray
% - $\theta_b$ is the bragg angle
% - $d_z$ is the corresponding distance between the first and second crystals
% \begin{equation} \label{eq:bragg_angle_formula}
% d_z = \frac{d_{\text{off}}}{2 \cos \theta_b}
% \end{equation}
%% Tested bragg angles
bragg = linspace(5, 80, 1000); % Bragg angle [deg]
d_off = 10.5e-3; % Wanted offset between x-rays [m]
%% Vertical Jack motion as a function of Bragg angle
dz = d_off./(2*cos(bragg*pi/180));
% This relation is shown in Figure [[fig:jack_motion_bragg_angle]].
%% Jack motion as a function of Bragg angle
figure;
plot(bragg, 1e3*dz)
xlabel('Bragg angle [deg]'); ylabel('Jack Motion [mm]');
% #+name: fig:jack_motion_bragg_angle
% #+caption: Jack motion as a function of Bragg angle
% #+RESULTS:
% [[file:figs/jack_motion_bragg_angle.png]]
% The required jack stroke is approximately 25mm.
%% Required Jack stroke
ans = 1e3*(dz(end) - dz(1))
% #+name: fig:schematic_sensor_jacobian_inverse_kinematics
% #+caption: Inverse Kinematics - Interferometers
% #+RESULTS:
% [[file:figs/schematic_sensor_jacobian_inverse_kinematics.png]]
% From the Figure [[fig:sensor_111_crystal_points]], the inverse kinematics can be solved as follow (for small motion):
% \begin{equation}
% \bm{J}_{s,111}
% =
% \begin{bmatrix}
% 1 & 0.07 & -0.015 \\
% 1 & 0 & 0.015 \\
% 1 & -0.07 & -0.015
% \end{bmatrix}
% \end{equation}
%% Sensor Jacobian matrix for 111 crystal
J_s_111 = [1, 0.07, -0.015
1, 0, 0.015
1, -0.07, -0.015];
% #+name: fig:schematic_sensor_jacobian_inverse_kinematics
% #+caption: Inverse Kinematics - Actuators
% #+RESULTS:
% [[file:figs/schematic_actuator_jacobian_inverse_kinematics.png]]
% Based on the geometry in Figure [[fig:actuator_jacobian_111_points]], we obtain:
% \begin{equation}
% \bm{J}_{a,111}
% =
% \begin{bmatrix}
% 1 & 0.14 & -0.1525 \\
% 1 & 0.14 & 0.0675 \\
% 1 & -0.14 & -0.0425
% \end{bmatrix}
% \end{equation}
%% Actuator Jacobian - 111 crystal
J_a_111 = [1, 0.14, -0.1525
1, 0.14, 0.0675
1, -0.14, -0.0425];
save('mat/dcm_kinematics.mat', 'J_a_111', 'J_s_111')