《智能机器人技术应用》课件 项目一 机械臂移动与物体抓取_第1页
《智能机器人技术应用》课件 项目一 机械臂移动与物体抓取_第2页
《智能机器人技术应用》课件 项目一 机械臂移动与物体抓取_第3页
《智能机器人技术应用》课件 项目一 机械臂移动与物体抓取_第4页
《智能机器人技术应用》课件 项目一 机械臂移动与物体抓取_第5页
已阅读5页,还剩211页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目一机械臂移动与物体抓取创灵实验平台机械臂安装与机械臂空间坐标任务二职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二

机械臂安装与机械臂空间坐标了解并掌握安装机械臂的详细步骤(详细步骤请参考说明书);学习机械臂的空间坐标(即x、y、z轴上)表示;了解并测试机械臂运动范围极限测试。掌握uArm机械臂的安装方法;了解机械臂空间坐标;了解机械臂运动范围。职业能力目标01实验目的实验内容职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二

机械臂安装与机械臂空间坐标

此任务要求同学们了解并掌握安装机械臂的详细步骤(详细步骤请参考说明书),学习如何标识并使用机械臂的空间坐标(即x、y、z轴上),以及完成机械臂运动范围极限测试。任务描述任务要求掌握uArm机械臂的安装方法,并成功完成机械臂安装与搭建;了解机械臂空间坐标,完成机械臂移动的相关实验;了解机械臂运动范围并完成机械臂极限范围测试。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二

机械臂安装与机械臂空间坐标任务分析想象一下在未来,机械臂会有哪些用途?我们可以设置多种机械臂模式来简化我们的生活吗?有哪些方法?三.根据自己的了解,要怎样去学习使用机械臂,可以促进自己进一步地学习?任务分析与计划03任务计划表项目名称创灵实验平台任务名称机械臂安装与机械臂空间坐标计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二

机械臂安装与机械臂空间坐标机械臂204知识储备异步装饰器1什么是装饰器?04

器指的是工具,可以定义成成函数,装饰指的是为其他事物添加额外的东西点缀。

合到一起的解释:

装饰器指的定义一个函数,该函数是用来为其他函数添加额外的功能,就是拓展原来函数功能的一种函数思考一下,我们要怎么使用装饰器呢?为何要用装饰器?04开放封闭原则

开放:指的是对拓展功能是开放的;

封闭:指的是对修改源代码是封闭的。

装饰器就是在不修改被装饰器对象源代码以及调用方式的前提下为被装饰对象添加新功能。思考一下,我们要怎么使用装饰器呢?异步装饰器04

Python装饰器:可以让被装饰的函数在不修改代码的情况下增加额外的功能,装饰器本质上是一个函数。异步装饰器件:即非阻塞,意味着在执行某项任务时候不会阻塞后续或其他任务的执行的Python装饰器。思考一下,我们要怎么使用异步装饰器呢?05任务实施机械臂2异步装饰器13什么是机械臂?04

机械臂是指高精度,多输入多输出、高度非线性、强耦合的复杂系统。因其独特的操作灵活性,已在工业装配、安全防爆等领域得到广泛应用。

机械臂是一个复杂系统,存在着参数摄动、外界干扰及未建模动态等不确定性。因而机械臂的建模模型也存在着不确定性,对于不同的任务,需要规划机械臂关节空间的运动轨迹,从而级联构成末端位姿。认识机械臂04

uArm机械臂为本平台所使用的机械臂,它是一款桌面级四轴迷你开源机械臂,其各种的资源可以免费在网络下载获取,其源代码在网络代码社区GitHub上下载,它使用Arduino主板制作作为控制主板(教材使用ATmega2560为核心的控制板),UFACTORY公司的核心产品之一,其灵感来自于ABB码垛机械人IRB460如图2-3-1IRB460机械臂。团队将机械臂的价格做到了“消费级”,尺寸都做到了“桌面级”。认识机械臂04智能机械臂-你的第三只手机械臂可以变成你的第三只手,无论是书写、绘画还是3D打印、激光雕刻都能胜任。1)让它变成一个智能的绘画机器,如下图机械臂全能画手所示。

2)让它变成帮忙递饮料的手臂,如图下图递饮料所示。

3)让他变成一个写字机器人,如下图写字机器人所示。4)让他变成国际象棋棋手,如下图所示国际象棋棋手。

5)让他变成围棋棋手,如下图所示国际象棋棋手。04认识机械臂机械臂的结构是什么样的呢?包括一个连杆式的机械臂,一款基于开源硬件Arduino的开发板用于控制整个操作,最大的特点是底部转盘,所有动力装置都装在这个地方以减少机械臂部分的重量,从而减少惯性动作对稳定性的影响,同时也能增加机械臂的负载能力以提高效力。在功能上与可以与Leapmotion(体感控制器)合作,通过手势操作机械臂,可以比如操控吸盘吸s附非规则物体或者用机械臂操控规则物体。在Processing后台,你也可以对Leapmotion(体感控制器)所开放的接口编程,把变成你定制化的机械臂。有X、Y、Z,三个移动动作组成。支持180度旋转,如头部使用气管,则自由度为170度左右。X轴则对应平面状态下的前后移动,Y轴则对应平面状态下的左右移动,Z轴则为机械臂的上下移动。注:在本实验教程中仅使用吸泵型手抓,如需使用其他类型手抓,请在教师指导下使用。机械臂的结构04机械臂的研究背景04

