diff --git a/LibCarla/source/carla/opendrive/parser/ObjectParser.cpp b/LibCarla/source/carla/opendrive/parser/ObjectParser.cpp index 620898a1b..ee73920f6 100644 --- a/LibCarla/source/carla/opendrive/parser/ObjectParser.cpp +++ b/LibCarla/source/carla/opendrive/parser/ObjectParser.cpp @@ -32,6 +32,7 @@ namespace parser { // type Crosswalk std::string type = node_object.attribute("type").as_string(); + std::string name = node_object.attribute("name").as_string(); if (type == "crosswalk") { // read all points @@ -62,6 +63,31 @@ namespace parser { node_object.attribute("length").as_double(), points); + } else if (name.substr(0, 6) == "Speed_") { + road::RoadId road_id = node_road.attribute("id").as_uint(); + road::Road *road = map_builder.GetRoad(road_id); + // speed signal by roadrunner + std::string speed_str = name.substr(6); + double speed = std::stod(speed_str); + map_builder.AddSignal(road, + node_object.attribute("id").as_string(), + node_object.attribute("s").as_double(), + node_object.attribute("t").as_double(), + node_object.attribute("name").as_string(), + "no", + node_object.attribute("orientation").value(), + node_object.attribute("zOffset").as_double(), + "OpenDRIVE", + "274", + speed_str, + speed, + "mph", + node_object.attribute("height").as_double(), + node_object.attribute("width").as_double(), + speed_str, + node_object.attribute("hdg").as_double(), + node_object.attribute("pitch").as_double(), + node_object.attribute("roll").as_double()); } } } diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficLightManager.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficLightManager.cpp index 6a5492bb0..1830bdf39 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficLightManager.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficLightManager.cpp @@ -378,9 +378,10 @@ T * GetClosestTrafficSignActor(const carla::road::Signal &Signal, UWorld* World) for (AActor* Actor : Actors) { float Dist = FVector::DistSquared(Actor->GetActorLocation(), Location); - if (Dist < MinDistance && MatchSignalAndActor(Signal, ClosestTrafficSign)) + T * TrafficSign = Cast(Actor); + if (Dist < MinDistance && MatchSignalAndActor(Signal, TrafficSign)) { - ClosestTrafficSign = Cast(Actor); + ClosestTrafficSign = TrafficSign; MinDistance = Dist; } } @@ -402,8 +403,8 @@ void ATrafficLightManager::SpawnTrafficLights() { continue; } - ATrafficSignBase * ClosestTrafficSign = GetClosestTrafficSignActor(*Signal.get(), GetWorld()); - ATrafficLightBase * TrafficLight = Cast(ClosestTrafficSign); + ATrafficLightBase * TrafficLight = GetClosestTrafficSignActor( + *Signal.get(), GetWorld()); if (TrafficLight) { UTrafficLightComponent *TrafficLightComponent = TrafficLight->GetTrafficLightComponent(); @@ -425,8 +426,8 @@ void ATrafficLightManager::SpawnTrafficLights() carla::road::SignalType::IsTrafficLight(Signal->GetType()) && !SignalsToSpawn.count(SignalId)) { - ATrafficSignBase * ClosestTrafficSign = GetClosestTrafficSignActor(*Signal.get(), GetWorld()); - ATrafficLightBase * TrafficLight = Cast(ClosestTrafficSign); + ATrafficLightBase * TrafficLight = GetClosestTrafficSignActor( + *Signal.get(), GetWorld()); if (TrafficLight) { UTrafficLightComponent *TrafficLightComponent = TrafficLight->GetTrafficLightComponent();