雷道仲
(湖南信息職業(yè)技術學院,湖南長沙,410200)
機完成機器人導航功能,直流伺服電機是機器人的行走系統(tǒng),完成各種行走動作。
觸覺傳感器工作原理非常簡單,其的等效電路原理圖如圖2中虛線所示[2]。傳感器在撲捉或感知外界信息是靠其裝在傳感器外面的觸須來完成,圖中的“右觸須”、“左觸須”實際上就是兩個帶觸須的觸覺型開關,當它們平時沒有觸碰到實物時,它們處于常開狀態(tài);將它們一端連接到單片機的I/O控制端口上(圖中P3.2/P3.3),則對應的端口呈現(xiàn)出高電平狀態(tài);當胡須觸碰到物體時,與它聯(lián)動的開關因受力而閉合,從而拉低對應的單片機端口引腳電平,單片機則通過判斷對應引腳電平的高低來間接感知外部事件(觸須觸碰到障礙物)是否發(fā)生。

圖1 機器人觸覺導航系統(tǒng)構成框圖
系統(tǒng)主要由單片機AT89C51、觸覺傳感器、直流伺服電機、供電電路等組成,其系構成框圖如圖1所示。其中單片機是整個系統(tǒng)的控制核心,用來接收觸覺傳感器傳回來的外界信息,并根據(jù)信息情況作出相應決策;控制伺服電機作出相應動作,如:前進、后退或左、右轉彎等。觸覺傳感器用來感知外界障礙物,配合單片
基金項目:湖南教育廳科學研究項目(No.12C1176)
如圖2所示的電路工作過程如下:電路通電后,單片機P2.0與P2.1輸出伺服電機的控制信號,從而引導機器人朝前行走,同時單片機P3.2、P3.3端口負責收集左、右觸覺傳感器采集到的信號,當左、右傳感器沒有碰到障礙物時,P3.2=P3.3=1;當某個時刻,左觸須碰到障礙物,P3.2=0;則進入相應左避障子程序,如:后退——右轉等,完成避障;右觸須工作過程跟左觸須類似。如同時檢測到P3.2=P3.3=0;則先后退——再掉頭往反方向走,完成避障和導航功能。
機器人觸覺導航系統(tǒng)程序設計思路如下,51單片機的兩個端口P3.2和P3.3分別負責對左、右觸覺傳感器觸須進行監(jiān)控,當機器人前進過程中左前方有障礙物時,左邊的觸須碰到這個障礙物時,P3.2引腳電平會變成低電平,程序會立刻轉至左避障函數(shù)中去執(zhí)行,只要我們在左避障函數(shù)中合理設置相關避障函數(shù),如:后退——右轉——再前進等,便可以成功避開障礙,完成機器人導航。右觸須程序設計思路與此類似,右觸須被端口P3.3所監(jiān)控,整個系統(tǒng)主程序流程圖如圖3所示。

圖2 機器人觸覺導航系統(tǒng)電路
根據(jù)圖2所示的系統(tǒng)硬件電路原理圖,焊接好電路控制板,并將觸覺傳感器的兩個觸須安裝在單片機P3.2與P3.3端口上。檢查供電正常后,開機運行。將數(shù)字萬用表打至直流20V檔,黑表筆接地,紅表筆觸碰單片機P3.2引腳,如果此時觸覺傳感器的觸須沒有碰到障礙物時,萬用表在P3.2引腳應該檢測到一個接近5V左右的高電平;觸須碰到障礙物則萬用表應該檢測到接近0V的低電平;如果沒有檢測到相應的電平,則說明觸覺傳感器未能正常工作。則應逐步仔細排查電路,直至觸覺傳感器正常工作為止。
根據(jù)機器人觸覺導航系統(tǒng)程序設計思路,在KEIL C中編寫、編譯完成相應程序代碼,將產(chǎn)生的可執(zhí)行文件燒寫到單片機程序存儲器,開機運行機器人,我們發(fā)現(xiàn)機器人在觸覺傳感器的引導下能夠很好規(guī)避正前方障礙物,實現(xiàn)機器人導航功能。但如果機器人進入到90度的墻角時,我們發(fā)現(xiàn)機器人總是左觸須觸墻,于是右轉,向前行走,右觸須觸墻,于是左轉,繼續(xù)前進,又碰到左墻,再次碰到右墻……,如果不是你把它從墻角拿出來,它將會一直困在墻角里而出不來。要解決這個問題,需要運用一些編程策略對程序中作一些修改。
基本思路是先判斷前方障礙物是不是墻角,如果確認是墻角,那么就讓小車作一個U形轉彎,即掉頭逃離墻角,如果不是墻角,則按一般避障功能便可以解決。

圖3 主程序流程圖
判斷機器人進入90度墻角的方法[1]:如果函數(shù)P3_2state()返回0,函數(shù)P3_3state()返回1;當觸須碰到右墻時,函數(shù)P3_2state()返回1,函數(shù)P3_3state()返回0;由此可推測,若前方障礙物是90度墻角,那么這兩個函數(shù)返回的值彼此不相等,而且各自前后兩次返回的值也不相等,我們可以在程序中設兩個變量用來記錄兩個觸須前一次觸動的舊狀態(tài),再與兩個觸須的當前狀態(tài)進行對比,如果前后兩次的狀態(tài)交替出現(xiàn),就用一個變量作為計數(shù)器記錄交替的次數(shù),若交替總數(shù)超過了程序中預先設定的閥值,就可以認定前方的障礙物是墻角,那么就編程讓小車作一個U形轉彎,掉頭逃離墻角,同時將記錄交替次數(shù)的計數(shù)器變量復位,下面具體運用這種思路修改的主函數(shù),使智能機器人能夠逃離墻角,修改后的主函數(shù)如下:
void main(void)
{
uchar counter=1; //觸須碰撞總次數(shù)
uchar old_R=1; //右觸須舊狀態(tài)
uchar old_L=0; //左觸須舊狀態(tài)
while(1)
{
if(P3_2state()!=P3_3state())
{
if((old_R!=P3_3state())&&(old_L!=P3_2state()))
{
counter=counter+1;
old_R=P3_2state();
old_L=P3_3state();
if(counter>4)
{
counter=1;
Backward();//向后
Left_Turn();//向左
Left_Turn();//向左
}
}
else
{按主程序流程圖避障}
實踐表明,運用觸覺傳感器設計出的智能機器人導航系統(tǒng)能夠很好地規(guī)避正前方的障礙物,從而引導機器人完成導航功能;并且,觸覺傳感器具有價格低、易于控制等優(yōu)點,因此,它是機器人或智能玩具中設計避障、導航功能的不二選擇。
參考文獻
[1] 秦志強等編著.C51單片機應用與C語言程序設計[M].北京:電子工業(yè)出版社.,2007
[2] 譚立新,雷道仲等編著.單片機技術及應用[M].長沙:中南大學出版社.2013
[3] 宋雪麗,王虎林,王毅.基于單片機的尋跡機器人的系統(tǒng)設計[J].儀表技術.2009(04)
[4] 王東峰,王會良,董冠強編著.單片機C語言應用100例[M].電子工業(yè)出版社2009年3月