近年来,随着机器人技术的发展,应用高速度、高精度、高负载自重比的机器人结构受到工业和航空航天领域的关注。由于运动过程中关节和连杆的柔性效应的增加,使结构发生变形从而使任务执行的精度降低。所以,机器人机械臂结构柔性特征必须予以考虑,实现柔性机械臂高精度有效控制也必须考虑系统动力学特性。柔性机械臂是一个非常复杂的动力学系统,其动力学方程具有非线性、强耦合、实变等特点。机械臂的研究背景04

而进行柔性臂动力学问题的研究,其模型的建立是极其重要的。柔性机械臂不仅是一个刚柔耦合的非线性系统,而且也是系统动力学特性与控制特性相互耦合即机电耦合的非线性系统。动力学建模的目的是为控制系统描述及控制器设计提供依据。一般控制系统的描述(包括时域的状态空间描述和频域的传递函数描述)与传感器/执行器的定位,从执行器到传感器的信息传递以及机械臂的动力学特性密切相关。机械臂的建模理论04

柔性机械臂动力学方程的建立主要是利用Lagrange方程和NeWton-Euler方程这两个最具代表性的方程。另外比较常用的还有变分原理,虚位移原理以及Kane方程的方法。而柔性体变形的描述是柔性机械臂系统建模与控制的基础。因此因首先选择一定的方式描述柔性体的变形,同时变形的描述与系统动力学方程的求解关系密切。机械臂的控制策略04

对柔性机械臂的控制一般有如下方式:

1)刚性化处理。完全忽略结构的弹性变形对结构刚体运动的影响。例如为了避免过大的弹性变形破坏柔性机械臂的稳定性和末端定位精度,NASA的遥控太空手运动的最大角速度为0.5deg/s。机械臂的控制策略04

2)前馈补偿法。将机械臂柔性变形形成的机械振动看成是对刚性运动的确定性干扰而采用前馈补偿的办法来抵消这种干扰。德国的BerndGebler研究了具有弹性杆和弹性关节的工业机器人的前馈控制。张铁民研究了基于利用增加零点来消除系统的主导极点和系统不稳定的方法,设计了具有时间延时的前馈控制器,和PID控制器比较起来,可以更加明显的消除系统的残余振动。SeeringWarrenP.等学者对前馈补偿技术进行了深入的研究。机械臂的控制策略04

3)加速度反馈控制。KhorramiFarShad和JainSandeep研究了利用末端加速度反馈控制柔性机械臂的末端轨迹控制问题。机械臂的控制策略04

4)被动阻尼控制。为降低柔性体相对弹性变形的影响选用各种耗能或储能材料设计臂的结构以控制振动。或者在柔性梁上采用阻尼减振器、阻尼材料、复合型阻尼金属板、阻尼合金或用粘弹性大阻尼材料形成附加阻尼结构均属于被动阻尼控制。近年来,粘弹性大阻尼材料用于柔性机械臂的振动控制已引起高度重视。RossiMauro和WangDavid研究了柔性机器人的被动控制问题。机械臂的控制策略04

5)力反馈控制法。柔性机械臂振动的力反馈控制实际上是基于逆动力学分析的控制方法,即根据逆动力学分析,通过臂末端的给定运动求得施加于驱动端的力矩,并通过运动或力检测对驱动力矩进行反馈补偿。机械臂的空间坐标04

机械臂的末端在移动过程中是通过空间坐标进行定位,空间坐标分为x轴、y轴、z轴,x:前后方向坐标,y:机械臂左右方向坐标,z:机械臂高度坐标,通过控制x、y、z轴的坐标设置来控制机械臂的定点移动,如图所示:职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二

机械臂安装与机械臂空间坐标05任务实施机械臂的空间坐标与坐标获取2安装机械臂1机械臂空间坐标极限测试与验证3机械臂安装与机械臂空间坐标任务二创灵实验平台安装机械臂(此部分仅介绍吸盘末端安装流程,详细流程请参考安装手册)步骤一:将吸盘装在第四轴电机上,锁紧手拧螺丝注意:如果需要取下吸盘,请松开手拧螺丝步骤二:连接第四轴电机线,吸管及限位开关机械臂安装与机械臂空间坐标任务二创灵实验平台*电动夹子安装(此章为选学请在教师指导下使用,避免设备损坏)步骤一:如图所示,松开手拧螺丝,取下吸盘步骤二:如图所示,装上电动夹子,锁紧固定螺丝步骤三:如图所示,将电动夹子末端固定在机械臂上05任务实施机械臂的空间坐标与坐标获取2安装机械臂1机械臂空间坐标极限测试与验证3

在本小节中,我们已经了解了机械臂的空间坐标,那么我们如何去获取机械臂当前的坐标位置呢?机械臂空间坐标05获取机械臂当前位置的坐标机械臂空间坐标05步骤一:查看机械臂设备,当机械臂挂载到开发板上后,再执行获取坐标位置代码。!ls/dev/ttyACM*

注意:若存在/dev/ttyACM0文件,则表示机械臂已挂载到开发板上,如图所示:获取机械臂当前位置的坐标机械臂空间坐标05步骤二:将机械臂断电后末端移动到任意位置,然后接入电源,按下电源按钮,USB线连接到开发板,执行如下命令:fromuarm.wrapper

