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