In class we learned that robotics systems are generally built with many levels, such as
planning -> state machines -> reactive -> hardware
The first paper I found when I looked for information on robot systems was by Ronald Arkin, written in 1990. He referenced "A Robust Layered Control System for a Mobile Robot" by Rodney Brooks in 1985, which I decided to look at since it is simpler.
Brooks first references the "usual" robot system, which resembles what we learned in class:
sensors -> perception -> modelling -> planning -> task execution -> motor control -> actuation
He then proposes an alternate way of splitting the levels of control. His approach is to have each level be an entirely functional program, and each level adds complexity to the desired task. This results in a more "horizontal" splitting:
Every level is a collection of modules, which are implemented as state machines.
The idea is that the
avoid objects level can be written, tested, and established completely to be used as a base for all higher levels. It uses perception and motor control, but if a higher level needs to perform these tasks, then that level may do so independently - all perception tasks need not be grouped together.
Each additional level may take results from lower levels or override parts completely. Brooks describes how
wander reads the forces determined in
avoid objects and then overrides some motor commands.
Avoid objects still sends halt commands to the motor when the robot is about to collide with a stationary obstacle. The next level up,
explore builds on
wander, inserting its own planned heading into a module in
wander. Since it is using established code, this hierarchical building should be sound.
Brooks describes how using this architecture allows for reasonable "fallback" behavior. If a sensor or processor used in the level-2 program fails, then the robot may revert to level-1 behavior since those processes are entirely intact and fully operational regardless of problems with level 2.