EV3程式教室 雙顏色感測器循跡

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

對應到Arduino 或任何文字式程式語言就是 while(true) + switch 或是巢狀的 if/else架構,如以下 NXC 範例:

 
#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

 

  

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *