Skip to content

Add thing which adds things to wait set #588

@sloretz

Description

@sloretz

Feature request

This is a request for a feature to allow waiting on action servers and action clients. Action servers and Action clients are to be implemented in libraries on top of the core rcl and rclcpp features in rcl_action and rclcpp_action. Adding them to the wait set in rcl is covered by ros2/rcl#335.

Feature description

This feature would allow an executor to wait on action servers and action clients which have servers/timers/clients/subscribers created in C. Since the individual entities don't have rclcpp::<Entity>Base types they can't be used by the existing callback group and executor APIs.

With #519 in mind it could make sense to change callback groups to be the class that adds things to the wait set, but I don't think there is time before the Crystal release. Instead this feature is proposing to add a new class to be used along with callback groups.

Implementation considerations

Assuming class called Waitable with virtual APIs

  • virtual get_number_of_entities(size_t * num_subscriptions, ...)
    • Called by executor when determining how big to allocate the wait set
  • virtual void add_to_wait_set(rcl_wait_set_t *)
    • Called by executor when populating the wait set
    • Because get_number_of_entities() and add_to_wait_set() are separate calls, it must be assumed that the number of entities in a Waitable are constant between the two calls. For actions this assumption holds because the number of waitable entities is constant for the life of the server and client.
  • virtual bool can_execute(rcl_wait_set_t *)
    • Return true if there is something that can be executed in the waitset.
  • virtual void execute();
    • It's assumed the waitable will set some state within itself during can_execute() so that it does the right thing here.

Using Waitable requires:

Requires ros2/rcl#335 so Executor and Waitable can know which entities belong to which.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions