Robot CでSubsumption Architectureを使用する正しい方法
私は最近、Subsumption Architectureについてたくさん読んでいますが、人々が主張しているように見える方法はいくつかあります。 たとえば、一部の人々はグローバルな「フラグ」変数を使用して、タスクが制御を取得します。他のものはendTimeSlice()を使用し、アービターが本当に選択できるようにします。そして、これは正しいと思います。 行追跡ロボットのために取り組んでいるこのRobotCコードの小さなセクションがありますが、現在トラックメソッドは常にfindメソッドを引き継ぐので、正しく実行しているかどうかはわかりません。正しい流れは、findがラインを見つけるためにらせん状のパスを使用してロボットをラインに導くことです。ラインが見つかったら、トラックが引き継ぎます。 task evade(){ if(SensorValue(forwardSonarSensor) > threshold){ //box the obstruction } } task find(){ if(SensorValue(lightSensor) > threshold){ //spiral the robot } } task track(){ if(SensorValue(lightSensor) < threshold){ //go straight }else{ //execute turns to follow the line } } task main(){ while(true){ StartTask(evade,9); StartTask(track,8); StartTask(find,7); wait1Msec(250); } } ここでは、簡潔にするために、実際のコードではなくコメントをいくつか使用しています。私のifステートメントは、ロボットがオフラインになるとtrack()引き継ぐため、条件として十分ではありません。これはトラック内のelseステートメントによるものですか?もしそうならtrack()、プログラムの開始時に飼料から引き継ぐことなくラインを失うときにターンを実行するにはどうすればよいですか?