摘 要:設(shè)計(jì)了基于S3C2410+Linux平臺(tái)的移動(dòng)機(jī)器人超聲波避障系統(tǒng),。介紹了SRF05新型高精度傳感器的工作原理、測距系統(tǒng)多路超聲波傳感器的軟硬件實(shí)現(xiàn)及機(jī)器人平臺(tái)的整個(gè)軟件工作流程。Linux系統(tǒng)超聲波驅(qū)動(dòng)模塊中采用的輪循工作方式實(shí)現(xiàn)了機(jī)器人在未知環(huán)境下的避障功能,,機(jī)器人平臺(tái)運(yùn)行效果良好。
關(guān)鍵詞: 機(jī)器人,;ARM9,;超聲波;導(dǎo)航,;避障
在機(jī)器人的導(dǎo)航系統(tǒng)中,,超聲波傳感器以其信息處理簡單、速度快和價(jià)格低等優(yōu)點(diǎn),,被廣泛用作移動(dòng)機(jī)器人的測距傳感器,,以實(shí)現(xiàn)避障、定位和導(dǎo)航等功能,。實(shí)驗(yàn)室機(jī)器人以S3C2410+Linux系統(tǒng)為架構(gòu),,采用了高精度的SRF05超聲波傳感器測距,實(shí)現(xiàn)對機(jī)器人的導(dǎo)航避障,。該傳感器的回波反饋與測距方式與通用的超聲波傳感器有所區(qū)別,,在S3C2410系統(tǒng)中實(shí)現(xiàn)也稍有難度,由于傳感器精度可達(dá)到1cm,,因此使用該傳感器彌補(bǔ)了通用超聲波傳感器近距離測距存在盲點(diǎn)的問題,,節(jié)省了外圍紅外測距模塊等硬件資源。
1 SRF05傳感器工作原理
S3C2410微控制器利用10 μs的高頻脈沖觸發(fā)SRF05傳感器,,觸發(fā)下傳感器會(huì)發(fā)出8個(gè)40 kHz的超頻脈沖,,當(dāng)SRF05傳感器的ECHO引腳電平為高時(shí),開啟定時(shí)器計(jì)數(shù)器計(jì)時(shí),;當(dāng)ECHO變?yōu)榈碗娖綍r(shí),,表明機(jī)器人遇到障礙物,編程實(shí)現(xiàn)定時(shí)器停止計(jì)時(shí),。高脈沖寬度與測距距離有正比關(guān)系,,SRF05的測距有效范圍為1 cm~4 m,無障礙物或遇超大障礙物時(shí),,ECHO腳會(huì)變?yōu)榈碗娖?,此過程需要時(shí)間為30 ms,設(shè)置定時(shí)器的周期比超聲傳感器探測最大距離所需的渡越時(shí)間稍長,。因此,,在測距時(shí)定時(shí)器周期設(shè)置應(yīng)至少大于30 ms才能有效測距。
2 系統(tǒng)方案設(shè)計(jì)
2.1 系統(tǒng)組成結(jié)構(gòu)
輪式移動(dòng)機(jī)器人核心控制系統(tǒng)由觸摸屏顯示,、攝像頭圖像采集,、超聲波避障、直流電機(jī)閉環(huán)控制、人感應(yīng)傳感器,、水(火)檢測和氣體檢測模塊,、串口無線Modem模塊部分組成。其中超聲波避障模塊直接影響機(jī)器人行進(jìn)位移的精度以及在有效范圍內(nèi)的圖像采集控制,。整個(gè)系統(tǒng)基于ARM9架構(gòu)的S3C2410微控制器與Linux系統(tǒng)平臺(tái),,使用Linux系統(tǒng)驅(qū)動(dòng)程序控制各個(gè)硬件模塊[1]。
2.2 超聲波測距系統(tǒng)
為了實(shí)現(xiàn)導(dǎo)航,、避障,,移動(dòng)機(jī)器人的前、后,、左,、右各安裝1路SRF05超聲波傳感器,使機(jī)器人能夠感知4個(gè)方位的障礙信息,。另外,,為了滿足系統(tǒng)擴(kuò)展,可添加安裝多路SRF05超聲波傳感器,,進(jìn)一步增強(qiáng)機(jī)器人的導(dǎo)航避障性能,。安裝超聲波傳感器之間角度應(yīng)該大于它的波束角30°,這樣傳感器同時(shí)工作時(shí)才不會(huì)有干擾,。采用分組的方式,,左右兩套和前后兩套分別為一組,組與組之間采用輪循的方式工作,。這樣既可以得到很高的采集頻率,,同時(shí)也滿足了系統(tǒng)的實(shí)時(shí)性要求。
采用相關(guān)GPIO口作為超聲波傳感器的INIT觸發(fā)引腳,,并且配置定時(shí)器周期,,設(shè)置定時(shí)中斷及外部中斷。測距流程:開始打開超聲波,,激發(fā)傳感器INIT引腳10 ms,,打開定時(shí)器并開始計(jì)時(shí),在定時(shí)器周期內(nèi)收到傳感器ECHO低電平觸發(fā)外部中斷,,在外部中斷處理程序中讀取定時(shí)器計(jì)數(shù)值,計(jì)算障礙物距離,,并且傳送給中央處理器,。不同組傳感器的開啟在定時(shí)中斷中完成,并且開啟另一定時(shí)器完成計(jì)數(shù)功能[2],。系統(tǒng)測距流程圖如圖1所示,。
2.3 采集回波
S3C2410 GPIO觸發(fā)中斷只能設(shè)置一種觸發(fā)方式,如果設(shè)為上升沿觸發(fā)打開定時(shí)器計(jì)時(shí),則無法捕獲下降沿,,也就無法關(guān)閉定時(shí)器,,因此采用軟件方式實(shí)現(xiàn)。設(shè)置2個(gè)時(shí)間延遲函數(shù)usdelay( )和msdelay( ),,在給出10 ms高頻脈沖后等超聲波觸發(fā)再使能定時(shí)器計(jì)時(shí),,這些在該組傳感器對應(yīng)的定時(shí)器中斷中完成。并設(shè)置外部中斷EINT1接收超聲波傳感器的ECHO回波引腳的變化,。其觸發(fā)方式為下降沿觸發(fā),,等下降沿來臨關(guān)閉定時(shí)器讀出計(jì)數(shù)值即為脈寬的時(shí)間長度時(shí),然后根據(jù)距離公式=(ECHO 高電平的時(shí)間)×(聲納速度)/2得出距離,??諝庵蠽與溫度關(guān)系:T為攝氏溫度[3]。一般情況下超聲波速近似聲速,,在室內(nèi)溫度影響下取約343.2 m/s,。
3 軟件實(shí)現(xiàn)
3.1 延遲函數(shù)實(shí)現(xiàn)
設(shè)計(jì)軟件延遲函數(shù)usdelay( ),代碼實(shí)現(xiàn)如下:
static int delayLoopCount1=10;
void usdelay(int time)
{ int i;
for(;time>0;time--)
for(i=0;i 函數(shù)延遲時(shí)間為10μs,,打開傳感器激發(fā)高頻脈沖后延遲10μs然后關(guān)脈沖,,即可利用該函數(shù)。
設(shè)計(jì)msdelay( )函數(shù)用于衡量整個(gè)測距周期的時(shí)間值,。msdelay(1000)延遲大約為1 s,,這樣系統(tǒng)可以有足夠的回波檢測時(shí)間,同時(shí)也不會(huì)對其他多路超聲波傳感器造成信號(hào)干擾,。msdelay( )代碼實(shí)現(xiàn)如下:
static int delayLoopCount2=1310;
void msdelay(int time)
{ int i;
for(;time>0;time--)
for(i=0;i 可以利用PC口相關(guān)引腳作為超聲波傳感器使能端口,,程序?qū)崿F(xiàn)如下:
rGPCCON=0x555;//端口C為輸出口用于啟動(dòng)超聲波,,可激發(fā)多路超聲波
rGPCDAT=0x0,;//數(shù)據(jù)位清0
rGPCDAT=0xf;//設(shè)置為高頻脈沖,,發(fā)出8T 40kHz超頻波
usdelay(1),;//延遲10μs
rGPCDAT=0x0;//清數(shù)據(jù)位
3.2 回波檢測實(shí)現(xiàn)
利用定時(shí)器計(jì)數(shù)器功能和外部中斷可以實(shí)現(xiàn)回波檢測計(jì)算障礙物距離,,外部中斷接超聲波的ECHO并設(shè)置為下降沿觸發(fā),。定時(shí)器的初始化如下:
rTCFG0=0x9595; //預(yù)分頻值為95
rTCFG1=0x00000; //分割值1/2
rTCNTB0=10 000;
根據(jù)T=[TCNTB0×(TCFG0+1)×(1/TCFG1)]/50MHz得出定時(shí)器的周期為60ms,在這個(gè)時(shí)間段內(nèi)足以計(jì)算回波時(shí)間。
外部中斷1初始化如下:
rGPFCON=0xaa; //GPF1 設(shè)置為 EINT1
rINTMOD=0x0; //為普通中斷
rGPFUP=0xf; //禁止 GPF0 上拉電阻
pISR_EINT1=(unsigned)Eint1Handler; //設(shè)置外部中斷
//中斷向量
EnableIrq(BIT_EINT1); //使能中斷
rEXTINT0 =0x492; // EINT1 下降沿觸發(fā)
3.3 障礙物距離計(jì)算
void __irq Eint1Handler(void) // eint1 中斷服務(wù)子程序
{
sonar_time_front =((10000- rTCNTO0) >> 1);//定時(shí)器的計(jì)數(shù)值除以2即為障礙物距離
ClearPending(BIT_EINT1); //清除中斷標(biāo)志位
i++;
Uart_Printf('nEINT1 occured times=%dn',i);//串口打印調(diào)試顯示中斷發(fā)生次數(shù)
Uart_Printf('nsonar_time_front=%d',sonar_time_front);
//串口打印顯示計(jì)算器計(jì)數(shù)值
t1= sonar_time_front*0.204; //計(jì)算距離值
front_range=t1; // 賦值全局變量
}
3.4 輪循方式測距
由于超聲波之間有干擾,,采用輪詢[4]的方式依次打開超聲波,,定時(shí)中斷中啟動(dòng)下一路超聲波傳感器工作,下一路對應(yīng)的定時(shí)中斷再啟動(dòng)其他路,,每次只測1個(gè),,這樣可以有效地避免干擾,,為了提高實(shí)時(shí)性可以控制定時(shí)器周期,如設(shè)置為35 ms,,這樣4路超聲波輪循1次大約為140 ms,,足以滿足實(shí)時(shí)要求。
4 機(jī)器人行進(jìn)過程
利用多路超聲波傳感器的反饋障礙物信息控制機(jī)器人直流電機(jī)驅(qū)動(dòng)系統(tǒng)的軟件流程圖如圖2所示,。
嵌入式Linux系統(tǒng)中SRF05模塊為只讀的字符設(shè)備,。在應(yīng)用層下打開該設(shè)備后,驅(qū)動(dòng)程序完成測距,,測得的數(shù)據(jù)傳到應(yīng)用層,,應(yīng)用層根據(jù)算法判斷障礙物的位置給直流電機(jī),控制系統(tǒng)實(shí)現(xiàn)避障導(dǎo)航[5],。
機(jī)器人的每次行為都是根據(jù)超聲波測距模塊和當(dāng)前機(jī)器人運(yùn)行的即時(shí)速度給出運(yùn)行時(shí)間,,在遇到障礙物時(shí)(0[6]。
采用新型SRF05超聲波傳感器,,在S3C2410+Linux平臺(tái)的移動(dòng)機(jī)器人上實(shí)現(xiàn)了超聲波的測距,,并利用超聲波傳感器控制驅(qū)動(dòng)系統(tǒng)和圖像采集系統(tǒng)。各模塊驅(qū)動(dòng)程序已成功加載到嵌入式Linux操作系統(tǒng)中,,在此平臺(tái)下機(jī)器人運(yùn)行效果良好,。
參考文獻(xiàn)
[1] RUBINI A. Linux設(shè)備驅(qū)動(dòng)程序. LISOLEG譯.北京:中國電力出版社,2000:66-76.
[2] BILLUR B. Fast processing techniques for accurate ultrasonic range measurements[J]. Measurement Science and Technology,2000,11 (1) :45 - 50.
[3] 王峰,葛立峰.一種高精度超聲測距系統(tǒng)的設(shè)計(jì) [J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2008,,18(1):229-236.
[4] 陳春林,陳宗海,卓睿.基于多超聲波傳感器的自主移動(dòng)機(jī)器人探測系統(tǒng) [J].測控技術(shù),,2004,23(6): 11-13.
[5] TIKANMKI A,MKEL T, PIETIKINEN A, et al. Multi-robot system for exploration in an outdoor environment[J]. Robotics and Applications and Telematics ,2007,9(1):563-567.
[6] Dai G, Chen T. Design on measurement and control system of cleaning robot based on sensor array detection[J].Control and Automation, 2007. ICCA 2007. IEEE International Conference on Volume , Issue , 2007-05-30~2007-06-01:1319 -1322.