基于FPGA的搬運(yùn)機(jī)器人控制系統(tǒng)
1 設(shè)計(jì)思想與總體方案
本搬運(yùn)機(jī)器人能在任意區(qū)域內(nèi)沿尋跡線行走,自動(dòng)繞開障礙,并能停在指定地點(diǎn);它的操作手能對(duì)貨物進(jìn)行升降、抓緊或放下等工作;它還能顯示整個(gè)運(yùn)行過程的時(shí)間和距離;并且在出現(xiàn)故障時(shí)發(fā)出報(bào)警。
機(jī)器人控制系統(tǒng)以FPGA器件(Altera公司的ACEX 1K器件)作為檢測和控制的核心,采用紅外光電傳感器檢測路面尋跡線,使用超聲波傳感器檢測障礙物,利光電碼盤測距,用光電傳感器或者微動(dòng)開關(guān)檢測、判斷機(jī)器手是否到位,應(yīng)用PWM技術(shù)動(dòng)態(tài)控制電動(dòng)機(jī)的轉(zhuǎn)動(dòng)方向和轉(zhuǎn)速。本機(jī)器人控制系統(tǒng)利用有限狀態(tài)機(jī)描述和硬件描述語言設(shè)計(jì)機(jī)器人控制器,實(shí)現(xiàn)機(jī)器人行走、轉(zhuǎn)彎、繞障、停止以及機(jī)器手升降、抓緊或放下的精確控制。機(jī)器人控制系統(tǒng)結(jié)構(gòu)圖如圖1所示。
機(jī)器人根據(jù)輸入的各種檢測信息,按照為機(jī)器人設(shè)置的要求,自動(dòng)地進(jìn)行信息處理、分析和計(jì)算,作出相應(yīng)的控制決策或判斷,并通過輸出通道發(fā)出控制指令,控制各電機(jī)進(jìn)行工作。采用控制芯片ACEX1K的控制器主要包括兩部分:機(jī)器人行走控制器和機(jī)器手控制器。
機(jī)器人行走控制器是控制系統(tǒng)中最為關(guān)鍵的一部分。機(jī)器人要準(zhǔn)確地走到設(shè)定的位置,才能執(zhí)行后面的抓舉和卸下物品的任務(wù)。機(jī)器人在地面上的移動(dòng)方式為三車輪移動(dòng)方式,即采用前輪輔助后輪驅(qū)動(dòng)的移動(dòng)配置方式。這種配置是前輪的萬向輪為隨動(dòng)輪,僅僅起到支撐車體的作用,無任何導(dǎo)向作用;而后輪則分別為兩個(gè)獨(dú)立的驅(qū)動(dòng)輪,利用它們的轉(zhuǎn)速差控制機(jī)器人的運(yùn)動(dòng)方向。這種組合的特點(diǎn)是結(jié)構(gòu)簡單,易于控制,而且當(dāng)兩個(gè)驅(qū)動(dòng)輪以相同速度、相反方向轉(zhuǎn)動(dòng)時(shí),車體只能繞兩個(gè)驅(qū)動(dòng)輪連線的中點(diǎn)自轉(zhuǎn),易于定位。
機(jī)器手控制器的作用是當(dāng)機(jī)器人行走到了指定位置(物品放置位置)時(shí),能夠成功地抓起或放下物品,主要是手臂的抓、放、提升、下降等功能。
本搬運(yùn)機(jī)器人使用四個(gè)直流電動(dòng)機(jī)進(jìn)行驅(qū)動(dòng), 直流電動(dòng)機(jī)的特點(diǎn)是在一個(gè)方向連續(xù)旋轉(zhuǎn)或者在相反的方向連續(xù)旋轉(zhuǎn), 運(yùn)動(dòng)連續(xù)且平滑。目前,直流電動(dòng)機(jī)可以達(dá)到很大的力矩/重量比,直流電機(jī)驅(qū)動(dòng)具有高精度、加速迅速以及可靠性高的特點(diǎn)。
2 機(jī)器人行走控制器
機(jī)器人行走控制器實(shí)現(xiàn)機(jī)器人沿尋跡線前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)等行走功能。行走控制器原理圖如圖2所示。
行走控制器由計(jì)數(shù)模塊(COUNTER)、行走驅(qū)動(dòng)模塊(QUDONG)、指令模塊(JSKZ)和狀態(tài)控制模塊(CONTROL)組成。
2.1 計(jì)數(shù)模塊
計(jì)數(shù)模塊是機(jī)器人的“記憶”系統(tǒng),實(shí)時(shí)地“告訴”機(jī)器人自己所處的位置。計(jì)數(shù)模塊準(zhǔn)確地計(jì)算出機(jī)器人行走的格數(shù)及光電碼盤檢測的驅(qū)動(dòng)輪脈沖數(shù)。當(dāng)機(jī)器人走過一格時(shí),產(chǎn)生一個(gè)脈沖信號(hào),計(jì)數(shù)模塊實(shí)現(xiàn)一次計(jì)數(shù)。但是當(dāng)機(jī)器人轉(zhuǎn)彎時(shí)會(huì)有一個(gè)計(jì)數(shù)誤差(根據(jù)計(jì)數(shù)探頭的安裝位置而定)。為了避免產(chǎn)生誤差,當(dāng)行走指令模塊發(fā)出轉(zhuǎn)彎命令時(shí),計(jì)數(shù)模塊將停止計(jì)數(shù),保持以前的計(jì)數(shù)值。這樣將保證計(jì)數(shù)的可靠性。
圖中b為計(jì)數(shù)模塊的輸入信號(hào)。當(dāng)b有一個(gè)脈沖時(shí),計(jì)數(shù)模塊計(jì)一次數(shù);clr為計(jì)數(shù)復(fù)位信號(hào)(低電平效)。輸入端updown接收由指令模塊發(fā)出的指令(前進(jìn)、后退、左轉(zhuǎn)或右轉(zhuǎn)),當(dāng)updown=“11”(前進(jìn))或“00”(后退)時(shí),計(jì)數(shù)器正常計(jì)數(shù),最多可以計(jì)數(shù)到31(從0開始); updown=“01”( 右轉(zhuǎn))或“10”(左轉(zhuǎn))時(shí),計(jì)數(shù)器的計(jì)數(shù)值保持。counter為計(jì)數(shù)模塊輸出信號(hào),在此暫設(shè)為五位二進(jìn)制數(shù)。
2.2 指令模塊
行走指令模塊的功能是按照貨物搬運(yùn)行走路徑的要求,為機(jī)器人設(shè)置行走方式。計(jì)數(shù)模塊輸出的計(jì)數(shù)值作為指令模塊發(fā)出行走指令的依據(jù),通過設(shè)定指令模塊可確定機(jī)器人的行走方式。機(jī)器人行走的每一步,都可以通過這個(gè)模塊設(shè)定它的行走模式,這極大地方便了對(duì)機(jī)器人路徑的修改和重新設(shè)置。要設(shè)定新的機(jī)器人行走路線時(shí),直接更改這個(gè)模塊便可以實(shí)現(xiàn)。圖中輸入counter[]為計(jì)數(shù)模塊輸入的計(jì)數(shù)信號(hào),它被作為指令模塊發(fā)出行走指令的重要依據(jù)。輸出lrd[]為指令模塊發(fā)出的行走指令,發(fā)送給狀態(tài)控制模塊。lrd為“00”時(shí)機(jī)器人后退;lrd為“01” 時(shí)機(jī)器人右轉(zhuǎn);lrd為“10” 時(shí)機(jī)器人左轉(zhuǎn);lrd為“11” 時(shí)機(jī)器人前進(jìn)。
2.3 狀態(tài)控制模塊
狀態(tài)控制模塊的功能用來控制機(jī)器人順利進(jìn)行轉(zhuǎn)彎。該模塊采用有限狀態(tài)機(jī)的描述方式和硬件描述語言進(jìn)行設(shè)計(jì)。圖中輸入信號(hào)a1、a2為機(jī)器人前進(jìn)方向的紅外探頭檢測信號(hào),用于檢測機(jī)器人的尋線和轉(zhuǎn)彎是否到位;clr為控制器復(fù)位信號(hào);clkb為狀態(tài)機(jī)的時(shí)鐘信號(hào);tmp[]為指令模塊發(fā)出的指令信號(hào),tmp[]=“11”時(shí)為直走指令信號(hào);tmp[]=“01” 時(shí)為右轉(zhuǎn)指令信號(hào);tmp[]=“10”時(shí)為左轉(zhuǎn)指令信號(hào);tmp[]=“00”時(shí)為后退指令信號(hào);輸出信號(hào)updown[]為狀態(tài)控制模塊輸出的機(jī)器人行走指令信號(hào),最后輸入到行走驅(qū)動(dòng)模塊中。
狀態(tài)控制模塊的狀態(tài)圖如圖3所示。s0狀態(tài)為初始狀態(tài)(直走),當(dāng)指令模塊發(fā)出右轉(zhuǎn)命令(tmp=“01”),并且前進(jìn)方向的紅外探頭檢測到尋跡線(a1=‘1’,a2=‘1’)時(shí),s0狀態(tài)跳轉(zhuǎn)到s1(右轉(zhuǎn)狀態(tài));當(dāng)指令模塊發(fā)出左轉(zhuǎn)命令(tmp=“10”),并且前進(jìn)方向的紅外探頭檢測到尋跡線(a1=‘1’,a2=‘1’)時(shí),s0狀態(tài)跳轉(zhuǎn)到s2(左轉(zhuǎn)狀態(tài));當(dāng)指令模塊發(fā)出后退指令(tmp=“00”)時(shí),s0狀態(tài)跳轉(zhuǎn)到s6;不符合以上條件的都保持在s0狀態(tài)。
s3為右轉(zhuǎn)狀態(tài),此時(shí)前進(jìn)方向的兩個(gè)紅外探頭已經(jīng)離開尋跡線(a1=‘0’,a2=‘0’),當(dāng)有一個(gè)探頭檢測到尋跡線時(shí)(即a1或a2有一個(gè)為1時(shí)),s3跳轉(zhuǎn)到s5狀態(tài)(強(qiáng)行直走狀態(tài));s4為左轉(zhuǎn)狀態(tài),它的跳轉(zhuǎn)條件與s3一致,滿足條件也是跳轉(zhuǎn)到s5狀態(tài)。
s5為強(qiáng)行直走狀態(tài),不受指令模塊的控制。當(dāng)沿尋跡線行走一格時(shí)(即b=‘1’),s5跳轉(zhuǎn)到s0初始狀態(tài)。s6為后退狀態(tài)。
2.4 行走驅(qū)動(dòng)模塊
行走驅(qū)動(dòng)模塊的功能是根據(jù)狀態(tài)控制模塊和指令模塊發(fā)出的行走指令產(chǎn)生驅(qū)動(dòng)信號(hào),控制機(jī)器人的尋線及轉(zhuǎn)彎工作。圖中,輸入信號(hào)a1、a2為前進(jìn)尋線紅外檢測信號(hào);輸入信號(hào)a3、a4為后退尋線紅外檢測信號(hào);clr為復(fù)位信號(hào);clk為時(shí)鐘信號(hào);updown為狀態(tài)控制模塊發(fā)出的指令信號(hào);輸出信號(hào)acount[]為電機(jī)的控制信號(hào)。
該模塊采用有限狀態(tài)機(jī)的描述方式和硬件描述語言進(jìn)行設(shè)計(jì),保證機(jī)器人能沿著尋跡線實(shí)現(xiàn)前進(jìn)、后退和轉(zhuǎn)彎的操作。在機(jī)器人沿著尋跡線快速行走過程中, 由于尋跡線的寬度有限(幾個(gè)厘米),兩個(gè)驅(qū)動(dòng)輪存在轉(zhuǎn)速差,使機(jī)器人容易偏離尋跡線行走。為了解決這個(gè)問題, 采用有限狀態(tài)機(jī)設(shè)計(jì),使該模塊具有“記憶”功能,無論從哪個(gè)方向完全偏離尋跡線,都能夠返回到尋跡線上,這樣就增加了尋線行走的可靠性。實(shí)際應(yīng)用表明,將有限狀態(tài)機(jī)設(shè)計(jì)的行走驅(qū)動(dòng)模塊運(yùn)用在一個(gè)快速行走且慣性較大的機(jī)器人上,機(jī)器人能夠沿著尋跡線呈“S”形行走,始終保持以尋跡線為中心運(yùn)動(dòng)。
3 機(jī)器手控制器
機(jī)器手主要完成升、降、抓緊和放下物品等工作。機(jī)器手控制器結(jié)構(gòu)圖如圖4所示。主要由手臂指令模塊和手臂執(zhí)行模塊組成。機(jī)器手控制器實(shí)現(xiàn)的控制主要是一個(gè)順序控制的問題。當(dāng)手臂指令模塊發(fā)出取物品的命令時(shí),手臂執(zhí)行模塊將產(chǎn)生取物品的一系列順序信號(hào),驅(qū)動(dòng)手臂電機(jī),完成機(jī)器手取物品的工作。在取物品時(shí),首先將手臂升降到指定位置,夾緊物品并保持;然后將整個(gè)物品提升或下降到位,整個(gè)取物品的操作結(jié)束。機(jī)器手放物品與取物品的工作相似。機(jī)器手必須是在機(jī)器人行走到指定位置時(shí)才能進(jìn)行操作,行走計(jì)數(shù)值和超聲波與光電檢測信號(hào)為手臂指令模塊提供機(jī)器人行走到位信號(hào)。
3.1 手臂指令模塊
手臂指令模塊與行走部分的行走指令模塊相似。這個(gè)模塊比行走指令模塊只是多了超聲波與光電檢測信號(hào)。為了提高機(jī)器手的可靠性,采用了雙重檢測,由行走計(jì)數(shù)值檢測是否已進(jìn)入物品區(qū)域,并且通過超聲波與光電信號(hào)檢測機(jī)器手是否已達(dá)到取放物品的位置。若缺一個(gè)條件,機(jī)器人將不會(huì)發(fā)出取物品或放物品的指令。
3.2 手臂執(zhí)行模塊
手臂執(zhí)行模塊主要是根據(jù)手臂指令模塊發(fā)出的指令,產(chǎn)生一系列輸出信號(hào),驅(qū)動(dòng)手臂電機(jī)。此模塊的設(shè)計(jì)也運(yùn)用了有限狀態(tài)機(jī)的設(shè)計(jì)思想,采用的是順序控制的原理??墒鞘直鄞嬖谝粋€(gè)初始位置的問題,例如要取物品時(shí),它的手臂必須是松開的,并且處于某個(gè)初始位置。因此每次取物品時(shí),都要檢測是否處在這個(gè)初始位置,若不是,則要先調(diào)整到初始位置,然后按照取物品順序進(jìn)行操作。
手臂執(zhí)行模塊狀態(tài)圖如圖5所示。s0、s1、s2 狀態(tài)為未到位狀態(tài)(初始位置),需要進(jìn)行狀態(tài)調(diào)整,跳轉(zhuǎn)到s3狀態(tài)。s3為初始到位狀態(tài),當(dāng)接收到取物品信號(hào)(ud=“01”)時(shí),跳轉(zhuǎn)到s4狀態(tài)(抓緊物品); s5狀態(tài)為提升到位,s8為保持狀態(tài),最后回到初始位置s3狀態(tài)。s6、s7狀態(tài)為放物品狀態(tài),與取物品過程相似。
本搬運(yùn)機(jī)器人除了以上介紹的機(jī)器人行走控制器和機(jī)器手控制器外,還有其它單元電路,如紅外光電檢測電路、超聲波檢測電路、光電碼盤檢測電路和電機(jī)驅(qū)動(dòng)電路。為了隨時(shí)接收上位機(jī)發(fā)出的指令,還需要通訊模塊電路。為了實(shí)現(xiàn)機(jī)器人可靠地運(yùn)行,檢測電路的設(shè)計(jì)顯得非常重要。
本設(shè)計(jì)是在QUARTUSII開發(fā)工具下對(duì)各功能模塊進(jìn)行仿真分析,保證了FPGA芯片設(shè)計(jì)的成功。FPGA器件采用ALTERA公司的ACEX1K50器件,占用ACEX1K50器件的邏輯單元為43%。由于篇幅有限,各功能模塊用硬件描述語言編寫的源文件省略。
由于采用有限狀態(tài)機(jī)描述和硬件描述語言進(jìn)行設(shè)計(jì),該控制系統(tǒng)不僅在運(yùn)行方式上類似于單片機(jī)控制器,而且在運(yùn)行速度和工作可靠性方面優(yōu)于單片機(jī)控制器。實(shí)際運(yùn)用表明該控制系統(tǒng)完全滿足要求。
評(píng)論