機(jī)器人循線算法原理與實(shí)踐轉(zhuǎn)收_第1頁(yè)
機(jī)器人循線算法原理與實(shí)踐轉(zhuǎn)收_第2頁(yè)
機(jī)器人循線算法原理與實(shí)踐轉(zhuǎn)收_第3頁(yè)
機(jī)器人循線算法原理與實(shí)踐轉(zhuǎn)收_第4頁(yè)
機(jī)器人循線算法原理與實(shí)踐轉(zhuǎn)收_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、機(jī)器人循線算法原理與實(shí)踐 ( 轉(zhuǎn)收) 硬件基本構(gòu)架 對(duì)于機(jī)器人的循線,為了獲得場(chǎng)地上白線(黑線)的信息,硬件結(jié)構(gòu)一般有如下 幾種種類。1、紅外對(duì)管陣列。采取這種方式的機(jī)器人比較多,尤其在各種機(jī)器人競(jìng)賽中, 幾乎是標(biāo)準(zhǔn)配置。 但是這種技術(shù)有一個(gè)致命的弱點(diǎn), 就是對(duì)于場(chǎng)地光線的干擾特 別敏感,而且也很難把紅色和白線區(qū)別開(kāi)來(lái), 所以使用受到一定的限制。 一般解 決這類問(wèn)題的方法是在紅外光上加載一個(gè)調(diào)制波, 通過(guò)檢測(cè)這個(gè)調(diào)制波來(lái)消除場(chǎng) 地光線的干擾,至于如何解決紅色和白色的區(qū)別問(wèn)題,那就幾乎是五花八門了。2、光纖傳感器陣列。采用這種傳感器陣列的原因是,光纖非常細(xì),在單位面積 內(nèi)可以安裝更多的傳感器,

2、從而獲得更精確地場(chǎng)地信息。 當(dāng)然,錢也也花得更多。3、 線性CCD這種硬件方法幾乎是一種對(duì)場(chǎng)地信息分辨率的 BT追求,如果說(shuō)紅 外對(duì)管陣列還是離散信息的話,那么線性CCD就是線性的連續(xù)數(shù)據(jù)。當(dāng)然驅(qū)動(dòng)它 也不是一件容易的事情,對(duì)于單片機(jī)也有更高的速度要求。4、視覺(jué)。廢話少說(shuō)否則明天我都別想吃飯。 基本原理 所謂循線,就是通過(guò)一定的傳感器探測(cè)地面色調(diào)迥異的兩種色彩從而獲 得引導(dǎo)線位置, 修正機(jī)器人運(yùn)動(dòng)路徑的一種技術(shù)。 說(shuō)的太拗口了。 不說(shuō)太多 理論的東西,我們就從基于紅外對(duì)管陣列的循線技術(shù)來(lái)說(shuō)起。假設(shè),我們使用的是黑底白線的場(chǎng)地。紅外對(duì)管陣列由 3個(gè)紅外對(duì)管 1 字?jǐn)[開(kāi)組成。白線的寬度略小于或等于

3、紅外對(duì)管陣列的寬度。1、數(shù)據(jù)的采集。對(duì)于機(jī)器人來(lái)說(shuō), 通過(guò)傳感器感知周圍事物的信息, 利用這些信息并不 作太多智能上的計(jì)算而直接通過(guò)一定的轉(zhuǎn)換, 指導(dǎo)機(jī)器人的運(yùn)動(dòng)這種形式在 人工智能學(xué)上叫做機(jī)器人的“反應(yīng)范式”。 所以,我們要想讓我們的機(jī)器人能夠 尋著我們給定的軌跡線運(yùn)動(dòng), 第一步就必須讓他感知到軌跡線的存在。 一般的做 法就是通過(guò)AD采樣,獲得紅外對(duì)管(傳感器)反饋回來(lái)的電壓信息。然而,這 樣獲得的電壓值信息是無(wú)法直接指導(dǎo)運(yùn)動(dòng)的, 必須把他們轉(zhuǎn)化為二值的 (也就是 二進(jìn)制信息, 1表示線存在, 0 表示線不存在)信息,然后通過(guò)處理每一個(gè)管子 反饋回來(lái)的二值信息獲得白線的位置信息。>&g

4、t;技術(shù)點(diǎn)AAD信號(hào)的閥值化。(你可以參考其它的算法,獲得比較詳盡的技術(shù),我這里只是舉例一二)所謂閥值化, 就是通過(guò)一定的范圍把握, 從而把線性的數(shù)據(jù)轉(zhuǎn)化為離散 數(shù)據(jù)的一種變換。簡(jiǎn)單的說(shuō),就是通過(guò)分段函數(shù)的方法,將數(shù)據(jù)分類。在我們這 個(gè)應(yīng)用中,就是想方設(shè)法使 AD采集回來(lái)的電壓值變化為一個(gè)恰恰能夠準(zhǔn)確表示 白線位置信息的二進(jìn)制信息, 1代表白線存在, 0 代表白線不存在。由于白色和 黑色在電壓差異上非常之巨大, 所以可以簡(jiǎn)單的通過(guò)一個(gè)標(biāo)志線來(lái)區(qū)分它們, 當(dāng) 電壓值高于這個(gè)標(biāo)志線了,就把他標(biāo)志為 1,否則就標(biāo)志為 0,算法描述為: if (AdValuei > MarkLing)LineI

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

6、rkLine)LineInfori = 1;else if (AdValuei < Low_MarkLine)LineInfori = 0;elseLineInfori = NoInfor;>>技術(shù)點(diǎn) B 動(dòng)態(tài)預(yù)值。(你可以參考其它的算法,獲得比較詳盡的技術(shù),我 這里只是舉例一二) 當(dāng)然,這種算法在簡(jiǎn)單的機(jī)器人循線中不是很常用。 比較常見(jiàn), 適應(yīng)性強(qiáng)的方法 是,首先從AD值中找到一個(gè)中間值作為 MarkLine,(或者可以從AD值中找那 些比較接近最大值和最小值之差的 0.618 倍的數(shù)值) ,然后再使用第一種方法標(biāo) 記,這樣的算法叫做動(dòng)態(tài)預(yù)值。如果把這種算法應(yīng)用于第二種當(dāng)然

