11#include "GeoReferencingSystem.h"
12#include "TimerManager.h"
16 RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT(
"SceneRoot"));
17 PrimaryActorTick.bCanEverTick =
true;
18 PrimaryActorTick.bStartWithTickEnabled =
false;
19 PrimaryActorTick.TickGroup = TG_PrePhysics;
20 SetActorTickEnabled(
false);
29 AGeoReferencingSystem* GeoReferencingSystem = AGeoReferencingSystem::GetGeoReferencingSystem(GetWorld());
31 if (GeoReferencingSystem)
35 FVector Location =
Transform.GetLocation();
37 FGeographicCoordinates GeographicCoordinates;
38 GeographicCoordinates.Latitude = Location.X;
39 GeographicCoordinates.Longitude = Location.Y;
40 GeographicCoordinates.Altitude = Location.Z;
44 Transform.SetLocation(InUnrealCoordinates);
49 SimulatorLog::Log(
"Couldn't convert GPS coordinates into Unreal transform because couldn't find GeoReferencingSystem.");
56 TArray<FTransform> NewCapturePositions;
60 FVector OriginalPosition = OriginalTransform.GetLocation();
61 FRotator OriginalRotation = OriginalTransform.GetRotation().Rotator();
64 NewCapturePositions.Add(OriginalTransform);
66 for (int32 i = 0; i < NumPhotos; i++)
68 FTransform CameraTransform = FTransform::Identity;
73 CameraTransform.SetLocation(OriginalPosition + FVector(0, 100, 0));
74 CameraTransform.SetRotation(FQuat(OriginalRotation));
77 CameraTransform.SetLocation(OriginalPosition + FVector(0, -100, 0));
78 CameraTransform.SetRotation(FQuat(OriginalRotation + FRotator(0, 180, 0)));
81 CameraTransform.SetLocation(OriginalPosition + FVector(-100, 0, 0));
82 CameraTransform.SetRotation(FQuat(OriginalRotation + FRotator(0, 90, 0)));
85 CameraTransform.SetLocation(OriginalPosition + FVector(100, 0, 0));
86 CameraTransform.SetRotation(FQuat(OriginalRotation + FRotator(0, 270, 0)));
91 NewCapturePositions.Add(CameraTransform);
116 GetWorld()->GetTimerManager().SetTimer(Handle, FTimerDelegate::CreateLambda([
this]
119 SetActorTickEnabled(
true);
136 Super::Tick(DeltaTime);
142 Super::EndPlay(EndPlayReason);
171 SetActorTickEnabled(
false);
175 GetWorld()->GetTimerManager().SetTimer(Handle, FTimerDelegate::CreateLambda([
this]
214 CameraPtr->Destroy();
void ChangeCameraParameters(FCameraBaseParameters newParameters)
void SaveCurrentFrameToDisk()
FCameraBaseParameters GetCameraParameters()
virtual void Tick(float DeltaTime) override
virtual void BeginPlay() override
APhotoCapture(const FObjectInitializer &ObjectInitializer)
void SetupPhotoCapture(FCaptureData NewCaptureData)
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
void UpdateCameraPositions(const FTransform &Transform)
static void Log(const FString &Message, bool LogToTextFile=true, bool LogToROS=true)
static FVector GeographicToUnrealCoordinates(AGeoReferencingSystem *GeoReferencingSystem, const FGeographicCoordinates &GeographicCoordinates)
int32 FramesToKeepInSamePosition
TArray< FTransform > CapturePositions
TArray< ACamera * > Cameras
int32 CurrentCaptureIndex