Matlab机器人工具箱(Robotics Toolbox)学习笔记

机器人工具箱其实以前上课的时候接触过跟着老师的课件一步步的做过实验但是课程结束后就没有再用过。。。

现在由于将来课题的原因再加上老师要求学习的MBD课程要用到所以来仔细学习一下。

❤ 2020.5.9 ❤

上了这么多年学都没怎么学习过matlab感觉血亏。不过该来的总是要来的毕业课题加上MBD让我不得不认真学一学matlab虽然基本操作现在马马虎虎会了一点可是各种工具箱才是matlab的精髓。

matlab最简洁的零基础教程Matlab入门教程【基础向】

当然这里讲的真的是太零基础了以至于学过任何一种编程语言的人都会觉得简单当然用来了解一下matlab的基础语法格式还是可以的。

下载安装与基础知识

机器人工具箱下载安装

​matlab的机器人工具箱是个第三方工具箱我试了在matlab的附加功能资源管理器里是没法直接下载的只能去作者的官网下载。

作者名叫Peter Corke其个人网站及机器人工具箱的官网为
Peter Corke

作者针对工具箱还编写了一本书可以算是工具箱的说明书了在网站上可以直接下载英文版还有中文官方版只是官网上没有下载当然除了买之外也有其他神奇的方法可以得到。。。
在这里插入图片描述
在这里插入图片描述
在作者的个人网站或者说机器人工具箱的官方网站下载好工具包后解压复制到matlab的toolbox文件夹里
在这里插入图片描述
将路径复制到matlab的主窗口中回车进入
在这里插入图片描述
双击打开startup_rvc.m点击运行
在这里插入图片描述
命令窗口提示如下安装成功。

在这里插入图片描述
然后添加路径
在这里插入图片描述
在命令窗口输入 ver 检测机器人工具箱是否安装成功
在这里插入图片描述
这样就是成功了。

还有一步不是必须的但是MBD课程的文件里提到了就是把机器人工具箱的功能块添加到simulink的library browser里首先在MATLAB\R2018b\toolbox\rvctools\simulink下建立一个脚本文件slblocks.m然后添加如下内容

function blkStruct = slblocks  
 
%SLBLOCKS Defines a block library.  
 
% Library's name. The name appears in the Library Browser's  
% contents pane.  
 
blkStruct.Name = ['Robot' sprintf('\n') 'ToolBox'];  
 
% The function that will be called when the user double-clicks on
% the library's name. ;  
 
blkStruct.OpenFcn = 'roblocks';   
% The argument to be set as the Mask Display for the subsystem. You
% may comment this line out if no specific mask is desired.  
% Example: blkStruct.MaskDisplay = 'plot([0:2*pi],sin([0:2*pi]));';  
% No display for now.  
 
% blkStruct.MaskDisplay = '';  
 
% End of blocks

运行显示如下内容应该就是成功了
在这里插入图片描述
这个文件的作用可以参照matlab的帮助文件“将库添加到 Library Browser 中”字段但是这个脚本的内容和帮助文件还是有很大差别的毕竟这个脚本是mbd课程提供的软件包里的机器人工具箱里提供的反正能用
在这里插入图片描述
好了启动simulink然后就可以在library browser里面找到robot toolbox的内容了
在这里插入图片描述
除了下载安装包之外还可以在官网下载 RTB.mltbx 文件然后直接打开或在matlab中打开就可以安装工具箱只是这样安装之后怎么调用simulink功能块就不知道了。

❤ 2020.5.10 ❤

下面记录一下机器人工具箱的基本功能使用方法内容来源见

→→→劉海濤LHT

这是系列的第一集剩下的我就不贴了

基本函数使用方法

位姿描述

〇 二维空间位姿描述
在这里插入图片描述
SE2()函数的旋转角使用角度制如pi/3这样的数据。注意SE要大写至少我的小写是不行的当需要使用角度制数据时要写成T=SE21,2,60,‘deg’的格式。
在这里插入图片描述
trplot2()函数的参数为SE2()函数生成的旋转矩阵生成旋转后的坐标。
在这里插入图片描述
※ 如果需要用角度制表示则写成这样
在这里插入图片描述

