2017-03-02 21 views
0

這是我的代碼,用於將活動bot從其起點移動到終點。它可以檢測到兩側的障礙物並轉而離開它們。活動bot - 視差 - 用傳感器移動機器人 - C編程

我將一系列移動保存在一個數組中,這樣我就可以在不使用任何傳感器的情況下返回到起點。 **(這是「//返回」的評論後的代碼)

#include "simpletools.h" 
#include "abdrive.h" 
#include "ping.h" 

int back[200]; 
int i = 0; 

int main() { 
    int distance; 

    int irLeft = 0, irRight = 0; 

    low(26); 
    low(27); 

    while (1) { 
    if (ping_cm(8) < 5) { 
     break; 
    } 

    freqout(11, 1, 38000); 
    irLeft = input(10); 

    freqout(1, 1, 38000);      
    irRight = input(2); 

    if (irLeft == irRight == 1) { 
     drive_goto(10,10); 
     back[i] = 10; 
     ++i; 
     back[i]= 10; 
     ++i; 
    } 

    if (irLeft == 0) { 
     drive_goto(20,10); 
     back[i] = 20; 
     ++i; 
     back[i] = 10; 
     ++i; 
    } 

    if (irRight == 0) { 
     drive_goto(10,20); 
     back[i]= 10; 
     ++i; 
     back[i]= 20; 
     ++i; 
    } 
    }  
    drive_goto(51, 0); // Make a 180 degree turn 
    drive_goto(51, 0); 

//return 
    while (1) { 
    if (i == 0) { 
     break; 
    } 
    drive_goto(back[i], back[--i]); 
    --i; 
    } 

    return 0; 
}   

機器人成功地移動到目標,但它不會移回起點。問題是什麼?

+0

'if(irLeft == irRight == 1)'沒有意義。應該是'if(irLeft == 1 && irRight == 1)'。 – user31264

+0

我不知道問題出在哪裏,但是對於已知的路線,建議先看看第一個*回到起點。然後*下一步*移動。即:找到一種方法來自己調試代碼。由於格式不佳,我甚至無法關注代碼。順序也是這樣,它將不可避免地改進你的邏輯方法。 (由John Bollinger改進)。 –

回答

1

您似乎有一個錯誤的錯誤。隨着您的前進,您可以在變量i中跟蹤下一個可用的在您的移動歷史數組中的位置。當您開始返程時,您將使用當前值i,就好像它是最後記錄的值的索引。在回來的路上,您需要在每次讀取之前遞減i,並在每次寫入後在之後鏡像正向路徑上的遞增行爲

+0

非常感謝你:)這是爲什麼我的代碼不起作用。哈哈 –