《智能机器人技术应用》课件 第6、7章 人脸跟随模块开发、手写汉字_第1页
《智能机器人技术应用》课件 第6、7章 人脸跟随模块开发、手写汉字_第2页
《智能机器人技术应用》课件 第6、7章 人脸跟随模块开发、手写汉字_第3页
《智能机器人技术应用》课件 第6、7章 人脸跟随模块开发、手写汉字_第4页
《智能机器人技术应用》课件 第6、7章 人脸跟随模块开发、手写汉字_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

项目六人脸跟随创灵实验平台人脸跟随模块开发任务一职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一人脸跟随模块开发掌握通过Threading模块封装线程类的方法开启摄像头掌握用OpenCV绘制人脸在图片中的位置信息掌握使用装饰器调度机械臂跟随人脸移动使用Threading模块封装线程类的方法开启摄像头在画面中绘制人脸的位置信息调动机械臂跟随人脸移动职业能力目标01实验目的实验内容职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一人脸跟随模块开发要求同学们能够根据所学内容编写相应的装饰器及opencv函数,实现摄像头获取图片,并通过Threading模块创建thread线程子类。最后通过人脸检测算法识别画面中存在的人脸,并在画面中绘制出人脸图框。任务描述任务要求复习并完成opencv实现摄像头获取图片,成功采集到图片;完成人脸检测图像推理功能实验,实现人脸识别;完成人脸信息获取,并绘制画面中的人脸图框。任务描述与要求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人脸检测算法要解决以下几个核心问题:人脸可能出现在图像中的任何一个位置;人脸可能有不同的大小;

人脸在图像中可能有不同的视角和姿态;人脸可能部分被遮挡。人05知识储备线程类封装2人脸检测13线程类封装04进程是资源分配的最小单位,一个程序至少有一个进程。线程是程序执行的最小单位,一个进程至少有一个线程。进程都有自己独立的地址空间,内存,数据栈等,所以进程占用资源多。由于进程的资源独立,所以通讯不方便,只能使用进程间通讯(IPC)。线程类封装04线程共享进程中的数据,他们使用相同的地址空间,使用线程创建快捷,创建开销比进程小。同一进程下的线程共享全局变量、静态变量等数据,所以线程通讯非常方便,但会存在数据同步与互斥的问题,如何处理好同步与互斥是编写多线程程序的难点。一个进程中可以存在多个线程,在单核CPU中每个进程中同时刻只能运行一个线程,只有在多核CPU中才能存在线程并发的情况。线程类封装04threading和ThreadPython实现多线程编程需要借助于threading模块,threading模块中最核心的内容是Thread类。通过创建Thread对象,让它们运行,每个Thread对象代表一个线程,在每个线程中我们可以让程序处理不同的任务,这就是多线程编程。线程类封装04创建Thread对象有2种方式直接创建Thread,将一个callable对象从类的构造器传递进去,这个callable就是回调函数,用来处理任务。编写一个自定义类继承Thread,然后复写run()方法,在run()方法中编写任务处理代码,然后创建这个Thread的子类。本次实验主要基于派生Thread子类的方式进行。线程类封装04我们可以通过继承Thread类,派生出一个子类,使用子类来创建多线程,并在其中实现功能,使得该线程可以在不占用进程资源的情况下自主运行。使用class.start()方法,将自动调用class.run()方法,在run方法中执行线程启动后的代码,该线程就会自动运行。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一人脸跟随模块开发05任务实施封装人脸检测线程类2以线程方式检测人脸1机械臂跟随的实现3以线程方式检测人脸1.检查usb摄像头:人脸跟随案例是基于计算机视觉来实现,那么首先就是要获取到对应的视觉数据,通过摄像头将采集到的图片数据进行预处理,再将数据通过人工智能模型进行识别判断,返回识别结果。所以,通过opencv实现摄像头获取图片是识别的第一步。以线程方式检测人脸1.检查usb摄像头:注意:上述指令如没有输出,则表明usb摄像头没安装好,如果输出video0则表明usb摄像头已正常连接,可以使用。以线程方式检测人脸1.检查usb摄像头:动手练习1:1.在<1>处,输入指令查看设备usb摄像头是否正常接入。以线程方式检测人脸2.opencv获取图片,视频流:以线程方式检测人脸3.以线程的方式获取视频流:步骤一:导入线程库、jupyter画图依赖库。

