In the fetch-block plan, the agent goes to the dispenser, fetch a block and goes back to a goal position previously chosen (privately). The movement plan is dummy for now, and the agent tries to avoid obstacles in a "silly" way. For making everything easier, once a block has been fetched, the agent keeps it on its back during the movement. In this way we can avoid lots of different scenarios where the agent cannot pass because of the block attached to it. The only problem now is how this is achieved. Practically, before the agent can move toward a chosen direction, it has to put its block on its back (if already is on its back, nothing more has to be done before moving). The issue is that the agent always tries to do so, even when this is not possible. Example: Agent A1 wants to go east, but it has its block attached south. It has to complete a rotation clockwise before moving. BUT, unfortunately in the position where the block should go after rotation is occupied, and the position on the east side of the block is also occupied. At this point the rotation will fail, and also the movement will fail.
To solve this issue the agent should understand it is stuck, and complete an additional movement before completing the rotation.
In the fetch-block plan, the agent goes to the dispenser, fetch a block and goes back to a goal position previously chosen (privately). The movement plan is dummy for now, and the agent tries to avoid obstacles in a "silly" way. For making everything easier, once a block has been fetched, the agent keeps it on its back during the movement. In this way we can avoid lots of different scenarios where the agent cannot pass because of the block attached to it. The only problem now is how this is achieved. Practically, before the agent can move toward a chosen direction, it has to put its block on its back (if already is on its back, nothing more has to be done before moving). The issue is that the agent always tries to do so, even when this is not possible. Example: Agent A1 wants to go east, but it has its block attached south. It has to complete a rotation clockwise before moving. BUT, unfortunately in the position where the block should go after rotation is occupied, and the position on the east side of the block is also occupied. At this point the rotation will fail, and also the movement will fail. To solve this issue the agent should understand it is stuck, and complete an additional movement before completing the rotation.