7、也不多啦。2、數(shù)據(jù)的簡(jiǎn)單加工第一個(gè)循線程序。到目前為止,我們已經(jīng)把AD的值的數(shù)組轉(zhuǎn)變?yōu)榱艘粋€(gè)表示白線位置的 二進(jìn)制位的數(shù)組我們不妨直接把他用一個(gè)字節(jié)表示哈。 那么,這個(gè)字節(jié)的狀 態(tài)就表示了當(dāng)前白線的位置信息。 再假設(shè),我們已經(jīng)寫好了幾個(gè)函數(shù)用來(lái)分別控 制小車的左右運(yùn)動(dòng)。那么我們就可以通過(guò)以下的簡(jiǎn)單方式來(lái)實(shí)現(xiàn)循線了。/ 用字節(jié)的高三位表示三個(gè)管子檢測(cè)到的白線信息。 switch (LineInforByte)case 0b11100000:/ 全部在白線上Motor_Left_GoFront(FullSpeed);Motor_Right_GoFront(FullSpeed);break;case

8、 0b01100000: / 明顯車子向左偏了哈Motor_Left_GoFront(FullSpeed);Motor_Right_GoFront(NormalSpeed);break;case 0b00100000:Motor_Left_GoFront(FullSpeed);Motor_Right_GoFront(LowSpeed);break;/ 其他情況仿照上面自己寫了哈。default:Motor_Left_GoFront(StopNow);Motor_Right_GoFront(StopNow);break呵呵,這樣就完成了一個(gè)循線小車的程序了哈。簡(jiǎn)單吧。順便說(shuō)明一下下,Motor_

9、Lef_GoFront()函數(shù)是一個(gè)控制電機(jī)PWM輸出的函數(shù)。 FullSpeed NormalSpeed LowSpeed StopNow StopFree 是一些控制 PW啲 宏定義,你可以修改這些宏定義的值來(lái)實(shí)現(xiàn)以上的功能。 我想,你看了這個(gè)程序 應(yīng)該已經(jīng)對(duì)循線的基本原理了然于胸了吧。哈哈哈哈哈哈哈哈。3、數(shù)據(jù)的高級(jí)加工復(fù)雜地面情況的模糊識(shí)別算法。以上的算法的確可以應(yīng)付規(guī)范場(chǎng)地下的情況了, 但是由于其類似查表式的 數(shù)據(jù)處理方式,一旦出現(xiàn)真值表中沒(méi)有的情況哪怕是很明顯的直線存在 機(jī)器人都沒(méi)有辦法處理了。典型的就是在地上有大塊的白色斑點(diǎn), 導(dǎo)致機(jī)器人對(duì) 白線視而不見(jiàn)。解決以上問(wèn)題的方法還要從

