当前位置: 首页 > 学习笔记 > 正文

Robotic Toolbox v9.8 for MATLAB 使用笔记

二赛君 发表于2016年3月26日 13:42


    点击查看原图








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]











全文完
本文标签: matlabroboticstoolbox
本文标题: Robotic Toolbox v9.8 for MATLAB 使用笔记

〓 随机文章推荐

共有1247阅 / 0我要评论
  1. 还没有评论呢,快抢沙发~

尽情评论吧返回顶部

!评论内容需包含中文,不要拽英文噢

请勾选本项再提交评论