国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

機(jī)器人循線算法原理與實(shí)踐

發(fā)布時間:2010-11-28 21:17    發(fā)布者:designer
關(guān)鍵詞: 機(jī)器人 , 算法 , 循線
[硬件基本構(gòu)架]

對于機(jī)器人的循線,為了獲得場地上白線(黑線)的信息,硬件結(jié)構(gòu)一般有如下幾種種類。

1、紅外對管陣列。采取這種方式的機(jī)器人比較多,尤其在各種機(jī)器人競賽中,幾乎是標(biāo)準(zhǔn)配置。但是這種技術(shù)有一個致命的弱點(diǎn),就是對于場地光線的干擾特別敏感,而且也很難把紅色和白線區(qū)別開來,所以使用受到一定的限制。一般解決這類問題的方法是在紅外光上加載一個調(diào)制波,通過檢測這個調(diào)制波來消除場地光線的干擾,至于如何解決紅色和白色的區(qū)別問題,那就幾乎是五花八門了。

2、光纖傳感器陣列。采用這種傳感器陣列的原因是,光纖非常細(xì),在單位面積內(nèi)可以安裝更多的傳感器,從而獲得更精確地場地信息。當(dāng)然,錢也也花得更多。

3、線性CCD。這種硬件方法幾乎是一種對場地信息分辨率的BT追求,如果說紅外對管陣列還是離散信息的話,那么線性CCD就是線性的連續(xù)數(shù)據(jù)。當(dāng)然驅(qū)動它也不是一件容易的事情,對于單片機(jī)也有更高的速度要求。

4、視覺。廢話少說——否則明天我都別想吃飯。

[基本原理]

所謂循線,就是通過一定的傳感器探測地面色調(diào)迥異的兩種色彩從而獲得引導(dǎo)線位置,修正機(jī)器人運(yùn)動路徑的一種技術(shù)!f的太拗口了。不說太多理論的東西,我們就從基于紅外對管陣列的循線技術(shù)來說起。

假設(shè),我們使用的是黑底白線的場地。紅外對管陣列由3個紅外對管1字?jǐn)[開組成。白線的寬度略小于或等于紅外對管陣列的寬度

1、數(shù)據(jù)的采集。

對于機(jī)器人來說,通過傳感器感知周圍事物的信息,利用這些信息并不作太多智能上的計(jì)算而直接通過一定的轉(zhuǎn)換,指導(dǎo)機(jī)器人的運(yùn)動——這種形式在人工智能學(xué)上叫做機(jī)器人的“反應(yīng)范式”。所以,我們要想讓我們的機(jī)器人能夠?qū)ぶ覀兘o定的軌跡線運(yùn)動,第一步就必須讓他感知到軌跡線的存在。一般的做法就是通過AD采樣,獲得紅外對管(傳感器)反饋回來的電壓信息。然而,這樣獲得的電壓值信息是無法直接指導(dǎo)運(yùn)動的,必須把他們轉(zhuǎn)化為二值的(也就是二進(jìn)制信息,1表示線存在,0表示線不存在)信息,然后通過處理每一個管子反饋回來的二值信息獲得白線的位置信息。
>>技術(shù)點(diǎn)AAD信號的閥值化。(你可以參考其它的算法,獲得比較詳盡的技術(shù),我這里只是舉例一二)

所謂閥值化,就是通過一定的范圍把握,從而把線性的數(shù)據(jù)轉(zhuǎn)化為離散數(shù)據(jù)的一種變換。簡單的說,就是通過分段函數(shù)的方法,將數(shù)據(jù)分類。在我們這個應(yīng)用中,就是想方設(shè)法使AD采集回來的電壓值變化為一個恰恰能夠準(zhǔn)確表示白線位置信息的二進(jìn)制信息,1代表白線存在,0代表白線不存在。由于白色和黑色在電壓差異上非常之巨大,所以可以簡單的通過一個標(biāo)志線來區(qū)分它們,當(dāng)電壓值高于這個標(biāo)志線了,就把他標(biāo)志為1,否則就標(biāo)志為0,算法描述為:

if(AdValue[ i]>MarkLing)
{
LineInfor[ i]=1;
}
else
{
LineInfor[ i]=0;
}

這樣做非常簡單,適合于比較標(biāo)準(zhǔn)的場地,然而對于那些模糊了的場地或者是非標(biāo)準(zhǔn)場地,雖然人的肉眼能夠看出來,但是對于機(jī)器人來說,可能看到的就是花白的一片或者是黑色的夜幕。當(dāng)標(biāo)志線值過高時,機(jī)器人能看到的只是那些特別明顯的白線,其他則是黑色的夜幕,很容易丟失軌跡線;當(dāng)標(biāo)志線值過低時,機(jī)器人眼中就是白茫茫的一片毛刺。總而言之,對場地的適應(yīng)性非常差。解決方法是,通過設(shè)定兩個標(biāo)志線來標(biāo)定軌跡線信息,當(dāng)AD值高于某一值時,標(biāo)志1;當(dāng)AD值低于另外某一值時,則標(biāo)定0。算法描述為:

