MATLAB机器人寻找轨迹路线规划源代码

1.
clear;
clc;
% 建立连杆系
L1=Link([0 12.4   0   pi/2  0  -pi/2 ]);
L2=Link([0 0      0  -pi/2           ]);
L3=Link([0 15.43  0   pi/2           ]);
L4=Link([0 0      0  -pi/2  0   0    ]);
L5=Link([0 15.925 0   pi/2           ]);
L6=Link([0 0      0  -pi/2           ]);
L7=Link([0 15.0   0   0     0   pi/2 ]);

% 机器人模型对象建立
Rbt=SerialLink([L1 L2 L3 L4 L5 L6 L7]);

% 6轨迹点的关节变量值
q0=[0 0 0 0 0 0 0];
qsq1=[0.46088 0.37699 0 1.31 0 1.4451 0];
qsq2=[.81681 0.56549 0 1.0681 0 1.2566 0 ];
qsq3=[2.36 0.69115 0 0.848 0 1.4451 0 ];
qsq4=[2.66 0.37699 0 1.31 0 1.4451 0];
qsq5=[pi/2 0.62831 0 1.5708 0 0.94249 0];
qsq6=[0 0.62831 0 1.5708 0 0.94249 0];

% 轨迹点规划 五次多项式来规划轨迹
t=0:.04:1;
sqtraj1=jtraj(q0,qsq1,t); 
sqtraj2=jtraj(qsq1,qsq2,t); 
sqtraj3=jtraj(qsq2,qsq3,t); 
sqtraj4=jtraj(qsq3,qsq4,t);
sqtraj5=jtraj(qsq4,qsq1,t);
sqtraj6=jtraj(qsq1,q0,t);
sqtraj7=jtraj(q0,qsq6,t);
hold on

%变量初始化
atj=zeros(4,4);
view(-35,40)
xlim([-40,40])
ylim([-40,40])
zlim([0,60])

% 绘制第1段轨迹线
for i=1:1:length(t)
    atj=Rbt.fkine(sqtraj1(i,:));
    JTA(i,:)=transl(atj);  % 提取位姿矩阵的平移分量(3元素列向量)储存进JTA向量数组
    jta=JTA; 
    plot2(jta(i,:),'r.')   % 绘制轨迹点(红色点)
    Rbt.plot(sqtraj1(i,:)) % 绘制轨迹动画
    plot2(JTA,'b')         % 绘制轨迹线(蓝色线)
end
% 绘制第2段轨迹线
for i=1:1:length(t)
    atj2=Rbt.fkine(sqtraj2(i,:));
    JTA2(i,:)=transl(atj2);
    jta2=JTA2;
    plot2(jta2(i,:),'r.')
    Rbt.plot(sqtraj2(i,:))
    plot2(JTA2,'b')
end
% 绘制第3段轨迹线
for i=1:1:length(t)
    atj3=Rbt.fkine(sqtraj3(i,:));
    JTA3(i,:)=transl(atj3);
    jta3=JTA3;
    plot2(jta3(i,:),'r.')
    Rbt.plot(sqtraj3(i,:))
    plot2(JTA3,'b')
end
% 绘制第4段轨迹线
for i=1:1:length(t)
    atj4=Rbt.fkine(sqtraj4(i,:));
    JTA4(i,:)=transl(atj4);
    jta4=JTA4;
    plot2(jta4(i,:),'r.')
    Rbt.plot(sqtraj4(i,:))
    plot2(JTA4,'b')
end
% 绘制第5段轨迹线
for i=1:1:length(t)
    atj5=Rbt.fkine(sqtraj5(i,:));
    JTA5(i,:)=transl(atj5);
    jta5=JTA5;
    plot2(jta5(i,:),'r.')
    Rbt.plot(sqtraj5(i,:))
    plot2(JTA5,'b')
end
% 绘制第6段轨迹线
for i=1:1:length(t)
    atj6=Rbt.fkine(sqtraj6(i,:));
    JTA6(i,:)=transl(atj6);
    jta6=JTA6;
    plot2(jta6(i,:),'r.')
    Rbt.plot(sqtraj6(i,:))
    plot2(JTA6,'b')
