YARP network wrapper servers convention
Introduction
The iCub robot (and all the other models) exposes its functionalities (sensors and actuators) via YARP devices called YARP's Network Wrapper Servers (NWSs) that publish information over YARP ports. For historical reasons, for each type of functionality such as "controlboards" (i.e measure of joint-related sensors and capability of setting setpoints of low-level control loops), inertial measurement units, force torque sensors, multiple devices are used, one for each iCub's "part".
The "parts" of iCub are:
head
left_arm
right_arm
torso
left_leg
right_leg
Not all iCubs have all their six parts. There are iCub variants that are composed only by the head
, or iCub variants that are composed only by the legs. In some contexts, even a special part called alljoints
is defined and used, to represent all the different parts of the robot combined.
To maintain generality, we will use the string robotPortPrefix
, which can have different values, depending on the robot:
icub
for physical iCub robotsicubSim
for simulated iCub robotsergoCub
for physical ergoCub robotsergoCubSim
for simulated ergoCub robots
Next, we will list the port convention for each type of functionality. For each part, the name
string is used. The YARP port will then be composed as: /<robotPortPrefix>/<partName>/...
. For example, functionalities associated to the iCub head start as /icub/head
.
Controlboards
The ControlBoard
functionality is exposed via the controlBoard_nws_yarp
device. It can be used to get and set input-output quantities associated to the part's joints, by communicating with the ETH boards of the robot.
For each part, there will be a controlBoard_nws_yarp
device that will open the following YARP ports:
-
/<robotPortPrefix>/<partName>/state:o
: Publishes encoders' information for the part -
/<robotPortPrefix>/<partName>/stateExt:o
: Publishes extended joint-level sensors information for the part (e.g. joint encoders, motor encoders, pwm values), using the structure defined in stateExt.thrift -
/<robotPortPrefix>/<partName>/rpc:i
: Exposes several information related to the part via a YARP RPC port -
/<robotPortPrefix>/<partName>/command:i
: Takes in input references for the low-level control loops
Controlboard client device
The YARP ports are not meant to be accessed directly, but should be accessed instead via the client device remote_controlboard
. The device will expose sensors data and actuator commands thanks to the related Motor interfaces.
Inertial Measurements Units (IMUs)
Inertial Measurements Units functionalities are exposed via the multipleanalogsensorsserver
YARP device. The inertials
string added to the YARP port name, to identify the device: /<robotPortPrefix>/<partName>/inertials
.
For each part, there will be a multipleanalogsensorsserver
device that will open the following YARP ports:
-
/<robotPortPrefix>/<partName>/inertials/measures:o
: Publishes sensors information for the part, using the structure defined in multipleAnalogSensorsSerializations.thrift -
/<robotPortPrefix>/<partName>/inertials/rpc:o
: Exposes several information related to the part via a YARP RPC port
IMU Client device
Warning
These YARP ports are not meant to be accessed directly, but should be accessed instead via the multipleanalogsensorsclient
device.
The client device will expose sensors related to the following Multiple Analog Sensors Interfaces, so they can be easily queried:
Force-Torque Sensors
Force-Torque Sensors functionalities are exposed via the multipleanalogsensorsserver
YARP device. The FT
string added to the YARP port name, to identify the device: /<robotPortPrefix>/<partName>/FT
.
For each part, there will be a multipleanalogsensorsserver
device that will open the following YARP ports:
-
/<robotPortPrefix>/<partName>/FT/measures:o
: Publishes sensors information for the part, using the structure defined in robotology/yarp@master
/src/devices/multipleAnalogSensorsMsgs/multipleAnalogSensorsSerializations.thrift -
/<robotPortPrefix>/<partName>/FT/rpc:o
: Exposes several information related to the part via a YARP RPC port
FT Client device
Warning
These YARP ports are not meant to be accessed directly, but should be accessed instead via the multipleanalogsensorsclient
device.
The client device will expose sensors related to the following Multiple Analog Sensors Interfaces:
Cameras
Eyes
RGB cameras mounted in the eyes of iCub are exposed via the frameGrabber_nws_yarp
YARP device. The port names do not follow the convention mentioned above, but use the naming /<robotPortPrefix>/cam/<side>
. the side
string can be either left
or right
, depending on the eye.
For each eye, there will be a frameGrabber_nws_yarp
that will open the following YARP ports:
/<robotPortPrefix>/cam/<side>
: Publishes the camera's RGB image/<robotPortPrefix>/cam/<side>/rpc
: Exposes several information related to the part via a YARP RPC port
Camera client device
Warning
These YARP ports are not meant to be accessed directly, but should be accessed instead via the remote_framegrabber
device.
The client device will expose the sensors thanks to the related Media Interfaces.
Depth cameras
Depth cameras, such as the Intel Realsense series of devices, have their capabilities exposed by the RgbdSensor_nws_yarp
device. The port names do not follow the convention mentioned above, but use the naming /<robotPortPrefix>/<cameraName>
. <cameraName>
is a string that is set as depthCamera
if only one RGBD device is mounted on the robot.
The RgbdSensor_nws_yarp
device will open the following YARP ports:
/<robotPortPrefix>/<cameraName>/image:o
: Publishes the camera's RGB image/<robotPortPrefix>/<cameraName>/depth:o
: Publishes the camera's depth image as a list of floating point values/<robotPortPrefix>/<cameraName>/rpc
: Exposes several information related to the part via a YARP RPC port
RGBD Camera client device
Warning
These YARP ports are not meant to be accessed directly, but should be accessed instead via the RGBDSensorClient
device.
The client device will expose sensors related to the following interfaces:
- yarp::dev::IRGBDSensor
- yarp::dev::IDepthVisualParams
- yarp::dev::IRgbVisualParams