Matlab Robotic Toolbox工具箱学习笔记(二)

Arm/Robots

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

1、Link类

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

操作函数:

%A               连杆变换矩阵
 RP            关节类型: 'R' 或 'P'
 friction      摩擦力
 nofriction    摩擦力忽略

 dyn           显示动力学参数
 islimit       测试关节是否超出软限制
 isrevolute    测试是否为旋转关节
 isprismatic   测试是否为移动关节
 display       连杆参数以表格形式显示
 char          转为字符串

运动学参数:

 theta    关节角度
 d        连杆偏移量
 a        连杆长度
 alpha    连杆扭角
 sigma    旋转关节为0,移动关节为1
 mdh      标准的D&H为0,否则为1
 offset   关节变量偏移量

 qlim     关节变量范围[min max]

动力学参数:

 m        连杆质量

 r        连杆相对于坐标系的质心位置3x1

 I        连杆的惯性矩阵(关于连杆重心)3x3
 B        粘性摩擦力(对于电机)1x1或2x1
 Tc       库仑摩擦力1x1或2x1
电机和传动参数:

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

2、SerialLink类

操作函数:

 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() 创建一个带默认参数的连杆
             (2)L = Link(L1)复制连杆L1
             (3)L = Link(OPTIONS) 创建一个指定运动学、动力学参数的连杆
            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调用格式:
 %{     
        (1)R = SerialLink(LINKS, OPTIONS),OPTIONS可以是:'name'、'comment'、'manufacturer'
         'base'、'tool'、'gravity'、'plotopt'
        (2)R = SerialLink(DH, OPTIONS),矩阵DH的构成:每个关节一行,每一行为[theta d a alpha]
         (默认为旋转关节),第五列(sigma)为可选列,sigma=0(默认)为旋转关节,sigma=1为移动关节
       
        (3) R = SerialLink(OPTIONS) 没有连杆的机器人
       
        (4)R = SerialLink([R1 R2 ...], OPTIONS) 机器人连接, 将R2的基座连接到R1的末端.
       
        (5)R = SerialLink(R1, options) 复制机器人R1
%}
 L1 = Link('d', 0, 'a', 1, 'alpha', pi/2);%定义连杆1,没有写theta说明theta为关节变量
 L1.a;%查看a的值
 L1.d;%查看d的值
%还可以L1.RP,L1.display,L1.mdh,L1.isprismatic,L1.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

[学习笔记]Matlab <wbr>Robotic <wbr>Toolbox工具箱学习笔记(二)
D-H参数表:

[学习笔记]Matlab <wbr>Robotic <wbr>Toolbox工具箱学习笔记(二)

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])%前向运动学


[学习笔记]Matlab <wbr>Robotic <wbr>Toolbox工具箱学习笔记(二)
[学习笔记]Matlab <wbr>Robotic <wbr>Toolbox工具箱学习笔记(二)

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

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])%前向运动学,验证结果的准确性.

%求解结果为T与forward_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)

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

[学习笔记]Matlab <wbr>Robotic <wbr>Toolbox工具箱学习笔记(二)
D-H参数表:

[学习笔记]Matlab <wbr>Robotic <wbr>Toolbox工具箱学习笔记(二)
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]

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值