网球识别捡球机器人_第1页
网球识别捡球机器人_第2页
网球识别捡球机器人_第3页
网球识别捡球机器人_第4页
网球识别捡球机器人_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

网球识别捡球机器人摘要伴随社会的快速进步,人民的生活水平日益提高,人们非常的重视自身的健康状况。网球运动是一种形式优雅的运动,但运动过程剧烈,网球在世界范围内受的关注度很高。随着网球运动的不断普及和推广,运动的过程中对于掉落在地上的网球,需要进行重复的收集,这种无意义的体力消耗,不仅枯燥而且非常浪费时间。而且由于网球是在地面上进行的,运动者在移动时很有可能踩到网球,从而导致摔倒,并且可能遭受更大的身体伤害的概率也增加。然而目前市场上的网球收集装置种类较少,许多装置大部分都依赖人工操作,因此无法从根本上解决捡球过程中的人工参与问题。文中详细介绍了一种基于STM32单片机的网球识别捡球机器人系统的设计,通过与传感器和摄像头配合可以实现网球的目标识别、路径的规划及机械臂的抓取,同时可以实现手机的远程控制及参数读取。这一系统对降低人工劳动成本、提升捡球效率有着广泛的市场价值。关键词:捡球机器人;图像识别;循迹;避障;网球抓取

目录第1章绪论 图3.4蜂鸣器警报电路3.5摄像头模块OV2640是1/4寸的图像传感器的一种型号。整个传感器本身可以自动控制,支持多种数据形式的传输。特点:(1)支持UXGA,SXGA,SVGA以及从SXGA按比例缩小到40*30的任何尺寸(2)高灵敏度、低电压适合嵌入式应用(3)标准的SCCB接口,兼容IIC接口(4)支持图像缩放和闪光灯(5)支持图像压缩,即可输出JPEG图像数据图3.5摄像头模块电路图图3.6摄像头模块实物图3.6SG90舵机舵机,也被叫做伺服电机,本质上是一种具有反馈结构形式的电机,它本身的转速很快,可以快速的完成任务,还能控制时进行准确的定向。一般应用舵机,主要是在一些需要进行方向变化但可以保持的控制系统中使用。舵机可以通过输入的PWM波的占空比来改变角度的变化方向,捡球机器人使用了SG90舵机,可以完成0-180度的角度变化。通过使用舵机来控制机器人底盘的运动和机械臂的抓取控制。如图3.8所示。图3.7舵机实物图图3.8舵机原理图3.7本章小结本章对每个单元进行了详细的叙述。熟悉蜂鸣器报警单元、STM32单元、图像识别单元,以及不同单元之间联系。通过各系统的联动,对机器人进行监控。在本章中,在焊接电路时必须熟悉每个设备的引脚,并且在焊接时要小心,以避免出现操作错误,损坏器件。

