循跡對於機器人來說是非常基本的控制要求,因為機器人在有限的感測器之下,可說是無法在沒有標的物走到指定的位置。因此軌跡線、定位點或是高級一點的GPS或是室內定位裝置等。其中最簡單也是最重要的就是循線前進(line follow)。
在軌跡線無交叉的情況下,機器人只要一個光感測器就能沿著軌跡線的左側或右側前進,但也因為這個前提,機器人是無法經過十字交叉口的。
由下圖可看到,軌跡線是有交叉的,因此我們需要使用第二個光感測器來夾住這條軌跡線。
如此就會有四種狀況:(假設左邊的顏色感測器接在#1輸入端,右邊的顏色感測器接在#1輸入端),我們用 EV3程式來寫就是這樣的架構 (本範例無馬達指定,僅示範架構):
1. 左黑右白:機器人偏右,向左修正 (下圖中,下方V區塊)
2. 左白右黑:機器人偏左,向右修正 (下圖中,上方X區塊)
3. 兩者皆白:軌跡線位於兩個感測器中央,前進!(下圖中,上方V區塊)
4. 兩者皆黑:十字路口,前進 (下圖中,下方X區塊)
#define pwr 40 #define line 35 task main() { SetSensorLight(S1); SetSensorLight(S2); while(true) { if(Sensor(S1)>Light && Sensor(S2)>Light) //1白2白 -> 直走 { OnFwdSync(OUT_AC,pwr,0); }//if else if(Sensor(S1)>Light && Sensor(S2)<Light) //1白2黑 -> 右前方修正 { OnFwd(OUT_A,pwr); OnFwd(OUT_C,10); }//else if else if(Sensor(S1)<Light && Sensor(S2)>Light) //1黑2白 -> 左前方修正 { OnFwd(OUT_A,10); OnFwd(OUT_C,pwr); }//else if else //1黑2黑 -> 直走 { OnFwdSync(OUT_AC,pwr,0); }//else }//while }//main |