【基于Matlab Robotics Toolbox的Dobot机械臂运动规划】
系列文章是我在学习robotics toolbox中所做工作的记录,方便自己后面复习、改进。
基于Matlab R2018b 9.5; Peter Corke的Robotics Toolbox 10.3.1
(1)主要介绍了机器人D-H表建立、画直线和画圆

0.软件环境

MATLAB 版本: 9.5.0.944444 (R2018b)
Robotics Toolbox for MATLAB 版本:10.3.1

1.Dobot机械臂结构模型

为了对机械臂进行建模,从越疆官网下载Dobot Magician User Guide V1.5.1。
由用户手册图3.2及表3.2,

得到机械臂的Denavit-Hartenberg参数表:

连杆i 关节变量θ 连杆偏距d 连杆长ai-1 轴转角αi-1 变量范围
1 θ1 138 0 pi/2 rad -90°~90°
2 θ2 0 135 0 rad 0°~85°
3 θ3 0 147 0 rad -90°~10°

其中,大臂与底座z轴成90°(pi/2)角。
于是有:

clear all;close all;
%定义连杆%
%        theta  d  a  alpha
L1 = Link([0   138 0   pi/2]);
L2 = Link([0    0 135   0]);
L3 = Link([0    0 147   0]);
%定义关节角范围%
L1.qlim = [deg2rad(-90) deg2rad(90)];
L2.qlim = [deg2rad(0) deg2rad(85)];
L3.qlim = [deg2rad(-90) deg2rad(10)];
%连接连杆%
dobot = SerialLink([L1 L2 L3],'name','Dobot');

这里定义连杆时使用的是弧度单位;定义关节角范围时,使用了deg2rad()。应注意区分。

机械臂搭建完成后,可以使用dobot.plot([0 0 0 ]);显示机器人,然后使用dobot.teach;可以用滑块驱动机器人。

plot有时候会弹出
警告: floor tiles too small, making them 300.000000 x bigger - change the size or disable them
可改成dobot.plot([0 0 0],'tilesize',300);

2.画一个两点之间的线段


先做一个简单的demo试试吧。
在teach中拖动滑块,找到两个合适的点,用ctraj做运动规划。
这里用了(200,120,40)和(220,-150,220)两个点。

在robotics toolbox的帮助文档里,ctraj()要求输入始末点的齐次变换矩阵,其中transformation matrix可用transl()得到。
于是有:

%直线规划测试%
T1 = transl(200,120,40);   %起点
T2 = transl(220,-150,220); %终点
%ctraj 利用匀加速匀减速规划轨迹%
T = ctraj(T1,T2,50);
Tj = transl(T);
%输出末端轨迹%
plot3(Tj(:,1),Tj(:,2),Tj(:,3));
grid on;

于是得到了由起点至终点的一系列齐次变换矩阵T,接下来用ikine进行逆运动学求解。
这时,如果直接使用q = dobot.ikine(T);会报错:

错误使用 SerialLink/ikine
Number of robot DOF must be >= the same number of 1s in the mask matrix

因ikine不能直接解6自由度以下的机器人。查robotics toolbox帮助文档,发现SerialLink.ikine的options里有一项'mask',M
mask vector (6 × 1) that correspond to translation in X, Y and Z, and rotation about X, Y and Z respectively.
我这里没有XYZ三个方向的rotation自由度,应构造一个mask矩阵[1 1 1 0 0 0]。
于是有:

%当反解的机器人对象的自由度少于6时,要用mask vector减少自由度%
q = dobot.ikine(T,'mask',[1 1 1 0 0 0]);
%调整了一下角度,方便观察%
view(113,23);
dobot.plot(q,'tilesize',200);

画直线结果如下:

3.画一个圆

参考上面画直线的方法,发现只要有起点到终点的一系列齐次变换矩阵,便可由ikine进行逆运动学求解,就能让机械臂动起来。
画一个以(175,0,5)为圆心,半径为50的圆。代码如下:

%定义连杆%
%        theta  d  a  alpha
L1 = Link([0   138 0   pi/2]);
L2 = Link([0    0 135   0]);
L3 = Link([0    0 147   0]);
%定义关节角范围%
L1.qlim = [deg2rad(-90) deg2rad(90)];
L2.qlim = [deg2rad(0) deg2rad(85)];
L3.qlim = [deg2rad(-90) deg2rad(10)];
%连接连杆%
dobot = SerialLink([L1 L2 L3],'name','Dobot');%定义圆%
N = (0:0.5:100)';
center = [175 0 5];
radius = 50;
theta = ( N/N(end) )*2*pi;
points = (center + radius*[cos(theta) sin(theta) zeros(size(theta))])';
plot3(points(1,:),points(2,:),points(3,:),'r');%pionts矩阵是“横着”的,取其转置矩阵,进一步得到其齐次变换矩阵
T = transl(points');%当反解的机器人对象的自由度少于6时,要用mask vector进行忽略某个关节自由度%
q = dobot.ikine(T,'mask',[1 1 1 0 0 0]);
hold on;
dobot.plot(q,'tilesize',300);

画圆结果如下:

基于Matlab Robotics Toolbox的Dobot机械臂运动规划(1)相关推荐

  1. 基于Matlab Robotics Toolbox的Dobot机械臂运动规划(3)

    [基于Matlab Robotics Toolbox的Dobot机械臂运动规划]系列文章是我在学习robotics toolbox中所做工作的记录,方便自己后面复习.改进 软件环境 : Matlab ...

  2. 基于Matlab Robotics Toolbox的Dobot机械臂运动规划(4)

    [基于Matlab Robotics Toolbox的Dobot机械臂运动规划]系列文章是我在学习robotics toolbox中所做工作的记录,方便自己后面复习.改进 软件环境 : Matlab ...

  3. 基于Matlab Robotics Toolbox的Dobot机械臂运动规划(2)

    [基于Matlab Robotics Toolbox的Dobot机械臂运动规划]系列文章是我在学习robotics toolbox中所做工作的记录,方便自己后面复习.改进. 基于Matlab R201 ...

  4. 基于matlab的mk2三自由度机械臂轨迹规划及控制器仿真设计

    基于matlab的mk2三自由度机械臂轨迹规划及控制器仿真设计(报告+ppt) 摘 要:本文的研究对象为EEZYbotARM MK2三自由度机械臂,分析了其机械结构,建立D-H参数表,同时在MATLA ...

  5. 实例介绍机械臂运动规划及前沿研究方向

    origin: https://www.leiphone.com/news/201703/0JJyEB2eqdRe9XS8.html 雷锋网新智造按:运动规划 (Motion Planning) ,有 ...

  6. MATLAB算法实战应用案例精讲-【人工智能】基于机器视觉的机器人及机械臂运动规划

    目录 前言 几个高频面试题目 移动机器人的移动和机械臂的路径规划之间的异同

  7. MATLAB算法实战应用案例精讲-【人工智能】基于机器视觉的机器人及机械臂运动规划(补充篇)

    目录 前言 几个高频面试题目 机器人抓取时怎么定位的?用什么传感器来检测? 相机标定

  8. 机械臂运动空间的计算_机械臂运动规划(Motion Planning)

    写作说明: 本文主要介绍一下机械臂的运动规划(Motion Planning on Manipulators).之所以写这篇文章,是因为受到人邀请回答相应问题,而刚好最近在学<Modern Ro ...

  9. 使用MoveIt配置机械臂运动规划-1.导入URDF文件

    以gluon6L3机械臂为模型来进行操作,已经默认导出urdf文件,存在gluon_6l3_description文件夹下. 一.配置rviz 1.将gluon_6l3_description文件夹移 ...

最新文章

  1. Python3数据分析与挖掘建模实战
  2. AngularJS基于MVC的复杂操作案例
  3. Spring之泛型依赖注入
  4. Gitlab+Gerrit+Ldap+nginx+mysql 之Gerrit搭建与配置(一)
  5. 理解快速生成树协议(RSTP)(二)
  6. 五桌面工具来创建优秀的Windows环境
  7. [NOI1995]石子合并
  8. B端——复杂业务表单设计
  9. 解决vue-cli使用组件报错
  10. 【华为云技术分享】云小课 | SAP HANA高可用之实战演练
  11. 高通骁龙712移动平台正式发布!整体性能提升10%
  12. 【bzoj1951】【古代猪文】Lucas定理+欧拉定理+孙子定理
  13. 接口参数使用RequestBody和RequestParam注解的场景
  14. 4亿线上用户性能保证:Linked Redliner架构解密
  15. Item 22. 模板方法与曲线救国(Template Method)
  16. JAVA基础编程——数据库编程
  17. queryDsl初学
  18. Python-Numpy练习
  19. scree 中的几个内置对象
  20. 【视野】中国的程序员培训是不是有问题?

热门文章

  1. 发现苹果的MacOS支持图片OCR文字识别
  2. 【重识云原生】第六章容器6.4.2.3节——Pod使用(下)
  3. html手机偏左,判断方向盘跑偏有妙招 一部手机就搞定
  4. 【Golang】golang实现发送微信服务号模板消息
  5. 软件测评中心▏软件验收正式测试和非正式测试优缺点有哪些?
  6. MySQL性能优化:SQL慢查询优化,索引优化,表优化
  7. 633 - Find the Duplicate Number
  8. Postgresql源码(66)insert on conflict语法介绍与内核执行流程解析
  9. TokenInsight 与 BitUniverse 达成战略合作,用数据提高收益降低风险
  10. 电脑无线上有个红叉,解决方法