  Autonomous robots combine a variety of skills to form increasingly complex
behaviors called missions. While the skills are often programmed at a
relatively low level of abstraction, their coordination is architecturally
separated and often expressed in higher-level languages or frameworks.
Recently, the language of Behavior Trees gained attention among roboticists for
this reason. Originally designed for computer games to model autonomous actors,
Behavior Trees offer an extensible tree-based representation of missions.
However, even though, several implementations of the language are in use,
little is known about its usage and scope in the real world. How do behavior
trees relate to traditional languages for describing behavior? How are behavior
tree concepts used in applications? What are the benefits of using them?
  We present a study of the key language concepts in Behavior Trees and their
use in real-world robotic applications. We identify behavior tree languages and
compare their semantics to the most well-known behavior modeling languages:
state and activity diagrams. We mine open source repositories for robotics
applications that use the language and analyze this usage. We find that
Behavior Trees are a pragmatic language, not fully specified, allowing projects
to extend it even for just one model. Behavior trees clearly resemble the
models-at-runtime paradigm. We contribute a dataset of real-world behavior
models, hoping to inspire the community to use and further develop this
language, associated tools, and analysis techniques.
