Posted by @mxgrey:
I have a few different replies to address the concerns you’ve brought up. Each reply is independent and can be considered separately, so I’ll put each one in its own section.
(1) Further development on the rmf_task
library
Currently rmf_task
and more generally the task management features in RMF are still in a prototyping stage. What you’re seeing right now is not meant to be the end product. It’s true that the capabilities right now are quite narrow, and that modifications to the source code are needed in order to support more complex task requirements, but that’s not intended to be the final design.
We’re currently investigating ways to use PDDL or a similar
general purpose domain definition language to describe task constraints and use a task planner with broader capabilities like Google OR Tools to generate task plans. At that point, I’m skeptical that proprietary fleet managers would have any kind of capability that can’t be supported by RMF tools with a modest amount of configuring effort.
But I recognize that there are plenty of reasons to not accept this as a satisfactory answer, including:
- This feature isn’t available yet and we don’t have a timeline to offer for it yet, so it’s risky to rely on it
- OEMs and/or system integrators may feel more comfort with their own solutions
- There may be a desire for simpler and/or more predictable task planning logic that doesn’t involve general purpose planners
(2) Integrate more directly with the traffic planner
The traffic planning and task planning are really separate concerns within RMF. The “Full Control” fleet adapter rolls these two concerns together into the minimal possible API for the convenience of system integrators, but this does not mean that RMF is strictly imposing a binary choice between “Full Control” and “Traffic Light”. Those two APIs are only meant to be the easiest possible APIs to cover maybe 80%-90% of the use cases that we are currently anticipating. For more specific use cases, we can either develop more specific fleet adapter APIs or system integrators can use lower-level components of RMF (i.e. the tools in rmf_traffic_ros2
) to build their fleet adapter.
For cases where the fleet manager wants to come up with the detailed task management steps but is okay with deferring to RMF for path planning and traffic management, their fleet adapter could directly use the rmf_traffic
planner and the rmf_traffic_ros2
integration tools. Right now this would be a more difficult integration path than the “Full Control” or “Traffic Light” option, but we could try to develop a more narrow API for this if enough people want it.
(3) Allow custom tasks to be queued into the full control fleet adapter
Somewhat related to the previous section, we could do a refactor of the “Full Control” fleet adapter API so that it doesn’t lock the user into depending on rmf_task
and instead allows the system integrator to define custom tasks by specifying sequences of task phases. Perhaps we could even design it so that system integrators can define their own custom phases.
This option would allow for the most code reuse possible, and perhaps most importantly it would trivially provide infrastructure integration (i.e. talking to doors, lifts, dispensers, etc) while still allowing custom tasks to be defined without any changes needed to source code.
Am I correct to assume that it’s impossible to hand off a full task to a fleet manager and still expect to send it waypoint commands?
This really depends on the fleet manager more than anything. I suspect many fleet managers out there today will be vertically integrated in a way that doesn’t really accommodate this kind of use. But if anyone offers a fleet manager that is able+willing to determine the steps needed for a task while allowing a third party to specify the paths needed to complete those steps, then (2) or (3) may be an option. I have a feeling the most likely path forward will be for OEMs and/or system integrators to do (2) or (3) directly inside of their own fleet managers to make them natively RMF-complaint rather than use a fleet adapter layer.
(4) Having lots of “Traffic Light” fleets is okay, with some caveats
Is a scenario with most if not all fleet adapters being of type traffic_light something RMF would be well-suited to work with?
This should certainly be doable, with some important caveats. The traffic light system is designed to guarantee conflict-free traffic management, except at path endpoints. The assumption is that whenever traffic light fleets submit their path, that fleet has free reign at the start point and end point of the path, and that there is no risk of a conflict with another fleet before the robot leaves the start point or after the robot arrives at the end point. Deployments that use only traffic light fleets will have to make sure they arrange their deployment with this in mind, or that they make use of the upcoming reservation system to prevent endpoint conflicts.
That being said, I still hope to convince as many people as possible that the “Traffic Light” approach should be considered a stop gap while the industry gradually transitions, and not an end goal.