1

我目前正在研究机器人。我使用 EV3 乐高积木。我的目标是使用方法 travelTo(x,y) 使用最短路径从 A 点行进到 B 点。这个方法在一个线程名 Drive 中,它包含了所有用于控制我的机器人运动的方法(turnTo(double angle), travel(double distance), travelTo(double x, double y), changeSpeed(int newSpeed))。 ..)。我有另一个名为 ObstacleAvoidance 的线程,如果前面有障碍物,它应该停止线程 Drive,并使用 P 控制器技术开始避开障碍物以跟随障碍物。

我的问题是我的 P 控制器使用线程驱动器中的方法。因此,当我看到障碍物时,我无法做到:

if (obstacle){    
  Drive.wait();
  while(isAvoiding){
    pControler();
  }
}
Drive.Notify();


private void pController(){
  //use methods inside the DriveThread
}

我该如何解决这个问题?换句话说,我怎样才能停止我的机器人的当前动作,避免阻塞,然后继续我正在做的事情?

4

1 回答 1

0

如果路径中有障碍物,您可以使用 Thread.interrupt() 中断驱动线程。然后您可以计算如何处理障碍物,然后再次驾驶。

https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#interrupt--

您必须在 Drive 线程中捕获https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html并决定接下来要做什么。因为我不知道你的机器人是如何工作的,所以我建议你停止线程。在计算出如何处理障碍物后,您可以启动另一个 Drive 威胁。

于 2016-11-19T22:31:26.653 回答