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

标签 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); 
   }

}

问题是,如果我使用条件“if”,我的前向函数将只执行一次,然后程序跳转到下一个函数,但如果我使用“while 循环”,我的移动函数将正确执行,但我赢了'能够管理传感器或任何东西。

最佳答案

您可能想要的是逐步减少您的移动,并检查每个增量之间的传感器:

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

使用多线程,您可以使这些操作(移动和感应)异步工作,并使用某种事件发布来警告每个线程发生变化。在这里,我们通过交织任务来模拟该功能(您也可以研究协程以获得类似但更有效的想法)。

关于c++ - 如何将机器人移动一定距离并仍然管理传感器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412408/

相关文章:

c++ - 包含在头文件中

c++ - 当我们通过引用传递时,为什么在调用函数时要放置变量而不是地址(指针)?

c++ - 为什么 free() 没有释放我的 Arduino Uno 上的 RAM

c++ - 从 eeprom 接收数据时程序崩溃

arduino - 不能在库中使用 attachInterrupt

c++ - 输入点云没有数据

algorithm - 距离和角度机器人控制

c++ - std::unordered_map operator[] 是否对不存在的键进行零初始化?

c++ - 如何在 MacOS 上的 C++ 中设置 double ?

java - Java Android DC音频输出