YARP
Yet Another Robot Platform
Compiling a YARP hello world program

The easiest way to write your first program using YARP is with CMake.

Make a directory called hello, and within it put a CMakeLists.txt file like this:

# Copyright (C) 2006-2020 Istituto Italiano di Tecnologia (IIT)
# Copyright (C) 2006-2010 RobotCub Consortium
# All rights reserved.
#
# This software may be modified and distributed under the terms of the
# BSD-3-Clause license. See the accompanying LICENSE file for details.
# YARP needs CMake 3.0 or greater
cmake_minimum_required(VERSION 3.12)
# find YARP
find_package(YARP COMPONENTS os REQUIRED)
# set up our program
add_executable(hello)
# declare our source files
target_sources(hello PRIVATE hello.cpp)
# link with YARP libraries
target_link_libraries(hello PRIVATE YARP::YARP_os
YARP::YARP_init)

And here's a simple test program, call it hello.cpp

/*
* Copyright (C) 2006-2020 Istituto Italiano di Tecnologia (IIT)
* Copyright (C) 2006-2010 RobotCub Consortium
* All rights reserved.
*
* This software may be modified and distributed under the terms of the
* BSD-3-Clause license. See the accompanying LICENSE file for details.
*/
#include <yarp/os/all.h>
#include <stdio.h>
using namespace yarp::os;
int main(int argc, char *argv[]) {
// Set up YARP
// Make two ports called /hello/in and /hello/out
// We'll send "Bottles" (a simple nested list container) between these ports
BufferedPort<Bottle> inPort, outPort;
bool ok = inPort.open("/hello/in");
ok = ok && outPort.open("/hello/out");
if (!ok) {
fprintf(stderr, "Failed to create ports.\n");
fprintf(stderr, "Maybe you need to start a nameserver (run 'yarpserver')\n");
return 1;
}
// Make a connection between the output port and the input port
yarp.connect(outPort.getName(),inPort.getName());
for (int i=0; i<10; i++) {
// prepare a message to send
Bottle&out = outPort.prepare();
out.clear();
out.addString("Hello");
out.addInt32(i);
printf("Sending %s\n", out.toString().c_str());
// send the message
outPort.write(true);
// read the message
Bottle *in = inPort.read();
if (in==NULL) {
fprintf(stderr, "Failed to read message\n");
return 1;
}
printf("Received %s\n", in->toString().c_str());
}
return 0;
}

Now make a build directory inside the hello folder, then from the build directory run CMake (see Using CMake), and compile!

This example is available in the example/cmake/hello directory of the YARP source code.

yarp::os::Bottle
A simple collection of objects that can be described and transmitted in a portable way.
Definition: Bottle.h:73
yarp::os::Bottle::toString
std::string toString() const override
Gives a human-readable textual representation of the bottle.
Definition: Bottle.cpp:214
yarp::os::Bottle::clear
void clear()
Empties the bottle of any objects it contains.
Definition: Bottle.cpp:124
all.h
yarp::os::BufferedPort::read
T * read(bool shouldWait=true) override
Read an available object from the port.
Definition: BufferedPort-inl.h:154
main
int main(int argc, char *argv[])
Definition: yarpros.cpp:261
yarp::os::BufferedPort::prepare
T & prepare()
Access the object which will be transmitted by the next call to yarp::os::BufferedPort::write.
Definition: BufferedPort-inl.h:114
yarp::os::BufferedPort
A mini-server for performing network communication in the background.
Definition: BufferedPort.h:64
yarp::os::BufferedPort::open
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
Definition: BufferedPort-inl.h:41
yarp::os::Bottle::addInt32
void addInt32(std::int32_t x)
Places a 32-bit integer in the bottle, at the end of the list.
Definition: Bottle.cpp:143
yarp::os::BufferedPort::getName
std::string getName() const override
Get name of port.
Definition: BufferedPort-inl.h:108
yarp::os::Bottle::addString
void addString(const char *str)
Places a string in the bottle, at the end of the list.
Definition: Bottle.cpp:173
yarp::os::BufferedPort::write
void write(bool forceStrict=false)
Write the current object being returned by BufferedPort::prepare.
Definition: BufferedPort-inl.h:126
yarp::os
An interface to the operating system, including Port based communication.
Definition: AbstractCarrier.h:17
yarp::os::Network
Utilities for manipulating the YARP network, including initialization and shutdown.
Definition: Network.h:786
yarp
The main, catch-all namespace for YARP.
Definition: environment.h:18