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
2.8 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 this = subsasgn(this, index, value)
switch index(1).type
case '.'
switch index(1).subs,
case 'alpha',
this.alpha = value;
case 'a',
this.a = value;
case 'theta',
this.theta = value;
case 'd',
this.d = value;
case 'offset',
this.offset = value;
case 'sigma',
if ischar(value)
this.sigma = lower(value) == 'p';
else
this.sigma = value;
end
case 'mdh',
this.mdh = value;
case 'G',
this.G = value;
case 'I',
if isempty(value)
return;
end
if all(size(value) == [3 3])
if norm(value-value') > eps
error('inertia matrix must be symmetric');
end
this.I = value;
elseif length(value) == 3
this.I = diag(value);
elseif length(value) == 6
this.I = [ value(1) value(4) value(6)
value(4) value(2) value(5)
value(6) value(5) value(3)];
end
case 'r',
if isempty(value)
return;
end
if length(value) ~= 3
error('COG must be a 3-vector');
end
this.r = value(:)';
case 'Jm',
this.Jm = value;
case 'B',
this.B = value;
case 'Tc',
if isempty(value)
return;
end
if length(value) == 1
this.Tc = [value -value];
elseif length(value) == 2
if value(1) < value(2)
error('Coulomb friction is [Tc+ Tc-]');
end
this.Tc = value;
else
error('Coulomb friction vector can have 1 (symmetric) or 2 (asymmetric) elements only')
end
case 'm',
this.m = value;
case 'qlim',
if length(value) ~= 2,
error('joint limit must have 2 elements');
end
this.qlim = value;
otherwise, error('Unknown method')
end
case '()'
if numel(index) == 1
if isempty(this)
this = value; %% this is a crude bug fix
end
this = builtin('subsasgn', this, index, value);
else
this_subset = this(index(1).subs{:}); % get the subset
this_subset = subsasgn(this_subset, index(2:end), value);
this(index(1).subs{:}) = this_subset; % put subset back;
end
end
endfunction