Thread:创建线程类;

ipywidgets:用于在Jupyter中开辟一个用于显示图片的窗口;

display:在Jupyter中播放图片。以线程方式检测人脸3.以线程的方式获取视频流:步骤二:创建图片显示窗口。widgets.Image:开辟一个用于显示图片的窗口;format:显示图片格式;height:窗口高度;width:窗口宽度。以线程方式检测人脸3.以线程的方式获取视频流:步骤三:异步装饰器Python装饰器:可以让被装饰的函数在不修改代码的情况下增加额外的功能,装饰器本质上是一个函数。异步:即非阻塞,意味着在执行某项任务时候不会阻塞后续或其他任务的执行。多线程:在进程基础上开辟多个执行任务的线程。以线程方式检测人脸4.线程获取视频流实验预览:以线程方式检测人脸5.分类识别模型接口说明:face_position人脸跟随的坐标nlFaceDetect=NLFaceDetect(libNamePath)实例化分类算法接口类nlDetect.NL_TD_ComInit(configPath[,dwClassNum[,dqThreshold[,pbyModel[,pbyLabel]]]])加载模型,根据配置参数进行模型初始化nlDetect.NL_TD_InitVarIn(limg)加载要识别的图像,返回0表示加载成功nlDetect.NL_TD_Process_C()调用检测函数,返回目标检测个数nlDetect.djTDVarOut检测结果的对象,包含检测结果目标位置与置信度等值以线程方式检测人脸5.分类识别模型接口说明:outObject.x1目标左上角x轴坐标outObject.y1目标左上角y轴坐标outObject.x2目标右下角x轴坐标outObject.y2目标右下角y轴坐标以线程方式检测人脸6.线程获取视频流实验结果:获取后得到的结果如下图: 实验结束后要记得重启内核,释放摄像头资源:05任务实施213以线程方式检测人脸封装人脸检测线程类机械臂跟随的实现封装人脸检测线程类1.实验预览:请运行JupyterLab对应的实验预览观察实验运行效果,如下图实验中。封装人脸检测线程类1.实验预览(参考Jupyter中的任务四中的2.1):启动识别:结果如图,识别到人脸并绘制出人脸图框。封装人脸检测线程类1.实验预览(参考Jupyter中的任务四中的2.1):停止识别:结果如图,重启内核释放摄像头资源。封装人脸检测线程类2.Thread子类运行说明:在继承了Thread的子类中重写run()方法,获取摄像头的图片并对其进行人脸检测,保存得到的人脸信息。将人脸检测模型、摄像头信息、人脸信息都作为类的成员变量将子类实例化后,使用start()方法,将会调用run()方法,并执行其中代码将绘制有检测信息的图片传给全局变量show_image,并通过display方法展示。封装人脸检测线程类2.Thread子类运行说明:请前往Jupyter上完成动手练习二。05任务实施213以线程方式检测人脸封装人脸检测线程类机械臂跟随的实现机械臂跟随的实现1.业务流程图:机械臂跟随的实现机械臂的跟随需要机械臂、摄像头及配置参数等模块相互配合,关于机械臂在之前的任务中也有过详细介绍,这里直接调用之前封装好的库,并且将摄像头及人脸检测线程同样进行封装,以供调用。本次实验已将模块封装好在libs目录下。实验过程可以直接导入模块调用接口进行使用(详细案例请参照Jupyter)。机械臂跟随的实现如下图:2.代码实现:机械臂跟随的实现实例化机械臂并启动跟随线程,可以看到机械臂跟随人脸移动的效果。2.代码实现:机械臂跟随的实现请前往Jupyter上完成动手练习三。2.代码实现:职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一人脸跟随模块开发任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)以线程的方式获取视频流,使用Threading模块将摄像头线程封装成thread线程类,并以线程方式开启机械臂的跟随功能。(40分)40分

