2013-09-27 10 views
-2

我不明白爲什麼這段代碼無法運行。我正在爲我的Zero Robotics團隊編寫移動代碼,而我目前的系統是將速度目標設置爲距目標位置每個初始距離的距離係數。我不是在尋找對代碼的批評,但我很想理解爲什麼絕對沒有發生什麼事當我運行這段代碼時 - 至少我希望發生某些事情。球只坐在那裏,什麼都不做。 零機器人運動代碼不起作用

float tarPos[3]; 
float currDist[3]; 
float currPos[3]; 
float initPos[3]; 
float initDist[3]; 
float tarVelo[3]; 
float myZRState[12]; 
float powfResult[3]; 

void init() 
{ 
    api.getMyZRState(myZRState); 

    tarPos[0]=0.5f; 
    tarPos[1]=0.0f; 
    tarPos[2]=0.5f; 
} 

void moveTo(float target[3]) 
{ 
    api.getMyZRState(myZRState); 

    currPos[0]=myZRState[0]; 
    currPos[1]=myZRState[1]; 
    currPos[2]=myZRState[2]; 

    currDist[0]=tarPos[0]-currPos[0]; 
    currDist[1]=tarPos[1]-currPos[1]; 
    currDist[2]=tarPos[2]-currPos[2]; 

    //tarVelo[0]=(100)*(currDist[0]); 
    //tarVelo[1]=(100)*(currDist[1]); 
    //tarVelo[2]=(100)*(currDist[2]); 

    tarVelo[0]=powfResult[0]*currDist[0]; 
    tarVelo[1]=powfResult[1]*currDist[1]; 
    tarVelo[2]=powfResult[2]*currDist[2]; 

    api.setVelocityTarget(tarVelo); 

    //DEBUG (("powf result 1, powf result 2, powf result 3, init dist 1, init dist 2, init dist 3 \t %f %f %f %f %f %f" , powfResult[0] , powfResult[1] , powfResult[2] , initDist[0] , initDist[1] , initDist[2])); 
} 

void loop() 
{ 
    if (api.getTime()==0) 
    { 
     api.getMyZRState(myZRState); 

     initPos[0]=myZRState[0]; 
     initPos[1]=myZRState[1]; 
     initPos[2]=myZRState[2]; 

     initDist[0]=tarPos[0]-initPos[0]; 
     initDist[1]=tarPos[1]-initPos[1]; 
     initDist[2]=tarPos[2]-initPos[2]; 

     if (initDist[0]==0) 
     powfResult[0]=0; 
     else 
      powfResult[0]=(0.1508*(powf(initDist[0] , -0.56))); 
     if (initDist[1]==0) 
      powfResult[1]=0; 
     else 
      powfResult[1]=(0.1508*(powf(initDist[1] , -0.56))); 
     if (initDist[2]==0) 
      powfResult[2]=0; 
     else 
      powfResult[2]=(0.1508*(powf(initDist[2] , -0.56))); 
    } 
    moveTo(tarPos); 
} 

編輯:發現的解決方案!我把這個交給了我的學校的編程專家(他的名字是布萊斯,你可能想在將來留意他,完全是天才),還有我的兼職老師,他們發現需要有一個[代碼] initDist [/ code]內的[code] powfResult [/ code]初始化的絕對值。謝謝你的幫助!

+1

什麼也沒有發生!那麼這段代碼沒有'main()'。我的意思是你應該顯示你期望的結果,並顯示完整的相關代碼。 – deepmax

+1

我不認爲你把機器人*開啓了*? – WhozCraig

+0

可能是你最好在零機器人網站上從某人那裏接受哈囉?我剛剛下載了教程,它也沒有'main()'。瞭解外部掛鉤會很有幫助,並且可能需要這些神祕的「IDE」。你有什麼是源的一部分,而不是一個程序。 – 2013-09-27 17:06:33

回答

0

我的第一個程序可能是這個樣子:

void init() 
{ 
    DEBUG(("init entered\n")); 
    DEBUG(("init leaving\n")); 
} 
void moveTo(float target[3]) 
{ 
    DEBUG (("moveTo entered")); 
    DEBUG (("moveTo leaving")); 
} 
void loop() 
{ 
    DEBUG (("loop for David Bluhm entered\n")); 
    DEBUG (("loop leaving\n")); 
} 

如果我能找到它運行後的輸出,我可能會得到一些API的一點信心。 (我肯定會被輸出調試狀態下前幾次我得到的東西太動)

PS - 你爲什麼打電話:代替​​

setPositionTarget()? (這顯然是最基本的位置控制)

+1

只是所以你們知道,這是一個非常具體的風格 - 「主」方法被「循環」方法取代,每秒調用一次。 –

+0

@DavidBluhm我閱讀了教程。當你說「什麼都沒有發生」時,我會立即想到可以導致「發生」的最簡單的「事情」是調試/文本輸出。所以......你是否成功地寫了一個可以輸出「Hello World」的機器人?如果不是的話,你如何期待更復雜的工作? – 2013-09-27 17:48:28

+0

哦!我忘了提及極其重要的事情。當我用moveTo方法中的常量替換'powfResult'時,我能夠移動機器人。這就是我得到用於派生'powfResult'的非常複雜的具體方程的地方:我收集了數據點併爲它們推導了一個函數。 –