Cognitive Robot Abstract Machine

CRAM (Cognitive Robot Abstract Machine) is a software toolbox for the design, the implementation, and the deployment of cognition-enabled autonomous robots performing everyday manipulation activities. CRAM equips autonomous robots with lightweight reasoning mechanisms that can infer control decisions rather than requiring the decisions to be preprogrammed. This way CRAM-programmed autonomous robots are much more flexible, reliable, and general than control programs that lack such cognitive capabilities. CRAM does not require the whole domain to be stated explicitly in an abstract knowledge base. Rather, it grounds symbolic expressions in the knowledge representation into the perception and actuation routines and into the essential data structures of the control programs.

The CRAM kernel consists of the CPL plan language and the KnowRob knowledge processing system. Both are tightly coupled to the perception and actuation components. CRAM is realized in a highly modular way and can be extended with plug-ins providing additional cognitive capabilities.

CPL Extension Modules

  • Designators are symbolic descriptions of entities such as objects (e.g. mugs, plates, …), locations and parameterizations of actions. Designators unify symbolic and grounded concepts of the high level control program and the parameterization of the lower level components, which is necessary to efficiently reason about the execution of plans.
  • Process Modules encapsulate lower-level control processes that can be activated, deactivated and parameterized by the high-level control program. They resolve symbolic properties of designators and generate the parameterization of the low-level control routines, by taking into account the current belief state.
  • Recording of an extensive Execution trace, including the belief state at any point in time and the internal state of the control program.
  • Reasoning components include a bridge between CPL and KnowRob by incorporating the foreign language interface of SWI-Prolog into Common Lisp, a reasoning component based on the RETE algorithm and a library of predicates that allow for reasoning about plan execution, based on the execution trace.

KnowRob Extension Modules

KnowRob is a pragmatic knowledge processing system for autonomous robots that provides grounded knowledge processing and reasoning services. It is implemented in a highly modular way, allowing to load additional modules only when needed. The documentation of KnowRob and its extension modules can be found at For more information on the concepts behind the system, have a look at the KnowRob page.


CRAM is available as several ROS packages and stacks through. CPL and the CPL extensions are documented at The website of the KnowRob project is