作为考试前的复习,我正在阅读 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)
}
}
}
然后第二部分是事情变得有趣的地方:
这是我的理解:
- 机器人和野兔放在同一个位置 0
- 机器人开始倒车,而野兔匀速前进(误差为负)
- 机器人发射声纳
- 声纳读数告诉距离为 30(误差为 0)
- 机器人停止(错误为 0)
- 野兔在此调整期间移动恒定距离
- 机器人发射声纳(错误为正)
- 机器人将速度提高到 setVelocity(error)
- 野兔在此调整期间移动恒定距离
- 机器人根据“旧”声纳读数改变速度,因为在速度改变期间,野兔会走得更远
- 因此,机器人总是会离期望的距离至少有点远
我还得出一个结论,如果野兔的速度高于机器人的速度,距离会不断增加。不会有稳定状态 - 稳定是指保持距离。