20void USpeedLimitComponent::SetSpeedLimit(
float Limit)
27 const double epsilon = 0.00001;
29 auto References = GetAllReferencesToThisSignal(
Map);
30 auto* Signal = GetSignal(
Map);
33 SetSpeedLimit(Signal->GetValue());
36 for (
auto& Reference : References)
38 auto RoadId = Reference.first;
39 const auto* SignalReference = Reference.second;
40 for(
auto &val : SignalReference->GetValidities())
42 for(
auto lane :
carla::geom::Math::GenerateRange(val._from_lane, val._to_lane))
47 auto signal_waypoint =
Map.GetWaypoint(
48 RoadId, lane, SignalReference->GetS()).get();
50 if(
Map.GetLane(signal_waypoint).GetType() != cr::Lane::LaneType::Driving)
54 float BoxSize =
static_cast<float>(
55 0.7f*
Map.GetLaneWidth(signal_waypoint)*0.5);
57 BoxSize = std::max(0.01f, BoxSize);
59 double LaneLength =
Map.GetLane(signal_waypoint).GetLength();
60 double LaneDistance =
Map.GetLane(signal_waypoint).GetDistance();
63 signal_waypoint.s = FMath::Clamp(signal_waypoint.s - BoxSize,
64 LaneDistance + epsilon, LaneDistance + LaneLength - epsilon);
68 signal_waypoint.s = FMath::Clamp(signal_waypoint.s + BoxSize,
69 LaneDistance + epsilon, LaneDistance + LaneLength - epsilon);
71 float UnrealBoxSize = 100*BoxSize;
72 FTransform BoxTransform =
Map.ComputeTransform(signal_waypoint);
78 GenerateSpeedBox(BoxTransform, UnrealBoxSize);
85void USpeedLimitComponent::GenerateSpeedBox(
const FTransform BoxTransform,
float BoxSize)
87 UBoxComponent* BoxComponent = GenerateTriggerBox(BoxTransform, BoxSize);
88 BoxComponent->OnComponentBeginOverlap.AddDynamic(
this, &USpeedLimitComponent::OnOverlapBeginSpeedLimitBox);
89 AddEffectTriggerVolume(BoxComponent);
97 const FHitResult &SweepResult)
102 auto Controller = Cast<AWheeledVehicleAIController>(
Vehicle->GetController());
Base class for CARLA wheeled vehicles.
FTransform GlobalToLocalTransform(const FTransform &InTransform) const
地图类的前向声明,用于在LaneInvasionSensor类中可能的引用。
static ALargeMapManager * GetLargeMapManager(const UObject *WorldContextObject)