第4章系统软件部分设计因为制作的网球识别捡球机器人,依赖手机和单片机相互通信。所以,对于手机调试,需要考虑对应APP程序设计。这里先使用蓝牙,让手机和单片机连接。然后进行上电,进行功能实验,判断功能满足与否。4.1手机客户端APP设计考虑到手机端设计,本文使用了个游戏遥控图标,作为手机APP图标。本身设计的APP界面简单,只是增加了功能设计,然后进行了界面美观,包含了一些指令,这样可以让人很容易操作。图4.1手机APP界面4.1.1使蓝牙模块进行APP进行通信确定要进行连接,首先先要打开手机上的蓝牙,然后把单片机的蓝牙模块接入。手机APP上出来登录界面,输入蓝牙连接密码,这样就把手机和单片机连在一起。蓝牙的连接密码,可以通过程序设定,这里使用初设的密码。登录页面如图所示:图4.2登录界面登录页面的设计很简单,包括Android移动客户端,浏览蓝牙手机的IP地址和端口。该设计选择蓝色作为界面的主背景色,方向控制的图标选择绿色背景,功能框描述为黑色字体。页面布局合理,整体主要展示摄像范围。APP的设计功能,完全可以满足使用的要求。4.1.2控制页面图4.3参数控制界面4.1.3显示屏程序设计如图10就是手机端屏幕显示的摄像头拍摄范围,通过摄像头,可以操控机械手,完成指定目标的抓取动作。显示屏显示界面清晰,便于操作人员控制。图4.4手机端实物显示4.2蓝牙模块程序设计本次设计的网球识别机器人,整个的流程为设备首先要初始化,然后调用蓝牙模块,通过是否连接成功进行判断,如果连接成功,就在手机上有图像显示,反之没有。总的程序如附录所示,流程图如图4.2所示:图4.5通信主流程图4.3红外避障循迹模块程序设计 本次设计的机器人小车接通电源后,首先要初始化,然后开始读取循迹模块数据,当中间检测到黑线时会前进,左边检测到黑线时会左转,右边检测到黑线时则会右转,流程图如下图4.3所示:图4.6红外避障循迹模块流程图4.4摄像头模块流程图机器人小车进行单片机初始化后,通过摄像头采集网球的图像数据,然后进行传输到单片机,单片机会驱动机械臂完成抓取。流程图如图4.7所示:图4.7摄像头模块流程图4.5舵机流程图当小车进行单片机初始化后,通过摄像头检测数据,将信息传到舵机中,从而舵机动作带动机械臂,完成抓取。图4.8舵机流程图4.6本章小结本章介绍了手机APP界面设计,以及蓝牙的程序流程分析,以及手机和单片机通信的主流程图,最终通过正确编写代码,完成了网球识别捡球机器人的软件设计,实现了控制机器人的运动和抓取过程,并具有了远程控制的功能。第5章系统调试5.1硬件检查购买完所需的元器件,按照电路图检查安装的线路,根据电路连线,进行逐步检查。按照原理图,放置好元件,然后根据连通的顺序,进行焊接。刚开始焊接温度掌控不好,焊接过程中,焊点焊的不牢固,有的焊点过大,和周围粘连,出现线路短路,导致电路错误。如果电路中出现短路,会造成器件烧坏,又或者更严重的后果。当电源连接没问题后,然后观察焊接的电路板看有没有少焊、多焊的位置,这样就可以保证硬件电路板正常了。5.2软件软件调试相对来说,更加的困难。首先,先要把程序通过下载线,下载到单片机中,然后给机器人通电,观察电源指示正常与否,然后验证机器人能否做指令动作;再次把手机和单片机连接,通过初始密码配对,然后手机控制,按方向按钮,观察是否动作,以及动作方向是否正确。这些就是本次实验在软件调试的时候遇到的问题。5.3实物调试图5.1设计实物(1)首先网球识别捡球机器人在通电后,小车可以通过红外循迹传感器在黑色标记下进行自动循迹模式,当小车通过识别模块和超声波模块可以测出相应距离,识别到目标网球,这时候抓取机器人可以自动走到网球面前抬动机械臂并且张开爪子进行网球抓取。图5.2小车循迹图5.3抓取网球(2)除此之外,小车还可以实现无线通信,利用小车上的蓝牙模块,可以用手机与小车进行连接。第一步,拿出手机打开视频小车的软件APP,这个时候屏幕上会出现一个搜索设备图标,点击设备找到小车设备名称,就可以进行连接。图5.4蓝牙连接界面(3)在连接成功之后,通过小车的摄像头模块软件上会显示小车前方的界面,这时可以点击跟随模式,使用方向键进行移动,当小车移动到网球的网球的跟前时再次点击跟随模式,就可以使用方向键来控制机械臂和爪子了。图5.5手机显示界面(4)在小车抓住网球的时候,再一次通过方向键控制小车的机械臂,将网球放在指定位置。图5.6机器人抓球后运动图第6章结论与展望6.1结论与展望本次设计为网球识别捡球机器人系统设计,硬件部分的设计主要是蓝牙模块、电源电路,还有单片机设计控制回路制作,然后根据手机,进行相应的运动远程控制。选用主板芯片STM32微处理器,搭配红外传感器、图像识别模块、超声波模块、无线通信模块控制机器人,完成对网球的目标识别与相对定位,并通过机械臂抓取,完成捡球动作。手机APP可以表明,蓝牙连接信息的上传和接受量。除此之外,手机上APP可以设定控制参数范畴。超范围外,单片机设计蜂鸣器警报,手机上APP警报。经过这次网球识别机器人的制作,让自己一方面锻炼了动手能力,另一方面也把课本知识进行了应用。设计时,先研究文字资料,了解人工智能技术,然后实际操作,感知能力的提升。制作网球识别捡球机器人系统,真正的可以解放双手。通过对系统的设计和完善,最终完成的网球识别捡球机器人预期有如下成果:1.图像识别模块完成网球的目标识别,不漏球;2.使用红外传感器实现循迹;超声波传感器用来进行测距,以及移动中的避障。3.网球抓取,利用图像信息的获取,机械臂完成抓取命令。4.无线通信,实现人机交互可实现远程控制。本文对网球的识别、网球的抓取以及机器人的行动过程进行了分析研究,但是未来可以考虑对网球的轮廓和相应的识别算法进行进一步的研究,以不断提升拾取网球的效率,更加智能化。参考文献[1]马飞.一种多传感器数据融合的智能捡球机器人结构设计[J].内蒙古师范大学学报,2017,46(04):517-519+523.[2]樊东,陈津徽,张元良.机器视觉技术在工业中的应用[J].科技风,2020(13).[3]周旭,周海波,陈睿等.基于双目视觉的机械手捡球机器人设计[J].机床与液压,2020(03).[4]张文勇,张儒良,李云松.基于视觉分析的智能拾网球机器人研究[J].电子测试,2020(02).[5]郑植,席先鹏,王楠等.机器视觉在网球捡球机器人中的应用研究[J].科技创新与应用,2019(16).[6]朱珂皓.基于上位机视觉的自搜寻捡网球机器人[J].工业控制计算机.2018(10).[7]张帏.视觉分拣机器人系统设计与实现[D].黑龙江大学,2019.[8]宿增迪.基于视觉识别的智能捡网球机器人开发[D].大连海事大学.2018.[9]WangYong,HanZunpu.Antcolonyoptimizationfortravelingsalesmanproblembasedonparametersoptimization[J].AppliedSoftComputing,2021.[10]VasconcelosFrancisco,BarretoJoaoP,BoyerEdmond.AutomaticCameraCalibrationUsingMultipleSetsofPairwiseCorrespondences.[J]IEEEtransactionsonpatternanalysisandmachineintelligence,2018(4)[11]BolinCai,YuweiWang,KeyiWang,MengchaoMa,XiangchengChen.CameraCalibrationRobusttoDefocusUsingPhase-ShiftingPatterns[J].Sensors,2017(10)[12]杨青.Halcon机器视觉算法原理与编程实战[M].北京大学出版社,2019.[13]李亚龙.改进量子蚁群算法的研究及应用[D].安徽大学,2014.[14]OleksandrSemeniuta.AnalysisofCameraCalibrationwithRespecttoMeasurementAccuracy[J].ProcediaCIRP.2016.[15]范昭君.\o"智能控制在自动捡球机器人中的应用"智能控制在自动捡球机器人中的应用[J].\o"自动化技术与应用"自动化技术与应用,\o"2020(05)"2020(05).[16]陈卫;邓志良.\o"捡球机器人路径规划算法研究及仿真"捡球机器人路径规划算法研究及仿真[J].\o"计算机仿真"计算机仿真,\o"2020(10)"2020(10).[17]徐霁;沈茜.\o"基于Android控制的乒乓球捡拾机器人设计"基于Android控制的乒乓球捡拾机器人设计[J].\o"信息与电脑(理论版)"信息与电脑(理论版),\o"2019(05)"2019(05).[18]陈青华;左太虎;徐一红.\o"基于OpenMV的智能捡球机器人的设计与实现"基于OpenMV的智能捡球机器人的设计与实现[J].\o"信息技术与信息化"信息技术与信息化,\o"2020(10)"2020(10).[19]章明干.\o"AI捡球机器人"AI捡球机器人[J].\o"中国科技教育"中国科技教育,\o"2021(07)"2021(07).[20]BakerL,MillsS,LanglotzT,etal.PowerlinedetectionusingHoughtransformandlinetracingtechniques[C]//InternationalConferenceonImageandVisionComputingNewZealand.IEEE,2017:1-6.[21]NINOPEREIRA,FERNANDORIBEIRO,GILLOPESI,DANIELWHITNEY,JORGELINO.AutonomousGolfBallPickingRobotDesignandDevelopment[J].IndustralRobot:AnInternationalJournal.2012,(39).

