-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Description
Feature request
Operations Server: A generic executor for non-navigation tasks at some poses
Feature description
I propose a system designed to execute arbitrary non-navigation actions (e.g., toggling signal lights, setting manipulator poses, controlling onboard equipment) at specific positions or at current robot's position.
Currently, the WaypointFollower or Behavior Server is the standard tool for task execution, but it has limitations in this specific context, like: does not natively support defining multiple distinct actions at a single point or executing actions in parallel with motion without significant customization; doesnot have unified interface, doesnot have unified control node for BT (like FollowPath for example).
Possible solution:
The Operations Server acts as a generic service that allows executing various combinations of actions (even simultaneously) via a unified interface. Is servers as unified executor that is using Operation Plugins, each of them have same interface (like Controller Plugins do). The server itself should probably track the robots position and execute actions if some pose is achieved, but this still should be discussed in more details. The server itself should also be capable of pausing and resuming, in other words - take care of the non-navigation actions states. Also there should be some flag for blocking/non-blocking operations - need to discuiss in more details.
This feature allows for scenarios such as:
- Parallel execution: Driving while simultaneously performing an action (e.g., a lawnmower engaging its blades).
- Strict path adherence: Executing actions at precise points on a fixed route.
- Waypoint following with different actions: Executing actions at specific waypoints. Each waypoint can contain any set of actions.
- Complex state handling: Managing "True Pause" scenarios where pausing the robot also requires transitioning hardware to a safe state (e.g., stopping the rotor blades, not just the wheels).
Implementation considerations
To integrate this logic into the NAV2 ecosystem, the implementation relies on the following components:
1. Operations Server
A standalone server responsible for executing non-navigation tasks. It exposes a unified interface and can be used even without navigation or BT.
2. Custom Interfaces
A new .action messages types, that would be used by new Navigator plugins.
3. Navigator Plugins
A custom Navigator plugins each one for new behavior (follow path + make some operations along; follow waypoints or waypoint with actions; etc. ).
4. Behavior Tree Integration
- Unified Control Node: Like FollowPath node, but for actions.
- Pause and Resume Logic: The
Operator Serverand its plugins must support a "True Pause." This ensures that when the navigation is paused, the external equipment is also halted or moved to a safe state (e.g., stopping a cutting rotor), rather than just cancelling the goal. This functionality also already exist as BT nodes.
The logic for when to trigger currently implemented in the tree with special decorator, but this approach isn't stable and definitely not safe, so I think we should move the pose tracking directly to the Operations server and modify the logic.
I would provide more details later in following messages.