welcome: please sign in
location: oro-features


ORO, in details

What is ORO

Introducing a cognitive layer

Robots interacting with complex, human-inhabited, environments are expected to exhibit advanced cognitive skills: objects recognition, natural language interactions, task planning with possible dynamic replanning, ability to cooperate with other robots or humans, etc.

These functions, while being scientific challenges partially independent from each other, need to communicate, and thus to share a common representation of concepts of the world, to be effectively combined in a complete, autonomous, robotic system.

The oro-server project focuses precisely on the implementation of such a common description framework, along with a library of basic, reusable cognitive functions. This so-called cognitive kernel is actually build as a server that maps cognitive service to a ontology-based backend.

Amongst other features, these base cognitive functions include:


In practical terms, oro-server does mainly two things:

It relies on RDF/OWL ontologies to represent an store knowledge and runs several active processes that offer, amongst other things, reasonning facilities, support for bio-inspired memory models, concepts of "cognitive events", categorization and explicit modeling of other agents.

Planned features include reinforcement learning, pro-active "curiosity" and mechanisms to handle cognitive conflicts (ie inconsistent chuncks of knowledge).

What can it be used for?

Upon these bricks, it possible to build semantic-aware layers and applications.

At the system level, such a cognitive kernel allows:


At the application level, ORO enables to built semantic and context-aware components. Example of applications include:


oro-server features

Alterite module

Categorization module

             | Thing |
             .-'   `-.
           ,'         `.
         ,'             `-.
      .-'                  `.
+----+--+                 +--+-----+
| Plant |                 | Animal |
+---+---+                 +--+++---+
    |                   _,-"  |  `--.._
    |                .-'      |        ``--..
  plant1         animal1    animal2        animal3
    |               |         / `.            \
    |               |        /    `-.          \
 hasColor         eats     eats  hasColor   hasColor
    |               |        |      |          |
    |               |        |      |          |
  green          banana    grass   blue       red

If the robot wants to answer an ambigious order like Give me the thing!, it needs a way to disambiguate the different possible individuals in the Thing class.

More details on the Categorization module and its algorithms here.

Events module

Events are triggered by so-called Watchers

A watcher stores the type of event (cf below) along with the pattern (the form of the pattern depends on the type of event).

Following type of events are currently implemented:




 > registerEvent
 > b
 > [?a desires ?b, ?a rdf:type Human]

 > add
 > [ramses rdf:type Human, pyramidInauguration rdf:type StaticSituation, ramses desires pyramidInauguration]

 > event
 > [pyramidInauguration]


The event is triggered when a new instance of the class returned by the watch pattern is added. When the event is fired, the server send to the client the list of the new instances. This kind of event is a special, optimized version of NEW_INSTANCE for class instances.

Memory module

The "Memory module" provides a memory management system that allows the robot to forget about facts after a while. Reinforcement learning is planned but not yet implemented as of December 2009.

OpenrobotsWiki: oro-features (last edited 2010-12-08 14:53:16 by goedel)