乐高NXT-RobotC超声波传感器

问题描述 投票:0回答:2

我是编程新手,所以我需要有关超声波传感器驱动的 NXT 机器人的帮助。 它连接到电机(A),我希望它以 30° 的增量从机器人的中心线向左 90° 和右 90° 扫描房间(总共七次测量),将数据存储到数组中并基于最大距离将我的机器人指向进行测量的方向以避免障碍物。 这有可能吗?或者有更好的解决方案吗? 任何意见或建议都非常欢迎。

robotics lego-mindstorms nxt
2个回答
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
投票

我建议将超声波传感器连接到垂直的 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中编程,这应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.