Robotic Toolbox v9.8 for MATLAB 使用笔记

2016-3-26 二赛君 学习笔记

    点击查看原图


Matlab_Robotic_Toolbox_v9.8是一个功能强大的机器人工具箱,包含了机器人正、逆向运动学,正、逆向动力学,轨迹规划等等,其中的可视化仿真使得学习抽象的机器人学变得相对直观、好理解。学习这个工具箱,对理解机器人学很有帮助。机器人工具箱Robotics Toolbox v9 与以前的版本有在函数上有稍微的区别。

  •     安装教程:

工具包下载:rvctools.zip

英文教程:[emuch.net]robot.pdf

  1.      工具箱的安装:解压后,放在toolbox文件 夹里

  2.          利用matlab的工具栏的setpath,将文件夹Matlab_Robotic_Toolbox_v9.8\rvctools设置为 matlab的搜索目录(打开matlab,点击file-》setpath-》add with subfolder,然后选择这个robot文件夹就好了,然后save-》close)

  3.         在command window输入“startup_rvc”,安装工具箱。最后,你可以在command window输入“ver”,查看机器人工具箱是否已经安装成功了。command window会列出所有的工具箱,其中Robotics Toolbox已经包含在里面。
  • 具体使用:

Arm/Robots

机器人是由多个连杆连接而成的,机器人关节分为旋转关节和移动关节。创建机器人的两个最重要的函数是:LinkSerialLink

1Link

一个Link包含了机器人的运动学参数、动力学参数、刚体惯性矩参数、电机和传动参数。

操作函数:

%A               连杆变换矩阵
%  RP            关节类型: 'R' 或 'P'
%  friction      摩擦力
%  nofriction    摩擦力忽略
%  dyn           显示动力学参数
%  islimit       测试关节是否超出软限制
%  isrevolute    测试是否为旋转关节
%  isprismatic   测试是否为移动关节
%  display       连杆参数以表格形式显示
%  char          转为字符串

运动学参数:

%  theta    关节角度

%  d        连杆偏移量

%  a        连杆长度

%  alpha    连杆扭角

%  sigma    旋转关节为0,移动关节为1

%  mdh      标准的D&H0,否则为1

%  offset   关节变量偏移量

%  qlim     关节变量范围[min max]

动力学参数:

%  m        连杆质量
%  r        连杆相对于坐标系的质心位置3x1
%  I        连杆的惯性矩阵(关于连杆重心)3x3
%  B        粘性摩擦力(对于电机)1x1或2x1
%  Tc       库仑摩擦力1x1或2x1 

电机和传动参数:

%  G        齿轮传动比
%  Jm       电机惯性矩(对于电机) 

2SerialLink

操作函数:

%  plot          以图形形式显示机器人
%  teach         驱动机器人
%  isspherical   测试机器人是否有球腕关节
%  islimit       测试机器人是否抵达关节极限
%  fkine         前向运动学求解
%  ikine6s       6旋转轴球腕关节机器人的逆向运动学求解
%  ikine3        3旋转轴机器人的逆向运动学求解
%  ikine         采用迭代方法的逆向运动学求解
%  jacob0        在世界坐标系描述的雅克比矩阵
%  jacobn        在工具坐标系描述的雅克比矩阵
%  maniplty      可操纵性度
%  jtraj         关节空间轨迹
%  accel         关节加速度
%  coriolis      关节柯氏力
%  dyn           显示连杆的动力学属性
%  fdyn          关节运动
%  friction      摩擦力
%  gravload      关节重力
%  inertia       关节惯性矩阵
%  nofriction    设置摩擦力为0
%  rne           关节的力/力矩
%  payload       在末端坐标系增加负载
%  perturb       随机扰动连杆的动力学参数

属性:

%  links      连杆向量(1xN)
%  gravity    重力的方向[gx gy gz]
%  base       机器人基座的位姿(4x4)
%  tool       机器人的工具变换矩阵[ T6 to tool tip] (4x4)
%  qlim       关节范围[qmin qmax] (Nx2)
%  offset     偏置(Nx1)
%  name       机器人名字(在图形中显示)
%  manuf      注释, 制造商名
%  comment    注释, 总评
%  plotopt    options for plot() method (cell array)
%  n           关节数
%  config      机器人结构字符串, 例如 'RRRRRR'
%  mdh         运动学中约定的布尔数 (0=DH, 1=MDH)  
  • 怎样创建一个机器人?

 

  %Link调用格式:

             1 L = Link() 创建一个带默认参数的连杆

             2L = Link(L1)复制连杆L1

             3L = Link(OPTIONS) 创建一个指定运动学、动力学参数的连杆

                                    Link ([theta d a alpha]) 注意顺序

            OPTIONS可以是:

            % 'theta',TH   joint angle, if not specified joint is revolute

            % 'd',D        joint extension, if not specified joint is prismatic

            % 'a',A        joint offset (default 0)

            % 'alpha',A    joint twist (default 0)

            % 'standard'   defined using standard D&H parameters (default).

            % 'modified'   defined using modified D&H parameters.

            % 'offset',O   joint variable offset (default 0)

            % 'qlim',L     joint limit (default [])

            % 'I',I        link inertia matrix (3x1, 6x1 or 3x3)

            % 'r',R        link centre of gravity (3x1)

            % 'm',M        link mass (1x1)

            % 'G',G        motor gear ratio (default 0)

            % 'B',B        joint friction, motor referenced (default 0)

            % 'Jm',J       motor inertia, motor referenced (default 0)

            % 'Tc',T       Coulomb friction, motor referenced (1x1 or 2x1), (default [0 0])

            % 'revolute'   for a revolute joint (default)

            % 'prismatic'  for a prismatic joint 'p'

            % 'standard'   for standard D&H parameters (default).

            % 'modified'   for modified D&H parameters.

            % 'sym'        consider all parameter values as symbolic not numeric

            注:不能同时指定“theta”和“d

               连杆的惯性矩阵(3x3)是对称矩阵,可以写成3x3矩阵,也可以是[Ixx Iyy Izz Ixy Iyz Ixz]

               所有摩擦均针对电机而不是负载

               齿轮传动比只用于传递电机的摩擦力和惯性矩给连杆坐标系。

 

%SerialLink调用格式:

        1R = SerialLink(LINKS, OPTIONS)OPTIONS可以是:'name''comment''manufacturer'

         'base''tool''gravity''plotopt'

        2R = SerialLink(DH, OPTIONS),矩阵DH的构成:每个关节一行,每一行为[theta d a alpha]

         (默认为旋转关节),第五列(sigma)为可选列,sigma=0(默认)为旋转关节,sigma=1为移动关节

        3 R = SerialLink(OPTIONS) 没有连杆的机器人

        4R = SerialLink([R1 R2 ...], OPTIONS) 机器人连接, R2的基座连接到R1的末端.

        5R = SerialLink(R1, options) 复制机器人R1

%}

 L1 = Link('d', 0, 'a', 1, 'alpha', pi/2);%定义连杆1,没有写theta说明theta为关节变量

 L1.a;%查看a的值

 L1.d;%查看d的值

%还可以L1.RPL1.displayL1.mdh,L1.isprismaticL1.isrevolute等等,这样就可以查看一些默认值

 L2 = Link('d', 0, 'a', 1, 'alpha', 0);

 bot = SerialLink([L1 L2], 'name', 'my robot');

 bot.n;%查看连杆数目

 bot.fkine([0.1 0.2]);%前向运动学

 bot.plot([0.1 0.2]);%绘制机器人

定义完连杆和机器人便可以求机器人前和逆向运动学、动力学等等。

L1.参数或属性():查看连杆的参数或属性

L1.操作函数(参数):操作连杆参数

bot.属性():查看机器人的属性

bot.操作函数(参数):操作机器人,可以进行前向、逆向运动学求解等


实例:Stanford Manipulator

D-H参数表:

clear;

clc;

 L1 = Link('d', 0, 'a', 0, 'alpha', -pi/2);%定义连杆

 L2 = Link('d', 1, 'a', 0, 'alpha', pi/2);

 L3 = Link('theta', 0, 'a', 0, 'alpha', 0);

 L4 = Link('d', 0, 'a', 0, 'alpha', -pi/2);

 L5 = Link('d', 0, 'a', 0, 'alpha', pi/2);

 L6 = Link('d', 1, 'a', 0, 'alpha', 0);

 bot = SerialLink([L1 L2 L3 L4 L5 L6]);%连接连杆

 bot.display();%显示D-H参数表

点击查看原图

点击查看原图

 forward_kinematics=bot.fkine([-0.2 0.1 10 0.1 1 2])%前向运动学

求出末端的齐次变换矩阵:

 点击查看原图

点击查看原图


创建一个机器人视图并示教:

