-
Notifications
You must be signed in to change notification settings - Fork 60
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Introduce a robot queuing system #214
Comments
Have been looking into some of core designs, features and current issues and challenges. I would suggest a simpler design and approach based on my experience that can handle this well. Idea: Rather than looking at this as a problem of path planning and resolution, I would look at it from perspective of behavior co-ordination. Design: I would introduce a Coordinator control software(essentially a ROS2 Node pkg, think of it like Traffic Light Agent/Police) . That would provide a mechanism of keeping an internal state of each robot/agv here. State would be like a "simple state machine" for each participant as and when they appear/approach. [States could be as below: Along with I will introduce an "Active write" flag. With designated path/track (a bit floated inside as well) as shown in my rough-sketch. when bot "A" approaches the Zone/Cafe to pick up Coke, it will be registered with Traffic-Coordinator as "Registered". The other bot, bot "B" approaches in same fashion (perhaps from other entry or similar), will get registered by Traffic-Coordinator and will maintain it's own internal states. BOT "A" will pick up, move out and will release "active" flag and after exit will be unregistered by Traffic-Coordinator. Bot "B" upon receiving active flag will happily start moving to pickup and will not have anymore conflicts. Scale up: Advantage: No Lock contention, simpler resource management, internal states per bot design, better performance Happy to drill down and discuss more on my design, approach HLD etc, if required @mxgrey @Yadunund |
@itsiashu my understanding is that you are describing some sort of centralized traffic manager. I'll let @mxgrey and @Yadunund respond to that. In the current generation of open-rmf we made certain design decisions based on our needs to deploy in our specific settings. With future generations we would hope to add more flexibility and allow schemes like what you are suggesting. Reading your proposal one question that jumps to mind is what if a path is permanently blocked by a robot, does that mean other robots don't re-route? On a side note there is now a reservation system in open-rmf: #325 Im not sure if we want to tackle this queuing behavior in the current generation. It should not be too hard if we extend the reservation node a little. In any case the reservation node does manage queues. |
@arjo129 On your question:
That comes under Health monitoring and maintenance via Heart Beat. Think of it like a practical scenario, In such cases, it's not advisable either way, to allow the other traffic on designated path or in zone. The typical use cases and business logic, I have dealt with, is put that Zone/Path in failed condition by reporting "error". Yes, Zone would publish their own status via Traffic Coordinator service that other BOTs/AGVs are subscribed to. Next There are two ways to deal with and come out of this:
Having said that, I implemented both designs and I would say 1). and 2.a) are more safer and allow more control to operators via monitoring service. Implementation and design wouldn't be too difficult, via QT/C++ Simulation and design can be provided for Operator control. Design itself will be modular and comprehensive to deal all such cases:
|
The behavior described is certainly fine for managing a given queue and if we design the APIs to be modular, it can be one type of behaviors users can rely on (ie allow queuing policy/behaviors to be customizable). The bigger problems to tackle imo are
|
Agree. We can take a mix of approach here for our business logic.
A running Queue length can be important too.
If we allow for exiting, perhaps, we can do first for the recent BOTs that were newly added to allow better movement If we keep queue-size small enough at a time (say e.g. 3), Wait and exit will be easier to handle. This also help to keep Zone not much congested at a time during pick ups. If we allow Bots to enter zone while there may be one or more Bots, there are few more things to be handled:
2 b. Next version could be with multiple pick points so, there more be more than "ACTIVE" BOT but each "SPOT_FOR_PICKING" for a different PICK_UP Point(uuid) Depending on practical considerations, 2b) could be medium to quite tricky but deployment scenarios and business logic will guide. |
Thank you for providing the pointer. I reviewed the changes. Good level of details there!! Yes, with requirements, it will be an extension of handling queuing spots as well either by current Reservation Node or a separate Queuing node for Zone conflict resolution purpose.
Sure, timeline and priorities will drive. And based on that I can be a 2 factor scheme:
Nice thing about it, that it can be abstracted out as a separate fleet-adapter API for customers, that can be enabled via config --- bool _zone_queing_enable = true/false |
There are cases where multiple mobile robots may be simultaneously blocked waiting for the same resource, such as a lift, workcell, or access to a pickup/dropoff point. In those cases it is useful to have a formal queuing system that allows the robots to smoothly and consistently approach the resource 1-by-1 as it becomes available to each of them.
We should develop a queuing system by first developing the reservation system and then integrating the reservation capabilities with the traffic planner. We should also add a feature to the traffic editor that allows system integrators to graphically define what the queuing behavior should be.
The text was updated successfully, but these errors were encountered: