So, I assume you mean Environment when you say Client?
First of all the Robot & Environment process have the same abstract base
"class" Endpoint. The Endpoint provides the capability to communicate
with processes outside of Rapyuta & with other Endpoints. They are two
different specializations because they have slightly different
capabilities: The Robot is capable of managing the communication with
multiple robots (called namespaces in the internal communication) and is
capable of understanding Rapyuta's external protocol. The Environment
can manage only one environment (i.e., namespace), but is capable of
launching/stopping nodes & adding/removing parameters and is capable of
understanding the ROS protocol.
The Container process' sole responsibility is to create/destroy
computing environments (i.e., containers). One of the reasons why this
is a separate process is that for now the lxc & (probably also) the
iptables commands require super-user privileges, which is a security
The Master process acts like the roscore for ROS nodes to the Endpoints,
i.e., it organizes the communication between the them. The Master
receives all requests which alter the state of Rapyuta and ultimately
decides what to when and where.
On the robot side you could also count the client as a Rapyuta process
(but strictly speaking it's not). The rce-ros client just acts as a
"translator" between the ROS protocol and the external Rapyuta protocol,
based on the config file (and it sets up and trears down the other
elements specified in the config file). It is also possible to directly
use the python client (the rce-ros client is just a convenience wrapper)
or the c++ client (which is hopelessly outdated).