⼯业机器⼈(4)--MatlabRobotToolbox运动学正、逆解【Matlab Robotics Toolbox】robotics toolbox学习及使⽤记录,⽅便⾃⼰后⾯复习、改进。
基于Matlab R2019b 9.5; Peter Corke的Robotics Toolbox 10.3.1
⽬录
0. 前⾔
在初学机器⼈学的时候,⾯对⼤量的概念和复杂的公式,往往不知道从何开始⼊⼿。⼀味的啃机器⼈学的概念和公式枯燥⼜⽆味,坚持不了⼏天就从⼊门到放弃⼀条龙⾛完了。坚持下去的动⼒之⼀就是能尽快看到⾃⼰的学习成果,⽽MATLAB机器⼈⼯具箱就是⾮常简单的机器⼈平台快速搭建⼯具。
本⽂主要介绍如何使⽤matlab⼯具箱建⽴机器⼈模型,并对其进⾏绘制。这⾥使⽤的RTB⼯具箱10.3版本,不同版本间代码风格可能会有差异,因此请注意⼯具箱的使⽤版本。
Robot toolbox- rtbdemo
rtbdemo是⼯具箱⾃带的⼀个历程脚本,在命令⾏窗⼝输⼊:
rtbdemo
RTB GUI界⾯:
如字⾯意思,左边⼀列是通⽤函数的例⼦(如:旋转,平移,轨迹等);中间主要是机械臂的基础函数,右边为移动机器⼈的⼀些历程。这些功能都写的很清楚了,都可以随便点点看,会很有意思。
本博客主要专注于机械臂的搭建和使⽤,因此会对前两列的函数进⾏展开介绍。
1. 依据D-H参数建⽴机器⼈模型
标准D-H参数⽰意图
以经典的4轴机械臂Scara为例(因为既有转动关节⼜有移动关节),介绍⼀下机械臂建⽴的步骤,⾸先上代码:
clear ; clc; close all;
% 机器⼈各连杆DH参数
% Scara机械臂连杆偏距参数d
d1 = 200;
d2 = 86;
d3 = -92;
% 由于关节4为移动关节,故d4为变量,theta4为常量
theta4 = 0;
% Scara机械臂连杆长度参数a
a1 = 400;
a2 = 250;
a3 = 0;
a4 = 0;
% Scara机械臂关节偏⾓参数alpha
alpha1 = 0 / 180 * pi;
alpha2 = 0 / 180 * pi;
alpha3 = 180 / 180 * pi;
alpha4 = 0 / 180 * pi;
% 定义各个连杆以及关节类型,默认为转动关节
% theta d a alpha
L(1)=Link([ 0 d1 a1 alpha1]); L(1).qlim=[-pi,pi];
L(2)=Link([ 0 d2 a2 alpha2]); L(2).qlim=[-pi,pi]; L(2).offset=pi/2;
L(3)=Link([ 0 d3 a3 alpha3]); L(3).qlim=[-pi,pi];
% 移动关节需要特别指定关节类型--jointtype
L(4)=Link([theta4 0 a4 alpha4]); L(4).qlim=[0,180]; L(4).jointtype='P';
% 把上述连杆“串起来”
Scara=SerialLink(L,'name','Scara');
Scara.display(); % 显⽰Scara机器⼈关节数以及D_H参数列表
% Scara:: 4 axis, RRRP, stdDH, slowRNE
% 定义机器⼈基坐标和⼯具坐标的变换
Scara.base = transl(0 ,0 ,305);
% 运动学正解
pose_0=[pi/4,-pi/3,pi/2,100];
T=Scara.fkine(pose_0);
hain;
% 运动学逆解
% 当反解的机器⼈对象的⾃由度少于6时,要⽤mask vector进⾏忽略某个关节⾃由度% mask_vector = [1,1,1,0,0,1];
axi_val = Scara.ikine(T,'mask',mask_vector,'pinv');
% We can help the solution along by using the 'pinv' option
% 雅可⽐矩阵
% j0=robot.jacob0(pose_0);
命令⾏显⽰Scara机器⼈信息和D-H参数表:
tool工具箱GUI显⽰机器⼈模型
2. 代码解释
单个Link的解释
% theta d a alpha
L(1)=Link([ 0 d1 a1 alpha1]); L(1).qlim=[-pi,pi];
L(2)=Link([ 0 d2 a2 alpha2]); L(2).qlim=[-pi,pi]; L(2).offset=pi/2;
L(3)=Link([ 0 d3 a3 alpha3]); L(3).qlim=[-pi,pi];
% 移动关节需要特别指定关节类型--jointtype
L(4)=Link([theta4 0 a4 alpha4]); L(4).qlim=[0,180]; L(4).jointtype='P';
Link函数是根据DH参数建⽴连杆,其中包含了关节的信息,DH的输⼊顺序见代码;
qlim指定关节极限,注意,⼯具箱中的移动关节变量不允许有负值;
jointtype指定关节类型,默认为转动关节,L(4).jointtype='P’意味着第四根link是由移动关节连接的;
offset为关节初始值的偏置。这⾥要注意的是,定义好关节类型后,相应的变量必须为0,初值必须由offset定义,例如,关节2为转动关节,那么L(2)的theta必须为0,但是我们⼜希望初始状态下关节2能有⼀个偏置,那么就通过 L(2).offset=pi/2;来实现。
另外这⾥还有⼀个常⽤的基于改进的DH建⽴模型的⽅法,程序中没有说明,格式为:
L(1)=Link([0 d1 a1 alpha1], 'modified');
建⽴机器⼈整体的解释
Scara=SerialLink(L,'name','Scara');
L为刚刚建⽴好的四根link,‘name’为可选项,可以不加,就是给机器⼈取个名字,看它⾻骼惊奇,这⾥就叫它‘Scara’啦。同样的,SerialLink函数还有其他的可选则项在此不⼀⼀介绍,欲了解则:
help SerialLink
这条语句就建⽴了⼀个叫Scara的机器⼈类型的对象,下⾯就可以对他操作了。
% 定义机器⼈基坐标和⼯具坐标的变换
Scara.base = transl(0 ,0 ,305);
具体含义为,把我们的Scara基部沿着z轴平移305mm,⼯具坐标系则以最后⼀个坐标为基础,沿z⽅向平移100mm.
transl函数涉及到⼯具箱中对旋转、平移以及齐次坐标的变换,可参考
字⾯意思,对机器⼈进⾏⽰教。
运动学正解
% 运动学正解
pose_0=[pi/4,-pi/3,pi/2,100];
T=Scara.fkine(pose_0);
hain;
绘图
joint(: , 1) = linspace(-pi/8,pi,200);
joint(: , 2) = linspace(-pi,pi/4,200);
joint(: , 3) = linspace(pi/3,-pi/2,200);
joint(: , 4) = linspace(0,360,200);
Scara.plot(joint ,'jointdiam',1,'fps',100,'trail','r-')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论