NXT - 乌龟和野兔 - 跟随移动物体 - 理论

时间:2013-04-27 13:58:40

标签: robotics robot nxt lego lejos-nxj

我正在通过机器人学会将论文作为考试前的修订版进行修改,我发现一个问题看起来很混乱。我的部门没有提供过去论文的答案,所以我无法检查我是否正确。

partII

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)
    }
  }

}

然后第二部分是事情变得有趣的地方:

partII

这是我的理解:

  1. 机器人和野兔放置在同一位置0
  2. 机器人开始倒车,而野兔以恒定速度前进(错误为负)
  3. 机器人发射声纳
  4. 声纳读数告知距离为30(误差为0)
  5. 机器人停止(错误为0)
  6. 在此调整期间,野兔行进恒定距离
  7. 机器人发射声纳(错误是正面的)
  8. 机器人将其速度提高到setVelocity(错误)
  9. 在此调整期间,野兔行进恒定距离
  10. 机器人根据“旧”声纳读数改变速度,因为在速度变化期间,野兔会进一步行进
  11. 因此,机器人总是至少离所需距离太远
  12. 我还得出结论,如果兔子的速度高于机器人的速度,距离将不断增加。没有稳定的状态 - 稳定指的是保持距离。

    问题:我认为在最好的情况下,机器人会在30到30+距离之间振荡,但是如何更改程序以使其在30厘米的恒定距离内行进?我也觉得可疑的是,k在第i部分中是1,那好吗?

2 个答案:

答案 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)
}