Why not just use SMACH?
Insufficient support, it constantly crashes, and is crippled by the use of Python. If you’re going to run an asynchronous state machine, you’re probably going to need multiple threads, and you can’t run multiple threads with Python.
Let’s start over, and build a real state machine package with multi-threading support using C++.
But I read an article by some Stanford guys on the internet saying State Machines are old-fashioned and that we should all use Binary Search Trees Instead?
Yeah, I read that article too (this is Brett), and I’m unimpressed by their assertions.
The bottom-line is that every robot needs a state machine, and to date there has not been a reliable state machine package for robots running ROS. Given the fact that important packages such as the Navigation Stack and MoveIt! already use the actionlib interface, we feel that what is needed is a high performance state machine package that operates asynchronously and uses the actionlib interface.
What is the difference between St’s & Sti’s?
Very little, but…
Because Sti’s are reuseable by multiple Superstates, they have different rules with regards to the include files & namespaces.