以线程的方式获取视频流。(10分)使用Threading模块将摄像头线程封装成thread线程类。(15分)以线程方式开启机械臂的跟随功能,实现机械臂跟随人脸的功能。(15分)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

在大家学习完本任务后,是否还有许多为解决的问题?那么接下来我们来进行任务小结,通过流程图了解本章学习了什么,对相应知识进行巩固复习。以线程方式检测人脸封装人脸检测线程类机械臂跟随的实现人脸跟随模块开发知识储备任务实施任务小结①人脸识别②线程类封装①以线程方式检测人脸②封装人脸检测线程类③机械臂跟随的实现①掌握通过Threading模块封装线程类的方法开启摄像头②掌握用OpenCV绘制人脸在图片中的位置信息③掌握使用装饰器调度机械臂跟随人脸移动职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一人脸跟随模块开发任务拓展08请举例生活中机械臂跟随模块的应用,回顾本章代码,尝试编写检测人脸并跟随移动的代码。能够如何改进机械臂跟随人脸模块?1用Threading模块封装线程类实现线程方式检测人脸信息;1.Threading控制线程指导;2.装饰器的方式开启线程。解题

思路提示任务要求2以线程方式启动机械臂并跟随人脸位置移动。谢谢大家学习项目七手写汉字创灵实验平台机械臂手写汉字任务职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务

机械臂手写汉字复习并掌握机械臂控制相关内容,能够熟练应用串口方法编写python脚本控制机械臂进行运动;能够熟练操纵机械臂完成指定任务完成所需要求。掌握Python-Serial库的使用;掌握串口控制机械臂方法;掌握使用串口编写Python脚本控制机械臂完成手写汉字任务。职业能力目标01实验目的实验内容职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务

机械臂手写汉字

此任务要求同学们复习之前学过的内容并掌握本章任务,能够熟练应用串口方法编写python脚本控制机械臂移动,并能够熟练读取数据库操纵机械臂完成手写汉字任务。任务描述任务要求安装Python-Serial库,能够根据实验所需使用对应函数;能够使用常用串口控制机械臂指令加入对应实验中;能够读取汉字笔画数据库;完成脚本编写,通过串口编写Python脚本控制机械臂;对本项目复习巩固,能够独立完成实验。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务

机械臂手写汉字任务分析在之前的项目中我们学习了机械臂移动到指定位置,SDK、串口控制机械臂,机械臂抓取,大家再学习完后有什么感想呢?二.根据自己的了解,

通过机械臂在生活中还能有哪些创新用途呢?任务分析与计划03任务计划表项目名称创灵实验平台任务名称机械臂手写汉字计划方式自主设计计划要求请用5个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

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

机械臂手写汉字串口通信的相关参数及作用204知识储备1串口通信的相关参数及作用串口通信的相关参数及作用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

真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。奇偶校验位:04知识储备python中的字典数据类型213串口通信的相关参数及作用python中的字典数据类型04字典(Dictionary)是Python提供的一种常用的数据结构,由键(key)和值(value)成对组成,键和值中间以冒号:隔开,项之间用逗号隔开,整个字典由大括号{}括起来。格式如下:dic={key1:value1,key2:value2}字典也被称作关联数组或哈希表。python中的字典数据类型04方法1dic1={'Author':'Python当打之年','age':99,'sex':'男'}方法2lst=[('Author','Python当打之年'),('age',99),('sex','男')]dic2=dict(lst)下面是几种常见的字典创建方式:python中的字典数据类型04方法3dic3=dict(Author='Python当打之年',age=99,sex='男')

