Calypso Module 13: ActionIntroductionThere are four kinds of Calypso actions:
Instantaneous ActionsInstantaneous actions take just a fraction of a second. Examples include "glow" and score operations ("+score", "-score", and "set-score"). Instantaneous actions can succeed and complete immediately. We'll examine those concepts more closely in the next section. Instantaneous actions can also fail if they are overridden by an earlier rule's action. This is in accordance with the Third Law: when actions compete, the earliest wins. Currently "glow" is the only instantaneous action that can fail this way. Score operations do not compete, so they always succeed. Because instantaneous actions take negligible time, they do not offer an "and then..." modifier because it would have no effect. The next section discusses actions that do offer this modifier.Extended-Duration ActionsExtended-duration actions take a while to complete but have well-defined end points. Examples include "say" and "play", which can generate lengthy audio output, or head and lift motions such as "look up" or "lift neutral". These actions can be carried out while the robot does other things at the same time, meaning other rules on the page should have the opportunity to run. So we make a distinction between success and completion. Extended-duration actions such as "say" and "play" succeed as soon as the action begins, but they don't complete until the action is finished. This convention allows rules indented under an extended-duration action to run at the same time as the action itself. For example, the folowing rules cause the red score to be incremented at the start of the robot's speech. The program will also switch immediately to page 2, and the speech will continue while the rules on page 2 run.
This example lighlights the fact that unlike incremental actions
(e.g., "move towards"), extended-duration actions are launched with a
single rule firing and then run until completion; they do not require
repetition in order to keep going.
Sometimes we want to wait for an extended-duration action to complete.
For example, we may want the robot to finish speaking before it
increments the red score and switches to the next page.
Extended-duration actions accept an optional "and then..." modifier
that delays the success of the action until it has completed.
Therefore any indented rules, which according to the Fourth Law are
dependent on the parent action's success, must wait until the parent
completes. Here is what the code looks like:
In summary: an extended-duration action can succeed as soon as the
action begins, allowing dependent rules below it to run right away. Adding an
"and then..." modifier delays the success until the action completes.
As a visual reminder that dependent (indented) rule firing will be
delayed until the action completes, the action tile and the "and
then..." tile are drawn with serrated edges.
Now let's look at the interaction between extended-duration actions
and instantatneous actions. How will the red and blue scores advance
when we run this program? Note that it does not use the "and then..."
modifier.
The above rules will run many times per second. You can see the blue
score run up quickly. On the first rule cycle the first rule will
launch a "say" action, but on successive cycles this action will fail
because the robot is already busy speaking and it can't say two things
at once. Since the indented rule can run as soon as the parent rule
succeeds, the red score is incremented right away, but it will not be
incremented again until the parent "say" action completes and another
"say" action is launched. Meanwhile the blue score continues to
advance on each rule cycle, i.e., multiple times per second.
What do you think would happen if we added an "and then..." modifier
to the "say" action? Think about it before reading further.
Answer: the change in behavior is a subtle one. Without the "and
then..." modifier, the red score is incremented as soon as the "say"
action launches. With the modifier, the red score isn't incremented
until the "say" action completes. In both versions, the red score is
incremented only once per "say" action, while the blue score is
incremented on every rule cycle.
There is another class of extended-duration actions: those that are
not guaranteed to succeed. Examples include "move ahead 100 mm" and
"turn left quarter". These actions can fail if the robot is picked up
or its cliff detector is triggered before the motion is complete.
Therefore these actions will not succeed until they complete. As a
visual reminder of this, the actions automatically receive a small
"and then..." modifier and are drawn with serrated edges.
The program below increments the red score every time the robot
advances by 50 mm. If the move action fails to complete for some
reason, such as the robot being picked up, the red score will not be
incremented. The small "and then..." modifier (not a separate tile)
is added automatically and cannot be deleted.
Suspending ActionsSuspending actions, such as "grab" and "drop", are complex behaviors that involve the entire robot. These actions can fail, so success is not assured until the action completes. Like extended-duration actions they are non-interruptible once launched. But because they require coordination between body positioning, head control, lift control, and sound output, they require execution of all other rules to be suspended while they run. Suspending actions are always displayed with serrated edges and a matching "and then..." modifier, indicating that indented rules will not run until the action succeeds. But with suspending actions, no other rules will run while the action is is being performed, even those that are not indented. The following program will run up the blue score at a high rate as long as there is no cube within reach; the "grab" action will fail on each rule cycle. When the robot becomes aware of a cube that it can grab, the "grab" action suspends rule execution while it runs, so the blue score stops advancing until the action either succeeds or fails. Note that this is only true when running on the real robot at present; "grab" in the simulator currently succeeds immediately. This may change in the future.WHEN DO grab and then... WHEN DO +score blue-score 1 point Incremental ActionsIncremental actions are the opposite of suspending actions: they take only a tiny step on each rule cycle, have no well-defined completion point, and do not suspend the rule interpreter. Examples include "move toward", "visit" "look around", and "move wander". Because they need an extended duration to have any noticeable effect, but take only a tiny step each time, they must be repeated over a lengthy sequence of rule cycles to accomplish anything.Incremental actions are intended to be interleaved with other rules, allowing the robot to continually evaluate its situation and modify the action or even abandon it in favor of another if circumstances change. For example, consider this classic pursue rule: The First Law tells us that the robot will move toward the closest cube. On each rule cycle it takes only a tiny step toward the cube. If we move another cube closer to the robot, its attention will shift to that cube and it will alter its course. If "move toward" were a suspending action the robot would not respond this way. (There is no way to force an incremental action to be suspending.) Incremental actions succeed after every step they take, allowing indented rules to run. But they never complete, so they do not accept an "and then..." modifier. Because incremental actions must be performed repeatedly, they can't work if they are dependent on a WHEN condition that is only true for an instant. Examples include "hear", "feel", and "timer". Rules of this form are automatically marked invalid, as shown below:WHEN see cube DO move toward it
To achieve the deired result, the "visit" action should be moved to a
separate page where it will not be dependent on the "hear" predicate.
We can use a "switch to page" action to reach that page when the
predicate is satisfied.
Next ModuleIn the next module you'll learn learn how logical operations are represented in Calypso.Back to Calypso Curriculum overview. Copyright © 2020 Visionary Machines LLC. |