18const FString USensorsManagerComponent::ComponentHierarchySeparator = TEXT(
"_|_");
20USensorsManagerComponent::USensorsManagerComponent()
22 PrimaryComponentTick.bCanEverTick =
false;
25USensorsManagerComponent::~USensorsManagerComponent()
29ALidar* USensorsManagerComponent::SpawnLidar(
const FTransform& transform,
bool isTransformRelativeToComponent,
const FString sensorIdentifier,
const FString sensorName,
FLidarParameters lidarParameters,
bool simulateSensor,
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
32 if (!attachToComponent && !attachToBone.IsNone())
34 attachToComponent = GetOwner()->GetRootComponent();
37 FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
48 ASensor* CastedSensor = Cast<ASensor>(lidar);
50 AddSensorDestroyListener(CastedSensor);
52 AttachSensor(CastedSensor, attachToComponent, attachToBone);
54 Lidars.Emplace(lidar);
57 OnLidarSpawned.Broadcast(lidar);
58 OnSensorSpawned.Broadcast(CastedSensor);
63ACamera* USensorsManagerComponent::SpawnCamera(
const FTransform& transform,
bool isTransformRelativeToComponent,
const FString sensorIdentifier,
const FString sensorName,
FCameraBaseParameters cameraParameters,
bool simulateSensor,
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
66 if (!attachToComponent && !attachToBone.IsNone())
68 attachToComponent = GetOwner()->GetRootComponent();
71 FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
82 ASensor* CastedSensor = Cast<ASensor>(camera);
84 AttachSensor(CastedSensor, attachToComponent, attachToBone);
86 AddSensorDestroyListener(CastedSensor);
88 Cameras.Emplace(camera);
93 OnCameraSpawned.Broadcast(camera);
94 OnSensorSpawned.Broadcast(CastedSensor);
99AThermalCamera* USensorsManagerComponent::SpawnThermalCamera(
const FTransform& transform,
bool isTransformRelativeToComponent,
const FString sensorIdentifier,
const FString sensorName,
FThermalCameraParameters thermalCameraParameters,
bool simulateSensor,
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
103 if (!attachToComponent && !attachToBone.IsNone())
105 attachToComponent = GetOwner()->GetRootComponent();
108 FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
119 ASensor* CastedSensor = Cast<ASensor>(thermalCamera);
121 AttachSensor(CastedSensor, attachToComponent, attachToBone);
123 AddSensorDestroyListener(CastedSensor);
125 ThermalCameras.Emplace(thermalCamera);
128 thermalCamera->
OnCameraWindowClosed.AddDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
130 OnThermalCameraSpawned.Broadcast(thermalCamera);
131 OnSensorSpawned.Broadcast(CastedSensor);
133 return thermalCamera;
136ADVSCamera* USensorsManagerComponent::SpawnDVSCamera(
const FTransform& transform,
bool isTransformRelativeToComponent,
const FString sensorIdentifier,
const FString sensorName,
FDVSCameraParameters DVSCameraParameters,
bool simulateSensor,
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
139 if (!attachToComponent && !attachToBone.IsNone())
141 attachToComponent = GetOwner()->GetRootComponent();
144 FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
153 createdModel =
DVSCamera->GetSensorModel();
155 ASensor* CastedSensor = Cast<ASensor>(DVSCamera);
157 AttachSensor(CastedSensor, attachToComponent, attachToBone);
159 AddSensorDestroyListener(CastedSensor);
161 DVSCameras.Emplace(DVSCamera);
164 DVSCamera->OnCameraWindowClosed.AddDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
166 OnDVSCameraSpawned.Broadcast(DVSCamera);
167 OnSensorSpawned.Broadcast(CastedSensor);
172ASemanticSegmentationCamera* USensorsManagerComponent::SpawnSegmentationCamera(
const FTransform& transform,
bool isTransformRelativeToComponent,
const FString sensorIdentifier,
const FString sensorName,
FCameraBaseParameters cameraParameters,
bool simulateSensor,
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
176 if (!attachToComponent && !attachToBone.IsNone())
178 attachToComponent = GetOwner()->GetRootComponent();
181 FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
185 if (!segmentationCamera)
192 ASensor* CastedSensor = Cast<ASensor>(segmentationCamera);
194 AttachSensor(CastedSensor, attachToComponent, attachToBone);
196 AddSensorDestroyListener(CastedSensor);
198 SegmentationCameras.Emplace(segmentationCamera);
201 segmentationCamera->
OnCameraWindowClosed.AddDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
203 OnSegmentationCameraSpawned.Broadcast(segmentationCamera);
204 OnSensorSpawned.Broadcast(CastedSensor);
206 return segmentationCamera;
209ADepthCamera* USensorsManagerComponent::SpawnDepthCamera(
const FTransform& transform,
bool isTransformRelativeToComponent,
const FString sensorIdentifier,
const FString sensorName,
FDepthCameraParameters DepthCameraParameters,
bool simulateSensor,
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
212 if (!attachToComponent && !attachToBone.IsNone())
214 attachToComponent = GetOwner()->GetRootComponent();
217 FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
228 ASensor* CastedSensor = Cast<ASensor>(depthCamera);
230 AttachSensor(CastedSensor, attachToComponent, attachToBone);
232 AddSensorDestroyListener(CastedSensor);
234 DepthCameras.Emplace(depthCamera);
237 depthCamera->
OnCameraWindowClosed.AddDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
239 OnDepthCameraSpawned.Broadcast(depthCamera);
240 OnSensorSpawned.Broadcast(CastedSensor);
245ARadar* USensorsManagerComponent::SpawnRadar(
const FTransform& transform,
bool isTransformRelativeToComponent,
const FString sensorIdentifier,
const FString sensorName,
FRadarParameters radarParameters,
bool simulateSensor,
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
248 if (!attachToComponent && !attachToBone.IsNone())
250 attachToComponent = GetOwner()->GetRootComponent();
253 FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
264 ASensor* CastedSensor = Cast<ASensor>(radar);
266 AttachSensor(CastedSensor, attachToComponent, attachToBone);
268 AddSensorDestroyListener(CastedSensor);
270 Radars.Emplace(radar);
273 OnRadarSpawned.Broadcast(radar);
274 OnSensorSpawned.Broadcast(CastedSensor);
279ASensor* USensorsManagerComponent::SpawnSensor(
const FTransform& transform,
bool isTransformRelativeToComponent,
const FString sensorIdentifier,
const FString sensorName,
ESensorTypes sensorType,
bool simulateSensor,
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
286 sensor = Cast<ASensor>(SpawnLidar(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FLidarParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
289 sensor = Cast<ASensor>(SpawnCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FCameraBaseParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
292 sensor = Cast<ASensor>(SpawnThermalCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FThermalCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
295 sensor = Cast<ASensor>(SpawnDVSCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FDVSCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
298 sensor = Cast<ASensor>(SpawnSegmentationCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FCameraBaseParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
301 sensor = Cast<ASensor>(SpawnDepthCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FDepthCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
304 sensor = Cast<ASensor>(SpawnRadar(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FRadarParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
313void USensorsManagerComponent::DestroyLidar(
ALidar* lidarToDestroy)
318 Lidars.Remove(lidarToDestroy);
320 ASensor* CastedSensor = Cast<ASensor>(lidarToDestroy);
322 RemoveSensorDestroyListener(CastedSensor);
325 DestroySensorActor(CastedSensor);
327 OnLidarDestroyed.Broadcast(sensorIdentifier);
332void USensorsManagerComponent::DestroyCamera(
ACamera* cameraToDestroy)
338 cameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
339 Cameras.Remove(cameraToDestroy);
341 ASensor* CastedSensor = Cast<ASensor>(cameraToDestroy);
343 RemoveSensorDestroyListener(CastedSensor);
346 DestroySensorActor(CastedSensor);
348 OnCameraDestroyed.Broadcast(sensorIdentifier);
353void USensorsManagerComponent::DestroyThermalCamera(
AThermalCamera* thermalCameraToDestroy)
355 if (thermalCameraToDestroy)
359 thermalCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
360 ThermalCameras.Remove(thermalCameraToDestroy);
362 ASensor* CastedSensor = Cast<ASensor>(thermalCameraToDestroy);
364 RemoveSensorDestroyListener(CastedSensor);
367 DestroySensorActor(CastedSensor);
369 OnThermalCameraDestroyed.Broadcast(sensorIdentifier);
374void USensorsManagerComponent::DestroyDVSCamera(
ADVSCamera* DVSCameraToDestroy)
376 if (DVSCameraToDestroy)
380 DVSCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
381 DVSCameras.Remove(DVSCameraToDestroy);
383 ASensor* CastedSensor = Cast<ASensor>(DVSCameraToDestroy);
385 RemoveSensorDestroyListener(CastedSensor);
388 DestroySensorActor(CastedSensor);
390 OnDVSCameraDestroyed.Broadcast(sensorIdentifier);
397 if (segmentationCameraToDestroy)
401 segmentationCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
402 SegmentationCameras.Remove(segmentationCameraToDestroy);
404 ASensor* CastedSensor = Cast<ASensor>(segmentationCameraToDestroy);
406 RemoveSensorDestroyListener(CastedSensor);
409 DestroySensorActor(CastedSensor);
411 OnSegmentationCameraDestroyed.Broadcast(sensorIdentifier);
416void USensorsManagerComponent::DestroyDepthCamera(
ADepthCamera* depthCameraToDestroy)
418 if (depthCameraToDestroy)
422 depthCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
423 DepthCameras.Remove(depthCameraToDestroy);
425 ASensor* CastedSensor = Cast<ASensor>(depthCameraToDestroy);
427 RemoveSensorDestroyListener(CastedSensor);
430 DestroySensorActor(CastedSensor);
432 OnDepthCameraDestroyed.Broadcast(sensorIdentifier);
437void USensorsManagerComponent::DestroyRadar(
ARadar* radarToDestroy)
443 Radars.Remove(radarToDestroy);
445 ASensor* CastedSensor = Cast<ASensor>(radarToDestroy);
447 RemoveSensorDestroyListener(CastedSensor);
450 DestroySensorActor(CastedSensor);
452 OnRadarDestroyed.Broadcast(sensorIdentifier);
457void USensorsManagerComponent::DestroySensor(
ASensor* sensorToDestroy)
466 DestroyLidar(Cast<ALidar>(sensorToDestroy));
469 DestroyCamera(Cast<ACamera>(sensorToDestroy));
472 DestroyThermalCamera(Cast<AThermalCamera>(sensorToDestroy));
475 DestroyDVSCamera(Cast<ADVSCamera>(sensorToDestroy));
478 DestroySegmentationCamera(Cast<ASemanticSegmentationCamera>(sensorToDestroy));
481 DestroyDepthCamera(Cast<ADepthCamera>(sensorToDestroy));
484 DestroyRadar(Cast<ARadar>(sensorToDestroy));
492void USensorsManagerComponent::DestroyAllSensors()
494 TArray<ASensor*> SensorsTempArray =
Sensors;
496 for (
const auto& sensor : SensorsTempArray)
498 DestroySensor(sensor);
502FTransform USensorsManagerComponent::SensorRelativeTransformToWorld(
const FTransform& relativeTransform)
504 AActor* owner = GetOwner();
505 return relativeTransform * owner->GetActorTransform();
508FTransform USensorsManagerComponent::SensorRelativeTransformToComponentWorld(
const FTransform& relativeTransform,
const FTransform& componentTransformWorld)
510 return relativeTransform * componentTransformWorld;
513FTransform USensorsManagerComponent::GetSensorAttachmentTransform(
const FTransform& sensorRelativeTransform, USceneComponent* attachToComponent,
const FName& attachToBone,
bool revertScaleToVectorOne)
515 FTransform worldTransform;
518 if (attachToComponent)
520 worldTransform = SensorRelativeTransformToComponentWorld(sensorRelativeTransform, attachToComponent->GetSocketTransform(attachToBone));
524 worldTransform = SensorRelativeTransformToWorld(sensorRelativeTransform);
527 if (revertScaleToVectorOne)
529 worldTransform.SetScale3D(FVector(1, 1, 1));
532 return worldTransform;
535USceneComponent* USensorsManagerComponent::GetComponentByHierarchyName(FString hierarchyName)
539 TArray<FString> componentNames;
541 AActor* owner = GetOwner();
544 USceneComponent* matchingComponent = owner->GetRootComponent();
547 hierarchyName.ParseIntoArray(componentNames, *ComponentHierarchySeparator,
true);
549 if (componentNames.Num() > 0)
552 FString initialComponentName = componentNames[0];
553 USceneComponent* initialComponent =
nullptr;
554 bool skipFirstComponentName =
true;
556 TArray<USceneComponent*> ownerComponents;
557 owner->GetComponents<USceneComponent>(ownerComponents);
560 for (USceneComponent* childComponent : ownerComponents)
562 if (childComponent && childComponent->GetName() == initialComponentName)
564 initialComponent = childComponent;
565 matchingComponent = initialComponent;
570 if (!initialComponent)
574 initialComponent = owner->GetRootComponent();
576 skipFirstComponentName =
false;
579 USceneComponent* currentComponent = initialComponent;
582 if (currentComponent && componentNames.Num() > (skipFirstComponentName ? 1 : 0))
585 bool bComponentFound =
false;
588 for (int32 i = (skipFirstComponentName ? 1 : 0); i < componentNames.Num(); ++i)
590 FString componentName = componentNames[i];
592 bComponentFound =
false;
595 for (USceneComponent* childComponent : currentComponent->GetAttachChildren())
597 FString childComponentName = childComponent->GetName();
602 if (childComponent && childComponent->GetName() == componentName)
605 currentComponent = childComponent;
606 bComponentFound =
true;
613 if (!bComponentFound)
616 UE_LOG(LogTemp, Warning, TEXT(
"Component '%s' not found. Breaking out of the loop"), *componentName);
625 FString foundComponentName = currentComponent->GetName();
626 matchingComponent = currentComponent;
631 UE_LOG(LogTemp, Warning, TEXT(
"Component not found"));
636 return matchingComponent;
639void USensorsManagerComponent::AttachSensorToOwner(
ASensor* sensor)
642 AActor* owner = GetOwner();
645 AttachSensorToActor(sensor, owner);
648void USensorsManagerComponent::AttachSensorToActor(
ASensor* sensor, AActor* attachToActor)
650 if (sensor && attachToActor)
652 sensor->AttachToActor(attachToActor, FAttachmentTransformRules::KeepWorldTransform);
658void USensorsManagerComponent::AttachSensorToBone(
ASensor* sensor, USceneComponent* attachToComponent,
const FName& boneName)
660 if (!sensor || !attachToComponent)
665 if (IsValid(attachToComponent))
667 sensor->AttachToComponent(attachToComponent, FAttachmentTransformRules::KeepWorldTransform, boneName);
669 USceneComponent* currentParentComponent = attachToComponent->GetAttachParent();
672 FString fullComponentName = attachToComponent->GetName();
675 if (currentParentComponent)
677 fullComponentName = attachToComponent->GetName();
680 while (currentParentComponent && currentParentComponent->GetAttachParent())
682 FString ParentComponentName = currentParentComponent->GetName();
685 fullComponentName = FString::Format(TEXT(
"{0}{1}{2}"), { *ParentComponentName, *ComponentHierarchySeparator, *fullComponentName });
688 currentParentComponent = currentParentComponent->GetAttachParent();
699void USensorsManagerComponent::AttachSensor(
ASensor* sensor, USceneComponent* attachToComponent,
const FName& boneName)
702 if (IsValid(attachToComponent) || !boneName.IsNone())
704 AttachSensorToBone(sensor, attachToComponent, boneName);
708 AttachSensorToOwner(sensor);
712void USensorsManagerComponent::DestroySensorActor(AActor* sensorActor)
719 TArray<AActor*> attachedActors;
720 sensorActor->GetAttachedActors(attachedActors);
722 for (AActor* CActor : attachedActors)
730 sensorActor->Destroy();
737 for (
const auto& LidarData : preset.
LidarDatas)
742 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
747 SpawnLidar(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, LidarData.LidarParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
750 for (
const auto& RadarData : preset.
RadarDatas)
755 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
760 SpawnRadar(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, RadarData.RadarParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
769 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
774 SpawnCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
783 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
788 SpawnThermalCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
797 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
802 SpawnDVSCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.DVSCameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
811 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
816 SpawnSegmentationCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
825 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
830 SpawnDepthCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
838 for (
const auto& Lidar : Lidars)
840 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Lidar));
848 for (
const auto& Radar : Radars)
850 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Radar));
858 for (
const auto& Camera : Cameras)
860 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Camera));
867 for (
const auto& ThermalCamera : ThermalCameras)
869 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(ThermalCamera));
876 for (
const auto& DVSCamera : DVSCameras)
878 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(DVSCamera));
885 for (
const auto& SegmentationCamera : SegmentationCameras)
887 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(SegmentationCamera));
894 for (
const auto& DepthCamera : DepthCameras)
896 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(DepthCamera));
910 FTransform relativeTransform = sensor->GetRootComponent()->GetRelativeTransform();
912 sensorPreset.
Location = relativeTransform.GetLocation();
913 sensorPreset.
Rotation = relativeTransform.Rotator();
923void USensorsManagerComponent::AddSensorDestroyListener(
ASensor* sensor)
927 sensor->
OnSensorDestroy.AddDynamic(
this, &USensorsManagerComponent::OnSensorDestroy);
931void USensorsManagerComponent::RemoveSensorDestroyListener(
ASensor* sensor)
935 sensor->
OnSensorDestroy.RemoveDynamic(
this, &USensorsManagerComponent::OnSensorDestroy);
939void USensorsManagerComponent::OnCameraWindowClosed(
ACamera* camera)
943 ASensor* CastedSensor = Cast<ASensor>(camera);
944 DestroySensor(CastedSensor);
948void USensorsManagerComponent::OnSensorDestroy(
ASensor* sensor)
953 DestroySensor(sensor);
@ SemanticSegmentationCamera
FCameraDelegate_OnWindowClosed OnCameraWindowClosed
FSensorDestroy OnSensorDestroy
FString GetSensorIdentifier() const
FString GetSensorName() const
virtual ESensorTypes GetSensorType() const
FString AttachedToComponent
ASensorModel * GetSensorModel() const
static ASemanticSegmentationCamera * SpawnSegmentationCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ARadar * SpawnRadar(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FRadarParameters radarParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ADVSCamera * SpawnDVSCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FDVSCameraParameters DVSCameraParameters, bool SimulateSensor, AActor *Parent=nullptr)
static ALidar * SpawnLidarSensor(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FLidarParameters lidarParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ACamera * SpawnCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ADepthCamera * SpawnDepthCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FDepthCameraParameters depthCameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static AThermalCamera * SpawnThermalCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FThermalCameraParameters thermalCameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
FCameraBaseParameters CameraParameters
FDVSCameraParameters DVSCameraParameters
FDepthCameraParameters CameraParameters
FLidarParameters LidarParameters
FRadarParameters RadarParameters
FCameraBaseParameters CameraParameters
FString AttachedToComponent
FThermalCameraParameters CameraParameters
TArray< FRadarPreset > RadarDatas
TArray< FLidarPreset > LidarDatas
TArray< FThermalCameraPreset > ThermalCameraDatas
TArray< FDVSCameraPreset > DVSCameraDatas
TArray< FSemanticSegmentationCameraPreset > SegmentationCameraDatas
TArray< FCameraPreset > CameraDatas
TArray< FDepthCameraPreset > DepthCameraDatas