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)
287 sensor = Cast<ASensor>(SpawnLidar(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FLidarParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
290 sensor = Cast<ASensor>(SpawnCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FCameraBaseParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
293 sensor = Cast<ASensor>(SpawnThermalCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FThermalCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
296 sensor = Cast<ASensor>(SpawnDVSCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FDVSCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
299 sensor = Cast<ASensor>(SpawnSegmentationCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FCameraBaseParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
302 sensor = Cast<ASensor>(SpawnDepthCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FDepthCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
305 sensor = Cast<ASensor>(SpawnRadar(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName,
FRadarParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
314void USensorsManagerComponent::DestroyLidar(
ALidar* lidarToDestroy)
319 Lidars.Remove(lidarToDestroy);
321 ASensor* CastedSensor = Cast<ASensor>(lidarToDestroy);
323 RemoveSensorDestroyListener(CastedSensor);
326 DestroySensorActor(CastedSensor);
328 OnLidarDestroyed.Broadcast(sensorIdentifier);
333void USensorsManagerComponent::DestroyCamera(
ACamera* cameraToDestroy)
339 cameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
340 Cameras.Remove(cameraToDestroy);
342 ASensor* CastedSensor = Cast<ASensor>(cameraToDestroy);
344 RemoveSensorDestroyListener(CastedSensor);
347 DestroySensorActor(CastedSensor);
349 OnCameraDestroyed.Broadcast(sensorIdentifier);
354void USensorsManagerComponent::DestroyThermalCamera(
AThermalCamera* thermalCameraToDestroy)
356 if (thermalCameraToDestroy)
360 thermalCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
361 ThermalCameras.Remove(thermalCameraToDestroy);
363 ASensor* CastedSensor = Cast<ASensor>(thermalCameraToDestroy);
365 RemoveSensorDestroyListener(CastedSensor);
368 DestroySensorActor(CastedSensor);
370 OnThermalCameraDestroyed.Broadcast(sensorIdentifier);
375void USensorsManagerComponent::DestroyDVSCamera(
ADVSCamera* DVSCameraToDestroy)
377 if (DVSCameraToDestroy)
381 DVSCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
382 DVSCameras.Remove(DVSCameraToDestroy);
384 ASensor* CastedSensor = Cast<ASensor>(DVSCameraToDestroy);
386 RemoveSensorDestroyListener(CastedSensor);
389 DestroySensorActor(CastedSensor);
391 OnDVSCameraDestroyed.Broadcast(sensorIdentifier);
398 if (segmentationCameraToDestroy)
402 segmentationCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
403 SegmentationCameras.Remove(segmentationCameraToDestroy);
405 ASensor* CastedSensor = Cast<ASensor>(segmentationCameraToDestroy);
407 RemoveSensorDestroyListener(CastedSensor);
410 DestroySensorActor(CastedSensor);
412 OnSegmentationCameraDestroyed.Broadcast(sensorIdentifier);
417void USensorsManagerComponent::DestroyDepthCamera(
ADepthCamera* depthCameraToDestroy)
419 if (depthCameraToDestroy)
423 depthCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
424 DepthCameras.Remove(depthCameraToDestroy);
426 ASensor* CastedSensor = Cast<ASensor>(depthCameraToDestroy);
428 RemoveSensorDestroyListener(CastedSensor);
431 DestroySensorActor(CastedSensor);
433 OnDepthCameraDestroyed.Broadcast(sensorIdentifier);
438void USensorsManagerComponent::DestroyRadar(
ARadar* radarToDestroy)
444 Radars.Remove(radarToDestroy);
446 ASensor* CastedSensor = Cast<ASensor>(radarToDestroy);
448 RemoveSensorDestroyListener(CastedSensor);
451 DestroySensorActor(CastedSensor);
453 OnRadarDestroyed.Broadcast(sensorIdentifier);
458void USensorsManagerComponent::DestroySensor(
ASensor* sensorToDestroy)
467 DestroyLidar(Cast<ALidar>(sensorToDestroy));
470 DestroyCamera(Cast<ACamera>(sensorToDestroy));
473 DestroyThermalCamera(Cast<AThermalCamera>(sensorToDestroy));
476 DestroyDVSCamera(Cast<ADVSCamera>(sensorToDestroy));
479 DestroySegmentationCamera(Cast<ASemanticSegmentationCamera>(sensorToDestroy));
482 DestroyDepthCamera(Cast<ADepthCamera>(sensorToDestroy));
485 DestroyRadar(Cast<ARadar>(sensorToDestroy));
493void USensorsManagerComponent::DestroyAllSensors()
495 TArray<ASensor*> SensorsTempArray =
Sensors;
497 for (
const auto& sensor : SensorsTempArray)
499 DestroySensor(sensor);
503FTransform USensorsManagerComponent::SensorRelativeTransformToWorld(
const FTransform& relativeTransform)
505 AActor* owner = GetOwner();
506 return relativeTransform * owner->GetActorTransform();
509FTransform USensorsManagerComponent::SensorRelativeTransformToComponentWorld(
const FTransform& relativeTransform,
const FTransform& componentTransformWorld)
511 return relativeTransform * componentTransformWorld;
514FTransform USensorsManagerComponent::GetSensorAttachmentTransform(
const FTransform& sensorRelativeTransform, USceneComponent* attachToComponent,
const FName& attachToBone,
bool revertScaleToVectorOne)
516 FTransform worldTransform;
519 if (attachToComponent)
521 worldTransform = SensorRelativeTransformToComponentWorld(sensorRelativeTransform, attachToComponent->GetSocketTransform(attachToBone));
525 worldTransform = SensorRelativeTransformToWorld(sensorRelativeTransform);
528 if (revertScaleToVectorOne)
530 worldTransform.SetScale3D(FVector(1, 1, 1));
533 return worldTransform;
536USceneComponent* USensorsManagerComponent::GetComponentByHierarchyName(FString hierarchyName)
540 TArray<FString> componentNames;
542 AActor* owner = GetOwner();
545 USceneComponent* matchingComponent = owner->GetRootComponent();
548 hierarchyName.ParseIntoArray(componentNames, *ComponentHierarchySeparator,
true);
550 if (componentNames.Num() > 0)
553 FString initialComponentName = componentNames[0];
554 USceneComponent* initialComponent =
nullptr;
555 bool skipFirstComponentName =
true;
557 TArray<USceneComponent*> ownerComponents;
558 owner->GetComponents<USceneComponent>(ownerComponents);
561 for (USceneComponent* childComponent : ownerComponents)
563 if (childComponent && childComponent->GetName() == initialComponentName)
565 initialComponent = childComponent;
566 matchingComponent = initialComponent;
571 if (!initialComponent)
575 initialComponent = owner->GetRootComponent();
577 skipFirstComponentName =
false;
580 USceneComponent* currentComponent = initialComponent;
583 if (currentComponent && componentNames.Num() > (skipFirstComponentName ? 1 : 0))
586 bool bComponentFound =
false;
589 for (int32 i = (skipFirstComponentName ? 1 : 0); i < componentNames.Num(); ++i)
591 FString componentName = componentNames[i];
593 bComponentFound =
false;
596 for (USceneComponent* childComponent : currentComponent->GetAttachChildren())
598 FString childComponentName = childComponent->GetName();
603 if (childComponent && childComponent->GetName() == componentName)
606 currentComponent = childComponent;
607 bComponentFound =
true;
614 if (!bComponentFound)
617 UE_LOG(LogTemp, Warning, TEXT(
"Component '%s' not found. Breaking out of the loop"), *componentName);
626 FString foundComponentName = currentComponent->GetName();
627 matchingComponent = currentComponent;
632 UE_LOG(LogTemp, Warning, TEXT(
"Component not found"));
637 return matchingComponent;
640void USensorsManagerComponent::AttachSensorToOwner(
ASensor* sensor)
643 AActor* owner = GetOwner();
646 AttachSensorToActor(sensor, owner);
649void USensorsManagerComponent::AttachSensorToActor(
ASensor* sensor, AActor* attachToActor)
651 if (sensor && attachToActor)
653 sensor->AttachToActor(attachToActor, FAttachmentTransformRules::KeepWorldTransform);
659void USensorsManagerComponent::AttachSensorToBone(
ASensor* sensor, USceneComponent* attachToComponent,
const FName& boneName)
661 if (!sensor || !attachToComponent)
666 if (IsValid(attachToComponent))
668 sensor->AttachToComponent(attachToComponent, FAttachmentTransformRules::KeepWorldTransform, boneName);
670 USceneComponent* currentParentComponent = attachToComponent->GetAttachParent();
673 FString fullComponentName = attachToComponent->GetName();
676 if (currentParentComponent)
678 fullComponentName = attachToComponent->GetName();
681 while (currentParentComponent && currentParentComponent->GetAttachParent())
683 FString ParentComponentName = currentParentComponent->GetName();
686 fullComponentName = FString::Format(TEXT(
"{0}{1}{2}"), { *ParentComponentName, *ComponentHierarchySeparator, *fullComponentName });
689 currentParentComponent = currentParentComponent->GetAttachParent();
700void USensorsManagerComponent::AttachSensor(
ASensor* sensor, USceneComponent* attachToComponent,
const FName& boneName)
703 if (IsValid(attachToComponent) || !boneName.IsNone())
705 AttachSensorToBone(sensor, attachToComponent, boneName);
709 AttachSensorToOwner(sensor);
713void USensorsManagerComponent::DestroySensorActor(AActor* sensorActor)
720 TArray<AActor*> attachedActors;
721 sensorActor->GetAttachedActors(attachedActors);
723 for (AActor* CActor : attachedActors)
731 sensorActor->Destroy();
738 for (
const auto& LidarData : preset.
LidarDatas)
743 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
748 SpawnLidar(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, LidarData.LidarParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
751 for (
const auto& RadarData : preset.
RadarDatas)
756 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
761 SpawnRadar(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, RadarData.RadarParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
770 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
775 SpawnCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
784 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
789 SpawnThermalCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
798 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
803 SpawnDVSCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.DVSCameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
812 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
817 SpawnSegmentationCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
826 USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
831 SpawnDepthCamera(sensorTransform,
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
839 for (
const auto& Lidar : Lidars)
841 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Lidar));
849 for (
const auto& Radar : Radars)
851 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Radar));
859 for (
const auto& Camera : Cameras)
861 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Camera));
868 for (
const auto& ThermalCamera : ThermalCameras)
870 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(ThermalCamera));
877 for (
const auto& DVSCamera : DVSCameras)
879 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(DVSCamera));
886 for (
const auto& SegmentationCamera : SegmentationCameras)
888 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(SegmentationCamera));
895 for (
const auto& DepthCamera : DepthCameras)
897 FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(DepthCamera));
911 FTransform relativeTransform = sensor->GetRootComponent()->GetRelativeTransform();
913 sensorPreset.
Location = relativeTransform.GetLocation();
914 sensorPreset.
Rotation = relativeTransform.Rotator();
924void USensorsManagerComponent::AddSensorDestroyListener(
ASensor* sensor)
928 sensor->
OnSensorDestroy.AddDynamic(
this, &USensorsManagerComponent::OnSensorDestroy);
932void USensorsManagerComponent::RemoveSensorDestroyListener(
ASensor* sensor)
936 sensor->
OnSensorDestroy.RemoveDynamic(
this, &USensorsManagerComponent::OnSensorDestroy);
940void USensorsManagerComponent::OnCameraWindowClosed(
ACamera* camera)
944 ASensor* CastedSensor = Cast<ASensor>(camera);
945 DestroySensor(CastedSensor);
949void USensorsManagerComponent::OnSensorDestroy(
ASensor* sensor)
954 DestroySensor(sensor);
@ SemanticSegmentationCamera
FCameraDelegate_OnWindowClosed OnCameraWindowClosed
FSensorDestroy OnSensorDestroy
FString GetSensorIdentifier() const
FString GetSensorName() const
virtual ESensorTypes GetSensorType() const
FString AttachedToComponent
ASensorModel * GetSensorModel() const
static ARadar * SpawnRadar(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FRadarParameters radarParameters, bool SimulateSensor=true)
static AThermalCamera * SpawnThermalCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FThermalCameraParameters thermalCameraParameters, bool SimulateSensor=true)
static ACamera * SpawnCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true)
static ADVSCamera * SpawnDVSCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FDVSCameraParameters DVSCameraParameters, bool SimulateSensor)
static ADepthCamera * SpawnDepthCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FDepthCameraParameters depthCameraParameters, bool SimulateSensor=true)
static ALidar * SpawnLidarSensor(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FLidarParameters lidarParameters, bool SimulateSensor=true)
static ASemanticSegmentationCamera * SpawnSegmentationCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true)
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