摘要

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

1.D-H建模

三个两两相互垂直的XYZ轴构成欧几里得空间,存在六个自由度:沿XYZ平移的三个自由度,绕XYZ旋转的三个自由度。在欧几里得空间中任意线性变换都可以通过这六个自由度完成。

Denavit-Hartenberg提出的D-H参数模型能满足机器人学中的最小线性表示约定,用4个参数就能描述坐标变换:绕X轴平移距离a;绕X轴旋转角度alpha;绕Z轴平移距离d;绕Z轴旋转角度theta。

2.标准D-H模型和改进D-H模型

对比来看参数并没有改变,标准的 D-H 模型是将连杆的坐标系固定在该连杆的输出端(下一关节),也即坐标系i-1与关节i对齐;改进的 D-H模型 则是将坐标系固定在该连杆的输入端(上一关节),也即坐标系i-1与关节对齐i-1。(具体建模可见后面的博客)

3.利用 Matlab Robotic Toolbox 建立机器人模型

alpha:连杆扭角;

a:连杆长度;

theta:关节转角;

d:关节距离;

offset:偏移

clear;

clc;

%建立机器人模型

% theta d a alpha offset

L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数

L2=Link([pi/2 0 0.56 0 0 ]);

L3=Link([0 0 0.035 pi/2 0 ]);

L4=Link([0 0.515 0 pi/2 0 ]);

L5=Link([pi 0 0 pi/2 0 ]);

L6=Link([0 0.08 0 0 0 ]);

robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman

robot.plot([0,pi/2,0,0,pi,0]);%输出机器人模型,后面的六个角为输出时的theta姿态

本段代码取名为代码段1,效果图如下:

在代码段1的后面加入display函数可以输出模型的一些参数

robot.display();

其中表格为D-H参数,grav为重力加速度矢量,base为基坐标系的齐次矩阵,tool为工具坐标系和末端连杆的坐标系之间的变换矩阵。

在代码段1的后面加入teach指令,则可调整各个关节角度,能够让初学者更好的了解六轴机器人的结构。

teach(robot);

4.运动学正逆解

运动学正解:根据6个关节角结算出末端位姿。

运动学逆解:根据末端位姿结算出关节角,这里会存在8组逆解,本文中用的反解函数会智能输出最优的一组解。

正解程序:

clear;

clc;

%建立机器人模型

% theta d a alpha offset

L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数

L2=Link([pi/2 0 0.56 0 0 ]);

L3=Link([0 0 0.035 pi/2 0 ]);

L4=Link([0 0.515 0 pi/2 0 ]);

L5=Link([pi 0 0 pi/2 0 ]);

L6=Link([0 0.08 0 0 0 ]);

robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman

theta=[0,0,0,0,0,0];%指定的关节角

p=robot.fkine(theta)%fkine正解函数,根据我们给定的关节角theta,求解出末端位姿p

q=robot.ikine(p)%ikine逆解函数,根据我们给定的末端位姿p,求解出关节角q

我们可以查看p和q,对比theta和q,发现是一致的(实际情况中并不是完全一致,会有一点偏差,我这里选的点特殊了)。

5.轨迹规划

在实际应用中,我们一般都是知道末端的轨迹,然后使机器人动作。本文的例子是根据给定两个点的值,得到末端位姿,根据末端位姿再来规划轨迹。

clear;

clc;

%建立机器人模型

% theta d a alpha offset

L1=Link([0 0.4 0.025 pi/2 0 ]); %定义连杆的D-H参数

L2=Link([pi/2 0 0.56 0 0 ]);

L3=Link([0 0 0.035 pi/2 0 ]);

L4=Link([0 0.515 0 pi/2 0 ]);

L5=Link([pi 0 0 pi/2 0 ]);

L6=Link([0 0.08 0 0 0 ]);

robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','manman'); %连接连杆,机器人取名manman

T1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿

T2=transl(0,0.5,0);%根据给定终止点,得到终止点位姿

q1=robot.ikine(T1);%根据起始点位姿,得到起始点关节角

q2=robot.ikine(T2);%根据终止点位姿,得到终止点关节角

[q ,qd, qdd]=jtraj(q1,q2,50); %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数

grid on

T=robot.fkine(q);%根据插值,得到末端执行器位姿

plot3(squeeze(T(1,4,:)),squeeze(T(2,4,:)),squeeze(T(3,4,:)));%输出末端轨迹

hold on

robot.plot(q);%动画演示

蓝色细线就是规划的轨迹,六轴机器人manman将会动态演示从起始点到终止点的过程。

PS:本文的所有程序都是调用现成的函数,仅为大家建立一个概念,后面的博客将给大家讲解各个函数写法。

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

  1. 【Matlab 六自由度机器人】运动学正解(附MATLAB机器人正解完整代码)

    [Matlab 六自由度机器人]求运动学正解 往期回顾 前言 正文 一.运动学正解 1. 齐次变换矩阵 2. 总变换 二.代码实现 1. 定义各连杆参数 2. 齐次变换矩阵及总变换 3. 代码运行结果 ...

  2. 【Matlab 六自由度机器人】关于机器人运动学反解的有关问题

    [Matlab 六自由度机器人]关于机器人运动学反解的有关问题 近期更新 前言 正文 反解的三类问题 一.中间点在工作空间之外 二.在奇异点附近关节速度骤增 三.起始点和目标点有多重解 总结 参考资料 ...

  3. matlab 4轴机器人建模,SCARA机器人运动学分析及MATLAB建模仿真.pdf

    SCARA机器人运动学分析及MATLAB建模仿真.pdf 100 SCARA机器人运动学分析及 MATLAB建模仿真 SCARA机器人运动学分析及MATLAB建模仿真 KinematicAnalysi ...

  4. 【Matlab 六自由度机器人】定义标准型及改进型D-H参数建立机器人模型(附MATLAB建模代码)

    Matlab建立六自由度机器人模型 近期更新 前言 1.Matlab机器人工具箱 2.研究对象-六自由度机器人 正文 一.D-H参数(Denavit–Hartenberg parameters) 1. ...

  5. 【Matlab 六自由度机器人】关于灵活工作空间与可达工作空间的理解(附MATLAB推导代码)

    [Matlab 六自由度机器人]灵活工作空间与可达工作空间的解释 往期回顾 前言 正文 一.两种工作空间的定义及区别 1. 可达工作空间 2. 灵活工作空间 二.辅助理解工作空间的代码 1. 可达工作 ...

  6. 【Matlab 六自由度机器人】基于蒙特卡罗方法(Monte Carlo Method)构建机器人工作空间(附MATLAB建模仿真完整代码)

    [Matlab 六自由度机器人]基于蒙特卡洛法构建工作空间 往期回顾 前言 正文 一.蒙特卡洛方法及机器人工作空间的概述 1. 蒙特卡洛法 2. 机器人工作空间 二.rand函数的应用 1. rand ...

  7. 【Matlab 六自由度机器人】系列文章汇总

    [Matlab 六自由度机器人]系列文章汇总 前言 正文 ⧫[主线]\blacklozenge \fcolorbox{black}{aqua}{[主线]}⧫[主线]​ ⧫[补充说明]\blackloz ...

  8. 机器人手眼标定 (四轴六轴都适用)

    机器人手眼标定 (四轴/六轴都适用) 问题解析 ​ 机器人手眼标定分为两种情况:eye-in-hand和eye-to-hand,即传感器是否安装在机器人手抓末端.不管是那种情况,手眼标定的科学问题都是 ...

  9. 牛顿斯科特MATLAB求积分,详解Matlab求积分的各种方法

    详解Matlab求积分地各种方法 一.符号积分 符号积分由函数int来实现.该函数地一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示地默认变量对被积函数或符号 ...

最新文章

  1. Java/Android 调用类里面的方法
  2. 电力系统继电保护原理及仿真_电力系统继电保护(529页)
  3. PInvoke调用导致堆栈不对称
  4. 分布式数据库切分规则介绍
  5. ner 评估指标_序列标注算法评估模块 seqeval 的使用
  6. 【网络编程】用Socket实现聊天小程序
  7. 大项目之网上书城(八)——数据库大改添加图书
  8. mysql mvcc gap lock_为什么说 MVCC 和 Gap Lock 解决了 MySQL 的幻读问题
  9. 八、Linux系统日志管理
  10. 某程序员9点离岗被主管罚款200,写bug扣光主管年终奖?
  11. 基于windows的IDS配置完全攻略五
  12. Java二:计算机语言发展进程 以及 JAVA的发展、特性、版本介绍
  13. python的基本函数图像_python绘制基本初等函数图像
  14. Windows 10 低版本驱动数字签名更新的必要性
  15. L314 单音节词读音规则(二)-元音字母发音规则
  16. matlab eval 函数的使用
  17. MD5与SHA加密算法
  18. 清华张敏教授:个性化推荐研究进展(可解释性、鲁棒性和公平性)
  19. 超火爆的人类一败涂地Human Fall Flat Mac中文版(支持m1)
  20. win10没有wifi列表,显示不出可用WiFi

热门文章

  1. 干货 | 利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码解析)
  2. 理论学习与实践的差距:框架开源与不可逆的趋势
  3. 普通文件下载 + 前端获取后端返回的文件流并下载
  4. C3P0数据库连接池源代码
  5. python两个集合相加_两个集合相加java
  6. 彻底清除Android Studio 安装记录
  7. npm 模块 移除_node.js - 全局删除所有npm模块的命令?
  8. 如何快速获取知识-方法的方法
  9. 大师兄Smarty教程修正版(1).
  10. KdPrint使用方法