JavaScript EditorFree JavaScript Editor     Ajax Editor 

Main Page
  Previous Section Next Section

Case Study

Instead of continuing to study obstacle avoidance, this time we attempt wall following. These problems are very similar in nature, and most of our existing work still applies to wall following. Notably, the targeted environments remain the same, as do the rest of the requirements and interface specification.

Only the behavioral outcome differs. This requires a new case study. Essentially, the animat must first find a wall, and then follow outward and inward corners:

  1. If no wall is present and the animat is not already following one, a random move forward should be made.

  2. If there is a wall in front, the animat should turn away from it, regardless of the presence of a wall on the side.

  3. If there is a wall to the side and not in front, it should be followed by moving forward.

  4. If no wall is present and one was being followed, the animat should turn toward the side where the wall last was.

Conceptually, the main difference with obstacle avoidance is the need for context-sensitive action. Indeed, the lack of obstacles means two different things, depending on whether a wall was previously being followed (cases 1 and 4). The mapping from senses to actions is thereby ambiguous, so a reactive system would have to pick the same rule in both these cases. If the animat deterministically selects the "turn" action, it will spin around in uncluttered areas; whereas always selecting the "move forward" action will make the animat lose contact with walls that turn away.

Luckily, nondeterminism is not a problem for RBSs, because we can add an internal symbol to distinguish the context. This "already following wall" symbol allows the system to be aware of the necessary behavior—which makes wall following possible (see Figure 12.1).

Figure 12.1. The four different cases that arise in wall following, and what actions are required.


      Previous Section Next Section

    JavaScript EditorAjax Editor     JavaScript Editor