30#include "GenericPlatform/GenericPlatformFile.h"
31#include "Serialization/JsonSerializer.h"
32#include "Serialization/JsonWriter.h"
33#include "Misc/DefaultValueHelper.h"
34#include "HAL/PlatformFileManager.h"
35#include "Misc/FileHelper.h"
37#include "Engine/GameViewportClient.h"
38#include "Engine/Engine.h"
39#include "Engine/World.h"
52 if (
const UEnum* VehicleEnum = StaticEnum<EVehicleTypes>())
54 VehicleName = VehicleEnum->GetDisplayNameTextByValue(
static_cast<int64
>(VehicleType)).ToString();
64 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
67 TSharedPtr<FJsonObject> JsonObject = MakeShareable(
new FJsonObject);
68 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
70 TSharedPtr<FJsonObject> VehicleObject = MakeShareable(
new FJsonObject);
71 VehicleObject->SetStringField(
"type",
"vehicle");
72 VehicleObject->SetStringField(
"model", VehicleName);
73 VehicleObject->SetBoolField(
"teleportSpectator",
false);
74 VehicleObject->SetBoolField(
"followObject",
false);
75 VehicleObject->SetBoolField(
"destroyOverlappingObjects",
false);
76 VehicleObject->SetStringField(
"id", IActorInformation::Execute_GetActorID(
Vehicle));
78 TSharedPtr<FJsonObject> VehicleSpawnPoint = MakeShareable(
new FJsonObject);
80 FVector SpawnLocation;
81 FRotator SpawnRotation;
83 if (OverrideTransform)
90 SpawnLocation =
Vehicle->GetActorLocation();
91 SpawnRotation =
Vehicle->GetActorRotation();
105 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
108 FJsonObjectConverter::UStructToJsonObject(FWheeledVehicleParameters::StaticStruct(), &Params, ParametersObject.ToSharedRef());
109 VehicleObject->SetObjectField(
"parameters", ParametersObject);
113 TArray<TSharedPtr<FJsonValue>> SensorsArray;
115 USensorsManagerComponent* SensorManager =
Vehicle->GetSensorsManager();
119 SensorsArray.Append(
ParseLidars(SensorManager->GetLidars()));
120 SensorsArray.Append(
ParseCameras(SensorManager->GetCameras()));
124 SensorsArray.Append(
ParseRadars(SensorManager->GetRadars()));
128 if (SensorsArray.Num() > 0)
130 VehicleObject->SetArrayField(
"sensors", SensorsArray);
133 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(VehicleObject)));
135 JsonObject->SetArrayField(
"objects", ObjectsArray);
138 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
139 FJsonSerializer::Serialize(JsonObject.ToSharedRef(), JsonWriter);
142 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
149 FString Msg = FString::Printf(TEXT(
"Exported vehicle JSON file to: %s"), *FilePath);
159 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
164 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
165 FJsonObjectConverter::UStructToJsonObject(FWeatherParameters::StaticStruct(), &WeatherParameters, ParametersObject.ToSharedRef());
167 TSharedPtr<FJsonObject> RootObject = MakeShareable(
new FJsonObject);
168 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
169 TSharedPtr<FJsonObject> WeatherObject = MakeShareable(
new FJsonObject);
170 WeatherObject->SetStringField(
"type",
"weather");
172 WeatherObject->SetObjectField(
"parameters", ParametersObject);
174 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(WeatherObject)));
176 RootObject->SetArrayField(
"objects", ObjectsArray);
179 TSharedRef<TJsonWriter<>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
180 FJsonSerializer::Serialize(RootObject.ToSharedRef(), JsonWriter);
182 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
189 FString Msg = FString::Printf(TEXT(
"Exported Weather JSON file to: %s"), *FilePath);
199 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
203 if (Actors.IsEmpty())
206 UE_LOG(LogTemp, Warning, TEXT(
"ROSJsonExporter.cpp: Actors TArray is empty."));
213 TSharedPtr<FJsonObject> JsonObject = MakeShareable(
new FJsonObject);
215 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
223 FString type = Actor->GetTypeIDString();
224 FString model = Actor->GetModelIDString();
227 if (type ==
"none" || model ==
"none")
232 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
233 ObjectEntry->SetStringField(
"type", type);
234 ObjectEntry->SetStringField(
"model", model);
237 TSharedPtr<FJsonObject> SpawnPoint = MakeShareable(
new FJsonObject);
238 FVector SpawnLocation = Actor->GetActorLocation();
239 FRotator SpawnRotation = Actor->GetActorRotation();
240 FVector Scale = Actor->GetActorScale();
241 SetSpawnPoint(ObjectEntry, SpawnLocation, SpawnRotation, Scale);
242 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
245 JsonObject->SetArrayField(
"objects", ObjectsArray);
248 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
249 FJsonSerializer::Serialize(JsonObject.ToSharedRef(), JsonWriter);
251 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
258 FString Msg = FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath);
274 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
279 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
282 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
283 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
289 ObjectEntry->SetStringField(
"type",
"Walker");
291 ObjectEntry->SetStringField(
"id", IActorInformation::Execute_GetActorID(
Walker));
294 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
295 FJsonObjectConverter::UStructToJsonObject(FWalkerParameters::StaticStruct(), &WalkerParameters, ParametersObject.ToSharedRef());
298 ParametersObject->RemoveField(TEXT(
"points"));
300 if (WalkerParameters.
Points.Num() >= 2)
304 TSharedPtr<FJsonObject> PointsObject = MakeShareable(
new FJsonObject);
305 for (int32 i = 0; i < WalkerParameters.
Points.Num(); ++i)
307 FString PointName = FString::Printf(TEXT(
"point%d"), i);
310 FVector Location =
Transform.GetLocation();
314 TSharedPtr<FJsonObject> PointData = MakeShareable(
new FJsonObject);
315 PointData->SetNumberField(TEXT(
"x"), Location.X);
316 PointData->SetNumberField(TEXT(
"y"), Location.Y);
317 PointData->SetNumberField(TEXT(
"z"), Location.Z);
318 PointData->SetNumberField(TEXT(
"roll"), Rotation.Roll);
319 PointData->SetNumberField(TEXT(
"pitch"), Rotation.Pitch);
320 PointData->SetNumberField(TEXT(
"yaw"), Rotation.Yaw);
323 PointsObject->SetObjectField(PointName, PointData);
327 ParametersObject->SetObjectField(TEXT(
"points"), PointsObject);
332 TSharedPtr<FJsonObject> SpawnPoint = MakeShareable(
new FJsonObject);
334 FVector SpawnLocation;
335 FRotator SpawnRotation;
336 if (WalkerParameters.
Points.IsEmpty())
340 SpawnLocation =
Walker->GetActorLocation();
341 SpawnRotation =
Walker->GetActorRotation();
355 ObjectEntry->SetObjectField(
"parameters", ParametersObject);
358 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
361 RootJsonObject->SetArrayField(
"objects", ObjectsArray);
365 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
366 FJsonSerializer::Serialize(RootJsonObject.ToSharedRef(), JsonWriter);
369 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
377 FString Msg = FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath);
393 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
400 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
402 bool Success =
false;
408 ALidar* LidarPtr = Cast<ALidar>(Sensor);
412 FJsonObjectConverter::UStructToJsonObject(FLidarParameters::StaticStruct(), &LidarParameters, ParametersObject.ToSharedRef());
422 ACamera* CameraPtr = Cast<ACamera>(Sensor);
434 if (ThermalCameraPtr)
437 FJsonObjectConverter::UStructToJsonObject(FThermalCameraParameters::StaticStruct(), &ThermalCameraParameters, ParametersObject.ToSharedRef());
445 ACamera* CameraPtr = Cast<ACamera>(Sensor);
448 ADepthCamera* DepthCameraPtr = Cast<ADepthCamera>(Sensor);
452 FJsonObjectConverter::UStructToJsonObject(FDepthCameraParameters::StaticStruct(), &DepthCameraParameters, ParametersObject.ToSharedRef());
461 ADVSCamera* DVSPtr = Cast<ADVSCamera>(Sensor);
465 FJsonObjectConverter::UStructToJsonObject(FDVSCameraParameters::StaticStruct(), &CameraParameters, ParametersObject.ToSharedRef());
473 ARadar* RadaPtr = Cast<ARadar>(Sensor);
477 FJsonObjectConverter::UStructToJsonObject(FRadarParameters::StaticStruct(), &RadarParameters, ParametersObject.ToSharedRef());
488 UE_LOG(LogTemp, Warning, TEXT(
"ROSJsonExporter.cpp: Exporting Collision/Transform or Overlap sensor is not supported."));
502 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
505 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
506 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
509 ObjectEntry->SetStringField(
"type",
"Sensor");
510 ObjectEntry->SetStringField(
"model", SensorTypeString);
511 ObjectEntry->SetStringField(
"id", IActorInformation::Execute_GetActorID(Sensor));
513 FVector SpawnLocation = Sensor->GetActorLocation();
514 FRotator SpawnRotation = Sensor->GetActorRotation();
515 SetSpawnPoint(ObjectEntry, SpawnLocation, SpawnRotation, Sensor->GetActorScale());
518 ObjectEntry->SetObjectField(
"parameters", ParametersObject);
521 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
524 RootJsonObject->SetArrayField(
"objects", ObjectsArray);
528 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
529 FJsonSerializer::Serialize(RootJsonObject.ToSharedRef(), JsonWriter);
532 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
539 FString Msg = FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath);
547 TArray<TSharedPtr<FJsonValue>> LidarArray;
556 FTransform
Transform =
Lidar->GetRootComponent()->GetRelativeTransform();
559 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
562 FJsonObjectConverter::UStructToJsonObject(FLidarParameters::StaticStruct(), &Params, ParametersObject.ToSharedRef());
564 SensorObject->SetObjectField(
"parameters", ParametersObject);
566 LidarArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
574 TArray<TSharedPtr<FJsonValue>> CameraArray;
576 for (
ACamera* Camera : Cameras)
583 FTransform
Transform = Camera->GetRootComponent()->GetRelativeTransform();
590 SensorObject->SetObjectField(
"parameters", ParametersObject);
592 CameraArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
600 TArray<TSharedPtr<FJsonValue>> CameraArray;
609 FTransform
Transform = Camera->GetRootComponent()->GetRelativeTransform();
612 TSharedPtr<FJsonObject> DepthCameraParametersObject = MakeShareable(
new FJsonObject);
615 FJsonObjectConverter::UStructToJsonObject(FDepthCameraParameters::StaticStruct(), &Params, DepthCameraParametersObject.ToSharedRef());
617 SensorObject->SetObjectField(
"parameters", DepthCameraParametersObject);
619 CameraArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
627 TArray<TSharedPtr<FJsonValue>> CameraArray;
636 FTransform
Transform = Camera->GetRootComponent()->GetRelativeTransform();
639 TSharedPtr<FJsonObject> ThermalCameraParametersObject = MakeShareable(
new FJsonObject);
642 FJsonObjectConverter::UStructToJsonObject(FThermalCameraParameters::StaticStruct(), &Params, ThermalCameraParametersObject.ToSharedRef());
644 SensorObject->SetObjectField(
"parameters", ThermalCameraParametersObject);
646 CameraArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
654 TArray<TSharedPtr<FJsonValue>> CameraArray;
663 FTransform
Transform = Camera->GetRootComponent()->GetRelativeTransform();
666 TSharedPtr<FJsonObject> DVSCameraParametersObject = MakeShareable(
new FJsonObject);
669 FJsonObjectConverter::UStructToJsonObject(FDVSCameraParameters::StaticStruct(), &Params, DVSCameraParametersObject.ToSharedRef());
671 SensorObject->SetObjectField(
"parameters", DVSCameraParametersObject);
673 CameraArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
681 TArray<TSharedPtr<FJsonValue>> RadarArray;
690 FTransform
Transform =
Radar->GetRootComponent()->GetRelativeTransform();
693 TSharedPtr<FJsonObject> RadarParametersObject = MakeShareable(
new FJsonObject);
696 FJsonObjectConverter::UStructToJsonObject(FRadarParameters::StaticStruct(), &Params, RadarParametersObject.ToSharedRef());
698 SensorObject->SetObjectField(
"parameters", RadarParametersObject);
700 RadarArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
708 TSharedPtr<FJsonObject> SensorObject = MakeShareable(
new FJsonObject);
713 UE_LOG(LogTemp, Warning, TEXT(
"ROSJsonExporter.cpp: SensorPtr is nullptr!"));
718 FJsonObject* SensorJsonObject = SensorObject.Get();
719 SensorJsonObject->SetStringField(
"type",
"sensor");
720 SensorJsonObject->SetStringField(
"model", SensorName);
721 SensorJsonObject->SetStringField(
"name", SensorPtr->
GetSensorName());
722 SensorJsonObject->SetStringField(
"id", IActorInformation::Execute_GetActorID(SensorPtr));
724 SensorJsonObject->SetStringField(
"attachedToBone", SensorPtr->
AttachedToBone.ToString());
726 FTransform
Transform = SensorPtr->GetRootComponent()->GetRelativeTransform();
727 FVector SensorLocation =
Transform.GetLocation();
728 FRotator SensorRotation =
Transform.Rotator();
736 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
737 FJsonObjectConverter::UStructToJsonObject(FCameraBaseParameters::StaticStruct(), &Parameters, ParametersObject.ToSharedRef());
739 return ParametersObject;
744 TSharedPtr<FJsonObject> SpawnPoint = MakeShareable(
new FJsonObject);
747 SpawnPoint->SetNumberField(
"x", Location.X);
748 SpawnPoint->SetNumberField(
"y", Location.Y);
749 SpawnPoint->SetNumberField(
"z", Location.Z);
752 SpawnPoint->SetNumberField(
"roll", Rotation.Roll);
753 SpawnPoint->SetNumberField(
"pitch", Rotation.Pitch);
754 SpawnPoint->SetNumberField(
"yaw", Rotation.Yaw);
757 SpawnPoint->SetNumberField(
"scaleX", Scale.X);
758 SpawnPoint->SetNumberField(
"scaleY", Scale.Y);
759 SpawnPoint->SetNumberField(
"scaleZ", Scale.Z);
761 ObjectEntry->SetObjectField(
"spawnPoint", SpawnPoint);
766 APIDDrone* DronePtr = Cast<APIDDrone>(VehiclePtr);
767 if (!ObjectEntry.IsValid() || !DronePtr)
772 TSharedPtr<FJsonObject> VehicleParams = MakeShareable(
new FJsonObject);
776 FString DroneActionString = UEnum::GetDisplayValueAsText(DroneParams.
DroneAction).ToString();
777 VehicleParams->SetStringField(
"droneAction", DroneActionString);
779 FString DroneEndActionString = UEnum::GetDisplayValueAsText(DroneParams.
DroneEndAction).ToString();
780 VehicleParams->SetStringField(
"DroneEndAction", DroneEndActionString);
782 if (!DroneParams.
Points.IsEmpty())
785 TArray<TSharedPtr<FJsonValue>> PointsArray;
786 PointsArray.Reserve(DroneParams.
Points.Num());
790 TSharedPtr<FJsonObject> PointObject = MakeShareable(
new FJsonObject);
793 FVector Translation =
Transform.GetLocation();
794 PointObject->SetNumberField(
"X", Translation.X);
795 PointObject->SetNumberField(
"Y", Translation.Y);
796 PointObject->SetNumberField(
"Z", Translation.Z);
799 FRotator Rotation =
Transform.GetRotation().Rotator();
800 PointObject->SetNumberField(
"Pitch", Rotation.Pitch);
801 PointObject->SetNumberField(
"Yaw", Rotation.Yaw);
802 PointObject->SetNumberField(
"Roll", Rotation.Roll);
805 PointsArray.Add(MakeShareable(
new FJsonValueObject(PointObject)));
809 VehicleParams->SetArrayField(
"points", PointsArray);
813 ObjectEntry->SetObjectField(
"parameters", VehicleParams);
818 if (FileName.IsEmpty())
821 FileName =
"ExportedJsonFile";
825 FileName = FileName.TrimStartAndEnd();
828 FString InvalidChars = TEXT(
"\\/:*?\"<>|");
829 for (TCHAR InvalidChar : InvalidChars)
831 FileName.ReplaceCharInline(InvalidChar, TEXT(
'_'), ESearchCase::CaseSensitive);
835 FString BaseFileName = FileName;
844 FString IndexString = (FileIndex > 0) ? FString::Printf(TEXT(
"_%d"), FileIndex) : FString();
845 FinalPath = DataPathFolder / FString::Printf(TEXT(
"ExportedJsonFiles/%s%s.json"), *BaseFileName, *IndexString);
847 }
while (FPlatformFileManager::Get().GetPlatformFile().FileExists(*FinalPath));
858 if (!AsDrone.IsEmpty() || !AsDataCapture.IsEmpty())
868 if (Transforms.IsEmpty())
875 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
878 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
879 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
882 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
883 ObjectEntry->SetStringField(TEXT(
"type"), TEXT(
"Vehicle"));
884 ObjectEntry->SetStringField(TEXT(
"model"), TEXT(
"Drone"));
885 ObjectEntry->SetStringField(TEXT(
"id"), TEXT(
"drone"));
886 ObjectEntry->SetBoolField(TEXT(
"teleportSpectator"),
true);
887 ObjectEntry->SetBoolField(TEXT(
"followObject"),
true);
890 TSharedPtr<FJsonObject> SpawnPointObject = MakeShareable(
new FJsonObject);
891 const FVector SpawnLocation = Transforms[0].GetLocation();
892 const FRotator SpawnRotation = Transforms[0].Rotator();
893 SpawnPointObject->SetNumberField(TEXT(
"x"), SpawnLocation.X);
894 SpawnPointObject->SetNumberField(TEXT(
"y"), SpawnLocation.Y);
895 SpawnPointObject->SetNumberField(TEXT(
"z"), SpawnLocation.Z);
896 SpawnPointObject->SetNumberField(TEXT(
"roll"), SpawnRotation.Roll);
897 SpawnPointObject->SetNumberField(TEXT(
"pitch"), SpawnRotation.Pitch);
898 SpawnPointObject->SetNumberField(TEXT(
"yaw"), SpawnRotation.Yaw);
900 ObjectEntry->SetObjectField(TEXT(
"spawnPoint"), SpawnPointObject);
902 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
903 ParametersObject->SetStringField(TEXT(
"droneAction"), TEXT(
"FollowPath"));
904 ParametersObject->SetStringField(TEXT(
"droneEndAction"), TEXT(
"destroy"));
905 ParametersObject->SetBoolField(TEXT(
"showForwardArrow"),
true);
906 ParametersObject->SetNumberField(TEXT(
"droneSlowToPointModifier"), 1.0f);
909 TSharedPtr<FJsonObject> PointsObject = MakeShareable(
new FJsonObject);
910 for (int32 i = 0; i < Transforms.Num(); ++i)
912 FString PointName = FString::Printf(TEXT(
"point%d"), i);
913 const FVector Location = Transforms[i].GetLocation();
914 const FRotator Rotation = Transforms[i].Rotator();
916 TSharedPtr<FJsonObject> PointData = MakeShareable(
new FJsonObject);
917 PointData->SetNumberField(TEXT(
"x"), Location.X);
918 PointData->SetNumberField(TEXT(
"y"), Location.Y);
919 PointData->SetNumberField(TEXT(
"z"), Location.Z);
920 PointData->SetNumberField(TEXT(
"roll"), Rotation.Roll);
921 PointData->SetNumberField(TEXT(
"pitch"), Rotation.Pitch);
922 PointData->SetNumberField(TEXT(
"yaw"), Rotation.Yaw);
924 PointsObject->SetObjectField(PointName, PointData);
927 ParametersObject->SetObjectField(TEXT(
"points"), PointsObject);
928 ObjectEntry->SetObjectField(TEXT(
"parameters"), ParametersObject);
930 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
932 RootJsonObject->SetArrayField(TEXT(
"objects"), ObjectsArray);
935 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
936 FJsonSerializer::Serialize(RootJsonObject.ToSharedRef(), JsonWriter);
938 if (!FFileHelper::SaveStringToFile(JsonString, *FilePath))
943 SimulatorLog::Log(FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath));
949 if (Transforms.IsEmpty())
954 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
957 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
958 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
961 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
962 ObjectEntry->SetStringField(TEXT(
"type"), TEXT(
"dataCapture"));
964 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
965 TSharedPtr<FJsonObject> PointsObject = MakeShareable(
new FJsonObject);
967 for (int32 i = 0; i < Transforms.Num(); ++i)
969 FString PointName = FString::Printf(TEXT(
"point%d"), i);
970 const FVector Location = Transforms[i].GetLocation();
971 const FRotator Rotation = Transforms[i].Rotator();
973 TSharedPtr<FJsonObject> PointData = MakeShareable(
new FJsonObject);
974 PointData->SetNumberField(TEXT(
"x"), Location.X);
975 PointData->SetNumberField(TEXT(
"y"), Location.Y);
976 PointData->SetNumberField(TEXT(
"z"), Location.Z);
977 PointData->SetNumberField(TEXT(
"roll"), Rotation.Roll);
978 PointData->SetNumberField(TEXT(
"pitch"), Rotation.Pitch);
979 PointData->SetNumberField(TEXT(
"yaw"), Rotation.Yaw);
981 PointsObject->SetObjectField(PointName, PointData);
984 ParametersObject->SetBoolField(TEXT(
"useGPSLocation"),
false);
985 ParametersObject->SetBoolField(TEXT(
"captureRotatedViews"),
false);
986 ParametersObject->SetBoolField(TEXT(
"zIsHeightAboveGround"),
false);
987 ParametersObject->SetObjectField(TEXT(
"points"), PointsObject);
989 ObjectEntry->SetObjectField(TEXT(
"parameters"), ParametersObject);
990 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
992 RootJsonObject->SetArrayField(TEXT(
"objects"), ObjectsArray);
995 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
996 FJsonSerializer::Serialize(RootJsonObject.ToSharedRef(), JsonWriter);
998 if (!FFileHelper::SaveStringToFile(JsonString, *FilePath))
1003 SimulatorLog::Log(FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath));
@ SemanticSegmentationCamera
FCameraBaseParameters GetCameraParameters()
FDVSCameraParameters GetDVSCameraParameters() const
FDepthCameraParameters GetDepthCameraParameters()
FLidarParameters GetLidarParameters() const
FDroneParameters GetDroneParameters() const
FRadarParameters GetRadarParameters()
FString GetSensorName() const
virtual ESensorTypes GetSensorType() const
FString AttachedToComponent
FThermalCameraParameters GetThermalCameraParameters() const
static void Log(const FString &Message, bool LogToTextFile=true, bool LogToROS=true)
static FString GetDataFolder()
static FString ConvertSensorTypeToString(ESensorTypes Sensortype)
static FString ConvertWalkerTypeToString(EWalkerType WalkerType)
static bool ExportCaptureLocations(TArray< FTransform > Transforms)
static FString ExportWalkerToJSON(const FString &FileName, AWalker *Walker)
static FString ExportWeatherToJSON(const FString &FileName, const FWeatherParameters &WeatherParameters)
static FString CreateUniqueFilePath(FString FileName)
static FString ExportVehicleAndSensorsToJSON(FString FileName, AVehicle *Vehicle, bool OverrideTransform=false, const FTransform &Transform=FTransform())
static FString ExportSensorToJSON(const FString &FileName, ASensor *Sensor)
static TArray< TSharedPtr< FJsonValue > > ParseDepthCameras(const TArray< ADepthCamera * > &DepthCameras)
static FString ExportAsDroneFollowPath(const FString &FileName, TArray< FTransform > &Transforms)
static TArray< TSharedPtr< FJsonValue > > ParseDVSCameras(const TArray< ADVSCamera * > &DVSCameras)
static TArray< TSharedPtr< FJsonValue > > ParseLidars(const TArray< ALidar * > &Lidars)
static TArray< TSharedPtr< FJsonValue > > ParseThermalCameras(const TArray< AThermalCamera * > &ThermalCameras)
static TSharedPtr< FJsonObject > CreateSensorJSONObject(const ASensor *SensorPtr, FString SensorName)
static FString ExportInstancedActorsToJSON(FString FileName, const TArray< AInstancedActor * > &Actors)
static FString ExportAsDataCapture(const FString &FileName, TArray< FTransform > &Transforms)
static void SetSpawnPoint(TSharedPtr< FJsonObject > &ObjectEntry, const FVector &Location, const FRotator &Rotation, const FVector &Scale)
static void SetDroneParameters(TSharedPtr< FJsonObject > &ObjectEntry, AVehicle *VehiclePtr)
static TSharedPtr< FJsonObject > CameraParametersToJSONObject(const FCameraBaseParameters &Parameters)
static TArray< TSharedPtr< FJsonValue > > ParseCameras(const TArray< ACamera * > &Cameras)
static TArray< TSharedPtr< FJsonValue > > ParseRadars(const TArray< ARadar * > &Radars)
EDroneEndAction DroneEndAction
TArray< FTransform > Points
TArray< FTransform > Points