【发布时间】:2013-04-27 13:58:39
【问题描述】:
我正在检查 Robotics 过去的试卷作为考试前的复习,我发现了一个看起来非常令人困惑的问题。我的部门没有对过去的论文提供答案,所以我无法检查我是否正确。
public class Question4i{
public static main(){
float d = 30;
float k = 1; //If it's equal to 1, why do we need it at all?
while(true){
error= GetSonarDepth() - d;
if(error>100) error=100;
setVelocity(k * error)
}
}
}
然后第二部分是有趣的地方:
这是我的理解:
- Robot 和 Hare 放置在同一位置 0
- 机器人开始倒车,而野兔匀速前进(误差为负)
- 机器人发射声纳
- 声纳读数显示距离为 30(误差为 0)
- 机器人停止(错误为 0)
- 在此调整过程中,野兔的移动距离保持不变
- 机器人发射声纳(错误为正)
- 机器人将速度提高到 setVelocity(error)
- 在此调整过程中,野兔的移动距离保持不变
- 机器人根据“旧”声纳读数改变速度,因为在速度改变期间,野兔会走得更远
- 因此,机器人总是与期望的距离至少有点太远
我还得出一个结论,如果野兔速度高于机器人,距离会不断增加。不会有 STEADY STATE - 稳定是指保持距离。
问题:我认为在最好的情况下,机器人会在 30 到 30+ 距离之间摆动,但是您将如何更改程序以使其以恒定的 30 厘米距离行进?我也觉得 i 部分中 k 为 1 很可疑,可以吗?
【问题讨论】:
标签: robotics robot nxt lego lejos-nxj