本篇文章主要与大家分享一下如何使用MATLAB中的机器人工具箱建立机器人模型(机械臂),文章内容处于更新和补充中,(我同时安装了机器人工具箱9.10版本和10.4版本)
一、先来看一下本文要介绍的例子
1、本文以如下的比较简单的三轴机械臂模型为例(三轴的明白了,其他的也就会了),如下图所示该模型具有三个转动关节
2、利用机器人学中的相关知识,使用改进型DH法建立连杆坐标系如下:
3、根据上图写出其DH参数表如下:
二、在介绍如何使用机器人工具箱建立如上的机械臂模型前,我们需要先了解如下的两个我们需要用到的类函数 (本部分内容可根据自己的情况跳过)
1、Link类函数
Link类函数,基于DH法建模,建立其相关关系,DH法建模分改进型和标准型,Link类函数的一种用法是 R = Link([theta,d,a, alpha]),其中参数theta代表DH建模的关节角、参数d代表DH建模的连杆偏距、参数a代表DH建模的连杆长度、参数alpha代表DH建模的连杆转角。例如:L(1)=Link([1,2,3,4],‘modified’),其中modified表示用改进型DH法建模
①我们在命令行窗口输入上面的例子
L(1)=Link([1,2,3,4],'modified')
运行结果如下:
L =
theta=q, d= 2, a= 3, alpha= 4, offset= 0 (R,modDH)
②Link类函数中包含一些属性,我们可以用像调用c/c++语言里面的结构体成员类似的方法去调用它,如下所示:
R.RP:可以用来获取连杆关节类型,如下所示我们可以知道我们建立的L(1)是转动关节 (若为P则为移动关节)
L(1).RP
ans =
'R'
R. theta:可以用来获取连杆关节角:,如下所示我们可以知道我们建立的L(1)的关节角为 1
L(1).theta
ans =
1
R. d:可以用来获取连杆偏距:,如下所示我们可以知道我们建立的L(1)的连杆偏距为 2
L(1).d
ans =
2
R. a:可以用来获取连杆长度:,如下所示我们可以知道我们建立的L(1)的连杆长度为 3
L(1).a
ans =
3
R.alpha:可以用来获取连杆扭转角:,如下所示我们可以知道我们建立的L(1)的连杆扭转角为 4
L(1).alpha
ans =
4
R.sigma:也可以用来查询我们建立的是转动关节还是移动关节,默认0是转动关节; 1是移动关节,如下所示我们可以知道我们建立的L(1)为转动关节
L(1).sigma
ans =
0
R.mdh:可以用来查询我们是按照标准DH法建立的还是按改进型DH法建立的模型,默认0为标准D.H法,1为改进D-H法,如下所示我们可以知道我们是按照改进型DH法建立的L(1)
L(1).mdh
ans =
1
2、Seriallink类函数
Seriallink类函数可以把我们使用Link函数建立的连杆连成一个整体,生成一个串联机械臂,比如下面这个例子,我们已经使用Link函数建立好了L (1) ~ L(6)这六个关节模型,然后我们只需要使用Six_Link=SerialLink ([L(1),L(2),L(3),L(4),L(5),L(6)]);就可以将其连成一个整体生成一个六周的串联机械臂,并取名为Six_Link(名字可以任意取)
L(1)=Link([0,0,0,0],'modified');
L(2)=Link([1.25,pi/2,0,pi/2],'modified');
L(3)=Link([10.5,0,0,pi/2],'modified');
L(4)=Link([0,pi/2,13,-pi],'modified');
L(5)=Link([0,pi/2,0,-pi],'modified');
L(6)=Link([0,pi/2,10,-pi],'modified');
Six_Link=SerialLink ([L(1),L(2),L(3),L(4),L(5),L(6)]);
在命令行窗口输入 help Seriallink 会发现Seriallink类函数有很多可以设置的参数,在这里只针对一小部分进行介绍
①只读参数:关节自由度n 、机械臂配置字符串config、DH约定形式布尔值mdh 、DH参数 theta、d、a、 alpha
Properties (read only)::
n number of joints
config joint configuration string, eg. 'RRRRRR'
mdh kinematic convention boolean (0=DH, 1=MDH)
theta kinematic: joint angles (1xN)
d kinematic: link offsets (1xN)
a kinematic: link lengths (1xN)
alpha kinematic: link twists (1xN)
他们的使用方法很简单,比如我们已经按上面建立好了一个机械臂模型Six_Link,要查看当前关节的自由度,只需要使用Six_Link.n就可以了,如下所示:
要查看当前各个关节的类型,只需要使用Six_Link.config就可以了,如下所示,可以知道我们建立的六轴机械臂各个关节均为转动关节
以此类推…
②可读可写参数:连杆对象的矢量links 、重力方向gravity 、机器人基座的姿态base 、 机器人工具坐标系转换 tool 、关节极限qlim 、运动关节坐标偏移 offset、机器人的名称(用于图形显示)name 、 注释manuf和comment 、plot()方法的选项(单元格数组)plotopt 、使用MEX版本的RNE(只有当mex文件存在时才能设置为true。默认为true)fast
Properties (read/write)::
links vector of Link objects (1xN)
gravity direction of gravity [gx gy gz]
base pose of robot's base (4x4 homog xform)
tool robot's tool transform, T6 to tool tip (4x4 homog xform)
qlim joint limits, [qmin qmax] (Nx2)
offset kinematic joint coordinate offsets (Nx1)
name name of robot, used for graphical display
manuf annotation, manufacturer's name
comment annotation, general comment
plotopt options for plot() method (cell array)
fast use MEX version of RNE. Can only be set true if the mex
file exists. Default is true.
比如要查看当前各个关节连杆情况,只需要使用Six_Link.links就可以了,如下所示:
比如要查看当前机器人基座的姿态,只需要使用Six_Link.base就可以了,如下所示:
以此类推…
③Seriallink类函数中的一些方法或者函数,本部分不做详细介绍,有兴趣的可自行研究,比如显示机器人的图形表示的plot(在文章第三部分会进行介绍) 、 显示机器人的三维图形模型plot3d (只能用于标准DH建模)、 teach(在文章第三部分会进行介绍)、 关节空间轨迹jtraj 等
SerialLink Serial-link robot class
A concrete class that represents a serial-link arm-type robot. The
mechanism is described using Denavit-Hartenberg parameters, one set
per joint.
Methods::
plot display graphical representation of robot
plot3d display 3D graphical model of robot
teach drive the graphical robot
getpos get position of graphical robot
-
jtraj a joint space trajectory
-
edit display and edit kinematic and dynamic parameters
-
isspherical test if robot has spherical wrist
islimit test if robot at joint limit
isconfig test robot joint configuration
-
fkine forward kinematics
A link transforms
trchain forward kinematics as a chain of elementary transforms
-
ikine6s inverse kinematics for 6-axis spherical wrist revolute robot
ikine inverse kinematics using iterative numerical method
ikunc inverse kinematics using optimisation
ikcon inverse kinematics using optimisation with joint limits
ikine_sym analytic inverse kinematics obtained symbolically
-
jacob0 Jacobian matrix in world frame
jacobn Jacobian matrix in tool frame
jacob_dot Jacobian derivative
maniplty manipulability
vellipse display velocity ellipsoid
fellipse display force ellipsoid
qmincon null space motion to centre joints between limits
-
accel joint acceleration
coriolis Coriolis joint force
dyn show dynamic properties of links
friction friction force
gravload gravity joint force
inertia joint inertia matrix
cinertia Cartesian inertia matrix
nofriction set friction parameters to zero
rne inverse dynamics
fdyn forward dynamics
-
payload add a payload in end-effector frame
perturb randomly perturb link dynamic parameters
gravjac gravity load and Jacobian
paycap payload capacity
pay payload effect
-
sym a symbolic version of the object
gencoords symbolic generalized coordinates
genforces symbolic generalized forces
issym test if object is symbolic
三、在了解了以上两个类函数后,我们就可以利用这两个类函数创建如上的机械臂模型了
1、进行参数的设定,如图所示,我们需要设定的参数有a0、a1、d、θ1、θ2、θ3 在这些参数中a0、a1、d是机器臂的结构参数,在机械臂运动中是不变的,大家可以按照自己的需要自主设定,在这里我取a0=10, a1=20,d=30; 参数θ1、θ2、θ3 是这个机械臂模型的关节变量,随着机械臂运动中它们也发生变化,如图所示他们的初始值均为0
本部分的matlab程序如下:
%参数的设定
a0=10;
a1=20;
d=30;
Theta1=0;
Theta2=0;
Theta3=0;
2、根据我们已经写好的DH参数表,使用上文介绍的Link类函数,来建立各个各个关节模型,在上文中已经介绍过了,Link类函数的一种用法是 R = Link([theta,d,a, alpha]),其中参数theta代表DH建模的关节角也就是对应下表中的第四列(θi列)、参数d代表DH建模的连杆偏距也就是对应下表中的第三列、参数a代表DH建模的连杆长度也就是对应下表中的第一列、参数alpha代表DH建模的连杆转角也就是对应下表中的第二列,我们将这三个关节分别取名为L(1)、L(2)、L(3)
本部分的matlab程序如下:
%使用Link类函数,基于DH法建模(改进型)
L(1)=Link([0,a0,0,0],'modified');
L(2)=Link([0,d,0,-pi/2],'modified');
L(3)=Link([0,a1,0,pi/2],'modified');
3、使用Seriallink类函数把我们上面使用Link函数建立的连杆连成一个整体,生成一个串联机械臂模型,把这个机械臂模型取名为Three_Link
本部分的matlab程序如下:
%使用Seriallink类函数把我们上面使用Link函数建立的连杆连成一个整体,生成一个串联机械臂模型
Three_Link=SerialLink ([L(1),L(2),L(3)]);
4、建立完成后,我们可以使用.display显示出我们建立的这个机械臂模型的信息,如下所示:
本部分的matlab程序如下:
%使用.display显示出我们建立的这个机械臂模型的信息
Three_Link.display
5、我们使用.teach查看我们建立机械臂三维模型,在figure的左侧的上方显示的XYZ是机械臂末端相对于基坐标系的位置,RPY显示的是末端坐标系相对于定点坐标系的姿态(RPY角),在figure的左侧的下方显示关节变量的值,我们可以对关节变量的值进行修改,并查看随着关节变量值的改变,机械臂的位姿的变化,如下所示:
本部分的matlab程序如下:
%使用.teach查看我们建立机械臂三维模型,可以对关节变量的值进行修改
Three_Link.teach
6、除了使用.teach查看我们建立机械臂三维模型,我们也可以使用.plot来查看在指定某组关节变量的机械臂三维模型,在使用.plot时,需要指定各关节变量的值,如下所示为各关节变量均为0时的位姿:
本部分的matlab程序如下:
%使用.plot绘制出某组关节变量的机械臂三维模型
Three_Link.plot([0,0,0])
7、本文介绍的例子的完整代码:
%参数的设定
a0=10;
a1=20;
d=30;
Theta1=0;
Theta2=0;
Theta3=0;
%使用Link类函数,基于DH法建模(改进型)
L(1)=Link([0,a0,0,0],'modified');
L(2)=Link([0,d,0,-pi/2],'modified');
L(3)=Link([0,a1,0,pi/2],'modified');
%使用Seriallink类函数把我们上面使用Link函数建立的连杆连成一个整体,生成一个串联机械臂模型
Three_Link=SerialLink ([L(1),L(2),L(3)]);
%使用.plot绘制出某组关节变量的机械臂三维模型
% Three_Link.plot([0,0,0])
%使用.display显示出我们建立的这个机械臂模型的信息
Three_Link.display
%使用.teach查看我们建立机械臂三维模型,可以对关节变量的值进行修改
Three_Link.teach