importSwiftAPIimporttimeswift=SwiftAPI()time.sleep(3)now_p=swift.get_position()print(now_p)若在机械臂挂载上开发板之前执行代码报错,可通过重启内核,如图所示,重新执行上述代码。获取机械臂当前位置的坐标机械臂空间坐标05步骤三:测试完机械臂当前坐标位置后,执行如下命令,断开机械臂连接:若在机械臂挂载上开发板之前执行代码报错,可通过重启内核,如图所示,重新执行上述代码。#断开机械臂连接swift.disconnect()05任务实施机械臂的空间坐标与坐标获取2安装机械臂1机械臂空间坐标极限测试与验证3机械臂测试极限范围分析我们要怎么了解机械臂的极限空间范围?我们要如何验证机械臂是否到了极限位置?要怎样合理减小误差?当机械臂达到极限位置后还会运动吗,如果继续运动会对机械臂造成怎样的影响?机械臂空间运动极限测试与验证05通过上面的思考,你是否对本任务要完成的任务有所了解?接下来我们进入机械臂运动空间范围测试的环节进行学习吧!机械臂空间运动极限测试与验证05机械臂重量极限测试下图为机械臂运动控制范围标识区域,以机械臂底座为原点,机械臂可在扇形区域内进行左右90°转向,前后346mm自由伸缩,如图所示:机械臂运动空间范围05那么我们如何去判断机械臂的高度以及所能吸附的物体重量多少呢?机械臂运动空间范围05相信大家在任务思考的时候已经看到了,机械臂在不同高度所能吸附物体的重量是根据机械臂的高度以及机械臂伸张的长度来影响的。接下来我们将进入实操部分,学习如何验证机械臂运动极限。机械臂空间运动极限测试05实验预览:运行下方代码,观察机械臂移动情况,当机械臂不再移动时,应立即运行stop()函数,记录最后的坐标值,详细操作如下图所示。机械臂空间运动极限测试05实验预览:@async_calldef

limit():

globalx

whileTrue:

ifstop_==

1:

breakx+=

3Y=

100Z=

80swift.set_position(x=x,y=y,z=z)

print("当前坐标:x={0},y={1},z={2}".format(x,y,z))time.sleep(1)

def

stop():

globalstop_stop_=

1swift.disconnect()

limit()stop()

#停止进程机械臂空间运动极限测试05实验预览:运行结束得到的效果如下图所示,机械臂运行到指定位置:可以看到机械臂运行到指定位置,观察得到的位置参数并记录机械臂空间运动极限测试05实验预览:我们在了解完将机械臂运行到指定位置之后,接下来我们来机型机械臂移动极限测试。

运行下方代码,观察机械臂移动情况,当机械臂不再移动时(观察机械臂运动的位置),应立即运行【stop()】函数,记录最后的坐标值。(详细代码请参考Jupyter中任务一、机械臂安装与机械臂空间坐标中的3.2机械臂运动范围极限测试的)@async_calldef

limit():

globalx

whileTrue:

ifstop_==

1:

breakx-=

3Y=100Z=80swift.set_position(x=x,y=y,z=z)

print("当前坐标:x={0},y={1},z={2}".format(x,y,z))time.sleep(1)

defstop():

globalstop_stop_=

1swift.disconnect()

limit()stop()

#停止进程代码说明:机械臂的空间坐标有3个变量分别为x、y、z三个坐标轴,通过控制两个变量不变,让另一个变量在递增或递降的方式,观察机械臂移动情况,当到某个坐标时,机械臂不再移动,则说明该坐标为极限坐标,即可判断该机械臂的在特点空间面上的极限值。

职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二

机械臂安装与机械臂空间坐标任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成机械臂空间运动范围极限测试与验证。(40分)40分

完成机械臂移动到指定位置,并记录。(25分)完成机械臂移动测试代码学习。(10分)没有完成机械臂移动到指定位置相关学习。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)能够主动学习并收集信息,有请教他人进行解决问题的能力(10分)不主动学习(0分)4课堂纪律(20%)设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分)20分

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分1、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二

机械臂安装与机械臂空间坐标任务小结07

在学习完本任务中的实验,大家有什么收获呢?大家了解了机械臂的极限运动范围了吗?可以独立完成机械臂极限运动测试吗?在学习完本小节后我们将开始进入机械臂运动脚本编写任务中进行学习。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二

机械臂安装与机械臂空间坐标任务拓展08在本项任务中,根据所学内容进行机械臂极限范围的测试,得到你所测出x、y、z轴所能达到的极限距离(注意:参数变动不宜过大,以免造成机械臂损坏)。1测试机械臂运动极限范围;1.根据所学使用代码块运行机械臂。解题

思路提示任务要求2在使用过程中不能造成机械臂损坏。谢谢大家学习项目一机械臂移动与物体抓取创灵实验平台SDK方式实现机械臂三维空间移动任务三职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三

SDK方式实现机械臂三维空间移动了解Python-SDK并掌握安装方法;了解Python-SDK控制机械臂的原理以及常用函数的使用;学习通过Python-SDK编写控制机械臂Python脚本方法并能够熟练自行编写对应脚本完成所需要求。了解Python-SDK;掌握Python-SDK安装方法;了解Python-SDK控制机械臂原理;掌握Python-SDK常用函数的使用;掌握使用Python-SDK编写控制机械臂Python脚本方法。职业能力目标01实验目的实验内容职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三

SDK方式实现机械臂三维空间移动

此任务要求同学们了解Python-SDK并掌握安装方法,了解Python-SDK控制机械臂的原理以及常用函数的使用,并学习通过Python-SDK编写控制机械臂Python脚本方法并能够熟练自行编写对应脚本完成所需要求。任务描述任务要求了解SDK、Python-SDK的原理;成功安装Python-SDK;完成Python-SDK控制机械臂原理学习与实验;完成使用Python-SDK编写控制机械臂Python脚本方法。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三

SDK方式实现机械臂三维空间移动任务分析思考一下,我们呢要如何通过SDK控制机械臂呢?我们要通过什么方式编写脚本,并学习相关知识呢?三.根据自己的了解,要怎样去应用所学知识,可以促进自己进一步地学习?任务分析与计划03任务计划表项目名称创灵实验平台任务名称SDK方式实现机械臂三维空间移动计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三

SDK方式实现机械臂三维空间移动05知识储备Python-SDK安装方法2Python-SDK1uArm-Python-SDK源码阅读3

Python-SDK是一个使用Python封装的用于Swift/SwiftPro机械臂基本控制的库,机械臂基本控制的库在本地【./uArm-Python-SDK-2.0/】文件夹下,github地址为:/uArm-Developer/uArm-Python-SDK。Python-SDK包含Swift/SwiftPro机械臂常用的基本操作,如移动、吸盘吸泵吸放、电动夹子基本使用以及各种拓展功能等等。丰富的函数,使得编写控制机械臂的编程变得极为简单。什么是Python-SDK?Python-SDK04Python-SDK04

SDK就是SoftwareDevelopmentKit的缩写,中问意思是:软件开发工具包。为了解释“SDK”我们引入API、动态连接库、导入库等概念:(1)API(ApplicationProgram--mingInterface):是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令。我们要怎么使用API?Python-SDK04

(2)DLL(DynamicLinkLibary)动态连接库:我们经常看到一些.dll格式的文件,这些文件就是动态连接库文件,其实也是一种可执行文件格式。跟exe文件不同的是,dll文件不能直接执行,他们通常由.exe在执行时装入内含有一些资源以及可执行的代码等。思考一下,在生活中我们有哪些地方用到了.dll?Python-SDK04

(3)导入库:导入库是为了在DLL中找到API的入口点而使用的,所以,为了使用API函数。我们要又跟API所对应的.H和.LIB文件,而SDK正式提供了一整套开发Windows应用程序所需的相关文件、范例和工具的“工具包”。思考一下,我们要怎么导入对应库?什么是API?04