if(AdValue[ i]>High_MarkLine)
{
LineInfor[ i]=1;
}
elseif(AdValue[ i]<Low_MarkLine)
{
LineInfor[ i]=0;
}
else
{
LineInfor[ i]=NoInfor;
}

>>技術(shù)點(diǎn)B動態(tài)預(yù)值。(你可以參考其它的算法,獲得比較詳盡的技術(shù),我這里只是舉例一二)

當(dāng)然,這種算法在簡單的機(jī)器人循線中不是很常用。比較常見,適應(yīng)性強(qiáng)的方法是,首先從AD值中找到一個中間值作為MarkLine,(或者可以從AD值中找那些比較接近最大值和最小值之差的0.618倍的數(shù)值),然后再使用第一種方法標(biāo)記,這樣的算法叫做動態(tài)預(yù)值。如果把這種算法應(yīng)用于第二種當(dāng)然也不多啦。

2、數(shù)據(jù)的簡單加工——第一個循線程序。


到目前為止,我們已經(jīng)把AD的值的數(shù)組轉(zhuǎn)變?yōu)榱艘粋表示白線位置的二進(jìn)制位的數(shù)組——我們不妨直接把他用一個字節(jié)表示哈。那么,這個字節(jié)的狀態(tài)就表示了當(dāng)前白線的位置信息。再假設(shè),我們已經(jīng)寫好了幾個函數(shù)用來分別控制小車的左右運(yùn)動。那么我們就可以通過以下的簡單方式來實(shí)現(xiàn)循線了。

//用字節(jié)的高三位表示三個管子檢測到的白線信息。
switch(LineInforByte)
{
case0b11100000://全部在白線上
Motor_Left_GoFront(FullSpeed);
Motor_Right_GoFront(FullSpeed);
break;
case0b01100000://明顯車子向左偏了哈
Motor_Left_GoFront(FullSpeed);
Motor_Right_GoFront(NormalSpeed);
break;
case0b00100000:
Motor_Left_GoFront(FullSpeed);
Motor_Right_GoFront(LowSpeed);
break;
……

//其他情況仿照上面自己寫了哈。
default:
Motor_Left_GoFront(StopNow);
Motor_Right_GoFront(StopNow);
break
}

呵呵,這樣就完成了一個循線小車的程序了哈。簡單吧。

順便說明一下下,Motor_Left_GoFront()函數(shù)是一個控制電機(jī)PWM輸出的函數(shù)。

FullSpeedNormalSpeedLowSpeedStopNowStopFree是一些控制PWM的宏定義,你可以修改這些宏定義的值來實(shí)現(xiàn)以上的功能。我想,你看了這個程序應(yīng)該已經(jīng)對循線的基本原理了然于胸了吧。哈哈哈哈哈哈哈哈。

3、數(shù)據(jù)的高級加工——復(fù)雜地面情況的模糊識別算法。

以上的算法的確可以應(yīng)付規(guī)范場地下的情況了,但是由于其類似查表式的數(shù)據(jù)處理方式,一旦出現(xiàn)真值表中沒有的情況——哪怕是很明顯的直線存在——機(jī)器人都沒有辦法處理了。典型的就是在地上有大塊的白色斑點(diǎn),導(dǎo)致機(jī)器人對白線視而不見。

解決以上問題的方法還要從人眼識別白線的原理上說起。在破壞嚴(yán)重的場地上,人類的眼睛仍然可以識別出原先的白線,這是為什么呢?通過重心。人類的眼睛通過捕捉白線的重心確立白線的大體軌跡,從而辨認(rèn)出白線的位置。從概率的角度上說,在破壞嚴(yán)重的場地上,出現(xiàn)在白線兩邊的淺色干擾的概率是一樣的,即使不同,由于白線本身的存在,其重心至少是不會偏離白線很遠(yuǎn)的,所以,只要簡單的獲得地面淺色標(biāo)志的重心,就可以大體確立白線的所在。我們可以利用物理學(xué)上質(zhì)心的算法獲得這一信息。忘了說一點(diǎn),要想機(jī)器人增強(qiáng)對環(huán)境的適應(yīng)力,就需要增加傳感器的數(shù)目。我們不妨用8個紅外管作為傳感器。這樣通過處理后獲得的場地信息就整整1個字節(jié)了。假設(shè)1個光電管的1擁有1單位的重量,八個光電管的坐標(biāo)分別為-7-5-3-11357,其間距都是2個單位,通過置信公式很容易計(jì)算出質(zhì)心的坐標(biāo),通過這個坐標(biāo)和0的絕對值,就可以知道當(dāng)前機(jī)器人偏離白線的多少,而這個偏離值則可以通過簡單的比例直接指導(dǎo)運(yùn)動函數(shù)。典型實(shí)例如下:

