Skip to content

Enable Pause/Resume in NavigateThroughPoses & NavigateToPose #5213

@tonynajjar

Description

@tonynajjar

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions