A Cloud Robotics Platform

User Tools

Site Tools



  • March 15, 2014 | Rapyuta/Roboearth presented at TEDx, Adliswil, Switzerland (video)
  • November 03, 2013 | Rapyuta presented in IROS 2013, Tokyo, Japan.
  • April 12, 2013 | Rapyuta presented in ROSCon2013, Stuttgart, Germany. Successful live demonstration of RGBD mapping on the cloud.
  • April 10, 2013 | Rapyuta presented in invited talk at the ICRA 2013 workshop on long-term autonomy, Karlsruhe, Germany.

From a user perspective Rapyuta can be thought of as a set of

  • computing environments
  • endpoints, and
  • communications protocols.

Let's look at these components and how they work together using a simple example where a Roomba vacuum cleaning robot with a wireless connection uses Rapyuta to record/log its 2D pose. Some of the details such as authentication and message types are skipped here to keep the introduction simple. Please see the Communication Protocol, Developer Resources, and the Tutorial sections for a more complete explanation.

Computing Environments

Computing Environments are implemented using Linux Containers (LXC) providing a secure, lightweight virtual machine to execute 3rd party code. In the current setup each container is a full fledged ROS environment with its own ROS master. The user, which can be a human or a robot, can launch ROS nodes and set parameters.

Our example robot can create a container for itself using the following message (type CC)

"containerTag" : "roombaClone"

Furthermore, the robot can launch ROS nodes using the following message (type CN)

"addNodes" : [{
    "containerTag" : "roombaClone",
    "nodeTag"      : "positionRecorder",
    "pkg"          : "testPkg",
    "exe"          : "posRecorder.py"

Computing Environments are implemented using Linux Containers (LXC) providing a secure, lightweight virtual machines. Container Task Sets control the launching and shutting down of the LXCs. Container Task Sets receive their commands from the Master Task Set.

Environment Endpoint

An Environment Endpoint is where the messages enter and leave the Linux Containers. The interface that gets exposed outside of the container has to be explicitly mentioned.

Our example robot can add a publisher interface in the environmment endoint to eventually send data into the contianer it created. This can be done by using the following mesage (Type CN)

"addInterfaces" : [{
    "endpointTag"   : "roombaClone",
    "interfaceTag"  : "pos",
    "interfaceType" : "PublisherInterface",
    "className"     : "geometry_msgs/Pose2D",
    "addr"          : "/posPub"

Robot Endpoint

A Robot endpoint is where messages to/from the robot enter/leave the Rapyuta. Robots and Robot Endpoint connect with each other using the WebSockets protocol. Rapyuta's WebSockets based protocol allows various tyes of messages: JSON encoded messages (simliar to rosbridge), serialized ROS messages, or binary blobs. For binary blobs a converter has to be registered on the cloud side which converts the binary data into the standard message format used inside Rapyuta.

Robots and Robot Endpoint connect using the WebSockets protocol, allowing for a bi directional, full duplex communication.

Our sample robot has to add an interface on Robot Endpont in order to send its pose messages to the cloud. This is done using the following message (type CN)

"addInterfaces" : [{
    "endpointTag"   : "roomba",
    "interfaceTag"  : "pos",
    "interfaceType" : "SubscriberConverter",
    "className"     : "geometry_msgs/Pose2D"

Internal Communication

All endpoints (Environment & Robot) can communication with each other to realize different topologies. With a Robot Endpoint and Environment Endpoint talking you can connect a Robot to a container, with Environment Endpoints you can connect containers and finally with only Robot endpoints you can connect robots together.

Connections between the interfaces of Endpoints have to be explicitly stated. In our running example the robot has to connect the two interfaces it created in the two endpoints to complete the path. This can be achieved by the the following message (Type CX)

"connect" : [{
    "tagA" : "roomba/pos",
    "tagB" : "roombaClone/pos"

Next Steps

introduction.txt · Last modified: 2014/06/03 17:05 by gajan