/********************************************************
*函數(shù)說明:電機(jī)動作調(diào)速函數(shù)*
*說明:該函數(shù)放在定時器或者主循環(huán)里面用于產(chǎn)生軟PWM*
********************************************************/
voidSpeedPWM(charPWMLine)
{
charPWMLine_L=PWMLine;
charPWMLine_R=PWMLine;
staticcharPWMCount_L=0;
staticcharPWMCount_R=0;

charTemp=0;

if(FollowLineEnable==True)
{
Temp=(char)fabs((float)CG_X);
if(AdcValueFlag==0)
{
Temp=0;
}
else
{
if(CG_X<0)
{
if((Temp<<4)<=PWMLine_R)
{
PWMLine_R-=((Temp<<5)+Temp<<2);
}
else
{
PWMLine_R=0;
}
}
else
{
if((Temp<<4)<=PWMLine_L)
{
PWMLine_L-=(Temp<<5);
}
else
{
PWMLine_L=0;
}
}
}
}

PWMCount_L++;
PWMCount_R++;
if(PWMCount_L>Fastest)
{
PWMCount_L=Stop;
}
if(PWMCount_R>Fastest)
{
PWMCount_R=Stop;
}

if(PWMCount_L<PWMLine_L)
{
switch(GoDirection)
{
caseFront:
Motor_Left_GoFront;
break;
caseBack:
Motor_Left_GoBack;
break;
caseLeft:
Motor_Left_GoFront;
break;
caseRight:
Motor_Left_GoBack;
break;
caseStop:
Motor_Left_Stop_Free;
break;
}
}
else
{
Motor_Left_Stop_Free;
}

if(PWMCount_R<PWMLine_R)
{
switch(GoDirection)
{
caseFront:
Motor_Right_GoFront;
break;
caseBack:
Motor_Right_GoBack;
break;
caseLeft:
Motor_Right_GoBack;
break;
caseRight:
Motor_Right_GoFront;
break;
caseStop:
Motor_Right_Stop_Free;
break;
}
}
else
{
Motor_Right_Stop_Free;
}
}


/********************************************************
*函數(shù)說明:獲取偏離軌跡線的數(shù)值*
*輸入:表明尋線狀態(tài)的字節(jié)*
*[說明]*
*通過類質(zhì)心算法獲取當(dāng)前機(jī)器人偏離軌跡線的量*
*-表示偏左+表示偏右*
********************************************************/
signedcharGetCG_X(unsignedcharAdcValues)
{
signedchara=0;
signedcharTemp=0;
signedcharTotals=0;
for(a=0;a<8;a++)
{
if((AdcValues<<a)>>7)
{
Temp+=((-7)+(a<<1));
Totals++;
}
}

if(Totals==0)
{
return0;
}

return(Temp/Totals);
}

函數(shù)調(diào)用GetCG_X函數(shù),用來獲取CG_X,CG_X直接在PWM輸出函數(shù)里面指導(dǎo)機(jī)器人的運(yùn)動。

以上方法的好處是,提供了一個比例調(diào)節(jié)循線動作的可能。支持多傳感器的情況,尤其適合線性CCD類的線性數(shù)據(jù)的處理。為機(jī)器人提供了一個相對完整的視覺,不可能出現(xiàn)無法識別的情況,而且,這種情況可以使機(jī)器人在不加修改程序的情況下直接在在白線循線和黑線循線狀態(tài)下切換。
本文地址:http://m.qingdxww.cn/thread-42615-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 三级黄色一级视频| 亚洲九九视频| 亚洲丁香网| 亚洲欧美视频一区二区三区| H厨房灌草莓| 久久青草影院| 亚洲精品无码葡京AV天堂 | 日本无码欧美激情在线视频| 中文字幕 人妻熟女| 色综网| 亚洲 欧美精品| 亚洲综合二区| 娇小萝被两个黑人用半米长| 在线视频 国产 日韩 欧美| 思思久久99热| 日韩图色| 午夜大片在线观看| 纯肉合集(高H)| 亚洲qingse中文字幕久久| 亚洲成a v人片在线观看| 亚洲国产美女精品久久| 夜夜久| 久久精品国产在热亚洲完整版| 色综合狠狠干| 青草国产在线视频| 亚洲性久久久影院| 中文无码久久精品| 欧美三级在线完整版免费| 亚洲一本视频| 日本噜噜影院| 伊人影视网| 2020国产成人精品视频人| 欧美性FREE玩弄少妇| 野草在线观看视频精品| 天美视频在线观看| 亚洲综合视频在线| 久久精品男人影院| 欧美特黄a级| 日韩黄| 赎罪日动漫免费观看| WWW国产亚洲精品久久久日本|