end
% 绘制第7段轨迹线
 for i=1:1:length(t)
    atj7=Rbt.fkine(sqtraj7(i,:));
    JTA7(i,:)=transl(atj7);
    jta7=JTA7;
    plot2(jta7(i,:),'r.')
    Rbt.plot(sqtraj7(i,:))
    plot2(JTA7,'b')
end

2.
clear;
clc;
%建立机器人模型
%       theta    d        a        alpha     offset
L1=Link([0       0.4      0.025    pi/2      0     ]); %定义连杆的D-H参数
L2=Link([pi/2    0        0.56     0         0     ]);
L3=Link([0       0        0.035    pi/2      0     ]);
L4=Link([0       0.515    0        pi/2      0     ]);
L5=Link([pi      0        0        pi/2      0     ]);
L6=Link([0       0.08     0        0         0     ]);
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman
robot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态
robot.display();
teach(robot);

3.
T(1) = Link([0 0 10 0]);
T(2) = Link([0 0 5 0]);
T(3) = Link([0 0 0 0]);%原本是两轴机器人,但是为了显示末端,在加一个轴
T(1).qlim = [0 pi];
T(2).qlim = [-pi/2 pi];
ws = SerialLink(T,'name','ws');
n=1;
for i = 0:0.1:pi
    for j = -pi/2:0.1:pi    %遍历所有可能的角度
        %同一个机器人的多个图像不能同时显示,这里需要克隆多个名字不同的机器人
        clone = SerialLink(T,'name',strcat('clone',num2str(n)));    
        %在同一个窗口,绘制多个机器人
        clone.plot([i j 0],'workspace',[-16 16 -16 16 0 2],'view','top','noname','noshading','nowrist','noshadow','jointdiam',2,'linkcolor','g');
        n = n+1;
        hold on
    end
end

4.
链接:https://blog.csdn.net/qq_45779334/article/details/114873354?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161891059816780269877908%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161891059816780269877908&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-6-114873354.pc_search_result_hbase_insert&utm_term=robotics+toolbox%E6%9C%BA%E5%99%A8%E4%BA%BA%E3%80%81

clc;
clear;
% 定义各个连杆以及关节类型,默认为转动关节
%           theta      d        a        alpha
%               连杆偏距参数d 连杆长度参数 关节偏角参数alpha
L1=Link([     0        0        0          0], 'modified'); % [四个DH参数], options
L2=Link([    -pi/2   0.1925,   0.081     -pi/2], 'modified');
L3=Link([     0       0.4       0        -pi/2], 'modified');
L4=Link([     0      0.1685,    0        -pi/2], 'modified');
L5=Link([     0      0.4,       0         pi/2], 'modified');
L6=Link([     0      0.1363     0         pi/2], 'modified');
L7=Link([     0      0.13375    0        -pi/2], 'modified');

b=isrevolute(L1);
robot=SerialLink([L1,L2,L3,L4,L5,L6,L7],'name','FANUC'); % 将七个连杆组成机械臂
robot.name='modified sawyer';
robot.display(); % 展示出

init_ang=[0 0 0 0 0 0 0];
targ_ang=[pi/4,-pi/3,pi/5,pi/2,-pi/4,pi/2,pi/3];
step=200;
[q,qd,qdd]=jtraj(init_ang,targ_ang,step); %关节空间规划轨迹,得到机器人末端运动的[位置,速度,加速度]
T0=robot.fkine(init_ang); % 正运动学解算
Tf=robot.fkine(targ_ang);
subplot(2,4,3); i=1:7; plot(q(:,i)); title("位置"); grid on;
subplot(2,4,4); i=1:7; plot(qd(:,i)); title("速度"); grid on;
subplot(2,4,7); i=1:7; plot(qdd(:,i)); title("加速度"); grid on;

Tc=ctraj(T0,Tf,step);
Tjtraj=transl(Tc);
subplot(2,4,8); plot2(Tjtraj, 'r');
title('p1到p2直线轨迹'); grid on;
subplot(2,4,[1,2,5,6]);
plot3(Tjtraj(:,1),Tjtraj(:,2),Tjtraj(:,3),"b"); grid on;
hold on;
view(3); % 解决robot.teach()和plot的索引超出报错
qq=robot.ikine(Tc);
robot.plot(qq);

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值