一、两连杆机器人
1.Link
Link()是构建连杆的基本函数
建立连杆的基本规则是
L = Link(DH, OPTIONS)
DH = [THETA D A ALPHA SIGMA OFFSET]
THETA D A ALPHA 为基本的DH参数
theta 关节角度
d 连杆偏移量
a 连杆长度
alpha 连杆扭角
Sigma 可以设定连杆的类型 0为旋转 1为伸长
offset 关节变量偏移量
qlim 关节变量范围[min max]
Options:
‘standard’ for standard D&H parameters (default).
‘modified’ for modified D&H parameters.
‘revolute’ 旋转关节(default)
‘prismatic’ 伸长关节
建立一个旋转连杆
L = Link([0 1.2 0.3 pi/2]);或 L = Link([0 1.2 0.3 pi/2 0])
L = Link([0 1.2 0.3 pi/2],’revolute’)
L = Link( ‘d’, 1.2, ‘a’, 0.3, ‘alpha’, pi/2);
L = Link(‘revolute’, ‘d’, 1.2, ‘a’, 0.3, ‘alpha’, pi/2);
L = Revolute(‘d’, 1.2, ‘a’, 0.3, ‘alpha’, pi/2);
建立一个移动连杆
L = Link([0 1.2 0.3 pi/2 1])
L = Link([0 1.2 0.3 pi/2],’prismatic’)
L = Link( ‘theta’, 0, ‘a’, 0.3, ‘alpha’, pi/2);
L = Link(‘prismatic’, ’ theta’, 0, ‘a’, 0.3, ‘alpha’, pi/2);
L = prismatic(’ theta’, 0, ‘a’, 0.3, ‘alpha’, pi/2);
通过操作
L.theta;L.d;L.a;L. alpha 。。。。
可以显示,修改连杆的参数
操作函数:
%A 连杆变换矩阵
% RP 关节类型: ‘R’ 或 ‘P’
% friction 摩擦力
% nofriction 摩擦力忽略
% dyn 显示动力学参数
% islimit 测试关节是否超出软限制
% isrevolute 测试是否为旋转关节
% isprismatic 测试是否为移动关节
% display 连杆参数以表格形式显示
% char 转为字符串
L.A(X)可以显示连杆变换矩阵,但是需要补齐DH参数变量,X在旋转连杆中就是theta值,在伸长连杆中就是d的值。
L.RP 返回关节类型 返回R表示旋转关节,P为伸长关节
其他的用法类似。。。
2.SerialLink
使用SerialLink可以把连杆联系起来形成机械臂
(1)基本用法
R = SerialLink(R1, options) 复制机器人R1
R = SerialLink([L1 L2 …], OPTIONS) 机器人连接, 将L2的基座连接到L1的末端.
R = SerialLink(DH, OPTIONS),矩阵DH的构成:每个关节一行,每一行为[theta d a alpha](默认为旋转关节),第五列(sigma)为可选列,sigma=0(默认)为旋转关节,sigma=1为移动关节。
OPTIONS可以是:
‘name’、’comment’、’manufacturer’
‘base’、’tool’、’gravity’、’plotopt’
‘name’可以用于给机械臂命名
bot = SerialLink([L1 L2], 'name', 'my robot')
‘name’、’comment’、’manufacturer’的用法都差不多。用于标定一些额外信息
‘base’, ‘tool’,用于设定基坐标和工具坐标的原点
mdl_puma560
p560_2 = SerialLink(p560, 'base', transl(-0.5, 0.5, 0) )
具体实例如下:
3、R.plot(Q, options)可以显示出机械臂
当Q为1*N维向量,向量元素为各关节变量,显示的是静态的机械臂
Q为M*N矩阵,列向量元素为各关节变量,显示一个机械臂的动图
Options::
‘workspace’, W 为空间限制W = [xmn, xmx ymn ymx zmn zmx]
‘floorlevel’,L 底板在Z轴的显示位置
Eg:
>>mdl_puma560
>>p560.plot(q, 'floorlevel',0);
具体示例:
>> two_link.plot([0 0]);
4、运动学的求解函数
正运动学求解
Q = R.fkine(T)
逆运动学求解
T = R.ikine(Q, OPTIONS)
二、六轴机器人
(1)Puma560机器人已经作为标准的机器人模型加入到matlab的库中。
使用mdl_puma560命令,便可以创建一个名为p560的SerialLink对象。
>> mdl_puma560
>> p560
在mdl_puma560工作空间里还自动创建了一些关节坐标向量,代表了一些典型的机器人位形。
qz:(0,0,0,0,0,0) 零角度
qr:(0,pi/2,-pi/2,0,0,0) 就绪状态,机械臂伸直切垂直
qs:(0,0,-pi/2,0,0,0) 伸展状态,机械臂伸直且水平
qn:(0,pi/4,-pi,0,pi/4,0) 标准状态,机械臂处于一个灵巧工作状态。
求qz位置点进行正运动学计算:
>>p560.fkine(qr)
对qr姿态进行图形显示;
>>p560.plot(qr)
(2)一般来说,有8组不同的关节坐标值可以得到相同的末端执行器位姿。逆解是不唯一的。
如图所示,同一个空间位姿得到了两组不同的关节角度。证明了上述的问题。
两组空间位姿的仿真图如下:
(a)第一组为左手位形解
(b)第二组为右手位形解
ikine6s返回的运动学位形可以由一个或者多个字符来控制。
左手或者右手 ‘l’,‘r’
肘部在上或者肘部在下 ‘u’,‘d’
手腕翻转或不翻转 ‘f’,‘n’
三、冗余机器人
冗余机器人指的是多余6个关节的机器人。将上面的机器人加入到一个平台上
(1)利用机器人基座的D-H参数建立SerialLink
对象。
>>platform=SerialLink([0 0 0 -pi/2 1;-pi/2 0 0 pi/2 1],'base',troty(pi/2),'name','platform')
(2)引入前文中的机械臂模型,为了模拟机器人在底盘之上,对机器人的底座高度进行设置。
>>p560.links(1).d=30*0.0254
(3)将底盘与机械臂进行组合
>>p8=SerialLink([platform,p560])