代码在循环内不起作用,但在循环外起作用

问题描述

我有一段代码显示了一些奇怪的行为。当代码被排除在 for 循环之外时,它会按预期工作,但是一旦我将它放入 for 循环中,它就会不断重复相同的值。

  const double *north = cp->getValues();
  angle1 = atan2(north[1],north[2]);
  bearing = (angle1 - 1.5708) / M_PI * 180.0;
  std::cout<<"Bearing inside : "<<bearing<<std::endl;
  if (bearing < 0.0)
    bearing = bearing + 360.0;
  t = abs(bearing - turn);

这部分代码应该在每次对象旋转时更新 *north。每当我将此代码保留在循环之外时,就会发生这种情况。但是一旦代码保持在如下所示的 for 循环中,*north 的值将保持不变。

    for(int i=0;i<100;i++)
    {
      double t_modifier = (180.0 - abs(t)) / 180.0;
      double threshold = 2.0;
      double Speedleft = 1.0;
      double Speedright = 1.0;
      int identifier;
      if(int(t)<0){
        Speedleft = -1;
      }
      else if(int(t)>0){
        Speedright = -1;
      }
      leftSpeed = threshold * Speedleft;
      rightSpeed = threshold * Speedright;
      {
        wheels[0]->setVelocity(leftSpeed);
        wheels[1]->setVelocity(rightSpeed);
        wheels[2]->setVelocity(leftSpeed);
        wheels[3]->setVelocity(rightSpeed);
      }
      
      const double *north = cp->getValues();
      angle1 = atan2(north[1],north[2]);
      bearing = (angle1 - 1.5708) / M_PI * 180.0;
      std::cout<<"Bearing inside : "<<bearing<<std::endl;
      if (bearing < 0.0)
        bearing = bearing + 360.0;
      t = abs(bearing - turn);
    }

解决方法

您应该在循环中调用 step 方法:
https://cyberbotics.com/doc/reference/robot#wb_robot_step

step方法的深入解释:
https://cyberbotics.com/doc/guide/controller-programming#the-step-and-wb_robot_step-functions

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...