You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The task planner uses A* search to find a set of assignments for all robots such that an overall cost is minimized. The cost here is the sum of the differences of the estimated finish_time and given earliest_start_time for each task. Every time a new node is evaluated, ie, an unassigned task is assigned to an agent, we check if a ChargeBattery task should be added before/after. It is expected that anytime a task is added, the total cost of the node will increase as the finish_time for any task will always be greater or equal to the earliest_start_time.
However, this is violated in an edge cases due to a bug in the implementation of ChargeBattery::estimate_finish(). Here, when determining the time to recharge the battery, we first compute the battery_soc after the robot has reached its charger. Then the required increase in soc from the current value to the agent's recharge_soc is determined. However, if the user set the recharge_soc to a small value such that it is below the soc of the agent at the charger, a negative duration for recharging gets computed. There is an assert in place but it doesn't have any effect in release builds.
As a result the finish_time could end up earlier than the earliest_start_time. When this happens, adding a ChargeBattery task to the node actually lowers the cost. Hence this assignment will remain in place while other requests get allocated accordingly.
The text was updated successfully, but these errors were encountered:
The task planner uses A* search to find a set of assignments for all robots such that an overall cost is minimized. The cost here is the sum of the differences of the estimated
finish_time
and givenearliest_start_time
for each task. Every time a new node is evaluated, ie, an unassigned task is assigned to an agent, we check if a ChargeBattery task should be added before/after. It is expected that anytime a task is added, the total cost of the node will increase as thefinish_time
for any task will always be greater or equal to theearliest_start_time
.However, this is violated in an edge cases due to a bug in the implementation of
ChargeBattery::estimate_finish()
. Here, when determining the time to recharge the battery, we first compute the battery_soc after the robot has reached its charger. Then the required increase in soc from the current value to the agent'srecharge_soc
is determined. However, if the user set therecharge_soc
to a small value such that it is below the soc of the agent at the charger, a negative duration for recharging gets computed. There is an assert in place but it doesn't have any effect in release builds.As a result the
finish_time
could end up earlier than theearliest_start_time
. When this happens, adding aChargeBattery
task to the node actually lowers the cost. Hence this assignment will remain in place while other requests get allocated accordingly.The text was updated successfully, but these errors were encountered: