Class GenericServiceClient

Nested Relationships

Nested Types

Inheritance Relationships

Base Type

  • public rclcpp::ClientBase

Class Documentation

class GenericServiceClient : public rclcpp::ClientBase

Compatibility GenericClient for ROS 2 Humble. Replicates the subset of rclcpp::GenericClient API used by OperationManager:

Implemented directly on top of rcl C APIs and dynamically loaded typesupport, which are available in all ROS 2 distros from Humble onward.

Public Types

using Request = void*
using Response = void*
using SharedResponse = std::shared_ptr<void>
using Promise = std::promise<SharedResponse>
using Future = std::future<SharedResponse>
using SharedPtr = std::shared_ptr<GenericServiceClient>

Public Functions

inline GenericServiceClient(rclcpp::node_interfaces::NodeBaseInterface *node_base, rclcpp::node_interfaces::NodeGraphInterface::SharedPtr node_graph, const std::string &service_name, const std::string &service_type, rcl_client_options_t &client_options)

Construct a GenericServiceClient.

Parameters:
  • node_base – Node base interface (for rcl node handle)

  • node_graph – Node graph interface (for service availability checks)

  • service_name – Fully-qualified service name

  • service_type – Service type string, e.g. “std_srvs/srv/Trigger”

  • client_options – rcl client options

~GenericServiceClient() override = default
inline std::shared_ptr<void> create_response() override

Create a response message (allocated via introspection)

inline std::shared_ptr<rmw_request_id_t> create_request_header() override

Create a request header for associating responses.

inline void handle_response(std::shared_ptr<rmw_request_id_t> request_header, std::shared_ptr<void> response) override

Handle incoming response — dispatches to the pending promise.

inline FutureAndRequestId async_send_request(const Request request)

Send a request asynchronously. Returns a FutureAndRequestId.

Parameters:

request – Pointer to the deserialized request message (void*)

inline bool remove_pending_request(int64_t request_id)

Remove a pending request (called on timeout to prevent resource leak)

struct FutureAndRequestId

FutureAndRequestId — wraps a std::future<SharedResponse> and associated request_id, mirroring rclcpp::GenericClient::FutureAndRequestId for API compatibility.

Public Functions

inline FutureAndRequestId(Future f, int64_t id)
FutureAndRequestId(FutureAndRequestId &&other) noexcept = default
FutureAndRequestId &operator=(FutureAndRequestId &&other) noexcept = default
FutureAndRequestId(const FutureAndRequestId&) = delete
FutureAndRequestId &operator=(const FutureAndRequestId&) = delete
inline auto get()
inline bool valid() const noexcept
inline void wait() const
template<class Rep, class Period>
inline std::future_status wait_for(const std::chrono::duration<Rep, Period> &timeout) const

Public Members

Future future
int64_t request_id