羅斐 劉志勤
摘? ?要:機器人教育作為一門交叉學(xué)科,是STEAM教育理念應(yīng)用于實踐的優(yōu)秀載體。目前國內(nèi)的中小學(xué)機器人教育主要以競賽為主,巡線任務(wù)是大多數(shù)機器人競賽中的基礎(chǔ)任務(wù)之一。文章構(gòu)建了一種適用于中小學(xué)機器人競賽的巡線技術(shù)模型,包括基于PID控制的巡線算法、路口選擇算法和邊路傳感器的轉(zhuǎn)向輔助功能三個部分。文章通過闡述模型,并以LEGO MINDSTORMS編程為例進行展示,讓更多學(xué)生掌握并應(yīng)用于中小學(xué)機器人競賽的巡線部分,提高學(xué)生的競賽水平。
關(guān)鍵詞:中小學(xué)機器人競賽;巡線技術(shù);PID算法;路口選擇
中圖分類號:TP242 文獻標志碼:A 文章編號:1673-8454(2020)01-0050-05
一、引言
幾乎任何層次、任何主題的機器人競賽都避免不了巡線這個最基礎(chǔ)的任務(wù),機器人能夠按照既定的路線行進,是在競賽中取得優(yōu)異成績最基礎(chǔ)和最重要的條件之一,因此讓學(xué)生掌握一種高效的巡線技術(shù)十分必要。目前國內(nèi)中小學(xué)機器人競賽存在師資水平參差不齊且教學(xué)能力普遍不高等問題,大部分學(xué)生參加競賽過于依靠教練,本身并沒有掌握一種良好的技術(shù)。構(gòu)建一種適用于中小學(xué)機器人競賽的巡線技術(shù)模型并讓學(xué)生掌握,可以很好地解決這些問題。
二、國內(nèi)外中小學(xué)機器人競賽概述
國外的主流機器人競賽有VEX機器人大賽、RoboRAVE和FIRST體系賽事,VEX機器人大賽根據(jù)難度涵蓋的年齡段很廣泛,包含8歲孩子到18歲以上的大學(xué)生,是含金量較高、綜合性較強的機器人比賽,同時也是世界上規(guī)模最大的機器人比賽。RoboRAVE是由美國Intel公司主要贊助和支持的國際機器人競賽,按競賽年齡組隊,可分為小學(xué)、初中和高中,作為國際大賽,同樣能夠讓參賽學(xué)生得到很好的鍛煉,開拓視野。FIRST體系賽事,包含少兒創(chuàng)意賽(FLL Jr)、工程挑戰(zhàn)賽(FLL)、科技挑戰(zhàn)賽(FTC)和機器人挑戰(zhàn)賽(FRC),是全球主流的機器人競賽,同時也是國內(nèi)認可度較高的機器人競賽,只要在FIRST各類賽事獲獎,都會進入STEM人才庫,對申請世界名校很有幫助。
國內(nèi)的主流機器人競賽有“全國青少年科技創(chuàng)新大賽”和“中國青少年機器人競賽”,其中“中國青少年機器人競賽”綜合計算機編程、工程設(shè)計、動手制作與技術(shù)構(gòu)建,是一項專業(yè)的機器人類賽事。該競賽分為機器人綜合技能比賽、FLL機器人工程挑戰(zhàn)賽、VEX機器人工程挑戰(zhàn)賽、機器人創(chuàng)意比賽和教育機器人工程挑戰(zhàn)賽。
三、國內(nèi)外中小學(xué)機器人競賽開展現(xiàn)狀
國外的機器人教育開展較早且熱度一直很高,早在1994年美國麻省理工學(xué)院就開設(shè)了LEGO機器人相關(guān)課程,讓學(xué)生自行設(shè)計機器人并親自動手制作,提高學(xué)生對機器人知識的了解和對機器人制作、操縱的水平。LEGO的第一個MINDSTORMS(可編程傳感器模具)零件于1998年上市,同年和FIRST機構(gòu)組成FLL聯(lián)盟,并在每年9月向全球參賽隊伍公布年度競賽項目。大量的資源和天然的優(yōu)勢使國外的機器人教育發(fā)展水平較國內(nèi)優(yōu)勢巨大,優(yōu)質(zhì)的師資以及較高的普及程度使國外的機器人競賽開展火熱,參加競賽的學(xué)生由于從小受到高水平的機器人教育,在競賽中能力突出,參與度很高。
我國機器人教育起步較晚,將機器人教育引入課堂的學(xué)校到現(xiàn)在仍是鳳毛麟角。沒有獨立的課程支撐,大多數(shù)只是以興趣小組和課外培訓(xùn)機構(gòu)的形式存在。校內(nèi)受到資源、場地、時間等因素的制約,只有很少部分的學(xué)生能夠接觸到機器人教育且?guī)熧Y匱乏,學(xué)生更是學(xué)而不精。校外的培訓(xùn)機構(gòu)教學(xué)模式各異,師資水平參差不齊且大都以盈利為主要目的,教學(xué)目標不明確,教學(xué)模式陳舊,沒有系統(tǒng)的教學(xué)設(shè)計,學(xué)生所掌握的知識大都浮于表面。參加競賽時過于依靠教練,學(xué)生參與度不高,沒能得到應(yīng)有的鍛煉和提升。
四、國內(nèi)外中小學(xué)機器人競賽巡線技術(shù)模型概述
構(gòu)建的中小學(xué)機器人競賽巡線技術(shù)模型包含三個部分,分別為基于PID控制的巡線算法、路口選擇算法和邊路傳感器的轉(zhuǎn)向輔助功能。雖然傳感器的數(shù)量越多,機器人的巡線效果會越好、越精確,但國內(nèi)外的中小學(xué)機器人競賽對傳感器使用的數(shù)量都有嚴格的限制,一般要求不超過4個。因此,模型在基于PID控制的巡線算法部分采用單傳感器巡線。路口選擇算法部分采用兩個邊路傳感器來達到路口計數(shù)的功能,用于確認機器人所處的位置,讓機器人能夠按照人為設(shè)定的方向行進。邊路傳感器的轉(zhuǎn)向輔助功能用于面對彎度較大、較復(fù)雜的地圖時輔助機器人轉(zhuǎn)向,防止機器人因轉(zhuǎn)向不及時而導(dǎo)致“飛線”。
五、基于PID控制的巡線算法
PID控制器常用于工業(yè)領(lǐng)域,能實現(xiàn)對多種機械裝置的精確控制。PID的數(shù)學(xué)模型經(jīng)過一系列的化簡之后可以表示為:
UK=KP·EK+Ki·■Ei+Kd·(Ek-Ek-1)
其中Uk為第k次采樣輸出值,Kp為比例系數(shù),Ek為第k次采樣時與輸出的偏差,Ki為積分系數(shù),Kd為微分系數(shù)。
將PID算法應(yīng)用于巡線機器人,能夠高效地控制機器人完成巡線任務(wù)。其中P(Proportion)是比例項,是巡線機器人中的關(guān)鍵部分,用于控制轉(zhuǎn)向的幅度。I(Integration)是積分項,可以理解為機器人巡線過程中產(chǎn)生誤差的累積,用于消除穩(wěn)態(tài)誤差。D(Differentiation)是微分項,也可以叫導(dǎo)數(shù)項,中學(xué)數(shù)學(xué)里定義一個函數(shù)在某一點的導(dǎo)數(shù)描述了這個函數(shù)在這一點附近的變化率,可以理解為機器人巡線過程中兩個連續(xù)誤差之間的差,用于預(yù)測機器人未來可能產(chǎn)生的誤差,提高機器人的轉(zhuǎn)向速率。
1.案例類比PID模型
為了幫助學(xué)生理解PID模型,首先設(shè)計了一個生活中可見的案例——如何精確控制一個水缸中的水位。
有一個水缸,在不斷往外流水,需要人為不斷往里注水,讓水缸里的水位一直保持在一個刻度上。
這個時候需要選擇一個合適的容器,一次一次地往里面加水,讓水位保持原來的刻度,這樣的一個容器,就是PID中的比例。
但存在的問題是很難找到一個合適的容器,讓每一次加的水都剛剛好,總會存在一些誤差,要么多一點,要么少一點,這個時候就需要再找一個新的容器,能夠進一步縮小這個誤差,于是找來了一個漏斗,通過不斷實驗,終于找到了一個大小合適的漏斗,水通過漏斗進來剛好可以保持原來的刻度,這個漏斗,就是積分。
最后一個問題,不能確定這個水是一直保持勻速往外流,有時候它會流得快,有時候會流得慢,這就導(dǎo)致水位還是會有波動,這個時候額外再準備一盆備用水,流得快了就直接往里倒,如果倒多了怎么辦?在水位刻度上方再打一個洞,當(dāng)水位漫過刻度,就讓水流出來。這相當(dāng)于有了預(yù)見性,這就是微分。
總結(jié)一下,比例就是調(diào)節(jié)尺度的大小,對應(yīng)的是每次舀水的容器;積分就是將每次直接舀水的誤差進行細分,增大或者減小進水速度,對應(yīng)的是漏斗;微分就是對水位刻度做一個預(yù)判,高了就放水,低了就加水。
2.PID巡線算法剖析
首先要清楚巡線小車是如何巡線的。在單傳感器的情況下,小車應(yīng)沿著黑線邊緣走。不可以壓著黑線走的原因是一旦小車發(fā)生偏離,顏色傳感器的反射光強度讀數(shù)發(fā)生了較大的變化,小車將不知道自己的位置究竟是往哪個方向偏移了,因為左右兩側(cè)都不是黑線,小車無法確定糾正方向。如果沿著黑線邊緣走,當(dāng)小車發(fā)生偏移壓在黑線上,顏色傳感器反射光強度讀數(shù)變小,說明小車該向線的隨機一側(cè)糾正方向;當(dāng)小車發(fā)生偏移遠離黑線,顏色傳感器反射光強度讀數(shù)變大,說明小車該向靠近黑線一側(cè)糾正方向。
(1)比例調(diào)節(jié)
清楚了巡線方式之后,要明白如何來調(diào)節(jié)小車轉(zhuǎn)向幅度,轉(zhuǎn)向幅度用T表示。在機器人巡線的過程中,總是希望機器人可以一直沿著線走,當(dāng)線發(fā)生較大彎曲時,機器人有較大轉(zhuǎn)向,當(dāng)線發(fā)生較小彎曲時,機器人有較小轉(zhuǎn)向。收集顏色傳感器反射光強度,用R表示。根據(jù)程序采集得到的數(shù)據(jù),當(dāng)機器人完全離開黑線時,顏色傳感器測量的反射光強度有最大值,當(dāng)機器人完全壓在黑線上時,顏色傳感器測量的反射光強度有最小值,取兩個極限值的中間數(shù),給它取個名字叫標準量,用S表示。期望的效果就是機器人在走直線的時候,傳感器的讀數(shù)一直都是S。如果遇到轉(zhuǎn)彎的時候,用傳感器測量到的值減去標準量會產(chǎn)生一個誤差量,用E表示,數(shù)學(xué)表達式如下:
E=R-S
誤差量可以用來表示糾正小車轉(zhuǎn)向的幅度。因為轉(zhuǎn)向幅度越大,產(chǎn)生的誤差量也會越大,所以可以看成轉(zhuǎn)向幅度與誤差量成比例關(guān)系,數(shù)學(xué)表達式如下:
T=KP·E
在實際操作中,用兩個電機,即A電機和B電機,作為巡線機器人的驅(qū)動系統(tǒng)?,F(xiàn)在給定兩個電機一樣的初始功率P,當(dāng)誤差量E不為零的時候,給其中一個電機的功率值加上轉(zhuǎn)向幅度,給另外一個電機的功率值減去轉(zhuǎn)向幅度,即可達到實際轉(zhuǎn)向的效果,數(shù)學(xué)表達式如下:
PowerA=PA+T
PowerB=PB+T
完成比例控制器后,機器人基本上已經(jīng)可以完成巡線任務(wù)了,很簡單,但并不高效。
(2)積分調(diào)節(jié)
觀察發(fā)現(xiàn),機器人在沿著直線前進的時候仍然會產(chǎn)生一定程度的擺動,產(chǎn)生擺動就意味著在同樣速度的情況下會花費更長的時間去完成巡線,這并不高效。結(jié)合之前的實例分析,為什么機器人在巡直線的時候會產(chǎn)生這樣的擺動。
在給水缸注水的時候,無論找什么樣的容器,總是會存在多一點或者少一點的問題,現(xiàn)在機器人巡線也是這樣,無論比例怎么調(diào)節(jié),轉(zhuǎn)向總會存在多一點或者少一點的問題,這就是機器人產(chǎn)生擺動的原因。所以,比例調(diào)節(jié)存在一個缺陷,它不能完全消除誤差,當(dāng)誤差保持恒定的時候,同時整個系統(tǒng)也維持恒定了,這種誤差叫穩(wěn)態(tài)誤差。這個時候要想辦法消除這種穩(wěn)態(tài)誤差,就要引入積分項。
這里可以把積分理解為對誤差的累加,即:
I=■Ei
雖然之前比例調(diào)節(jié)導(dǎo)致每一次都會產(chǎn)生一個小的誤差,但是積分過后,小的誤差會變大,幾個連續(xù)小的誤差積分會完全改變機器人的運行軌跡。隨著時間的推移,機器人產(chǎn)生的誤差會越來越小,理論上會達到完全消除的狀態(tài),即積分項為0。
還存在一個問題,由于誤差有正有負,所以積分項通常不會趨于無窮,但是如果機器人長期處于線的一側(cè),尤其在轉(zhuǎn)彎的時候,那么積分項很快就會趨于無窮,產(chǎn)生一個非常大的轉(zhuǎn)向值,這會導(dǎo)致機器人“飛線”,即完全偏離軌跡,這時通常的處理方式是在每一次積分結(jié)束時都將積分項乘以一個小于1的常數(shù)來抑制積分。
此時,轉(zhuǎn)向幅度T可以表示為:
T=KP·E+Ki·I
積分調(diào)節(jié)可以看成是對過去誤差的糾正,可以讓機器人在巡線的過程中逐漸減小擺動的幅度,使巡線效果逐漸趨于完善。
(3)微分調(diào)節(jié)
機器人能夠糾正過去的誤差還不夠,還希望機器人可以預(yù)測未來的誤差。比如當(dāng)機器人面臨一個很大的轉(zhuǎn)向的時候,可能比例加積分的調(diào)節(jié)方式不足以讓它完成轉(zhuǎn)向,因為這個彎的幅度太大且來得太突然了,要是可以提前預(yù)測就好了。微分,就是用來實現(xiàn)這個功能的。
這里的微分可以看成導(dǎo)數(shù),是對兩個連續(xù)誤差之間的變化量的描述,即:
D=CurrentE(error)-LastE(lastError)
那么預(yù)測的下一個誤差可以表示為:
NextE(nextError)=D+CurrentE(error)
此時,轉(zhuǎn)向幅度T可以表示為:
T=KP·E+Ki·I+Kd·D
預(yù)測下一次誤差有什么作用呢?假如下一次的誤差比之前一次更小,那么導(dǎo)數(shù)項的值也很小,對系統(tǒng)幾乎不起任何作用。但是要是下一次的誤差比當(dāng)前誤差大,而且大很多,這個時候系統(tǒng)就會去糾正這個誤差,因為導(dǎo)數(shù)項會產(chǎn)生一個很大的值,糾正轉(zhuǎn)向,這一點在機器人面臨轉(zhuǎn)向的時候非常有用,可以有效地提高機器人的轉(zhuǎn)向速率,避免轉(zhuǎn)向不及時而產(chǎn)生“飛線”的現(xiàn)象。
對應(yīng)的LEGO MINDSTORMS程序如圖1所示。
(4)PID巡線算法總結(jié)
實踐中,比例調(diào)節(jié)是機器人完成巡線任務(wù)的關(guān)鍵。當(dāng)?shù)貓D比較簡單、轉(zhuǎn)向幅度較小時,可以適當(dāng)將電機功率調(diào)大,將Kp值調(diào)小,這樣可以讓機器人盡快地完成巡線操作且擺動幅度較小。如果情況相反,則應(yīng)該限制電機的功率。積分調(diào)節(jié)可以將比例調(diào)節(jié)中產(chǎn)生的誤差降得更低,即減少機器人在巡線過程中產(chǎn)生的震蕩。微分控制可以讓機器人“預(yù)測”未來可能產(chǎn)生的誤差,使機器人在遇到幅度較大的轉(zhuǎn)向時反應(yīng)更加靈敏。
六、路口選擇算法
在機器人競賽中,地圖一般都不會是一條單一的黑線,往往會存在很多路口,如十字路口和丁字路口。在遇到這些路口的時候,要求機器人能夠按照期望的方向行進,即學(xué)會在路口處做出選擇而不是隨機轉(zhuǎn)彎。這里采用兩個邊路傳感器同時檢測到黑線的時候就將路口數(shù)做一次遞加,當(dāng)需要機器人在某一個路口向某一個方向轉(zhuǎn)彎時,設(shè)定對應(yīng)的路口數(shù)字,單獨做一次轉(zhuǎn)彎子程序,轉(zhuǎn)彎后再跳出該轉(zhuǎn)彎子程序繼續(xù)巡線。
1.路口計數(shù)功能實現(xiàn)
首先設(shè)定路口初始數(shù)量為0。根據(jù)實時檢測到的兩個邊路傳感器的反射光線強度R1和R2,設(shè)定一個臨界值C,臨界值C表示傳感器探測到黑線時的值,如當(dāng)傳感器完全接觸黑線時有最小值M,經(jīng)過之前的計算有標準量S,臨界值應(yīng)當(dāng)介于S和M之間。當(dāng)R1和R2同時小于臨界值,即左右的兩個邊路傳感器同時檢測到了黑線,就將路口數(shù)量做一次遞加。
這里還存在一個問題,計算機的運算速度很快,黑線又有一定的寬度,當(dāng)機器人掃到黑線直到完全越過黑線需要一定的時間,在這一段時間里兩個邊路傳感器一直處于檢測到黑線的狀態(tài),路口計數(shù)會持續(xù)遞加,這會導(dǎo)致一個錯誤結(jié)果。解決的辦法是在路口計數(shù)的子程序里面放一個等待模塊,起到延時的效果,即限定程序跑完一次所花費的時間。
對應(yīng)的LEGO MINDSTORMS程序如圖2所示。
2.特定路口轉(zhuǎn)彎功能實現(xiàn)
做路口計數(shù)的目的就是為了機器人能夠在特定的路口向設(shè)定的方向轉(zhuǎn)彎。如需要機器人在第一個路口向左轉(zhuǎn)彎,在第二個路口向右轉(zhuǎn)彎,在完成路口計數(shù)的功能后,需要單獨對機器人做轉(zhuǎn)彎操作。轉(zhuǎn)彎操作本身很簡單,只需要調(diào)整好參數(shù)即可,但存在的問題是,當(dāng)機器人完成轉(zhuǎn)彎過后依然會檢測到路口數(shù)為要求轉(zhuǎn)彎的路口,這會導(dǎo)致機器人陷入一個循環(huán),即一直轉(zhuǎn)彎而不繼續(xù)巡線。
解決這個問題的辦法就是要讓機器人在完成當(dāng)前轉(zhuǎn)彎操作之后就跳出轉(zhuǎn)彎的子程序,具體的做法是每完成一次轉(zhuǎn)彎,就給路口數(shù)再加一個小數(shù),這個小數(shù)相當(dāng)于對此次轉(zhuǎn)彎做了一個標記,當(dāng)此次轉(zhuǎn)彎完成,就不需要轉(zhuǎn)彎了。對計算機而言,由于路口數(shù)在完成轉(zhuǎn)彎之后加上一個小數(shù),和轉(zhuǎn)彎之前的路口數(shù)不等了,就會跳出當(dāng)前循環(huán),繼續(xù)執(zhí)行巡線。
對應(yīng)的LEGO MINDSTORMS程序如圖3所示。
3.路口選擇算法總結(jié)
本套算法的邏輯簡潔明了,有利于數(shù)學(xué)基礎(chǔ)薄弱的中小學(xué)生理解。在實踐中,應(yīng)合理設(shè)置臨界值C和路口計數(shù)時的等待時間。若臨界值C的值過大或過小,都會導(dǎo)致路口計數(shù)功能上的缺失,使機器人不能正確地記錄經(jīng)過的路口數(shù)。若路口計數(shù)時的等待時間過長,會導(dǎo)致連續(xù)相近的兩個路口出現(xiàn)計數(shù)不及時的情況;若路口計數(shù)時的等待時間過短,會導(dǎo)致機器人因還未完全駛出路口而出現(xiàn)重復(fù)計數(shù)的情況。對特定路口轉(zhuǎn)彎子程序所做的小數(shù)標記是為了避免程序陷入錯誤循環(huán)所做的跳出操作。
七、邊路傳感器的轉(zhuǎn)向輔助功能概述與實現(xiàn)
在一些比賽地圖較復(fù)雜的競賽中,會出現(xiàn)大量的銳角轉(zhuǎn)彎以及連續(xù)的S型路線,此時應(yīng)在保證機器人不“飛線”的前提下盡可能提高機器人的巡線速度。由于前面采用的單傳感器PID巡線方式,機器人巡線速度稍快就容易出現(xiàn)“飛線”的情況,此時,兩個邊路傳感器的轉(zhuǎn)向輔助功能就顯得尤為重要。
具體的做法是:同樣以子程序的方式,當(dāng)某一邊的傳感器檢測到了黑線,就讓機器人向該方向發(fā)生偏轉(zhuǎn),偏轉(zhuǎn)的角度為中路傳感器再次檢測到黑線為止,即使黑線重新處于機器人的中間位置。此時跳出該子程序,繼續(xù)執(zhí)行巡線。
對應(yīng)的LEGO MINDSTORMS程序如圖4所示。
八、結(jié)束語
本文構(gòu)建的適用于中小學(xué)機器人競賽的巡線技術(shù)模型能夠讓更多的學(xué)生掌握一種應(yīng)用于競賽的巡線技術(shù),提高學(xué)生在競賽中的參與度和真實水平,取得更好的成績。但該模型還存在部分尚需深入研究的問題,如PID巡線算法中每個部分的參數(shù)該如何確定,盡管已有不少文獻闡述了該如何確定參數(shù)部分的值,但煩瑣的推導(dǎo)過程仍舊不能為廣大中小學(xué)生所接受,后續(xù)還需要深入研究和探討。展示所用的LEGO MINDSTORMS程序并非適用于所有的中小學(xué)機器人競賽,這里只做模型思路的其中一個具體應(yīng)用,不同的競賽有不同的器材和編程環(huán)境要求,應(yīng)結(jié)合實際做具體的分析和實踐。
參考文獻:
[1]上菲菲,劉鳳娟.欠發(fā)達地區(qū)中小學(xué)機器人教育研究——以漢中市為例[J].中國現(xiàn)代教育裝備,2018(16):63-66.
[2]蒙慶華,藍日海,戴海清.機器人教育校本課程開發(fā)探究[J].教學(xué)與管理,2019(15):90-92.
[3]才奕.PID控制器在樂高EV3巡線程序中的應(yīng)用[J].內(nèi)蒙古科技與經(jīng)濟,2018(1):97-98,100.
[4]任翠平,左毅鵬,盧軍.基于PID算法的巡線小車的設(shè)計與實現(xiàn)[J].電子技術(shù)與軟件工程,2016(12):251-252.
[5]黃芹,陶云王,玉金等.中小學(xué)模塊化機器人教育探究[J].中國電化教育,2018(7):113-119.
[6]張劍平,王益.機器人教育:現(xiàn)狀、問題與推進策略[J].中國電化教育,2006(12):65-68.
(編輯:王天鵬)