/**
\mainpage Welcome to YARP

\tableofcontents

<img src="yarp-logo-name.png" id="yarp-logo">
\image latex yarp-logo-name.png height=128px

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

\li Source code: https://github.com/robotology/yarp
\li File an issue: https://github.com/robotology/yarp/issues/new

More specifically, YARP supports building a robot control system as a
\ref note_ports "collection of programs" communicating in a
peer-to-peer way, with an extensible
\ref carrier_config "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 <i>not</i> 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
\ref yarp_without_yarp "YARP without YARP" tutorial. YARP is written
in C++.  The <a href="https://www.dre.vanderbilt.edu/~schmidt/ACE.html">ACE</a>
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 [\ref bsd_note "*"].

The general philosophy that has guided the development of YARP is described in
[\ref Fitzpatrick2014 "1"], [\ref Fitzpatrick2008 "2"] and [\ref Metta2006 "3"],
while [\ref Paikan2014a "4"] and [\ref Paikan2014b "5"] describe some recent
development (\subpage portmonitor "Port Monitor").

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

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


\section yarp_setup Getting set up
\li \subpage download
\li \subpage install
\li \subpage yarp_cluster

\section yarp_basics_usage The basics of using YARP
\li \subpage yarp_cmake_hello
\li \subpage note_ports
\li \subpage note_devices
\li \subpage yarp_data_dirs
\li \subpage yarp_logging

\section yarp_learning 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 \subpage 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 \subpage tutorials is continuously updated so it is a good idea to
periodically check it.

\section yarp_command_line_tools Command line tools
\li \subpage yarp
\li \subpage yarpserver
\li \subpage yarpdev
\li \subpage yarprobotinterface
\li \subpage yarprun
\li \subpage yarp-config
\li \subpage yarpdatadumper
\li \subpage yarpdatadumperAppGenerator
\li \subpage yarphear
\li \subpage yarplogger-console
\li \subpage yarpmanager-console
\li \subpage yarpidl_rosmsg
\li \subpage yarpidl_thrift
\li \subpage yarpros

\section yarp_guis GUIs
\li \subpage yarplogger
\li \subpage yarpview
\li \subpage yarpscope
\li \subpage yarpmanager
\li \subpage yarpdataplayer
\li \subpage yarpmotorgui
\li \subpage yarpbatterygui
\li \subpage yarplaserscannergui
\li \subpage yarpviz
\li \subpage yarpmobilebasegui

\section yarp_advanced_usage Interoperability and advanced use
\li \subpage channelprioritization.
\li \subpage yarp_without_yarp
\li \subpage yarp_with_ros
\li \subpage yarp_swig
\li \subpage portmonitor
\li \subpage yarp_env_variables
\li \subpage robottestingframework_plugins
\li \subpage yarp_pointcloud
\li \subpage carrier_h264_howto

\section YARP Interfaces and Devices
\li \subpage dev_all
\li \subpage nws_and_nwc_architecture
\li \subpage FrameTransform

\section yarp_more_info More information
\li \subpage what_is_yarp
\li \subpage contributing
\li \subpage changelog

\section yarp_resources YARP resources
\li <a href="http://github.com/robotology/yarp">YARP project on GitHub</a>
\li <a href="http://github.com/robotology/yarp/issues">YARP issue tracker</a>
\li <a href="http://wiki.icub.org/wiki/YARP">Wiki</a>
\li <a href="http://wiki.icub.org/wiki/Robotcub-hackers">Mailing&nbsp;list</a>

\section yarp_related_links Related links
\li <a href="https://github.com/robotology/">The Robotology organization on GitHub</a>
\li <a href="http://www.icub.org">iCub family</a>
\li <a href="http://playerstage.sourceforge.net/">Player/Stage</a>
\li <a href="http://www.orocos.org/">Orocos</a>
\li <a href="http://www.ros.org">ROS</a>

\section yarp_papers Publications

\anchor Fitzpatrick2014 \li [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.
[doi: <a href="http://dx.doi.org/10.6092/JOSER_2014_05_02_p42">10.6092/JOSER_2014_05_02_p42</a>]

\anchor Fitzpatrick2008 \li [2] Towards Long-Lived Robot Genes, Paul Fitzpatrick, Giorgio Metta, and Lorenzo Natale,  Robotics and Autonomous Systems, 56(1):29-45, 2008.
[doi: <a href="http://doi.org/10.1016/j.robot.2007.09.014">10.1016/j.robot.2007.09.014</a>]

\anchor Metta2006 \li [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: <a href="https://doi.org/10.5772/5761">10.5772/5761</a>]

\anchor Paikan2014a \li [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.
[doi: <a href="http://dx.doi.org/10.6092/JOSER_2014_05_01_p80">10.6092/JOSER_2014_05_01_p80</a>]

\anchor Paikan2014b \li [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: <a href="https://doi.org/10.1109/IROS.2014.6942762">10.1109/IROS.2014.6942762</a>]

\anchor Paikan2015a \li [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: <a href="https://doi.org/10.1109/SEARIS.2015.7854100">10.1109/SEARIS.2015.7854100</a>]

\anchor Paikan2015b \li [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: <a href="https://doi.org/10.1109/IROS.2015.7353611">10.1109/IROS.2015.7353611</a>]



*/
