楊進(jìn)
智能移動機(jī)器人集成了機(jī)械、電子、計算機(jī)、自動控制、人工智能等多學(xué)科的研究成果,在當(dāng)前機(jī)器人研究領(lǐng)域具有突出地位[1]。目前,基于集散控制理論的嵌入式分層控制方法,在機(jī)器人系統(tǒng)的開發(fā)中廣泛應(yīng)用。其核心思想就是“集中管理、分散控制”,既要處理大量的信息,又要實時地控制系統(tǒng)的運行。它可以滿足系統(tǒng)通用性強(qiáng)、系統(tǒng)組態(tài)靈活、控制功能完善、數(shù)據(jù)處理方便、安裝簡單規(guī)范化、調(diào)試方便及運行安全可靠的要求。
ATmega8L微處理器是一款高性能、低功耗的8位AVR微處理器,采用先進(jìn)的RISC結(jié)構(gòu)[2]。ATmega8L具有:8K字節(jié)的系統(tǒng)內(nèi)可編程Flash,擦寫壽命達(dá)10000次;512字節(jié)的EEPROM,擦寫壽命達(dá)100000次;1K字節(jié)的片內(nèi)SRAM;兩個具有獨立預(yù)分頻器8位定時器/計數(shù)器,其中之一有比較功能;一個具有預(yù)分頻器、比較功能和捕捉功能的16位定時器/計數(shù)器;6路10位逐次比較式ADC(PDIP封裝);獨立振蕩器的實時計數(shù)器RTC;3通道PWM;兩個可編程的串行USART等[3]。
本文中,采用ATmega8L微處理器,作為智能移動機(jī)器人的控制核心,采用光電編碼器、光纖放大器、光電開關(guān)等傳感器,作為信息反饋器件,基于嵌入式分層控制方法,設(shè)計出移動機(jī)器人的控制系統(tǒng)。采用AVR-GCC編譯軟件[4]編程,實現(xiàn)該機(jī)器人在不為人干預(yù)的情況下,自動找到運行的路徑,并在行進(jìn)的過程中自動避開障礙物,體現(xiàn)出一定的智能性。同時,通過遙控模塊,還可以實現(xiàn)人工遙控模式的運行方式。下面將詳細(xì)介紹機(jī)器人控制系統(tǒng)的結(jié)構(gòu)重點,并重點分析信息管理層的控制電路及機(jī)器人自動尋跡功能的實現(xiàn)原理。
移動機(jī)器人的控制系統(tǒng),采用嵌入式分層控制[5]的系統(tǒng)結(jié)構(gòu):主、從控制器,都是采用ATmega8L微處理器;主控制器接收控制指令,并采集光纖放大器和光電開關(guān)所反饋的環(huán)境信息,經(jīng)過一系列的邏輯處理,得到對應(yīng)的電機(jī)速度控制值;從機(jī)則接收主機(jī)所傳給的速度目標(biāo)值,并實時控制電機(jī)的轉(zhuǎn)動速度;在兩級控制間,通過DMX512串行通信協(xié)議,實現(xiàn)數(shù)據(jù)準(zhǔn)確穩(wěn)定地傳輸。
如圖1所示,左側(cè)結(jié)構(gòu)框圖為信息管理層的結(jié)構(gòu)。左側(cè)光纖放大器和右側(cè)光纖放大器分別反饋回一個模擬量信號,該信號將隨所探測到的顏色變化而變化。ATmega8L微處理器,通過內(nèi)部10位模數(shù)轉(zhuǎn)換器采集這兩個信號,并轉(zhuǎn)換成數(shù)字量。設(shè)定一個閥值,微處理器將對分別對高于和低于該閥值的信號賦予一個邏輯量,用于區(qū)別軌跡區(qū)域和背景區(qū)域,從而識別出運行的軌跡。而光電開關(guān)將發(fā)射紅外線,經(jīng)障礙物反射,被傳感器檢測到,從而發(fā)生開關(guān)信號的變化,微處理器將根據(jù)邏輯陣列,確定障礙物相對機(jī)器人的方向,并調(diào)用避障子程序躲避該障礙物。另外遙控模塊將向主控制器傳遞遙控指令,主要包括速度的設(shè)置和運行模式的切換等。
圖1 機(jī)器人控制系統(tǒng)的結(jié)構(gòu)圖
右側(cè)結(jié)構(gòu)圖為伺服控制層,存在一個速度控制環(huán)。伺服控制系統(tǒng)的執(zhí)行元件為直流旋轉(zhuǎn)電機(jī),系統(tǒng)的控制量是電機(jī)的轉(zhuǎn)速。反饋元件采用旋轉(zhuǎn)式光電編碼器,反饋信號為光電編碼器的脈沖信號(A、B兩相)。以ATmega8L微處理器作為計算控制單元,并在程序中設(shè)定速度采樣頻率為2K赫茲左右。在每個采樣周期內(nèi),微處理器計數(shù)編碼器反饋的脈沖數(shù)。通過比較A、B兩相脈沖狀態(tài)的變化并計數(shù)脈沖數(shù),得到實時的速度值,再與目標(biāo)速度數(shù)據(jù)比較,經(jīng)過離散PID調(diào)解器計算,求得對電機(jī)的控制字。該控制字將修改單片機(jī)輸出的PWM信號的占空比值,并通過OC1A和OC1B輸出兩路PWM信號。經(jīng)過對應(yīng)的兩路H橋驅(qū)動電路放大后,改變了兩路電機(jī)的電樞電壓有效值,從而實現(xiàn)速度的閉環(huán)控制。
圖2為信息管理層的控制電路。其中,系統(tǒng)供電為12伏直流電源,12伏電壓是作為電機(jī)的驅(qū)動電壓,也是光電開關(guān)的額定工作電壓。通過3端穩(wěn)壓塊LM7805獲得穩(wěn)定的5伏電壓,為ATmega8L微處理器提供額定的工作電壓。ATmega8L微處理器使用8M赫茲晶振作為時鐘源,采用上電復(fù)位方式。為作為控制核心的ATmega8L微處理器,通過PC0~PC3口接收光電開關(guān)的開關(guān)信號[6],獲得障礙物的信息;通過ADC4、ADC5引腳接收光纖放大器反饋的模擬量信號,并轉(zhuǎn)換成數(shù)字量,從而獲得軌跡的信息;通過PB0、PB1和PC2~PC7八個I/O口接收遙控模塊傳遞下來的控制指令。并且,主微處理器通過RXD、TXD引腳和伺服控制層的從機(jī)實現(xiàn)串行通信,向伺服控制層發(fā)送電機(jī)速度目標(biāo)值,接收伺服控制層返回的電機(jī)運行實時情況。另外,電路中設(shè)計有ISP接口,可以使用通用的AVR ISP編程器很方便地下載程序。
本文所開發(fā)的機(jī)器人,可以自動尋找由特定顏色所描繪的軌跡。在控制電路中,兩個光纖放大器分別反饋一個模擬量信號,并轉(zhuǎn)換成數(shù)字量。單次轉(zhuǎn)換的結(jié)果如下:
式中,VIN為被選中引腳的輸入電壓,VREF為參考電壓。0x000代表模擬地電平,0x3FF代表所選參考電壓的數(shù)值減去1LSB[7]。
電路中設(shè)計為ADC6和ADC7單端輸入,通過微處理器內(nèi)部定時/計數(shù)器0設(shè)定1毫秒的采樣時間,每隔一個采樣周期采集一路的信息。程序中首先需要T0和ADC做相應(yīng)的初始化。具體程序及注釋如下。
1. T/C0 初始化:
2. ADC初始化程序:
圖3 定時器0比較中斷子程序流程圖
定時/計數(shù)器0采用CTC工作模式,通過比較中斷準(zhǔn)確定時1ms。其比較中斷子程序完成光纖放大器信號的讀取和最初的數(shù)據(jù)處理任務(wù)。在CTC工作模式下,當(dāng)計數(shù)器0的數(shù)值TCNT0等于OCR0(值為0x7C)時計數(shù)器自動清零。這個模式使得用戶很容易地控制比較匹配輸出的頻率,也簡化了外部事件計數(shù)的操作。
在定時器0比較中斷子程序中,軌跡的信息已被整理為TRACK變量的數(shù)值,其有效數(shù)據(jù)為TRACK的最低兩位。當(dāng)主程序初始化TRACK為0x00后,軌跡的信息只有四個數(shù)據(jù),分別是:0x00、0x01、0x02、0x03。其中0x01和0x02為剛剛偏離軌跡,0x01為左側(cè)偏離,0x02為右側(cè)偏離。數(shù)值0x03則表示機(jī)器人運行在軌跡上。而數(shù)值0x00所代表的運行狀態(tài)就不是那么直接能判斷的,需要和上一個采樣周期的狀態(tài)進(jìn)行比較,才能得出結(jié)論。在自動尋跡子程序中還定義了一個靜態(tài)變量OLD_TRACK,用于保存上一個采樣周期的狀態(tài)。當(dāng)OLD_TRACK為0x01時,則當(dāng)前的TRACK(0x00)表示嚴(yán)重偏離軌跡的左側(cè);當(dāng)OLD_TRACK為0x02時,則當(dāng)前的TRACK(0x00)表示嚴(yán)重偏離軌跡的右側(cè)。
在自動尋跡子程序中,通過對TRACK變量的數(shù)值進(jìn)行邏輯判斷,從而確定機(jī)器人相對軌跡的方向,并輸出響應(yīng)的速度控制量給伺服控制層。如上面程序流程圖所示,當(dāng)TRACK發(fā)生變化時,輸出也將改變。如果偏出軌跡左側(cè),則控制電機(jī)使機(jī)器人右轉(zhuǎn);如果偏出軌跡右側(cè),則控制電機(jī)使機(jī)器人左轉(zhuǎn);沒有偏出,則以設(shè)定好的速度前進(jìn)。
圖4 自動尋跡子程序流程圖
按電路圖完成系統(tǒng)控制電路的制作。如圖5所示,機(jī)器人通過車載蓄電池供電,由兩塊控制電路板控制,一塊為按圖2所設(shè)計的信息控制電路,另一塊為伺服控制電路。使用WinAVR軟件按流程圖編寫好程序后,通過ISP下載線將機(jī)器碼,分別下載到兩個ATmega8L微處理器中。在圖5中,a圖為機(jī)器人自動沿黃色描繪的跡線運動,b圖為機(jī)器人自動沿著墻體運行。
圖5 機(jī)器人自動運行
本文基于AVR微控制器開發(fā)出一臺智能移動機(jī)器人,實驗結(jié)果顯示,機(jī)器人能夠可靠地自動避開障礙物并找到自己運行的目標(biāo)。通過伺服驅(qū)動,機(jī)器人能平穩(wěn)較快速地前行。本文中的機(jī)器人,具有清晰的控制系統(tǒng)結(jié)構(gòu),而且開發(fā)的成本低廉,所以該機(jī)器人的技術(shù),尤其適用開發(fā)自動化教學(xué)設(shè)備。同時,該機(jī)器人技術(shù),還可以廣泛應(yīng)用于自動設(shè)備的開發(fā)。
[1]徐國華,譚民.移動機(jī)器人的發(fā)展現(xiàn)狀及其趨勢[J].機(jī)器人技術(shù)與應(yīng)用, 2001(3): 7-14.
[2]徐玉,韓波,李平.基于 AVR 的舵機(jī)控制器設(shè)計[J].工業(yè)控制計算機(jī), 2004(11):38-40. Xu Yu,Han Bo,Li Ping,The Design of AVR Based Servo Controller[J], Industrial Control Computer, 2004(11):38-40.
[3]http://www.atmel.com/, ATmega8芯片數(shù)據(jù)官方手冊[M].http://www.atmel.com/, ATmega8 Datasheet
[4]馬潮,詹衛(wèi)前,耿德根. ATmega8原理及應(yīng)用手冊[M].第5版,北京:清華大學(xué)出版社, 2003:7-8
[5]韓大鵬,韋慶.機(jī)器人控制器的一種模塊化設(shè)計方法[J].微計算機(jī)信息,2005(5):3-4.Han Da Peng,Wei Qing,A Design Method Via Modularization for Controllers of Mobile Robots[J], Microcomputer Information, 2005(5):3-4.
[6]閻石.數(shù)字電子技術(shù)基礎(chǔ)(第四版),高等教育出版社,1998.11
[7]沈文,Eagla lee,詹衛(wèi)前. AVR單片機(jī)C語言開發(fā)入門指導(dǎo)[M].北京:清華出版社,2003.