  Robots that support humans by performing useful tasks (a.k.a., service
robots) are booming worldwide. In contrast to industrial robots, the
development of service robots comes with severe software engineering
challenges, since they require high levels of robustness and autonomy to
operate in highly heterogeneous environments. As a domain with critical safety
implications, service robotics faces a need for sound software development
practices. In this paper, we present the first large-scale empirical study to
assess the state of the art and practice of robotics software engineering. We
conducted 18 semi-structured interviews with industrial practitioners working
in 15 companies from 9 different countries and a survey with 156 respondents
(from 26 countries) from the robotics domain. Our results provide a
comprehensive picture of (i) the practices applied by robotics industrial and
academic practitioners, including processes, paradigms, languages, tools,
frameworks, and reuse practices, (ii) the distinguishing characteristics of
robotics software engineering, and (iii) recurrent challenges usually faced,
together with adopted solutions. The paper concludes by discussing
observations, derived hypotheses, and proposed actions for researchers and
practitioners.
