We have implemented the above techniques in the SRI International
mobile robot Flakey. Flakey is a custom-built research robot, with a
height of 1 meter and a diameter of 600 mm, driven by two independent
wheels. Sensors include a ring of 12 sonars, bumpers, wheel encoders,
plus other equipment not used in the experiments reported here.
On-board computation include a 2-processor Sparc 10. The control
software is distributed over several processes that operate in
parallel with a basic cycle time of 100 msecs. The fuzzy controller
uses up about 2 msecs with one behavior active, and about 10 msecs
with 8 behaviors (on the average, 2 or 3 behaviors are simultaneously
active during a typical navigation task). Although Flakey can run all
the control software on-board, we usually run it remotely via a
radio-link for programming convenience. As Flakey is mainly a
research testbed, all the code is written from scratch in Lisp (with
parts in C) putting a strong emphasis on code modularity.
We have written fuzzy rules for about a dozen behaviors for Flakey
(Saffiotti et al 1993b). Each behavior typically comprises four to
ten rules and two to six fuzzy predicates. Fuzzy predicates are coded
by piecewise linear membership functions, built by combining ramp
functions of the variables in the LPS. Fuzzy outputs and fuzzy
locations are coded by triangular fuzzy sets. These choices proved to
be a reasonable tradeoff between expressiveness and computational
tractability. Writing the control rules was based on the designer's
``good intuition'' of the intended behavior; tuning and debugging was
done by trials and errors. Most behaviors performed well after few
debugging cycles; however, behaviors which heavily rely on perception,
like obstacle avoidance, required extensive debugging and fine tuning.
The membership functions used for the fuzzy localizers only needed few
adjustments to produce satisfactory results.