我目前正在研究机器人。我用EV3乐高积木。我的目标是使用方法travelTo(x,y)使用最短路径从A点行进到B.此方法位于线程名称Drive中,其中包含用于控制机器人运动的所有方法(turnTo(双角度),travel(双倍距离),travelTo(double x,double y),changeSpeed(int newSpeed)。 ..)。 我有另一个名为ObstacleAvoidance的线程,如果前方有障碍物并且使用P控制器技术跟踪障碍物开始避开障碍物,则应该停止线程驱动器。
我的问题是我的P控制器使用Thread Drive中的方法。因此,当我看到障碍时,我无法做到:
if (obstacle){
Drive.wait();
while(isAvoiding){
pControler();
}
}
Drive.Notify();
private void pController(){
//use methods inside the DriveThread
}
我该如何解决这个问题?换句话说,我怎样才能停止机器人的当前动作,避开阻挡然后继续我正在做的事情?
答案 0 :(得分:0)
如果路径中有障碍物,您可以使用Thread.interrupt()中断驱动器线程。然后你可以计算出如何处理障碍物然后再次开车。
https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#interrupt--
您必须抓住云端硬盘线程中的https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html,然后决定该怎么做。由于我不知道你的机器人是如何工作的,我建议只是停止线程。在计算出如何处理障碍物后,您可以启动另一个Drive威胁。