  Autonomous robots combine skills to form increasingly complex behaviors,
called missions. While skills are often programmed at a relatively low
abstraction level, their coordination is architecturally separated and often
expressed in higher-level languages or frameworks. State machines have been the
go-to language to model behavior for decades, but recently, behavior trees have
gained attention among roboticists. Although several implementations of
behavior trees are in use, little is known about their usage and scope in the
real world.How do concepts offered by behavior trees relate to traditional
languages, such as state machines? How are concepts in behavior trees and state
machines used in actual applications? This paper is a study of the key language
concepts in behavior trees as realized in domain-specific languages (DSLs),
internal and external DSLs offered as libraries, and their use in open-source
robotic applications supported by the Robot Operating System (ROS). We analyze
behavior-tree DSLs and compare them to the standard language for behavior
models in robotics:state machines. We identify DSLs for both behavior-modeling
languages, and we analyze five in-depth.We mine open-source repositories for
robotic applications that use the analyzed DSLs and analyze their usage. We
identify similarities between behavior trees and state machines in terms of
language design and the concepts offered to accommodate the needs of the
robotics domain. We observed that the usage of behavior-tree DSLs in
open-source projects is increasing rapidly. We observed similar usage patterns
at model structure and at code reuse in the behavior-tree and state-machine
models within the mined open-source projects. We contribute all extracted
models as a dataset, hoping to inspire the community to use and further develop
behavior trees, associated tools, and analysis techniques.
