YARP: a middle way for a robotic middleware E. Ceseracciu, D. - - PowerPoint PPT Presentation

yarp a middle way for a robotic middleware
SMART_READER_LITE
LIVE PREVIEW

YARP: a middle way for a robotic middleware E. Ceseracciu, D. - - PowerPoint PPT Presentation

YARP: a middle way for a robotic middleware E. Ceseracciu, D. Domenichelli, P. Fitzpatrick, G. Metta, L. Natale, A. Paikan iCub Facility Istituto Italiano di Tecnologia, Genova YARP Peer-to-peer, loosely coupled, communication


slide-1
SLIDE 1

YARP: a middle way for a robotic middleware

  • E. Ceseracciu, D. Domenichelli, P. Fitzpatrick, G. Metta, L. Natale, A. Paikan

iCub Facility Istituto Italiano di Tecnologia, Genova

slide-2
SLIDE 2

YARP

Reaching Reaching Reaching Reaching

... ... ... ...

ROBOT ROBOT ROBOT ROBOT …

Hand Detection Hand Detection Hand Detection Hand Detection Grasping Grasping Grasping Grasping Object rec. Object rec. Object rec. Object rec.

/arm/encs /arm/trqs /hand/touch /arm/cmd /camera ... ... ... ... ... ...
  • Peer-to-peer, loosely coupled, communication
  • Flexibility, fits well with other systems
  • Very stable code base >10 years old
  • Minimal dependencies
  • Easy install with binaries on many

OSes/distributions (Ubuntu, Debian, Windows, MacOs)

  • Several protocols:

– Built-in: tcp/udp/mcast – Plug-ins: ROS tcp, xml rpc, mjpg etc..

slide-3
SLIDE 3

YARP + collaboration

  • YARP is designed for easy interoperability with other systems

YARP Network

Programs use YARP client library Programs that don’t want to use YARP Programs that cannot use YARP

Programs that can talk YARP protocol but do not use YARP library

text mode protocol specific protocols

PORT Tcp connection comes in Accept 8 bytes, check if they are recognized by any loaded protocol If not, check fingerprint files for appropriate .dll/.so/.dylib to load using protocol fingeprint

Switching protocol

Fingerprint protocol #1 Fingerprint protocol #2 ...

file1dll/so/dylib file2.dll/so/dylib

...

  • Built-in transport protocols: tcp, udp,

mcast, shared memory

  • “Standard” protocols: xml rpc, basic text,

http-speaking protocol, JSON formatted protocol

  • Special purpose protocols:

A protocol for interoperability with ROS

A protocol for sending raw Bayer images and decoding them receiver-side, which can be chained with other carriers

A protocol for establishing priorities on competing connections, which can be chained with other carriers

slide-4
SLIDE 4

Example YARP to ROS-tcp

FILE SYSTEM YARP configuration file PORT /a

#1: what kind

  • f name

servers are available and how do I contact them?

PORT /root (a Yarp name server) #2: what port number should I run

  • n?

#3: how do I contact port /b? PORT /b

#4: hey port /b, this is port /a, let's talk using protocol P

FILE SYSTEM YARP configuration file PORT /a+#/t

#1: what kind of name servers are available and how do I contact them?

roscore (the ROS name server)

#2: I'm “node” /a listening on (random) port number 45123, is that cool with you? #3: can you ask any subscribers

  • n topic /t to talk

to me? NODE /b Subscribed to /t #4: hey “node” /b, here's an update on publishers of topic /t [gives list including /a] #5: talk to me about topic /t, please

Order of messages when a YARP port (/a) starts up and talks to a peer port (/b) using a protocol (P) YARP port numbers by default are managed rather than random, to keep them stable for connections from external sources Order of messages when a YARP port (/a) starts up and publishes on a ROS topic (/t)

  • Different protocols: XML/RPC to

roscore, TCPROS with ROS node,

  • Connections end up initiated in
  • pposite directions
  • Different strategy for allocation
  • f port numbers
  • In the end there's a logical

stream of data between point A and point B

slide-5
SLIDE 5

Tools for rapid development

  • YARP builder and manager: graphical tools to design, monitor and run applications
  • IDL language to specify interfaces between modules and datatypes

struct Polygon { 1: list<i32> vertices; } service PolygonProvider { Polygon get(); setSides(int); }

Polygon Provider Polygon Consumer