clc;
clf;
%---------------显示机械臂--------------%
L1=Link([ 0 0.25 5 -pi/2  0],'standard');
L2=Link([-pi/2 0.1 3 0 0],'standard','qlim','[-pi/2 pi/2]');
L3=Link([ 0 0.26 2 -pi/2 0],'standard');
L4=Link([ 0 0.26 1 pi/2 0],'standard');
L5=Link([ 0 0 1 -pi/2 0],'standard');
L6=Link([ -pi/2 0.17 0.5 0 0],'standard');
aa=SerialLink([L1 L2,L3,L4,L5,L6], 'name', 'my robot');
aa.display();
% % % aa.plot([0 150 0 0 0 0]);  % 某位置显示关节位置
aa.teach();
%---------------显示机械臂--------------%

点击查看原图

点击查看原图

clear;

clc;

 L1 = Link('d', 0, 'a', 0, 'alpha', -pi/2,'sym');%定义连杆

 L2 = Link('d', 'd2', 'a', 0, 'alpha', pi/2,'sym');

 L3 = Link('theta', 0, 'a', 0, 'alpha', 0,'sym');

 L4 = Link('d', 0, 'a', 0, 'alpha', -pi/2,'sym');

 L5 = Link('d', 0, 'a', 0, 'alpha', pi/2,'sym');

 L6 = Link('d', 'd6', 'a', 0, 'alpha', 0,'sym');

 bot = SerialLink([L1 L2 L3 L4 L5 L6]);%连接连杆

 syms theta1 theta2 d3 theta4 theta5 theta6;

 forward_kinematics=bot.fkine([theta1 theta2 d3 theta4 theta5 theta6])%前向运动学

 

Stanford arm的运动学逆解:

 

clear;

clc;

clear L

%             th    d       a    alpha

L(1) = Link([ 0     0       0   -pi/2     0]);%定义连杆

L(2) = Link([ 0     1       0    pi/2     0]);

L(3) = Link([ 0     0       0    0        1]);

L(4) = Link([ 0     0       0   -pi/2     0]);

L(5) = Link([ 0     0       0    pi/2     0]);

L(6) = Link([ 0     1       0    0        0]);

bot = SerialLink(L, 'name', 'Stanford arm');%连接连杆

T=transl(1,2,3)*trotz(60,'deg')*troty(30,'deg')*trotz(90,'deg')

inverse_kinematics=bot.ikine(T,'pinv');%逆向运动学

theta1=inverse_kinematics(1);

theta2=inverse_kinematics(2);

d3=inverse_kinematics(3);

theta4=inverse_kinematics(4);

theta5=inverse_kinematics(5);

theta6=inverse_kinematics(6);

forward_kinematics=bot.fkine([theta1 theta2 d3 theta4 theta5 theta6])%前向运动学,验证结果的准确性.

(以上未验证)

%求解结果为Tforward_kinematics一致。正确。

 

求解Stanford arm在世界坐标系描述的雅克比矩阵

 

clear;

clc;

clear L

%             th    d       a    alpha

L(1) = Link([ 0     0       0   -pi/2     0]);%定义连杆

L(2) = Link([ 0     1       0    pi/2     0]);

L(3) = Link([ 0     0       0    0        1]);

L(4) = Link([ 0     0       0   -pi/2     0]);

L(5) = Link([ 0     0       0    pi/2     0]);

L(6) = Link([ 0     1       0    0        0]);

bot = SerialLink(L, 'name', 'Stanford arm');%连接连杆

syms theta1 theta2 d3 theta4 theta5 theta6;

J0=vpa(bot.jacob0([theta1 theta2 d3 theta4 theta5 theta6]),4)

 

求平面二自由度机器人在世界坐标系描述的雅克比矩阵

clear;

clc;

clear L

L(1) = Link('d',0,'a','a1','alpha',0,'sym');%定义连杆

L(2) = Link('d',0,'a','a2','alpha',0,'sym');

bot = SerialLink(L, 'name', 'Planar 2-dof robot');%连接连杆

syms theta1 theta2;

J0=bot.jacob0([theta1 theta2]);

 

J0=simplify(J0)

 

求得:

 

J0 =

 

[ - a2*sin(theta1 + theta2) - a1*sin(theta1), -a2*sin(theta1 + theta2)]

[   a2*cos(theta1 + theta2) + a1*cos(theta1),  a2*cos(theta1 + theta2)]

[                                          0,                        0]

[                                          0,                        0]

[                                          0,                        0]

[                                          1,                        1]



标签: matlab robotics toolbox

发表评论:

Copyright 2011-2017 | Powered by emlog | Redesigned by Kaspar.s
京ICP备13003113号 sitemap