2013-05-20 32 views
3

我要打的球向前移動幾釐米的給量,但到目前爲止,我還沒有能夠得到任何正常工作 這是代碼,我現在:SPHERO:如何讓它動給定長度

EditText distanceText = (EditText) findViewById(R.id.distanceText); 
int inputMSec = Integer.parseInt(distanceText.getText().toString()); 
int time = (inputMSec - inputMSec/2); 

    // The ball is given the RollCommand at half speed. 
    RollCommand.sendCommand(mRobot, heading,0.5f); 

    // A handler is created to delay the Stop command. 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable(){ 

     @Override 
     public void run() { 
      // Makes the ball stop 
      RollCommand.sendStop(mRobot); 
     } 
     // The variable 'time' defines how long the ball rolls until it is told to stop. 
    }, time); 

是否有任何其他命令我可以發送到球而不是RollCommand? 或者任何人都可以找出如何處理來自EditText的輸入,以便距離正確嗎?

回答

6

沒有API命令可以直接提供驅動給定距離的能力。我現在唯一的方法是使用定位器的迭代策略,該定位器提供關於球的位置信息。

下面是該策略的概述。讓我知道你是否需要更多細節。

  1. 打開數據流和請求定位器位置數據。你現在應該有一些回覆給你Sphero的位置〜每秒20x。位置是以釐米爲單位的(x,y)座標。
  2. 記錄球的起始位置(x0,y0)。
  3. 在每個時間點,使用畢達哥拉斯定理/距離公式計算球到目前爲止所走過的距離。
  4. 用這個算出球剩下的距離。稱這個距離D.
  5. 給那裏的速度從D.計算

最大的問題是一個滾動的命令:你如何決定基於d命令什麼樣的速度?我在某種策略上取得了一些成功:(無疑你可以更好地調整它)。

  1. 如果剩餘距離D> 100cm,命令全速。
  2. 在D = 10cm和D = 100cm之間,指令功率從30%到100%(線性)。
  3. 如果D < 10cm,命令零速度使Sphero停止。

這工作得很好。它會開車,放慢速度,並將最後幾英寸的距離停下來。此算法的問題包括:

  1. 您必須對其進行調整以防止過沖/下衝。
  2. 當你想命令球只移動很短的距離時,它不能很好地工作,所以你可能需要調整它來覆蓋這些情況。

祝你好運!

相關問題