API(ApplicationProgrammingInterface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令(动作)。其实早在DOS时代就有API的概念,只不过那个时候的API是以中断调用的形式(INT21h)提供的,我们要怎么使用API?什么是API?04

在DOS下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将AH置为30h后调用INT21h就可以得到DOS操作系统的版本号。而在Windows中,系统API是以函数调用的方式提供的。同样是取得操作系统的版本号,在Windows中你所要做的就是调用GetVersionEx()函数。我们要怎么使用API?什么是DLL?04

DLL,即DynamicLinkLibrary(动态链接库)。在Windows环境下含有大量.dll格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。跟.exe文件不同的是,.dll文件不能直接执行,通常由.exe在执行时装入,内含有一些资源以及可执行代码等。其实Windows的三大模块就是以DLL的形式提我们要怎么使用DLL?什么是DLL?04

供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了API函数的执行代码。为了使用DLL中的API函数,必须要有API函数的声明(.h)和其导入库(.lib),导入库可以先这样理解,导入库是为了在DLL中找到API的入口点而使用的。我们要怎么使用DLL?Python-SDK04

SDK包含了使用API的必需资料,所以也常把仅使用API来编写Windows应用程序的开发方式叫做“SDK编程”。而API和SDK是开发Windows应用程序所必需的东西,所以其它编程框架和类库都是建立在它们之上的,比如VCL和MFC,虽然比起“SDK编程”来有着更高的抽象度,但这丝毫不妨碍在需要的时候随时直接调用API函数。我们要怎么使用DLL?Python-SDK04

那么我们知道了SDK是一个万能的软件工具包,可以作为辅助工具帮助我们开发所需软件。那么我们要怎么使用SDK呢?SDK有哪些常用函数,我们要怎么去使用它们呢?那么接下来我们将要介绍一些SDK的常用方法,如下表1-11-1为官方展示的一些使用uArm-Python-SDK控制机械臂的方法:Python-SDK04连接机械臂:swift.connect()##连接机械臂swift.disconnect()##断开连接获取方法:swift.get_power_status()##获取工作状态swift.get_limit_switch()##获取工作信息swift.get_gripper_catch()##机械臂抓取swift.get_pump_status()##获取吸泵状态swift.get_mode()##获取模型swift.get_servo_attach(servo_id=2)##获取电机加载swift.get_servo_angle()##获取电机角度swift.get_polar()##获取坐标系swift.get_position()##获取位置swift.get_analog(0)##获取模拟swift.get_digital(0)##获取数据

SDK常用方法:Python-SDK04设置方法:swift.set_speed_factor(1)##设置速度参数swift.set_mode(mode=0)##设置模拟量值swift.set_wrist(90)swift.set_servo_attach()##设置电机加载swift.set_servo_detach()##设置电机分离swift.set_buzzer(frequency=1000,duration=2)swift.set_pump(on=True)##设置吸泵swift_set_gripper(catch=True)##设置机械臂移动swift.reset()##重置状态swift.set_position(x=200,y=0,z=100,speed=100000)##设置参数swift.set_polar(stretch=200,rotation=90,height=150)##设置坐标swift.set_servo_angle(servo_id=0,angle=90)##设置舵机属性

SDK常用方法:05知识储备Python-SDK安装方法2Python-SDK1uArm-Python-SDK源码阅读3Python-SDK安装方法04

在本小节的学习中,我们将要了解如何安装Python-SDK。前提环境要求:安装Python-SDK要求必须具备Python3环境,下面提供了在开发板上安装Python-SDK的方法。(本章节不讲述Python3环境安装,安装步骤详情请自行查阅官网:/)Python-SDK安装方法04

步骤一:首先我们要解压任务同级目录下的uArm-Python-SDK-2.0.zip包,如图所示:

步骤二:使用unzip命令解压压缩包:

步骤三:进入安装包目录,执行安装命令:

出现如下图提示表明安装成功:安装成功提示05知识储备Python-SDK安装方法2Python-SDK1uArm-Python-SDK源码阅读3uArm-Python-SDK源码阅读04

进入解压出来的安装包,查看安装包源码的目录结构,这里可以在左边的目录界面查看目录结构,如图所示:uArm-Python-SDK源码阅读04

了解列表核心的uarm代码目录树结构,如图所示:uArm-Python-SDK源码阅读04

当我们程序报错,出bug无法运行的时候,我们可以通过阅读了解每个.py、.txt等文件名来进行相关代码的修正。uArm-Python-SDK源码阅读04

那么我们如何阅读一段源码的结构呢?源码之所以叫源码,是因为它不是几个文件,几行代码组成的。源码都是一个很庞大很复杂的东西。几百个文件,几万行代码。这样让我们第一次拿到源码后,不知从何下手。所以,我们拿到源码后,不要着急看,要先找入口,根据文件功能找入口。例如,阅读一个SDK的源码,首先看看文档里面,第一个调用SDK的方法。当带有目的去看源码,顺着一条线去找源码,这样才会让你有明确的方向感。uArm-Python-SDK源码阅读04uArm-Python-SDK核心代码结构说明:1.uarm/wrapper/swift_api.py:uArm-Python-SDK核心API模块,主要核心的方法都在这个模块中2.uarm/tools/threads.py:线程管理模块3.uarm/tools/list_ports.py:获取串口端口号的方法集成模块4.uarm/tools/config.py:机械臂固定的配置文件5.uarm/swift/protocol.py:控制机械臂过程用到的串口命令6.uarm/swift/pump.py:吸泵控制模块职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三

SDK方式实现机械臂三维空间移动使用uArm-Python-SDK编写控制机械臂的Python脚本204任务实施uArm-Python-SDK实现控制机械臂原理1

SDK方式实现机械臂三维空间移动任务三通过指令控制机械臂uArm-Python-SDK实现控制机械臂原理:

通过源码阅读可以发现,uArm-Python-SDK是通过串口方式与机械臂进行通信,uArm-Python-SDK将串口指令封装在【uarm/swift/protocol.py】中,当执行API函数时,则通过向机械臂发送对应串口指令完成控制机械臂的任务,示意图如图所示:

SDK方式实现机械臂三维空间移动任务三uArm-Python-SDK常用函数使用:常用函数举例如下:swift=SwiftAPI():连接机械臂,初始化机械臂;swift.reset(speed=1000):机械臂重置,默认速度是1000,可根据实际需要进行调整;swift.get_position():获取机械臂位置方法,返回的是x,y,z浮点类型值;swift.set_position(x=100,y=100,z=80):移动机械臂到指定坐标方法;swift.set_pump(on=False):打开或关闭吸泵方法,默认是Flase吸泵是关闭,需要打开是将on=True即可。05任务实施使用uArm-Python-SDK编写控制机械臂的Python脚本2uArm-Python-SDK实现控制机械臂原理13SDK编写机械臂的Python脚本我们要怎样根据预览代码去编写机械臂右移、上移等?我们要如何编写相应代码去达到我们所需目的,例如通过机械臂左右移动到指定位置?使用uArm-Python-SDK编写控制机械臂的Python脚本

05通过上面的思考,你是否对本任务要完成的任务有所了解?接下来我们进入使用uArm-Python-SDK编写控制机械臂的Python脚本的环节进行学习吧!使用uArm-Python-SDK编写控制机械臂的Python脚本05进入学习编写Python脚本

在本小节中,我们已经了解了如何阅读uArm-Python-SDK源码结构,学习了uArm-Python-SDK核心代码以及常用函数。同时还学习了uArm-Python-SDK控制机械臂的原理,那么接下来我们来学习编写控制机械臂的Python脚本。使用uArm-Python-SDK编写控制机械臂的Python脚本05

在之前的章节中,我们曾接触过装饰器,通过了解他的定义,API、DLL、导入库等概念大致知晓了他的使用方法,那么在接下来的小节中,我们将具体介绍异步装饰器并使用在SDK编写控制机械臂的Python脚本中。Python装饰器:可以让被装饰的函数在不修改代码的情况下增加额外的功能,装饰器本质上是一个函数异步:即非阻塞,意味着在执行某项任务时候不会阻塞后续或其他任务的执行多线程:在进程基础上开辟多个执行任务的线程使用uArm-Python-SDK编写控制机械臂的Python脚本05实验预览:使用uArm-Python-SDK编写控制机械臂的Python脚本05#对应封装代码importtimefromuarm.wrapper

importSwiftAPIfromthreadingimportThreadswift=SwiftAPI()#调用API实例化time.sleep(3)swift.reset(speed=1000,z=100)#速度参数为1000,z轴高度100stop_=

False

def

async_call(fn):

"""异步装饰器:paramfn:函数:return:"""

def

wrapper(*args,**kwargs):#传入字典th=Thread(target=fn,args=args,kwargs=kwargs)th.start()

returnwrapper

实验预览:使用uArm-Python-SDK编写控制机械臂的Python脚本05#对应封装代码importtimefromuarm.wrapper

importSwiftAPIfromthreadingimportThreadswift=SwiftAPI()#调用API实例化time.sleep(3)swift.reset(speed=1000,z=100)#速度参数为1000,z轴高度100stop_=

False

def

async_call(fn):

"""异步装饰器:paramfn:函数:return:"""

def

wrapper(*args,**kwargs):#传入字典th=Thread(target=fn,args=args,kwargs=kwargs)th.start()

returnwrapper

@async_calldef

move_left():position=swift.get_position()x=position[0]y=position[1]z=position[2]

whileTrue:y=y-2swift.set_position(x=x,y=y,z=z)#坐标参数设置time.sleep(0.5)

ifstop_:

break

def

stop_button():

globalstop_stop_=Trueswift.disconnect()

print("停止成功")实验预览:使用uArm-Python-SDK编写控制机械臂的Python脚本05开始(点击运行,机械臂开始向左移动):move_left()结束(点击运行,机械臂结束移动):stop_button()通过阅读并运行代码,你是否了解了通过SDK控制机械臂的原理吗?那你能不能举一反三,思考如何更改上述代码,控制机械臂向右、向上、向下移动呢?#请根据课本所学,编写相应代码:实验预览:使用uArm-Python-SDK编写控制机械臂的Python脚本05我们刚刚已经通过阅读代码并运行向左移动机械臂这一实验,对SDK控制机械臂有了一定的了解了吧,那么接下来我们来学习如何控制吸泵的开启与关闭。importtimefromuarm.wrapper

importSwiftAPIswift=SwiftAPI()time.sleep(3)swift.reset(speed=1000)swift.set_pump(on=True)关闭吸泵:swift.reset(speed=1000)swift.set_pump(on=False)time.sleep(2)swift.disconnect()打开吸泵:职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三

SDK方式实现机械臂三维空间移动任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成SDK方式控制机械臂的Python脚本。(40分)40分

完成源码结构阅读学习以及SDK控制机械臂的原理学习。(25分)完成Python-SDK安装。(10分)没有完成Python-SDK安装。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)能够主动学习并收集信息,有请教他人进行解决问题的能力(10分)不主动学习(0分)4课堂纪律(20%)设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分)20分

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分1、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三

