2.2-学习编写Python脚本实现控制传送带运动《智能机器人技术应用》_第1页
2.2-学习编写Python脚本实现控制传送带运动《智能机器人技术应用》_第2页
2.2-学习编写Python脚本实现控制传送带运动《智能机器人技术应用》_第3页
2.2-学习编写Python脚本实现控制传送带运动《智能机器人技术应用》_第4页
2.2-学习编写Python脚本实现控制传送带运动《智能机器人技术应用》_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

项目二通过GPIO实现传送带运行创灵实验平台学习编写Python脚本实现控制传送带运动任务二职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二学习编写Python脚本实现控制传送带运动了解控制传送带的原理;学习设置传送带挡速实验;掌握编写Python脚本实现不同挡位控制传送带运动。掌握SysfsGPIO库的使用方法;掌握不同挡速调用传送带;掌握传送带模块的封装。职业能力目标01实验目的实验内容职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二学习编写Python脚本实现控制传送带运动

此任务要求同学们了解控制传送带的原理,学习设置传送带挡速实验,并掌握编写Python脚本实现不同挡位控制传送带运动。在完成该实验后,能独立使用传送带,并对自己学习进行拓展,思考如何联合机械臂与传送带一起使用。任务描述任务要求掌握SysfsGPIO库的使用方法,能够成功调用对应的库及其相应的函数;完成不同挡速调用传送带的实验,成功设置传送带加速运行;完成传送带模块的封装相应代码的编写,并在实验结束后能够独立完成动手练习、动手实验等任务。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二学习编写Python脚本实现控制传送带运动任务分析思考一下,传送带启动控制的具体流程是什么样的?我们该如何按步骤完成实验。根据自己的了解,我们要如何去应用传送带知识?我们要如何通过python编写脚本控制传送带?任务分析与计划03任务计划表项目名称创灵实验平台任务名称学习编写Python脚本实现控制传送带运动计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二学习编写Python脚本实现控制传送带运动封装函数204知识储备文件描述符1文件描述符04

内核【kernel】利用文件描述符【filedescriptor】来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。思考一下,我们生活中有用到文件描述符吗?05任务实施封装函数2文件描述符13封装函数04

函数封装是一种函数的功能,它把一个程序员写的一个或者多个功能通过函数、类的方式封装起来,对外只提供一个简单的函数接口。当程序员在写程序的过程中需要执行同样的操作时,程序员(调用者)不需要写同样的函数来调用,直接可以从函数库里面调用。程序员也可以从网络上下载的功能函数,然后封装到编译器的库函数中,当需要执行这一功能的函数时,直接调用即可。而程序员不必知道函数内部如何实现的,只需要知道这个函数或者类提供什么功能。04思考一下,我们要怎么样去使用封装函数?封装函数下面为c语言函数封装的例子:func1(.....){..........}func2(......){..........}func3(.....){}04思考一下,我们要怎么样去使用GPIO?封装函数下面为累加求和的函数:职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二学习编写Python脚本实现控制传送带运动05任务实施设置PWM驱动2传送带运行原理、实验预览1编写Python脚本实现传送带不同挡位运动3学习编写Python脚本实现控制传送带运动任务二传送带实验流程图:任务二实验预览(详细实验请参考第二章中任务一部分)我们该去如何完成实验呢?1.运行主函数:if__name__=="__main__":belt=Belt()print("启动传送带")time.sleep(1)

#传送带正向belt.turn_forward_dir()print("传送带正向")time.sleep(1)belt.belt_move()#正常速度运行print("正常速度运行")time.sleep(3)#传送带运动时长

belt.belt_fast_move()#加速运行print("加速运行")time.sleep(3)#传送带运动时长belt.belt_stop()#停止运行time.sleep(1)#方向反转belt.turn_reverse_dir()print("传送带反向")time.sleep(1)belt.belt_move()#正常速度运行print("正常速度运行")time.sleep(3)#传送带运动时长

belt.belt_fast_move()#加速运行print("加速运行")time.sleep(3)#传送带运动时长belt.belt_stop()#停止运行time.sleep(1)学习编写Python脚本实现控制传送带运动任务二实验预览(详细实验请参考第二章中任务一部分)SysfsGPIO控制传送带运动

如需加深了解,可自行查看[GPIO4源码](./python_gpio4.py)

步骤一:导入相关的库

【os】:处理文件和目录

【gpio4】:通用输入/输出端口学习编写Python脚本实现控制传送带运动importosfromgpio4importSysfsGPIOimporttime任务二实验预览(详细实验请参考第二章中任务一部分)SysfsGPIO控制传送带运动

步骤二:设置传送带默认正向运动

