CARLA
 
载入中...
搜索中...
未找到
TrafficLightManager.h
浏览该文件的文档.
1// Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#pragma once
8
10#include "TrafficLightGroup.h"
11#include "TrafficSignBase.h"
13
14#include "TrafficLightManager.generated.h"
15
16/// 负责创建和分配交通灯组、控制器和组件的类。
17UCLASS()
18class CARLA_API ATrafficLightManager : public AActor
19{
20 GENERATED_BODY()
21
22public:
23
25
26 UFUNCTION(BlueprintCallable, Category = "Traffic Light Manager")
27 void RegisterLightComponentFromOpenDRIVE(UTrafficLightComponent * TrafficLight);
28
29 UFUNCTION(BlueprintCallable, Category = "Traffic Light Manager")
30 void RegisterLightComponentGenerated(UTrafficLightComponent * TrafficLight);
31
32 const boost::optional<carla::road::Map> &GetMap();
33
34 UFUNCTION(BlueprintCallable, Category = "Traffic Light Manager")
35 ATrafficLightGroup* GetTrafficGroup(int JunctionId);
36
37 UFUNCTION(BlueprintCallable, Category = "Traffic Light Manager")
38 UTrafficLightController* GetController(FString ControllerId);
39
40 UFUNCTION(BlueprintCallable, Category = "Traffic Light Manager")
41 USignComponent* GetTrafficSign(FString SignId);
42
43 UFUNCTION(BlueprintCallable, Category = "Traffic Light Manager")
44 void SetFrozen(bool InFrozen);
45
46 UFUNCTION(BlueprintCallable, Category = "Traffic Light Manager")
47 bool GetFrozen();
48
49 UFUNCTION(CallInEditor, Category = "Traffic Light Manager")
50 void GenerateSignalsAndTrafficLights();
51
52 UFUNCTION(CallInEditor, Category = "Traffic Light Manager")
53 void RemoveGeneratedSignalsAndTrafficLights();
54
55 UFUNCTION(CallInEditor, Category = "Traffic Light Manager")
56 void MatchTrafficLightActorsWithOpenDriveSignals();
57
58 // Called when the game starts by the gamemode
59 void InitializeTrafficLights();
60
61private:
62
63 void SpawnTrafficLights();
64
65 void SpawnSignals();
66
67 void RemoveRoadrunnerProps() const;
68
69 void RemoveAttachedProps(TArray<AActor*> Actors) const;
70
71 // 映射对 ATrafficLightGroup (交叉路口) 的引用
72 UPROPERTY()
73 TMap<int, ATrafficLightGroup *> TrafficGroups;
74
75 // 映射对 UTrafficLightController(控制器)的引用
76 UPROPERTY()
77 TMap<FString, UTrafficLightController *> TrafficControllers;
78
79 // 映射到单个 TrafficLightComponents 的引用
80 UPROPERTY()
81 TMap<FString, USignComponent *> TrafficSignComponents;
82
83 // 交通标志 TrafficSigns 的映射引用
84 TArray<ATrafficSignBase*> TrafficSigns;
85
86 UPROPERTY(EditAnywhere, Category= "Traffic Light Manager")
87 TSubclassOf<AActor> TrafficLightModel;
88
89 // 将 OpenDRIVE 类型与交通标志蓝图关联起来
90 UPROPERTY(EditAnywhere, Category= "Traffic Light Manager")
91 TMap<FString, TSubclassOf<AActor>> TrafficSignsModels;
92
93 UPROPERTY(EditAnywhere, Category= "Traffic Light Manager")
94 TMap<FString, TSubclassOf<USignComponent>> SignComponentModels;
95
96 UPROPERTY(EditAnywhere, Category= "Traffic Light Manager")
97 TMap<FString, TSubclassOf<AActor>> SpeedLimitModels;
98
99 UPROPERTY(Category = "Traffic Light Manager", VisibleDefaultsOnly, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
100 USceneComponent *SceneComponent;
101
102 UPROPERTY(EditAnywhere, Category= "Traffic Light Manager")
103 bool TrafficLightsGenerated = false;
104
105 // 没有对应 OpenDRIVE 交叉路口的 TrafficLightGroups 的 ID
106 UPROPERTY()
107 int TrafficLightGroupMissingId = -2;
108
109 // 没有对应 OpenDRIVE 交叉路口的 TrafficLightControllers 的 ID
110 UPROPERTY()
111 int TrafficLightControllerMissingId = -1;
112
113 // 没有对应 OpenDRIVE 交叉路口的 TrafficLightComponents 的 ID
114 UPROPERTY()
115 int TrafficLightComponentMissingId = -1;
116
117 UPROPERTY()
118 bool bTrafficLightsFrozen = false;
119
120};
return true
TMap< IdType, AActor * > Actors
如果你的类继承自UObject,你的类名上方需要加入 UCLASS() 宏 实现交通信号灯状态改变的类
负责创建和分配交通灯组、控制器和组件的类。
从 OpenDrive 映射一个控制器。控制相关交通信号灯并包含其循环