%改进型DH
L(1) = Link('revolute', 'd', 0, 'a', 0, 'alpha', 0,'modified');
L(2) = Link('revolute', 'd', 0, 'a', 0, 'alpha', pi/2, 'offset', pi/2,'modified');
L(3) = Link('revolute', 'd', 0, 'a', 0.5, 'alpha', 0, 'offset', -atan(427.46/145),'modified');
L(4) = Link('revolute', 'd', 0, 'a', sqrt(0.145^2+0.42746^2), 'alpha', 0, 'offset', atan(427.46/145),'modified');
L(5) = Link('revolute', 'd', 0.258, 'a', 0, 'alpha', pi/2,'modified');
%关节角度限制
L(1).qlim = [-150, 150]/180*pi;
L(2).qlim = [-100, 90]/180*pi;
L(3).qlim = [-90, 90]/180*pi;
L(4).qlim = [-100, 100]/180*pi;
L(5).qlim = [-180, 180]/180*pi;
Five_dof_mod = SerialLink(L,'name','5_dof');
Five_dof_mod.base = transl(0, 0, 0.496);
%工作空间可视化
% num = 30000;
% P = zeros(num, 3);
% for i=1:num
% q1 = L(1).qlim(1) + rand * (L(1).qlim(2) - L(1).qlim(1));
% q2 = L(2).qlim(1) + rand * (L(2).qlim(2) - L(2).qlim(1));
% q3 = L(3).qlim(1) + rand * (L(3).qlim(2) - L(3).qlim(1));
% q4 = L(4).qlim(1) + rand * (L(4).qlim(2) - L(4).qlim(1));
% q5 = L(5).qlim(1) + rand * (L(5).qlim(2) - L(5).qlim(1));
%
% q = [q1 q2 q3 q4 q5];
% T = Five_dof_mod.fkine(q);
% P(i,:) = transl(T);
% end
% plot3(P(:,1), P(:,2), P(:,3), 'b.', 'MarkerSize', 1)
%轨迹规划
% T1 = transl(0.7, -0.5, 0) * trotx(180);
% T2 = transl(0.7, 0.5, 0.5) * trotx(180);
%
% q1 = Five_dof_mod.ikunc(T1);
% q2 = Five_dof_mod.ikunc(T2);
%
% Five_dof_mod.plot(q1);
% pause;
% Five_dof_mod.plot(q2);
% pause;
%%轨迹规划动画
P1 = [0.7, -0.5, 0];
P2 = [0.7, 0.5, 0.5];
t = linspace(0, 2, 51);
Traj = mtraj(@tpoly,P1,P2,t);
n = size(Traj,1);
T = zeros(4, 4, n);
for i=1:n
T(:,:,i) = transl(Traj(i,:)) * trotx(180);
end
Qtraj = Five_dof_mod.ikunc(T);
figure;
subplot(1,2,1);
Five_dof_mod.plot(Qtraj);
%%
hold on
subplot(1,2,2);
hold on
x = (Traj(:,1));
y = (Traj(:,2));
z = (Traj(:,3));
plot(t,x,'.-', 'linewidth', 1)
plot(t,y,'.-', 'linewidth', 1)
plot(t,z,'.-', 'linewidth', 1)
grid on
legend('x','y','z');
xlabel('time');
ylabel('position');
%%
% Five_dof_mod.teach
