Framework Comparison


Please note: We are comparing RSB against roscore (or even ros_comm?) not against ROS!
and YARP_OS?

Functional Differences

Pub/sub Topology m:n m:n 1:n, m:n over AM m:n 1:1
Abstraction single level single level single level hierarchies single level
Channel Identifier Topic none? name or URI Scope ?
Channel Scope Flat Flat Flat Hierarchical ?
Origin Filtering ? no? not required for 1:n planned ?
Content Filtering ? no yes (via XPath) via extension, e.g., XPath ?
Typing static,strong dynamic none strong-ish strong
IDL yes, proprietary no no optional, standardized yes
QoS implicit limited support, mixed with flow-control limited, local queuing explicit ?
Introspection strong nameserver, port admin protocol limited implicit by multicast though component model (interface as well as data)
Centralized yes (master, param server) yes (nameserver), direct connect. poss. yes, dispatcher no yes (broker)
Event meta-data client level ? yes yes ?

Communication Patterns

Pub-Sub yes yes yes yes yes
.. Push-receiver yes ? yes yes ?
.. Pull-receiver ? ? yes yes ?
Client-Server yes yes yes yes yes

RPC Features

Asynchronous RPC ? ? ? yes
Parallel Pipelining ? ? ? yes
Dynamic Typing kind-of (schema in header) yes yes no (for Protocol Buffers)
Connection pooling manually configurable ? ? no pooling, but reuse
Delayed return ? ? ? no
Event-driven I/O ? ? ? no (one thread per connection)

Criteria are based on, explanations here .

Non-functional Properties

  • Architecture
  • Dependencies


Aspect ROS YARP XCF RSB OpenRTM-aist
Lock-in strong ? ? ? yes (component-model)
Use of standards/terminology partial almost none XML, XPath partial yes (CORBA)
Protocol Specification yes, inaccurate yes, inaccurate no(?) yes, uses IDL yes, IDL
Source Code Documentation ? ? partial client-level nearly complete yes, sometimes only japanese
Project Layout/Source code organization monolithic confusing confusing at least, we have a plan... jp website only
Transport Extensions ? maybe no yes ?

Programming Language Support

Language ROS YARP XCF RSB _OpenRTM-aist
C ? partial? no no no
C++ impl impl impl impl impl
Java impl? ? impl impl impl
Python impl ? binding impl impl
Common Lisp impl ? binding impl no
Ruby ? ? no no no

Operating System Support


  • ZeroMQ
    • Socket-level Client API + rich configuration (however, not modeled explicitely)
    • Serialization is not considered


  • We believe in the power of reflection and self-description, such that
    • a generic content-based subscription model, e.g., with path-based access such as XPath becomes feasible
    • messages can be generally understood by everyone even if parts are not accessible
  • We further believe in powerful representations, such that
    • component can be re-used without recompiliation if optional parts of message formats change or information is added (this may be a difference to ROS / LCM where every module has to be recompiled)
  • RSB shall provide better introspection features, both for programmatic access (e.g., for anomaly detection) but also for developers
  • Reduced framework lock-in