【gpio4】:控制开发板GPIO学习编写Python脚本实现控制传送带运动动手练习1传送带GPIO接口编号为【33】可通过查询开发板接口文挡。通过SysfsGPIO类创建pin对象,用于将GPIO连接到用户空间。1.在<1>处,请用【SysfsGPIO】类创建接口编号【33】的控制接口,创建【pin】对象#定义开发板的GPIO接口dir_gpio=33pin=<1>填写完成后执行以下代码,输出结果类似为【<gpio33unexportedat-0x7ffffff8083fd17e>】,则说明填写正确。print(pin)任务二实验预览(详细实验请参考第二章中任务一部分)学习编写Python脚本实现控制传送带运动pin.export=True:将上面创建的对象【pin】中编号【33】写入【export】文件,请求接口,创建一个【gpio33】节点。【pin.direction=out】:表示GPIO信号方向为输出方向【pin.value=1】:表示传送带运行方向为正转方向【time.sleep(0.1)】:睡眠`0.1秒`,是用于防止代码执行速度过快且设备还未响应而导致的一些错误。【pin.export=False】:将编号【33】写入【unexport】文件,删除【gpio33】节点,退出GPIO连接。pin.export=Truepin.direction='out'#传送带正转pin.value=1time.sleep(0.1)

pin.export=False05任务实施213传送带运行原理、实验预览设置PWM驱动编写Python脚本实现传送带不同挡位运动

接下来我们要设置PWM驱动,我们要怎么去使用PWM驱动呢?设置PWM驱动05步骤一:调出PWM0接口【os.path.exists(path)】:用于判断路径path是否存在,若存在返回True,不存在返回False。1.path如果写成绝对路径的形式,则直接判断绝对路径path是否存在;2.path如果写成相对路径的形式,则从当前目录为起点,检查相对路径path是否存在。ifnotos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):os.system('echo0>/sys/class/pwm/pwmchip0/export')pin.export=False代码注释:判断pwm0接口是否存在。若不存在,则请求接口。设置PWM驱动05步骤二:PWM驱动属性设置【os.popen(command[,mode[,bufsize]])】:用于从一个命令打开一个管道。参数说明:(1).command:使用的命令。(2).mode:模式权限可以是【r】(默认)或【w】。(3).bufsize:指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位)。负的bufsize意味着使用系统的默认值,一般来说,对于tty设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。返回值:返回一个文件描述符号为fd的打开的文件对象period=1000000#设置频率需要转换为设置寄存器周期值duty=50#占空比duty需要转换为设置寄存器占空比值reverse='normal'#输出是否反向enable=0#PWM是否使能1:使能0:不使能

ifos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):ifduty>100orduty<0:#占空比设置范围在0-100print("dutyseterror,setduty100%")duty=100duty_cycle=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/duty_cycle')

设置PWM驱动05duty_value=duty_cycle.read()#获取开发板中占空比的值period1=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/period')period_value=period1.read()#获取开发板中周期的值ifint(duty_value)>int(period_value):#当前的duty_value大于了要设置的周期period值,先设置duty_cycleduty_cmd='echo'+str(int((period*duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)period_cmd='echo'+str(period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)else:period_cmd='echo'+str(period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)duty_cmd='echo'+str(int((period*duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)reverse_cmd='echo'+reverse+'>/sys/class/pwm/pwmchip0/pwm0/polarity'os.system(reverse_cmd)stop_cmd='echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(stop_cmd)设置PWM驱动05动手练习1:关闭针脚休眠针脚休眠接口编号为【42】可通过查询开发板接口文挡。

