Yet Another Robot Platform
YARP 3.4.0 (2020-07-31)

YARP 3.4.0 Release Notes

A (partial) list of bug fixed and issues resolved in this release can be found here.

Important Changes

  • YCM 0.11 or later is now a hard dependency and must be installed on the system before installing YARP.
  • Python 2 is no longer supported.

Deprecation and Behaviour Changes

  • The scripts/WindowsPowerShell files are now in data/WindowsPowerShell.
  • The scripts/yarp_completion file is now in data/bash-completion/yarp.

Build System

  • INCLUDE must now be an existing file, either using a path relative to current directory, or an absolute path. Using a path relative to one of the include directories is deprecated.


  • The yarp::os::ConnectionState::getLog() method was removed without deprecation, due to the changes to the logging system, that made it impossible to preserve this method.








  • The test_grabber device was renamed fakeFrameGrabber. The old name is kept for compatibility, but it will be deprecated and removed in a future release.
  • The test_motor was renamed fakeMotor. The old name is kept for compatibility, but it will be deprecated and removed in a future release.


  • The regression subcommand was removed.

New Features

Build System

  • The bash-completion file is now installed automatically (#1101).
  • It is now possible to build some of the examples in the main build using the YARP_COMPILE_EXAMPLES CMake Option
  • It is now possible to build some of the YARP examples as test using the YARP_ENABLE_EXAMPLES_AS_TESTS CMake Option

  • It's now possible to pass options to the commands using CMake variables (for example YARP_ADD_IDL_THRIFT_INCLUDE_PREFIX and YARP_ADD_IDL_THRIFT_NO_NAMESPACE_PREFIX.

  • Including current directory (either explicitly, or using CMAKE_INCLUDE_CURRENT_DIR) is no longer required by the generated files.







  • The yarp logging system was heavily refactored, please check out the documentation.
  • The name of the port used to forward the output no longer contains the full path, but only the executable name.
  • Added yarp::os::LogComponent to define log components:
    • A log component can be declared using the YARP_LOG_COMPONENT() macro (in a .cpp file) and eventually forward declared using YARP_DECLARE_LOG_COMPONENT().
    • It is possible to set custom printing and forwarding macros for each component, and it is possible to enable and disable specific levels for each component.
    • At the moment it is not yet possible to change the defaults set in the code, but this will be enabled in the future.
  • The output forwarded is now a property and contains several useful information including component and system/network time, file, line, function.
  • The logger is now able to detect if it is running in yarprun and eventually change the output format.
  • Logging is now protected by a mutex to avoid garbled output.
  • The YARP_DEBUG_LOG_ENABLE environment variable can be set to debug the log of the application.
  • When color is enabled, the loglevel can be represented by a single colored character by setting the YARP_COMPACT_OUTPUT environment variable to 1.
  • The limit of 1024 characters for the c-style yDebug() macro family was removed. A dynamic allocation is now used, but only when the size of the output exceeds this size.
  • Trace should no longer generate code when building in release mode. When building with -DYARP_NO_DEBUG_OUTPUT debug should not generate any code as well. See https://godbolt.org/z/hSAC56
  • Added the yCDebug macro family to pass a component to the logger (This macro is also available for all log levels, and assert).
  • Added the following new debug macro families limiting the log output (all these macros are available for all log levels, except for [FATAL], and in the component version):
  • Added the yDebugExternalTime() macro family to pass a timestamp generated by an external source (This macros is also available for all log levels, in the component version, and in the limited version):

  • Added move semantics.

  • The first argument of yarp::os::Portable::copyPortable() is now const. The new signature is:
    bool yarp::os::Portable::copyPortable(const PortWriter& writer, PortReader& reader)

  • It's now possible to try to fix any issues by entrusting a Superior Entity.







  • Interpret the new message format containing extra info.


  • Added depthimage2 portmonitor to transform a depth image (VOCAB_PIXEL_FLOAT format) into a rgb image, using a precomputed colormap.
  • Added segmentationimage portmonitor to transform a segmentation image (VOCAB_PIXEL_MONO or VOCAB_PIXEL_MONO16) into a rgb image, using a precomputed colormap.


  • Added a new port <name>/control/rpc:i to retrieve and change the values reported by the fake battery.
  • The battery is now charged or discharged depending on the sign of the current.
  • The default values for voltage and current are now more realistic.
  • It is now possible to change the starting values as device options.



  • Added missing ROS initialization. It will now publish odometry data on ROS topic.

  • multipleAnalogSensorsSerializations.thrift have been extended to handle position sensors.

  • Added handlers for yarp::dev::IPositionSensors interface.
  • Added support for wrapped subdevices, i.e. those explicitly instantiated via --subdevice option on initial device configuration. (#2154)



  • Port to the new rendering API and make it focus aware (SDK 1.19 is required).
  • Add P command to print current settings.




  • Added support for identical frame transforms.

  • Cleanup of --USER_TF option.


  • The --help, -h and --version arguments are now accepted.
  • Added the priority-qos subcommand that allows to set/get the packet priority value of both the source and the destination port.
  • Added the priority-sched subcommand that allows to set/get the thread priority and policy values of both the source and the destination port.
  • Added the env subcommand to print one or the full list of environment variables.
  • The qos subcommand is accepted as an alias to priority-qos.
  • The sched subcommand is accepted as an alias to priority-sched.
  • When logic fails, it's time to yarp pray. Watch out for palindrome mode.

  • The name of the port used to forward the output no longer contains the full path, but only the executable name.
  • The following enviromnent variables are now set in the child processes:
    • YARP_IS_YARPRUN is set to 1 for all child processes
    • YARPRUN_IS_FORWARDING_LOG is set to 1 when yarprun is forwarding the log and to 0 otherwise


  • Added new yarpmobilebasegui GUI which allows the user to control the mobile base of the robot via keyboard or mouse and sends yarp::dev::MobileBaseVelocity commands on a yarp port.

  • Moved the builder, from the hidden place to a tab in the application view.

  • Multiple instances are now allowed with --local option.
  • Added --debug option.

  • It's now possible to reproduce several ROS types, i.e.
    • sensor_msgs/LaserScan
    • nav_msgs/Odometry
    • tf/tfMessage
    • tf2_msgs/tfMessage
    • geometry_msgs/Pose
    • geometry_msgs/Pose2D
  • Added getSliderPercentage method to the rpc port. This method returns the progress percentage of the seek bar while playing a dataset. (#2148)

  • Added a checkable menu item that, if checked, shows an additional line in the status bar that displays the color value of the pixel pointed by the mouse cursor. The string has the following format
    Pixel("x","y") = "hexstring"
    Where x and y are the coordinates of the pixel and hexstring is the hexadecimal (in the ARGB format) string representing the pixel color. The additional line on the status bar contains also a little rectangle that will turn the same color of the currently selected pixel.

  • The new info from yarp log (component, time, etc.) are now displayed (the columns that are not shown by default can be enabled from the Options menu).
  • Cleaned up interface, removed status bar and improved colors.


  • Several previously inaccessible methods from motor interfaces are now correctly wrapped. This covers pretty much everything the pair remote_controlboard/controlboardwrapper2 wraps and implements, only excluding calibration interfaces. In addition, two more interfaces can be accessed through the PolyDriver idiom: IEncodersTimed and IMotor.

New Experimental Features

EXPERIMENTAL means that the software is under development, provided with incomplete documentation and it may be modified/renamed/removed without any notice.



  • The following EXPERIMENTAL environment variables can be enabled to enable forwarding of some extra log information:
    • YARP_FORWARD_CODEINFO_ENABLE (file name, line number and function name)
    • YARP_FORWARD_PROCESSINFO_ENABLE (command, arguments, pid and thread id)
    • YARP_FORWARD_BACKTRACE_ENABLE (stack trace) These environment variables could be removed in the future.


  • Created the new EXPERIMENTAL YARP_robotinterface library by refactoring as a library the logic of the yarprobotinterface tool, including support for attaching devices created by the library to external devices created in some other way.


  • Added the new EXPERIMENTAL unix_stream carriers to communicate with a process on the same machine using a unix socket. It's possible to use the ack option (unix_stream+ack) in case you need flow control.


  • Added realsense2WithIMU EXPERIMENTAL device. This is a driver for Realsense D435i.
  • Added relasense2Tracking EXPERIMENTAL device. This is a driver for Realsense T265.
  • Added laserFromRosTopic EXPERIMENTAL device. It exposes a lidar ROS topic (dataype sensor_msgs::LaserScan) on YARP, using the yarp::dev::IRangefinder2D interface.

Bug Fixes



  • Passing an invalid string when setting the QoS by DSCP no longer sets it to 0.


  • Fixed pixel type and the orientation settings when using the move constructor and the move assignment operator.


This is a list of people that contributed to this release (generated from the git history using git shortlog -ens --no-merges v3.3.0..v3.4.0):

470 Daniele E. Domenichelli <daniele.domenichelli@iit.it>
75 Marco Randazzo <marco.randazzo@iit.it>
27 Nicolò Genesio <nicolo.genesio@iit.it>
18 Silvio Traversaro <silvio.traversaro@iit.it>
8 Ettore Landini <ettore.landini@iit.it>
7 Bartek Łukawski <bwmn.peter@gmail.com>
4 Prashanth Ramadoss <prashanth.ramadoss@iit.it>
3 Alexandre Gomes Pereira Antunes <alexandre.gomespereira@iit.it>
3 Giulio Romualdi <giulio.romualdi@iit.it>
2 Andrea Ruzzenenti <andrea.ruzzenenti@iit.it>
1 Alessandro Roncone <alessandro.roncone@iit.it>
1 Paul Fitzpatrick <paulfitz@alum.mit.edu>
1 Ugo Pattacini <ugo.pattacini@iit.it>
1 Valentina Gaggero <valentina.gaggero@iit.it>