〇 三维空间位姿描述
在这里插入图片描述
rotx/roty/rotz是绕轴转动指定角度生成三维变换矩阵如果用角度制要加’deg’。
在这里插入图片描述
trplot是三维空间的绘图指令。
在这里插入图片描述
tranimate()是把变换动作用动画显示出来。

transl()是三维空间平移。

trotx/torty/trotz是三维齐次变换矩阵输出的是4x4的矩阵除了矩阵中除了表示旋转角度的3x3矩阵之外还有一个1。
在这里插入图片描述

建立机器人模型

〇 Link类
在这里插入图片描述
Link()函数的作用是在matlab中建立机器人的DH参数首先需要对机器人的DH参数进行建模当然这就是机器人学的内容了等我有机会再详细写一个机器人学的学习笔记。
单个关节的link函数效果如下。注意使用改进DH方法时必须加’modified’不然默认使用标准DH。
在这里插入图片描述
建立link之后可以查询link的属性比如查询关节类型
在这里插入图片描述
可以查询的属性参见图片。sigma是干嘛的我还不知道教程里没说

〇 SerialLink类
在这里插入图片描述
用来把定义好的连杆整合成一个机器人。

比如运行这样一个脚本先定义6个连杆再将连杆整合
在这里插入图片描述
然后可以通过指令查询Six_Link的属性比如
在这里插入图片描述
属性的类型从上图查询。
属性可以再定义之后修改也可以在定义的时候添加比如
在这里插入图片描述

然后再查询
在这里插入图片描述
关于.plot(theta)这个是一个重要的绘图指令通过制定各个关节角的角度来显示机器人的位置比如

在这里插入图片描述

可以得到图像
在这里插入图片描述
不要在意这些扭曲的关节。

关于.display就是把这个机器人的参数全展示出来
在这里插入图片描述
关于.teach就是示教模式图形示教器输入

在这里插入图片描述

之后会显示这么一个东西可以在里面改变各个关节的角度。
在这里插入图片描述

机器人运动学

在这里插入图片描述

正运动学

关于.fkine()命令是运动学正解生成对应关节角度的末端其次变换矩阵比如
在这里插入图片描述

逆运动学

关于.ikine6s()yu.ikine()这两个都是求运动学的逆解有6s的是封闭解这个指令只能应用于标准型DH建模方法建立的模型如果用的改进DH会报错不知道为什么。。。
在这里插入图片描述
然后用.ikine()可是。。。
在这里插入图片描述
应该是模型建立的问题不过视频里说这个函数就是有问题的如果想实现反解运算还需要自己写函数。。。我去。。。
先继续吧。

☆ 一个赞破

以matlab内置的puma560模型为例
首先打开puma560
在这里插入图片描述

如图所示是puma560的一些参数和指令
在这里插入图片描述
可以用绘图指令画一画比如
在这里插入图片描述

在这里插入图片描述
运动学正解
在这里插入图片描述
运动学反解封闭解
在这里插入图片描述
运动学反解数值解
在这里插入图片描述
震惊居然不一样。。。

关于正运动学的分析

根据论文《协作机器人零力控制与碰撞检测技术研究》_陈赛旋

〇 根据表达式判断所建立的DH模型是标准型Standard DH还是改进型Modified DH
第三四行的首元素为0的是标准型
在这里插入图片描述
长成这样的是改进型
在这里插入图片描述
〇 机器人逆解脚本程序编写
1、把推导出来的变换矩阵在脚本文件中表示出来
在这里插入图片描述


syms a2 a3 d1 d4 d5 d6 theta1 theta2 theta3 theta4 theta5 theta6
T01 = [ cos(theta1) 0   sin(theta1)     0;
        sin(theta1) 0   -cos(theta1)    0;
        0           1   0               d1;
        0           0   0               1];

T12 =[  cos(theta2) -sin(theta2)    0   a2*cos(theta2);
        sin(theta2) cos(theta2)     0   a2*sin(theta2);
        0           0               1   0;
        0           0               0   1];

