2013-04-21 120 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中编程,这应该是可行的。