Recent advances in robotics technology have made it viable to assign complex tasks to large numbers of inexpensive robots. The robots as an ensemble form into a multi-robot system (MRS), which can be utilized for many applications where a single robot is not efficient or feasible. MRS can be used for a wide variety of application domains such as military, agriculture, smart home, disaster relief, etc. It offers higher scalability, reliability, and efficiency as compared to single robot system. However, it is non-trivial to develop and deploy MRS applications due to many challenging issues such as distributed computation, collaboration, coordination, and real-time integration of robotic modules and services. To make the development of multi-robot applications easier, researchers have proposed various middleware architectures to provide programming abstractions that help in managing the complexity and heterogeneity of hardware and applications. With the help of middleware, an application developer can concentrate on the high-level logic of applications instead of worrying about low-level hardware and network details. In this chapter, we survey state of the art in both distributed MRS and middleware being used for developing their applications. We provide a taxonomy that can be used to classify the MRS middleware and analyze existing middleware functionalities and features. Our work will help researchers and developers in the systematic understanding of middleware for MRS and in selecting or developing the appropriate middleware based on the application requirements.