SDK方式实现机械臂三维空间移动任务小结07

在学习完本任务中的实验,大家有什么收获呢?大家了解了如何通过SDK编写控制机械臂的脚本了吗?可以独立完成机械臂左移、右移、上下移动的代码编写吗?在学习完本小节后我们将开始进入串口控制机械臂运动脚本编写的任务中进行学习。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三

SDK方式实现机械臂三维空间移动任务拓展081.在<1>、<2>、<3>处,填入代码,使得机械臂在执行move_right()开始向右运动。<1>#请根据所学知识,编写导入库,API设置,参数设置等功能(可参照P30向左移动机械臂实验)……

//请在以下代码进行补充@async_calldef

move_right():position=swift.get_position()x=position[0]y=position[1]z=position[2]

whileTrue:<2>#请根据题目所示,补充相应代码<3>#请根据题目所示,补充相应代码time.sleep(0.5)

ifstop_:

break//请在以上代码进行补充

任务拓展081.在<1>、<2>、<3>处,填入代码,使得机械臂在执行move_right()开始向右运动。def

stop_button():

globalstop_stop_=Trueswift.disconnect()

print("停止成功")

move_right()stop_button()任务拓展081.在<1>、<2>、<3>处,填入代码,使得机械臂在执行move_right()开始向右运动。1正确更改1.2.3处代码,使代码能够运行;1.更改move_right()中的y=y+x达到实验目的。解题

思路提示任务要求2机械臂执行move_right()开始向右运动。谢谢大家学习项目一机械臂移动与物体抓取创灵实验平台串口方式实现机械臂三维空间移动任务四职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四

串口方式实现机械臂三维空间移动认识串口,了解波特率、数据位以及PythonSerial库;学习如何使用串口;了解串口协议发送指令的方法和原理以及常用串口指令的使用。学习通过串口编写控制机械臂Python脚本方法并能够熟练自行编写对应脚本完成所需要求掌握Python-Serial库的使用;掌握串口协议发送指令的方法;掌握串口返回数据读取;掌握常用串口控制机械臂指令;掌握使用串口编写Python脚本控制机械臂。职业能力目标01实验目的实验内容职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四

