Hi Randy. This week I re-read the 80 pages on subsumption in "Mobile Robots", and as mentioned before, they always compute all behaviors, but have 2 different arbiters in different examples.
In one example, they talk about how the arbiter uses "message passing", and they go down through the entire list. The most-critical behaviors, like bump, are at the **bottom** of the list. This way, the messages of the more-critical behaviors will replace those of less-critical higher up in the list.
In the other example, they use a nested if-then-else structure, and place the more-critical behaviors at the **top** of the list. This way, if one fires, then the rest of the list is abandoned. Obviously it works either way.
Also, you're right about the idea of keeping "state current". All of the different behaviors are implemented as separate FSMs, and with many of these FSMs having a #of different states. So, this is one reason to compute every behavior on every time-tick.
And this is where the "augmented" part of augmented-FSM comes in. Sometimes, you want a behavior to stay in each state for a certain length of time, and then go to the next state. Eg, Escape might be .... back up for 2-sec, then turn to the right for 1-sec, then go forward. All the while, of course, you're still computing the entire list of behaviors, and doing the arbitration. Therefore, this can be implemented either as separate cpus entirely, as Brooks talked about, or by using some scheme of multi-tasking on a single cpu.
I can see one problem, however, with continually processing behavioral FSMs in the background while others have taken over the machine. Let's say, one behavior with 6-states gets control, and running to completion will take 20-sec. But after only 8-sec, a higher priority behavior takes over, and completes in 5-sec. Well, you still have the first behavior underway and somewhere in its time-frame to completion. Now, if it then takes over the machine again, it may have actually skipped having performed a state or two, and when it restarts executing, it may cause some havoc in the machine because those states were skipped.
This might lead to highly pathological behavior. I think this can be a serious problem, and so your comment about "forcing the state number back to zero" above makes some sense. I'm not sure is this is considered in Brooks/Jones' stuff. Something to look up.
See the other thread I started. I'm hacking a tracked RAD the Robot base. It's probably not able to run outside over rough terrain very well, however. Other than that, it's pretty cool. Large enough to run around the house fairly quickly, over bare and carpeted floors, and also to carry lots of sensors.
Done the mechanical and electrical hacks now, and ready to start programming. Got a wireless cam so I can see where it's going from afar, plus zigbee comms so it can report back its internal state info, plus I can control its directions. Should be a good base for testing pure subsumption techniques. EG, I will be able to specifically tell it to do something, like go into a corner, and then see how well it can get itself out, etc. Put it into a situation where canyoning can take place, etc.