www.pudn.com > RobotToolbox.rar > fkine.m


%FKINE  Forward robot kinematics for serial link manipulator
%
%	TR = FKINE(ROBOT, Q)
%
% Computes the forward kinematics for each joint space point defined by Q.
% ROBOT is a robot object.
%
% For an n-axis manipulator Q is an n element vector or an m x n matrix of
% robot joint coordinates.
% 
% If Q is a vector it is interpretted as the generalized joint coordinates, and
% FKINE(ROBOT, Q) returns a 4x4 homogeneous transformation for the tool of
% the manipulator.
%
% If Q is a matrix, the rows are interpretted as the generalized 
% joint coordinates for a sequence of points along a trajectory.  Q(i,j) is
% the j'th joint parameter for the i'th trajectory point.  In this case
% FKINE(ROBOT, Q) returns 3D matrix where the last subscript is the index
% along the path.
%
% The robot's base or tool transform, if present, are incorporated into the
% result.
%
% See also: LINK, ROBOT.

% MOD HISTORY
% 	6/99	init tt to zeros rather than [], problem with cat() v 5.3
% $Log: fkine.m,v $
% Revision 1.3  2002/04/14 10:14:34  pic
% Update comments.
%
% Revision 1.2  2002/04/01 11:47:13  pic
% General cleanup of code: help comments, see also, copyright, remnant dh/dyn
% references, clarification of functions.
%
% $Revision: 1.3 $

% Copyright (C) 1993-2002, by Peter I. Corke

function t = fkine(robot, q)
	%
	% evaluate fkine for each point on a trajectory of 
	% theta_i or q_i data
	%

	n = robot.n;

	L = robot.link;
	if length(q) == n,
		t = robot.base;
		for i=1:n,
			t = t * L{i}(q(i));
		end
		t = t * robot.tool;
	else
		if numcols(q) ~= n,
			error('bad data')
		end
		t = zeros(4,4,0);
		for qv=q',		% for each trajectory point
			tt = robot.base;
			for i=1:n,
				tt = tt * L{i}(qv(i));
			end
			t = cat(3, t, tt * robot.tool);
		end
	end