Update active damping analysis
This commit is contained in:
		@@ -46,7 +46,7 @@ The following decentralized active damping techniques are briefly studied:
 | 
			
		||||
 | 
			
		||||
* Inertial Control
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle matlab/active_damping_inertial.m
 | 
			
		||||
:header-args:matlab+: :tangle ../matlab/active_damping_inertial.m
 | 
			
		||||
:header-args:matlab+: :comments org :mkdirp yes
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:active_damping_inertial>>
 | 
			
		||||
@@ -76,11 +76,12 @@ The following decentralized active damping techniques are briefly studied:
 | 
			
		||||
  stewart = generateGeneralConfiguration(stewart);
 | 
			
		||||
  stewart = computeJointsPose(stewart);
 | 
			
		||||
  stewart = initializeStrutDynamics(stewart);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'disable', true);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
 | 
			
		||||
  stewart = initializeCylindricalPlatforms(stewart);
 | 
			
		||||
  stewart = initializeCylindricalStruts(stewart);
 | 
			
		||||
  stewart = computeJacobian(stewart);
 | 
			
		||||
  stewart = initializeStewartPose(stewart);
 | 
			
		||||
  stewart = initializeInertialSensor(stewart, 'type', 'accelerometer', 'freq', 5e3);
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
@@ -104,7 +105,7 @@ The following decentralized active damping techniques are briefly studied:
 | 
			
		||||
 | 
			
		||||
The transfer function from actuator forces to force sensors is shown in Figure [[fig:inertial_plant_coupling]].
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  freqs = logspace(1, 3, 1000);
 | 
			
		||||
  freqs = logspace(1, 4, 1000);
 | 
			
		||||
 | 
			
		||||
  figure;
 | 
			
		||||
 | 
			
		||||
