王信樂,劉祚時(shí)
(江西理工大學(xué) 機(jī)電工程學(xué)院,贛州 341000)
在工業(yè)自動(dòng)化程度日益發(fā)達(dá)的今天,諸如AGV等工廠自動(dòng)搬運(yùn)貨物的運(yùn)輸車越來越多的應(yīng)用到工業(yè)生產(chǎn)中,所以提升優(yōu)化工業(yè)生產(chǎn)自動(dòng)化水平迫在眉睫。本課題源于中國機(jī)器人大賽中的旅游機(jī)器人項(xiàng)目,此比賽項(xiàng)目的目的也在于激發(fā)學(xué)生對(duì)未來實(shí)現(xiàn)工業(yè)生產(chǎn)自動(dòng)化的興趣,以研究設(shè)計(jì)旅游機(jī)器人為導(dǎo)向,為實(shí)現(xiàn)工業(yè)生產(chǎn)自動(dòng)化提供理論支撐。
本比賽項(xiàng)目的要求是,循跡小車從比賽場地的起點(diǎn)出發(fā),沿著賽道中間的黑線循跡行進(jìn),到達(dá)指定點(diǎn)完成規(guī)定的任務(wù)之后,再沿黑線行進(jìn),到達(dá)終點(diǎn)。目前此類循跡小車有很多,大部分也都能很好地完成循跡任務(wù),但是仍會(huì)出現(xiàn)在賽道上特別是彎道處跑偏或跑丟的情況,本文則針對(duì)這一問題提出了具體的解決方案,該方案重點(diǎn)圍繞路徑信息的采集和處理方面進(jìn)行研究,最后經(jīng)過實(shí)地實(shí)驗(yàn),跑偏率大大降低。
本文著重對(duì)小車的循跡進(jìn)行研究,即小車如何快速準(zhǔn)確地沿著黑色引導(dǎo)線行進(jìn),并在經(jīng)過彎道時(shí)不偏離賽道。本循跡小車系統(tǒng)主要包括以下幾個(gè)模塊:電源模塊、降壓穩(wěn)壓模塊、線性CCD模塊、MCU模塊、電機(jī)驅(qū)動(dòng)模塊、PID控制模塊以及小車電機(jī)。實(shí)現(xiàn)整個(gè)系統(tǒng)的架構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)
在競賽用智能小車循跡系統(tǒng)中,有很多用于循跡的傳感器,其中光電傳感器應(yīng)用最為廣泛。但是線性CCD傳感器對(duì)比前者的優(yōu)點(diǎn)是:路徑分辨率高,前瞻性強(qiáng),可以更遠(yuǎn)更早地感知路徑的變化,在小車本體跑偏之前修正行進(jìn)方向,并且可以實(shí)時(shí)地監(jiān)控路徑的位置,及時(shí)糾偏。
本設(shè)計(jì)是基于TSL1401線性CCD傳感器[1],該傳感器有5個(gè)引腳,其中時(shí)鐘CLK用于協(xié)調(diào)控制電荷傳輸和像素輸出;串行輸入SI用于控制數(shù)據(jù)輸出序列的開始;模擬輸出AO用于輸出模擬電壓值,其驅(qū)動(dòng)時(shí)序圖如圖2所示。
圖2 CCD驅(qū)動(dòng)時(shí)序圖
DMA技術(shù),即直接內(nèi)存存取技術(shù)。它在外設(shè)與內(nèi)存進(jìn)行數(shù)據(jù)傳輸時(shí),不需要依賴于CPU的調(diào)控,而是由DMA控制器直接將外設(shè)采集的數(shù)據(jù)存入存儲(chǔ)器。即在CCD傳感器對(duì)路徑信息進(jìn)行采集時(shí),利用DMA技術(shù)將采集到的數(shù)據(jù)直接傳輸給存儲(chǔ)器。此時(shí)CPU不需對(duì)數(shù)據(jù)采集過程進(jìn)行干預(yù),而是把此過程全權(quán)交給DMA控制器完成,等輸出設(shè)備需要數(shù)據(jù)時(shí),再到存儲(chǔ)器中讀取。此技術(shù)大大節(jié)省了CPU的資源,在數(shù)據(jù)的傳輸過程中,不需要CPU的干預(yù),所以它可以進(jìn)行其他的工作,大大提高了整個(gè)系統(tǒng)的效率[2]。
此技術(shù)在循跡小車系統(tǒng)中的應(yīng)用表現(xiàn)在于,當(dāng)小車進(jìn)行彎道循跡時(shí),由于一般的查詢和中斷數(shù)據(jù)采集方式,是CPU邊控制采集路徑信息,邊控制小車轉(zhuǎn)向,其過程控制效率相對(duì)較低,但是小車的行進(jìn)速度又很快,所以小車不能準(zhǔn)確快速地轉(zhuǎn)彎,很容易在彎道處跑偏。但是DMA技術(shù)解決了這一問題,圖3是基于STM32F103單片機(jī)DMA控制器的具體程序流程圖。
這里通過兩種數(shù)據(jù)傳輸方式,即CPU干預(yù)下的數(shù)據(jù)傳輸和DMA控制下的數(shù)據(jù)傳輸進(jìn)行耗時(shí)實(shí)驗(yàn)對(duì)比,驗(yàn)證使用DMA控制器傳輸數(shù)據(jù)能減小系統(tǒng)采樣的響應(yīng)時(shí)間,提高整個(gè)系統(tǒng)的效率。
圖3 DMA程序流程圖
實(shí)驗(yàn)中先取1280個(gè)數(shù)據(jù)放于源數(shù)組中,然后分別通過CPU調(diào)控和DMA控制器兩種數(shù)據(jù)傳輸方式,將原數(shù)組中的1280個(gè)數(shù)據(jù)傳輸?shù)侥繕?biāo)數(shù)組中,并設(shè)置計(jì)時(shí)器分別記錄耗時(shí)情況,最后將實(shí)驗(yàn)結(jié)果通過串口調(diào)試助手打印出來,如圖4所示。由測試結(jié)果可知,1280個(gè)數(shù)據(jù)通過CPU調(diào)控方式傳輸耗時(shí)160μs,通過DMA控制器傳輸耗時(shí)115μs,數(shù)據(jù)傳輸效率提高了28.12%,證明了DMA技術(shù)的可行性,并且傳輸?shù)臄?shù)據(jù)量越大,效率提高越明顯。
圖4 耗時(shí)測試結(jié)果
該循跡小車控制系統(tǒng)在運(yùn)行時(shí),首先進(jìn)行初始化,然后由線性CCD采集路徑信息并發(fā)送到STM32F103單片機(jī),通過卡爾曼濾波和二值化處理得到黑色引導(dǎo)線位置。然后通過計(jì)算可以得出,當(dāng)前小車的方向與黑色引導(dǎo)線之間的位置偏差,接著將此位置偏差信號(hào)輸入到閉環(huán)位置控制系統(tǒng),經(jīng)過PID閉環(huán)位置控制算法進(jìn)行調(diào)節(jié),將調(diào)節(jié)后的信號(hào)再輸入到驅(qū)動(dòng)控制模塊,實(shí)現(xiàn)對(duì)電機(jī)在速度上的控制,使小車沿黑色引導(dǎo)線行進(jìn)。系統(tǒng)軟件流程圖如圖5所示。
圖5 系統(tǒng)主程序流程圖
該傳感器中有128個(gè)線性排列的光電二極管[3,4],它在每一個(gè)采樣周期內(nèi),會(huì)拍攝一行含有128個(gè)可視像素的像素點(diǎn),然后通過模擬輸出口AO將采集到的一行數(shù)據(jù)經(jīng)過A/D轉(zhuǎn)換之后發(fā)送給STM32單片機(jī)。如圖6和圖7所示為循跡的實(shí)際路徑和采集到的一組灰度值圖像,其灰度值范圍是0~255。理論上白色的灰度值接近255,黑色的灰度值接近0,但是由于在實(shí)際采樣過程中會(huì)受到光照條件的影響,在弱光環(huán)境下采集到的白色背景灰度值只有60左右。
圖6 實(shí)際路徑
圖7 路徑灰度采集圖
由于在實(shí)際的比賽場地上,由光照條件不足帶來的局部陰影和光斑,以及人員走動(dòng)造成白色地面臟亂等不確定因素的存在,如圖6中白色地面的污點(diǎn)造成采集到的路徑數(shù)據(jù)中存在很多的干擾噪聲,如圖7所示。從圖7可以看出,數(shù)據(jù)中仍存在的噪聲,會(huì)干擾下一步數(shù)據(jù)的二值化處理,所以這里需要用到卡爾曼濾波算法[5]對(duì)數(shù)據(jù)進(jìn)行降噪處理??柭鼮V波是一種算法,通過它能對(duì)含有噪聲的數(shù)據(jù)進(jìn)行處理,在平均的意義上,求得最接近真實(shí)數(shù)據(jù)的估計(jì)值。它被廣泛應(yīng)用于通信、航天、工業(yè)控制等領(lǐng)域。
卡爾曼濾波算法在此CCD采樣的具體工作過程是,先根據(jù)前一采樣周期的狀態(tài),估計(jì)當(dāng)前采樣周期的狀態(tài),這一過程稱為狀態(tài)預(yù)測;然后再根據(jù)當(dāng)前采樣的實(shí)際數(shù)據(jù)作為反饋,去修正估計(jì)的數(shù)據(jù),這一過程稱為測量修正。它就是一種利用反饋來控制實(shí)現(xiàn)對(duì)當(dāng)前狀態(tài)估計(jì)的算法,因此它能根據(jù)采集的數(shù)據(jù)的普遍性來剔除數(shù)據(jù)中的噪聲。
卡爾曼濾波算法[6,7]分為狀態(tài)預(yù)測方程式(1)~式(2)和測量修正方程式(3)~式(5),其中式(1)是向前推算狀態(tài)變量,式(2)是向前推算誤差協(xié)方差,式(3)是計(jì)算卡爾曼增益,式(4)是根據(jù)實(shí)際測量值進(jìn)行修正估計(jì),式(5)是更新協(xié)方差計(jì)算。
以上五式中,X(k)是k時(shí)刻的系統(tǒng)狀態(tài),U(k)是k時(shí)刻對(duì)系統(tǒng)的控制量,A和B是系統(tǒng)參數(shù),P(k)是X(k)對(duì)應(yīng)的協(xié)方差矩陣,AT是A的轉(zhuǎn)置矩陣,Q和R分別是系統(tǒng)過程和測量誤差的協(xié)方差矩陣,K(k)為加權(quán)因子,H是測量系統(tǒng)的參數(shù),HT是H的轉(zhuǎn)置矩陣,Z(k)是k時(shí)刻的測量值[8]。
由圖7可以看出,觀測值有所波動(dòng),又由于這里無法給出下一周期的預(yù)測值,所以這里根據(jù)理論基礎(chǔ)并結(jié)合大量實(shí)驗(yàn)給出期望估計(jì),建立預(yù)測模型如下:
式中x為像素點(diǎn)坐標(biāo),y為數(shù)字電壓值。
然后由式(1)~式(6)得到卡爾曼濾波算法如下:
最后得出卡爾曼濾波結(jié)果,對(duì)比觀測值,數(shù)據(jù)中的噪聲被濾除,數(shù)據(jù)有了明顯的改善。濾波結(jié)果如圖8所示。
圖8 卡爾曼濾波結(jié)果
由于初步獲得的圖像灰度值范圍為0~255,但是在實(shí)際應(yīng)用中只需判斷出黑白兩色即可,所以需要對(duì)初步得到的數(shù)據(jù)進(jìn)行簡化,即二值化處理[9]。這里首先需要設(shè)定一個(gè)閾值才能對(duì)數(shù)據(jù)進(jìn)行二值化處理。對(duì)于閾值的設(shè)定,有固定閾值法和動(dòng)態(tài)閾值法兩種。固定閾值法是根據(jù)經(jīng)驗(yàn),取一個(gè)固定的數(shù)值作為閾值來對(duì)數(shù)據(jù)進(jìn)行二值化處理;動(dòng)態(tài)閾值法是對(duì)每一采樣周期內(nèi)的128個(gè)數(shù)據(jù)取平均,將此平均值作為閾值來處理數(shù)據(jù)。即:
式(15)中為動(dòng)態(tài)閾值,為某一個(gè)采樣周期內(nèi)的128個(gè)數(shù)據(jù)。
由于實(shí)際比賽場地光照環(huán)境情況復(fù)雜,所以選用動(dòng)態(tài)閾值法。此方法能有效抑制陰影、光斑以及賽道上的污點(diǎn)對(duì)數(shù)據(jù)采集的干擾。又由于動(dòng)態(tài)閾值在每個(gè)采樣周期內(nèi)是變化的,所以它還能自適應(yīng)光照強(qiáng)度的變化[10]。
確定了閾值之后,就在這128個(gè)數(shù)據(jù)中進(jìn)行篩選,小于設(shè)定閾值的則為0,代表黑色;大于設(shè)定閾值的則為1,代表白色。這樣就能將大量的數(shù)據(jù)簡化成0和1,方便了單片機(jī)的處理,便于尋找黑線的位置。二值化處理之后如圖9所示,相比圖8顯得更為簡潔。
圖9 二值化處理結(jié)果
經(jīng)過二值化處理之后,路徑信息被保存在一個(gè)一維數(shù)組a[128]中,此數(shù)組中一共有128個(gè)連續(xù)的0或1,0代表黑色軌跡,1代表白色賽道,只要找到數(shù)字0在這組數(shù)組中的坐標(biāo),就找到了黑線邊緣位置,再計(jì)算黑線的寬度,便能找到黑線的中心位置。
這里假設(shè)小車在路徑中間位置,為了提取黑線位置,首先,從左至右,依次檢驗(yàn)數(shù)組中的128個(gè)數(shù)據(jù),待找到第一個(gè)“0”時(shí),記此“0”的坐標(biāo)為,并令為“0”的個(gè)數(shù),此時(shí)=1。然后依次向右進(jìn)行檢驗(yàn),當(dāng)檢驗(yàn)到的數(shù)據(jù)為“0”時(shí),自加1。程序運(yùn)行框圖如圖10所示。由此就可以得到黑線在像素點(diǎn)中的坐標(biāo)寬度值,那么黑線中點(diǎn)坐標(biāo)的計(jì)算公式如式(16)所示,黑線位置如圖11所示。
圖10 程序運(yùn)行框圖
圖11 黑線位置
找到了黑線的位置之后,還需要設(shè)定一個(gè)判斷是否跑偏的閾值。由于此組數(shù)據(jù)一共有128個(gè),所以中點(diǎn)坐標(biāo)為64,黑色線寬為,所以黑線的坐標(biāo)寬度范圍是[64-,64+]。判斷依據(jù)和小車的行進(jìn)情況如表1所示。
表1 判斷依據(jù)及行進(jìn)情況
這里分別在強(qiáng)光環(huán)境和弱光環(huán)境下進(jìn)行試驗(yàn),如圖12所示,兩圖分別是在強(qiáng)光和弱光條件下測得的路徑背景灰度值、黑色引導(dǎo)線灰度值和動(dòng)態(tài)閾值,可以看出動(dòng)態(tài)閾值全部處于路徑背景灰度值和黑色引導(dǎo)線灰度值之間,所以利用此動(dòng)態(tài)閾值能很好地區(qū)分路徑背景和黑色引導(dǎo)線。
圖13所示兩圖分別是在強(qiáng)光和弱光條件下小車行進(jìn)過程中CCD采集到的中線位置,這里將黑色引導(dǎo)線設(shè)置在一定范圍內(nèi),即在小車不偏離所設(shè)置的范圍內(nèi)時(shí),認(rèn)為偏移量很小,不足以影響到循線效果,仍然執(zhí)行直行程序。只有當(dāng)小車偏離了這一設(shè)置范圍,才進(jìn)行左偏或右偏的矯正。但是這一范圍的設(shè)置也不能過大,經(jīng)過反復(fù)實(shí)驗(yàn),這里將范圍確定為正負(fù)7個(gè)像素點(diǎn)。即當(dāng)Pm在區(qū)間[64-Ct/2-7,64+Ct/2+7]時(shí),認(rèn)為小車沒有偏離中線。
圖12 灰度值和閾值變化圖
圖13所示兩圖中兩條直線之間的點(diǎn)表示小車沿黑色引導(dǎo)線行進(jìn),直線上方的點(diǎn)表示小車向左矯正,反之直線下方的點(diǎn)表示小車向右矯正。但是由于此實(shí)驗(yàn)中小車在拐彎處是沿黑色引導(dǎo)線逆時(shí)針行進(jìn),所以在整個(gè)實(shí)驗(yàn)過程中,小車執(zhí)行向左矯正的程序次數(shù)大于向右的次數(shù),表現(xiàn)在圖中便是直線上方點(diǎn)的個(gè)數(shù)大于下方的個(gè)數(shù)。
在確定了小車是否跑偏以及左偏還是右偏之后,就要控制調(diào)節(jié)電機(jī)使小車的行進(jìn)方向回正,但是具體調(diào)節(jié)電機(jī)多少轉(zhuǎn)速能使小車回正方向,這里便需要PID閉環(huán)控制調(diào)節(jié)算法[11,12]。其數(shù)學(xué)模型為:
圖13 CCD采集的中線位置圖
式中e(t)為PID控制系統(tǒng)的位置偏差,u(t)為經(jīng)過PID整定的控制信號(hào),KP為比例系數(shù),TI為積分時(shí)間常數(shù),TD為微分時(shí)間常數(shù)。
具體到小車循跡的控制過程是,首先通過線性CCD測出小車相對(duì)于路徑中心具體偏離像素點(diǎn)的個(gè)數(shù),即將此次小車的實(shí)際位置與路徑中心目標(biāo)位置作差。然后將此偏離像素點(diǎn)的個(gè)數(shù)作為調(diào)節(jié)小車左右輪電機(jī)轉(zhuǎn)速的依據(jù),即PID控制系統(tǒng)的位置偏差e(t)。這里再預(yù)設(shè)一個(gè)偏差的閾值△e,經(jīng)過反復(fù)試驗(yàn),△e取值7。即如果位置偏差e(t)大于7個(gè)像素點(diǎn),則將e(t)送入PID調(diào)節(jié)器中,輸出系統(tǒng)控制信號(hào)u(t),然后轉(zhuǎn)換成對(duì)應(yīng)小車電機(jī)的轉(zhuǎn)速,矯正小車的位置;如果e(t)小于7,則控制對(duì)象保持當(dāng)前有效的輸出值不變。最后重復(fù)上述步驟,直至接近或達(dá)到期望狀態(tài)。控制原理框圖如圖14所示。
圖14 PID控制原理框圖
小車實(shí)物如圖15所示,標(biāo)號(hào)a為線性CCD傳感器,其視角角度56°,安裝高度10cm,與路面夾角45°。標(biāo)號(hào)b為循線路徑,如圖16所示,圖中黑線軌跡彎道是半徑為20cm的1/4圓,轉(zhuǎn)彎角度90°。該路徑既能檢驗(yàn)小車直線行駛時(shí)的循跡狀態(tài),也能考驗(yàn)小車通過彎道時(shí)循跡的準(zhǔn)確性和機(jī)動(dòng)性。
圖15 小車實(shí)物圖
圖16 循線路徑
實(shí)驗(yàn)中,調(diào)整小車以不同的速度V勻速行進(jìn),每一相同速度實(shí)驗(yàn)5次,并以小車車頭偏離中心黑色引導(dǎo)線的最大距離△S和小車沖出賽道的次數(shù)N作為衡量小車循跡穩(wěn)定性的標(biāo)準(zhǔn)。這里在采樣過程中分別采用CPU直接調(diào)控和DMA控制兩種數(shù)據(jù)傳輸方式進(jìn)行對(duì)比實(shí)驗(yàn),現(xiàn)將實(shí)驗(yàn)數(shù)據(jù)記錄如表2所示?!鱏'和N'表示在CPU直接調(diào)控下小車車頭偏離黑線的最大距離和其沖出賽道的次數(shù);△S和N表示在DMA控制下的最大距離和沖出賽道次數(shù)。
表2 小車實(shí)驗(yàn)數(shù)據(jù)
由表2實(shí)驗(yàn)數(shù)據(jù)可以看出,通過DMA控制下的采樣相比于CPU直接調(diào)控下的采樣小車循跡效果更好。當(dāng)小車的行駛速度小于0.5m/s時(shí),采用DMA控制器的采樣方式能夠使小車更好地沿黑色引導(dǎo)線行駛并準(zhǔn)確地通過彎道。小車的彎道循跡測試如圖17所示。
圖17 小車彎道循跡測試
經(jīng)過實(shí)驗(yàn)表明,在循跡上線性CCD傳感器相比于傳統(tǒng)光電傳感器,具有更高的前瞻性,能更早地感知路徑的變化,提前矯正前進(jìn)方向;DMA直接存取技術(shù)減少了CPU處理任務(wù)的數(shù)量,在數(shù)據(jù)傳輸測試中,使系統(tǒng)的采樣效率提升28.12%,并且傳輸?shù)臄?shù)據(jù)量越大,效率提升越明顯,確保了小車能快速準(zhǔn)確地轉(zhuǎn)過更大的彎道;卡爾曼濾波使數(shù)據(jù)中的噪聲大大減少,更便于數(shù)據(jù)的二值化處理;PID位置控制算法使偏離矯正有了依據(jù),能使系統(tǒng)快速響應(yīng)且不超調(diào)。通過理論論證及實(shí)地實(shí)驗(yàn),均驗(yàn)證了方案的可行性,達(dá)到了預(yù)期要求。