乐高NXT-RobotC超声波传感器
问题描述:
我在编程新手,所以我需要我的超声波传感器驱动的NXT机器人帮助。 它与电机(A)相连,我希望它以30°为增量(总共7次测量)将机器人中心线上的房间扫描到90°左侧和90°右侧,将数据存储到一个阵列中,并以最大距离点我的机器人在测量方向,以避免阻塞。 这可能吗?或者有更好的解决方案吗? 任何意见或建议都是值得欢迎的。乐高NXT-RobotC超声波传感器
答
这对避免障碍物有一定的作用,至于实现它,它取决于你在编程机器人的方式。我只知道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,否则你将不得不使用相对运动)。否则,我不知道在你最初使用的图形化编程语言中这会是多么容易。
答
我建议超声波传感器附接至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中编程,这应该是可行的。
谢谢安德烈亚斯以光速回答:) – Strma 2013-04-21 12:59:57
我使用RobotC进行编程,没有“rotateTo”函数,但MotorEncoderTarget看起来很接近......在你的例子中,“motorTop”是所涉及的电机的“名称” ? – Strma 2013-04-21 13:16:45
motorTop只是一个对象的名称,该对象是包含用于控制电机的方法的RegulatedMotor类的实例。 – dukky 2013-04-21 14:07:37