孫昱放


摘 要:伴隨科學(xué)技術(shù)的發(fā)展和人民生活水平的提高,移動機(jī)器小車在現(xiàn)實生產(chǎn)和生活中,得到了極為廣泛的應(yīng)用。本文在系統(tǒng)介紹了移動機(jī)器小車的基礎(chǔ)知識基礎(chǔ)上,重點闡述了移動機(jī)器小車設(shè)計與被動避障、主動避障的控制,以及追蹤控制的工作原理和應(yīng)用。
關(guān)鍵詞:移動機(jī)器小車;控制;制作與設(shè)計
中圖分類號:TP24 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-2064(2017)13-0054-03
機(jī)器人逐漸進(jìn)入到人們的生活當(dāng)中,如現(xiàn)在家用的掃地機(jī)器人、飯店使用的洗碗機(jī)等等。機(jī)器人方便了人們的生活,優(yōu)化了人們的生活方式。機(jī)器人在未來一定可以對人類的生活起到更大的作用。移動機(jī)器人在生活中的應(yīng)用逐漸普遍,也引起了我對它的興趣,我從簡單的移動機(jī)器小車入手,開始學(xué)習(xí)與研究移動機(jī)器小車的控制,從而對機(jī)器人有更深的理解。
1 移動機(jī)器小車的基礎(chǔ)知識
移動機(jī)器小車即使用伺服電機(jī)根據(jù)軟件編程的設(shè)定,發(fā)出脈沖控制機(jī)器小車完成運(yùn)動、避障、跟隨等任務(wù)的機(jī)器。
1.1 軟件介紹
BASIC Stamp是由美國Parallax公司自1992年起所提創(chuàng)的一種微控制器,此種微控制器與其他微控制器不同的地方在于:微控制器中的ROM內(nèi)存內(nèi)建了一套小型、特有的BASIC編程語言直譯器,稱為:PBASIC。
1.2 硬件介紹
伺服電機(jī):伺服系統(tǒng)是使物體的位置、方位、狀態(tài)等輸出被控量能夠跟隨輸入目標(biāo)(或給定值)的任意變化的自動控制系統(tǒng)。
面包板:面包板是由于板子上有很多小插孔,專為電子電路的無焊接實驗設(shè)計制造的。電子元器件可根據(jù)需要隨意插入或拔出。
1.3 指令和循環(huán)語句
伺服電機(jī)在收到某一特定的信號時,處于靜止?fàn)顟B(tài)。本次使用的伺服電機(jī)在收到脈沖寬度為1.5ms的脈沖信號時,處于靜止?fàn)顟B(tài)。在計算機(jī)上,將使用一個PULSOUT指令。PAUSE是低電平,PULSOUT輸出的是高電平。
PULSOUT指令:PULSOUT Pin,Time。Time是用來計算脈沖寬度的時間單位數(shù),時間單位是2/μs,則零點脈沖寬度為Time=0.0015s/0.000002s=750。
要控制脈沖之間的間隔則需要使用PAUSE指令。
PAUSE指令:PAUSE T。T是PAUSE的值,它表示微控制器在執(zhí)行下一條指令之前要等待多久。T的單位是1ms。如要等待0.5秒,則給T賦值為500:PAUSE 500。
要持續(xù)產(chǎn)生脈沖信號,則還需要用到DO…LOOP循環(huán)語句當(dāng)中。
DO…LOOP語句:
DO
PULSOUT 1,750
PAUSE 500
LOOP
如此則可以循環(huán)運(yùn)行指令。
還有一種FOR…NEXT的語句適用于有限次數(shù)的循環(huán):
C VAR Word
FOR C=1 TO 200
C=C+1
PULSOUT 1,850
PULSOUT 2,650
PAUSE 20
NEXT
根據(jù)計算,循環(huán)一次的時間大概為23ms,循環(huán)200次,則為4.6秒。
1.4 勻速運(yùn)動和勻變速運(yùn)動的原理以及執(zhí)行方法
勻速運(yùn)動:當(dāng)Time參數(shù)的值大于750時,會使伺服電機(jī)逆時針旋轉(zhuǎn),而當(dāng)Time的值為850時,則會全速逆時針旋轉(zhuǎn)。順時針反之亦然。當(dāng)要勻速運(yùn)動時,可以使用PULSOUT指令使兩個伺服電機(jī)同時旋轉(zhuǎn)。由于兩個電機(jī)對應(yīng)方向相反,則一個電機(jī)順時針輸出,一個電機(jī)逆時針輸出可以完成勻速運(yùn)動。表1。
DO
PULSOUT 1,850
PULSOUT 2,650
PAUSE 20
LOOP
如果測量出不同脈沖寬度下行走的距離,可以計算出小車的行駛速度。
勻變速運(yùn)動:當(dāng)Time輸出的參數(shù)逐漸變化時,速度也會由此變化,則依據(jù)此可以進(jìn)行勻變速運(yùn)動代碼的編寫:
C VAR Word
For C=1 To 100
Pulse out 1,750+1
Pulse out 2,750-1
PAUSE 20
NEXT
在100次循環(huán)后,速度逐漸增加到最大值,完成了一次勻變速運(yùn)動。根據(jù)加減的數(shù)值大小算出加速度的大小。
2 被動避障
被動避障是機(jī)器小車進(jìn)行的被動行為。當(dāng)機(jī)器小車被障礙阻礙從而被動接受到障礙的信號時,做出轉(zhuǎn)動和避讓。
2.1 被動避障的原理
可以通過一個感受障礙的裝置,將障礙信號轉(zhuǎn)化為電信號。本次使用了一個類似胡須的裝置來完成這個任務(wù)。
胡須是類似一個觸角的金屬絲,彎曲形成一個環(huán)形,在前面感測障礙,胡須如同一個開關(guān),控制著機(jī)器小車。胡須開關(guān)的狀態(tài)值1或0儲存在IN7的變量中。當(dāng)沒有被按下時存儲值為1,胡須被按下時存儲值為0。機(jī)器小車在行走中,一旦胡須被按下,就代表有障礙物,根據(jù)胡須的不同情況使機(jī)器小車進(jìn)行不同的動作,從而完成被動避障。
2.2 被動避障使用的代碼以及程序的設(shè)計
為了使機(jī)器小車進(jìn)行判斷,需要使用IF…THEN語句:
IF(cundition)THEN…{ELSEIF(CONDITION)}…{ELSE}…ENDIF
可以提前編制一些動作的代碼,在程序中使用GOSUB來進(jìn)行子函數(shù),這樣在寫程序中就簡潔許多。(IN5為左胡須的存儲器,IN7為右胡須的存儲器)
3 主動避障
主動避障是機(jī)器小車進(jìn)行的主動行為。當(dāng)機(jī)器小車在還未接觸到障礙時主動接收到障礙的信號時,做出轉(zhuǎn)動和避讓。
3.1 主動避障的原理
可以通過一個紅外感應(yīng)裝置,將障礙信號轉(zhuǎn)化為電信號。我使用了紅外線探測器完成這項任務(wù)。機(jī)器小車上使用了紅外線二極管LED作為發(fā)射源,如果有障礙物,則會對紅外線進(jìn)行阻礙和反射,如此則機(jī)器小車上的紅外線探測器便可以測得反射回來的紅外線。為了排除普通光源的干擾,紅外線探測器內(nèi)部的光濾波器只允許980nm波長的紅外線通過,并且紅外線探測器的電子濾波器只允許38500Hz的電信號通過,即只尋找每秒閃爍38500次的紅外線。
3.2 主動避障使用的代碼以及程序的設(shè)計
為了讓紅外線二極管LED發(fā)出所需的和聲信號,需使用FREQOUT指令。如:
FREQOUT 8,1,38500
這句代碼的指令就是連接到8號引腳的紅外線二極管LED電路發(fā)送1ms頻率為38500Hz的和聲信號。
當(dāng)紅外線探測器接收到紅外信號時會產(chǎn)生存儲值,沒發(fā)現(xiàn)物體顯示1,發(fā)現(xiàn)物體顯示0。IRDL和IRDR是左右兩個紅外線探測器的存儲值。使用下面代碼即可將存儲值儲存到存儲器當(dāng)中。
IRD VARL Bit
IRD=IN9
則主動避障的程序代碼為
(定義變量)
IRDL VAR Bit
IRDR VAR Bit
C VAR Byte
(主程序)
DO
FREQOUT8,8,1,38500
IRDL=IN9
FREQOUT8,2,1,38500
IRDL=IN0
IF(IN9=0)AND(IN0=0) THEN 表示前方有障礙
GOSUB BACK
GOSUB LEFT
GOSUB LEFT
ELSEIF(IN9=0) THEN 表示左邊有障礙
GOSUB BACK
GOSUB RIGHT
ELSEIF(IN0=0) THEN 表示右邊有障礙
GOSUB BACK
GOSUB LEFT
ELSE GOSUB GO 無障礙則持續(xù)前進(jìn)
ENDIF
LOOP
(子函數(shù))
GO: 表示前進(jìn)的子函數(shù)
PULSOUT 1,850
PULSOUT 2,650
PAUSE 20
RETURN
LEFT: 表示左轉(zhuǎn)的子函數(shù)
FOR C=0 TO 20
PULSOUT 1,650
PULSOUT 2,650
PAUSE 20
NEXT
RETURN
RIGHT:表示右轉(zhuǎn)的子函數(shù)
FOR C=0 TO 20
PULSOUT 1,850
PULSOUT 2,850
PAUSE 20
NEXT
RETURN
BACK: 表示后退的子函數(shù)
FOR C=0 TO 40
PULSOUT 1,650
PULSOUT 2,850
PAUSE 20
NEXT
RETURN
3.3 主動避障和被動避障的區(qū)別與優(yōu)缺點
主動避障沒有直接接觸到障礙,是提前預(yù)知障礙進(jìn)行避讓;被動避障是直接接觸到障礙,從而進(jìn)行避讓。兩種避障方式的原理不同,但它們的目的相同??筛鶕?jù)不同的需要和要求進(jìn)行兩種避障方式之間的選擇。主動避障避免的直接的撞擊導(dǎo)致的經(jīng)濟(jì)損失,但是缺點是通過無線傳感器接收到的干擾因素較多,成本高。
4 移動機(jī)器小車的距離探測和追蹤
不同頻率的和聲信號探測的距離遠(yuǎn)近也不同,可以發(fā)射多種頻率的和聲信號,根據(jù)返回的紅外線頻率探測物體的位置,并使用負(fù)反饋控制系統(tǒng)進(jìn)行追蹤。
4.1 用頻率掃描進(jìn)行編程做距離探測
頻率特性使得紅外線傳感器在不同的頻率下有不同的靈敏度,導(dǎo)致紅外線探測的距離不同。如圖1,物體反射了39500Hz、38250Hz和37500Hz的紅外線,根據(jù)接收情況,可以得知物體在區(qū)域2。劃分區(qū)域越多則精度越高,定位也更加準(zhǔn)確,但會增大計算量,帶來不必要的麻煩。由于本次研究目的在于追蹤,不需要過高的精度,所以以1000hz為最小分度值,劃分為6個區(qū)域。
當(dāng)信號反饋時,有一種頻率的信號反饋則儲存的數(shù)字是0,無信號反饋則為1。如在圖1中物體在區(qū)域2時,接收到了3種信號的反饋,而另外兩種信號的反饋則接受不到,即為3個0,2個1,求和的出數(shù)字2,而數(shù)字2對應(yīng)的便是區(qū)域2。
為了對紅外線頻率進(jìn)行掃描,要用FREQOUT指令發(fā)送6種不同頻率的紅外線信號,使用LOOKUP命令可以簡便的寫出。LOOKUP命令的用法定義如下:
LOOKUP Index,[Value0,Value1,…ValueN],Variable
則代碼可為
IRF VAR Nib
IRD VAR Bit
FOR IRF=1 TO 4
LOOKUP IRF,[37500,38250,39500,40500,41500],IRF
FREQOUT8,1,IRF
IRD=IN9
NEXT
4.2 移動機(jī)器小車的追蹤控制
這個任務(wù)是要讓機(jī)器小車跟隨一個移動的物體。根據(jù)閉環(huán)控制系統(tǒng)的控制,在落后較遠(yuǎn)時,機(jī)器小車能進(jìn)行加速;當(dāng)距離太近的時候,它也能察覺并減速。如果距離合適,那么它會等待直到測量距離變遠(yuǎn)或者變進(jìn)。
如圖2,我們需要機(jī)器小車保持2個區(qū)域的距離,相差4區(qū)域的距離接下來對機(jī)器小車進(jìn)行編程。
由此得出右邊伺服電機(jī)的輸出方程為:
Right servo output=(Right distance set point-Measured right distance)*Kp+Center pulse width
pulseLeft=(SetPoint-distanceLeft)*Kpl+CenterPulse
pulseRight=(SetPoint-distanceRight)*Kpl+CenterPulse
將右邊距離設(shè)置為2,測量距離由變量distanceRight存儲,Kp為35(比例常數(shù)是根據(jù)伺服電機(jī)特性得出來的常數(shù)),脈沖寬度為750。
pulseLeft=(2-distanceRight)*35+750
5 結(jié)論
在移動機(jī)器小車的制作與探究中,我學(xué)到了被動避障和主動避障的原理與設(shè)計,體會研究追蹤移動機(jī)器小車的原理,學(xué)會了使用BASIC stamp 軟件,了解了紅外線二極管LED和紅外線探測器。我相信在未來,移動機(jī)器小車的使用會更加的廣泛,涉及到更多的領(lǐng)域,也將會有更多的功能。我也要緊跟時代腳步,在機(jī)器小車的領(lǐng)域中繼續(xù)探索。
參考文獻(xiàn)
[1]秦志強(qiáng),侯肖霞,王文斌.基礎(chǔ)機(jī)器小車制作與編程[M].第二版.北京:電子工業(yè)出版社.