明子成+++印元+葛六波
摘要:機(jī)器人循線移動(dòng)是當(dāng)前機(jī)器人導(dǎo)航的一種常用方法。關(guān)于巡線算法的研究有很多,但多是研究算法本身,有不少算法設(shè)計(jì)精巧,實(shí)際應(yīng)用中運(yùn)行快速流暢,但可靠性并未有明顯改善。而我們?cè)O(shè)計(jì)的機(jī)器人,巡線采用離散PID算法,實(shí)驗(yàn)測(cè)試和機(jī)器人競(jìng)賽結(jié)果表明,該算法具有響應(yīng)速度快、巡線可靠、動(dòng)作快速流暢和偏離航線率低等優(yōu)點(diǎn)。
關(guān)鍵詞:機(jī)器人;離散PID RTOS;傳感器;巡線算法
● 概述
自主巡線機(jī)器人可廣泛應(yīng)用于物流、超市等的倉(cāng)庫(kù)、工廠自動(dòng)料車、機(jī)場(chǎng)等的貨物無(wú)人轉(zhuǎn)移技術(shù)領(lǐng)域,但要達(dá)到實(shí)用化,首先需要解決機(jī)器人可靠導(dǎo)航的問題。對(duì)于在一定區(qū)域內(nèi)實(shí)現(xiàn)機(jī)器人導(dǎo)航,巡線是目前較理想的選擇,因此成為各學(xué)段學(xué)生機(jī)器人比賽活動(dòng)中幾乎必有的項(xiàng)目??v觀近年來(lái)各級(jí)各類機(jī)器人競(jìng)賽活動(dòng)中巡線機(jī)器人的表現(xiàn),最薄弱的環(huán)節(jié)仍然是在基本的巡線過程中,機(jī)器人會(huì)不經(jīng)意間脫離引導(dǎo)線而不得不中止比賽。PID算法在巡線中已經(jīng)得到一定程度的使用,盡管改善了巡線的質(zhì)量,但由于控制程序運(yùn)行過程中的時(shí)序同步問題,機(jī)器人在移動(dòng)過程中還是會(huì)隨機(jī)出現(xiàn)脫離引導(dǎo)線的問題。即使采用多個(gè)傳感器信息進(jìn)行糾偏,但問題仍會(huì)出現(xiàn),即機(jī)器人在巡線過程中,某個(gè)糾偏傳感器明明“看”到引導(dǎo)線了,卻未按設(shè)計(jì)要求轉(zhuǎn)去執(zhí)行糾偏程序?!耙暋倍灰?,表明在傳感器處于引導(dǎo)線區(qū)域內(nèi)時(shí),CPU正在處理其他事務(wù)。在機(jī)器人MCU等硬件之上植入嵌入式實(shí)時(shí)操作系統(tǒng),傳感器的數(shù)據(jù)采集、環(huán)境監(jiān)測(cè)、信息處理與輸出控制都可作為獨(dú)立的任務(wù)進(jìn)行管理。讓監(jiān)視與控制程序同時(shí)進(jìn)行,避免了在等待過程中造成的信息“無(wú)視”,控制器實(shí)現(xiàn)了對(duì)監(jiān)測(cè)到的異常進(jìn)行實(shí)時(shí)處理,并即時(shí)進(jìn)行輸出控制,化解了單任務(wù)程序設(shè)計(jì)中的實(shí)時(shí)響應(yīng)難題。
● 總體設(shè)計(jì)
μC/OS-III中,任務(wù)可以是基于優(yōu)先級(jí)的搶占式調(diào)度,但也支持同等優(yōu)先級(jí)的輪轉(zhuǎn)調(diào)度。機(jī)器人的結(jié)構(gòu)設(shè)計(jì)如圖1所示,安裝了7個(gè)灰度傳感器,其中S4用于巡線數(shù)據(jù)的采集,其他傳感器用于偏離航線的檢測(cè)。在執(zhí)行任務(wù)的過程中,機(jī)器人始終不允許脫線運(yùn)行,這就意味著脫線檢測(cè)和處理必須優(yōu)先于其他事件。因此,我們將傳感器S1和S7的信息采集與處理作為任務(wù)1(如下頁(yè)圖2所示);在確定S1和S7沒有檢測(cè)到標(biāo)志線的情況下,需要考慮機(jī)器人是否處于較大的偏轉(zhuǎn)狀態(tài),根據(jù)傳感器S2和S6采集的信息進(jìn)行處理的任務(wù)2,可以優(yōu)先執(zhí)行;而檢測(cè)較小偏轉(zhuǎn)的傳感器S3和S5是為了保證機(jī)器人盡量以較小的偏轉(zhuǎn)沿著引導(dǎo)線平滑移動(dòng),設(shè)置為任務(wù)3;傳感器S4用于巡線移動(dòng)信息采集,故在這四個(gè)應(yīng)用任務(wù)中設(shè)置為最低優(yōu)先級(jí),為任務(wù)4。兩個(gè)任務(wù)之間的數(shù)據(jù)通信考慮到巡線過程中對(duì)傳感器信息的即時(shí)性要求,可通過全局變量實(shí)現(xiàn)。
圖1
● 關(guān)鍵設(shè)計(jì)
1.離散PID算法實(shí)現(xiàn)巡線設(shè)計(jì)
機(jī)器人巡線實(shí)際上僅使用一個(gè)灰度傳感器S4,即圖1中的3號(hào)傳感器。對(duì)采集的地面數(shù)據(jù)運(yùn)用離散PID算法,通過設(shè)定合適的比例、積分和微分參數(shù)計(jì)算出驅(qū)動(dòng)馬達(dá)的速度控制值,以確保其能快速平穩(wěn)前進(jìn)。該算法需要從傳感器檢測(cè)的地面和引導(dǎo)線不同點(diǎn)的值中找出最大值(Vmax)和最小值(Vmin),并計(jì)算出最大值與最小值的平均值,作為判斷在線與否的閾值(Vmid)。計(jì)算出最大值與最小值的差值(VΔ),作為比例參量(Kp)計(jì)算的依據(jù)之一。根據(jù)這些數(shù)據(jù),分別計(jì)算出比例P、積分I和微分D的調(diào)節(jié)值。
運(yùn)用比例可以計(jì)算出機(jī)器人對(duì)當(dāng)前狀況需要作出的反應(yīng)。比例調(diào)節(jié)值的算式:
(1)
積分是對(duì)已經(jīng)發(fā)生的偏差(V_err)進(jìn)行累積,以達(dá)到快速調(diào)節(jié)的目的。積分調(diào)節(jié)值的算式為:
(2)
微分用于對(duì)機(jī)器人移動(dòng)方向的趨勢(shì)進(jìn)行預(yù)測(cè)和加強(qiáng),比較前一次的偏差與當(dāng)前的偏差,得到機(jī)器人移動(dòng)的趨勢(shì),用微分調(diào)節(jié)值來(lái)強(qiáng)化該趨勢(shì),計(jì)算式為:
(3)
馬達(dá)速度調(diào)節(jié)值:
(4)
馬達(dá)的速度控制值:
(5)
(6)
馬達(dá)的移動(dòng)控制函數(shù):
Move(Pwr_Left,Pwr_Right); (7)
通過實(shí)時(shí)的地面環(huán)境感知和計(jì)算結(jié)果,即時(shí)調(diào)整機(jī)器人左右馬達(dá)的運(yùn)行速度,從而達(dá)到控制機(jī)器人沿著引導(dǎo)線移動(dòng)的目的。同時(shí),設(shè)計(jì)者需要根據(jù)機(jī)器人實(shí)際運(yùn)行狀況進(jìn)行參數(shù)Kp、Ki和Kd的值的設(shè)定。具體整定方法是:先單獨(dú)采用比例算法整定Kp,讓機(jī)器人巡線,尋找到合適的Kp和Pwr_Base。需要注意的是,Pwr_Base的值建議與機(jī)器人的驅(qū)動(dòng)電池電量形成關(guān)聯(lián),可以使系統(tǒng)運(yùn)行的穩(wěn)定性更高且適應(yīng)性更廣。
2.解決時(shí)序問題
盡管以上設(shè)計(jì)在邏輯上似乎解決了巡線和保障問題,但在實(shí)際調(diào)試時(shí),還是難以處理好巡線的問題。究其原因,在于盡管機(jī)器人可以隨時(shí)讀取傳感器值,但CPU如果在執(zhí)行其他指令,而檢測(cè)異常的傳感器盡管檢測(cè)到了引導(dǎo)線,CPU也會(huì)熟視無(wú)睹,而當(dāng)指令執(zhí)行到讀取該傳感器值時(shí),已經(jīng)物是人非了,這就會(huì)讓人無(wú)所適從,明明程序邏輯上沒有錯(cuò)誤,為什么還是“不聽話”呢?要讓機(jī)器人對(duì)傳感器信息“隨時(shí)”保持敏感,可以引入多任務(wù)管理。讓傳感器的采集數(shù)據(jù)在盡量短的時(shí)間內(nèi)(3ms或更低,具體需視機(jī)器人的運(yùn)行速度、傳感器的采集周期等而定)轉(zhuǎn)化成驅(qū)動(dòng)馬達(dá)的控制指令。據(jù)此,將傳感器采集和數(shù)據(jù)處理作為一個(gè)個(gè)獨(dú)立的任務(wù),根據(jù)任務(wù)的緊迫性可分為:脫線、較大偏離、較小偏離和巡線四個(gè)由高到低不同優(yōu)先級(jí)的任務(wù)。
圖2
● 實(shí)驗(yàn)測(cè)試與結(jié)果分析
機(jī)器人自主控制程序的設(shè)計(jì)所面臨的一個(gè)難題是運(yùn)行環(huán)境信息復(fù)雜和機(jī)器人可感知信息的客觀限制,任何理論上似乎完美的算法,在實(shí)際運(yùn)行時(shí)都很難保證100%的成功率,設(shè)計(jì)中刻意繞開和避免的問題往往還是會(huì)發(fā)生?;诖?,本設(shè)計(jì)中不是回避問題,而是采用多傳感器信息融合算法,一旦機(jī)器人遇到問題就能夠通過傳感器檢測(cè)確認(rèn),并即時(shí)采取糾偏措施。在多次大型機(jī)器人競(jìng)賽巡線相關(guān)項(xiàng)目比賽中,筆者均采用了此算法。實(shí)踐證明,機(jī)器人運(yùn)行的穩(wěn)定性、快速性和問題的自糾偏表現(xiàn)均有明顯改善。
參考文獻(xiàn):
[1]J.J.Labrosse,μC/OS-III:the Real—Time Kernel for the STMicroelectronics STM32[M/OL].2013.http://www.micrium.com/books/ucosiii.
[2]明子成.家庭護(hù)理機(jī)器人的設(shè)計(jì)[J].機(jī)器人技術(shù)與應(yīng)用,2010(09).
[3]明子成.游覽機(jī)器人的設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)器人技術(shù)與應(yīng)用,2008(10).
基金項(xiàng)目:南京曉莊學(xué)院2013年度科研項(xiàng)目《基于RTOS的機(jī)器人控制器開發(fā)》,項(xiàng)目編號(hào)2013NXY44。
endprint
摘要:機(jī)器人循線移動(dòng)是當(dāng)前機(jī)器人導(dǎo)航的一種常用方法。關(guān)于巡線算法的研究有很多,但多是研究算法本身,有不少算法設(shè)計(jì)精巧,實(shí)際應(yīng)用中運(yùn)行快速流暢,但可靠性并未有明顯改善。而我們?cè)O(shè)計(jì)的機(jī)器人,巡線采用離散PID算法,實(shí)驗(yàn)測(cè)試和機(jī)器人競(jìng)賽結(jié)果表明,該算法具有響應(yīng)速度快、巡線可靠、動(dòng)作快速流暢和偏離航線率低等優(yōu)點(diǎn)。
關(guān)鍵詞:機(jī)器人;離散PID RTOS;傳感器;巡線算法
● 概述
自主巡線機(jī)器人可廣泛應(yīng)用于物流、超市等的倉(cāng)庫(kù)、工廠自動(dòng)料車、機(jī)場(chǎng)等的貨物無(wú)人轉(zhuǎn)移技術(shù)領(lǐng)域,但要達(dá)到實(shí)用化,首先需要解決機(jī)器人可靠導(dǎo)航的問題。對(duì)于在一定區(qū)域內(nèi)實(shí)現(xiàn)機(jī)器人導(dǎo)航,巡線是目前較理想的選擇,因此成為各學(xué)段學(xué)生機(jī)器人比賽活動(dòng)中幾乎必有的項(xiàng)目??v觀近年來(lái)各級(jí)各類機(jī)器人競(jìng)賽活動(dòng)中巡線機(jī)器人的表現(xiàn),最薄弱的環(huán)節(jié)仍然是在基本的巡線過程中,機(jī)器人會(huì)不經(jīng)意間脫離引導(dǎo)線而不得不中止比賽。PID算法在巡線中已經(jīng)得到一定程度的使用,盡管改善了巡線的質(zhì)量,但由于控制程序運(yùn)行過程中的時(shí)序同步問題,機(jī)器人在移動(dòng)過程中還是會(huì)隨機(jī)出現(xiàn)脫離引導(dǎo)線的問題。即使采用多個(gè)傳感器信息進(jìn)行糾偏,但問題仍會(huì)出現(xiàn),即機(jī)器人在巡線過程中,某個(gè)糾偏傳感器明明“看”到引導(dǎo)線了,卻未按設(shè)計(jì)要求轉(zhuǎn)去執(zhí)行糾偏程序。“視”而不見,表明在傳感器處于引導(dǎo)線區(qū)域內(nèi)時(shí),CPU正在處理其他事務(wù)。在機(jī)器人MCU等硬件之上植入嵌入式實(shí)時(shí)操作系統(tǒng),傳感器的數(shù)據(jù)采集、環(huán)境監(jiān)測(cè)、信息處理與輸出控制都可作為獨(dú)立的任務(wù)進(jìn)行管理。讓監(jiān)視與控制程序同時(shí)進(jìn)行,避免了在等待過程中造成的信息“無(wú)視”,控制器實(shí)現(xiàn)了對(duì)監(jiān)測(cè)到的異常進(jìn)行實(shí)時(shí)處理,并即時(shí)進(jìn)行輸出控制,化解了單任務(wù)程序設(shè)計(jì)中的實(shí)時(shí)響應(yīng)難題。
● 總體設(shè)計(jì)
μC/OS-III中,任務(wù)可以是基于優(yōu)先級(jí)的搶占式調(diào)度,但也支持同等優(yōu)先級(jí)的輪轉(zhuǎn)調(diào)度。機(jī)器人的結(jié)構(gòu)設(shè)計(jì)如圖1所示,安裝了7個(gè)灰度傳感器,其中S4用于巡線數(shù)據(jù)的采集,其他傳感器用于偏離航線的檢測(cè)。在執(zhí)行任務(wù)的過程中,機(jī)器人始終不允許脫線運(yùn)行,這就意味著脫線檢測(cè)和處理必須優(yōu)先于其他事件。因此,我們將傳感器S1和S7的信息采集與處理作為任務(wù)1(如下頁(yè)圖2所示);在確定S1和S7沒有檢測(cè)到標(biāo)志線的情況下,需要考慮機(jī)器人是否處于較大的偏轉(zhuǎn)狀態(tài),根據(jù)傳感器S2和S6采集的信息進(jìn)行處理的任務(wù)2,可以優(yōu)先執(zhí)行;而檢測(cè)較小偏轉(zhuǎn)的傳感器S3和S5是為了保證機(jī)器人盡量以較小的偏轉(zhuǎn)沿著引導(dǎo)線平滑移動(dòng),設(shè)置為任務(wù)3;傳感器S4用于巡線移動(dòng)信息采集,故在這四個(gè)應(yīng)用任務(wù)中設(shè)置為最低優(yōu)先級(jí),為任務(wù)4。兩個(gè)任務(wù)之間的數(shù)據(jù)通信考慮到巡線過程中對(duì)傳感器信息的即時(shí)性要求,可通過全局變量實(shí)現(xiàn)。
圖1
● 關(guān)鍵設(shè)計(jì)
1.離散PID算法實(shí)現(xiàn)巡線設(shè)計(jì)
機(jī)器人巡線實(shí)際上僅使用一個(gè)灰度傳感器S4,即圖1中的3號(hào)傳感器。對(duì)采集的地面數(shù)據(jù)運(yùn)用離散PID算法,通過設(shè)定合適的比例、積分和微分參數(shù)計(jì)算出驅(qū)動(dòng)馬達(dá)的速度控制值,以確保其能快速平穩(wěn)前進(jìn)。該算法需要從傳感器檢測(cè)的地面和引導(dǎo)線不同點(diǎn)的值中找出最大值(Vmax)和最小值(Vmin),并計(jì)算出最大值與最小值的平均值,作為判斷在線與否的閾值(Vmid)。計(jì)算出最大值與最小值的差值(VΔ),作為比例參量(Kp)計(jì)算的依據(jù)之一。根據(jù)這些數(shù)據(jù),分別計(jì)算出比例P、積分I和微分D的調(diào)節(jié)值。
運(yùn)用比例可以計(jì)算出機(jī)器人對(duì)當(dāng)前狀況需要作出的反應(yīng)。比例調(diào)節(jié)值的算式:
(1)
積分是對(duì)已經(jīng)發(fā)生的偏差(V_err)進(jìn)行累積,以達(dá)到快速調(diào)節(jié)的目的。積分調(diào)節(jié)值的算式為:
(2)
微分用于對(duì)機(jī)器人移動(dòng)方向的趨勢(shì)進(jìn)行預(yù)測(cè)和加強(qiáng),比較前一次的偏差與當(dāng)前的偏差,得到機(jī)器人移動(dòng)的趨勢(shì),用微分調(diào)節(jié)值來(lái)強(qiáng)化該趨勢(shì),計(jì)算式為:
(3)
馬達(dá)速度調(diào)節(jié)值:
(4)
馬達(dá)的速度控制值:
(5)
(6)
馬達(dá)的移動(dòng)控制函數(shù):
Move(Pwr_Left,Pwr_Right); (7)
通過實(shí)時(shí)的地面環(huán)境感知和計(jì)算結(jié)果,即時(shí)調(diào)整機(jī)器人左右馬達(dá)的運(yùn)行速度,從而達(dá)到控制機(jī)器人沿著引導(dǎo)線移動(dòng)的目的。同時(shí),設(shè)計(jì)者需要根據(jù)機(jī)器人實(shí)際運(yùn)行狀況進(jìn)行參數(shù)Kp、Ki和Kd的值的設(shè)定。具體整定方法是:先單獨(dú)采用比例算法整定Kp,讓機(jī)器人巡線,尋找到合適的Kp和Pwr_Base。需要注意的是,Pwr_Base的值建議與機(jī)器人的驅(qū)動(dòng)電池電量形成關(guān)聯(lián),可以使系統(tǒng)運(yùn)行的穩(wěn)定性更高且適應(yīng)性更廣。
2.解決時(shí)序問題
盡管以上設(shè)計(jì)在邏輯上似乎解決了巡線和保障問題,但在實(shí)際調(diào)試時(shí),還是難以處理好巡線的問題。究其原因,在于盡管機(jī)器人可以隨時(shí)讀取傳感器值,但CPU如果在執(zhí)行其他指令,而檢測(cè)異常的傳感器盡管檢測(cè)到了引導(dǎo)線,CPU也會(huì)熟視無(wú)睹,而當(dāng)指令執(zhí)行到讀取該傳感器值時(shí),已經(jīng)物是人非了,這就會(huì)讓人無(wú)所適從,明明程序邏輯上沒有錯(cuò)誤,為什么還是“不聽話”呢?要讓機(jī)器人對(duì)傳感器信息“隨時(shí)”保持敏感,可以引入多任務(wù)管理。讓傳感器的采集數(shù)據(jù)在盡量短的時(shí)間內(nèi)(3ms或更低,具體需視機(jī)器人的運(yùn)行速度、傳感器的采集周期等而定)轉(zhuǎn)化成驅(qū)動(dòng)馬達(dá)的控制指令。據(jù)此,將傳感器采集和數(shù)據(jù)處理作為一個(gè)個(gè)獨(dú)立的任務(wù),根據(jù)任務(wù)的緊迫性可分為:脫線、較大偏離、較小偏離和巡線四個(gè)由高到低不同優(yōu)先級(jí)的任務(wù)。
圖2
● 實(shí)驗(yàn)測(cè)試與結(jié)果分析
機(jī)器人自主控制程序的設(shè)計(jì)所面臨的一個(gè)難題是運(yùn)行環(huán)境信息復(fù)雜和機(jī)器人可感知信息的客觀限制,任何理論上似乎完美的算法,在實(shí)際運(yùn)行時(shí)都很難保證100%的成功率,設(shè)計(jì)中刻意繞開和避免的問題往往還是會(huì)發(fā)生?;诖耍驹O(shè)計(jì)中不是回避問題,而是采用多傳感器信息融合算法,一旦機(jī)器人遇到問題就能夠通過傳感器檢測(cè)確認(rèn),并即時(shí)采取糾偏措施。在多次大型機(jī)器人競(jìng)賽巡線相關(guān)項(xiàng)目比賽中,筆者均采用了此算法。實(shí)踐證明,機(jī)器人運(yùn)行的穩(wěn)定性、快速性和問題的自糾偏表現(xiàn)均有明顯改善。
參考文獻(xiàn):
[1]J.J.Labrosse,μC/OS-III:the Real—Time Kernel for the STMicroelectronics STM32[M/OL].2013.http://www.micrium.com/books/ucosiii.
[2]明子成.家庭護(hù)理機(jī)器人的設(shè)計(jì)[J].機(jī)器人技術(shù)與應(yīng)用,2010(09).
[3]明子成.游覽機(jī)器人的設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)器人技術(shù)與應(yīng)用,2008(10).
基金項(xiàng)目:南京曉莊學(xué)院2013年度科研項(xiàng)目《基于RTOS的機(jī)器人控制器開發(fā)》,項(xiàng)目編號(hào)2013NXY44。
endprint
摘要:機(jī)器人循線移動(dòng)是當(dāng)前機(jī)器人導(dǎo)航的一種常用方法。關(guān)于巡線算法的研究有很多,但多是研究算法本身,有不少算法設(shè)計(jì)精巧,實(shí)際應(yīng)用中運(yùn)行快速流暢,但可靠性并未有明顯改善。而我們?cè)O(shè)計(jì)的機(jī)器人,巡線采用離散PID算法,實(shí)驗(yàn)測(cè)試和機(jī)器人競(jìng)賽結(jié)果表明,該算法具有響應(yīng)速度快、巡線可靠、動(dòng)作快速流暢和偏離航線率低等優(yōu)點(diǎn)。
關(guān)鍵詞:機(jī)器人;離散PID RTOS;傳感器;巡線算法
● 概述
自主巡線機(jī)器人可廣泛應(yīng)用于物流、超市等的倉(cāng)庫(kù)、工廠自動(dòng)料車、機(jī)場(chǎng)等的貨物無(wú)人轉(zhuǎn)移技術(shù)領(lǐng)域,但要達(dá)到實(shí)用化,首先需要解決機(jī)器人可靠導(dǎo)航的問題。對(duì)于在一定區(qū)域內(nèi)實(shí)現(xiàn)機(jī)器人導(dǎo)航,巡線是目前較理想的選擇,因此成為各學(xué)段學(xué)生機(jī)器人比賽活動(dòng)中幾乎必有的項(xiàng)目。縱觀近年來(lái)各級(jí)各類機(jī)器人競(jìng)賽活動(dòng)中巡線機(jī)器人的表現(xiàn),最薄弱的環(huán)節(jié)仍然是在基本的巡線過程中,機(jī)器人會(huì)不經(jīng)意間脫離引導(dǎo)線而不得不中止比賽。PID算法在巡線中已經(jīng)得到一定程度的使用,盡管改善了巡線的質(zhì)量,但由于控制程序運(yùn)行過程中的時(shí)序同步問題,機(jī)器人在移動(dòng)過程中還是會(huì)隨機(jī)出現(xiàn)脫離引導(dǎo)線的問題。即使采用多個(gè)傳感器信息進(jìn)行糾偏,但問題仍會(huì)出現(xiàn),即機(jī)器人在巡線過程中,某個(gè)糾偏傳感器明明“看”到引導(dǎo)線了,卻未按設(shè)計(jì)要求轉(zhuǎn)去執(zhí)行糾偏程序。“視”而不見,表明在傳感器處于引導(dǎo)線區(qū)域內(nèi)時(shí),CPU正在處理其他事務(wù)。在機(jī)器人MCU等硬件之上植入嵌入式實(shí)時(shí)操作系統(tǒng),傳感器的數(shù)據(jù)采集、環(huán)境監(jiān)測(cè)、信息處理與輸出控制都可作為獨(dú)立的任務(wù)進(jìn)行管理。讓監(jiān)視與控制程序同時(shí)進(jìn)行,避免了在等待過程中造成的信息“無(wú)視”,控制器實(shí)現(xiàn)了對(duì)監(jiān)測(cè)到的異常進(jìn)行實(shí)時(shí)處理,并即時(shí)進(jìn)行輸出控制,化解了單任務(wù)程序設(shè)計(jì)中的實(shí)時(shí)響應(yīng)難題。
● 總體設(shè)計(jì)
μC/OS-III中,任務(wù)可以是基于優(yōu)先級(jí)的搶占式調(diào)度,但也支持同等優(yōu)先級(jí)的輪轉(zhuǎn)調(diào)度。機(jī)器人的結(jié)構(gòu)設(shè)計(jì)如圖1所示,安裝了7個(gè)灰度傳感器,其中S4用于巡線數(shù)據(jù)的采集,其他傳感器用于偏離航線的檢測(cè)。在執(zhí)行任務(wù)的過程中,機(jī)器人始終不允許脫線運(yùn)行,這就意味著脫線檢測(cè)和處理必須優(yōu)先于其他事件。因此,我們將傳感器S1和S7的信息采集與處理作為任務(wù)1(如下頁(yè)圖2所示);在確定S1和S7沒有檢測(cè)到標(biāo)志線的情況下,需要考慮機(jī)器人是否處于較大的偏轉(zhuǎn)狀態(tài),根據(jù)傳感器S2和S6采集的信息進(jìn)行處理的任務(wù)2,可以優(yōu)先執(zhí)行;而檢測(cè)較小偏轉(zhuǎn)的傳感器S3和S5是為了保證機(jī)器人盡量以較小的偏轉(zhuǎn)沿著引導(dǎo)線平滑移動(dòng),設(shè)置為任務(wù)3;傳感器S4用于巡線移動(dòng)信息采集,故在這四個(gè)應(yīng)用任務(wù)中設(shè)置為最低優(yōu)先級(jí),為任務(wù)4。兩個(gè)任務(wù)之間的數(shù)據(jù)通信考慮到巡線過程中對(duì)傳感器信息的即時(shí)性要求,可通過全局變量實(shí)現(xiàn)。
圖1
● 關(guān)鍵設(shè)計(jì)
1.離散PID算法實(shí)現(xiàn)巡線設(shè)計(jì)
機(jī)器人巡線實(shí)際上僅使用一個(gè)灰度傳感器S4,即圖1中的3號(hào)傳感器。對(duì)采集的地面數(shù)據(jù)運(yùn)用離散PID算法,通過設(shè)定合適的比例、積分和微分參數(shù)計(jì)算出驅(qū)動(dòng)馬達(dá)的速度控制值,以確保其能快速平穩(wěn)前進(jìn)。該算法需要從傳感器檢測(cè)的地面和引導(dǎo)線不同點(diǎn)的值中找出最大值(Vmax)和最小值(Vmin),并計(jì)算出最大值與最小值的平均值,作為判斷在線與否的閾值(Vmid)。計(jì)算出最大值與最小值的差值(VΔ),作為比例參量(Kp)計(jì)算的依據(jù)之一。根據(jù)這些數(shù)據(jù),分別計(jì)算出比例P、積分I和微分D的調(diào)節(jié)值。
運(yùn)用比例可以計(jì)算出機(jī)器人對(duì)當(dāng)前狀況需要作出的反應(yīng)。比例調(diào)節(jié)值的算式:
(1)
積分是對(duì)已經(jīng)發(fā)生的偏差(V_err)進(jìn)行累積,以達(dá)到快速調(diào)節(jié)的目的。積分調(diào)節(jié)值的算式為:
(2)
微分用于對(duì)機(jī)器人移動(dòng)方向的趨勢(shì)進(jìn)行預(yù)測(cè)和加強(qiáng),比較前一次的偏差與當(dāng)前的偏差,得到機(jī)器人移動(dòng)的趨勢(shì),用微分調(diào)節(jié)值來(lái)強(qiáng)化該趨勢(shì),計(jì)算式為:
(3)
馬達(dá)速度調(diào)節(jié)值:
(4)
馬達(dá)的速度控制值:
(5)
(6)
馬達(dá)的移動(dòng)控制函數(shù):
Move(Pwr_Left,Pwr_Right); (7)
通過實(shí)時(shí)的地面環(huán)境感知和計(jì)算結(jié)果,即時(shí)調(diào)整機(jī)器人左右馬達(dá)的運(yùn)行速度,從而達(dá)到控制機(jī)器人沿著引導(dǎo)線移動(dòng)的目的。同時(shí),設(shè)計(jì)者需要根據(jù)機(jī)器人實(shí)際運(yùn)行狀況進(jìn)行參數(shù)Kp、Ki和Kd的值的設(shè)定。具體整定方法是:先單獨(dú)采用比例算法整定Kp,讓機(jī)器人巡線,尋找到合適的Kp和Pwr_Base。需要注意的是,Pwr_Base的值建議與機(jī)器人的驅(qū)動(dòng)電池電量形成關(guān)聯(lián),可以使系統(tǒng)運(yùn)行的穩(wěn)定性更高且適應(yīng)性更廣。
2.解決時(shí)序問題
盡管以上設(shè)計(jì)在邏輯上似乎解決了巡線和保障問題,但在實(shí)際調(diào)試時(shí),還是難以處理好巡線的問題。究其原因,在于盡管機(jī)器人可以隨時(shí)讀取傳感器值,但CPU如果在執(zhí)行其他指令,而檢測(cè)異常的傳感器盡管檢測(cè)到了引導(dǎo)線,CPU也會(huì)熟視無(wú)睹,而當(dāng)指令執(zhí)行到讀取該傳感器值時(shí),已經(jīng)物是人非了,這就會(huì)讓人無(wú)所適從,明明程序邏輯上沒有錯(cuò)誤,為什么還是“不聽話”呢?要讓機(jī)器人對(duì)傳感器信息“隨時(shí)”保持敏感,可以引入多任務(wù)管理。讓傳感器的采集數(shù)據(jù)在盡量短的時(shí)間內(nèi)(3ms或更低,具體需視機(jī)器人的運(yùn)行速度、傳感器的采集周期等而定)轉(zhuǎn)化成驅(qū)動(dòng)馬達(dá)的控制指令。據(jù)此,將傳感器采集和數(shù)據(jù)處理作為一個(gè)個(gè)獨(dú)立的任務(wù),根據(jù)任務(wù)的緊迫性可分為:脫線、較大偏離、較小偏離和巡線四個(gè)由高到低不同優(yōu)先級(jí)的任務(wù)。
圖2
● 實(shí)驗(yàn)測(cè)試與結(jié)果分析
機(jī)器人自主控制程序的設(shè)計(jì)所面臨的一個(gè)難題是運(yùn)行環(huán)境信息復(fù)雜和機(jī)器人可感知信息的客觀限制,任何理論上似乎完美的算法,在實(shí)際運(yùn)行時(shí)都很難保證100%的成功率,設(shè)計(jì)中刻意繞開和避免的問題往往還是會(huì)發(fā)生?;诖?,本設(shè)計(jì)中不是回避問題,而是采用多傳感器信息融合算法,一旦機(jī)器人遇到問題就能夠通過傳感器檢測(cè)確認(rèn),并即時(shí)采取糾偏措施。在多次大型機(jī)器人競(jìng)賽巡線相關(guān)項(xiàng)目比賽中,筆者均采用了此算法。實(shí)踐證明,機(jī)器人運(yùn)行的穩(wěn)定性、快速性和問題的自糾偏表現(xiàn)均有明顯改善。
參考文獻(xiàn):
[1]J.J.Labrosse,μC/OS-III:the Real—Time Kernel for the STMicroelectronics STM32[M/OL].2013.http://www.micrium.com/books/ucosiii.
[2]明子成.家庭護(hù)理機(jī)器人的設(shè)計(jì)[J].機(jī)器人技術(shù)與應(yīng)用,2010(09).
[3]明子成.游覽機(jī)器人的設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)器人技術(shù)與應(yīng)用,2008(10).
基金項(xiàng)目:南京曉莊學(xué)院2013年度科研項(xiàng)目《基于RTOS的機(jī)器人控制器開發(fā)》,項(xiàng)目編號(hào)2013NXY44。
endprint