-
Notifications
You must be signed in to change notification settings - Fork 24
Description
There may be "tasks" that need to run indefinitely or permanently. For example, a patrolling task or a continuous delivery task (where we expect a new delivery to always be ready to go as soon as the previous delivery is finished).
In these cases, it's best to assign the continuous task to one robot, and then exclude the robot from being assigned any further tasks until the indefinite task is canceled or terminates some other way. (Note that we'll assume these indefinite tasks will be responsible for having battery recharging phases)
For the planner, we could indicate that a task is indefinite by changing Estimate::finish_state to return a std::optional<State> where a std::nullopt value means that it will run indefinitely (as opposed to Task::Model::estimate_finish where returning std::nullopt means that the task cannot be performed).
When a branch in the planner assigns an indefinite task to a robot, that branch cannot assign any more tasks to that robot.