模型选用的是类似长得与UR5机械臂样子的GLUON_6L3机械臂,如下图
下面的程序是基于matlab2020b版本编写,机器人工具箱9.10。不一定要求你们的版本与我的一样,只是有的太低版本可能运行不了,再此说明一下。
pc配置:AMD5800 16G RTX3060 运行需要大概3分钟左右。如果你的电脑运行一直定住等等就行,不知道为什么运行这么慢。换成米制的时候,运行会很快。
clear;clc;close all;
% DH建模部分theta、 d、 a、 alpha
L(1)=Link([ 0, 1015, 0, 0],‘modified’);
L(2)=Link([ 0, 79.2, 0, -pi/2],‘modified’);
L(3)=Link([ 0, -79.2, 173, 0],‘modified’);
L(4)=Link([ 0, 79.2, 173, 0],‘modified’);
L(5)=Link([ 0, 79.2, 0, pi/2],‘modified’);
L(6)=Link([ 0, 41.7, 0, -pi/2],‘modified’);
L(2).offset=-pi/2; %设定关节变量偏移量
L(4).offset=pi/2;
robot= SerialLink(L, ‘name’, ‘GLUON_6L3’); %建立机械臂模型
figure(1)
robot.plot([0 0 0 0 0 0]) %显示建立的机器人模型
robot.teach %可以进行施教
robot.display %打印出机器人模型的信息
%调整坐标轴及视野
set(gca,‘XLim’,[-600,600]); %将X轴范围设定为[-400,400]
set(gca,‘YLim’,[-600,600]); %将X轴范围设定为[-500,500]
set(gca,‘ZLim’,[0,600]); %将Z轴范围设定为[0,600],最小值设定为0,可以消除模型下面的长杆
set(gca,‘XDir’,‘reverse’); %将x轴方向设置为反向
set(gca,‘YDir’,‘reverse’); %将Y轴方向设置为反向
set(gca,‘View’,[-85,10]); %设定视野方向角和俯仰角
%设定关节变量范围,deg2rad()角度转弧度
L(1).qlim=[deg2rad(-140) deg2rad(140)];
L(2).qlim=[deg2rad(-90) deg2rad(90)];
L(3).qlim=[deg2rad(-140) deg2rad(140)];
L(4).qlim=[deg2rad(-140) deg2rad(140)];
L(5).qlim=[deg2rad(-140) deg2rad(140)];
L(6).qlim=[deg2rad(-360) deg2rad(360)];
%轨迹规划参数设置
init_ang = [0,0,0,0,0,0]; %起始角度
targ_ang = [pi/3,pi/3,pi/4,pi/6,-pi/4,pi/6]; %停止角度
T =(0:0.1:6); %整个过程6秒,步长0.1秒
%5次多项式关节空间轨迹规划函数jtraj()
[q,qd,qdd] = jtraj(init_ang,targ_ang,T); %直接得到角度、角速度、角加速度的的序列
figure(2);
title(‘规划过程’);
Txy=robot.fkine(q); %正运动学
henji=transl(Txy);
x = henji(:,1);y = henji(:,2);z = henji(:,3);
plot3(x,y,z,‘b’); %绘制轨迹图像
hold on;
robot.plot(q); % 轨迹痕迹显示
figure(3);
TT=robot.fkine(q); %正运动学
guiji=transl(TT);
x = guiji(:,1);y = guiji(:,2);z = guiji(:,3);
plot3(x,y,z,‘r’); %轨迹图像绘制
xlabel(‘X/mm’),ylabel(‘Y/mm’),zlabel(‘Z/mm’);
hold on
title(‘空间轨迹’);
text(guiji(1,1),guiji(1,2),guiji(1,3),‘A点’);
text(guiji(61,1),guiji(61,2),guiji(61,3),‘B点’); %0.1步长,6秒仿真时间
%画关节位置、速度、加速度曲线,三个绘制在一幅图中,每个里面包含6个关节
figure(4)
subplot(3,1,1);
plot(T,q);title(‘关节位移’);xlabel(‘时间t/s’);ylabel(‘位移s/rad’);
legend(‘关节1’,‘关节2’,‘关节3’,‘关节4’,‘关节5’,‘关节6’,‘location’,‘northeastoutside’ );grid on;
subplot(3,1,2);
plot(T,qd);title(‘关节速度’);xlabel(‘时间t/s’);ylabel(‘速度v/(rad/s)’);
legend(‘关节1’,‘关节2’,‘关节3’,‘关节4’,‘关节5’,‘关节6’,‘location’,‘northeastoutside’ );grid on;
subplot(3,1,3);
plot(T,qdd);title(‘关节加速度’);xlabel(‘时间t/s’);ylabel(‘加速度a/(rad/s^2)’);
legend(‘关节1’,‘关节2’,‘关节3’,‘关节4’,‘关节5’,‘关节6’,‘location’,‘northeastoutside’ );grid on;
运行结果如下:
关节角度均为0时,即A点
B点(pi/3,pi/3,pi/4,pi/6,-pi/4,pi/6)
换成米制单位,就很快。这么耗费电脑计算量毫米
米制单位
clear;clc;close all;
% DH建模部分theta、 d、 a、 alpha
L(1)=Link([ 0, 0.1015, 0, 0],‘modified’);
L(2)=Link([ 0, 0.0792, 0, -pi/2],‘modified’);
L(3)=Link([ 0, -0.0792, 0.173, 0],‘modified’);
L(4)=Link([ 0, 0.0792, 0.173, 0],‘modified’);
L(5)=Link([ 0, 0.0792, 0, pi/2],‘modified’);
L(6)=Link([ 0, 0.0417, 0, -pi/2],‘modified’);
L(2).offset=-pi/2; %设定关节变量偏移量
L(4).offset=pi/2;
robot= SerialLink(L, ‘name’, ‘GLUON_6L3’); %建立机械臂模型
figure(1)
% robot.plot([pi/3 pi/3 pi/4 pi/6 -pi/4 pi/6]) %显示建立的机器人模型
robot.plot([0 0 0 0 0 0])
robot.teach %可以进行施教
robot.display %打印出机器人模型的信息
%调整坐标轴及视野
set(gca,‘XLim’,[-0.6,0.6]); %将X轴范围设定为[-400,400]
set(gca,‘YLim’,[-0.6,0.6]); %将X轴范围设定为[-500,500]
set(gca,‘ZLim’,[0,0.6]); %将Z轴范围设定为[0,600],最小值设定为0,可以消除模型下面的长杆
set(gca,‘XDir’,‘reverse’); %将x轴方向设置为反向
set(gca,‘YDir’,‘reverse’); %将Y轴方向设置为反向
set(gca,‘View’,[-85,10]); %设定视野方向角和俯仰角
注:个人学习,程序仅供参考。感谢CSDN博主慕羽的机械臂模型及机械臂建模程序部分。