From 8be9fd22ddd9dc8057b9fee44596ec7470881c0e Mon Sep 17 00:00:00 2001 From: Blyron <53337103+Blyron@users.noreply.github.com> Date: Thu, 13 Apr 2023 13:00:15 +0200 Subject: [PATCH] Added spawnning for trees (#6367) * Added spawnning for trees * Set trees for designer * Tag static mesh actor from road type * Changed format of For --- LibCarla/source/carla/road/Map.cpp | 50 ++++++++++++++---- LibCarla/source/carla/road/Map.h | 10 ++-- .../source/carla/road/element/RoadInfoSpeed.h | 12 ++++- .../BP_OpenDriveToMap.uasset | Bin 0 -> 115757 bytes .../DT_TreesGeneration.uasset | Bin 0 -> 2406 bytes .../UW_OnRoadMainWidget.uasset | Bin 151287 -> 151844 bytes .../CarlaTools/Private/OpenDriveToMap.cpp | 24 +++++++-- .../Source/CarlaTools/Public/OpenDriveToMap.h | 15 ++++-- .../Source/CarlaTools/Public/TreeTableRow.h | 35 ++++++++++++ 9 files changed, 126 insertions(+), 20 deletions(-) create mode 100644 Unreal/CarlaUE4/Plugins/CarlaTools/Content/OnroadMapGenerator/BP_OpenDriveToMap.uasset create mode 100644 Unreal/CarlaUE4/Plugins/CarlaTools/Content/OnroadMapGenerator/DT_TreesGeneration.uasset create mode 100644 Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Public/TreeTableRow.h diff --git a/LibCarla/source/carla/road/Map.cpp b/LibCarla/source/carla/road/Map.cpp index 1de891bb3..68a34cb44 100644 --- a/LibCarla/source/carla/road/Map.cpp +++ b/LibCarla/source/carla/road/Map.cpp @@ -16,6 +16,7 @@ #include "carla/road/element/RoadInfoLaneOffset.h" #include "carla/road/element/RoadInfoLaneWidth.h" #include "carla/road/element/RoadInfoMarkRecord.h" +#include "carla/road/element/RoadInfoSpeed.h" #include "carla/road/element/RoadInfoSignal.h" #include "simplify/Simplify.h" @@ -1133,7 +1134,7 @@ namespace road { return result; } - std::map>> + std::map>> Map::GenerateOrderedChunkedMesh( const rpc::OpendriveGenerationParameters& params) const { @@ -1154,7 +1155,7 @@ namespace road { for ( size_t i = 0; i < num_threads; ++i ) { std::thread neworker( [this, &write_mutex, &mesh_factory, &road_out_mesh_list, i, num_roads_per_thread]() { - std::map>> Current = + std::map>> Current = std::move(GenerateRoadsMultithreaded(mesh_factory, i, num_roads_per_thread)); std::lock_guard guard(write_mutex); for ( auto&& pair : Current ) { @@ -1220,7 +1221,38 @@ namespace road { return road_out_mesh_list; } + std::vector> Map::GetTreesPosition( + float distancebetweentrees, + float distancefromdrivinglineborder) const { + std::vector> positions; + for (auto &&pair : _data.GetRoads()) { + const auto &road = pair.second; + if (!road.IsJunction()) { + for (auto &&lane_section : road.GetLaneSections()) { + const auto min_lane = lane_section.GetLanes().begin()->first == 0 ? + 1 : lane_section.GetLanes().begin()->first; + const auto max_lane = lane_section.GetLanes().rbegin()->first == 0 ? + -1 : lane_section.GetLanes().rbegin()->first; + const road::Lane* lane = lane_section.GetLane(min_lane); + if( lane ) { + double s_current = lane_section.GetDistance(); + const double s_end = lane_section.GetDistance() + lane_section.GetLength(); + while(s_current < s_end){ + const auto edges = lane->GetCornerPositions(s_current, 0); + geom::Vector3D director = edges.second - edges.first; + geom::Vector3D treeposition = edges.first - director.MakeUnitVector() * distancefromdrivinglineborder; + const carla::road::element::RoadInfoSpeed* roadinfo = lane->GetInfo(s_current); + positions.push_back(std::make_pair(treeposition,roadinfo->GetType())); + s_current += distancebetweentrees; + } + + } + } + } + } + return positions; + } geom::Mesh Map::GetAllCrosswalkMesh() const { geom::Mesh out_mesh; @@ -1326,20 +1358,20 @@ namespace road { } return A1 * sin((Kx1 * posx + Ky1 * posy + F1)) + - A2 * sin((Kx2 * posx + Ky2 * posy + F2)) + + A2 * sin((Kx2 * posx + Ky2 * posy + F2)) + A3 * bumpsoffset; } - std::map>> - Map::GenerateRoadsMultithreaded( const carla::geom::MeshFactory& mesh_factory, - const size_t index, const size_t number_of_roads_per_thread) const + std::map>> + Map::GenerateRoadsMultithreaded( const carla::geom::MeshFactory& mesh_factory, + const size_t index, const size_t number_of_roads_per_thread) const { std::map>> out; auto start = std::next( _data.GetRoads().begin(), (index ) * number_of_roads_per_thread); size_t endoffset = (index+1) * number_of_roads_per_thread; if( endoffset >= _data.GetRoads().size() ) { - endoffset = _data.GetRoads().size(); + endoffset = _data.GetRoads().size(); } auto end = std::next( _data.GetRoads().begin(), endoffset ); @@ -1449,7 +1481,7 @@ namespace road { auto start = std::next( roadsmesh.begin(), ( index ) * number_of_roads_per_thread); size_t endoffset = (index+1) * number_of_roads_per_thread; if( endoffset >= roadsmesh.size() ) { - endoffset = roadsmesh.size(); + endoffset = roadsmesh.size(); } auto end = std::next( roadsmesh.begin(), endoffset ); for ( auto it = start; it != end && it != roadsmesh.end(); ++it ) { @@ -1499,7 +1531,7 @@ namespace road { current_mesh->GetIndexes().push_back((Simplification.triangles[i].v[0]) + 1); current_mesh->GetIndexes().push_back((Simplification.triangles[i].v[1]) + 1); current_mesh->GetIndexes().push_back((Simplification.triangles[i].v[2]) + 1); - } + } } } diff --git a/LibCarla/source/carla/road/Map.h b/LibCarla/source/carla/road/Map.h index 999368c8e..a868e15cc 100644 --- a/LibCarla/source/carla/road/Map.h +++ b/LibCarla/source/carla/road/Map.h @@ -160,12 +160,16 @@ namespace road { std::vector> GenerateChunkedMesh( const rpc::OpendriveGenerationParameters& params) const; - std::map>> + std::map>> GenerateOrderedChunkedMesh( const rpc::OpendriveGenerationParameters& params) const; /// Buids a mesh of all crosswalks based on the OpenDRIVE geom::Mesh GetAllCrosswalkMesh() const; + std::vector> GetTreesPosition( + float distancebetweentrees, + float distancefromdrivinglineborder) const; + geom::Mesh GenerateWalls(const double distance, const float wall_height) const; /// Buids a list of meshes related with LineMarkings @@ -214,11 +218,11 @@ private: public: inline float GetZPosInDeformation(float posx, float posy) const; - std::map>> + std::map>> GenerateRoadsMultithreaded( const carla::geom::MeshFactory& mesh_factory, const size_t index, const size_t number_of_roads_per_thread) const; - void GenerateJunctions(const carla::geom::MeshFactory& mesh_factory, + void GenerateJunctions(const carla::geom::MeshFactory& mesh_factory, const rpc::OpendriveGenerationParameters& params, std::map>>* juntion_out_mesh_list) const; diff --git a/LibCarla/source/carla/road/element/RoadInfoSpeed.h b/LibCarla/source/carla/road/element/RoadInfoSpeed.h index d3bc51fe5..5de4aa47e 100644 --- a/LibCarla/source/carla/road/element/RoadInfoSpeed.h +++ b/LibCarla/source/carla/road/element/RoadInfoSpeed.h @@ -17,8 +17,13 @@ namespace element { RoadInfoSpeed(double s, double speed) : RoadInfo(s), - _speed(speed) {} + _speed(speed), + _type("Town") {} + RoadInfoSpeed(double s, double speed, std::string& type) + : RoadInfo(s), + _speed(speed), + _type(type) {} void AcceptVisitor(RoadInfoVisitor &v) final { v.Visit(*this); } @@ -27,9 +32,14 @@ namespace element { return _speed; } + std::string GetType() const{ + return _type; + } + private: const double _speed; + const std::string _type; }; } // namespace element diff --git a/Unreal/CarlaUE4/Plugins/CarlaTools/Content/OnroadMapGenerator/BP_OpenDriveToMap.uasset b/Unreal/CarlaUE4/Plugins/CarlaTools/Content/OnroadMapGenerator/BP_OpenDriveToMap.uasset new file mode 100644 index 0000000000000000000000000000000000000000..5c0452cedb37fcf3f20b444c6d72afd765a9f1fc GIT binary patch literal 115757 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⪼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%0DO56&EvG$?)$1)t2Mguy9Rkq2HG8jPA}v1?Qll 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 literal 0 HcmV?d00001 diff --git a/Unreal/CarlaUE4/Plugins/CarlaTools/Content/OnroadMapGenerator/DT_TreesGeneration.uasset b/Unreal/CarlaUE4/Plugins/CarlaTools/Content/OnroadMapGenerator/DT_TreesGeneration.uasset new file mode 100644 index 0000000000000000000000000000000000000000..189b7891685576a14000f238dcc2024abae5c07c GIT binary patch literal 2406 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 T#N2S$}7j?dzruoqZ-(0W~^CRjWH)ziabh{?4?d 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 P-Gg+cVz7I0{xAOzJPO!B diff --git a/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Private/OpenDriveToMap.cpp b/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Private/OpenDriveToMap.cpp index 3c3078078..1c09e2f2b 100644 --- a/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Private/OpenDriveToMap.cpp +++ b/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Private/OpenDriveToMap.cpp @@ -126,7 +126,7 @@ void UOpenDriveToMap::CreateMap() UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("Map Name Is Empty") ); return; } - if ( !IsValid(FileDownloader) ) + if ( !IsValid(FileDownloader) ) { FileDownloader = NewObject(); } @@ -166,7 +166,7 @@ void UOpenDriveToMap::LoadMap() std::string opendrive_xml = carla::rpc::FromLongFString(FileContent); boost::optional CarlaMap = carla::opendrive::OpenDriveParser::Load(opendrive_xml); - if (!CarlaMap.has_value()) + if (!CarlaMap.has_value()) { UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("Invalid Map")); } @@ -179,17 +179,19 @@ void UOpenDriveToMap::LoadMap() UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("MapName %s"), *MapName); GenerateAll(CarlaMap); + GenerationFinished(); } void UOpenDriveToMap::GenerateAll(const boost::optional& CarlaMap ) { - if (!CarlaMap.has_value()) + if (!CarlaMap.has_value()) { UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("Invalid Map")); }else { GenerateRoadMesh(CarlaMap); GenerateSpawnPoints(CarlaMap); + GenerateTreePositions(CarlaMap); GenerateLaneMarks(CarlaMap); } } @@ -207,7 +209,7 @@ void UOpenDriveToMap::GenerateRoadMesh( const boost::optional& start = FPlatformTime::Seconds(); int index = 0; - for (const auto &PairMap : Meshes) + for (const auto &PairMap : Meshes) { for( const auto &Mesh : PairMap.second ) { @@ -359,6 +361,20 @@ void UOpenDriveToMap::GenerateSpawnPoints( const boost::optional& CarlaMap ) +{ + const std::vector> Locations = + CarlaMap->GetTreesPosition(DistanceBetweenTrees, DistanceFromRoadEdge ); + int i = 0; + for (const auto &cl : Locations) + { + AActor *Spawner = GetWorld()->SpawnActor(AStaticMeshActor::StaticClass(), cl.first.ToFVector() * 100, FRotator(0,0,0)); + Spawner->Tags.Add(FName("TreeSpawnPosition")); + Spawner->Tags.Add(FName(cl.second.c_str())); + Spawner->SetActorLabel("TreeSpawnPosition" + FString::FromInt(i) ); + ++i; + } +} UStaticMesh* UOpenDriveToMap::CreateStaticMeshAsset( UProceduralMeshComponent* ProcMeshComp, int32 MeshIndex, FString FolderName ) { FMeshDescription MeshDescription = BuildMeshDescription(ProcMeshComp); diff --git a/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Public/OpenDriveToMap.h b/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Public/OpenDriveToMap.h index 764ac3abc..db1ca1eb6 100644 --- a/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Public/OpenDriveToMap.h +++ b/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Public/OpenDriveToMap.h @@ -20,7 +20,7 @@ class UMeshComponent; class UCustomFileDownloader; class UMaterialInstance; /** - * + * */ UCLASS(Blueprintable, BlueprintType) class CARLATOOLS_API UOpenDriveToMap : public UObject @@ -30,7 +30,7 @@ class CARLATOOLS_API UOpenDriveToMap : public UObject public: UFUNCTION() - void ConvertOSMInOpenDrive(); + void ConvertOSMInOpenDrive(); UFUNCTION( BlueprintCallable ) void CreateMap(); @@ -47,6 +47,11 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Settings") FVector2D OriginGeoCoordinates; + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="Settings" ) + float DistanceBetweenTrees = 50.0f; + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="Settings" ) + float DistanceFromRoadEdge = 3.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite) UMaterialInstance* DefaultRoadMaterial; @@ -57,6 +62,9 @@ protected: UFUNCTION( BlueprintCallable ) void SaveMap(); + + UFUNCTION( BlueprintImplementableEvent ) + void GenerationFinished(); private: UFUNCTION() @@ -68,13 +76,14 @@ private: void GenerateAll(const boost::optional& CarlaMap); void GenerateRoadMesh(const boost::optional& CarlaMap); void GenerateSpawnPoints(const boost::optional& CarlaMap); + void GenerateTreePositions(const boost::optional& CarlaMap); void GenerateLaneMarks(const boost::optional& CarlaMap); carla::rpc::OpendriveGenerationParameters opg_parameters; UStaticMesh* CreateStaticMeshAsset(UProceduralMeshComponent* ProcMeshComp, int32 MeshIndex, FString FolderName); TArray CreateStaticMeshAssets(); - + UPROPERTY() UCustomFileDownloader* FileDownloader; UPROPERTY() diff --git a/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Public/TreeTableRow.h b/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Public/TreeTableRow.h new file mode 100644 index 000000000..8c97713b6 --- /dev/null +++ b/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Public/TreeTableRow.h @@ -0,0 +1,35 @@ +// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma de Barcelona (UAB). This work is licensed under the terms of the MIT license. For a copy, see . + +#pragma once + +#include "CoreMinimal.h" +#include "Engine/DataTable.h" +#include "TreeTableRow.generated.h" + +/** + * + */ + +UENUM(BlueprintType) +enum class ELaneDescriptor : uint8 { + None = 0x0, + Town = 0x1 << 0, + Motorway = 0x1 << 1, + Rural = 0x1 << 2, + Any = 255 // 0xFE +}; + +USTRUCT(BlueprintType) +struct FTreeTableRow : public FTableRowBase { + + GENERATED_BODY() + +public: + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category= "Category") + ELaneDescriptor TreesCategory; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category= "Trees") + TArray> Trees; + +};