在现在工业制造中机械臂或多关节机器人是很常见的设备,为了让大家能够更好的了解机械臂的运动特性,笔者愿意分享一些自己在matlab中操作机械臂的经验。这篇文章中,我们将会看到在matlab中两种画出机械臂frame的方式。
方法一:使用plot3绘图
操作流程:
- 给出各个关节的旋转矩阵的初始角度,给出各个操作臂的长度,设置base的坐标。
- 给出所有旋转矩阵
- 给出在各自坐标系下的方向向量
- 将所有的方向向量向基坐标系下转换
- 将转换后的各个位置坐标存入数组内并绘制在基座标系下的图像
代码:
clear
clc
close all
%initial condition
a=pi/4;
b=pi/4;
c=pi/4;
d=pi/4;
f=pi/4;
% rotation matrix
R01=[ cos(a) -sin(a) 0; sin(a) cos(a) 0; 0 0 1];
R12=[ cos(b) 0 sin(b); 0 1 0;-sin(b) 0 cos(b)];
R23=[ cos(c) 0 sin(c);0 1 0;-sin(c) 0 cos(c)];
R34=[ cos(d) 0 sin(d);0 1 0; -sin(d) 0 cos(d)];
R45=[ cos(f) -sin(f) 0;sin(f) cos(f) 0;0 0 1];
%arm lengths
L1=3;
L2=3;
L3=3;
L4=3;
L5=3;
L6=3;
O_0=[0;0;0];
%links
r_OA_0 = [0;0;L1];
r_AB_1 = [0;0;L2];
r_BC_2 = [0;0;L3];
r_CD_3 = [0;0;L4];
r_DE_4 = [0;0;L5];
r_EF_5 = [0;0;L6];
%in Frame 0
r_OB_0 = r_OA_0 + R01*r_AB_1;
r_OC_0 = r_OB_0 + R01*R12*r_BC_2;
r_OD_0 = r_OC_0 + R01*R12*R23*r_CD_3;
r_OE_0 = r_OD_0 + R01*R12*R23*R34*r_DE_4;
r_OF_0 = r_OE_0 + R01*R12*R23*R34*R45*r_EF_5;
%store as lines
Link1 = [O_0 r_OA_0];
Link2 = [r_OA_0, r_OB_0];
Link3 = [r_OB_0, r_OC_0];
Link4 = [r_OC_0, r_OD_0];
Link5 = [r_OD_0, r_OE_0];
Link6 = [r_OE_0, r_OF_0];
%Plot
hold on
grid on
view(45, 30);
axis square;
plot3(Link1(1,:), Link1(2,:), Link1(3,:), 'LineWidth', 3, 'color', 'r');
plot3(Link2(1,:), Link2(2,:), Link2(3,:), 'LineWidth', 3, 'color', 'b');
plot3(Link3(1,:), Link3(2,:), Link3(3,:), 'LineWidth', 3, 'color', 'r');
plot3(Link4(1,:), Link4(2,:), Link4(3,:), 'LineWidth', 3, 'color', 'b');
plot3(Link5(1,:), Link5(2,:), Link5(3,:), 'LineWidth', 3, 'color', 'r');
plot3(Link6(1,:), Link6(2,:), Link6(3,:), 'LineWidth', 3, 'color', 'b');
运行结果如下
方法二:使用robotics toolbox
首先要安装robotics toolbox, 安装方式很简单只需登陆网址
Robotics toolbox官网
下载zip文件,解压缩后存入Matlab安装目录下的toolbox中即可,然后打开matlab选择添加路径setpath找到你刚才复制的文件夹选择add path,最后在matlab命令框中输入startup_rvc即可。
然后我们就可以用代码来创造一个机械臂了:
clear;
clc;
%
SL1=Link([0 0 0.180 -pi/2 0 ],'standard');
SL2=Link([0 0 0.600 0 0 ],'standard');
SL3=Link([0 0 0.130 -pi/2 0 ],'standard');
SL4=Link([0 0.630 0 pi/2 0 ],'standard');
SL5=Link([0 0 0 -pi/2 0 ],'standard');
SL6=Link([0 0.1075 0 0 0 ],'standard');
starobot=SerialLink([SL1 SL2 SL3 SL4 SL5 SL6],'name','Xin-Robot');
figure(1),teach(starobot);
运行结果如下