% TOGAC47_RGC_RealGalenSysStability.m

% This file analyzes the stablity and transparency of the real identified
% galen system in the mock OR. Currently the Rotation axis are not yet
% identified.


% Modified 05-4-2023
% Created by Brevin Banks

%%% TF choices from RealIdentification.m
% Xest
% Yest
% Ztf


%%%HOW TO MEASURE IMPEDANCE TORQUE?!!!




for tf_num=0:2
s = tf('s');
switch (tf_num)
    case 0
        % Has a .115s estimated time delay
        TF = 9.883e04/(s^2 + 12.47*s + 1.034e05);
        Tfchoice = "Xtf";
    case 1
        % Has a 0.0599 s estimated time delay
        TF = 1.607e07/(s^2 + 1.971e05*s + 1.655e07);
        Tfchoice = "Ytf";
    case 2
        % Has a 0.015 s estimated time delay
        TF = 2.075e04/(s^2 + 749.4*s + 2.098e04);
        Tfchoice = "Ztf";
    case 3
        % TF = 
        Tfchoice = "Wxtf";
    case 4
        % TF = 
        Tfchoice = "Wytf";
end

% Create the space of ma and ba values to test the admittance controller on
ma_spaceup = linspace(0.1,200,30);
ba_spaceup = linspace(0.1,700,30);



% select from a list of end case impedance values outlined in the Aydin et
% al paper. Then analyze the stability of the TF from Aydin et al with the
% given ma space, ba space, and impedance
Zeq = Impedance_select(1);
[stable_map1, line_of_stability1up] = AnyTFStabMap(ma_spaceup,ba_spaceup,TF,Zeq)
Zeq = Impedance_select(2);
[stable_map2, line_of_stability2up] = AnyTFStabMap(ma_spaceup,ba_spaceup,TF,Zeq)
Zeq = Impedance_select(3);
[stable_map3, line_of_stability3up] = AnyTFStabMap(ma_spaceup,ba_spaceup,TF,Zeq)
Zeq = Impedance_select(4);
[stable_map4, line_of_stability4up] = AnyTFStabMap(ma_spaceup,ba_spaceup,TF,Zeq)

% extract the cost map for the Aydin controller using the Aydin et al
% method in section 5 Transparency.
CostTFup = CostTransMapAnyTF(ma_spaceup,ba_spaceup,TF);
% Stab mapper takes in Lines in the form of a cell array
Lines={line_of_stability1up,line_of_stability2up,line_of_stability3up,line_of_stability4up};
% Plot the stability plots and cost map in one figure
fextreme = StabMapperNoPoly(ma_spaceup,ba_spaceup,Lines,CostTFup);
title("Identified "+Tfchoice+" Stab Map W/ Cost. UpperBound")

numforstring = tf_num+1;
Filename = string("RealHighImpMapJoint"+string(numforstring));
datatosave = {fextreme,ma_spaceup};
save(Filename,"datatosave")

%%% Lower bound impedances

% Create the space of ma and ba values to test the admittance controller on
ma_spacelow = linspace(0.1,25,30);
ba_spacelow = linspace(0.1,50,30);

Zeq = Impedance_select(5);
[stable_map1, line_of_stability1low] = AnyTFStabMap(ma_spacelow,ba_spacelow,TF,Zeq)
Zeq = Impedance_select(6);
[stable_map2, line_of_stability2low] = AnyTFStabMap(ma_spacelow,ba_spacelow,TF,Zeq)
Zeq = Impedance_select(7);
[stable_map3, line_of_stability3low] = AnyTFStabMap(ma_spacelow,ba_spacelow,TF,Zeq)
Zeq = Impedance_select(8);
[stable_map4, line_of_stability4low] = AnyTFStabMap(ma_spacelow,ba_spacelow,TF,Zeq)

% extract the cost map for the Aydin controller using the Aydin et al
% method in section 5 Transparency.
CostTFlow = CostTransMapAnyTF(ma_spacelow,ba_spacelow,TF);
% Stab mapper takes in Lines in the form of a cell array
Lines={line_of_stability1low,line_of_stability2low,line_of_stability3low,line_of_stability4low};
% Plot the stability plots and cost map in one figure
fextreme = StabMapperNoPoly(ma_spacelow,ba_spacelow,Lines,CostTFlow);
% end
title("Identified "+Tfchoice+" Stab Map W/ Cost. LowerBound")
numforstring = tf_num+1;
Filename = string("RealLowImpMapJoint"+string(numforstring));
datatosave = {fextreme,ma_spacelow};
save(Filename,"datatosave")
end



