The YARP middleware

YARP, Yet Another Robot Platform, is an open-source middleware that encapsulates lessons from our experience in building humanoid robots. The goal of YARP is to minimize the effort devoted to infrastructure-level software development by facilitating code reuse, modularity and so maximize research-level development and collaboration. Humanoid robotics is a “bleeding edge” field of research, with constant flux in sensors, actuators, and processors. Code reuse and maintenance is therefore a significant challenge. The main features of YARP include support for inter-process communication, image processing as well as a class hierarchy to ease code reuse across different hardware platforms. YARP is currently used and tested on Windows, Linux and Mac OS which are common operating systems used in robotics.

More specifically, YARP supports building a robot control system as a collection of programs communicating in a peer-to-peer way, with an extensible family of connection types (tcp, udp, multicast, local, MPI, mjpg-over-http, XML/RPC, tcpros, ...) that can be swapped in and out to match your needs. We also support similarly flexible interfacing with hardware devices.

YARP is not an operating system for your robot. We figure you already have an operating system, or perhaps several. Nor does it do package management (we like the package managers we already have). We're not out for world domination (!). It is easy to interoperate with YARP-using programs without yourself necessarily having to use the YARP codebase – see the YARP without YARP tutorial. YARP is written in C++. The ACE library is used for Windows builds, and to support extra protocols. On Linux and Mac OS, ACE can optionally be omitted, giving a very light footprint (with the trade-off being the loss of support for some non-TCP-based protocols). YARP is free and open, under the BSD-3-Clause license [*].

The general philosophy that has guided the development of YARP is described in [1], [2] and [3], while [4] and [5] describe some recent development.

Performances are fundamental in robotics. YARP provides features that allow developers to assign priorities to individual connections. We call this channel Channel Prioritization. Experimental validation demonstrated that these features allow reducing communication latency and improves determinism for selected channels in a YARP network [6] and [7].

Do you want to explore more of YARP?

[*] Certain optional devices, carriers, tools or libraries are not licensed under the BSD-3-Clause.