15#include "GeoReferencingSystem.h"
16#include "TimerManager.h"
20 RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT(
"SceneRoot"));
21 PrimaryActorTick.bCanEverTick =
true;
22 PrimaryActorTick.bStartWithTickEnabled =
false;
23 PrimaryActorTick.TickGroup = TG_PrePhysics;
24 SetActorTickEnabled(
false);
33 if (
ACamera* CameraPtr = Cast<ACamera>(Sensor))
35 NewCaptureData.
Cameras.Add(CameraPtr);
37 else if (
ALidar* LidarPtr = Cast<ALidar>(Sensor))
39 NewCaptureData.
Lidars.Add(LidarPtr);
47 AGeoReferencingSystem* GeoReferencingSystem = AGeoReferencingSystem::GetGeoReferencingSystem(GetWorld());
49 if (GeoReferencingSystem)
53 FVector Location = CaptureTransform.GetLocation();
55 float StoredZ = Location.Z;
57 FGeographicCoordinates GeographicCoordinates;
58 GeographicCoordinates.Latitude = Location.X;
59 GeographicCoordinates.Longitude = Location.Y;
60 GeographicCoordinates.Altitude = Location.Z;
66 CaptureTransform.SetLocation(InUnrealCoordinates);
71 InUnrealCoordinates.Z = StoredZ;
72 CaptureTransform.SetLocation(InUnrealCoordinates);
79 SimulatorLog::Log(
"Couldn't convert GPS coordinates into Unreal transform because couldn't find GeoReferencingSystem.");
86 TArray<FTransform> NewCapturePositions;
90 FVector OriginalPosition = OriginalTransform.GetLocation();
91 FRotator OriginalRotation = OriginalTransform.GetRotation().Rotator();
94 NewCapturePositions.Add(OriginalTransform);
96 for (int32 i = 0; i < NumPhotos; i++)
98 FTransform CameraTransform = FTransform::Identity;
103 CameraTransform.SetLocation(OriginalPosition + FVector(0, 100, 0));
104 CameraTransform.SetRotation(FQuat(OriginalRotation));
107 CameraTransform.SetLocation(OriginalPosition + FVector(0, -100, 0));
108 CameraTransform.SetRotation(FQuat(OriginalRotation + FRotator(0, 180, 0)));
111 CameraTransform.SetLocation(OriginalPosition + FVector(-100, 0, 0));
112 CameraTransform.SetRotation(FQuat(OriginalRotation + FRotator(0, 90, 0)));
115 CameraTransform.SetLocation(OriginalPosition + FVector(100, 0, 0));
116 CameraTransform.SetRotation(FQuat(OriginalRotation + FRotator(0, 270, 0)));
121 NewCapturePositions.Add(CameraTransform);
146 GetWorld()->GetTimerManager().SetTimer(Handle, FTimerDelegate::CreateLambda([
this]
149 SetActorTickEnabled(
true);
166 Super::Tick(DeltaTime);
172 Super::EndPlay(EndPlayReason);
185 SetActorTickEnabled(
false);
189 GetWorld()->GetTimerManager().SetTimer(Handle, FTimerDelegate::CreateLambda([
this]
295 SensorPtr->Destroy();
@ WaitingAfterPositionUpdate
@ WaitingForPositionUpdate
void ChangeCameraParameters(FCameraBaseParameters newParameters)
void SaveCurrentFrameToDisk()
FCameraBaseParameters GetCameraParameters()
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
void SetupDataCapture(FCaptureData NewCaptureData)
virtual void Tick(float DeltaTime) override
ADataCapture(const FObjectInitializer &ObjectInitializer)
void UpdatePositions(const FTransform &Transform)
virtual void BeginPlay() override
void ForceClearContainers()
void SaveCurrentPointCloudToDisk()
static void Log(const FString &Message, bool LogToTextFile=true, bool LogToROS=true)
static FVector GeographicToUnrealCoordinates(AGeoReferencingSystem *GeoReferencingSystem, const FGeographicCoordinates &GeographicCoordinates)
static bool AlignTransformFromGroundInMeters(AActor *Actor, FTransform &InTransform)
int32 FramesToKeepInSamePosition
bool UseHeightAboveGround
TArray< FTransform > CapturePositions
TArray< ACamera * > Cameras
TArray< ALidar * > Lidars
int32 CurrentCaptureIndex
TArray< ASensor * > Sensors