Matlab机器人工具箱(1)——机器人的建立、绘制与正逆运动学
如何与智能音箱联动让机器人定时工作 #生活技巧# #居家生活技巧# #日常家务技巧# #扫地机器人使用#
Matlab机器人工具箱(1)——机器人的建立、绘制与正逆运动学 前言rtbdemo机器人的建立代码解析单个Link的解释建立机器人整体的解释 绘制正运动学逆运动学微分运动学(求雅克比矩阵)总结附录六轴机器人改进的DH方法demo绘制动图前言
很多小伙伴在初学机器人学的时候,面对大量的概念和复杂的公式,往往不知道从何开始入手。一味的啃机器人学的概念和公式枯燥又无味,坚持不了几天就从入门到放弃一条龙走完了。坚持下去的动力之一就是能尽快看到自己的学习成果,而MATLAB机器人工具箱就是非常简单的机器人平台快速搭建工具。
本文主要介绍如何使用matlab工具箱建立机器人模型,并对其进行绘制。这里使用的RTB工具箱10.2版本,不同版本间代码风格可能会有差异,因此请注意工具箱的使用版本。
rtbdemo
rtbdemo是工具箱自带的一个历程脚本,在命令行窗口输入:
rtbdemo 1
就会蹦出来一个GUI界面:
如字面意思,左边一列是通用函数的例子(如:旋转,平移,轨迹等);中间主要是机械臂的基础函数,右边为移动机器人的一些历程。这些功能都写的很清楚了,都可以随便点点看,会很有意思。
本博客主要专注于机械臂的搭建和使用,因此会对前两列的函数进行展开介绍。
机器人的建立
以经典的4轴机械臂Scara为例(因为既有转动关节又有移动关节),介绍一下机械臂建立的步骤,首先上代码:
clear ; clc; close all; % 机器人各连杆DH参数 d1 = 0; d2 = 86; d3 = -92; % 由于关节4为移动关节,故d4为变量,theta4为常量 theta4 = 0; a1 = 400; a2 = 250; a3 = 0; a4 = 0; alpha1 = 0 / 180 * pi; alpha2 = 0 / 180 * pi; alpha3 = 180 / 180 * pi; alpha4 = 0 / 180 * pi; % 定义各个连杆,默认为转动关节 % theta d a alpha L(1)=Link([ 0 d1 a1 alpha1]); L(1).qlim=[-pi,pi]; L(2)=Link([ 0 d2 a2 alpha2]); L(2).qlim=[-pi,pi]; L(2).offset=pi/2; L(3)=Link([ 0 d3 a3 alpha3]); L(3).qlim=[-pi,pi]; % 移动关节需要特别指定关节类型--jointtype L(4)=Link([theta4 0 a4 alpha4]); L(4).qlim=[0,180]; L(4).jointtype='P'; % 把上述连杆“串起来” Scara=SerialLink(L,'name','Scara'); % 定义机器人基坐标和工具坐标的变换 Scara.base = transl(0 ,0 ,305); Scara.tool = transl(0 ,0 ,100); Scara.teach();
123456789101112131415161718192021222324252627282930运行这段代码,会出现:
OK,现在可以感受下成果了。拖动左边的q1—q4就可以看到建立的机器人动起来了!
说明: q1—q4右边的数值为角度制,xyz为工具坐标系在世界坐标系的位置,rpy表示相对世界坐标系的旋转,定义可参见lyhbkz的博客。
代码解析
单个Link的解释% theta d a alpha L(1)=Link([ 0 d1 a1 alpha1]); L(1).qlim=[-pi,pi]; L(2)=Link([ 0 d2 a2 alpha2]); L(2).qlim=[-pi,pi]; L(2).offset=pi/2; L(3)=Link([ 0 d3 a3 alpha3]); L(3).qlim=[-pi,pi]; % 移动关节需要特别指定关节类型--jointtype L(4)=Link([theta4 0 a4 alpha4]); L(4).qlim=[0,180]; L(4).jointtype='P'; 123456
Link函数是根据DH参数建立连杆,其中包含了关节的信息,DH的输入顺序见代码;
qlim指定关节极限,注意,工具箱中的移动关节变量不允许有负值;
jointtype指定关节类型,默认为转动关节,L(4).jointtype='P’意味着第四根link是由移动关节连接的;
offset为关节初始值的偏置。这里要注意的是,定义好关节类型后,相应的变量必须为0,初值必须由offset定义,例如,关节2为转动关节,那么L(2)的theta必须为0,但是我们又希望初始状态下关节2能有一个偏置,那么就通过 L(2).offset=pi/2;来实现。
另外这里还有一个常用的基于改进的DH建立模型的方法,程序中没有说明,格式为:
L(1)=Link([0 d1 a1 alpha1], 'modified'); 1
文章附录->六轴机器人改进的DH方法demo中为关于此用法的demo。
以上为建立连杆时常用的函数,但工具箱对link的定义远不至此,如有更多需求,可在命令行窗口输入:
help link 1
来查看官方帮助文档,说到这里不得不提一句,学习无论是机器人工具箱还是matlab基础的学习,help函数都非常有用!
建立机器人整体的解释Scara=SerialLink(L,'name','Scara'); 1
L为刚刚建立好的四根link,‘name’为可选项,可以不加,就是给机器人取个名字,看它骨骼惊奇,这里就叫它‘Scara’啦。
同样的,SerialLink函数还有其他的可选则项在此不一一介绍,欲了解则:
help SerialLink 1
这条语句就建立了一个叫Scara的机器人类型的对象,下面就可以对他操作了。
% 定义机器人基坐标和工具坐标的变换 Scara.base = transl(0 ,0 ,305); Scara.tool = transl(0 ,0 ,100); 123
具体含义为,把我们的Scara基部沿着z轴平移305mm,工具坐标系则以最后一个坐标为基础,沿z方向平移100mm.
transl函数涉及到工具箱中对旋转、平移以及齐次坐标的变换,可参考Matlab机器人工具箱(0)——旋转与平移变换
Scara.teach(); 1
字面意思,对机器人进行示教。
绘制
上一节已经介绍了teach()函数,本节将简要介绍一下plot函数。
在上述代码中加入:
figure joint = [pi/6 0 pi/3 150]; Scara.plot(joint) 123
即可绘制机器人关节变量为[pi/6 0 pi/3 150]时的机器人状态:
如果joint是一个数组,如:
joint(: , 1) = linspace(pi/6,pi/2,100); joint(: , 2) = linspace(0,pi/4,100); joint(: , 3) = linspace(pi/3,pi/2,100); joint(: , 4) = linspace(0,160,100); Scara.plot(joint ,'jointdiam',1,'fps',100,'trail','r-') 12345
则会绘制机器人运动的动画,其中joint的列数必须和关节数目相同
其中,’jointdiam‘设置关节的圆柱体直径的大小,‘fps’**设置绘制动画的帧率,,'trail’会绘制出末端的轨迹
更多plot函数的可选项,照旧help:
help SerialLink/plot 1
有时候需要像博主一样把结果展示给别人看,因此我把绘制动图的程序放在了附录-> 绘制动图中,供参考。另外,在Matlab机器人工具箱(3)——轨迹规划中也介绍了更方便的方法,但是我测试的时候发现那种方法在10.4版本的工具箱才能用,10.2版本好像不行。
更多关于可视化的使用方法将在机器人轨迹规划一章中进行介绍。
正运动学
T = Scara.fkine(joint) 1
傻瓜式操作,输入关节角度,输出SE3类的齐次变换矩阵
逆运动学
Scara.ikine(T, 'mask', [1 1 1 0 0 1]) 1
T为我们刚刚正解得到的齐次变换矩阵,输出为关节向量。
常用可选项:
‘mask’,M: mask vector (6x1) that correspond to translation in X, Y and Z, and rotation about X, Y and Z respectively.这里Scara机器人只有四个自由度,在x,y两个方向的旋转不存在自由度,因此为[1 1 1 0 0 1];
’q0’,Q为求解提供一个关节初值,因为数值法逆解可能不会收敛到想要的构型,提供一个初值,可以增大得到我们想要构型的概率。
’lambda’,L : initial value of lambda (default 0.1) 数值解法的步长,如果求解失败,可以减小步长再尝试,当然减小步长意味着求解时间更长;
’tol’,T容许误差,精度要求不高的话可以适当调大一点,默认为1e^-10
’ilimit’,L迭代的最大次数,求解失败时可以适当增大重新尝试。
’transpose’,A迭代时使用雅克比的转置代替伪逆,关于这两种方法的异同和思想,可参考下面推荐的知乎链接。
其他可选项有需求可参考
help SerialLink/ikine 1
Note:
令人头疼的逆解,在matlab工具箱里也是傻瓜操作。但这里是数值法,仅能求解一组解,多解情况考虑不到,且求解容易失败。进行轨迹规划时也容易跳跃,所以熟悉值后还是自己写逆运动学的解析解吧。另外关于工具箱数值解法的解析,可以看知乎上的fly qq前辈的回答
微分运动学(求雅克比矩阵)
Scara.jacob0(joint) 1
继续傻瓜操作。
输入关节角,输出6xN的雅克比矩阵,N为机械臂的自由度数,这里N为4。
有时候需要求雅克比矩阵的逆或伪逆,顺便一提matlab矩阵求逆和伪逆的函数:
% 矩阵求逆,mat为待求解的矩阵 inv(mat) % 矩阵求伪逆 pinv(mat) 1234
总结
本文主要介绍了matlab机器人工具箱一些基础函数的使用方法,主要包括机械臂的建立,绘图,以及基础的运动学方法。篇幅和精力有限,一些函数的扩展介绍仅包括高频使用的内容,如果需要用到一些没有列举到的方法,找matlab的help文档即可。下一篇文章将介绍机器人规划前的一些预分析:Matlab机器人工具箱(2)——预分析(可达空间与可操作性的可视化)
后面会继续更新轨迹规划,动力学相关的一些用法。
最近更新了一种利用任意旋转平移变换构造机器人的方法,有需要的可以看下:Matlab机器人工具箱(番外篇)———机器人建立的任意方法
附录
六轴机器人改进的DH方法demo
clear ; clc; close all; % 机器人各连杆参数值 d1 = 670; d2 = 0; d3 = 0; d4 = 1280; d5 = 0; d6 = 215; a1 = 0; a2 = 312; a3 = 1075; a4 = 225; a5 = 0; a6 = 0; alpha1 = 0 / 180 * pi; alpha2 = -90 / 180 * pi; alpha3 = 0 / 180 * pi; alpha4 = -90 / 180 * pi; alpha5 = 90 / 180 * pi; alpha6 = -90 / 180 * pi; % 建立连杆DH参数(修正的DH) L(1)=Link([0 d1 a1 alpha1], 'modified'); L(1).qlim=[-pi,pi]; L(2)=Link([0 d2 a2 alpha2], 'modified'); L(2).qlim=[-pi,pi];L(2).offset = -pi/2; L(3)=Link([0 d3 a3 alpha3], 'modified'); L(3).qlim=[-pi,pi]; L(4)=Link([0 d4 a4 alpha4], 'modified'); L(4).qlim=[-pi,pi]; L(5)=Link([0 d5 a5 alpha5], 'modified'); L(5).qlim=[-pi,pi]; L(6)=Link([0 d6 a6 alpha6], 'modified'); L(6).qlim=[-pi,pi]; % 定义机器人 FANUC=SerialLink(L(1:6),'name','FANUC'); FANUC.tool = transl(0,0,100); FANUC.teach();
123456789101112131415161718192021222324252627282930313233绘制动图
figure joint(: , 1) = linspace(pi/6,pi/2,100); joint(: , 2) = linspace(0,pi/4,100); joint(: , 3) = linspace(pi/3,pi/2,100); joint(: , 4) = linspace(0,160,100); filename = 'demo.gif'; for i = 1:length(joint) pause(0.01) Scara.plot(joint(i,:)); f = getframe(gcf); imind = frame2im(f); [imind,cm] = rgb2ind(imind,256); if i == 1 imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',0.1); else imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.1); end end
123456789101112131415161718网址:Matlab机器人工具箱(1)——机器人的建立、绘制与正逆运动学 https://www.yuejiaxmz.com/news/view/585286
相关内容
【Matlab 六自由度机器人】关于灵活工作空间与可达工作空间的理解(附MATLAB推导代码)MATLAB图像处理工具箱
机器生产中建模仿真
MATLAB在线课程与学习资源
【阻抗建模、验证扫频法】光伏并网逆变器扫频与稳定性分析(包含锁相环电流环)(Simulink仿真实现)
如何在智能宣传系统软件开发项目中应用机器学习技术提高团队的知识共享与转移效率?
机器人过程自动化(RPA)入门 1. 什么是机器人过程自动化?
MATLAB图像处理(包括图像类型转换)
人工智能商用清洁机器人商用智能洗地机器人工业全自动扫地机器人
现代控制理论(机器人方向)考核要求与Matlab(Octave)简明教程