SPLAT documentation - chapter 1
SPLAT provides both a language for defining robot plans and control
laws and a runtime capable of executing these plans. The emphasis is
on flexibility and simple construction. SPLAT provides a basic core
of primitives for describing both continuous and discrete actions. It
does not address issues of knowledge representation, planning, etc.
(which are the sorts of research issues one might want to use SPLAT as
a testbed for) but does provide hooks for these sorts of algorithms to
use SPLAT as their back end.
A basic assumption behind SPLAT is that most useful kinds of robot
behavior will be guided by some sort of closed-loop feedback control.
SPLAT fills the gap between a plan specification, which is generally
an open-loop, top-down description of the sub-parts of a robot task,
and physical control of the robot apparatus, which is guided by both
the plan and the dynamic nature of the environment.
This is accomplished by allowing the basic unit of plan construction
to be much more than a set of motor controls. Instead, each plan
primitive (or splat) is a rich structure containing multiple methods
of execution, handlers for exceptional conditions, restrictions on the
context in which the action is appropriate, and so on.
The basic unit of task execution is a single splat. A splat
describes a discrete action which has a clearly-defined "begin" and
"end" points, as opposed to a continuous behavior that has "start" and
"stop" points. A splat might describe how to pick up an object, how
to traverse a doorway, or how to call an elevator. Splats can be
hierarchically composed to build primitive skills into complex plans.
The system was designed so that a programmer could define a library of
primitive skills as splats which could be the building blocks for a
planning system. Using splats as the intermediate language between
automatic planning and plan execution allows the planning system to
focus on describing the solution and lets the splat system deal with
robustness and exception handling.
An action which is continuous and has no predetermined termination
conditions is called a behavior. For example, following a
wall is best described as a behavior, but going from one end of a
hallway to another is best described as a splat.
The implementation of SPLAT is a library of code and syntax forms
which depends heavily on the extended Scheme language implemented by
RScheme. RScheme provides a capable object
system, support for multiple threads of execution, and a powerful
syntactic extension mechanism, and SPLAT is heavily intertwined with
all of these facilities.
1.1 Reasons for using SPLAT
Since SPLAT is a tool, and not an end in itself, it has the burden of
providing measurable benefit over existing solutions if it is to be
used and useful. We wrote SPLAT to be a functional replacement for
Firby's RAPS system, which we found to be excessively complex and
burdened by the results of several generations of incremental fixes
and extensions. As a replacement for RAPS, SPLAT has several
1.1.1 Small implementation, modest scope
The current source for SPLAT comes to less than 2000 lines of
Scheme code. This is a manageable, understandable, modifyable code
base. RAPS is about 8000 lines of Common Lisp code, and more
importantly, 8000 lines of Common Lisp code that someone else wrote.
RAPS includes a planner and knowledge representation system that are
not necessarily the ones I want. SPLAT leaves planning and knowledge
representation to the researcher, and leaves the action sequencing and
closed-loop control as a self-contained entity that can be fit into
any planning and control framework.
1.1.2 Integration of continuous and discrete actions
RAPS separates "skills" from RAPS, requiring continuous behaviors to
be written in C language and put in a different executable without
ready access to the LISP environment. SPLAT uses RScheme's
multithreaded runtime, which gives continuous behaviors access to the
same environment as discrete actions. If you want to go outside the
Scheme environment, you can. Locally, we use SPLAT with an
inter-language distributed object system (to be released in future
versions of the SPLAT code, or when ARGUS becomes ready for public
view, whichever comes first) that lets us have C code running on
whatever machine is most capable. But it's easy to keep as much
information as you want available for both discrete and continuous
1.1.3 Memory access control without full knowledge representation
A basic problem in event-driven systems is noticing when an event has
occurred without polling. RAPS solves this problem via "RAP Memory",
a blackboard-like structure which has access controls that can detect
changes to memory locations and take appropriate action. RAPS
circumvents the LISP environment and forces all variables in RAPS to
go through RAP Memory. This seems excessive, and intertwines
knowledge representation with the plan execution model too much. The
SPLAT system requires event handlers and other routines that can be
fired at any time a predicate becomes true to use a special data type,
the splat fluent, and to explicitly list all relevant splat
fluents as a tag for the predicate thunk. This dramatically reduces
the overhead of locating and calling event handlers and other
asynchronous routines, and does not tie the programmer down to a
particular knowledge representation strategy.
- Copyright ©1996-1997 Bill Gribble.
2 September 1997
Bill Gribble firstname.lastname@example.org