CARLA
 
载入中...
搜索中...
未找到
road/Junction.h
浏览该文件的文档.
1// Copyright (c) 2017 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
9#include "carla/geom/BoundingBox.h" // 引入BoundingBox类的定义
10#include "carla/NonCopyable.h" // 引入不可拷贝类的定义
11#include "carla/road/RoadTypes.h" // 引入道路相关类型的定义
12
13#include <unordered_map> // 引入无序映射的头文件
14#include <unordered_set> // 引入无序集合的头文件
15#include <vector> // 引入动态数组的头文件
16#include <string> // 引入字符串的头文件
17
18namespace carla { // 定义carla命名空间
19namespace road { // 定义road命名空间
20
21 class MapBuilder; // 前向声明MapBuilder类
22
23 // 定义Junction类,表示交叉口
24 class Junction : private MovableNonCopyable {
25 public:
26
27 // 定义LaneLink结构体,表示车道之间的连接
28 struct LaneLink {
29 LaneId from; // 源车道ID
30 LaneId to; // 目标车道ID
31 };
32
33 // 定义Connection结构体,表示道路连接信息
34 struct Connection {
35 ConId id; // 连接ID
36 RoadId incoming_road; // 进入道路ID
37 RoadId connecting_road; // 连接道路ID
38 std::vector<LaneLink> lane_links; // 车道链接的列表
39
40 // 添加车道链接
41 void AddLaneLink(LaneId from, LaneId to) {
42 lane_links.push_back(LaneLink{from, to}); // 将车道链接添加到列表中
43 }
44
45 // Connection构造函数
51 };
52
53 // Junction构造函数
54 Junction(const JuncId id, const std::string name)
55 : _id(id),
56 _name(name),
57 _connections() {} // 初始化交叉口ID、名称和连接列表
58
59 // 获取交叉口ID
60 JuncId GetId() const {
61 return _id; // 返回交叉口ID
62 }
63
64 // 获取指定ID的连接
66 const auto search = _connections.find(id); // 在连接中查找指定ID
67 if (search != _connections.end()) { // 如果找到
68 return &search->second; // 返回对应的连接
69 }
70 return nullptr; // 未找到,返回空指针
71 }
72
73 // 获取所有连接的引用
74 std::unordered_map<ConId, Connection> &GetConnections() {
75 return _connections; // 返回连接的引用
76 }
77
78 // 获取所有连接的副本
79 std::unordered_map<ConId, Connection> GetConnections() const {
80 return _connections; // 返回连接的副本
81 }
82
83 // 获取边界框
85 return _bounding_box; // 返回交叉口的边界框
86 }
87
88 // 检查指定道路是否有冲突
89 bool RoadHasConflicts(RoadId road_id) const {
90 return _road_conflicts.count(road_id) > 0; // 返回是否有冲突
91 }
92
93 // 获取指定道路的冲突列表
94 const std::unordered_set<RoadId> & GetConflictsOfRoad(RoadId road_id) const {
95 return _road_conflicts.at(road_id); // 返回指定道路的冲突道路集
96 }
97
98 // 获取所有控制器的集合
99 const std::set<ContId>& GetControllers() const {
100 return _controllers; // 返回控制器的集合
101 }
102
103 private:
104
105 friend MapBuilder; // 声明MapBuilder为友元类,可以访问私有成员
106
107 JuncId _id; // 交叉口ID
108
109 std::string _name; // 交叉口名称
110
111 std::unordered_map<ConId, Connection> _connections; // 存储连接的无序映射
112
113 std::set<ContId> _controllers; // 控制器的集合
114
115 std::unordered_map<RoadId, std::unordered_set<RoadId>> _road_conflicts; // 道路冲突的映射
116
117 carla::geom::BoundingBox _bounding_box; // 交叉口的边界框
118 };
119
120} // namespace road
121} // namespace carla
这个类用于禁止拷贝构造函数和赋值操作,但允许移动构造函数和赋值操作
const std::set< ContId > & GetControllers() const
carla::geom::BoundingBox _bounding_box
const std::unordered_set< RoadId > & GetConflictsOfRoad(RoadId road_id) const
JuncId GetId() const
std::unordered_map< RoadId, std::unordered_set< RoadId > > _road_conflicts
Junction(const JuncId id, const std::string name)
Connection * GetConnection(ConId id)
std::unordered_map< ConId, Connection > GetConnections() const
std::set< ContId > _controllers
std::unordered_map< ConId, Connection > & GetConnections()
carla::geom::BoundingBox GetBoundingBox() const
std::unordered_map< ConId, Connection > _connections
bool RoadHasConflicts(RoadId road_id) const
int32_t JuncId
Definition RoadTypes.h:23
int32_t LaneId
Definition RoadTypes.h:26
uint32_t RoadId
Definition RoadTypes.h:20
uint32_t ConId
Definition RoadTypes.h:38
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
void AddLaneLink(LaneId from, LaneId to)
Connection(ConId id, RoadId incoming_road, RoadId connecting_road)
std::vector< LaneLink > lane_links