Skip to content

ROS2 / Navigation Server Heartbeats #1754

@SteveMacenski

Description

@SteveMacenski

As discussed in #1745, we really have no way of dealing with a random server crashing mid-run. If a user-provided controller plugin crashes the server, the BT node calling it will spin indefinitely because it can't know it failed.

For servers with feedback, we can track the feedback and if it stops coming in, then we know there's a problem, but not all actions (or services for that matter) provide feedback.

We should think about a general way in ROS2 that we can have heartbeats of all the servers and report or transition into inactive if one that is critical is unresponsive for some period of time. In ROS1, we could do this with Bond, but that wasn't translated over to ROS2. In ROS2, we have lifecycle nodes, so potentially we can use the lifecycle API to ping nodes to see if they're active.

Because we have the lifecycle manager, this may be a suitable use for it to ping and transition down all its nodes if one is failing to work for safety. I think once this is complete, we should look at moving Lifecycle Manager to its own repository with its nav2_utils and removing Navigation2 specific code (there's only a little). At that point, its a stand-alone lifecycle manager that anyone can use for their lifecycle nodes and also does heartbeat checking.

Metadata

Metadata

Assignees

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