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"
55 VehicleName =
"Forwarder";
59 VehicleName =
"Harvester";
63 VehicleName =
"Drone";
72 if (VehicleName.IsEmpty())
79 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
82 TSharedPtr<FJsonObject> JsonObject = MakeShareable(
new FJsonObject);
83 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
85 TSharedPtr<FJsonObject> VehicleObject = MakeShareable(
new FJsonObject);
86 VehicleObject->SetStringField(
"type",
"vehicle");
87 VehicleObject->SetStringField(
"model", VehicleName);
88 VehicleObject->SetBoolField(
"teleportSpectator",
false);
89 VehicleObject->SetBoolField(
"followObject",
false);
90 VehicleObject->SetBoolField(
"destroyOverlappingObjects",
false);
91 VehicleObject->SetStringField(
"id", IActorInformation::Execute_GetActorID(
Vehicle));
93 TSharedPtr<FJsonObject> VehicleSpawnPoint = MakeShareable(
new FJsonObject);
95 FVector SpawnLocation;
96 FRotator SpawnRotation;
98 if (OverrideTransform)
105 SpawnLocation =
Vehicle->GetActorLocation();
106 SpawnRotation =
Vehicle->GetActorRotation();
120 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
123 FJsonObjectConverter::UStructToJsonObject(FWheeledVehicleParameters::StaticStruct(), &Params, ParametersObject.ToSharedRef());
124 VehicleObject->SetObjectField(
"parameters", ParametersObject);
128 TArray<TSharedPtr<FJsonValue>> SensorsArray;
130 USensorsManagerComponent* SensorManager =
Vehicle->GetSensorsManager();
134 SensorsArray.Append(
ParseLidars(SensorManager->GetLidars()));
135 SensorsArray.Append(
ParseCameras(SensorManager->GetCameras()));
139 SensorsArray.Append(
ParseRadars(SensorManager->GetRadars()));
143 if (SensorsArray.Num() > 0)
145 VehicleObject->SetArrayField(
"sensors", SensorsArray);
148 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(VehicleObject)));
150 JsonObject->SetArrayField(
"objects", ObjectsArray);
153 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
154 FJsonSerializer::Serialize(JsonObject.ToSharedRef(), JsonWriter);
157 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
164 FString Msg = FString::Printf(TEXT(
"Exported vehicle JSON file to: %s"), *FilePath);
174 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
179 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
180 FJsonObjectConverter::UStructToJsonObject(FWeatherParameters::StaticStruct(), &WeatherParameters, ParametersObject.ToSharedRef());
182 TSharedPtr<FJsonObject> RootObject = MakeShareable(
new FJsonObject);
183 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
184 TSharedPtr<FJsonObject> WeatherObject = MakeShareable(
new FJsonObject);
185 WeatherObject->SetStringField(
"type",
"weather");
187 WeatherObject->SetObjectField(
"parameters", ParametersObject);
189 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(WeatherObject)));
191 RootObject->SetArrayField(
"objects", ObjectsArray);
194 TSharedRef<TJsonWriter<>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
195 FJsonSerializer::Serialize(RootObject.ToSharedRef(), JsonWriter);
197 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
204 FString Msg = FString::Printf(TEXT(
"Exported Weather JSON file to: %s"), *FilePath);
214 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
218 if (Actors.IsEmpty())
221 UE_LOG(LogTemp, Warning, TEXT(
"ROSJsonExporter.cpp: Actors TArray is empty."));
228 TSharedPtr<FJsonObject> JsonObject = MakeShareable(
new FJsonObject);
230 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
238 FString type = Actor->GetTypeIDString();
239 FString model = Actor->GetModelIDString();
242 if (type ==
"none" || model ==
"none")
247 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
248 ObjectEntry->SetStringField(
"type", type);
249 ObjectEntry->SetStringField(
"model", model);
252 TSharedPtr<FJsonObject> SpawnPoint = MakeShareable(
new FJsonObject);
253 FVector SpawnLocation = Actor->GetActorLocation();
254 FRotator SpawnRotation = Actor->GetActorRotation();
255 FVector Scale = Actor->GetActorScale();
256 SetSpawnPoint(ObjectEntry, SpawnLocation, SpawnRotation, Scale);
257 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
260 JsonObject->SetArrayField(
"objects", ObjectsArray);
263 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
264 FJsonSerializer::Serialize(JsonObject.ToSharedRef(), JsonWriter);
266 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
273 FString Msg = FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath);
289 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
294 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
297 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
298 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
304 ObjectEntry->SetStringField(
"type",
"Walker");
306 ObjectEntry->SetStringField(
"id", IActorInformation::Execute_GetActorID(
Walker));
309 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
310 FJsonObjectConverter::UStructToJsonObject(FWalkerParameters::StaticStruct(), &WalkerParameters, ParametersObject.ToSharedRef());
313 ParametersObject->RemoveField(TEXT(
"points"));
315 if (WalkerParameters.
Points.Num() >= 2)
319 TSharedPtr<FJsonObject> PointsObject = MakeShareable(
new FJsonObject);
320 for (int32 i = 0; i < WalkerParameters.
Points.Num(); ++i)
322 FString PointName = FString::Printf(TEXT(
"point%d"), i);
325 FVector Location =
Transform.GetLocation();
329 TSharedPtr<FJsonObject> PointData = MakeShareable(
new FJsonObject);
330 PointData->SetNumberField(TEXT(
"x"), Location.X);
331 PointData->SetNumberField(TEXT(
"y"), Location.Y);
332 PointData->SetNumberField(TEXT(
"z"), Location.Z);
333 PointData->SetNumberField(TEXT(
"roll"), Rotation.Roll);
334 PointData->SetNumberField(TEXT(
"pitch"), Rotation.Pitch);
335 PointData->SetNumberField(TEXT(
"yaw"), Rotation.Yaw);
338 PointsObject->SetObjectField(PointName, PointData);
342 ParametersObject->SetObjectField(TEXT(
"points"), PointsObject);
347 TSharedPtr<FJsonObject> SpawnPoint = MakeShareable(
new FJsonObject);
349 FVector SpawnLocation;
350 FRotator SpawnRotation;
351 if (WalkerParameters.
Points.IsEmpty())
355 SpawnLocation =
Walker->GetActorLocation();
356 SpawnRotation =
Walker->GetActorRotation();
370 ObjectEntry->SetObjectField(
"parameters", ParametersObject);
373 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
376 RootJsonObject->SetArrayField(
"objects", ObjectsArray);
380 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
381 FJsonSerializer::Serialize(RootJsonObject.ToSharedRef(), JsonWriter);
384 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
392 FString Msg = FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath);
408 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
415 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
417 bool Success =
false;
423 ALidar* LidarPtr = Cast<ALidar>(Sensor);
427 FJsonObjectConverter::UStructToJsonObject(FLidarParameters::StaticStruct(), &LidarParameters, ParametersObject.ToSharedRef());
437 ACamera* CameraPtr = Cast<ACamera>(Sensor);
449 if (ThermalCameraPtr)
452 FJsonObjectConverter::UStructToJsonObject(FThermalCameraParameters::StaticStruct(), &ThermalCameraParameters, ParametersObject.ToSharedRef());
460 ACamera* CameraPtr = Cast<ACamera>(Sensor);
463 ADepthCamera* DepthCameraPtr = Cast<ADepthCamera>(Sensor);
467 FJsonObjectConverter::UStructToJsonObject(FDepthCameraParameters::StaticStruct(), &DepthCameraParameters, ParametersObject.ToSharedRef());
476 ADVSCamera* DVSPtr = Cast<ADVSCamera>(Sensor);
480 FJsonObjectConverter::UStructToJsonObject(FDVSCameraParameters::StaticStruct(), &CameraParameters, ParametersObject.ToSharedRef());
488 ARadar* RadaPtr = Cast<ARadar>(Sensor);
492 FJsonObjectConverter::UStructToJsonObject(FRadarParameters::StaticStruct(), &RadarParameters, ParametersObject.ToSharedRef());
503 UE_LOG(LogTemp, Warning, TEXT(
"ROSJsonExporter.cpp: Exporting Collision/Transform or Overlap sensor is not supported."));
517 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
520 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
521 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
524 ObjectEntry->SetStringField(
"type",
"Sensor");
525 ObjectEntry->SetStringField(
"model", SensorTypeString);
526 ObjectEntry->SetStringField(
"id", IActorInformation::Execute_GetActorID(Sensor));
528 FVector SpawnLocation = Sensor->GetActorLocation();
529 FRotator SpawnRotation = Sensor->GetActorRotation();
530 SetSpawnPoint(ObjectEntry, SpawnLocation, SpawnRotation, Sensor->GetActorScale());
533 ObjectEntry->SetObjectField(
"parameters", ParametersObject);
536 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
539 RootJsonObject->SetArrayField(
"objects", ObjectsArray);
543 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
544 FJsonSerializer::Serialize(RootJsonObject.ToSharedRef(), JsonWriter);
547 bool Saved = FFileHelper::SaveStringToFile(JsonString, *FilePath);
554 FString Msg = FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath);
562 TArray<TSharedPtr<FJsonValue>> LidarArray;
571 FTransform
Transform =
Lidar->GetRootComponent()->GetRelativeTransform();
574 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
577 FJsonObjectConverter::UStructToJsonObject(FLidarParameters::StaticStruct(), &Params, ParametersObject.ToSharedRef());
579 SensorObject->SetObjectField(
"parameters", ParametersObject);
581 LidarArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
589 TArray<TSharedPtr<FJsonValue>> CameraArray;
591 for (
ACamera* Camera : Cameras)
598 FTransform
Transform = Camera->GetRootComponent()->GetRelativeTransform();
605 SensorObject->SetObjectField(
"parameters", ParametersObject);
607 CameraArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
615 TArray<TSharedPtr<FJsonValue>> CameraArray;
624 FTransform
Transform = Camera->GetRootComponent()->GetRelativeTransform();
627 TSharedPtr<FJsonObject> DepthCameraParametersObject = MakeShareable(
new FJsonObject);
630 FJsonObjectConverter::UStructToJsonObject(FDepthCameraParameters::StaticStruct(), &Params, DepthCameraParametersObject.ToSharedRef());
632 SensorObject->SetObjectField(
"parameters", DepthCameraParametersObject);
634 CameraArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
642 TArray<TSharedPtr<FJsonValue>> CameraArray;
651 FTransform
Transform = Camera->GetRootComponent()->GetRelativeTransform();
654 TSharedPtr<FJsonObject> ThermalCameraParametersObject = MakeShareable(
new FJsonObject);
657 FJsonObjectConverter::UStructToJsonObject(FThermalCameraParameters::StaticStruct(), &Params, ThermalCameraParametersObject.ToSharedRef());
659 SensorObject->SetObjectField(
"parameters", ThermalCameraParametersObject);
661 CameraArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
669 TArray<TSharedPtr<FJsonValue>> CameraArray;
678 FTransform
Transform = Camera->GetRootComponent()->GetRelativeTransform();
681 TSharedPtr<FJsonObject> DVSCameraParametersObject = MakeShareable(
new FJsonObject);
684 FJsonObjectConverter::UStructToJsonObject(FDVSCameraParameters::StaticStruct(), &Params, DVSCameraParametersObject.ToSharedRef());
686 SensorObject->SetObjectField(
"parameters", DVSCameraParametersObject);
688 CameraArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
696 TArray<TSharedPtr<FJsonValue>> RadarArray;
705 FTransform
Transform =
Radar->GetRootComponent()->GetRelativeTransform();
708 TSharedPtr<FJsonObject> RadarParametersObject = MakeShareable(
new FJsonObject);
711 FJsonObjectConverter::UStructToJsonObject(FRadarParameters::StaticStruct(), &Params, RadarParametersObject.ToSharedRef());
713 SensorObject->SetObjectField(
"parameters", RadarParametersObject);
715 RadarArray.Add(MakeShareable(
new FJsonValueObject(SensorObject)));
723 TSharedPtr<FJsonObject> SensorObject = MakeShareable(
new FJsonObject);
728 UE_LOG(LogTemp, Warning, TEXT(
"ROSJsonExporter.cpp: SensorPtr is nullptr!"));
733 FJsonObject* SensorJsonObject = SensorObject.Get();
734 SensorJsonObject->SetStringField(
"type",
"sensor");
735 SensorJsonObject->SetStringField(
"model", SensorName);
736 SensorJsonObject->SetStringField(
"name", SensorPtr->
GetSensorName());
737 SensorJsonObject->SetStringField(
"id", IActorInformation::Execute_GetActorID(SensorPtr));
739 SensorJsonObject->SetStringField(
"attachedToBone", SensorPtr->
AttachedToBone.ToString());
741 FTransform
Transform = SensorPtr->GetRootComponent()->GetRelativeTransform();
742 FVector SensorLocation =
Transform.GetLocation();
743 FRotator SensorRotation =
Transform.Rotator();
751 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
752 FJsonObjectConverter::UStructToJsonObject(FCameraBaseParameters::StaticStruct(), &Parameters, ParametersObject.ToSharedRef());
754 return ParametersObject;
759 TSharedPtr<FJsonObject> SpawnPoint = MakeShareable(
new FJsonObject);
762 SpawnPoint->SetNumberField(
"x", Location.X);
763 SpawnPoint->SetNumberField(
"y", Location.Y);
764 SpawnPoint->SetNumberField(
"z", Location.Z);
767 SpawnPoint->SetNumberField(
"roll", Rotation.Roll);
768 SpawnPoint->SetNumberField(
"pitch", Rotation.Pitch);
769 SpawnPoint->SetNumberField(
"yaw", Rotation.Yaw);
772 SpawnPoint->SetNumberField(
"scaleX", Scale.X);
773 SpawnPoint->SetNumberField(
"scaleY", Scale.Y);
774 SpawnPoint->SetNumberField(
"scaleZ", Scale.Z);
776 ObjectEntry->SetObjectField(
"spawnPoint", SpawnPoint);
781 APIDDrone* DronePtr = Cast<APIDDrone>(VehiclePtr);
782 if (!ObjectEntry.IsValid() || !DronePtr)
787 TSharedPtr<FJsonObject> VehicleParams = MakeShareable(
new FJsonObject);
791 FString DroneActionString = UEnum::GetDisplayValueAsText(DroneParams.
DroneAction).ToString();
792 VehicleParams->SetStringField(
"droneAction", DroneActionString);
794 FString DroneEndActionString = UEnum::GetDisplayValueAsText(DroneParams.
DroneEndAction).ToString();
795 VehicleParams->SetStringField(
"DroneEndAction", DroneEndActionString);
797 if (!DroneParams.
Points.IsEmpty())
800 TArray<TSharedPtr<FJsonValue>> PointsArray;
801 PointsArray.Reserve(DroneParams.
Points.Num());
805 TSharedPtr<FJsonObject> PointObject = MakeShareable(
new FJsonObject);
808 FVector Translation =
Transform.GetLocation();
809 PointObject->SetNumberField(
"X", Translation.X);
810 PointObject->SetNumberField(
"Y", Translation.Y);
811 PointObject->SetNumberField(
"Z", Translation.Z);
814 FRotator Rotation =
Transform.GetRotation().Rotator();
815 PointObject->SetNumberField(
"Pitch", Rotation.Pitch);
816 PointObject->SetNumberField(
"Yaw", Rotation.Yaw);
817 PointObject->SetNumberField(
"Roll", Rotation.Roll);
820 PointsArray.Add(MakeShareable(
new FJsonValueObject(PointObject)));
824 VehicleParams->SetArrayField(
"points", PointsArray);
828 ObjectEntry->SetObjectField(
"parameters", VehicleParams);
833 if (FileName.IsEmpty())
836 FileName =
"ExportedJsonFile";
840 FileName = FileName.TrimStartAndEnd();
843 FString InvalidChars = TEXT(
"\\/:*?\"<>|");
844 for (TCHAR InvalidChar : InvalidChars)
846 FileName.ReplaceCharInline(InvalidChar, TEXT(
'_'), ESearchCase::CaseSensitive);
850 FString BaseFileName = FileName;
859 FString IndexString = (FileIndex > 0) ? FString::Printf(TEXT(
"_%d"), FileIndex) : FString();
860 FinalPath = DataPathFolder / FString::Printf(TEXT(
"ExportedJsonFiles/%s%s.json"), *BaseFileName, *IndexString);
862 }
while (FPlatformFileManager::Get().GetPlatformFile().FileExists(*FinalPath));
873 if (!AsDrone.IsEmpty() || !AsDataCapture.IsEmpty())
883 if (Transforms.IsEmpty())
890 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
893 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
894 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
897 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
898 ObjectEntry->SetStringField(TEXT(
"type"), TEXT(
"Vehicle"));
899 ObjectEntry->SetStringField(TEXT(
"model"), TEXT(
"Drone"));
900 ObjectEntry->SetStringField(TEXT(
"id"), TEXT(
"drone"));
901 ObjectEntry->SetBoolField(TEXT(
"teleportSpectator"),
true);
902 ObjectEntry->SetBoolField(TEXT(
"followObject"),
true);
905 TSharedPtr<FJsonObject> SpawnPointObject = MakeShareable(
new FJsonObject);
906 const FVector SpawnLocation = Transforms[0].GetLocation();
907 const FRotator SpawnRotation = Transforms[0].Rotator();
908 SpawnPointObject->SetNumberField(TEXT(
"x"), SpawnLocation.X);
909 SpawnPointObject->SetNumberField(TEXT(
"y"), SpawnLocation.Y);
910 SpawnPointObject->SetNumberField(TEXT(
"z"), SpawnLocation.Z);
911 SpawnPointObject->SetNumberField(TEXT(
"roll"), SpawnRotation.Roll);
912 SpawnPointObject->SetNumberField(TEXT(
"pitch"), SpawnRotation.Pitch);
913 SpawnPointObject->SetNumberField(TEXT(
"yaw"), SpawnRotation.Yaw);
915 ObjectEntry->SetObjectField(TEXT(
"spawnPoint"), SpawnPointObject);
917 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
918 ParametersObject->SetStringField(TEXT(
"droneAction"), TEXT(
"FollowPath"));
919 ParametersObject->SetStringField(TEXT(
"droneEndAction"), TEXT(
"destroy"));
920 ParametersObject->SetBoolField(TEXT(
"showForwardArrow"),
true);
923 TSharedPtr<FJsonObject> PointsObject = MakeShareable(
new FJsonObject);
924 for (int32 i = 0; i < Transforms.Num(); ++i)
926 FString PointName = FString::Printf(TEXT(
"point%d"), i);
927 const FVector Location = Transforms[i].GetLocation();
928 const FRotator Rotation = Transforms[i].Rotator();
930 TSharedPtr<FJsonObject> PointData = MakeShareable(
new FJsonObject);
931 PointData->SetNumberField(TEXT(
"x"), Location.X);
932 PointData->SetNumberField(TEXT(
"y"), Location.Y);
933 PointData->SetNumberField(TEXT(
"z"), Location.Z);
934 PointData->SetNumberField(TEXT(
"roll"), Rotation.Roll);
935 PointData->SetNumberField(TEXT(
"pitch"), Rotation.Pitch);
936 PointData->SetNumberField(TEXT(
"yaw"), Rotation.Yaw);
938 PointsObject->SetObjectField(PointName, PointData);
941 ParametersObject->SetObjectField(TEXT(
"points"), PointsObject);
942 ObjectEntry->SetObjectField(TEXT(
"parameters"), ParametersObject);
944 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
946 RootJsonObject->SetArrayField(TEXT(
"objects"), ObjectsArray);
949 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
950 FJsonSerializer::Serialize(RootJsonObject.ToSharedRef(), JsonWriter);
952 if (!FFileHelper::SaveStringToFile(JsonString, *FilePath))
957 SimulatorLog::Log(FString::Printf(TEXT(
"Exported Actors JSON file to: %s"), *FilePath));
963 if (Transforms.IsEmpty())
968 FString ValidatedFileName = FPaths::MakeValidFileName(FileName, TEXT(
'_'));
971 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
972 TArray<TSharedPtr<FJsonValue>> ObjectsArray;
975 TSharedPtr<FJsonObject> ObjectEntry = MakeShareable(
new FJsonObject);
976 ObjectEntry->SetStringField(TEXT(
"type"), TEXT(
"dataCapture"));
978 TSharedPtr<FJsonObject> ParametersObject = MakeShareable(
new FJsonObject);
979 TSharedPtr<FJsonObject> PointsObject = MakeShareable(
new FJsonObject);
981 for (int32 i = 0; i < Transforms.Num(); ++i)
983 FString PointName = FString::Printf(TEXT(
"point%d"), i);
984 const FVector Location = Transforms[i].GetLocation();
985 const FRotator Rotation = Transforms[i].Rotator();
987 TSharedPtr<FJsonObject> PointData = MakeShareable(
new FJsonObject);
988 PointData->SetNumberField(TEXT(
"x"), Location.X);
989 PointData->SetNumberField(TEXT(
"y"), Location.Y);
990 PointData->SetNumberField(TEXT(
"z"), Location.Z);
991 PointData->SetNumberField(TEXT(
"roll"), Rotation.Roll);
992 PointData->SetNumberField(TEXT(
"pitch"), Rotation.Pitch);
993 PointData->SetNumberField(TEXT(
"yaw"), Rotation.Yaw);
995 PointsObject->SetObjectField(PointName, PointData);
998 ParametersObject->SetBoolField(TEXT(
"useGPSLocation"),
false);
999 ParametersObject->SetBoolField(TEXT(
"captureRotatedViews"),
false);
1000 ParametersObject->SetBoolField(TEXT(
"zIsHeightAboveGround"),
false);
1001 ParametersObject->SetObjectField(TEXT(
"points"), PointsObject);
1003 ObjectEntry->SetObjectField(TEXT(
"parameters"), ParametersObject);
1004 ObjectsArray.Add(MakeShareable(
new FJsonValueObject(ObjectEntry)));
1006 RootJsonObject->SetArrayField(TEXT(
"objects"), ObjectsArray);
1009 TSharedRef<TJsonWriter<TCHAR>> JsonWriter = TJsonWriterFactory<>::Create(&JsonString);
1010 FJsonSerializer::Serialize(RootJsonObject.ToSharedRef(), JsonWriter);
1012 if (!FFileHelper::SaveStringToFile(JsonString, *FilePath))
1017 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