You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.1 KiB
115 lines
4.1 KiB
%SerialLink.edit Edit kinematic and dynamic parameters of a seriallink manipulator
|
|
%
|
|
% R.edit displays the kinematic parameters of the robot as an editable
|
|
% table in a new figure.
|
|
%
|
|
% R.edit('dyn') as above but also displays the dynamic parameters.
|
|
%
|
|
% Notes::
|
|
% - The 'Save' button copies the values from the table to the SerialLink
|
|
% manipulator object.
|
|
% - To exit the editor without updating the object just
|
|
% kill the figure window.
|
|
function edit(r, dyn)
|
|
|
|
isdyn = nargin > 1 && strcmp(dyn, 'dyn') == 1;
|
|
|
|
f = figure('Position',[100 100 600 220], ...
|
|
'Menubar', 'none', ...
|
|
'Name', r.name);
|
|
dh = zeros(r.n,0);
|
|
for j=1:r.n
|
|
L = r.links(j);
|
|
|
|
%dh(j,1) = L.theta;
|
|
dh(j,2) = L.d;
|
|
dh(j,3) = L.a;
|
|
dh(j,4) = L.alpha;
|
|
dh(j,5) = L.sigma;
|
|
dh(j,6) = L.offset;
|
|
if ~isempty(L.qlim)
|
|
dh(j,7) = L.qlim(1);
|
|
dh(j,8) = L.qlim(2);
|
|
else
|
|
dh(j,7) = -Inf;
|
|
dh(j,8) = Inf;
|
|
end
|
|
if isdyn
|
|
dh(j,9) = L.m;
|
|
dh(j,10) = L.Jm;
|
|
dh(j,11) = L.B;
|
|
dh(j,12) = L.G;
|
|
dh(j,13) = L.Tc(1);
|
|
dh(j,14) = L.Tc(2);
|
|
dh(j,15) = L.r(1);
|
|
dh(j,16) = L.r(2);
|
|
dh(j,17) = L.r(3);
|
|
dh(j,18) = L.I(1,1);
|
|
dh(j,19) = L.I(2,2);
|
|
dh(j,20) = L.I(3,3);
|
|
dh(j,21) = L.I(1,2);
|
|
dh(j,22) = L.I(2,3);
|
|
dh(j,23) = L.I(3,1);
|
|
end
|
|
end
|
|
headings = {'theta', 'd', 'a', 'alpha', 'sigma', 'offset', 'q_min', 'q_max'};
|
|
if isdyn
|
|
headings = [headings 'mass', 'Jm', 'B', 'G', 'Tc+', 'Tc-', 'rx', 'ry', 'rz', 'Ixx', 'Iyy', 'Izz', 'Ixy', 'Iyz', 'Ixz'];
|
|
end
|
|
t = uitable(f, ...
|
|
'ColumnEditable', true, ...
|
|
'ColumnName', headings,...
|
|
'Rowstriping', 'on', ...
|
|
'Data', dh, ...
|
|
'UserData', r);
|
|
% Set width and height
|
|
f.Position(3) = t.Extent(3)+50;
|
|
f.Position(4) = t.Extent(4)+50;
|
|
t.Position(3) = t.Extent(3)+50;
|
|
t.Position(4) = t.Extent(4)+50;
|
|
t.Position(1) = 0;
|
|
t.Position(2) = 0;
|
|
b = uicontrol('Style', 'pushbutton', ...
|
|
'Position', [10 10 50 20], ...
|
|
'String', 'Save', ...
|
|
'Callback', {@edit_save, t});
|
|
end
|
|
|
|
function edit_save(button, event, table)
|
|
|
|
dh = get(table, 'Data');
|
|
r = get(table, 'UserData');
|
|
for j=1:r.n
|
|
L = r.links(j);
|
|
|
|
%dh(j,1) = L.theta;
|
|
L.d = dh(j,2);
|
|
L.a = dh(j,3);
|
|
L.alpha = dh(j,4);
|
|
L.sigma = dh(j,5);
|
|
L.offset = dh(j,6);
|
|
L.qlim(1) = dh(j,7);
|
|
L.qlim(2) = dh(j,8);
|
|
if numcols(dh) > 6
|
|
L.m = dh(j,9);
|
|
L.Jm = dh(j,10);
|
|
L.B = dh(j,11);
|
|
L.G = dh(j,12);
|
|
L.Tc(1) = dh(j,13);
|
|
L.Tc(2) = dh(j,14);
|
|
L.r(1) = dh(j,15);
|
|
L.r(2) = dh(j,16);
|
|
L.r(3) = dh(j,17);
|
|
L.I(1,1) = dh(j,18);
|
|
L.I(2,2) = dh(j,19);
|
|
L.I(3,3) = dh(j,20);
|
|
L.I(1,2) = dh(j,21);
|
|
L.I(2,3) = dh(j,22);
|
|
L.I(3,1) = dh(j,23);
|
|
L.I(2,1) = dh(j,21);
|
|
L.I(3,2) = dh(j,22);
|
|
L.I(1,3) = dh(j,23);
|
|
end
|
|
end
|
|
end
|
|
|