2013-04-21 94 views
0

我在編程新手,所以我需要我的超聲波傳感器驅動的NXT機器人幫助。 它與電機(A)相連,我希望它以30°爲增量(總共7次測量)將機器人中心線上的房間掃描到90°左側和90°右側,將數據存儲到一個陣列中,並以最大距離點我的機器人在測量方向,以避免阻塞。 這可能嗎?或者有更好的解決方案嗎? 任何意見或建議都是值得歡迎的。樂高NXT-RobotC超聲波傳感器

回答

0

這對避免障礙物有一定的作用,至於實現它,它取決於你在編程機器人的方式。我只知道lejos(java),其中用於獲取角度的函數應該是這樣的:

public static int scanArea(RegulatedMotor motorTop, UltrasonicSensor sonar) { 
    int theAngle = 0; 
    int largestDist = 0; 
    int currentDist; 
    for (int rotateAngle = -90; rotateAngle <= 90; rotateAngle += 30) { 
     motorTop.rotateTo(rotateAngle); 
     currentDist = sonar.getDistance(); 
     if (currentDist > largestDist) { 
      largestDist = currentDist; 
      theAngle = rotateAngle; 
     } 
     Delay.msDelay(25); 
    } 
    motorTop.rotateTo(0); 
    return theAngle; 
} 

如果你的編碼在任何基於代碼的語言的機器人,應該是相當容易轉換(假設你有功能,如rotateTo,否則你將不得不使用相對運動)。否則,我不知道在你最初使用的圖形化編程語言中這會是多麼容易。

+0

謝謝安德烈亞斯以光速回答:) – Strma 2013-04-21 12:59:57

+0

我使用RobotC進行編程,沒有「rotateTo」函數,但MotorEncoderTarget看起來很接近......在你的例子中,「motorTop」是所涉及的電機的「名稱」 ? – Strma 2013-04-21 13:16:45

+0

motorTop只是一個對象的名稱,該對象是包含用於控制電機的方法的RegulatedMotor類的實例。 – dukky 2013-04-21 14:07:37

0

我建議超聲波傳感器附接至180°伺服是垂直的。您可以通過將該程度分配給伺服來進行特定程度的測量。使用這個:

int largestDistance = 0; 
int Angle =0;  

for (int servovalue = 0; servovalue <= 255; rotateAngle += 30){ 
     Servo[servo1] = servovalue; 
     if (SensorValue[Sonar] > largestDist) { 
      largestDist = SensorValue[Sonar]; 
      Angle = servovalue; 
     } 
    } 
    return Angle; 
} 

它假設servo1是你的垂直伺服,但是如果你在RobotC中編程,這應該是可行的。

相關問題