首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乐高NXT-RobotC超声波传感器

乐高NXT-RobotC超声波传感器
EN

Stack Overflow用户
提问于 2013-04-21 20:39:57
回答 2查看 1.1K关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2013-04-21 20:56:10

这在一定程度上可以避免障碍物,至于实现它,这取决于你用什么对机器人进行编程。我只知道lejos(java),其中获取角度的函数应该是这样的:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-05-16 23:28:18

我建议将超声波传感器连接到一个垂直的180°伺服。您可以通过将特定度数分配给伺服来进行特定度数的测量。使用以下命令:

代码语言:javascript
复制
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中编程,这应该可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16131194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档