通过【SysfsGPIO】类创建【pin】对象,用于将GPIO连接到用户空间。1.在<1>处,实例化一个连接操作接口【SysfsGPIO】类为对象【sleep_pin】,接口编号为【42】。2.在<2>处,将【sleep_pin.export】赋值为【True】,用于激活端口。3.在<3>处,将【sleep_pin.direction】控制【gpio】的输出方向为【out】。4.在<4>处,将【sleep_pin.value】赋值为【0】,关闭休眠模式。5.在<5>处,将【sleep_pin.export】赋值为【False】,用于关闭端口。<1><2><3>#关闭休眠模式<4><5>设置PWM驱动05动手练习2:停止传送带并设置针脚休眠在完成传送带停止实验前,我们要先将将PWM设置为使能状态,启动传送带运动。enable=1start_cmd='echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(start_cmd)设置PWM驱动05动手练习2:停止传送带并设置针脚休眠1.在<1>处,将0赋值给变量【enable】。2.在<2>处,定义字符串【'echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'】,用于停止传送带运动。3.在<3>处,将【sleep_pin.value】赋值为【1】,打开休眠模式。#停止传送带<1>start_cmd=<2>os.system(start_cmd)#设置针脚休眠sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'<3>#打开休眠模式sleep_pin.export=False05任务实施213传送带运行原理、实验预览设置PWM驱动编写Python脚本实现传送带不同挡位运动实验教学分析我们要怎么设置传送带加速运行、减速运行?在生活中,给传送带设置挡位有什么作用?编写Python脚本实现传送带不同挡位运动05通过上面的思考,你是否对本任务要完成的任务有所了解?让我们一起来学习如何编写Python脚本控制传送带不同挡位下运行吧!编写Python脚本实现传送带不同挡位运动05编写传送带基础类:编写Python脚本实现传送带不同挡位运动05步骤一:编写传送带控制类基本功能继承【object】对象,使用【__init__】在实例化时,传入参数定义变量,便于初始化/设置一些属性值。定义【Belt】类中函数,函数需要传入【self】参数,【self】参数指的是类实例对象本身(注意:不是类本身)。例如:【def__init__(self):】定义传送带Belt类属性:self.step、self.period、self.duty、self.reverse、self.enable。使用【self.turn_forward_dir()】和【self.init_set_pwm()】定义传送带正转方向并且因为【self.enable=0】不启动传送带。classBelt(object):def__init__(self):try:self.step=3#中速挡位self.period=1100000#设置频率需要转换为设置寄存器周期值self.duty=50#占空比duty需要转换为设置寄存器占空比值self.reverse='normal'#输出是否反向self.enable=0#PWM是否使能1:使能0:不使能self.turn_forward_dir()#默认方向:正向self.init_set_pwm()

编写Python脚本实现传送带不同挡位运动05

exceptExceptionase:print(e)#打印所有异常到屏幕

definit_set_pwm(self):ifnotos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):#osos.system('echo0>/sys/class/pwm/pwmchip0/export')ifos.path.exists('/sys/class/pwm/pwmchip0/pwm0'):ifself.duty>100orself.duty<0:print("dutyseterror,setduty100%")self.duty=100duty_cycle=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/duty_cycle')duty_value=duty_cycle.read()period1=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/period')period_value=period1.read()ifint(duty_value)>int(period_value):#当前的duty_value大于了要设置的周期period值,先设置duty_cycleduty_cmd='echo'+str(int((self.period*self.duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)period_cmd='echo'+str(self.period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)

