At Amazon Robotics we built a robot control system that executed state charts (described in an extended version of SCXML) in real-time for managing the core behaviors of the robot.

To help people not have write the charts by hand, we built a DSL (originally in python, then in Kotlin), to author robot behaviors that then compiled down to SCXML. Conditions on guards were written in a tiny expression language we wrote, enabling you to look at various signals from the hardware and software at runtime and make decisions based off them.

The nice part of this setup was that it opened up a path for doing more formal analysis on the behavior. E.g. you could easily find "terminal" states that you could enter but not leave. You can also imagine things like checking things like which states in a parallel or in concurrently running machines, aren't allowed to be active, and verifying there is no path in the state graph that allowed that to occur. There were other nice properties as well, like getting a graphical visualization of your program state "for free"

It was definitely a more constrained model than a "full featured" programming language, but for our use case, controlling machines in a reliable way, it worked out very well!