方法4list1=['Author','age','sex']list2=['Python当打之年',99,'男']dic4=dict(zip(list1,list2))其余方式不再赘述下面是几种常见的字典创建方式:python中的字典数据类型04字典由dict类代表,可以使用dir(dict)来查看该类包含哪些方法,输入命令:methods=dir(dict)print('methods=',methods)思考一下python字典作为类,都有哪些方法呢?python中的字典数据类型04可以看到如下输出结果:methods=['__class__','__contains__','__delattr__','__delitem__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__gt__','__hash__','__init__','__init_subclass__','__iter__','__le__','__len__','__lt__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__reversed__','__setattr__','__setitem__','__sizeof__','__str__','__subclasshook__','clear','copy','fromkeys','get','items','keys','pop','popitem','setdefault','update','values']思考一下python字典作为类,都有哪些方法呢?python中的字典数据类型04可以看到的是,字典的方法和属性有很多种,但是其实经常使用的需要重点掌握的只包括以下11种方法:

['clear','copy','fromkeys','get','items','keys','pop','popitem','setdefault','update','values']

思考一下python字典作为类,都有哪些方法呢?职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务六

机械臂手写数字导入中文汉字笔画数据库205任务实施准备工作1345设定写字区域中心点执行机械臂写字任务回收机械臂准备工作05首先我们需要导入几个在后面可能会用到的工具库这里面包括一些基础库,和串口相关库importpickleimportserialimporttimeimportreimportos使用串口方式控制机械臂通过回顾前面的知识点,相信大家对之前的知识有了更好的了解。那么我们要怎么更好得使用串口完成所需任务呢?在学习完后,我们要怎么把所学整合利用,完成新的任务呢?在这里,我们使用串口方式控制机械臂,需要打开机械臂1的串口串口方式实现机械臂三维空间移动

