RapyutaSimulationPlugins
RRROS2BaseSensorComponent.h
Go to the documentation of this file.
1 
13 #pragma once
14 
15 
16 
17 // UE
18 
19 #include "CoreMinimal.h"
20 
21 #include "GenericPlatform/GenericPlatformMath.h"
22 
23 
24 
25 // rclUE
26 
27 #include "ROS2NodeComponent.h"
28 
29 #include "ROS2Publisher.h"
30 
31 
32 
33 // RapyutaSimulationPlugins
34 
35 #include "Core/RRGeneralUtils.h"
36 
38 
39 
40 
41 #include "RRROS2BaseSensorComponent.generated.h"
42 
43 
44 
45 DECLARE_LOG_CATEGORY_EXTERN(LogROS2Sensor, Log, All);
46 
47 
48 
49 
54 class RAPYUTASIMULATIONPLUGINS_API URRGaussianNoise : public UObject
55 
56 {
57 
58 
59 
60 public:
61 
63 
64  {
65 
66  Init();
67 
68  }
69 
70 
71 
72  URRGaussianNoise(const float InMean, const float InCov)
73 
74  {
75 
76  Init(InMean, InCov);
77 
78  }
79 
80 
81 
82 
87  virtual void Init()
88 
89  {
90 
91  GaussianRNG = std::normal_distribution<>(Mean, std::sqrt(Cov));
92 
93  }
94 
95 
96 
97  virtual void Init(const float InMean, const float InCov)
98 
99  {
100 
101  Mean = InMean;
102 
103  Cov = InCov;
104 
105  Init();
106 
107  }
108 
109 
110 
111 
116  virtual float Get()
117 
118  {
119 
120  return GaussianRNG(Gen);
121 
122  }
123 
124 
125 
126 
131  float Mean = 0.f;
132 
133 
134 
135 
140  float Cov = 0.01f;
141 
142 
143 
144 protected:
145 
146  std::random_device Rng;
147 
148 
149 
150  std::mt19937 Gen = std::mt19937(Rng());
151 
152 
153 
154  std::normal_distribution<> GaussianRNG;
155 
156 };
157 
158 
159 
175 class RAPYUTASIMULATIONPLUGINS_API URRROS2BaseSensorComponent : public USceneComponent
176 
177 {
178 
179 
180 
181 public:
182 
192 
193 
194 
224  virtual void InitalizeWithROS2(UROS2NodeComponent* InROS2Node,
225 
226  const FString& InPublisherName = TEXT(""),
227 
228  const FString& InTopicName = TEXT(""),
229 
230  const UROS2QoS InQoS = UROS2QoS::SensorData);
231 
232 
233 
249  virtual void CreatePublisher(const FString& InPublisherName = TEXT(""));
250 
251 
252 
270  virtual void PreInitializePublisher(UROS2NodeComponent* InROS2Node, const FString& InTopicName = TEXT(""));
271 
272 
273 
295  virtual void InitializePublisher(UROS2NodeComponent* InROS2Node, const UROS2QoS InQoS = UROS2QoS::SensorData);
296 
297 
298 
314  virtual void Run();
315 
316 
317 
333  virtual void Stop();
334 
335 
336 
348  virtual void SensorUpdate()
349 
350  {
351 
352  }
353 
354 
355 
367  virtual void SetROS2Msg(UROS2GenericMsg* InMessage)
368 
369  {
370 
371  }
372 
373 
374 
375 
380  TSubclassOf<UROS2Publisher> SensorPublisherClass = URRROS2BaseSensorPublisher::StaticClass();
381 
382 
383 
384 
389  URRROS2BaseSensorPublisher* SensorPublisher = nullptr;
390 
391 
392 
393 
398  TSubclassOf<UROS2GenericMsg> MsgClass = UROS2GenericMsg::StaticClass();
399 
400 
401 
402 
407  FString TopicName = TEXT("sensor_data");
408 
409 
410 
411 
416  FString FrameId = TEXT("sensor_frame");
417 
418 
419 
420 
425  int32 PublicationFrequencyHz = 30;
426 
427 
428 
430 
431 
436  bool bAppendNodeNamespace = true;
437 
438 
439 
440 
445  bool bIsValid = true;
446 
447 
448 
449 protected:
450 
451 
456  FTimerHandle TimerHandle;
457 
458 };
459 
URRGaussianNoise::Init
virtual void Init()
Definition: RRROS2BaseSensorComponent.h:87
URRGaussianNoise::URRGaussianNoise
URRGaussianNoise()
Definition: RRROS2BaseSensorComponent.h:62
URRROS2BaseSensorComponent::SetROS2Msg
virtual void SetROS2Msg(UROS2GenericMsg *InMessage)
Set sensor data to ROS 2 msg. This method should be overwritten by child class.
Definition: RRROS2BaseSensorComponent.h:367
URRROS2BaseSensorComponent::SensorUpdate
virtual void SensorUpdate()
Update Sensor data. This method should be overwritten by child class.
Definition: RRROS2BaseSensorComponent.h:348
URRROS2BaseSensorComponent::TimerHandle
FTimerHandle TimerHandle
Definition: RRROS2BaseSensorComponent.h:456
URRGaussianNoise::Get
virtual float Get()
Definition: RRROS2BaseSensorComponent.h:116
RRROS2BaseSensorPublisher.h
Base Sensor Publisher class. Other sensor publisher class should inherit from this class.
URRGaussianNoise::Rng
std::random_device Rng
Definition: RRROS2BaseSensorComponent.h:146
URRGaussianNoise::GaussianRNG
std::normal_distribution GaussianRNG
Definition: RRROS2BaseSensorComponent.h:154
URRGaussianNoise::URRGaussianNoise
URRGaussianNoise(const float InMean, const float InCov)
Definition: RRROS2BaseSensorComponent.h:72
RRGeneralUtils.h
General utils.
URRROS2BaseSensorComponent
Base ROS 2 Sensor Component class. Other sensors class should inherit from this class.
Definition: RRROS2BaseSensorComponent.h:175
URRROS2BaseSensorPublisher
Base Sensor Publisher class. Other sensor publisher class should inherit from this class.
Definition: RRROS2BaseSensorPublisher.h:54
URRGaussianNoise
Definition: RRROS2BaseSensorComponent.h:54
URRGaussianNoise::Init
virtual void Init(const float InMean, const float InCov)
Definition: RRROS2BaseSensorComponent.h:97
DECLARE_LOG_CATEGORY_EXTERN
DECLARE_LOG_CATEGORY_EXTERN(LogROS2Sensor, Log, All)