@@ -147,18 +148,26 @@ The transfer function from actuator forces to force sensors is shown in Figure [
 | 
			
		||||
#+caption: Transfer function from the Actuator force $F_{i}$ to the absolute velocity of the same leg $v_{m,i}$ and to the absolute velocity of the other legs $v_{m,j}$ with $i \neq j$ in grey ([[./figs/inertial_plant_coupling.png][png]], [[./figs/inertial_plant_coupling.pdf][pdf]])
 | 
			
		||||
[[file:figs/inertial_plant_coupling.png]]
 | 
			
		||||
 | 
			
		||||
** Effect of the Flexible Joint stiffness on the Dynamics
 | 
			
		||||
** Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics
 | 
			
		||||
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  stewart = initializeJointDynamics(stewart);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
 | 
			
		||||
  Gf = linearize(mdl, io, options);
 | 
			
		||||
  Gf.InputName  = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
 | 
			
		||||
  Gf.OutputName = {'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
We now use the amplified actuators and re-identify the dynamics
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  stewart = initializeAmplifiedStrutDynamics(stewart);
 | 
			
		||||
  Ga = linearize(mdl, io, options);
 | 
			
		||||
  Ga.InputName  = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
 | 
			
		||||
  Ga.OutputName = {'Vm1', 'Vm2', 'Vm3', 'Vm4', 'Vm5', 'Vm6'};
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
The new dynamics from force actuator to force sensor is shown in Figure [[fig:inertial_plant_flexible_joint_decentralized]].
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  freqs = logspace(1, 3, 1000);
 | 
			
		||||
  freqs = logspace(1, 4, 1000);
 | 
			
		||||
 | 
			
		||||
  figure;
 | 
			
		||||
 | 
			
		||||
@@ -166,6 +175,7 @@ The new dynamics from force actuator to force sensor is shown in Figure [[fig:in
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(G( 'Vm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(Gf('Vm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(Ga('Vm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  hold off;
 | 
			
		||||
  set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
 | 
			
		||||
  ylabel('Amplitude [$\frac{m/s}{N}$]'); set(gca, 'XTickLabel',[]);
 | 
			
		||||
@@ -174,6 +184,7 @@ The new dynamics from force actuator to force sensor is shown in Figure [[fig:in
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(G( 'Vm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Perfect Joints');
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(Gf('Vm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Flexible Joints');
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(Ga('Vm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Amplified Actuator');
 | 
			
		||||
  hold off;
 | 
			
		||||
  set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
 | 
			
		||||
  ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
 | 
			
		||||
@@ -203,30 +214,38 @@ The $6 \times 6$ control is a diagonal matrix with pure proportional action on t
 | 
			
		||||
    0 & & 1
 | 
			
		||||
  \end{bmatrix} \]
 | 
			
		||||
 | 
			
		||||
The root locus is shown in figure [[fig:root_locus_inertial_rot_stiffness]] and the obtained pole damping function of the control gain is shown in figure [[fig:pole_damping_gain_inertial_rot_stiffness]].
 | 
			
		||||
The root locus is shown in figure [[fig:root_locus_inertial_rot_stiffness]].
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  gains = logspace(0, 5, 1000);
 | 
			
		||||
  gains = logspace(2, 5, 100);
 | 
			
		||||
 | 
			
		||||
  figure;
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(real(pole(G)),  imag(pole(G)),  'x');
 | 
			
		||||
  plot(real(pole(Gf)), imag(pole(Gf)), 'x');
 | 
			
		||||
  plot(real(pole(Ga)), imag(pole(Ga)), 'x');
 | 
			
		||||
  set(gca,'ColorOrderIndex',1);
 | 
			
		||||
  plot(real(tzero(G)),  imag(tzero(G)),  'o');
 | 
			
		||||
  plot(real(tzero(Gf)), imag(tzero(Gf)), 'o');
 | 
			
		||||
  plot(real(tzero(Ga)), imag(tzero(Ga)), 'o');
 | 
			
		||||
  for i = 1:length(gains)
 | 
			
		||||
    cl_poles = pole(feedback(G, gains(i)*eye(6)));
 | 
			
		||||
    set(gca,'ColorOrderIndex',1);
 | 
			
		||||
    plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
    cl_poles = pole(feedback(Gf, gains(i)*eye(6)));
 | 
			
		||||
    cl_poles = pole(feedback(G, gains(i)*eye(6)));
 | 
			
		||||
    p1 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
 | 
			
		||||
    set(gca,'ColorOrderIndex',2);
 | 
			
		||||
    plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
    cl_poles = pole(feedback(Gf, gains(i)*eye(6)));
 | 
			
		||||
    p2 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
 | 
			
		||||
    set(gca,'ColorOrderIndex',3);
 | 
			
		||||
    cl_poles = pole(feedback(Ga, gains(i)*eye(6)));
 | 
			
		||||
    p3 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
  end
 | 
			
		||||
  ylim([0,2000]);
 | 
			
		||||
  xlim([-2000,0]);
 | 
			
		||||
  ylim([0, 3*max(imag(pole(G)))]);
 | 
			
		||||
  xlim([-3*max(imag(pole(G))),0]);
 | 
			
		||||
  xlabel('Real Part')
 | 
			
		||||
  ylabel('Imaginary Part')
 | 
			
		||||
  axis square
 | 
			
		||||
  legend([p1, p2, p3], {'Perfect Joints', 'Flexible Joints', 'Amplified Actuator'}, 'location', 'northwest');
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+header: :tangle no :exports results :results none :noweb yes
 | 
			
		||||
@@ -238,44 +257,14 @@ The root locus is shown in figure [[fig:root_locus_inertial_rot_stiffness]] and
 | 
			
		||||
#+caption: Root Locus plot with Decentralized Inertial Control when considering the stiffness of flexible joints ([[./figs/root_locus_inertial_rot_stiffness.png][png]], [[./figs/root_locus_inertial_rot_stiffness.pdf][pdf]])
 | 
			
		||||
[[file:figs/root_locus_inertial_rot_stiffness.png]]
 | 
			
		||||
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  gains = logspace(0, 5, 1000);
 | 
			
		||||
 | 
			
		||||
  figure;
 | 
			
		||||
  hold on;
 | 
			
		||||
  for i = 1:length(gains)
 | 
			
		||||
    set(gca,'ColorOrderIndex',1);
 | 
			
		||||
    cl_poles = pole(feedback(G, gains(i)*eye(6)));
 | 
			
		||||
    poles_damp = phase(cl_poles(imag(cl_poles)>0)) - pi/2;
 | 
			
		||||
    plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
    set(gca,'ColorOrderIndex',2);
 | 
			
		||||
    cl_poles = pole(feedback(Gf, gains(i)*eye(6)));
 | 
			
		||||
    poles_damp = phase(cl_poles(imag(cl_poles)>0)) - pi/2;
 | 
			
		||||
    plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
  end
 | 
			
		||||
  xlabel('Control Gain');
 | 
			
		||||
  ylabel('Damping of the Poles');
 | 
			
		||||
  set(gca, 'XScale', 'log');
 | 
			
		||||
  ylim([0,pi/2]);
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+header: :tangle no :exports results :results none :noweb yes
 | 
			
		||||
#+begin_src matlab :var filepath="figs/pole_damping_gain_inertial_rot_stiffness.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
 | 
			
		||||
<<plt-matlab>>
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+name: fig:pole_damping_gain_inertial_rot_stiffness
 | 
			
		||||
#+caption: Damping of the poles with respect to the gain of the Decentralized Inertial Control when considering the stiffness of flexible joints ([[./figs/pole_damping_gain_inertial_rot_stiffness.png][png]], [[./figs/pole_damping_gain_inertial_rot_stiffness.pdf][pdf]])
 | 
			
		||||
[[file:figs/pole_damping_gain_inertial_rot_stiffness.png]]
 | 
			
		||||
 | 
			
		||||
** Conclusion
 | 
			
		||||
#+begin_important
 | 
			
		||||
  Joint stiffness does increase the resonance frequencies of the system but does not change the attainable damping when using relative motion sensors.
 | 
			
		||||
  We do not have guaranteed stability with Inertial control. This is because of the flexibility inside the internal sensor.
 | 
			
		||||
#+end_important
 | 
			
		||||
 | 
			
		||||
* Integral Force Feedback
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle matlab/active_damping_iff.m
 | 
			
		||||
:header-args:matlab+: :tangle ../matlab/active_damping_iff.m
 | 
			
		||||
:header-args:matlab+: :comments org :mkdirp yes
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:active_damping_iff>>
 | 
			
		||||
@@ -306,12 +295,12 @@ We first initialize the Stewart platform without joint stiffness.
 | 
			
		||||
  stewart = generateGeneralConfiguration(stewart);
 | 
			
		||||
  stewart = computeJointsPose(stewart);
 | 
			
		||||
  stewart = initializeStrutDynamics(stewart);
 | 
			
		||||
  stewart = initializeAmplifiedStrutDynamics(stewart);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'disable', true);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
 | 
			
		||||
  stewart = initializeCylindricalPlatforms(stewart);
 | 
			
		||||
  stewart = initializeCylindricalStruts(stewart);
 | 
			
		||||
  stewart = computeJacobian(stewart);
 | 
			
		||||
  stewart = initializeStewartPose(stewart);
 | 
			
		||||
  stewart = initializeInertialSensor(stewart, 'type', 'none');
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
And we identify the dynamics from force actuators to force sensors.
 | 
			
		||||
@@ -379,18 +368,26 @@ The transfer function from actuator forces to force sensors is shown in Figure [
 | 
			
		||||
#+caption: Transfer function from the Actuator force $F_{i}$ to the Force sensor of the same leg $F_{m,i}$ and to the force sensor of the other legs $F_{m,j}$ with $i \neq j$ in grey ([[./figs/iff_plant_coupling.png][png]], [[./figs/iff_plant_coupling.pdf][pdf]])
 | 
			
		||||
[[file:figs/iff_plant_coupling.png]]
 | 
			
		||||
 | 
			
		||||
** Effect of the Flexible Joint stiffness on the Dynamics
 | 
			
		||||
** Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics
 | 
			
		||||
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  stewart = initializeJointDynamics(stewart);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
 | 
			
		||||
  Gf = linearize(mdl, io, options);
 | 
			
		||||
  Gf.InputName  = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
 | 
			
		||||
  Gf.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
We now use the amplified actuators and re-identify the dynamics
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  stewart = initializeAmplifiedStrutDynamics(stewart);
 | 
			
		||||
  Ga = linearize(mdl, io, options);
 | 
			
		||||
  Ga.InputName  = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
 | 
			
		||||
  Ga.OutputName = {'Fm1', 'Fm2', 'Fm3', 'Fm4', 'Fm5', 'Fm6'};
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
The new dynamics from force actuator to force sensor is shown in Figure [[fig:iff_plant_flexible_joint_decentralized]].
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  freqs = logspace(1, 3, 1000);
 | 
			
		||||
  freqs = logspace(1, 4, 1000);
 | 
			
		||||
 | 
			
		||||
  figure;
 | 
			
		||||
 | 
			
		||||
@@ -398,6 +395,7 @@ The new dynamics from force actuator to force sensor is shown in Figure [[fig:if
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(G( 'Fm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(Gf('Fm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(Ga('Fm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  hold off;
 | 
			
		||||
  set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
 | 
			
		||||
  ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]);
 | 
			
		||||
@@ -406,6 +404,7 @@ The new dynamics from force actuator to force sensor is shown in Figure [[fig:if
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(G( 'Fm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Perfect Joints');
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(Gf('Fm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Flexible Joints');
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(Ga('Fm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Amplified Actuators');
 | 
			
		||||
  hold off;
 | 
			
		||||
  set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
 | 
			
		||||
  ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
 | 
			
		||||
@@ -443,22 +442,30 @@ The root locus is shown in figure [[fig:root_locus_iff_rot_stiffness]] and the o
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(real(pole(G)),  imag(pole(G)),  'x');
 | 
			
		||||
  plot(real(pole(Gf)), imag(pole(Gf)), 'x');
 | 
			
		||||
  plot(real(pole(Ga)), imag(pole(Ga)), 'x');
 | 
			
		||||
  set(gca,'ColorOrderIndex',1);
 | 
			
		||||
  plot(real(tzero(G)),  imag(tzero(G)),  'o');
 | 
			
		||||
  plot(real(tzero(Gf)), imag(tzero(Gf)), 'o');
 | 
			
		||||
  plot(real(tzero(Ga)), imag(tzero(Ga)), 'o');
 | 
			
		||||
  for i = 1:length(gains)
 | 
			
		||||
    cl_poles = pole(feedback(G, (gains(i)/s)*eye(6)));
 | 
			
		||||
    set(gca,'ColorOrderIndex',1);
 | 
			
		||||
    plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
    p1 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
 | 
			
		||||
    cl_poles = pole(feedback(Gf, (gains(i)/s)*eye(6)));
 | 
			
		||||
    set(gca,'ColorOrderIndex',2);
 | 
			
		||||
    plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
    p2 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
 | 
			
		||||
    cl_poles = pole(feedback(Ga, (gains(i)/s)*eye(6)));
 | 
			
		||||
    set(gca,'ColorOrderIndex',3);
 | 
			
		||||
    p3 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
  end
 | 
			
		||||
  ylim([0,inf]);
 | 
			
		||||
  xlim([-3000,0]);
 | 
			
		||||
  ylim([0, 1.1*max(imag(pole(G)))]);
 | 
			
		||||
  xlim([-1.1*max(imag(pole(G))),0]);
 | 
			
		||||
  xlabel('Real Part')
 | 
			
		||||
  ylabel('Imaginary Part')
 | 
			
		||||
  axis square
 | 
			
		||||
  legend([p1, p2, p3], {'Perfect Joints', 'Flexible Joints', 'Amplified Actuator'}, 'location', 'northwest');
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+header: :tangle no :exports results :results none :noweb yes
 | 
			
		||||
@@ -479,16 +486,23 @@ The root locus is shown in figure [[fig:root_locus_iff_rot_stiffness]] and the o
 | 
			
		||||
    set(gca,'ColorOrderIndex',1);
 | 
			
		||||
    cl_poles = pole(feedback(G, (gains(i)/s)*eye(6)));
 | 
			
		||||
    poles_damp = phase(cl_poles(imag(cl_poles)>0)) - pi/2;
 | 
			
		||||
    plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
    p1 = plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
 | 
			
		||||
    set(gca,'ColorOrderIndex',2);
 | 
			
		||||
    cl_poles = pole(feedback(Gf, (gains(i)/s)*eye(6)));
 | 
			
		||||
    poles_damp = phase(cl_poles(imag(cl_poles)>0)) - pi/2;
 | 
			
		||||
    plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
    p2 = plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
 | 
			
		||||
    set(gca,'ColorOrderIndex',3);
 | 
			
		||||
    cl_poles = pole(feedback(Ga, (gains(i)/s)*eye(6)));
 | 
			
		||||
    poles_damp = phase(cl_poles(imag(cl_poles)>0)) - pi/2;
 | 
			
		||||
    p3 = plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
  end
 | 
			
		||||
  xlabel('Control Gain');
 | 
			
		||||
  ylabel('Damping of the Poles');
 | 
			
		||||
  set(gca, 'XScale', 'log');
 | 
			
		||||
  ylim([0,pi/2]);
 | 
			
		||||
  legend([p1, p2, p3], {'Perfect Joints', 'Flexible Joints', 'Amplified Actuator'}, 'location', 'northwest');
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+header: :tangle no :exports results :results none :noweb yes
 | 
			
		||||
@@ -508,7 +522,7 @@ The root locus is shown in figure [[fig:root_locus_iff_rot_stiffness]] and the o
 | 
			
		||||
 | 
			
		||||
* Direct Velocity Feedback
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle matlab/active_damping_dvf.m
 | 
			
		||||
:header-args:matlab+: :tangle ../matlab/active_damping_dvf.m
 | 
			
		||||
:header-args:matlab+: :comments org :mkdirp yes
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:active_damping_dvf>>
 | 
			
		||||
@@ -539,11 +553,12 @@ We first initialize the Stewart platform without joint stiffness.
 | 
			
		||||
  stewart = generateGeneralConfiguration(stewart);
 | 
			
		||||
  stewart = computeJointsPose(stewart);
 | 
			
		||||
  stewart = initializeStrutDynamics(stewart);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'disable', true);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'type_F', 'universal_p', 'type_M', 'spherical_p');
 | 
			
		||||
  stewart = initializeCylindricalPlatforms(stewart);
 | 
			
		||||
  stewart = initializeCylindricalStruts(stewart);
 | 
			
		||||
  stewart = computeJacobian(stewart);
 | 
			
		||||
  stewart = initializeStewartPose(stewart);
 | 
			
		||||
  stewart = initializeInertialSensor(stewart, 'type', 'none');
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
And we identify the dynamics from force actuators to force sensors.
 | 
			
		||||
@@ -568,7 +583,7 @@ And we identify the dynamics from force actuators to force sensors.
 | 
			
		||||
 | 
			
		||||
The transfer function from actuator forces to relative motion sensors is shown in Figure [[fig:dvf_plant_coupling]].
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  freqs = logspace(1, 3, 1000);
 | 
			
		||||
  freqs = logspace(1, 4, 1000);
 | 
			
		||||
 | 
			
		||||
  figure;
 | 
			
		||||
 | 
			
		||||
@@ -612,18 +627,26 @@ The transfer function from actuator forces to relative motion sensors is shown i
 | 
			
		||||
[[file:figs/dvf_plant_coupling.png]]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
** Effect of the Flexible Joint stiffness on the Dynamics
 | 
			
		||||
** Effect of the Flexible Joint stiffness and Actuator amplification on the Dynamics
 | 
			
		||||
We add some stiffness and damping in the flexible joints and we re-identify the dynamics.
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  stewart = initializeJointDynamics(stewart);
 | 
			
		||||
  stewart = initializeJointDynamics(stewart, 'type_F', 'universal', 'type_M', 'spherical');
 | 
			
		||||
  Gf = linearize(mdl, io, options);
 | 
			
		||||
  Gf.InputName  = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
 | 
			
		||||
  Gf.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
We now use the amplified actuators and re-identify the dynamics
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  stewart = initializeAmplifiedStrutDynamics(stewart);
 | 
			
		||||
  Ga = linearize(mdl, io, options);
 | 
			
		||||
  Ga.InputName  = {'F1', 'F2', 'F3', 'F4', 'F5', 'F6'};
 | 
			
		||||
  Ga.OutputName = {'Dm1', 'Dm2', 'Dm3', 'Dm4', 'Dm5', 'Dm6'};
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
The new dynamics from force actuator to relative motion sensor is shown in Figure [[fig:dvf_plant_flexible_joint_decentralized]].
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  freqs = logspace(1, 3, 1000);
 | 
			
		||||
  freqs = logspace(1, 4, 1000);
 | 
			
		||||
 | 
			
		||||
  figure;
 | 
			
		||||
 | 
			
		||||
@@ -631,6 +654,7 @@ The new dynamics from force actuator to relative motion sensor is shown in Figur
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(G( 'Dm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(Gf('Dm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  plot(freqs, abs(squeeze(freqresp(Ga('Dm1', 'F1'), freqs, 'Hz'))));
 | 
			
		||||
  hold off;
 | 
			
		||||
  set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
 | 
			
		||||
  ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
 | 
			
		||||
@@ -639,6 +663,7 @@ The new dynamics from force actuator to relative motion sensor is shown in Figur
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(G( 'Dm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Perfect Joints');
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(Gf('Dm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Flexible Joints');
 | 
			
		||||
  plot(freqs, 180/pi*angle(squeeze(freqresp(Ga('Dm1', 'F1'), freqs, 'Hz'))), 'DisplayName', 'Amplified Actuators');
 | 
			
		||||
  hold off;
 | 
			
		||||
  set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
 | 
			
		||||
  ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
 | 
			
		||||
@@ -668,7 +693,7 @@ The $6 \times 6$ control is a diagonal matrix with pure derivative action on the
 | 
			
		||||
    & & s
 | 
			
		||||
  \end{bmatrix} \]
 | 
			
		||||
 | 
			
		||||
The root locus is shown in figure [[fig:root_locus_dvf_rot_stiffness]] and the obtained pole damping function of the control gain is shown in figure [[fig:pole_damping_gain_dvf_rot_stiffness]].
 | 
			
		||||
The root locus is shown in figure [[fig:root_locus_dvf_rot_stiffness]].
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  gains = logspace(0, 5, 1000);
 | 
			
		||||
 | 
			
		||||
@@ -676,22 +701,30 @@ The root locus is shown in figure [[fig:root_locus_dvf_rot_stiffness]] and the o
 | 
			
		||||
  hold on;
 | 
			
		||||
  plot(real(pole(G)),  imag(pole(G)),  'x');
 | 
			
		||||
  plot(real(pole(Gf)), imag(pole(Gf)), 'x');
 | 
			
		||||
  plot(real(pole(Ga)), imag(pole(Gf)), 'x');
 | 
			
		||||
  set(gca,'ColorOrderIndex',1);
 | 
			
		||||
  plot(real(tzero(G)),  imag(tzero(G)),  'o');
 | 
			
		||||
  plot(real(tzero(Gf)), imag(tzero(Gf)), 'o');
 | 
			
		||||
  plot(real(tzero(Ga)), imag(tzero(Gf)), 'o');
 | 
			
		||||
  for i = 1:length(gains)
 | 
			
		||||
    cl_poles = pole(feedback(G, (gains(i)*s)*eye(6)));
 | 
			
		||||
    set(gca,'ColorOrderIndex',1);
 | 
			
		||||
    plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
    cl_poles = pole(feedback(Gf, (gains(i)*s)*eye(6)));
 | 
			
		||||
    cl_poles = pole(feedback(G, (gains(i)*s)*eye(6)));
 | 
			
		||||
    p1 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
 | 
			
		||||
    set(gca,'ColorOrderIndex',2);
 | 
			
		||||
    plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
    cl_poles = pole(feedback(Gf, (gains(i)*s)*eye(6)));
 | 
			
		||||
    p2 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
 | 
			
		||||
    set(gca,'ColorOrderIndex',3);
 | 
			
		||||
    cl_poles = pole(feedback(Ga, (gains(i)*s)*eye(6)));
 | 
			
		||||
    p3 = plot(real(cl_poles), imag(cl_poles), '.');
 | 
			
		||||
  end
 | 
			
		||||
  ylim([0,inf]);
 | 
			
		||||
  xlim([-3000,0]);
 | 
			
		||||
  ylim([0, 1.1*max(imag(pole(G)))]);
 | 
			
		||||
  xlim([-1.1*max(imag(pole(G))),0]);
 | 
			
		||||
  xlabel('Real Part')
 | 
			
		||||
  ylabel('Imaginary Part')
 | 
			
		||||
  axis square
 | 
			
		||||
  legend([p1, p2, p3], {'Perfect Joints', 'Flexible Joints', 'Amplified Actuator'}, 'location', 'northwest');
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+header: :tangle no :exports results :results none :noweb yes
 | 
			
		||||
@@ -703,36 +736,6 @@ The root locus is shown in figure [[fig:root_locus_dvf_rot_stiffness]] and the o
 | 
			
		||||
#+caption: Root Locus plot with Direct Velocity Feedback when considering the Stiffness of flexible joints ([[./figs/root_locus_dvf_rot_stiffness.png][png]], [[./figs/root_locus_dvf_rot_stiffness.pdf][pdf]])
 | 
			
		||||
[[file:figs/root_locus_dvf_rot_stiffness.png]]
 | 
			
		||||
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  gains = logspace(0, 5, 1000);
 | 
			
		||||
 | 
			
		||||
  figure;
 | 
			
		||||
  hold on;
 | 
			
		||||
  for i = 1:length(gains)
 | 
			
		||||
    set(gca,'ColorOrderIndex',1);
 | 
			
		||||
    cl_poles = pole(feedback(G, (gains(i)*s)*eye(6)));
 | 
			
		||||
    poles_damp = phase(cl_poles(imag(cl_poles)>0)) - pi/2;
 | 
			
		||||
    plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
    set(gca,'ColorOrderIndex',2);
 | 
			
		||||
    cl_poles = pole(feedback(Gf, (gains(i)*s)*eye(6)));
 | 
			
		||||
    poles_damp = phase(cl_poles(imag(cl_poles)>0)) - pi/2;
 | 
			
		||||
    plot(gains(i)*ones(size(poles_damp)), poles_damp, '.');
 | 
			
		||||
  end
 | 
			
		||||
  xlabel('Control Gain');
 | 
			
		||||
  ylabel('Damping of the Poles');
 | 
			
		||||
  set(gca, 'XScale', 'log');
 | 
			
		||||
  ylim([0,pi/2]);
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+header: :tangle no :exports results :results none :noweb yes
 | 
			
		||||
#+begin_src matlab :var filepath="figs/pole_damping_gain_dvf_rot_stiffness.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
 | 
			
		||||
<<plt-matlab>>
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+name: fig:pole_damping_gain_dvf_rot_stiffness
 | 
			
		||||
#+caption: Damping of the poles with respect to the gain of the Direct Velocity Feedback when considering the Stiffness of flexible joints ([[./figs/pole_damping_gain_dvf_rot_stiffness.png][png]], [[./figs/pole_damping_gain_dvf_rot_stiffness.pdf][pdf]])
 | 
			
		||||
[[file:figs/pole_damping_gain_dvf_rot_stiffness.png]]
 | 
			
		||||
 | 
			
		||||
** Conclusion
 | 
			
		||||
#+begin_important
 | 
			
		||||
  Joint stiffness does increase the resonance frequencies of the system but does not change the attainable damping when using relative motion sensors.
 | 
			
		||||
 
 | 
			
		||||
@@ -84,7 +84,7 @@ The Jacobian matrix is estimated at the location of the center of the cube.
 | 
			
		||||
 | 
			
		||||
#+name: fig:3d-cubic-stewart-aligned
 | 
			
		||||
#+caption: Centered cubic configuration
 | 
			
		||||
[[file:./figs/3d-cubic-stewart-aligned.png]]
 | 
			
		||||
[[file:figs/3d-cubic-stewart-aligned.png]]
 | 
			
		||||
 | 
			
		||||
#+begin_src matlab :exports none
 | 
			
		||||
  displayArchitecture(stewart, 'labels', false);
 | 
			
		||||
@@ -158,7 +158,7 @@ The Jacobian is estimated at the cube center.
 | 
			
		||||
 | 
			
		||||
#+name: fig:3d-cubic-stewart-misaligned
 | 
			
		||||
#+caption: Not centered cubic configuration
 | 
			
		||||
[[file:./figs/3d-cubic-stewart-misaligned.png]]
 | 
			
		||||
[[file:figs/3d-cubic-stewart-misaligned.png]]
 | 
			
		||||
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  stewart = initializeStewartPlatform();
 | 
			
		||||
@@ -371,12 +371,12 @@ We observe that $k_{\theta_x} = k_{\theta_y}$ and $k_{\theta_z}$ increase linear
 | 
			
		||||
 | 
			
		||||
** =generateCubicConfiguration=: Generate a Cubic Configuration
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/generateCubicConfiguration.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/generateCubicConfiguration.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:generateCubicConfiguration>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/generateCubicConfiguration.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/generateCubicConfiguration.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
 
 | 
			
		||||
@@ -215,7 +215,7 @@ The function =forwardKinematicsApprox= (described [[sec:forwardKinematicsApprox]
 | 
			
		||||
 | 
			
		||||
** Estimation of the range validity of the approximate inverse kinematics
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle matlab/approximate_inverse_kinematics_validity.m
 | 
			
		||||
:header-args:matlab+: :tangle ../matlab/approximate_inverse_kinematics_validity.m
 | 
			
		||||
:header-args:matlab+: :comments org :mkdirp yes
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:approximate_inverse_kinematics_validity>>
 | 
			
		||||
@@ -325,7 +325,7 @@ For small wanted displacements (up to $\approx 1\%$ of the size of the Hexapod),
 | 
			
		||||
 | 
			
		||||
* Estimated required actuator stroke from specified platform mobility
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle matlab/required_stroke_from_mobility.m
 | 
			
		||||
:header-args:matlab+: :tangle ../matlab/required_stroke_from_mobility.m
 | 
			
		||||
:header-args:matlab+: :comments org :mkdirp yes
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:required_actuator_stroke>>
 | 
			
		||||
@@ -481,7 +481,7 @@ This is probably a much realistic estimation of the required actuator stroke.
 | 
			
		||||
 | 
			
		||||
* Estimated platform mobility from specified actuator stroke
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle matlab/mobility_from_actuator_stroke.m
 | 
			
		||||
:header-args:matlab+: :tangle ../matlab/mobility_from_actuator_stroke.m
 | 
			
		||||
:header-args:matlab+: :comments org :mkdirp yes
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:obtained_mobility_from_stroke>>
 | 
			
		||||
@@ -593,12 +593,12 @@ using this function https://fr.mathworks.com/help/matlab/ref/contour3.html
 | 
			
		||||
<<sec:functions>>
 | 
			
		||||
** =computeJacobian=: Compute the Jacobian Matrix
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/computeJacobian.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/computeJacobian.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:computeJacobian>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/computeJacobian.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/computeJacobian.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -676,12 +676,12 @@ This Matlab function is accessible [[file:src/computeJacobian.m][here]].
 | 
			
		||||
 | 
			
		||||
** =inverseKinematics=: Compute Inverse Kinematics
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/inverseKinematics.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/inverseKinematics.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:inverseKinematics>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/inverseKinematics.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/inverseKinematics.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Theory
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -774,12 +774,12 @@ Otherwise, when the limbs' lengths derived yield complex numbers, then the posit
 | 
			
		||||
 | 
			
		||||
** =forwardKinematicsApprox=: Compute the Approximate Forward Kinematics
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/forwardKinematicsApprox.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/forwardKinematicsApprox.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:forwardKinematicsApprox>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/forwardKinematicsApprox.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/forwardKinematicsApprox.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
 
 | 
			
		||||
@@ -170,7 +170,7 @@ We generally want to have the smallest resonant frequency $\omega_0$ to measure
 | 
			
		||||
 | 
			
		||||
*** Initialization function
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle ./src/initializeZAxisGeophone.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeZAxisGeophone.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeZAxisGeophone>>
 | 
			
		||||
@@ -221,7 +221,7 @@ Note that there is trade-off between:
 | 
			
		||||
 | 
			
		||||
*** Initialization function
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle ./src/initializeZAxisAccelerometer.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeZAxisAccelerometer.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeZAxisAccelerometer>>
 | 
			
		||||
@@ -231,7 +231,7 @@ This Matlab function is accessible [[file:../src/initializeZAxisAccelerometer.m]
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  function [accelerometer] = initializeZAxisAccelerometer(args)
 | 
			
		||||
      arguments
 | 
			
		||||
          args.mass (1,1) double {mustBeNumeric, mustBePositive} = 1e-3 % [kg]
 | 
			
		||||
          args.mass (1,1) double {mustBeNumeric, mustBePositive} = 5e-3 % [kg]
 | 
			
		||||
          args.freq (1,1) double {mustBeNumeric, mustBePositive} = 5e3  % [Hz]
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ The project can be opened using the =simulinkproject= function:
 | 
			
		||||
 | 
			
		||||
When the project opens, a startup script is ran.
 | 
			
		||||
The startup script is defined below and is exported to the =project_startup.m= script.
 | 
			
		||||
#+begin_src matlab :eval no :tangle ./src/project_startup.m
 | 
			
		||||
#+begin_src matlab :eval no :tangle ../src/project_startup.m
 | 
			
		||||
  project = simulinkproject;
 | 
			
		||||
  projectRoot = project.RootFolder;
 | 
			
		||||
 | 
			
		||||
@@ -75,7 +75,7 @@ The startup script is defined below and is exported to the =project_startup.m= s
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
When the project closes, it runs the =project_shutdown.m= script defined below.
 | 
			
		||||
#+begin_src matlab :eval no :tangle ./src/project_shutdown.m
 | 
			
		||||
#+begin_src matlab :eval no :tangle ../src/project_shutdown.m
 | 
			
		||||
  Simulink.fileGenControl('reset');
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -295,12 +295,12 @@ Let's now move a little bit the top platform and re-display the configuration:
 | 
			
		||||
 | 
			
		||||
** =initializeStewartPlatform=: Initialize the Stewart Platform structure
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeStewartPlatform.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeStewartPlatform.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeStewartPlatform>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeStewartPlatform.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeStewartPlatform.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Documentation
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -357,12 +357,12 @@ This Matlab function is accessible [[file:src/initializeStewartPlatform.m][here]
 | 
			
		||||
 | 
			
		||||
** =initializeFramesPositions=: Initialize the positions of frames {A}, {B}, {F} and {M}
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeFramesPositions.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeFramesPositions.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeFramesPositions>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeFramesPositions.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeFramesPositions.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Documentation
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -435,12 +435,12 @@ This Matlab function is accessible [[file:src/initializeFramesPositions.m][here]
 | 
			
		||||
 | 
			
		||||
** =generateGeneralConfiguration=: Generate a Very General Configuration
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/generateGeneralConfiguration.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/generateGeneralConfiguration.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:generateGeneralConfiguration>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/generateGeneralConfiguration.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/generateGeneralConfiguration.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Documentation
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -565,12 +565,12 @@ The radius of the circles can be chosen as well as the angles where the joints a
 | 
			
		||||
 | 
			
		||||
** =computeJointsPose=: Compute the Pose of the Joints
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/computeJointsPose.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/computeJointsPose.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:computeJointsPose>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/computeJointsPose.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/computeJointsPose.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Documentation
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -700,12 +700,12 @@ This Matlab function is accessible [[file:src/computeJointsPose.m][here]].
 | 
			
		||||
 | 
			
		||||
** =initializeStewartPose=: Determine the initial stroke in each leg to have the wanted pose
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeStewartPose.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeStewartPose.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeStewartPose>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeStewartPose.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeStewartPose.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -761,12 +761,12 @@ This Matlab function is accessible [[file:src/initializeStewartPose.m][here]].
 | 
			
		||||
 | 
			
		||||
** =initializeCylindricalPlatforms=: Initialize the geometry of the Fixed and Mobile Platforms
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeCylindricalPlatforms.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeCylindricalPlatforms.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeCylindricalPlatforms>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeCylindricalPlatforms.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeCylindricalPlatforms.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -858,12 +858,12 @@ This Matlab function is accessible [[file:src/initializeCylindricalPlatforms.m][
 | 
			
		||||
 | 
			
		||||
** =initializeCylindricalStruts=: Define the inertia of cylindrical struts
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeCylindricalStruts.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeCylindricalStruts.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeCylindricalStruts>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeCylindricalStruts.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeCylindricalStruts.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -968,12 +968,12 @@ This Matlab function is accessible [[file:src/initializeCylindricalStruts.m][her
 | 
			
		||||
 | 
			
		||||
** =initializeStrutDynamics=: Add Stiffness and Damping properties of each strut
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeStrutDynamics.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeStrutDynamics.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeStrutDynamics>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeStrutDynamics.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeStrutDynamics.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Documentation
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -1049,8 +1049,8 @@ A simplistic model of such amplified actuator is shown in Figure [[fig:actuator_
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  arguments
 | 
			
		||||
      stewart
 | 
			
		||||
      args.K (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e6*ones(6,1)
 | 
			
		||||
      args.C (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e1*ones(6,1)
 | 
			
		||||
      args.K (6,1) double {mustBeNumeric, mustBeNonnegative} = 20e6*ones(6,1)
 | 
			
		||||
      args.C (6,1) double {mustBeNumeric, mustBeNonnegative} = 2e1*ones(6,1)
 | 
			
		||||
  end
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
@@ -1067,12 +1067,12 @@ A simplistic model of such amplified actuator is shown in Figure [[fig:actuator_
 | 
			
		||||
 | 
			
		||||
** =initializeAmplifiedStrutDynamics=: Add Stiffness and Damping properties of each strut for an amplified piezoelectric actuator
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeAmplifiedStrutDynamics.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeAmplifiedStrutDynamics.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeAmplifiedStrutDynamics>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeAmplifiedStrutDynamics.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeAmplifiedStrutDynamics.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Documentation
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -1196,12 +1196,12 @@ A simplistic model of such amplified actuator is shown in Figure [[fig:amplified
 | 
			
		||||
 | 
			
		||||
** =initializeJointDynamics=: Add Stiffness and Damping properties for spherical joints
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeJointDynamics.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeJointDynamics.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeJointDynamics>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeJointDynamics.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeJointDynamics.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -1215,8 +1215,8 @@ This Matlab function is accessible [[file:src/initializeJointDynamics.m][here]].
 | 
			
		||||
  %
 | 
			
		||||
  % Inputs:
 | 
			
		||||
  %    - args - Structure with the following fields:
 | 
			
		||||
  %        - type_F - 'universal', 'spherical', 'univesal_p', 'spherical_p'
 | 
			
		||||
  %        - type_M - 'universal', 'spherical', 'univesal_p', 'spherical_p'
 | 
			
		||||
  %        - type_F - 'universal', 'spherical', 'universal_p', 'spherical_p'
 | 
			
		||||
  %        - type_M - 'universal', 'spherical', 'universal_p', 'spherical_p'
 | 
			
		||||
  %        - Kf_M [6x1] - Bending (Rx, Ry) Stiffness for each top joints [(N.m)/rad]
 | 
			
		||||
  %        - Kt_M [6x1] - Torsion (Rz) Stiffness for each top joints [(N.m)/rad]
 | 
			
		||||
  %        - Cf_M [6x1] - Bending (Rx, Ry) Damping of each top joint [(N.m)/(rad/s)]
 | 
			
		||||
@@ -1245,8 +1245,8 @@ This Matlab function is accessible [[file:src/initializeJointDynamics.m][here]].
 | 
			
		||||
#+begin_src matlab
 | 
			
		||||
  arguments
 | 
			
		||||
      stewart
 | 
			
		||||
      args.type_F     char   {mustBeMember(args.type_F,{'universal', 'spherical', 'univesal_p', 'spherical_p'})} = 'universal'
 | 
			
		||||
      args.type_M     char   {mustBeMember(args.type_M,{'universal', 'spherical', 'univesal_p', 'spherical_p'})} = 'spherical'
 | 
			
		||||
      args.type_F     char   {mustBeMember(args.type_F,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'universal'
 | 
			
		||||
      args.type_M     char   {mustBeMember(args.type_M,{'universal', 'spherical', 'universal_p', 'spherical_p'})} = 'spherical'
 | 
			
		||||
      args.Kf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 15*ones(6,1)
 | 
			
		||||
      args.Cf_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 1e-4*ones(6,1)
 | 
			
		||||
      args.Kt_M (6,1) double {mustBeNumeric, mustBeNonnegative} = 20*ones(6,1)
 | 
			
		||||
@@ -1337,12 +1337,12 @@ Rotational Damping
 | 
			
		||||
 | 
			
		||||
** =initializeInertialSensor=: Initialize the inertial sensor in each strut
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/initializeInertialSensor.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/initializeInertialSensor.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:initializeInertialSensor>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/initializeInertialSensor.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/initializeInertialSensor.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
@@ -1419,12 +1419,12 @@ This Matlab function is accessible [[file:src/initializeInertialSensor.m][here]]
 | 
			
		||||
 | 
			
		||||
** =displayArchitecture=: 3D plot of the Stewart platform architecture
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
:header-args:matlab+: :tangle src/displayArchitecture.m
 | 
			
		||||
:header-args:matlab+: :tangle ../src/displayArchitecture.m
 | 
			
		||||
:header-args:matlab+: :comments none :mkdirp yes :eval no
 | 
			
		||||
:END:
 | 
			
		||||
<<sec:displayArchitecture>>
 | 
			
		||||
 | 
			
		||||
This Matlab function is accessible [[file:src/displayArchitecture.m][here]].
 | 
			
		||||
This Matlab function is accessible [[file:../src/displayArchitecture.m][here]].
 | 
			
		||||
 | 
			
		||||
*** Function description
 | 
			
		||||
:PROPERTIES:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user