编写Python脚本实现传送带不同挡位运动05else:period_cmd='echo'+str(self.period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)duty_cmd='echo'+str(int((self.period*self.duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)reverse_cmd='echo'+self.reverse+'>/sys/class/pwm/pwmchip0/pwm0/polarity'os.system(reverse_cmd)stop_cmd='echo'+str(self.enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(stop_cmd)

#设置针脚休眠sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'<3>#打开休眠模式sleep_pin.export=False封装函数——设置针脚休眠:编写Python脚本实现传送带不同挡位运动05

通过【SysfsGPIO】实例化编号【42】的对象赋值给【sleep_pin】,设置针脚属性【export】、【direction】、【value】,完成针脚休眠设置。defset_sleep_mode(self,enable):"""设置针脚休眠:return:"""sleep_pin=SysfsGPIO(42)sleep_pin.export=Truesleep_pin.direction='out'ifenable==1:sleep_pin.value=1#打开休眠模式else:sleep_pin.value=0#关闭休眠模式time.sleep(0.1)sleep_pin.export=False值

封装函数——传送带正转:编写Python脚本实现传送带不同挡位运动05

仿照上一节封装函数——设置针脚休眠,通过SysfsGPIO实例化编号33的对象赋值给pin,设置针脚属性export、direction、value,完成传送带正转设置。defturn_reverse_dir(self):"""传送带反转:paramcommand::return:"""pin=SysfsGPIO(33)pin.export=Truepin.direction='out'pin.value=0time.sleep(0.1)pin.export=False

封装函数——挡速计算:编写Python脚本实现传送带不同挡位运动051.首先判断设置的挡位是否大于最大值,或者小于最小值。若是,则将挡位重新赋值为最大值或最小值;2.然后进行周期值换算。defconvert_fre(self,step):"""挡速计算:paramstep:挡位:return:返回挡速"""

ifstep<PWM_STEP_MIN:#判断挡速是否小于最小值step=PWM_STEP_MINelifstep>PWM_STEP_MAX:#判断挡速是否大于最大值step=PWM_STEP_MAXself.period=(1500-step*PWM_STEP_VALUE)*1000#挡位换算成挡速returnself.period

封装函数——设置传送带挡速:编写Python脚本实现传送带不同挡位运动05

读取当前【duty_value】值,若大于要设置的周期【period】值,先设置【duty_cycle】,防止设置报错。defset_belt_reg(self,period,enable):"""设置传送带挡速:paramperiod:周期:paramenable:PWM输出是否使能:return:None"""duty_cycle=os.popen('cat/sys/class/pwm/pwmchip0/pwm0/duty_cycle')duty_value=duty_cycle.read()ifint(duty_value)>period:#当前的duty_value大于了要设置的周期period值,先设置duty_cycleduty_cmd='echo'+str(int((period*self.duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)period_cmd='echo'+str(period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)

封装函数——设置传送带挡速:编写Python脚本实现传送带不同挡位运动05

读取当前【duty_value】值,若大于要设置的周期【period】值,先设置【duty_cycle】,防止设置报错。else:period_cmd='echo'+str(period)+'>/sys/class/pwm/pwmchip0/pwm0/period'os.system(period_cmd)duty_cmd='echo'+str(int((period*self.duty)/100))+'>/sys/class/pwm/pwmchip0/pwm0/duty_cycle'os.system(duty_cmd)stop_cmd='echo'+str(enable)+'>/sys/class/pwm/pwmchip0/pwm0/enable'os.system(stop_cmd)封装函数——传送带正常运行:编写Python脚本实现传送带不同挡位运动05步骤:1.关闭针脚休眠2.定义【3】挡位为正常运行挡速3.定义【PWM】为使能状态4.调用函数进行挡位换算5.调用函数设置传送带挡速并启动传送带defbelt_move(self):"""传送带正常运行:return:"""self.set_sleep_mode(0)self.step=3self.enable=1self.period=self.convert_fre(self.step)#挡位换算self.set_belt_reg(self.period,self.enable)#设置传送带挡速pass封装函数——传送带加速运行:编写Python脚本实现传送带不同挡位运动05

仿照上一节封装函数——传送带正常运行,将【self.step】挡位变量设置为6,使得传送带加速运行。defbelt_fast_move(self):"""传送带加速运行挡位6:paramcommand::return:None"""self.set_sleep_mode(0)self.enable=1#PWM使能self.step=6#挡位6self.period=self.convert_fre(self.step)#挡位换算self.set_belt_reg(self.period,self.enable)#设置传送带挡速pass封装函数——传送带自定义挡位:编写Python脚本实现传送带不同挡位运动05仿照上一节封装函数——传送带正常运行:1.函数增加一个挡位参数,用于自定义挡位设置。2.将传入的参数【step】赋值给【self.step】挡位变量,使得能够调用该函数进行自定义挡位设置。defbelt_set_move_step(self,step):"""传送带设置挡位0~6自定义:paramcommand:step挡位:return:"""self.set_sleep_mode(0)self.enable=1#PWM使能self.step=step#自定义挡位self.period=self.convert_fre(self.step)#换算成对应的挡位self.set_belt_reg(self.period,self.enable)#设置传送带挡速pass封装函数——传送带停止:编写Python脚本实现传送带不同挡位运动051.定义PWM为终止使能状态。2.传入【set_belt_reg】函数中,停止传送带。3.调用设置针脚休眠函数,打开针脚休眠。避免传送带在不工作的状态下,一直消耗电流产生热量,使得电机发热。defbelt_stop(self):"""传送带停止:paramcommand::return:"""self.enable=0self.set_belt_reg(self.period,self.enable)#设置传送带挡速self.set_sleep_mode(1)动手练习:运行传送带,并设置传送带正反转、加减速05调用.【编写Python脚本实现传送带不同档位的运动封装好的传送带基础类】,通过调用【Belt】类来实现控制传送带运动,按照以下要求完成实验:1.在<1>处实例化一个【Belt】类对象为【belt】2.在<2>处使用对象belt调用类中函数【turn_reverse_dir()】,设置传送带运动方向为反向。3.在<3>处使用对象belt调用类中函数【belt_move()】,设置传送带以正常的速度运行。4.在<4>处使用对象belt调用类中函数【belt_fast_move()】,设置传送带加速运行。5.在<5>处使用对象belt调用类中函数【belt_set_move_step()】,设置以挡速为【2】运行传送带。6.在<6>处使用对象belt调用类中函数【belt_stop()】,设置传送带停止运行。<1>#创建对象print("启动传送带")time.sleep(1)<2>#传送带正向print("传送带正向")time.sleep(2)动手练习:运行传送带,并设置传送带正反转、加减速05<3>#正常速度运行print("正常速度运行")time.sleep(3)#传送带运动时长<4>#

温馨提示

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

评论

0/150

提交评论