T23 =[  cos(theta3) -sin(theta3)    0   a3*cos(theta3);
        sin(theta3) cos(theta3)     0   a3*sin(theta3);
        0           0               1   0;
        0           0               0   1];

T34 = [ cos(theta4) 0               sin(theta4)     0;
        sin(theta4) 0               -cos(theta4)    0;
        0           1               0               d4;
        0           0               0               1];

T45=[   cos(theta5) 0               -sin(theta5)    0;
        sin(theta5) 0               cos(theta5)     0;
        0           -1              0               d5;
        0           0               0               1];
T56=[   cos(theta6) -sin(theta6)    0               0;
        sin(theta6) cos(theta6)     0               0;
        0           0               1               d6;
        0           0               0               1];
T=T01*T12*T23*T34*T45*T56

2、将矩阵化简
用simplify()函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于逆运动学的分析

通过左乘T01的逆构造4x4个方程
在这里插入图片描述

syms a2 a3 d1 d4 d5 d6 theta1 theta2 theta3 theta4 theta5 theta6 nx ny nz ox oy oz ax ay az px py pz
T01 = [ cos(theta1) 0   sin(theta1)     0;
        sin(theta1) 0   -cos(theta1)    0;
        0           1   0               d1;
        0           0   0               1];

T12 =[  cos(theta2) -sin(theta2)    0   a2*cos(theta2);
        sin(theta2) cos(theta2)     0   a2*sin(theta2);
        0           0               1   0;
        0           0               0   1];

T23 =[  cos(theta3) -sin(theta3)    0   a3*cos(theta3);
        sin(theta3) cos(theta3)     0   a3*sin(theta3);
        0           0               1   0;
        0           0               0   1];

T34 = [ cos(theta4) 0               sin(theta4)     0;
        sin(theta4) 0               -cos(theta4)    0;
        0           1               0               d4;
        0           0               0               1];

T45=[   cos(theta5) 0               -sin(theta5)    0;
        sin(theta5) 0               cos(theta5)     0;
        0           -1              0               d5;
        0           0               0               1];
T56=[   cos(theta6) -sin(theta6)    0               0;
        sin(theta6) cos(theta6)     0               0;
        0           0               1               d6;
        0           0               0               1];
    
TT=[    nx oz ax pz;
        ny oy ay py;
        nz oz az pz;
        0  0  0  1];
T1=inv(T01)*TT
T2=T01*T12*T23*T34*T45*T56

化简T1、T2
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
以下全是论文原文
求解关节角
在这里插入图片描述
注意atan2是个很重要的函数在这里求解必须用这个老师说的我也没太明白
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

雅克比矩阵

在这里插入图片描述
先建立机器人模型然后
.jacob0()针对基坐标
在这里插入图片描述
.jacobn()针对工具坐标
在这里插入图片描述
两者可以转化
在这里插入图片描述

❤ 2022.6.8 ❤

带有移动关节的机器人

机器人工具箱自带的模型

在这里插入图片描述
在这里插入图片描述

可以查看该机器人的动画
在这里插入图片描述
在这里插入图片描述

建立自己的移动关节机器人模型

在这里插入图片描述
※ 注意在建立模型的过程中Link函数里面“d”和“theta”谁是变量就不写谁。


%关节角、连杆偏距、连杆长度、连杆转角
L(1) = Link('d',    0,       'a',0,  'alpha',0,      'qlim',[-pi,pi],	'modified');
L(2) = Link('theta',0,       'a',0,  'alpha',pi/2,   'qlim',[0,10],     'modified');
L(3) = Link('d',    0.1,     'a',0,  'alpha',0,      'qlim',[-pi,pi],	'modified');

RPR_robot = SerialLink(L,'name','RPR');
RPR_robot.plotopt={'workspace',[-10,10,-10,10,-10,10]};
RPR_robot.teach

在这里插入图片描述

在这里插入图片描述

蒙特卡罗法的工作域分析

