-
Notifications
You must be signed in to change notification settings - Fork 15
Description
Background
#42, under Signalling in PR description
More comments: #42 (comment), #42 (comment)
The current implementation of RMF as a transporter workcell uses its main BT to both dispatch as well as track the entire multi-stop delivery task, signalling the correct workcell whenever it reaches it (by listening to RMF dispenser requests and results).
This causes the RMF transportation workcell to be unable to handle parallel work orders that require AMR deliveries, as
- the first work order's BT is still running, tracking the ongoing delivery
- it prevents an AMR mismatch at workcells (mentioned in Introduce a RMF transportation workcell #42, Signalling), where in the case of 2 orders involving
workcell_1,workcell_1is waiting foramr_1to handle the first order, howeveramr_2reaches first.
Some ideas
With these cases in mind, there will be a need to iterate on the RMF integration. With my still-flawed knowledge of the Nexus ecosystem, I'm wondering if we can have each workcell (based on the work order) dispatch an RMF transporter request to themselves, before doing any work. So each workcell is responsible for the dispatch of the AMR to themselves only.
For multi workcell with transportation, I foresee the first workcell in the order will need to perform the basic RMF dispatch request, and get allocated an AMR, whereas other subsequent workcells in the order, will need to use RMF's direct dispatching, to request for the same AMR.
- work order comes in with sequence
workcell_1andworkcell_2 workcell_1performs dispatch request for AMR, gets assignedamr_1- 'amr_1
reachesworkcell_1, signals, the workcell does its job, and signalsworkcell_2` workcell_2performs a direct dispatch, requesting foramr_1(this queues up the next RMF task), signalsworkcell_1workcell_1completes the job, signalsamr_1to complete the current RMF taskamr_1starts the next queued direct dispatch and heads toworkcell_2
the workflow goes on
The reason for the overlapping signals between workcell_1 and workcell_2 is to prevent another work order from snatching amr_1 in that short window that workcell_1 is done.
Off the top of my head, I can think of the issue where multiple work orders are sent out at the same time, and they all get piled onto the same AMR by RMF. We can explore using the decommissioning function of RMF, to prevent allocating new work orders onto AMRs that are already busy. This will ensure each AMR will only ever be handling tasks from 1 work order, and only when the AMR is no longer needed for the current work order, will it be recommissioned, to accept new tasks.
Thinking out loud for now, and still not super familiar with the codebase, happy to discuss more or be corrected if I misunderstand some concepts.