diff --git a/_docs/concepts/client_library/parameters/class_diagram.puml b/_docs/concepts/client_library/parameters/class_diagram.puml new file mode 100644 index 00000000..177acaab --- /dev/null +++ b/_docs/concepts/client_library/parameters/class_diagram.puml @@ -0,0 +1,169 @@ +@startuml + +skinparam monochrome true +skinparam componentStyle uml2 + +hide members + +package rclcpp <> { + class "SyncParametersClient" as sync_client + class "AsyncParametersClient" as async_client + package executor <> { + class "Executor" as executor + } + package node_interfaces <> { + class "NodeBase" as node_base + } +} + +sync_client *-up-> async_client +sync_client *-up-> executor +sync_client o-up-> node_base + +executor *-right-> "0..*" node_base + +@enduml + +@startuml + +skinparam monochrome true +skinparam componentStyle uml2 + +hide members + +package rclcpp <> { + note as N1 + * GP = rcl_interfaces::srv::GetParameters + * GPT = rcl_interfaces::srv::GetParametersTypes + * SP = rcl_interfaces::srv::SetParameters + * SPA = rcl_interfaces::srv::SetParametersAtomically + * LP = rcl_interfaces::srv::ListParameters + * DP = rcl_interfaces::srv::DescribeParameters + end note + + class "AsyncParametersClient" as async_client + class "Client< template >" as client_template + class "Client< **GP** >" as client_get_params + class "Client< **GPT** >" as client_get_param_types + class "Client< **SP** >" as client_set_params + class "Client< **SPA** >" as client_set_params_atomic + class "Client< **LP** >" as client_list_params + class "Client< **DP** >" as client_describe_params + class "ClientBase" as client_base +} + +package rcl <> { + class "rcl_node_t" as rcl_node_t + class "rcl_client_t" as rcl_client_t +} + +async_client *-up-> client_get_params +async_client *-up-> client_get_param_types +async_client *-up-> client_set_params +async_client *-up-> client_set_params_atomic +async_client *-up-> client_list_params +async_client *-up-> client_describe_params + +client_template <|-down- client_get_params +client_template <|-down- client_get_param_types +client_template <|-down- client_set_params +client_template <|-down- client_set_params_atomic +client_template <|-down- client_list_params +client_template <|-down- client_describe_params + +client_base <|-- client_template +client_base *-up-> rcl_client_t +client_base o-up-> rcl_node_t + +@enduml + +@startuml + +skinparam monochrome true +skinparam componentStyle uml2 + +hide members + +package rclcpp <> { + class "Node" as node + + class "NodeBase" as node_base + class "NodeGraph" as node_graph + class "NodeLogging" as node_logging + class "NodeTimers" as node_timers + class "NodeTopics" as node_topics + class "NodeServices" as node_services + class "NodeClock" as node_clock + class "NodeParameters" as node_parameters + class "NodeTimeSource" as node_time_source + class "NodeWaitables" as node_waitables +} + +node *-up-> node_base +node *-up-> node_graph +node *-up-> node_logging +node *-up-> node_timers +node *-up-> node_topics +node *-up-> node_services +node *-up-> node_clock +node *-up-> node_parameters +node *-up-> node_time_source +node *-up-> node_waitables + +@enduml + +@startuml + +skinparam monochrome true +skinparam componentStyle uml2 + +hide members + +package rclcpp <> { + note as N1 + * GP = rcl_interfaces::srv::GetParameters + * GPT = rcl_interfaces::srv::GetParametersTypes + * SP = rcl_interfaces::srv::SetParameters + * SPA = rcl_interfaces::srv::SetParametersAtomically + * LP = rcl_interfaces::srv::ListParameters + * DP = rcl_interfaces::srv::DescribeParameters + end note + + class "NodeParameters" as node_parameters + class "ParameterService" as parameter_service + class "Service< template >" as service_template + class "Service< **GP** >" as service_get_params + class "Service< **GPT** >" as service_get_param_types + class "Service< **SP** >" as service_set_params + class "Service< **SPA** >" as service_set_params_atomic + class "Service< **LP** >" as service_list_params + class "Service< **DP** >" as service_describe_params + class "ServiceBase" as service_base +} + +package rcl <> { + class "rcl_node_t" as rcl_node_t + class "rcl_service_t" as rcl_service_t +} + +node_parameters *-up-> parameter_service + +parameter_service *-up-> service_get_params +parameter_service *-up-> service_get_param_types +parameter_service *-up-> service_set_params +parameter_service *-up-> service_set_params_atomic +parameter_service *-up-> service_list_params +parameter_service *-up-> service_describe_params + +service_template <|-down- service_get_params +service_template <|-down- service_get_param_types +service_template <|-down- service_set_params +service_template <|-down- service_set_params_atomic +service_template <|-down- service_list_params +service_template <|-down- service_describe_params + +service_base <|-down- service_template +service_base *-up-> rcl_service_t +service_base o-up-> rcl_node_t + +@enduml \ No newline at end of file diff --git a/_docs/concepts/client_library/parameters/sequence_diagram.puml b/_docs/concepts/client_library/parameters/sequence_diagram.puml new file mode 100644 index 00000000..2e489bc0 --- /dev/null +++ b/_docs/concepts/client_library/parameters/sequence_diagram.puml @@ -0,0 +1,53 @@ +@startuml + +skinparam monochrome true +skinparam componentStyle uml2 + +participant "rclcpp::SyncParametersClient" as sync_client +participant "rclcpp::AsyncParametersClient" as async_client +participant "rclcpp::Client" as client +participant "rcl" as rcl +participant "rclcpp::Executor" as executor + +note left of client + **ServiceT** = rcl_interfaces::srv::SetParameters + + **ServiceT::Request** = rcl_interfaces::srv::SetParameters_Request + **ServiceT::Response** = rcl_interfaces::srv::SetParameters_Response + + **ServiceT::Request::SharedPtr** = std::shared_ptr + **ServiceT::Response::SharedPtr** = std::shared_ptr + + **SharedRequest** = ServiceT::Request::SharedPtr + **SharedResponse** = ServiceT::Response::SharedPtr + + **SharedFuture** = std::shared_future + + **CallbackType** = std::function +end note + +sync_client -> async_client : **set_parameters**(\n const std::vector& **parameters**,\n std:function callback = nullptr) +async_client -> async_client : **compute_request**()\n -> (SharedRequest) **request** +async_client -> client : **async_send_request**(\n SharedRequest **request**,\n CallbackType **cb**) +client -> client : **get_client_handle**()\n -> (rcl_client_t*) **client** +client -> rcl : **rcl_send_request**(\n const rcl_client_t* **client**,\n const void* **request**,\n int64_t* **sequence_number**) +client -> client : **add_pending_request**(\n int64_t **sequence_number**,\n SharedPromise **promise**,\n CallbackType **cb**,\n SharedFuture **future**) +async_client <-- client : (SharedFuture) **future** +note left + **future** is not used here, but it is the parameter of **cb** +end note +sync_client <-- async_client : (std::shared_future>)\n **set_parameter_result** +sync_client -> executor : **spin_until_future_complete**(??) +group spin_once(timeout) + rcl <- executor : **rcl_wait**(timeout) + rcl --> executor : (rcl_ret_t) status + group execute_client() + rcl <- executor : **rcl_take_response**(\n &client,\n &request_header,\n &response) + rcl --> executor : (rcl_ret_t) status + client <- executor : **handle_response**(\n request_header,\n response) + client --> executor : void + end +end +sync_client <-- executor : (rclcpp::executor::FutureReturnCode) exec_result + +@enduml \ No newline at end of file