下载链接:包括matlab程序+word报告+视频动画,具体如下图
下载链接:版本二
下载链接:版本三
下载链接:版本三
一、 目的
1、设计一个六自由度机器人,至少包含一个伸缩关节,要求机器人工作空间能满足分拣工位要求。
2、根据自己设计的机器人,建立DH坐标系,设定各关节变量的取值范围,并列出齐次变换矩阵并在matlab进行仿真。
二、内容
1、下载并安装MATLAB里的 Robotic机器人工具箱。
2、编写机器人位姿运动学方程,即给定关节变量,求解机器人末端相对于基坐标的齐次变换矩阵。并在此基础上,用工具箱里的命令fkine验证程序的正确性。
3、编写机器人速度运动学中求解雅克比矩阵的程序,并在此基础上,用工具箱里的命令jacob0验证程序的正确性。
4、使用机器人工具箱建立机器人连杆模型(如图3),并在此基础上,绘制机器人工作空间。
图3机器人连杆模型
5、利用机器人工具箱里的ikine命令求取机器人运动学逆解,基本要求是末端实现位置逆解。利用逆解完成简单的末端路径仿真,例如控制机械臂末端从传送带运动到篮筐的四个角落。
6、自行选定机器人末端抓取物品的起点和终点,以及机器人末端完成任务所需的时间。并在此基础上,利用机器人学轨迹规划的常用方法,对其做关节空间的轨迹规划。需要注意的是,避免在运动过程中使末端碰到障碍。取0.1s为时间步长,利用求解雅克比矩阵的程序,每一个时间步长,求一次雅克比矩阵行列式,并画出其与时间的关系。
三、程序
定义机器人:
%六连杆机器人模型
p=pi/2
% theta d a alpha
L(1)=Link([0, 400, 0, 0],'modified')
L(2)=Link([0, 0, 0, p],'modified')
L(3)=Link([0, 0, 300, 0],'modified')
L(4)=Link([0, 0, 300, 0],'modified')
L(5)=Link([0, 0, 0, p],'modified')
L(6)=Link([0, 0, 0, 0],'modified')
L(1).qlim = pi/180*[-180 180];
L(2).qlim = pi/180*[0 180];
L(3).qlim = pi/180*[-90 90];
L(4).qlim = pi/180*[0 180];
L(5).qlim = pi/180*[-180 180];
L(6).qlim = [0 400];
L(6).jointtype='P'
six_link=SerialLink(L,'name','fivelink')
根据DH参数求解变换矩阵的函数trans:
%输入JD,即6个关节变量的值,求解正运动方程
function [ T ] = trans( theta, d, a, alpha )
T =[
cos(theta), -sin(theta), 0, a;
sin(theta)*cos(alpha),cos(theta)*cos(alpha),-sin(alpha),-d*sin(alpha);
sin(theta)*sin(alpha),cos(theta)*sin(alpha),cos(alpha), d*cos(alpha);
0, 0, 0, 1
];
end
正向运动学:
%JD为输入的1*6的数组,代表6个关节变量
function [ T06 ] = fkine(JD)
if nargin<2; end
T01 =trans( JD(1), 400, 0, 0 );
T12 =trans( JD(2), 0, 0, pi/2 );
T23 =trans( JD(3), 0, 300, 0 );
T34 =trans( JD(4), 0, 300, 0 );
T45 =trans( JD(5), 0, 0, pi/2 );
T56 =trans( 0, JD(6), 0, 0 );
T06 =T01*T12*T23*T34*T45*T56;
end
求解雅可比:
略 。。。
工作空间:
略 。。。
轨迹规划:
略 。。。
关节空间的轨迹规划,求解雅克比行列式:
略 。。。
四、实验结果
1.机器人模型:
由5个转动关节一个移动关节组成,最后的关节为移动关节
DH参数:
机器人仿真模型:
2.求解齐次变换矩阵,使用工具箱里的命令fkine验证:
q为关节变量,fkine()为自行编写的函数,six_link.fkine()为工具箱函数,结果一致:
4.工作空间:
蓝色点形成的区域就是工作空间:
5.逆解仿真
定义了四个点,逆解后完成路径规划,规划结果见动画
雅可比行列式与时间的关系:
下载链接:包括matlab程序+word报告+视频动画,具体如下图
下载链接:版本二
下载链接:版本三
下载链接:版本三
文章浏览阅读1.3k次。记录2021年全国大学生竞赛而下载安装的ubuntu18.04系统,原因虚拟机下的系统有些卡顿,电脑配置hold不住,所以……话不多说,步入正题。1、 安装前的准备工作1.获取ubuntu系统安装包,这里选择Ubuntu 18.04 LTS(长期支持)桌面版,(其下载链接为:http://releases.ubuntu.com/18.04/ubuntu-18.04.5-desktop-amd64.iso),下载下来的ISO镜像文件为ubuntu-18.04.5-desktop-amd64.iso
文章浏览阅读1.1k次。1、关于到底要不要加看门狗。现在看来是要加的。跑飞,不意味着一定会停在某个地方不同,可能是到处乱窜,所以就可能跑到擦写flash的地方,所以通过狗复位初始化,让程序重新运行,这样就至少不会让片子弄坏,除非复位后又跑飞。无论如何,看门狗就是最稳妥的做法。2、擦写flash驱动放在RAM,通过通信传输,这样进一步降低了非人为原因擦写flash的可能性。 ST官方的一篇文章非常好《干扰环
文章浏览阅读2k次,点赞4次,收藏6次。**使用存储过程刷新所有视图sp_refreshview刷新多个视图**问题:表添加字段后相关视图错位--定义视图名称和异常视图名称变量DECLARE @strRefreshViewName NVARCHAR(4000), @streErorView NVARCHAR(4000)--定义获取所有视图名称的游标DECLARE cursorViewName CURSOR localFOR SELECT name FROM sysobjects WHER_sqlserver sp_refreshview
文章浏览阅读2.5k次。sudo chown -R $(whoami) ~/.npm
文章浏览阅读839次。2019年6月10日9:40Seed Metric1. 重发布技术 a. 直连路由(C)重分布 i. 不需要考虑 Seed Metric b. 静态路由(S)重分布 i. 不需要考虑 Seed Metric ii. S重分布进RIP/EIGRP,静态和默认路由都会重分布. iii. S重分布进OSPF,只能重分布进...
文章浏览阅读514次。问题:SyntaxError: Non-ASCII character ‘\xe4’ in file意思是说,在文件中存在非ASCII字符;方法:建议在文件头追加:# -*- coding: utf-8 -*更复杂的形式要进行编码和解码_found at least '\xe8
文章浏览阅读2.3w次,点赞12次,收藏6次。1.原因java程序发送邮件时,用户认证失败导致如下错误:org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Error: xxxxxxx: http://...
文章浏览阅读3.1k次。前面我们已经简单的介绍了Espresso的环境搭建 Espresso 自动化测试(一) 以及有关Espresso的组件构成。下来我们来看看Espresso的一些API,这里有一张图片包含了我们前面说的到 Matchers,ViewActions 和 ViewAssertions 。用法简单的用法我们就不在这里说明了,我们今天来讲下如何获取到一个textView中的内容,其实从刚才的内容的API中_espresso 获取控件的文本
文章浏览阅读391次。1)清华大学精品课程http://qcourse.tsinghua.edu.cn/index.jsp?null
文章浏览阅读2.9k次。作者:MRiServer体系结构及扩展点iServer体系结构: iServer 服务框架是一个三层结构的体系,他们分别是 GIS 服务提供者,GIS 服务组件层和服务接口层。这种三层结构首先实现具体的 GIS 功能实体,再次通过第二层次的模块将 GIS 功能实体封装为粗粒度的组件,在功能实体与第二层的 GIS 服务组件...
文章浏览阅读1k次。LinkedList实现原理(JDK1.8)LinkedList底层采用双向链表,如果对链表这种结构比较熟悉的话,那LinkedList的实现原理看明白就相当容易。链表通过“指针”将一组零散的内存块串联起来使用,每一个元素(节点)通过指针指向它的下一个元素,最后一个节点的下一个指向为null,而双向链表就是除头节点的每一个元素都有指针同时再指向它的上一个元素。链表不同于数组,由于其地址的不连...
文章浏览阅读928次,点赞6次,收藏20次。个人认为自学最大的门槛在于:用怎样的形式来输出所学知识,以保证对所学知识的理解是深刻的。我选择写博客来记录自学过程中的疑惑和答案。SystemVerilog Testbench Lab系列博客将作为我这段时间学习sv的输出,希望能够学会sv在验证中的使用。Synopsys的sv_lab是学习sv的入门资料(EETOP上可以搜到),这一系列的博客都将基于此展开。了解DUT创建测试平台之前,阅读rtl代码了解DUT。验证人员需要关注的是DUT实现了什么功能,不必过分关注实现的细节。在Synopsys的la_systemverilog testbench lab guide2017