<<Include(Menus/ROSGraphConcepts)>>
<<TOC(3)>>

== Overview ==

The ROS Master provides naming and registration services to the rest of the [[Nodes|nodes]] in the ROS system. It tracks publishers and subscribers to [[Topics|topics]] as well as [[Services|services]]. The role of the Master is to enable individual ROS nodes to locate one another. Once these nodes have located each other they communicate with each other peer-to-peer.

The Master also provides the [[Parameter Server]].

The Master is most commonly run using the `roscore` command, which loads the ROS Master along with other essential components. 

== XMLRPC API ==

''Advanced Users Only''

The ROS Master provides an XMLRPC-based API, which ROS client libraries, such as [[roscpp]] and [[rospy]], call to store and retrieve information. For a detailed API listing, please see the [[ROS/Master_API|Master API]] page. Most ROS users will not need to interact with this API directly.

== Master Name Service Example ==

For instance, let's say we have two Nodes; a Camera node and an Image_viewer node. A typical sequence of events would start with Camera notifying the master that it wants to publish images on the topic "images":

{{attachment:ROS_master_example_english_1.png}} [[attachment:ROS_master_example_english_1.dia|DIA version]]

Now, Camera publishes images to the "images" topic, but nobody is subscribing to that topic yet so no data is actually sent. Now, Image_viewer wants to subscribe to the topic "images" to see if there's maybe some images there:

{{attachment:ROS_master_example_english_2.png}} [[attachment:ROS_master_example_english_2.dia|DIA version]]

Now that the topic "images" has both a publisher and a subscriber, the master node notifies Camera and Image_viewer about each others existence so that they can start transferring images to one another:

{{attachment:ROS_master_example_english_3.png}} [[attachment:ROS_master_example_english_3.dia|DIA version]]

== Implementation ==

In ROS 1.1, the implementation of the ROS Master is provided by the [[rosmaster]] package. Prior to this release, the Master was part of the [[rospy]] package.