10、人眼識(shí)別白線的原理上說(shuō)起。 在破壞嚴(yán)重的場(chǎng)地上,人類的眼睛仍然可以識(shí)別出原先的白線, 這是為什么呢?通過(guò)重心。人類 的眼睛通過(guò)捕捉白線的重心確立白線的大體軌跡, 從而辨認(rèn)出白線的位置。從概率的角度上說(shuō),在破壞嚴(yán)重的場(chǎng)地上, 的,即使不同,由于白線本身的存在, 只要簡(jiǎn)單的獲得地面淺色標(biāo)志的重心, 用物理學(xué)上質(zhì)心的算法獲得這一信息。出現(xiàn)在白線兩邊的淺色干擾的概率是一樣 其重心至少是不會(huì)偏離白線很遠(yuǎn)的,所以, 就可以大體確立白線的所在。我們可以利 忘了說(shuō)一點(diǎn),要想機(jī)器人增強(qiáng)對(duì)環(huán)境的適應(yīng)力,就需要增加傳感器的數(shù)目。我們不妨用 8 個(gè)紅外管作為傳感器。這樣通過(guò)處理后獲得的場(chǎng)地信息就整整 1個(gè)字節(jié)了。假設(shè)

11、 1個(gè)光電管的 1擁有1單位的重 量,八個(gè)光電管的坐標(biāo)分別為 -7-5-3-11 3 5 7, 其間距都是 2個(gè)單位,通過(guò)置信公式很容易計(jì)算出質(zhì)心的坐標(biāo),通過(guò)這個(gè)坐標(biāo)和 0 的絕對(duì)值, 就可以知道當(dāng)前機(jī)器人偏離白線的多少,而這個(gè)偏離值則可以通過(guò)簡(jiǎn)單的比例直接指導(dǎo)運(yùn)動(dòng)函數(shù)。典型實(shí)例如下:* 函數(shù)說(shuō)明:電機(jī)動(dòng)作調(diào)速函 數(shù)* 說(shuō)明: 該函數(shù)放在定時(shí)器或者主循環(huán)里面用于產(chǎn)生軟PWM*/void SpeedPWM(char PWMLine)char PWMLine_L = PWMLine; char PWMLine_R = PWMLine; staticchar PWMCount_L = 0;stati

12、cchar PWMCount_R= 0;char Temp = 0;if(FollowLineEnable = True)Temp = (char)fabs(float)CG_X);if (AdcValueFlag = 0)Temp = 0;elseif (CG_X <0)if (Temp<<4) <= PWMLine_R)PWMLine_R -= (Temp<<5)+Temp<<2);elsePWMLine_R = 0;elseif (Temp<<4) <= PWMLine_L)PWMLine_L -= (Temp<&l

13、t;5); elsePWMLine_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)case Front:Motor_Left_GoFront;break; case Back: Motor_Left_GoBack;break; case Left: Motor_Left_GoFront;break;c

14、ase Right:Motor_Left_GoBack;break; case Stop: Motor_Left_Stop_Free;break;else if (PWMCount_R < PWMLine_R)switch (GoDirection)case Front:Motor_Right_GoFront; break;case Back:Motor_Right_GoBack; break;case Left:Motor_Right_GoBack; break;case Right:Motor_Right_GoFront; break;case Stop:Motor_Right_Stop_Free; break; elseMotor_Right_Stop_Free;*函數(shù)說(shuō)明:獲取偏離軌跡線的數(shù)值*輸入:表明尋線狀態(tài)的字節(jié)*說(shuō)明*通過(guò)類質(zhì)心算法獲取當(dāng)前機(jī)器人偏離軌跡線的量*- 表示偏左 + 表示偏右*/signedsigned signedcharGetCG_X(unsigned charAdcValues)charchara = 0; Temp = 0;signed char Totals = 0;for (a = 0;a<8;a+)if (AdcValues <<a)>>7)Temp += (-7)+ (a<<1);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論