【问题标题】:Lego NXT-RobotC ultrasonic sensorLego NXT-RobotC 超声波传感器
【发布时间】:2013-04-21 12:39:57
【问题描述】:

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

【问题讨论】:

    标签: robot nxt lego


    【解决方案1】:

    这在一定程度上可以避免障碍物,至于实现它,这取决于您对机器人进行编程。我只知道 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 之类的函数,否则您将不得不使用相对运动)。否则我不知道用你最初使用的图形编程语言来做这件事有多容易。

    【讨论】:

    • 感谢安德烈亚斯以光速回答:)
    • 我正在使用 RobotC 进行编程,没有“rotateTo”功能,但 MotorEncoderTarget 看起来很接近……在你的示例中,“motorTop”是所涉及电机的“名称”?
    • motorTop 只是一个对象的名称,它是 RegulatedMotor 类的实例,其中包含用于控制电机的方法。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多