Task goals and multi-tasking

At any time, a robotic agent has one of more tasks, each of which has a goal to bring about or to maintain some state of the environment using the robotic devices that the agent controls. As an example, an agent able to control a robotic arm at the end of which is a gripper so that the arm may be used to pick up and put down small objects on a table, might be given a task to build a tower of labelled wooden blocks. The task goal would be something like tower([block3,block2,block7]). If an agent has several tasks it can interleave the attempts to achieve a compatible subset of its task goals, alternating the use of its robotic resources between the tasks. Tasks waiting for the use of robotic resources are queued and become active only when the robotic resources they need have been released by another task or tasks. Tasks release robotic resources only when they have completed some atomic sub-task, a task that should only be interrupted if its execution pre-condition no longer holds. If two tasks at some stage will use different robotic resources, and their respective action uses will not interfere with each other, the robotic resources may be used in parallel, e.g. two robotic arms may be moved concurrently providing they will not clash.

The percept construction is usually done by a process external to the robotic agent, and is often programmed in an imperative language. Each new batch of percept facts is used to update the percept facts in the agent's BS that record sensed properties of the robot's current environment state, properties relevant to its controlling agent's tasks. On each update, percepts that no longer hold are removed and new percepts are added. Percepts that persist from the previous snapshot of the environment state are left in the BS. Keeping only the lastest percepts is sufficient for many applications. However, each time T the BS is updated as well as remembering each new percept as a fact such as open(room1,door2), we can also remember a time stamped meta fact remembered_at(open(room1,door2),T). If in some subsequent percepts update at time T$'$ open(room1,door2) is no longer included, the meta fact forgotten_at(open(room1,door2),T$'$) is added and open(room1,door2) is removed. This way the different time intervals in which these key perceptions were once believed is rememberd.

After each such percept update the agent's control program for each active task will determine the appropriate next action to make progress towards, or to maintain the task goal. It may also communicate certain percept updates to other agents, e.g. a mobile robot observing that a door is now closed could broadcast this new belief via a publish/subscribe server.

If the environment is the real world, changes may be brought about by people and acts of nature - such as wind. To an individual agent, these other changes to the environment are exogenous events. They may help or hinder the agent in achieving a task goal. Ideally a task action selection program should be robust to such exogenous events. That is, when the effect of the event has been sensed and reported in a percepts update, the control program should take advantage of any help and recover from any hindrance. This robustness is a key feature of teleo-reactive control.