About Fawkes

What is Fawkes?

Fawkes is a software system that provides the infrastructure and building blocks to create and run robotic applications. It provides a robust and small run-time system which can load and unload plugins at run-time, therefore allowing for a flexible development cycle. Fawkes is written in C++ with an emphasis on clean structure and complete documentation. It is developed for Linux and Unix platforms. Fawkes has been tested during numerous RoboCup events, where it was used to drive multiple robots, like the service robot Caesar, the humanoid robot Nao, or soccer playing middle size league robots.

The development is driven in large parts by members of the AllemaniACs RoboCup Team at the Knowledge-Based Systems Group at RWTH Aachen University, Germany.

Component-based Approach

To combine the different parts, Fawkes implements a component-based approach. Logical components are defined as a contract between developers. A component consists of a defined input and output and accomplishes a specified tasks. Components are then implemented as plugins. By this, a plugin can implement one or more components (usually it implements one). Components can then be combined depending on the task to solve and allow to reuse existing code in new applications.

Hybrid Blackboard/Messaging Data Exchange

For communication a hybrid blackboard/messaging approach has been chosen. Data produced by components is stored in a shared memory segment (called blackboard) in specified well-known value groups (called interfaces). Commands which are passed between the components are sent as messages. This allows for queuing multiple commands and process them sequentially, or it can be used to detect conflicting commands (e.g. one component orders "drive forward", another orders "drive backward" at the same time).

Multi-threaded Base System

Fawkes provides a massively multi-threaded base system to exploit the capabilities of modern multi-core systems. A plugin consists of a number of threads. An observation is that robotic applications usually have repeating cycles of information processing, decision making, and action execution. Therefore the base system provides a main loop with a specified order in which tasks are executed. Threads of plugins can opt-in to run at a specified point in this main loop. All threads registered for the same point are run concurrently, therefore distributing the work over multiple CPUs. However, threads can also run concurrently, for example for tasks that need a high frequency (e.g. motion execution) or for tasks that run a comparatively long time (e.g. deliberative planning or network communication).

Integrated Computer Vision Framework

Fawkes provides an integrated computer vision framework called FireVision. This framework supports various image sources and camera types and integrates with well-known computer vision libraries like OpenCV. It also provides building blocks and examples to write custom vision applications. Images can be transparently transmitted over the network, e.g. for visual debugging.

Behavior Engine using Lua

Fawkes comes with a behavior engine which allows for easy ordering of actions on the base system to implement the actual behavior of the robot solving a specified task. The basic behaviors (called skills) are implemented in the scripting language Lua. Each skill is represented as simple function which is executed by the behavior engine until the skill has succeeded (or failed) or is aborted, for example to execute a different task because the situation has changed. This modularity allows for employing of different high-level decision making approaches and makes writing small behaviors to test certain aspects of the robot software very easy.

Integrated Hardware Plugins

Fawkes comes with a number of plugins to access common hardware, for example to access the Katana arm by Neuronics. However, we are still improving and your help is welcome!

Agile Development and Documentation

Fawkes is developed in an agile fashion, for example using continuous integration. Additionally, documentation is regarded as integral part of the source code and all exposed functionality must be documented. We are still working on the complementary documentation describing the setup and usage of the system.

There are other articles about the history and the authors of Fawkes.