rclUE
ROS2Subscriber.h
Go to the documentation of this file.
1 
17 #pragma once
18 
19 
20 
21 #include <Components/ActorComponent.h>
22 
23 #include <CoreMinimal.h>
24 
25 
26 
27 // rclUE
28 
29 #include "Msgs/ROS2GenericMsg.h"
30 
31 #include "ROS2NodeComponent.h"
32 
33 #include "ROS2Topic.h"
34 
35 
36 
37 #include "ROS2Subscriber.generated.h"
38 
39 
40 
54 class RCLUE_API UROS2Subscriber : public UROS2Topic
55 
56 {
57 
58 
59 
60 public:
61 
76  static UROS2Subscriber* CreateSubscriber(UObject* InOwner,
77 
78  const FString& InTopicName,
79 
80  const TSubclassOf<UROS2GenericMsg>& InMsgClass,
81 
82  const FSubscriptionCallback& InCallback,
83 
84  const UROS2QoS InQoS = UROS2QoS::Default);
85 
86 
87 
106  static UROS2Subscriber* CreateSubscriber(UObject* InOwner,
107 
108  const FString& InTopicName,
109 
110  const TSubclassOf<UROS2GenericMsg>& InMsgClass,
111 
112  const FSubscriptionCallback& InCallback,
113 
114  const rmw_qos_profile_t& InCustomQoS);
115 
116 
117 
126  virtual void Destroy() override;
127 
128 
129 
131 
132 
137  FSubscriptionCallback Callback;
138 
139 
140 
147  virtual void ProcessReady();
148 
149 
150 
151 
156  void SetDelegates(const FSubscriptionCallback& InCallback);
157 
158 
159 
160  bool Ready = false;
161 
162 
163 
165 
166  rcl_subscription_t rcl_subscription;
167 
168 
169 
170 protected:
171 
180  virtual void InitializeTopicComponent();
181 
182 };
183 
184 
185 
199 class RCLUE_API UROS2SubscriberComponent : public UActorComponent
200 
201 {
202 
203 
204 
205 public:
206 
207 
212  UROS2Subscriber* Subscriber = nullptr;
213 
214 
215 
217 
218 
223  FString TopicName = TEXT("");
224 
225 
226 
228 
229 
234  TSubclassOf<UROS2GenericMsg> MsgClass = UROS2GenericMsg::StaticClass();
235 
236 
237 
239 
240 
245  UROS2QoS QoS = UROS2QoS::Default;
246 
247 
248 
250 
251 
256  FSubscriptionCallback Callback;
257 
258 
259 
260 
265  virtual void DefaultCreateSubscriber()
266 
267  {
268 
269  if (Subscriber == nullptr)
270 
271  {
272 
273  Subscriber = UROS2Subscriber::CreateSubscriber(this, TopicName, MsgClass, Callback, QoS);
274 
275  }
276 
277  }
278 
279 
280 
281  virtual void BeginPlay() override
282 
283  {
284 
285  DefaultCreateSubscriber();
286 
287  Super::BeginPlay();
288 
289  };
290 
291 };
292 
UROS2SubscriberComponent::DefaultCreateSubscriber
virtual void DefaultCreateSubscriber()
Definition: ROS2Subscriber.h:265
UROS2Subscriber::CreateSubscriber
static UROS2Subscriber * CreateSubscriber(UObject *InOwner, const FString &InTopicName, const TSubclassOf< UROS2GenericMsg > &InMsgClass, const FSubscriptionCallback &InCallback, const UROS2QoS InQoS=UROS2QoS::Default)
Create a new UROS2Subscriber of custom type.
UROS2Topic::Destroy
virtual void Destroy()
Destroy topic and TopicMessage.
UROS2QoS
UROS2QoS
used to set QoS policies
Definition: rclcUtilities.h:177
UROS2SubscriberComponent::Callback
FSubscriptionCallback Callback
this is pass to UROS2Subscriber::Callback in #BeginPlay
Definition: ROS2Subscriber.h:256
UROS2SubscriberComponent
ROS2 Subscriber Component. Wrapper of UROS2Subscriber for BP.
Definition: ROS2Subscriber.h:199
UROS2Subscriber::rcl_subscription
rcl_subscription_t rcl_subscription
ROS2 subscriber.
Definition: ROS2Subscriber.h:166
UROS2Topic::InitializeTopicComponent
virtual void InitializeTopicComponent()
Initialize ROS2 Topic. Should be implemented in UROS2Publisher and UROS2Subscriber.
ROS2Topic.h
Class implementing ROS2 topic.
UROS2Topic
ROS2 topic class. Parent class of UROS2Publisher and UROS2Subscriber.
Definition: ROS2Topic.h:88
ROS2GenericMsg.h
This should be refactored with other generic ROS2 types (Msgs, Sensors, Actions).
UROS2Subscriber::Callback
FSubscriptionCallback Callback
Delegate which is Bound with #UpdateMessage by SetDelegates.
Definition: ROS2Subscriber.h:137
UROS2Subscriber
ROS2 Subscriber class.
Definition: ROS2Subscriber.h:54
ROS2NodeComponent.h
Class implementing ROS2 node.