【Matlab Robotics Toolbox】robotics toolbox学习及使用记录,方便自己后面复习、改进。
基于Matlab R2019b 9.5; Peter Corke的Robotics Toolbox 10.3.1


目录

0. 前言

Robot toolbox- rtbdemo

1. 依据D-H参数建立机器人模型

2. 代码解释

单个Link的解释

建立机器人整体的解释

运动学正解

绘图

运动学逆解

微分运动学(求雅克比矩阵)


0. 前言

在初学机器人学的时候,面对大量的概念和复杂的公式,往往不知道从何开始入手。一味的啃机器人学的概念和公式枯燥又无味,坚持不了几天就从入门到放弃一条龙走完了。坚持下去的动力之一就是能尽快看到自己的学习成果,而MATLAB机器人工具箱就是非常简单的机器人平台快速搭建工具。

本文主要介绍如何使用matlab工具箱建立机器人模型,并对其进行绘制。这里使用的RTB工具箱10.3版本,不同版本间代码风格可能会有差异,因此请注意工具箱的使用版本

Robot toolbox- rtbdemo

rtbdemo是工具箱自带的一个历程脚本,在命令行窗口输入:

rtbdemo

RTB GUI界面:

如字面意思,左边一列是通用函数的例子(如:旋转,平移,轨迹等);中间主要是机械臂的基础函数,右边为移动机器人的一些历程。这些功能都写的很清楚了,都可以随便点点看,会很有意思。
本博客主要专注于机械臂的搭建和使用,因此会对前两列的函数进行展开介绍。


1. 依据D-H参数建立机器人模型

标准D-H参数示意图

以经典的4轴机械臂Scara为例(因为既有转动关节又有移动关节),介绍一下机械臂建立的步骤,首先上代码:

clear ; clc; close all;
% 机器人各连杆DH参数
% Scara机械臂连杆偏距参数d
d1 = 200;
d2 = 86;
d3 = -92;
% 由于关节4为移动关节,故d4为变量,theta4为常量
theta4 = 0;% Scara机械臂连杆长度参数a
a1 = 400;
a2 = 250;
a3 = 0;
a4 = 0;% Scara机械臂关节偏角参数alpha
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.display(); % 显示Scara机器人关节数以及D_H参数列表
% Scara:: 4 axis, RRRP, stdDH, slowRNE    % 定义机器人基坐标和工具坐标的变换
Scara.base = transl(0 ,0 ,305);
Scara.tool = transl(0 ,0 ,100);
Scara.teach();   % 运动学正解
pose_0=[pi/4,-pi/3,pi/2,100];
T=Scara.fkine(pose_0);
cchain=Scara.trchain;% 运动学逆解
% 当反解的机器人对象的自由度少于6时,要用mask vector进行忽略某个关节自由度%
mask_vector = [1,1,1,0,0,1];
axi_val = Scara.ikine(T,'mask',mask_vector,'pinv');
% We can help the solution along by using the 'pinv' option% 雅可比矩阵
% j0=robot.jacob0(pose_0);    

命令行显示Scara机器人信息和D-H参数表:

GUI显示机器人模型

2. 代码解释

单个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';

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');

建立机器人整体的解释

Scara=SerialLink(L,'name','Scara');

L为刚刚建立好的四根link,‘name’为可选项,可以不加,就是给机器人取个名字,看它骨骼惊奇,这里就叫它‘Scara’啦。
同样的,SerialLink函数还有其他的可选则项在此不一一介绍,欲了解则:

help SerialLink

这条语句就建立了一个叫Scara的机器人类型的对象,下面就可以对他操作了。

% 定义机器人基坐标和工具坐标的变换
Scara.base = transl(0 ,0 ,305);
Scara.tool = transl(0 ,0 ,100);

具体含义为,把我们的Scara基部沿着z轴平移305mm,工具坐标系则以最后一个坐标为基础,沿z方向平移100mm.
transl函数涉及到工具箱中对旋转、平移以及齐次坐标的变换,可参考Matlab机器人工具箱(0)——旋转与平移变换

Scara.teach();

字面意思,对机器人进行示教。


运动学正解


% 运动学正解
pose_0=[pi/4,-pi/3,pi/2,100];
T=Scara.fkine(pose_0);
cchain=Scara.trchain;

绘图


joint(: , 1) = linspace(-pi/8,pi,200);
joint(: , 2) = linspace(-pi,pi/4,200);
joint(: , 3) = linspace(pi/3,-pi/2,200);
joint(: , 4) = linspace(0,360,200);
Scara.plot(joint ,'jointdiam',1,'fps',100,'trail','r-')

运动学逆解


% 运动学逆解
% 当反解的机器人对象的自由度少于6时,要用mask vector进行忽略某个关节自由度%
mask_vector = [1,1,1,0,0,1];
axi_val = Scara.ikine(T,'mask',mask_vector,'pinv');
% We can help the solution along by using the 'pinv' option

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迭代时使用雅克比的转置代替伪逆,关于这两种方法的异同和思想,可参考https://www.ilovematlab.cn/thread-533863-1-1.html?s_tid=LandingPageTabqa
其他可选项有需求可参考

微分运动学(求雅克比矩阵)

Scara.jacob0(joint)

继续傻瓜操作。
输入关节角,输出6xN的雅克比矩阵,N为机械臂的自由度数,这里N为4。
有时候需要求雅克比矩阵的逆或伪逆,顺便一提matlab矩阵求逆和伪逆的函数:

