forked from SchapplM/robsynth-parroblib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
parroblib_addtopath.m
78 lines (76 loc) · 2.75 KB
/
parroblib_addtopath.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
% Füge die Modelle gegebener Roboter zum Pfad hinzu
%
% Eingabe:
% Names
% Cell-Array mit Namen der Robotermodelle, deren Funktionen zum
% Matlab-Pfad hinzugefügt werden sollen.
%
% Siehe auch: serroblib_addtopath.m
% Moritz Schappler, [email protected], 2018-12
% (C) Institut für Mechatronische Systeme, Universität Hannover
function parroblib_addtopath(Names)
if ~iscell(Names)
error('parroblib_addtopath: Eingegebene Roboternamen müssen ein Cell-Array sein');
end
parroblibpath=fileparts(which('parroblib_path_init.m'));
for i = 1:length(Names)
Name = Names{i};
[NLEG, LEG_Names, ~, Coupling, ActNr, ~, EEdof0, PName_Kin, PName_Legs] = parroblib_load_robot(Name);
EEstr = sprintf('%dT%dR', sum(EEdof0(1:3)), sum(EEdof0(4:6)));
% Pfade für Matlab-Funktionen der PKM hinzufügen (gleicher Code in
% ParRob/fill_fcn_handles)
switch Coupling(1) % siehe align_base_coupling.m
case 1
basecoupling_equiv = [5,4,8];
case 2
basecoupling_equiv = [6,4,8];
case 3
basecoupling_equiv = [7,4,8];
case 4
basecoupling_equiv = 8;
case 5
basecoupling_equiv = [1 4 8];
case 6
basecoupling_equiv = [2 4 8];
case 7
basecoupling_equiv = [3 4 8];
case 8
basecoupling_equiv = 4;
case 9
basecoupling_equiv = [4,8];
case 10
% Beide Methoden haben senkrechte Gestellgelenke
basecoupling_equiv = 1; % TODO: Prüfen, ob das stimmt
otherwise
error('Fall %d nicht implementiert', Coupling(1));
end
% Code für die eigentlich gesuchte Darstellung vorne anstellen (zuerst
% suchen)
basecoupling_equiv = [Coupling(1), basecoupling_equiv]; %#ok<AGROW>
for k = basecoupling_equiv
fcn_dir1 = fullfile(parroblibpath, ['sym_', EEstr], PName_Legs, ...
sprintf('hd_G%dA0', k)); % keine P-Nummer für A0-Code
if exist(fcn_dir1, 'file'), break; end % nehme den existierenden Ordner
end
fcn_dir2 = fullfile(parroblibpath, ['sym_', EEstr], PName_Legs, ...
sprintf('hd_G%dP%dA%d', Coupling(1), Coupling(2), ActNr));
fcn_dir3 = fullfile(parroblibpath, ['sym_', EEstr], PName_Legs, ...
'tpl');
if exist(fcn_dir1, 'file') % existiert nur, wenn symbolischer Code generiert
addpath(fcn_dir1);
end
if exist(fcn_dir2, 'file') % existiert nur, wenn für diese Aktuierung symbolisch generiert
addpath(fcn_dir2);
end
if ~exist(fcn_dir3, 'file')
fprintf('Vorlagen-Funktion existieren nicht für %s. Erstelle.\n', PName_Kin)
parroblib_create_template_functions({PName_Kin});
end
addpath(fcn_dir3);
% Zusätzlich Pfade für Funktionen der seriellen Beinketten hinzufügen.
% Damit wird das Laden eins
LEG_Names_unique = unique(LEG_Names);
for j = 1:length(LEG_Names_unique)
serroblib_addtopath({LEG_Names_unique{j}});
end
end