Replies: 3 comments 1 reply
-
The "full control" and "traffic light" APIs are robust to delays, whatever the source of the delay may be. That means that as long as you provide accurate up-to-date information to those APIs, they will manage the traffic correctly. One feature that's arguably currently missing from those APIs is the ability to say "I'm going to intentionally wait here for a long time because the vendor/operator is demanding it". The current system for handling delays makes an assumption that the robot is always trying its best to resume its assigned work, so you won't get the best possible behavior out of the traffic management system if the robot is actually intentionally stopped for an extended period of time. Other robots might end up waiting for it to move out of the way, incorrectly trusting that it's trying its best to move along.
The lowest level interfaces are captured by the message packages in rmf_internal_msgs, but we do not currently recommend anyone developing based on those message definitions directly. The message definitions are subject to changes that are not API or ABI compatible as we continue to flesh out new features and better communication quality. Instead you could consider looking at the classes provided by rmf_traffic_ros2 which wrap up the internal ROS messages in a way that should be API and ABI stable, even as we add features and change implementation. |
Beta Was this translation helpful? Give feedback.
-
The full control adapter does not specifically handle the PAUSED mode, instead, what I'm understanding from the code is that
So in other words, the fleet_adapter does not say to rmf "hey, robotX is paused, take that into account", instead it says "hey, robotX has Y seconds of delay, take that into account" Is that correct ? Also what happens if the max delay threshold is crossed ?
Indeed, I saw this being mentioned in other questions, the rmf_traffic_ros2 classes are what I'm looking for, however, its not evident to understand what they do. I'm assuming the Adapter class is wrapper of those Participant, Writer... classes. But since I'm writing my own fleet adapter -- and I guess this might be useful for other developers --, it would be very helpful to understand what the scheduler is expecting from the fleet adapter and vice versa, and how those classes come into play. Thanks again for the fast response. |
Beta Was this translation helpful? Give feedback.
-
@mxgrey Are there any updates on this matter? I'm trying to manage a fully working stop() function, but, as you said, the traffic management doesn't take into account an intentional MODE_PAUSED, therefore it republish a new plan. Did you extend the functionalities of the high-level API to take into account this issue? Thank you. |
Beta Was this translation helpful? Give feedback.
-
Hello
It might happen that a robot gets interrupted by the vendor's system for any reason. Does RMF handle that ? I see that there is a RobotMode.MODE_PAUSED, but I haven't found that mode being used anywhere else than in the TrafficLight adapter.
Is it correct to say that it is the adapter node's responsibility to handle that ? How do you communicate that information back to RMF Core ? Is it even handled ?
Btw, I have a hard time finding the possible interfaces between an adapter and rmf core. The documentation says that it is "tightly integrated", however it would be very useful to know how, and what, that way a developer will know the extend of his possibilities :)
Thank you again :)
Beta Was this translation helpful? Give feedback.
All reactions