% 矩阵求逆,mat为待求解的矩阵
inv(mat)
% 矩阵求伪逆
pinv(mat)

参考

https://blog.csdn.net/weixin_43502392/article/details/105447785

https://blog.csdn.net/weixin_45629652/article/details/103831764

工业机器人(4)-- Matlab Robot Toolbox运动学正、逆解相关推荐

  1. 多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试

    多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试 ) DH建模法可以参考这个博客: 还有<机器人>这本书,一定要理论实践相结合,理解后可以用几何法建模也可以用 ...

  2. MATLAB机器人机械臂运动学正逆解、动力学建模仿真与轨迹规划

    MATLAB机器人机械臂运动学正逆解.动力学建模仿真与轨迹规划,雅克比矩阵求解.蒙特卡洛采样画出末端执行器工作空间 基于时间最优的改进粒子群优化算法机械臂轨迹规划设计 ID:4610679190520 ...

  3. 基于Robotics toolbox的定制/非标机构的运动学正逆解

    建立坐标系 这一步很重要,如果发现DH参数无法确定,可能是坐标系的建立有问题,返回来重新建立. 我发现网上基本都是六自由度全转动机器人,很少有定制机构的机器人建模,特别是移动+转动的,这也给我DH参数 ...

  4. Puma560机器人运动学正逆解

    puma560机器人D-H参数 puma560采用的是改进D-H参数,其DH参数表如下: i αi ai di θi 1 0 0 0 t1 2 -90 0 0 t2 3 0 r2 d3 t3 4 -9 ...

  5. 工业机械人运动学正逆解,简单粗暴!!!!!!

    ur机械臂是六自由度机械臂,由D-H参数法确定它的运动学模型,连杆坐标系的建立如上图所示. 转动关节θi是关节变量,连杆偏移di是常数. 关节编号 α(绕x轴) a(沿x轴) θ(绕z轴) d(沿z轴 ...

  6. 6轴机器人运动学逆解matlab,六轴机器人建模方法、正逆解、轨迹规划实例与Matalb Robotic Toolbox 的实现...

    摘要 本文主要是给大家一个系统的概念,如何用Matlab实现六轴机器人的建模和实现轨迹规划.以后将会给大家讲解如何手写正逆解以及轨迹插补的程序.程序是基于Matlab2016a,工具箱版本为Robot ...

  7. 【机器人原理与实践(三)】六轴机械臂正逆解控制

    文章目录 3.1 空间转换矩阵的理解 3.1.1平移变换 3.1.2旋转变换 3.2 D-H参数法 3.3 建立机械臂模型 3.3.1 机械臂模型介绍 3.3.2 使用Matlab进行示教仿真 3.4 ...

  8. MATLAB机器人正逆解

    MATLAB机器人求正逆解 手把手教你MATLAB Robotics Toolbox工具箱③ Matlab RoboticToolBox(一)Link参数.三自由度/四自由度逆运动学 https:// ...

  9. 和ur的区别_UR机械臂simscape正逆解仿真

    最近在看相关的课程,把作业做一下,还是蛮有意思的.(课程代码所以涉及版权问题,经过同意后我上传代码) UR机械臂的物理模型文件是根据SolidWorks插件simscape导出的xml文件,课程直接提 ...

最新文章

  1. css中flex布局
  2. (chap6 Http首部) 响应首部字段 LocationProxy-AuthenticateRetry-After
  3. 编辑器扩展_关于MediaWiki的编辑器
  4. 贪吃蛇系列之一——引入
  5. angularjs初始化时不显示模板内容, 不显示html, 不显示template
  6. NUMTRYE - Number Theory (Easy)
  7. hibernate 映射四多对一双向映射
  8. 一个封装了的选项卡效果js
  9. java判断是否空值
  10. UE4使用自定义字体
  11. 零元学Expression Blend 4 - Chapter 7 什麽?影片不再是印象中的方框框!!!看Blend 4如何把影片镶入字里...
  12. vijos:旅行家的预算[贪心]
  13. LeetCode1139. 最大的以 1 为边界的正方形 (二维滑动窗口待优化)
  14. Gradle删除本地库文件
  15. excel单元格调用mysql数据,excel表格自动调用数据库-如何把Excel表格当做数据库处理...
  16. 「案例分享」工程总承包模式下对分包单位管理和控制的做法
  17. dos2unix命令详解
  18. 使用 Python 进行数据清洗的完整指南
  19. word分节符设置与不同页眉页脚页码设置
  20. 华为服务器2488H V6的ibmc接口配置

热门文章

  1. 如何利用CNN实现图像识别的任务?
  2. 使用ROS控制罗技F701游戏手柄
  3. 这篇文章告诉你用于制作思维导图的软件有什么?
  4. 用python简单实现百度查关键词排名工具并生成截图--精准无比
  5. 别浪费自己的高学历!
  6. 使用类共享提高性能,探索 IBM JRE 中最新的类共享特性
  7. 中国联通开源AI平台 CubeAI智立方-AI模型库(本人微信号:yudajiangshan)
  8. flutter全屏时钟!Flutter尽然还能有这种操作!薪资翻倍
  9. pm模式 raid_H3C案例查看:H3C RAID-1000 阵列卡多种模式的配置和功能
  10. python爬虫(三)——多线程+正则匹配下载图片(wallheaven图片网站)