rclUE
ROS2ActionServer.h
Go to the documentation of this file.
1 
19 #pragma once
20 
21 
22 
23 #include "ROS2Action.h"
24 
25 #include "ROS2NodeComponent.h"
26 
27 
28 
29 #include <rcl_action/action_server.h>
30 
31 
32 
33 #include "ROS2ActionServer.generated.h"
34 
35 
36 
56 class RCLUE_API UROS2ActionServer : public UROS2Action
57 
58 {
59 
60 
61 
62 public:
63 
64  static UROS2ActionServer* CreateActionServer(UObject* InOwner,
65 
66  const FString& InActionName,
67 
68  const TSubclassOf<UROS2GenericAction>& InActionClass,
69 
70  const FActionCallback& InGoalDelegate,
71 
72  const FSimpleCallback& InResultDelegate,
73 
74  const FSimpleCallback& InCancelDelegate,
75 
76  const UROS2QoS InGoalQoS = UROS2QoS::Services,
77 
78  const UROS2QoS InResultQoS = UROS2QoS::Services,
79 
80  const UROS2QoS InFeedbackQoS = UROS2QoS::Default,
81 
82  const UROS2QoS InCancelQoS = UROS2QoS::Services);
83 
84 
85 
94  virtual void Destroy() override;
95 
96 
97 
108  virtual void ProcessReady(rcl_wait_set_t* wait_set) override;
109 
110 
111 
127  void ProcessAndSendCancelResponse(const int InReturnCode);
128 
129 
130 
144  void SendGoalResponse();
145 
146 
147 
161  void SendFeedback();
162 
163 
164 
178  void SendResultResponse();
179 
180 
181 
201  void SetDelegates(const FActionCallback& InGoalDelegate,
202 
203  const FSimpleCallback& InCancelDelegate,
204 
205  const FSimpleCallback& InResultDelegate);
206 
207 
208 
210 
211  rcl_action_server_t server;
212 
213 
214 
215 private:
216 
217  rcl_clock_t ros_clock;
218 
219  rmw_request_id_t goal_req_id;
220 
221  rmw_request_id_t result_req_id;
222 
223  rmw_request_id_t cancel_req_id;
224 
225 
226 
227  FActionCallback GoalDelegate;
228 
229  FSimpleCallback ResultDelegate;
230 
231  FSimpleCallback CancelDelegate;
232 
233 
234 
245  virtual void InitializeActionComponent() override;
246 
247 };
248 
249 
250 
264 class RCLUE_API UROS2ActionServerComponent : public UActorComponent
265 
266 {
267 
268 
269 
270 public:
271 
272 
277  UROS2ActionServer* ActionServer = nullptr;
278 
279 
280 
282 
283 
288  FString ActionName = TEXT("");
289 
290 
291 
293 
294 
299  TSubclassOf<UROS2GenericAction> ActionClass;
300 
301 
302 
304 
305 
311 
312 
313 
315 
316 
322 
323 
324 
326 
327 
333 
334 
335 
337 
338 
343  UROS2QoS FeedbackQoS = UROS2QoS::Default;
344 
345 
346 
347  FActionCallback GoalDelegate;
348 
349  FSimpleCallback ResultDelegate;
350 
351  FSimpleCallback CancelDelegate;
352 
353 
354 
355  virtual void BeginPlay() override
356 
357  {
358 
359  if (ActionServer == nullptr)
360 
361  {
362 
363  ActionServer = UROS2ActionServer::CreateActionServer(this,
364 
365  ActionName,
366 
367  ActionClass,
368 
369  GoalDelegate,
370 
371  ResultDelegate,
372 
373  CancelDelegate,
374 
375  GoalQoS,
376 
377  ResultQoS,
378 
379  FeedbackQoS,
380 
381  CancelQoS);
382 
383  }
384 
385  Super::BeginPlay();
386 
387  };
388 
389 };
390 
UROS2Action::ProcessReady
virtual void ProcessReady(rcl_wait_set_t *wait_set)
Determine the relevant action functions to call.
UROS2QoS::Services
@ Services
UMETA(DisplayName = "Parameters"),.
UROS2Action
Base class implementing ROS2 actions from which ActionServer and ActionClient should inherit.
Definition: ROS2Action.h:82
UROS2ActionServer::server
rcl_action_server_t server
ROS2 action server from rclc.
Definition: ROS2ActionServer.h:211
UROS2ActionServerComponent::ActionClass
TSubclassOf< UROS2GenericAction > ActionClass
this is pass to UROS2ActionServer::ActionClass in #BeginPlay
Definition: ROS2ActionServer.h:299
UROS2ActionServer
Class implementing ROS2 action servers. Wrapper class of rclc action server. Callbacks are set throug...
Definition: ROS2ActionServer.h:56
UROS2QoS
UROS2QoS
used to set QoS policies
Definition: rclcUtilities.h:177
ROS2Action.h
Base class implementing ROS2 actions from which ActionServer and ActionClient should inherit.
UROS2ActionServerComponent
ROS2 Action server Component. Wrapper of UROS2ActionServer for BP.
Definition: ROS2ActionServer.h:264
UROS2Action::Destroy
virtual void Destroy()
Destroy this actor component.
UROS2Action::InitializeActionComponent
virtual void InitializeActionComponent()
Initialize ROS2 Action. Should be implemented in UROS2ActionServer and UROS2ActionClient.
ROS2NodeComponent.h
Class implementing ROS2 node.