我是编程的新手,所以我需要帮助我的超声波传感器驱动的NXT机器人。 它连接到电机(A),我希望它从机器人的中心线扫描房间到左边90°和90°右边以30°增量(总共七次测量),将数据存储到阵列并基于最大距离将我的机器人指向测量的方向,以避免产生障碍。 这有可能吗?还是有更好的解决方案? 任何建议或建议都非常受欢迎。
答案 0 :(得分:0)
这在某种程度上可以避免障碍,就像实现它一样,它取决于你对机器人的编程。我只知道lejos(java),其中获取角度的函数将是这样的: / p>
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等功能,否则您将不得不使用相对运动)。否则,我不知道你最初使用的图形编程语言会有多容易。
答案 1 :(得分: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中编程,这应该可行。