我正在通过机器人学会将论文作为考试前的修订版进行修改,我发现一个问题看起来很混乱。我的部门没有提供过去论文的答案,所以我无法检查我是否正确。
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 :(得分:2)
随着比例增益,机器人的前进速度将与其距机器人的距离成比例 - 30厘米。当我们达到稳定状态时,机器人将匹配野兔的前进速度,在某个距离,使得(d - 30)* k ==野兔的速度。即在某个恒定距离处> 30厘米。
至于如何修改程序,您可能希望将机器人的速度设置为不仅与错误成比例,还要考虑错误的变化率。
推荐阅读:
或者你可能会破坏它以记住距离停止变化时的速度,并将其用作新的基本速度,使用规则的比例增益来保持距离不变,但使用PD控制将更加强大:-)。
答案 1 :(得分:0)
使用标准控制规则,机器人 在稳定的状态下总是会离野兔太远 - 因为 如果距离30厘米,它会将速度设置为零,野兔就会 走得更远,所以最后它会稍微安静一下 超过30厘米。
解决方案是引入速度变量;在主循环中,开启 每次迭代都将机器人速度设置为变量值。然后看看 当前距离野兔和30厘米之间的差异,和 调整与此成比例的速度 区别。这将最终带来机器人的稳定状态 在30厘米的固定距离内将其速度与野兔相匹配。
public class Question4ii{
public static main(){
float d = 30;
float speed = 0;
float k = 1; //If it's equal to 1, why do we need it at all?
while(true){
change = k * (GetSonarDepth() - d);
speed += change
if(speed>100) speed=100;
if(speed<-100) speed=-100;
setVelocity(speed)
}