ROS Communication for OpenCog Embodiment

From OpenCog


This page is obsolete!. It describes some design ideas from 2014/2015 that were ultimately implemented in a fashion that differs from the discussion here. It remains here as archived historical documentation. Probably the best long-term implementation for ROS integration is given on the Values page; that is, ROS data can be, should be streamed to custom Values objects attached to atoms. See also the SpaceServer page for a related implementation for 3D space and time coordinates and relationships.

ROS Communication for OpenCog Embodiment

The idea has been floated repeatedly in past months of using ROS for messaging between OpenCog and "embodiments" controlled by OpenCog, including robots but also (at least, many instances of) virtual game characters.

The code currently used for messaging between OpenCog and the Unity3D game world is widely viewed as archaic/problematic, so there is general motivation for replacing it.

This page has been created to gather ideas regarding 'specification' and 'design' for a ROS/OpenCog interface. Suppose an OpenCog instance is to be represented as a ROS node, and a robot or game character is to be represented as a ROS node as well. What ROS messages should be exchanged between these two ROS nodes?

Two main sources of guidance should be

  • The current OpenCog/Unity3D messaging framework has certain functions, and these functions should still exist in the ROS messaging framework
  • We want to be able to control Hanson robots using OpenCog, including emotionally expressive robot heads, and also simple walking humanoid bodies like Zeno and Zoidstein. See ( for information on the Hanson Robotics open source software.

(Also, one use case to keep in mind is where multiple characters controlled by OpenCog exist within the same game engine instance. The characters may each have their own separate perceptions and actions, but they are still running in the same process. It may make perhaps sense for a set of characters in this case to share the same ROS node.)

Some Background Info

The Embodiment section of this wiki site, at time of writing, contains a lot of useful information and also a lot of obsolete information:

The page Notes_on_How_to_Build_an_Embodiment_Proxy describes the current OpenCog-embodiment communication protocol at a high level:

The page Design_for_Embodiment_Communications_Layer gives some notes on creating an OpenCog proxy. It's kind of specialized to a certain kind of game world proxy, but still has useful information:


Put them here

Design Ideas

Put them here