如何将机器人移动一定距离并仍然管理传感器?

时间:2014-12-10 22:56:02

标签: c++ arduino robotics

我有一个带编码器反馈的机器人,我想使用将机器人移动一定距离并将其转动一定角度的功能,例如:

void loop(){

  if (Obstacle==false){  // if no obstacles

      forward(1000);  // move forward 1000 mm
      backward(1000); // move backward 1000 mm

      //...  
  }
}

转发功能:

void forward(int distance){  // distance in mm

   int desiredRotationNumber= round(distance/circumference) ; 

   int desiredTicks = encoderResolution * desiredRotationNumber;

   if (counter < desiredTicks) // variable counter counts the pulses from the encoder
   {  
       analogWrite(motor,255);
   } 
   else 
   {
       analogWrite (motor,0); 
   }

}

问题在于,如果我使用条件&#34;如果&#34;我的前向函数只执行一次,然后程序跳转到下一个函数,但如果我使用&#34; while循环&#34;我的移动功能将正确执行,但我无法管理传感器或任何东西。

1 个答案:

答案 0 :(得分:2)

你可能想要的是以增量方式削减你的动作,并在每个增量之间检查传感器:

while (distance > 0 && !Obstacle){
    forward(step);
    distance-=step;
    check_sensors();
}

使用多线程,您可以使这些操作(移动和感应)异步工作,并使用某种事件发布来警告每个线程的更改。在这里,我们通过对任务进行交互来模拟该功能(您还可以查看协同程序以获得类似但更有效的想法)。