YARP
Yet Another Robot Platform
Welcome to YARP

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 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 (Port Monitor).

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].

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

Getting set up

The basics of using YARP

Learning YARP

The best way to learn how to use YARP is to read the tutorials and documentation pages that are reported in the page YARP Tutorials. Do not forget to checkout the command line tools and guis sections below. Advanced topics for interoperability and technical papers are reported at the end of this page. The page YARP Tutorials is continuously updated so it is a good idea to periodically check it.

Command line tools

GUIs

Interoperability and advanced use

Interfaces and Devices

  • YarpDevicesPage

More information

YARP resources

Related links

Publications

  • [2] Towards Long-Lived Robot Genes, Paul Fitzpatrick, Giorgio Metta, and Lorenzo Natale, Robotics and Autonomous Systems, 56(1):29-45, 2008. [doi: 10.1016/j.robot.2007.09.014]

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

  • [5] Enhancing software module reusability using port plug-ins: an experiment with the iCub robot, Paikan, A., Tikhanoff, V., Metta, G., and Natale, L., International Conference on Intelligent Robots and Systems (IROS 2014). [doi: 10.1109/IROS.2014.6942762]

  • [6] 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. [doi: 10.1109/SEARIS.2015.7854100]

  • [7] 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. [doi: 10.1109/IROS.2015.7353611]