Skip to content

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 robots
  • icubSim for simulated iCub robots
  • ergoCub for physical ergoCub robots
  • ergoCubSim 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:

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