附录主程序importsensor,time,image,lcd,mathfrompybimportServo,UART,Pin,TimerfrompidimportPID#主体功能:#视觉追踪小车:蓝牙控制小车,循迹,目标跟随(颜色/人脸识别跟随),避障(循迹+目标识别避障,暂时用来做舵机控制指令)#机械臂自动搬运小车:蓝牙控制小车,循迹目标识别自动搬运,目标自动跟随捡球,机械臂控制#蓝牙协议:#蓝牙数据发送规则:操作按钮按下发送数据,抬起发送0x00,#控制模式切换方式:按一下选中功能,再按一次退出功能,如按下循迹,进入自动循迹功能,再按一下循迹就退出到手动控制#自动搬运小车数据协议:0x00停止;0x01前进(机械臂向上);0x02后退(机械臂向下);0x03左转(机械臂向左);0x04右转(机械臂向右);#0x05循迹(自动搬运);0x06跟随(自动捡球);0x07机械臂控制(上下左右按钮用来控制机械臂);0x08释放;0x09抓取#小车状态全局变量#定义小车状态数据结构classCARSTATE(object):enSTOP=0enRUN=1enBACK=2enLEFT=3enRIGHT=4enRELEASE=5enCATCH=6enMANUAL=7enTRACING=8enTRAKING=9enAVOIDING=10#globalg_carstate,g_cardir,power,ball_sg_carstate=CARSTATE.enTRAKINGg_cardir=CARSTATE.enSTOPpower=800ball_s=0#串口uart1=UART(1,9600)#PA9,PA10#globalbluetooth_stutas,key_state,key_event,G_FLAGbluetooth_stutas=0G_FLAG=0key_state=0key_event=0key=Pin('D8',Pin.IN,Pin.PULL_UP)THRESHOLD=[(40,96,-9,-38,20,57)]#黄绿色网球#THRESHOLD=[(53,99,-13,46,29,57)]#黄色乒乓球##生成50HZ方波,使用TIM3,channels1,2#控制舵机需要输出2.5%-12.5%的PWM#0度0.5/20*100=2.5;(要看实际的舵机是否支持0度,一般运动不到0度,需要把这个值调大一点)#45度1.0/20*100=5;#90度1.5/20*100=7.5;#135度2.0/20*100=10;#180度2.5/20*100=12.5;#生成50HZ方波#控制舵机需要输出2.5%-12.5%的PWMtim=Timer(2,freq=50)#Frequencyin50Hz(20ms)claw=tim.channel(3,Timer.PWM,pin=Pin("A2"),pulse_width_percent=7.5)#初始角度90度globalclaw_offset#定义机械爪中心和摄像头图像中心偏移位置claw_offset=(-25)claw_release=140claw_catch=10count=0#控制舵机需要输出2.5%-12.5%的PWMpan_servo=Servo(1)#左右控制tilt_servo=Servo(2)#上下控制#PID云台PID,小车跟随PID,小车循迹PIDpan_pid=PID(p=0.2,i=0,imax=90)#脱机运行或者禁用图像传输,使用这个PIDtilt_pid=PID(p=0.15,i=0,imax=90)#脱机运行或者禁用图像传输,使用这个PIDdis_pid=PID(p=0.9,i=0.01)len_pid=PID(p=0.6,i=0.01)############################电机驱动部分#############################如果上电时出现电机异常运转,是因为PB4引脚默认为JTAG功能,更新到最新日期的固件可解决这个问题pwmA1=Pin('B0')#TIM3_CH3pwmA2=Pin('B1')#TIM3_CH4pwmB1=Pin('B4')#TIM3_CH1pwmB2=Pin('B5')#TIM3_CH2#定义定时器3,频率为1000Hz,即1ms一次定时器中断tim=Timer(3,freq=1000)#初始化PWM,通过调节PWM控制左右轮速度,初试占空比为0(车静止)Left1=tim.channel(4,Timer.PWM,pin=pwmA1,pulse_width_percent=0)Left2=tim.channel(3,Timer.PWM,pin=pwmA2,pulse_width_percent=0)Ritht1=tim.channel(1,Timer.PWM,pin=pwmB1,pulse_width_percent=0)Ritht2=tim.channel(2,Timer.PWM,pin=pwmB2,pulse_width_percent=0)#定义机械爪舵机运动角度#输入:舵机运动到目标角度#输出:无defclaw_angle(servo_angle):ifservo_angle<=0:servo_angle=0ifservo_angle>=180:servo_angle=180percent=(servo_angle+45)/18claw.pulse_width_percent(percent)#定义舵机运动#输入:舵机运动的起止角度#输出:无defservo_move(servo_n,start_angle,end_angle):ifstart_angle>=end_angle:while(start_angle>=end_angle):servo_n.angle(start_angle-2)time.sleep(50)start_angle=start_angle-2return0ifstart_angle<=end_angle:while(start_angle<=end_angle):servo_n.angle(start_angle+2)time.sleep(50)start_angle=start_angle+2return0#功能:小车控制#输入:左,右速度#输出:无defrun(left_speed,right_speed):#print("left_speed",left_speed)#print("right_speed",right_speed)ifleft_speed<-100:left_speed=-100elifleft_speed>100:left_speed=100ifright_speed<-100:right_speed=-100elifright_speed>100:right_speed=100ifleft_speed>0:Left1.pulse_width_percent(abs(left_speed))Left2.pulse_width_percent(abs(0))else:Left1.pulse_width_percent(abs(0))Left2.pulse_width_percent(abs(left_speed))ifright_speed>0:Ritht1.pulse_width_percent(abs(right_speed))Ritht2.pulse_width_percent(abs(0))else:Ritht1.pulse_width_percent(abs(0))Ritht2.pulse_width_percent(abs(right_speed))#功能:寻找最大的目标,计算方式为像素面积排序#输入:链表objects,坐标X,坐标y,像素宽,像素高#输出:最大目标元组deffind_max_object(objects):max_size=0forobjectinobjects:ifobject[2]*object[3]>max_size:max_object=objectmax_size=object[2]*object[3]returnmax_objectdefclaw_auto_catch(img,ball_s,max_blob):globalcountpan_error=0tilt_output=0title_angle=0pan_error=img.width()/2-max_blob.cx()tilt_error=(img.height()/2-claw_offset)-max_blob.cy()print("pan_error:",pan_error)#pan_output=pan_pid.get_pid(pan_error,1)/2tilt_output=tilt_pid.get_pid(tilt_error,1)#关闭左右追踪title_angle=tilt_servo.angle()-tilt_output#pan_servo.angle(pan_servo.angle()+pan_output)tilt_servo.angle(title_angle)############################抓取#############################抓取得策略是摄像头与夹子呈一定角度安装,大概45度,让一半得夹子在图像中,目的是方便判断目标是否一直在夹子上#然后修订目标在夹子中得位置,当修订好之后再执行夹取动作。if(ball_s>=60andball_s<=100):run(0,0)count=count+1ifcount>=3:count=0run(0,0)servo_move(tilt_servo,tilt_servo.angle(),20)claw_angle(claw_catch)#夹取time.sleep(1000)servo_move(tilt_servo,tilt_servo.angle(),-20)#抬起time.sleep(1000)run(60,60)#前进time.sleep(3000)run(0,0)servo_move(tilt_servo,tilt_servo.angle(),10)#向下time.sleep(1000)claw_angle(claw_release)#释放time.sleep(1000)run(-60,-60)#后退time.sleep(4000)run(0,0)if(ball_s>100)and(ball_s<800):############################云台追踪############################count=0claw_angle(claw_release)#############################小车追踪############################power=0power_s=0power_l=0#前进与后退控制,#没有做后退,而是采用先大致接近目标,再修订距离得方式#前进与后退控制,这里采用的是像素面积计算距离,而抓取采用的是距离参数,#两者可以统一一下,具体可以根据实际物体大小测定后调整ifball_s>300andball_s<=800:dis_error=ball_s-300power_s=int(dis_pid.get_pid(dis_error,1)/2)if(power_s>100):power_s=100if(power_s<60):power_s=60elifball_s>100andball_s<=300:dis_error=ball_s-100power_s=int(dis_pid.get_pid(dis_error,1)/2)#电机PWM限幅,防止最后一点距离走不到if(power_s<60):power_s=60else:power_s=0power_l=int(len_pid.get_pid(pan_error,1))print("power_s:",power_s)print("power_l:",power_l)run(power_s-power_l,power_s+power_l)defcolor_detect(img):globallast_objects,objectsball_s=0iflast_objects:#如果上一张图像中找到了色块,就在色块周边扩展,然后在扩展后的ROI区域进行寻找色块,这样有利于追踪forbinobjects:x1=b[0]-7y1=b[1]-7w1=b[2]+12h1=b[3]+12#print(b.cx(),b.cy())roi2=(x1,y1,w1,h1)#print(roi2)objects=img.find_blobs(THRESHOLD,roi=roi2,area_threshold=200)last_objects=objectselse:#如果没有找到色块,就重新计算全图的色块,并将全图色块信息保存到上一张图像上,这样下一次就可以再进行ROI区域寻找色块objects=img.find_blobs(THRESHOLD,area_threshold=200)last_objects=objectsifobjects:#如果找到了色块,就计算最大的色块位置,并做舵机追踪max_blob=find_max_object(objects)#色块的位置和大小需要满足图像本身大小的要求,以免越界ball_s=19500/(max_blob[2]+max_blob[3])#计算距离img.draw_rectangle(max_blob.rect())#rect目标区域画矩形img.draw_cross(max_blob.cx(),max_blob.cy())#cx,cy画中心点img.draw_string(max_blob.cx(),max_blob.cy(),"%.2fmm"%(ball_s))#显示目标的距离参数claw_auto_catch(img,ball_s,max_blob)else:run(0,0)if(tilt_servo.angle()<=10):tilt_servo.angle(10)else:tilt_servo.angle(tilt_servo.angle())claw_angle(claw_release)defbluetooth_deal(img):globalbluetooth_stutas,G_FLAG,g_cardir,g_carstateifuart1.any():rec=uart1.read(1)ifrec!=None:rec=bytes(rec)print(rec)ifrec==b'\x00':#停车g_cardir=CARSTATE.enSTOPelifrec==b'\x01':#前进g_cardir=CARSTATE.enRUNelifrec==b'\x02':#后退g_cardir=CARSTATE.enBACKelifrec==b'\x03':#左转g_cardir=CARSTATE.enLEFTelifrec==b'\x04':#右转g_cardir=CARSTATE.enRIGHTelifrec==b'\x05':#循迹g_carstate=CARSTATE.enTRACINGelifrec==b'\x06':#跟随g_carstate=CARSTATE.enTRAKINGelifrec==b'\x07':#避障#按两次就回到手动模式bluetooth_stutas=bluetooth_stutas+1ifbluetooth_stutas==1:g_carstate=CARSTATE.enAVOIDINGG_FLAG=1ifbluetooth_stutas==2:g_carstate=CARSTATE.enMANUALG_FLAG=0bluetooth_stutas=0elifrec==b'\x08':#app上是关灯按钮,自定义释放g_cardir=CARSTATE.enRELEASEelifrec==b'\x09':#app上是开灯,自定义抓取g_cardir=CARSTATE.enCATCHelifrec==b'\xF0':#一键切换到手动模式g_carstate=CARSTATE.enMANUALBST_fLeftMotorOut,BST_fRightMotorOut,g_power=0,0,800if(g_carstate==CARSTATE.enMANUAL):#手动控制小车if(g_cardir==CARSTATE.enSTOP):BST_fLeftMotorOut=0BST_fRightMotorOut=0elif(g_cardir==CARSTATE.enRUN):BST_fLeftMotorOut=g_powerBST_fRightMotorOut=g_powerelif(g_cardir==CARSTATE.enBACK):

温馨提示

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

评论

0/150

提交评论