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 • 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.. Hand Detection Hand Detection Hand Detection Hand Detection ... ... Reaching Reaching Reaching Reaching /camera ... /arm/encs ... ROBOT ROBOT ROBOT ROBOT /arm/trqs ... ... /hand/touch … Grasping Grasping Grasping Grasping /arm/cmd ... ... Object rec. Object rec. Object rec. Object rec. ... ...
YARP + collaboration YARP is designed for easy interoperability with other systems • Built-in transport protocols: tcp, udp, ● mcast, shared memory Programs that cannot use YARP YARP Network “Standard” protocols: xml rpc, basic text, ● Programs use YARP client library http-speaking protocol, JSON formatted text mode protocol specific protocols protocol Programs that can talk YARP Special purpose protocols: Programs that don’t protocol but do not use ● YARP library want to use YARP A protocol for interoperability with ROS – A protocol for sending raw Bayer images – and decoding them receiver-side, which Switching protocol can be chained with other carriers A protocol for establishing priorities on – Tcp connection competing connections, which can be comes in PORT chained with other carriers Fingerprint file1dll/so/dylib Accept 8 bytes, check if they are recognized by any protocol #1 loaded protocol Fingerprint file2.dll/so/dylib protocol #2 If not, check fingerprint files for appropriate ... ... .dll/.so/.dylib to load using protocol fingeprint
Example YARP to ROS-tcp #1: what kind of name Order of messages when a YARP port (/a) PORT PORT servers are available and /a /b starts up and talks to a peer port (/b) using a #4: hey port /b, how do I contact them? this is port /a, let's protocol (P) talk using protocol YARP port numbers by default are managed P #2: what port number rather than random, to keep them stable for should I run connections from external sources on? PORT /root #3: how do (a Yarp name FILE SYSTEM I contact server) YARP port /b? configuration file #5: talk to me about #1: what kind of Order of messages when a NODE topic /t, please name servers PORT /b YARP port (/a) starts up are available /a+#/t Subscribed and publishes on a ROS and how do I to /t contact them? topic (/t) #4: hey “node” /b, here's an update on publishers of topic /t [gives list including /a] Different protocols: XML/RPC to • #2: I'm “node” /a roscore, TCPROS with ROS listening on (random) port node, number 45123, is Connections end up initiated in • that cool with you? roscore FILE SYSTEM #3: can you ask opposite directions (the ROS YARP any subscribers name server) configuration file on topic /t to talk Different strategy for allocation • to me? of port numbers In the end there's a logical • stream of data between point A and point B
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; } Polygon Polygon Consumer Provider service PolygonProvider { Polygon get(); setSides(int); }
Recommend
More recommend