% This file takes the pieces of the transfer function from % Towards Collaborative Drilling with a Cobot Using Admittance Controller % the work of Aydin et al. The values for all their controller % variables G(s) C(s) Zeq(s) and H(s) are featured here. % Input: % A - Admittance controller TF % Zeq - equivalent Impedance % Output: % TF - Closed or Open loop transfer functions % Created by Brevin Banks % Modified 3/14/2023 function TF = TFAydin(Ys,Zeq,ClosedorOpen) % Check function input statements if nargin==2 ClosedorOpen='closed'; warning('No loop type selcted. Returned TF will be closed loop by default'); end if nargin==1 ClosedorOpen='closed'; warning('No impedance condition selected. Returned TF will be open-loop with no Impedance'); warning("the inner closed loop on the controller still present"); end if nargin==0 ClosedorOpen='closed'; warning("No admittance controller selected. Returned TF won't have admittance or impedance applied"); warning("Input type becomes velocity. Output has closed inner loop on the controller"); end % Aydin et al paper G(s) values from system Identification k2 = -0.1896; k4 = 1.6550; k6 = -0.4654; % T2 a1=25.69; b1=749.3; mt1 = 1; bt1 = 29.04; kt1 = 752.7; Ps1 = k2*tf([a1 b1],[mt1 bt1 kt1]); % T4 a2=65.99; b2=1679; mt2 = 1; bt2 = 72.97; kt2 = 1723; Ps2 = k4*tf([a2 b2],[mt2 bt2 kt2]); % T6 a3=63.77; b3=6564; mt3 = 1; bt3 = 95.39; kt3 = 6513; Ps3 = k6*tf([a3 b3],[mt3 bt3 kt3]); Gs = Ps1+Ps2+Ps3; %Filter [b,a] = butter(2,5/(30/2)); %sampled at 30Hz with a cuttoff of 5Hz Hs = tf(b,a); if strcmp('closed',ClosedorOpen) if nargin>1 TF = (Gs*Ys)/(1+(Gs*Ys*Hs*Zeq)); % total system CL transfer function with impedance and A elseif nargin==1 TF = Ys*Gs*Hs; % Total system CL transfer function without impedance feedback loop elseif nargin==0 TF = Gs; % Total system CL transfer function without admittance controller or impedance feedback loop end elseif strcmp('open',ClosedorOpen) if nargin>1 TF = Ys*Gs*Hs*Zeq; % Open loop transfer function with impedance and A end end end