-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Open
Description
Feature request
Feature description
#4994 introduced the concept of WaypointStatus to keep track of the PENDING vs COMPLETED waypoints and that works well for one-shot call to NavigateThroughPoses.
Typically these missions can run for longer and it would be desirable to pause and resume.
This feature request is therefore to implement a pause/resume capability.
Implementation considerations
We started some implementation discussions already here
My custom approach:
Here is roughly how I have it implemented:
- The navigator client (some kind of mission manager) is responsible for keeping track of the status of all the waypoints by subscribing to the feedback of the navigator.
- My NavigateThroughPoses goal sends `WaypointStatus[]` instead of `nav_msgs/Goals` so that we can pass the statuses
- The navigator's internal `waypoint_statuses` is initialized with the ones provided from the client and only the `goals` that are PENDING are set on the blackboard
Steve's suggestions:
Some other thoughts for a hybrid approach:
- We could have a "ResumeNavigateThroughPoses" and "ResumeNavigateToPose" (with complimentary "Pause" ones) so that we have different semantically meaningful APIs for Start/Cancel/Pause/Resume that each have their contextual information. No need to change the main Action APIs, just have new ones that have that information. I think sharper messages are good to have rather than trying to cram everything into one.
- The Pause can return the state and the Resume can send it back.
- Or, the Pause can store that in the navigator itself and the Resume can load it back up in a new tree, so that the application doesn't have to care (but can still return it anyway in case they care or want to persist between reboots. If Resume is given values, it uses those instead of its internally stored one).
- Or, the Pause can simply stop ticking the tree to cold store it and the Resume can continue the ticking loop (TBD: some nodes may care about timing or have progress checking, that would need to be considered. Maybe we just `halt` the tree but keep its blackboard active to resume in a fresh new-tick state? That's essentially what your current implementation and the other ideas above do anyway by resume being a re-goal-submission)
Metadata
Metadata
Assignees
Labels
No labels