05robot1=serial.Serial("/dev/ttyACM1",115200)导入中文汉字笔画数据库105任务实施准备工作2345设定写字区域中心点执行机械臂写字任务回收机械臂实验预览:导入中文汉字笔画数据库05读取笔画库,也就是从pickle格式的文件中读取数据并转换为Python的类型:withopen('Chinese_strokes','rb')asf:data=pickle.load(f)查看笔画数据库的类型,以及笔画库中的汉字个数:print(type(data))print(len(data))通过观察以下打印结果可以知道,笔画数据库被读取成了一个python字典,且字典中的键值对个数为6763,也就是字典中存放了6763条汉字的笔画数据。那么更进一步,我们要是想看看这些汉字都有那些,该如何操作呢?实验预览:使用uArm-Python-SDK编写控制机械臂的Python脚本05print(data.keys())输出结果部分截取如下:这里我们简单浏览一下笔画库中的所有汉字:实验预览:使用uArm-Python-SDK编写控制机械臂的Python脚本05print(data.get('一'))但是如果我们想观察其中几个汉字的笔画,思考其中的规律。应该怎样做呢?print(data.get('三'))print(data.get('丁'))思考:通过观察不同汉字的笔画,你们能发现规律吗?导入中文汉字笔画数据库205任务实施准备工作3145设定写字区域中心点执行机械臂写字任务回收机械臂实验预览:设定写字区域中心点05首先解锁电机,然后写字板放置于传送带指定位置,并将夹具更换为手写笔专用夹具,固定好手写笔:注意:在解锁电机前需要用手将机械臂托住,以免机械臂突然落下砸伤人员或者损坏设备!robot1.write(b"M2019\n")下面需要将手写笔的笔尖放到手写板中间位置,然后启动电机锁定指令,再获取位置高度:注意:如果不先锁定电机,在获取机械臂位置高度,可能导致后续步骤中定位和笔画书写的不准确#锁上电机robot1.write(b"M17\n")#获取机械臂位置高度robot1.write(b"P2220\n")实验预览:设定写字区域中心点05whileTrue:line=robot1.readline()print(line)pattern=pile(r'X.*\d')pos=pattern.findall(str(line,'utf-8'))iflen(pos)>0:print(pos)break这时,我们已经获取到了此时机械臂的三维空间坐标实验预览:设定写字区域中心点05pos1=pos[0].replace('X','').replace('Y','').replace('Z','')pos1=pos1.split("")pos1#获取笔高pen_tip_height=pos1[2]设置准备进行写字任务时机械臂的初始位置,并将机械臂抬升至初始位置,准备执行后面的任务打印机械臂的三维空间坐标,并转化为数值格式通过对之前章节知识点的回顾,相信大家对之前的知识有了更好的了解。接下来让我们尝试编写通过串口控制机械臂的代码吧!!复习:串口方式实现机械臂三维空间移动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设置准备进行写字任务时机械臂的初始位置,然后需要将机械臂抬升至初始位置,这可以方便准备执行后面的任务#设置初始位置default_pos={'x':210,'y':50,'z':110}robot1.write(bytes("G0X"+str(default_pos['x'])+"Y"+str(default_pos['y'])+"Z"+str(default_pos['z'])+"F90\n",encoding='utf-8'))导入中文汉字笔画数据库205任务实施准备工作4315设定写字区域中心点执行机械臂写字任务回收机械臂执行机械臂写字任务05实验预览:#设定汉字字符串sentense='思'#检测字符串的字符个数,也就是需要写几个字num=len(sentense)#设定每个字符所占宽度width=40#设定初始的写字状态is_write=False首先定义主程序需要的一些参数执行机械臂写字任务05实验预览:fori,wordinenumerate(sentense):x_pos=default_pos['x']+0#这里假设多个字时,都是横向书写,所以x轴不改变y_pos=default_pos['y']-width*(i-num/2+1)#在横向上,首先向左偏移所有字符的一半的宽度print('----------',word)#打印正在写的汉字strokes=data[word]#读取对应的汉字笔画forstinstrokes:print('--')#这里有两个循环,外部循环的是不同的笔画forpoinst:print(po['x'],po['y'])#内部循环的是每个笔画的不同坐标点x=x_pos-po['y']/20#由于坐标系方向不一致,需要把字扭转方向,进行映射y=y_pos-po['x']/20+width#这里的除数是调节字符大小的放缩系数ifnotis_write:robot1.write(bytes("G0X"+str(st[0]['x'])+"Y"+str(st[0]['y'])+"Z110F20\n",encoding='utf-8'))is_write=True#先移动到水平位置,如果没正式开始写字的话手写笔就还在高位robot1.write(bytes("G0X"+str(x)+"Y"+str(y)+"Z"+str(float(pen_tip_height)-1)+"F20\n",encoding='utf-8'))time.sleep(0.6)#这时笔降下来,开始写笔画内的不同位置robot1.write(bytes("G0X"+str(x)+"Y"+str(y)+"Z"+str(float(pen_tip_height)+20)+"F20\n",encoding='utf-8'))time.sleep(0.5)#再抬起,准备下一个笔画robot1.write(bytes("G0X"+str(default_pos['x'])+"Y"+str(default_pos['y'])+"Z"+str(default_pos['z'])+"F20\n",encoding='utf-8'))#写完了就回到初始位置导入中文汉字笔画数据库205任务实施准备工作5341设定写字区域中心点执行机械臂写字任务回收机械臂实验预览:设定写字区域中心点05所有的写字任务完成后,需要回收机械臂,将机械臂移动到回收位置,并关闭机械臂#将机械臂移动至回收位置robot1.write(bytes("G0X"+str(default_pos['x'])+"Y"+str(default_

温馨提示

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

最新文档

评论

0/150

提交评论