CARLA
 
载入中...
搜索中...
未找到
JunctionParser.cpp
浏览该文件的文档.
1// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// 路口解析器
5//
6// This work is licensed under the terms of the MIT license.
7// For a copy, see <https://opensource.org/licenses/MIT>.
8
10
12
13#include <pugixml/pugixml.hpp>
14
15namespace carla {
16namespace opendrive {
17namespace parser {
18
19 // 执行解析过程
21 const pugi::xml_document &xml,
22 carla::road::MapBuilder &map_builder) {
23
24 // 道路连接(开始道路ID + 结束道路 ID)
25 struct LaneLink {
26 road::LaneId from;
27 road::LaneId to;
28 };
29
30 struct Connection {
31 // id 表示连接的唯一标识符,类型为 road::ConId。这个字段用于唯一标识一条连接关系。
32 road::ConId id;
33
34 // incoming_road 表示进入连接的道路标识符,类型为 road::RoadId。
35 // 该字段指向当前连接的起始道路,即车辆从哪个道路进入当前连接。
36 road::RoadId incoming_road;
37
38 // connecting_road 表示与连接道路相关的目标道路标识符,类型为 road::RoadId。
39 // 该字段指向与当前连接相关的目标道路,即车辆从连接点驶向的道路。
40 road::RoadId connecting_road;
41
42 // lane_links 是一个 std::vector<LaneLink>,表示连接道路上的车道关系。
43 // 每个 LaneLink 描述了如何从进入的道路的某个车道切换到连接道路的某个车道。
44 std::vector<LaneLink> lane_links;
45 };
46
47
48 // 路口
49 struct Junction {
50 road::JuncId id;
51 std::string name;
52 std::vector<Connection> connections;
53 std::set<road::ContId> controllers;
54 };
55
56 pugi::xml_node open_drive_node = xml.child("OpenDRIVE");
57
58 // 路口
59 std::vector<Junction> junctions;
60 for (pugi::xml_node junction_node : open_drive_node.children("junction")) {
61 Junction junction;
62 junction.id = junction_node.attribute("id").as_int();
63 junction.name = junction_node.attribute("name").value();
64
65 // 连接
66 for (pugi::xml_node connection_node : junction_node.children("connection")) {
67
68 Connection connection;
69 connection.id = connection_node.attribute("id").as_uint();
70 connection.incoming_road = connection_node.attribute("incomingRoad").as_uint();
71 connection.connecting_road = connection_node.attribute("connectingRoad").as_uint();
72
73 // Lane Links
74 for (pugi::xml_node lane_link_node : connection_node.children("laneLink")) {
75
76 LaneLink lane_link;
77 lane_link.from = lane_link_node.attribute("from").as_int();
78 lane_link.to = lane_link_node.attribute("to").as_int();
79
80 connection.lane_links.push_back(lane_link);
81 }
82
83 junction.connections.push_back(connection);
84 }
85
86 // 控制器
87 for (pugi::xml_node controller_node : junction_node.children("controller")) {
88 const road::ContId controller_id = controller_node.attribute("id").value();
89 // const std::string controller_name = controller_node.attribute("name").value();
90 // const uint32_t controller_sequence = controller_node.attribute("sequence").as_uint();
91 junction.controllers.insert(controller_id);
92 }
93
94 junctions.push_back(junction);
95 }
96
97 // 填充地图生成器
98 for (auto &junction : junctions) {
99 map_builder.AddJunction(junction.id, junction.name);
100 for (auto &connection : junction.connections) {
101 map_builder.AddConnection(
102 junction.id,
103 connection.id,
104 connection.incoming_road,
105 connection.connecting_road);
106 for (auto &lane_link : connection.lane_links) {
107 map_builder.AddLaneLink(junction.id,
108 connection.id,
109 lane_link.from,
110 lane_link.to);
111 }
112 }
113 map_builder.AddJunctionController(junction.id, std::move(junction.controllers));
114 }
115 }
116} // namespace parser
117} // namespace opendrive
118} // namespace carla
static void Parse(const pugi::xml_document &xml, carla::road::MapBuilder &map_builder)
解析XML文档中的交叉路口信息,并构建道路地图中的交叉路口部分 该函数读取XML文档中的交叉路口数据,如连接点、车道信息等 并使用这些数据来构建或更新道路地图中的交叉路口部分
void AddJunctionController(const JuncId junction_id, std::set< ContId > &&controllers)
void AddJunction(const JuncId id, const std::string name)
void AddLaneLink(const JuncId junction_id, const ConId connection_id, const LaneId from, const LaneId to)
void AddConnection(const JuncId junction_id, const ConId connection_id, const RoadId incoming_road, const RoadId connecting_road)
xml_node child(const char_t *name) const
Definition pugixml.cpp:5685
xml_object_range< xml_node_iterator > children() const
Definition pugixml.cpp:5620
int32_t JuncId
Definition RoadTypes.h:23
std::string ContId
Definition RoadTypes.h:41
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