〇 蒙特卡罗法
在这里插入图片描述
代码

%定义D-H参数
a2= 0.420;
a3= 0.375;
d2= 0.138+0.024;
d3=-0.127-0.024;
d4= 0.114+0.021;
d5= 0.114+0.021;
d6= 0.090+0.021;


%定义出XYZ的坐标值。
for i=1:100000
theta1=-pi   +2*pi*rand;
theta2=0     +2*pi*rand;
theta3=-(5/6)*pi+(5/3)*pi*rand;
theta4=-pi    +2*pi*rand;
theta5=-pi   +2*pi*rand;
theta6=-pi    +2*pi*rand;

x(i)= a2*cos(theta1)*cos(theta2)+a3*cos(theta1)*cos(theta2+theta3)-d5*cos(theta1)*sin(theta2+theta3+theta4)-sin(theta1)*(d2+d3+d4)-d6*(cos(theta5)*sin(theta1)-cos(theta1)*cos(theta2+theta3+theta4)*sin(theta5));
y(i)=d6*(cos(theta1)*cos(theta5)+cos(theta2+theta3+theta4)*sin(theta1)*sin(theta5))+a3*sin(theta1)*cos(theta2+theta3)-d5*sin(theta1)*sin(theta2+theta3+theta4)+cos(theta1)*(d2+d3+d4)+a2*cos(theta2)*sin(theta1);
z(i)=-a3*sin(theta2+theta3)-a2*sin(theta2)-d5*cos(theta2+theta3+theta4)-d6*sin(theta5)*sin(theta2+theta3+theta4);
end
plot3(x,y,z,'b.','MarkerSize',0.5)

运行结果
在这里插入图片描述

机器人动力学

〇 工具箱中与动力学相关的方程
在这里插入图片描述

查看模型动力学参数 R.dyn()

在这里插入图片描述
然后就会显示出每个关节的参数
在这里插入图片描述
2-6略

也可以显示单个关节的参数
在这里插入图片描述

在这里插入图片描述

逆动力学 R.rne()

在这里插入图片描述
在这里插入图片描述

〇 举例
在这里插入图片描述
在这里插入图片描述

动力学方程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

重力载荷 R.gravload

计算重力载荷参数为所求关节位置结果是个向量
在这里插入图片描述

关节空间惯性矩阵 R.inertia()

在这里插入图片描述

科氏力和向心力耦合矩阵 R.coriolis()

先给定一个速度
在这里插入图片描述
qn是模型里的当前位置
在这里插入图片描述

计算有效载荷 R.payload()

先计算没有加载时的惯性矩阵
在这里插入图片描述
加载有效载荷
在这里插入图片描述
再计算惯性矩阵发现数值改变了
在这里插入图片描述

正向动力学

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
〇 例子

mdl_puma560;
torqfun = [1 2 3 4 5 6];
p560 = p560.nofriction();%没有摩擦的动力学模型加快求解速度
[T,q,qd] = p560.fdyn(1,torqfun)
for kk = 1:65
    qdd(kk,:) = p560.accel(q(kk,:),qd(kk,:),torqfun);
end

正常可以算出关节的加速度
但是报错了
在这里插入图片描述

查了一下好像新版本的fdyn函数有点不一样
在这里插入图片描述
没看太懂等需要用的到的时候再说吧。

赋予机器人动力学参数

首先建立DH模型

L(1)= Link([0 0 0 0],'modified');
L(2)= Link([0 0.138+0.024 0 -pi/2],'modified');
L(3)= Link([0 -0.127-0.024 0.420 0], 'modified');
L(4)= Link([0 0.114+0.021 0.375 0],'modified');
L(5)= Link([0 0.114+0.021 0 -pi/2],'modified');
L(6)= Link([0 0.090+0.021 0 pi/2],'modified');

Six_Link=SerialLink(L,'name','sixlink');

然后按照文档添加动力学参数
在这里插入图片描述

L(1).m = 0.77;
L(2).m = 0.99;
L(1).qlim = [1,3];

然后再查看动力学参数
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6