版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1项目描述本项目的主要内容包括:交互式智能家居机器人控制器的软硬件综合方案设计,多传感器的测量实验,多传感器配合智能决策,完美结合嵌入式控制器、底层控制板和电机系统搭建传感器完成具有复杂智能的服务机器人项目。本项目是前面几个项目的综合训练。返回7.2教学目标通过学习和实训,学生需要掌握以下知识:(1)能够理解各种传感器在服务机器人中的作用。(2)熟练掌握通过嵌入式控制器做上位机、底层控制器做基本控制等的操作方式。(3)能够理解服务机器人完成服务的基本步骤。(4)能够按照提供的案例程序编写服务机器人程序代码。(5)能够熟练操作软件、硬件联调。(6)熟练掌握每个模块程序的下载方法。(7)能够通过提供的本体开发出更多互动的程序案例。返回7.3知识准备对服务机器人的基本概念进行详细的了解,对人工智能技术有一定的了解,熟悉常用的算法,如智能选择、路径规划、室内定位、目标锁定等,后续可以对物联网组网技术进行一定的了解,如多点组网等。返回7.4任务实现7.4.1综合方案设计学习完上面的内容后,本书讲解的服务机器人的基本架构就比较清楚了,从机器的系统来看,其分为嵌入式控制器系统、单片机控制系统、电机驱动系统、传感器检测系统,如图7.4.1所示。嵌入式控制器系统主要负责大量运算和图像视觉处理的支持和显示,相当于一个微型电脑控制器;单片机控制系统分布在底层,主要用来控制传感器和驱动电机电路;电机驱动系统主要用来控制机器人运动;传感器检测系统用来感知当前环境。这是一个完善的智能闭合控制系统,可以增加更多传感器,使机器人更加智能化。从服务机器人的功能角度来看,本服务机器人模拟了人的视觉系统、触觉系统、听觉系统,还具有较强的人机交互功能,如图7.4.2
所示。下一页返回7.4任务实现7.4.2整体硬件电路设计机器人控制系统整体电路设计如图7.4.3所示,嵌入式控制板和传感器模块没有被包括在内。7.4.3多模块智能程序的编写在前面的内容中,本书介绍了各个模块,在这里要把这几个模块结合起来做一个整体测试,此时可以通过无线蓝牙键盘模块输入数字区键1~9来进行功能测试,标配的控制器中无线键盘鼠标是一体的(见图7.4.4),由具有USB接口的接收器接收。在嵌入式控制板中测试传感器的界面如图7.4.5所示。上一页下一页返回7.4任务实现底层控制板的程序如下:#include<Wire.h>#include<SoftwareSerial.h>SoftwareSerialmySerial(2,3);//RX,TXconstintpingTig=15;//PC1constintpingEco=14;//PC0consintflag=0;#defineSLAVE_ADDRESS0x04intnumber=0;intstate=0;上一页下一页返回7.4任务实现Charaddr[4];longduration,inches,cm;intINA=4;//电机A正反转控制端intPWMA=5;//电机A调速端intINB=7;//电机B正反转控制端intPWMB=6;//电机B调速端voidmotospd(intsp1,intsp2)//电机速度控制函数,括号内分别为左右电机速度值,{//范围-255~+255,正值为正转,负值为反转。if(sp1>0)digitalWrite(INA,HIGH);上一页下一页返回7.4任务实现elsedigitalWrite(INA,LOW);if(sp2>0)digitalWrite(INB,HIGH);elsedigitalWrite(INB,LOW);analogWrite(PWMA,abs(sp1));analogWrite(PWMB,abs(sp2));}}voidsetup(){上一页下一页返回7.4任务实现pinMode(INA,OUTPUT);pinMode(INB,OUTPUT);//配置电机驱动IO口为输出pinMode(pingTig,OUTPUT);pinMode(pingPEco,INPUT);Serial.begin(9600);//startserialforoutputmySerial.begin(9600);//initializei2casslaveWire.begin(SLAVE_ADDRESS);//definecallbacksfori2ccommunicationWire.onReceive(receiveData);Wire.onRequest(sendData);上一页下一页返回7.4任务实现Serial.println("Ready!");}voidloop(){delay(100);}longmicrosecondsToInches(longmicroseconds){returnmicroseconds/74/2;}longmicrosecondsToCentimeters(longmicroseconds){上一页下一页返回7.4任务实现returnmicroseconds/29/2;}//callbackforreceiveddatavoidreceiveData(intbyteCount){while(Wire.available()){number=Wire.read();Serial.print("datareceived:");Serial.println(number);if(number==1){longduration,inches,cm;上一页下一页返回7.4任务实现digitalWrite(pingTig,LOW);delayMicroseconds(2);digitalWrite(pingTig,HIGH);delayMicroseconds(5);digitalWrite(pingTig,LOW);duration=pulseIn(pingEco,HIGH);inches=microsecondsToInches(duration);cm=microsecondsToCentimeters(duration);Wire.write(cm);上一页下一页返回7.4任务实现}elseif(number==2){Wire.write(sensorPin);}esleif(number==3){motospd(100,100);//直行Wire.write(0x01);}}}上一页下一页返回7.4任务实现//callbackforsendingdatavoidsendData(){Wire.write(flag);//为零时,上位机不处理,为1时上位机处理}嵌入式控制板的程序如下:importsmbusimporttime#forRPIversion1,use"bus=smbus.SMBus(0)"bus=smbus.SMBus(1)#ThisistheaddresswesetupintheArduinoProgramaddress=0x04上一页下一页返回7.4任务实现defwriteNumber(value):bus.write_byte(address,value)#bus.write_byte_data(address,0,value)return-1defwriteNumber(value):bus.write_byte(address,value)#bus.write_byte_data(address,0,value)return-1defreadNumber():number=bus.read_byte(address)#number=bus.read_byte_data(address,1)上一页下一页返回7.4任务实现returnnumberwhileTrue:var=input("Enter1-9:")ifnotvar:continuewriteNumber(var)print"RPI:HiArduino,Isentyou",var#sleeponesecondtime.sleep(1)number=readNumber()print"Arduino:HeyRPI,Ireceivedadigit",numberprint上一页下一页返回7.4任务实现7.4.4程序代码的编辑、调试及运行前面的内容基本上对整个智能交互家居机器人的所有模块进行了讲解。如果要搭建复杂的功能,那么配合传感器的思路算法比较优越。在编写和调试程序的时候要注意接线的正确性和各个部件不要松动,可以先一个一个地测试传感器,然后逐步联合起来,这样调试,便很容易知道问题的关键所在。7.4.5烧写可执行文件由于所有的模块都是一个独立的系统,它们之间通过总线方式进行通信,所以要下载程序的环节就比较多,如底层控制板需要下载程序、语音识别模块需要下载配置文件、嵌入式控制板需要下载程序。下载这些程序的最好方式是,对某一个模块下载程序的时候,可以断开其他模块,这是为了避免有时候操作不当,损坏了其他模块。上一页返回7.5考核评价任务触觉和听觉导航视觉综合案例在这个任务中,可以使用触觉传感器(超声波)、听觉传感器(语音识别模块)、无线键盘(蓝牙键盘)和视觉设备(摄像头)来编写一个程序。程序的要求是,如果超声波传感器检测到障碍物或者不是由超声波检测到障碍物而是机器人听到了相关的命令,就开启摄像头来进行人脸识别,然后通过蓝牙键盘控制机器人动作,使其监控家居环境的状况。下一页返回7.5考核评价语音模块关键字的配置文件如下:0:11223344:xiaomiza::1:A505055B:qianjin:p13=0:ff2:A506065B:houtui:p13=1:013:A507075B:zuozhuan:p14=1:014:A508085B:youzhuan:p14=0:015:A509095B:qiuming:p15=0:ff上一页下一页返回7.5考核评价底层控制板的程序如下:#include<Wire.h>#include<SoftwareSerial.h>SoftwareSerialmySerial(2,3);//RX,TXconstintpingTig=15;//PC1constintpingEco=14;//PC0consintflag=0;#defineSLAVE_ADDRESS0x04intnumber=0;intstate=0;Charaddr[4];上一页下一页返回7.5考核评价intINA=4;//电机A正反转控制端intPWMA=5;//电机A调速端intINB=7;//电机B正反转控制端intPWMB=6;//电机B调速端voidmotospd(intsp1,intsp2)//电机速度控制函数,括号内分别为左右电机速度值,{//范围-255~+255,正值为正转,负值为反转。if(sp1>0)digitalWrite(INA,HIGH);elsedigitalWrite(INA,LOW);上一页下一页返回7.5考核评价if(sp2>0)digitalWrite(INB,HIGH);elsedigitalWrite(INB,LOW);analogWrite(PWMA,abs(sp1));analogWrite(PWMB,abs(sp2));}}voidsetup(){pinMode(INA,OUTPUT);pinMode(INB,OUTPUT);//配置电机驱动IO口为输出上一页下一页返回7.5考核评价pinMode(pingTig,OUTPUT);pinMode(pingPEco,INPUT);Serial.begin(9600);//startserialforoutputmySerial.begin(9600);//initializei2casslaveWire.begin(SLAVE_ADDRESS);//definecallbacksfori2ccommunicationWire.onReceive(receiveData);Wire.onRequest(sendData);Serial.println("Ready!");}上一页下一页返回7.5考核评价voidloop(){longduration,inches,cm;digitalWrite(pingTig,LOW);delayMicroseconds(2);digitalWrite(pingTig,HIGH);delayMicroseconds(5);digitalWrite(pingTig,LOW);duration=pulseIn(pingEco,HIGH);inches=microsecondsToInches(duration);cm=microsecondsToCentimeters(duration);if(cm<20)//如果超声波探测在20cm处有障碍物上一页下一页返回7.5考核评价{flag=1;}if(mySerial.available()==4)//接收到4个字节{Addr[0]=mySerial.read();Addr[1]=mySerial.read();Addr[2]=mySerial.read();Addr[3]=mySerial.read();}上一页下一页返回7.5考核评价if(sensorPin==0)//感应到人时,才能语音控制程序{if(addr[1]==0x05){motospd(100,100);//直行}Elseif(addr[1]==0x06){motospd(-100,-100);//后退}上一页下一页返回7.5考核评价Elseif(addr[1]==0x07){motospd(50,100);//左转}Elseif(addr[1]==0x08){motospd(100,50);//右转}}}上一页下一页返回7.5考核评价longmicrosecondsToInches(longmicroseconds){returnmicroseconds/74/2;}longmicrosecondsToCentimeters(longmicroseconds){returnmicroseconds/29/2;}//callbackforreceiveddatavoidreceiveData(intbyteCount){上一页下一页返回7.5考核评价while(Wire.available())number=Wire.read();}//callbackforsendingdatavoidsendData(){Wire.write(flag);//为零时,上位机不处理;为1时,上位机处理}下面介绍嵌入式控制器程序设计。无线蓝牙键盘功能设置如图7.5.1所示。上一页下一页返回7.5考核评价无线蓝牙键盘功能设置程序如下:importsmbusimporttime#forRPIversion1,use"bus=smbus.SMBus(0)“bus=smbus.SMBus(1)#ThisistheaddresswesetupintheArduinoProgramaddress=0x04fromSimpleCVimportCamera,DisplayfromtimeimportsleepmyCamera=Camera(propset={width":320,"height":240})上一页下一页返回7.5考核评价myDisplay=Display(resolution=(320,240))whilenotmyDisplay.isDone():frame=myCamera.getImage()faces=frame.findHaarFeatures(‘face’)iffaces:forfaceinfaces:print“Faceat:”+str(face.coordinaes())else:print“Nofacesdetected.”frame.save(myDisplay)Sleep(.1)上一页下一页返回7.5考核评价try:importRPi.GPIOasGPIOexceptRuntimeError:print("ErrorimportingRPi.GPIO!Thismustberunasrootusingsudo")importsys,tty,termios#getacharacterfromthecommandline#Linux/Unixonly-butthat'sOKasRPi.GPIOisRaspberryPiLinuxonlydefgetch():上一页下一页返回7.5考核评价fd=sys.stdin.fileno()old_settings=termios.tcgetattr(fd)try:tty.setraw(sys.stdin.fileno())ch=sys.stdin.read(1)finally:termios.tcsetattr(fd,termios.TCSADRAIN,old_settings)returnch上一页下一页返回7.5考核评价#MotorPINsMOTOR1A=17#leftfwdMOTOR1B=18#leftrevMOTOR2A=23#rightfwdMOTOR2B=22#rightrev#freqofpwmoutputsPWM_FREQ=50#50hz#usesprocessorpinnumberingGPIO.setmode(GPIO.BCM)#speed=pwmdutycycle,0=off,100=maxspeed=50上一页下一页返回7.5考核评价#listtoconvertkeypressesintomotoron/offvaluestocorrespondwiththedirection#directionbasedonnumberkeypadorletterseg.#8=fwd,2=rev,4=left,5=right,7=fwdleft,9=fwdright,1=revleft,3=revright#thekeyforthelististhecharacter#valuesarealltupleswhichhold(motor1,motor2)#valuesare0=motorstop,1=motorfwd(A),2=motorrev(B)上一页下一页返回7.5考核评价direction={#numberkeys'1':(2,0),'2':(2,2),'3':(0,2),'4':(1,2),'5':(0,0),'6':(2,1),'7':(1,0),'8':(1,1),'9':(0,1),上一页下一页返回7.5考核评价#keyboardkeys'r':(1,0),'t':(1,1),'y':(0,1),'f':(1,2),'g':(0,0),'h':(2,1),'c':(2,0),'v':(2,2),'b':(0,2)}上一页下一页返回7.5考核评价current_direction=(0,0)#setuppinsGPIO.setup(MOTOR1A,GPIO.OUT)GPIO.setup(MOTOR1B,GPIO.OUT)GPIO.setup(MOTOR2A,GPIO.OUT)GPIO.setup(MOTOR2B,GPIO.OUT)#setpinsasPWMpin1A=GPIO.PWM(MOTOR1A,PWM_FREQ)pin1B=GPIO.PWM(MOTOR1B,PWM_FREQ)pin2A=GPIO.PWM(MOTOR2A,PWM_FREQ)pin2B=GPIO.PWM(MOTOR2B,PWM_FREQ)上一页下一页返回7.5考核评价#startPWMpin1A.start(0)pin1B.start(0)pin2A.start(0)pin2B.start(0)whileTrue:##Motor1#fwdifcurrent_direction[0]==1:pin1B.ChangeDutyCycle(0)pin1A.ChangeDutyCycle(speed)上一页下一页返回7.5考核评价#revelifcurrent_direction[0]==2:pin1A.ChangeDutyCycle(0)pin1B.ChangeDutyCycle(speed)#stopelse:pin1A.ChangeDutyCycle(0)pin1B.ChangeDutyCycle(0)##Motor2#fwd上一页下一页返回7.5考核评价ifcurrent_direction[1]==1:pin2B.ChangeDutyCycle(0)pin2A.ChangeDutyCycle(speed)#revelifcurrent_direction[1]==2:pin2A.ChangeDutyCycle(0)pin2B.ChangeDutyCycle(speed)#stopelse:上一页下一页返回7.5考核评价pin2A.ChangeDutyCycle(0)pin2B.ChangeDutyCycle(0)#Getnextkeypressedch=getch()#q=quitif(ch=='q'):breakelif(ch=='+'orch=='p'):speed+=10ifspeed>100:speed=100上一页下一页返回7.5考核评价print"Speed:"+str(speed)+"\n"elif(ch=='-'orch=='l'):speed-=10ifspeed<0:speed=0print"Speed:"+str(speed)+"\n"elif(chindirection.keys()):current_direction=direction[ch]print"Direction"+str(current_direction[0])+str(current_direction[1])+"\n"#StopandcleanupthePWM上一页下一页返回7.5考核评价pin1A.stop()pin1B.stop()pin2A.stop()pin1B.stop()GPIO.cleanup()defwriteNumber(value):bus.write_byte(address,value)#bus.write_byte_data(address,0,value)上一页下一页返回7.5考核评价return-1defreadNumber():number=bus.read_byte(address)#number=bus.read_byte_data(address,1)returnnumber上一页返回7.6拓展提高任务触觉、听觉导航、无线数据传输和视觉信息采集显示综合编程在这个任务中,我们将结合触觉、听觉导航、Wifi无线视频传输和视觉信息采集显示一个综合应用。家居服务机器人探测到人员在附近(触觉:人体红外传感器),此时人员发出命令(听觉:语音识别模块),机器人通过执行命令跟着人员走动,然后通过无线把视频(Wifi无线传输)传到远程控制端,最后在家居机器人的显示屏上显示相关信息。下一页返回7.6拓展提高语音模块关键字的配置文件如下:0:11223344:xiaomiza::1:A505055B:qianjin:p13=0:ff2:A506065B:houtui:p13=1:013:A507075B:zuozhuan:p14=1:014:A508085B:youzhuan:p14=0:01底层控制板的程序如下:#include<Wire.h>#include<SoftwareSerial.h>SoftwareSerialmySerial(2,3);//RX,TX上一页下一页返回7.6拓展提高bytesensorPin=16;//PC2人体红外传感器Charaddr[4];#defineSLAVE_ADDRESS0x04intnumber=0;intstate=0;intINA=4;//电机A正反转控制端intPWMA=5;//电机A调速端intINB=7;//电机B正反转控制端intPWMB=6;//电机B调速端voidmotospd(intsp1,intsp2)//电机速度控制函数,括号内分别为左右电机速度值,上一页下一页返回7.6拓展提高{//范围-255~+255,正值为正转,负值为反转。if(sp1>0)digitalWrite(INA,HIGH);elsedigitalWrite(INA,LOW);if(sp2>0)digitalWrite(INB,HIGH);elsedigitalWrite(INB,LOW);analogWrite(PWMA,abs(sp1));analogWrite(PWMB,abs(sp2));上一页下一页返回7.6拓展提高}}voidsetup(){pinMode(INA,OUTPUT);pinMode(INB,OUTPUT);//配置电机驱动IO口为输出pinMode(sensorPin,INPUT);//人体传感器Serial.begin(9600);//startserialforoutputmySerial.begin(9600);//initializei2casslaveWire.begin(SLAVE_ADDRESS);上一页下一页返回7.6拓展提高//definecallbacksfori2ccommunicationWire.onReceive(receiveData);Wire.onRequest(sendData);Serial.println("Ready!");}voidloop(){if(mySerial.available()==4)//接收到4个字节{Addr[0]=mySerial.read();上一页下一页返回7.6拓展提高Addr[1]=mySerial.read();Addr[2]=mySerial.read();Addr[3]=mySerial.read();}if(sensorPin==0)//感应到人时,才能语音控制程序{if(addr[1]==0x05){motospd(100,100);//直行}上一页下一页返回7.6拓展提高Elseif(addr[1]==0x06){motospd(-100,-100);//后退}Elseif(addr[1]==0x07){motospd(50,100);//左转}Elseif(addr[1]==0x08){上一页下一页返回7.6拓展提高motospd(100,50);//右转}}}//callbackforreceiveddatavoidreceiveData(intbyteCount){}//callbackforsendingdatavoidsendData(){Wire.write(sensorPin);}上一页下一页返回7.6拓展提高嵌入式控制板的程序如下:importsmbusimporttime#forRPIversion1,use"bus=smbus.SMBus(0)"bus=smbus.SMBus(1)#ThisistheaddresswesetupintheArduinoProgramaddress=0x04defwriteNumber(value):bus.write_byte(address,value)#bus.write_byte_data(address,0,value)return-1上一页下一页返回7.6拓展提高defreadNumber():number=bus.read_byte(address)#number=bus.read_byte_data(address,1)returnnumberwhileTrue:number=readNumber()ifnumber==0returnmessage=‘PIR:’+str(number)+’状态’上一页下一页返回7.6拓展提高text_surface=font.render(message,True,(127,127,127))screen.fill(255,255,255)screen.blit(text_surface,(100,100))w=screen.get_width()-20proximity=((100-dist)/100.0)*wifproximity<0:proximity=0pygame.draw.rect(screen,(0,255,0),Rect(10,10),(w,50)))pygame.draw.rect(screen,(255,0,0))Rect((10,10),(proximity,50))Pygame.display.update()上一页下一页返回7.6拓展提高远程控制端“index.html”的源代码如下:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www./TR/html4/l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年创伤急救培训测试题及答案
- 2026年九上概率测试题及答案
- 2026年关于目标的小测试题及答案
- 初中职业认知生涯启蒙说课稿2025梦想职业设计
- 高中地方文化改编说课稿2025
- 2026青岛啤酒股份有限公司招聘88人备考题库及答案详解(名校卷)
- 2026鲁南发展投资控股(枣庄)集团有限公司招聘第二批急需紧缺人才3人备考题库及一套答案详解
- 2026黑龙江佳木斯市汤原县人大代表联络服务中心招聘公益性岗位人员1人备考题库附答案详解(模拟题)
- 2026黑龙江牡丹江医科大学博士招聘100人备考题库及答案详解(有一套)
- 2026黑龙江绥化市青冈县乡镇卫生院招聘医学相关专业毕业生5人备考题库及答案详解(典优)
- 玻璃安装合同
- 劳动纠纷应急预案
- 培训中心手绘技能培训马克笔单体表现
- DB23T 2638-2020农村生活垃圾处理标准
- YC/T 205-2017烟草及烟草制品仓库设计规范
- 人行横洞施工技术交底
- 管事部培训资料课件
- 河北省衡水市各县区乡镇行政村村庄村名居民村民委员会明细
- 春潮现代文阅读理解答案
- 部编人教版八年级上册初中语文全册课前预习单
- 管桩应力释放孔施工方案
评论
0/150
提交评论