YARP  2.3.68
Yet Another Robot Platform
Welcome to YARP
yarp-logo.png

YARP stands for Yet Another Robot Platform. What is it? If data is the bloodstream of your robot, then YARP is the circulatory system.

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. Our strategic goal is to increase the longevity of robot software projects.

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 have). We're not out for world domination. It is easy to interoperate with YARP-using programs without yourself necessarily having to use 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 macOS, 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 LGPL (*).

The general philosophy that has guided the development of YARP is described in [1-3], while [4] describes some recent development (Port monitoring and arbitration using the portmonitor carrier).

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 [5-6].

Getting set up:

The basics of using YARP:

Command line tools:

GUIs:

Interoperability and advanced use:

More information:

YARP resources:

Related links:

Papers:

[1] A middle way for robotics middleware, Fitzpatrick, P., Ceseracciu, E., Domenichelli, D., Paikan, A., Metta, G., and Natale, L., Journal of Software Engineering for Robotics, 5(2): 42-49, 2014. [pdf]

[2] Towards Long-Lived Robot Genes, Paul Fitzpatrick, Giorgio Metta, and Lorenzo Natale, Robotics and Autonomous Systems, 56(1):29-45, 2008. [pdf]

[3] YARP: Yet Another Robot Platform, Giorgio Metta, Paul Fitzpatrick, and Lorenzo Natale, International Journal of Advanced Robotic Systems, 3(1):43-48, 2006. [pdf]

[4] Data Flow Port's Monitoring and Arbitration, Paikan, A., Fitzpatrick, P., Metta, G., and Natale, L., Journal of Software Engineering for Robotics, 5(1), pp. 80-88, 2014. [pdf]

[5] Paikan, A., Domenichelli, D., and Natale, L., Communication channel prioritization in a publish-subscribe architecture, in Proc. Software Engineering and Architectures for Realtime Interactive Systems Workshop, Arles, France, 2015. [pdf]

[6] Paikan, A., Pattacini, U., Domenichelli, D., Randazzo, M., Metta, G., and Natale, L.,A Best-Effort Approach for Run-Time Channel Prioritization in Real-Time Robotic Application, in Proc. IEEE/RSJ International Conference on Intelligent Robots and Systems, Hamburg, Germany, 2015, pp. 498-503. [pdf]

(*) Certain optional plugin devices, carriers, or libraries are under the GPL.