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.
211 lines
3.9 KiB
211 lines
3.9 KiB
|
|
% Ryan Steindl based on Robotics Toolbox for MATLAB (v6 and v9)
|
|
%
|
|
% Copyright (C) 1993-2011, by Peter I. Corke
|
|
%
|
|
% This file is part of The Robotics Toolbox for MATLAB (RTB).
|
|
%
|
|
% RTB is free software: you can redistribute it and/or modify
|
|
% it under the terms of the GNU Lesser General Public License as published by
|
|
% the Free Software Foundation, either version 3 of the License, or
|
|
% (at your option) any later version.
|
|
%
|
|
% RTB is distributed in the hope that it will be useful,
|
|
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
% GNU Lesser General Public License for more details.
|
|
%
|
|
% You should have received a copy of the GNU Leser General Public License
|
|
% along with RTB. If not, see <http://www.gnu.org/licenses/>.
|
|
%
|
|
% http://www.petercorke.com
|
|
function [v, a, b] = subsref(r, s)
|
|
|
|
if s(1).type ~= '.'
|
|
%error('only .field supported')
|
|
end
|
|
|
|
% NOTE WELL: the following code can't use getfield() since
|
|
% getfield() uses this, and Matlab will crash!!
|
|
|
|
el = char(s(1).subs);
|
|
switch el,
|
|
%-------------------------------------------------------------------------------------
|
|
% External Functions
|
|
case 'fkine',
|
|
q = s(2).subs;
|
|
v = fkine(r,q{:});
|
|
|
|
case 'ikine6s',
|
|
q = s(2).subs;
|
|
v = ikine6s(r,q{:});
|
|
|
|
case 'ikine',
|
|
q = s(2).subs;
|
|
v = ikine(r,q{:});
|
|
|
|
case 'maniplty',
|
|
q = s(2).subs;
|
|
[v, a] = maniplty(r,q{:});
|
|
|
|
case 'rne'
|
|
q = s(2).subs;
|
|
[v, a] = rne(r,q{:});
|
|
|
|
case 'isspherical',
|
|
v = isspherical(r);
|
|
|
|
case 'gravload'
|
|
q = s(2).subs;
|
|
v = gravload(r,q{:});
|
|
|
|
case 'inertia'
|
|
q = s(2).subs;
|
|
v = inertia(r,q{:});
|
|
|
|
case 'cinertia',
|
|
q = s(2).subs;
|
|
v = cinertia(r,q{:});
|
|
|
|
case 'coriolis'
|
|
q = s(2).subs;
|
|
v = coriolis(r,q{:});
|
|
|
|
case 'friction'
|
|
q = s(2).subs;
|
|
v = friction(r,q{:});
|
|
|
|
case 'nofriction'
|
|
if numel(s(2).subs) < 1
|
|
v = nofriction(r);
|
|
else
|
|
q = s(2).subs;
|
|
v = nofriction(r,q{:});
|
|
end
|
|
|
|
case 'islimit',
|
|
q = s(2).subs;
|
|
v = islimit(r,q{:});
|
|
|
|
case 'payload',
|
|
q = s(2).subs;
|
|
l = r.links;
|
|
l(r.n).m = q{1};
|
|
l(r.n).r = q{2};
|
|
r.links = l;
|
|
v = SerialLink(r);
|
|
|
|
case 'jacob0',
|
|
q = s(2).subs;
|
|
v = jacob0(r,q{:});
|
|
|
|
case 'accel',
|
|
q = s(2).subs;
|
|
v = accel(r,q{:});
|
|
|
|
case 'plot',
|
|
q = s(2).subs;
|
|
plot(r,q{:})
|
|
|
|
case 'fdyn',
|
|
q = s(2).subs;
|
|
[v, a, b] = fdyn(r,q{:});
|
|
|
|
case 'jacobn',
|
|
q = s(2).subs;
|
|
v = jacobn(r,q{:});
|
|
|
|
case 'jtraj',
|
|
q = s(2).subs;
|
|
v = jtraj(r,q{:});
|
|
|
|
case 'perturb',
|
|
q = s(2).subs;
|
|
v = perturb(r,q{:});
|
|
|
|
case 'itorque',
|
|
q = s(2).subs;
|
|
v = itorque(r,q{:});
|
|
|
|
case 'jacob_dot',
|
|
q = s(2).subs;
|
|
v = jacob_dot(r,q{:});
|
|
|
|
case 'dyn',
|
|
q = s(2).subs;
|
|
v = dyn(r,q{:});
|
|
|
|
case 'showlink',
|
|
q = s(2).subs;
|
|
v = showlink(r,q{:});
|
|
|
|
%-------------------------------------------------------------------------------------
|
|
case 'links',
|
|
|
|
if length(s) == 1,
|
|
v = r.links;
|
|
|
|
elseif length(s) == 2,
|
|
if s(2).type == '()'
|
|
j = s(2).subs;
|
|
j = j{:};
|
|
if (j < 1) | (j > r.n)
|
|
error('link index out of bounds')
|
|
end
|
|
end
|
|
v = r.links(j);
|
|
|
|
elseif length(s) >= 3,
|
|
if s(2).type == '()'
|
|
j = s(2).subs;
|
|
j = j{:};
|
|
if (j < 1) | (j > r.n)
|
|
error('link index out of bounds')
|
|
end
|
|
end
|
|
if s(3).subs = 'dyn',
|
|
link = r.links(j);
|
|
v = link.dyn();
|
|
end
|
|
end
|
|
case 'offset',
|
|
L = r.links;
|
|
v = [];
|
|
for i=1:r.n,
|
|
v = [v; L(i).offset];
|
|
end
|
|
case 'qlim',
|
|
L = r.links;
|
|
v = [];
|
|
for i=1:r.n,
|
|
v = [v; L(i).qlim];
|
|
end
|
|
|
|
case 'n',
|
|
v = r.n;
|
|
case 'name',
|
|
v = r.name;
|
|
case 'dh',
|
|
v = rdh(r);
|
|
case 'dyn'
|
|
v = rdyn(r);
|
|
case 'gravity'
|
|
v = r.gravity;
|
|
case 'tool'
|
|
v = r.tool;
|
|
case 'base'
|
|
v = r.base;
|
|
case 'mdh',
|
|
v = r.mdh;
|
|
case 'q',
|
|
v = r.q;
|
|
case 'plotopt',
|
|
v = r.plotopt;
|
|
case 'lineopt'
|
|
v = r.lineopt;
|
|
case 'shadowopt'
|
|
v = r.shadowopt;
|
|
case {'show', 'handle'}
|
|
v = r.handle';
|
|
otherwise, error('Unknown method in subsref')
|
|
end
|