最近在做学校的大作业需要用到Robotics Toolbox 在Matlab中建模多自由度机械手臂,遂作此记录。

 

这里用的Robotics toolbox是由 Peter Corke 研发的,区别于Matlab 自带的Robotics System Toolbox. 相关的文档可以在官方网站找到,用户手册介绍了一些刚工具箱里面的指令。

 

对机械手臂进行建模之前需要明确DH table, 我这里由于机械手臂原型的限制,只能有Distal (standard) 的方法去分析。我的DH table是我自己先分析出来再填入程序里面的(好像也只有这样,狗头.jpg)。

用python实现两自由度机械臂运动学逆解 二自由度机械臂建模_bc

该机械手臂一共是5个自由度。下面把DH table 里的数据学到程序里面去。

首先介绍几个需要用到的类(class):

Link: A Link object holds all information related to a robot joint and link such as kinematics, parameters, rigid-body inertial parameters, motor and transmission parameters. Link这个类是我们这里用来定义DH table的每一行的,他有很多参数:

用python实现两自由度机械臂运动学逆解 二自由度机械臂建模_建模_02

L = Link(dh, options)  这个是用来定义每一个DH 参数的,dh的书写是按照[THETA D A ALPHA SIGMA OFFSET ]的顺序。其中SIGMA 是定义joint的类型的,SIGMA=0 是旋转关节(Revolute joint),默认值为0即旋转关节;SIGMA=1定义的是滑动关节(Prismatic joint)。OFFSET定义的是关节参数之间的移动,默认值为零。如果不写入这两个参数的话都是默认值。由于是转动关节,所以转动量THETA是一个变量,所以还需要用qlim 指令去限制转动范围。

SerialLink(Links, options): is a robot object defined by a vector of Links class objects which includes the subclasses Revolute, Prismatic, RevoluteMDH or PrismaticMDH. 这个类是使用我们上面定义的Link 类也就是DH table 的每一行的参数去建模机械手臂。

这里会用到的另一个方法是 SerialLink类的一个方法 teach: Drive the graphical robot. 这个可以让你在画图窗口中随时调整每个角度的大小,然后观看手臂的姿态变化,个人认为这对于理解手臂的范围很有帮助。

下面是我自己的代码:

% Please install Robotics Toolbox in advance
% Define DH table using Old syntax
%           THETA  D   A   ALPHA
L(1) = Link([0   0   0   pi/2]);  
L(2) = Link([0   0 12.07  0]);   
L(3) = Link([0   0 12.7   0]);  
L(4) = Link([0   0  0   -pi/2]); 
L(5) = Link([0 8.57 0     0]);  

% The limitation of each joint.
L(1).qlim=[0,pi];
L(2).qlim=[0,pi];
L(3).qlim=[0,pi];
L(4).qlim=[0,pi];
L(5).qlim=[0,pi];

% Represent the serial-link arm-type robot.
myrobot = SerialLink(L,'name','myrobot'); 

% Change the angle of each joint.
teach(myrobot);

下面是运行结果:

用python实现两自由度机械臂运动学逆解 二自由度机械臂建模_建模_03

这里提醒一下大家要想正确的填写DH table,建立对的坐标系很重要,坐标系错了,参数也就错了。如果大家对机器人学感兴趣的话,推荐大家去听一下台湾大学林沛群的课程(机器人学),个人感觉讲得很清楚。B站或者Coursera都有。

再次感叹一下强大的Robotics Toolbox,真的很好用。

第一次记录,欢迎交流!