Overview
A ROS client library is a collection of code that eases the job of the ROS programmer. It takes many of the ROS concepts and makes them accessible via code. In general, these libraries let you write ROS nodes, publish and subscribe to topics, write and call services, and use the Parameter Server. Such a library can be implemented in any programming language, though the current focus is on providing robust C++ and Python support.
Main client libraries
roscpp : roscpp is a C++ client library for ROS. It is the most widely used ROS client library and is designed to be the high performance library for ROS.
rospy: rospy is the pure Python client library for ROS and is designed to provide the advantages of an object-oriented scripting language to ROS. The design of rospy favors implementation speed (i.e. developer time) over runtime performance so that algorithms can be quickly prototyped and tested within ROS. It is also ideal for non-critical-path code, such as configuration and initialization code. Many of the ROS tools are written in rospy to take advantage of the type introspection capabilities. The ROS Master, roslaunch, and other ros tools are developed in rospy, so Python is a core dependency of ROS.
Experimental client libraries
rosoct: rosoct is a client library for Octave, which is an open-source alternative to Matlab. It's primary use has been for providing access to Octave math libraries, such as the signal processing libraries available on Octave Forge.
roslisp: roslisp is a client library for LISP and is currently being used for the development of planning libraries. It supports both standalone node creation and interactive use in a running ROS system.
rosjava: rosjava is a client library for Java. It is an experimental implementation that currently relies on the Java Native Interface (JNI) on top of roscpp. As such, it is not ideal for portable Java code, but it does enable you to easily integrate Java-based libraries with ROS on top of a Unix-like platform.
roslua: roslua is a client library for Lua, which is a light-weight yet powerful, embeddable scripting language. The client library is currently in an experimental and active development stage.
See also: Implementing Client Libraries