Matlab机器人工具箱(Robotics Toolbox)学习笔记
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
机器人工具箱其实以前上课的时候接触过跟着老师的课件一步步的做过实验但是课程结束后就没有再用过。。。
现在由于将来课题的原因再加上老师要求学习的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];
然后再查看动力学参数