私は現在、ロボットの開発に取り組んでいます。EV3レゴブロックを使用しています。私の目標は、最短経路を使用してメソッド travelTo(x,y) を使用してポイント A から B に移動することです。このメソッドは、ロボットの動きを制御するために使用されるすべてのメソッド (turnTo(double angle)、travel(double distance)、travelTo(double x、double y)、changeSpeed(int newSpeed)) を含むスレッド名 Drive にあります。 ..)。ObstacleAvoidance と呼ばれる別のスレッドがあります。これは、前に障害物がある場合にスレッド ドライブを停止し、障害物を追跡する P コントローラー テクニックを使用して障害物を回避し始めることになっています。
私の問題は、私の P コントローラーがスレッド ドライブ内のメソッドを使用していることです。したがって、私ができない障害を見つけたとき:
if (obstacle){
Drive.wait();
while(isAvoiding){
pControler();
}
}
Drive.Notify();
private void pController(){
//use methods inside the DriveThread
}
どうすればこの問題を回避できますか? つまり、ロボットの現在の動作を停止し、ブロックを回避してから、自分がしていたことを続行するにはどうすればよいでしょうか?