串口方式实现机械臂三维空间移动

此任务要求同学们认识串口,了解波特率、数据位以及PythonSerial,学习如何使用串口控制,了解串口协议发送指令的方法和原理以及常用串口指令的使用,并学习通过串口编写控制机械臂Python脚本方法并能够熟练自行编写对应脚本完成所需要求。任务描述任务要求下载安装Python-Serial库;掌握串口协议发送指令的相关函数,并完成相关实验;完成串口返回数据读取,得到对应结果;使用常用串口控制机械臂指令,实现机械臂移动到指定位置;能够独立使用串口编写Python脚本控制机械臂。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四

串口方式实现机械臂三维空间移动任务分析在引导案例里我们学习了串口,那么什么是串口通信呢?我们要如何通过串口方式实现机械臂三维空间移动三.根据自己的了解,通过串口控制机械臂在生活中还有哪些用途呢?任务分析与计划03任务计划表项目名称创灵实验平台任务名称串口方式实现机械臂三维空间移动计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四

串口方式实现机械臂三维空间移动05知识储备串口通信的相关参数及作用2串口通信的原理1Pythonserial库3

世界上首次推出台式计算机时,它们带有串行端口和并行端口。串行端口通常用于连接串口调试设备,并行端口用于打印机。现在部分台式计算机上已经这两种类型的端口,因为通信通过以太网端口进行,而连接打印机可以使用USB端口或以太网端口,或者通过wifi/蓝牙的无线连接。什么是串口?04串口通信的原理

串口的出现是在1980年前后,数据传输率是115kbps~230kbps。串口出现的初期是为了实现连接计算机外设的目的,初期串口一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备。串口也可以应用于两台计算机(或设备)之间的互联及数据传输。由于串口(COM)不支持热插拔及传输速率较低,部分新主板和大部分便携电脑已开始取消该接口。串口多用于工控和测量设备以及部分通信设备中。串口的由来?04串口通信的原理串口通信的原理

目前,仍有许多计算机接口符合“串行”的要求,常见接口包括SCSI、SATA(用于连接硬盘驱动器等)和USB(还有其他接口)。工业联网设备上常见的串口是RS232串口,RS232串口分为DB-9针和DB-25针。如下图:串口有几种形式?几种接口样式04串口通信的原理

1.控制台输入/输出嵌入式系统开发项目的过程中,几乎都会有一个终端仿真器连接到目标系统上的串口。这与CPU架构和它运行的操作系统无关。即使有到目标的网络连接,并且可以远程运行时,可以清楚的了解当前串行连接发生了什么,特别是如果发生了意外情况能及时获取信息。串口有哪些用途?

2.数据通信串口连接可用于系统内的处理器间通信或与系统不同部分的通信。串口提供设备之间的物理连接,但必须使用通信协议来确保可靠、无差错的数据路径。根据链路的要求,可以实施简单的协议传输,或者使用行业标准协议,例如PPP或HDLC。这些协议起源于数据通信,允许主机之间的点对点网络。这在不包括以太网控制器的简单、低成本设备中特别有用,因为出于成本、空间或功率考虑。嵌入式系统中使用的TCP/IP协议栈通常支持使用串行链路进行物理连接和PPP或SLIP提供链路层协议

3.外部设备通讯调试新设备或更新系统参数通常需要通过串口连接到一台设备并与服务程序交互。网络工程师通常以这种方式设置交换机和其他网络基础设施。通常,来自一组设备的串口连接到终端服务器,允许工程师通过网络接口连接到其中的任何一个。串口还用于将设备连接在一起,例如一种或另一种类型的调制解调器(PSTN、3G、卫星)、GPS装置、望远镜、传感器、电源逆变器和许多类型的工业控制设备。04

串口形容一下就是一条车道,而并口就是有8个车道同一时刻能传送8位(一个字节)数据。但是并不是说并口快,由于8位通道之间的互相干扰(串扰),传输时速度就受到了限制,传输容易出错。串口没有互相干扰。并口同时发送的数据量大,但要比串口慢。串口硬盘就是这样被人们重视的。串口与并口的区别?04串口通信的原理串口通信的原理04

串口通信(SerialCommunicaTIons)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。串口通信的原理04

典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。思考一下,在生活中我们有哪些地方用到了串口通信?05知识储备串口通信的相关参数及作用2串口通信的原理1Pythonserial库3串口通信的相关参数及作用04

这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。一般调制速率大于波特率,比如曼彻斯特编码)。波特率:串口通信的相关参数及作用04

这是衡量通信中实际数据位的参数。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。数据位:停止位04

用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。思考一下,我们要怎么在串口中设置呢?串口通信的相关参数及作用04

在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不奇偶校验位:串口通信的相关参数及作用04

真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。奇偶校验位:05知识储备串口通信的相关参数及作用2串口通信的原理1Pythonserial库3Pythonserial库04

Pythonserial是Python用来进行串口操作的一个库,库集成了串口常见操作,如:打开串口、关闭串口、串口写数据、串口读数据等。例如:lser.close##关闭串口lserial.Serial##打开串口lis_open##判断串口是否正常开启lser.write##写入数据lser.read##读取数据并有以下几个常用命令:Pythonserial库04

在了解完Pythonserial以及他的常用命令后,我们要如何安装Pythonserial库呢?

安装serial库的方法是使用pip进行安装,安装指令【pipinstallpyserial】!pipinstallpyserial

在介绍完安装serial库后,我们来看看serial库命令的使用:Pythonserial库04serial打开串口:importserialser=serial.Serial("/dev/ttyACM0",115200)#第一个参数是设备、第二个参数是波特率serial关闭串口:ser.close()serial串口写入数据importserialimporttimeser=serial.Serial("/dev/ttyACM0",115200)#serial串口设置、波特率设置data=b"#5P2205"ser.write(data)time.sleep(1)ser.close()Pythonserial库04serial串口查看返回值importserialser=serial.Serial("/dev/ttyACM0",115200)data=b"#5P2205"ser.write(data)whileTrue:line=ser.readline()print(line)职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四

串口方式实现机械臂三维空间移动串口控制机械臂移动到指定位置205任务实施常见机械臂操作串口指令1

串口方式实现机械臂三维空间移动任务四常见机械臂操作串口命令:l移动机械臂

b"G0X<x坐标值>Y<y坐标值>Z<z坐标值>F90\n"l打开末端吸泵

b"M2231V1\n"l关闭末端吸泵

b"M2231V0\n"l读取机械臂信息

b"#5P2205"

请根据串口控制机械臂移动中实验预览的相关代码,了解常用机械臂操作串口命令。串口连接机械臂05任务实施串口控制机械臂移动到指定位置2常见机械臂操作串口指令13

串口方式实现机械臂三维空间移动任务四实验预览:importtime#导入库importserialser=serial.Serial("/dev/ttyACM0",115200)#串口通信time.sleep(2)#延时data=b"G0X120Y0Z60F90\n"#将机械臂移动到x=120,y=0,z=60的位置ser.write(data)whileTrue:line=ser.readline()print(line)以通过重启内核,来停止代码中的while循环,如图所示:串口控制机械臂移动到指定位置我们要怎样根据实验预览代码去编写机械臂右移、上移等?我们要如何使用串口控制机械臂完成所需任务呢?在学习完后,我们要怎么帮所学整合利用,学以致用呢?串口方式实现机械臂三维空间移动

05通过上面的思考,你是否对本任务要完成的任务有所了解?接下来我们进入使用串口控制机械臂移动到指定位置编写控制机械臂的Python脚本的环节进行学习吧!串口方式实现机械臂三维空间移动05进入学习通过串口方式编写Python脚本串口方式实现机械臂三维空间移动05动手练习:(根据实验预览中所学知识,我们来试试自行编写代码完成所需任务吧!)1.在<1>、<2>、<3>处,填入相应的值,使得机械臂移动到x=130,y=30,z=70。2.在<4>处填写对应的代码,使得代码能将机械臂移动指定的位置。importtimeimportserialser=serial.Serial("/dev/ttyACM0",115200)time.sleep(2)data=b"G0X<1>Y<2>Z<3>F90\n"<4>whileTrue:line=ser.readline()print(line)在完成动手练习后,接下来我们来学习串口方式打开机械臂末端吸泵吧!串口方式打开机械臂末端吸泵05实验预览:importtime#导入库importserialser=serial.Serial("/dev/ttyACM0",115200)#串口通信time.sleep(2)#延时data=b"M2231V1\n"#打开ser.write(data)whileTrue:line=ser.readline()#读取数据print(line)以通过重启内核,来停止代码中的while循环,如图所示:除了串口方式打开机械臂末端,我们还要学习串口方式关闭机械臂末端吸泵。串口方式关闭机械臂末端吸泵05实验预览:以通过重启内核,来停止代码中的while循环,如图所示:importtimeimportserialser=serial.Serial("/dev/ttyACM0",115200)time.sleep(2)data=b"M2231V0\n"#关闭ser.write(data)whileTrue:line=ser.readline()#读入数据print(line)使用串口方式编写Python脚本控制机械臂05通过使用serial库编写一个可以左右上下移动机械臂和吸泵开关的脚本(根据常用的串口控制机械臂指令调用进行编写)。接下来让我们进入实验预览。实验预览:(详细代码运行结果请参照Jupyter,任务三、串口方式编写脚本控制机械臂)使用串口方式编写Python脚本控制机械臂05通过使用serial库编写一个可以左右上下移动机械臂和吸泵开关的脚本(根据常用的串口控制机械臂指令调用进行编写)。接下来让我们进入实验预览。实验预览:(详细代码运行结果请参照Jupyter,任务三、串口方式编写脚本控制机械臂)打开串口编写脚本实验使用串口方式编写Python脚本控制机械臂05通过使用serial库编写一个可以左右上下移动机械臂和吸泵开关的脚本(根据常用的串口控制机械臂指令调用进行编写)。接下来让我们进入实验预览。实验预览:(运行以下代码,查看实验效果)左移动机械臂move_left()

stop()右移动机械臂move_right()stop()使用串口方式编写Python脚本控制机械臂05通过使用serial库编写一个可以左右上下移动机械臂和吸泵开关的脚本(根据常用的串口控制机械臂指令调用进行编写)。接下来让我们进入实验预览。实验预览:(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论