2018-07-23 08:17:51 +00:00
|
|
|
function traj = JointTrajectory(thetastart, thetaend, Tf, N, method)
|
2018-07-23 21:47:50 +00:00
|
|
|
% *** CHAPTER 9: TRAJECTORY GENERATION ***
|
2018-07-23 08:17:51 +00:00
|
|
|
% Takes thetastart: The initial joint variables,
|
|
|
|
|
% thetaend: The final joint variables,
|
|
|
|
|
% Tf: Total time of the motion in seconds from rest to rest,
|
|
|
|
|
% N: The number of points N > 1 (Start and stop) in the discrete
|
|
|
|
|
% representation of the trajectory,
|
|
|
|
|
% method: The time-scaling method, where 3 indicates cubic
|
|
|
|
|
% (third-order polynomial) time scaling and 5 indicates
|
|
|
|
|
% quintic (fifth-order polynomial) time scaling.
|
|
|
|
|
% Returns traj: A trajectory as an N x n matrix, where each row is an
|
|
|
|
|
% n-vector of joint variables at an instant in time. The
|
|
|
|
|
% first row is thetastart and the Nth row is thetaend . The
|
|
|
|
|
% elapsed time between each row is Tf/(N - 1).
|
|
|
|
|
% The returned trajectory is a straight-line motion in joint space.
|
|
|
|
|
% Example Input:
|
2018-07-23 21:47:50 +00:00
|
|
|
%
|
|
|
|
|
% clear; clc;
|
|
|
|
|
% thetastart = [1; 0; 0; 1; 1; 0.2; 0; 1];
|
|
|
|
|
% thetaend = [1.2; 0.5; 0.6; 1.1; 2;2; 0.9; 1];
|
|
|
|
|
% Tf = 4;
|
|
|
|
|
% N = 6;
|
|
|
|
|
% method = 3;
|
|
|
|
|
% traj = JointTrajectory(thetastart, thetaend, Tf, N, method)
|
|
|
|
|
%
|
2018-07-23 08:17:51 +00:00
|
|
|
% Output:
|
|
|
|
|
% traj =
|
|
|
|
|
% 1.0000 0 0 1.0000 1.0000 0.2000 0 1.0000
|
|
|
|
|
% 1.0208 0.0520 0.0624 1.0104 1.1040 0.3872 0.0936 1.0000
|
|
|
|
|
% 1.0704 0.1760 0.2112 1.0352 1.3520 0.8336 0.3168 1.0000
|
|
|
|
|
% 1.1296 0.3240 0.3888 1.0648 1.6480 1.3664 0.5832 1.0000
|
|
|
|
|
% 1.1792 0.4480 0.5376 1.0896 1.8960 1.8128 0.8064 1.0000
|
|
|
|
|
% 1.2000 0.5000 0.6000 1.1000 2.0000 2.0000 0.9000 1.0000
|
|
|
|
|
|
|
|
|
|
timegap = Tf / (N - 1);
|
|
|
|
|
traj = zeros(size(thetastart, 1), N);
|
|
|
|
|
for i = 1: N
|
|
|
|
|
if method == 3
|
|
|
|
|
s = CubicTimeScaling(Tf, timegap * (i - 1));
|
|
|
|
|
else
|
|
|
|
|
s = QuinticTimeScaling(Tf, timegap * (i - 1));
|
|
|
|
|
end
|
|
|
|
|
traj(:, i) = thetastart + s * (thetaend - thetastart);
|
|
|
|
|
end
|
|
|
|
|
traj = traj';
|
|
|
|
|
end
|