A robotic arm used in construction usually has a fixed position and precise movements. Programming the arm is typically a matter of procedure where a fixed set of inputs elicits a fixed set of responses.
Mobile robots tend to live in a less structured and more unforgiving world. It's difficult to predict what combination of variables may be encountered as a robot moves through its environment. Programmers have taken a behavior-based approach to address this problem. Procedural systems like OPRS and rule-based systems are other approaches, but they all tend to differ from the more conventional procedure-oriented programming approaches used by C and Java programmers.
C and Java programmers concentrate on program flow. Procedures explicitly call other procedures. These other approaches can have procedures that operate in a sequential fashion. But they're normally invoked as part of a higher-level process that accounts for the current system state, new inputs from the environment, and a knowledge base.
For instance, in a simple rule-based system, a rule has a set of preconditions. The rule invocation process checks the preconditions against the current system state and invokes rules that meet their preconditions.
Placing system control in the hands of this type of higher-level process has advantages and disadvantages. Unfortunately, new programming tools and techniques are needed, increasing the learning curve as well as requiring new tools. On the plus side, programmers do not have to take care of many of the common functions used by the higher-level process, such as searching a knowledge base and dispatching new rules, behaviors, or whatever the system implements.
Some approaches have tried to use artificial-intelligence languages like Lisp and Prolog, while others try to embed conventional languages such as C and Java. No one solution has dominated, which is why current robotics software platforms are so diverse.
This diversity is easy to understand when you consider the implications of even simple aspects of a dispatch mechanism. For example, it's not unusual to meet the preconditions for more than one rule. What happens when this occurs? In some instances, both rules can be active if they don't use the same resources. In others, a rule has a priority, and the highest-priority rule is used.
These kinds of differences have obvious implications on how a system operates. This is one reason why it can be difficult to move an application from one platform to another. The task is significantly more difficult than moving an application from one operating system to another.
While many behavior-based approaches are found on high-end PCs, this level of hardware isn't required to use the approach. This approach can be taken even on low-end microcontrollers.
The iRobot Roomba runs an 8-bit microcontroller with iRobot's proprietary behavior-based software. Granted, the number of behaviors used in the system is smaller than more complex, multiple robot environments. But it is possible to get quite a bit of flexibility, even with a small number of behaviors.