Behavior trees replaced finite state machines as the default architecture for high-level robot control. Here is the formalism that makes them reactive, the BehaviorTree.CPP and ROS2 Nav2 implementation, and an honest account of where BTs genuinely beat the alternatives and where they do not.
Behavior-Trees
-
Behavior Trees for Robotics