CARLA
 
载入中...
搜索中...
未找到
MeshFactory.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
9#include <memory>
10#include <vector>
11
12#include <carla/geom/Mesh.h> // 引入Mesh类的定义
13#include <carla/road/Road.h> // 引入Road类的定义
14#include <carla/road/LaneSection.h> // 引入LaneSection类的定义
15#include <carla/road/Lane.h> // 引入Lane类的定义
16#include <carla/rpc/OpendriveGenerationParameters.h> // 引入Opendrive生成参数类的定义
17
18namespace carla {
19namespace geom {
20
21 /// Mesh辅助生成器
23 public:
24
25 // 构造函数,初始化生成参数
28
29 // =========================================================================
30 // -- 地图相关 -------------------------------------------------------------
31 // =========================================================================
32
33 // -- 基本 --
34
35 /// 生成定义一条道路的网格
36 std::unique_ptr<Mesh> Generate(const road::Road &road) const;
37
38 /// 生成定义一段车道的网格
39 std::unique_ptr<Mesh> Generate(const road::LaneSection &lane_section) const;
40
41 /// 从给定的s起始和结束生成车道的网格
42 std::unique_ptr<Mesh> Generate(
43 const road::Lane &lane, const double s_start, const double s_end) const;
44
45 /// 用更高的细分生成从给定的s起始和结束的车道网格
46 std::unique_ptr<Mesh> GenerateTesselated(
47 const road::Lane& lane, const double s_start, const double s_end) const;
48
49 /// 生成定义整个车道的网格
50 std::unique_ptr<Mesh> Generate(const road::Lane &lane) const;
51
52 /// 生成定义整个车道的网格,使用更高的细分
53 std::unique_ptr<Mesh> GenerateTesselated(const road::Lane& lane) const;
54
55 /// 生成按顺序排列的车道段网格
56 void GenerateLaneSectionOrdered(const road::LaneSection &lane_section,
57 std::map<carla::road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>>& result ) const;
58
59 /// 生成车道段的人行道网格
60 std::unique_ptr<Mesh> GenerateSidewalk(const road::LaneSection &lane_section) const;
61
62 /// 生成车道的人行道网格
63 std::unique_ptr<Mesh> GenerateSidewalk(const road::Lane &lane) const;
64
65 /// 从给定的s起始和结束生成车道的人行道网格
66 std::unique_ptr<Mesh> GenerateSidewalk(const road::Lane &lane, const double s_start, const double s_end) const;
67
68 // -- 墙 --
69
70 /// 生成一个网格,表示道路角落的墙,以避免车辆掉下去
71 std::unique_ptr<Mesh> GenerateWalls(const road::LaneSection &lane_section) const;
72
73 /// 在车道的右侧生成一个墙状网格
74 std::unique_ptr<Mesh> GenerateRightWall(
75 const road::Lane &lane, const double s_start, const double s_end) const;
76
77 /// 在车道的左侧生成一个墙状网格
78 std::unique_ptr<Mesh> GenerateLeftWall(
79 const road::Lane &lane, const double s_start, const double s_end) const;
80
81 // -- 分块 --
82
83 /// 生成一个定义道路的网格列表,限制最大长度
84 std::vector<std::unique_ptr<Mesh>> GenerateWithMaxLen(
85 const road::Road &road) const;
86
87 /// 生成一个定义车道段的网格列表,限制最大长度
88 std::vector<std::unique_ptr<Mesh>> GenerateWithMaxLen(
89 const road::LaneSection &lane_section) const;
90
91 /// 生成一个定义道路的按顺序排列的网格列表,限制最大长度
92 std::map<carla::road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> GenerateOrderedWithMaxLen(
93 const road::Road &road) const;
94
95 /// 生成一个定义车道段的按顺序排列的网格列表,限制最大长度
96 std::map<carla::road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> GenerateOrderedWithMaxLen(
97 const road::LaneSection &lane_section) const;
98
99 /// 生成一个定义道路安全墙的网格列表,限制最大长度
100 std::vector<std::unique_ptr<Mesh>> GenerateWallsWithMaxLen(
101 const road::Road &road) const;
102
103 /// 生成一个定义车道段安全墙的网格列表,限制最大长度
104 std::vector<std::unique_ptr<Mesh>> GenerateWallsWithMaxLen(
105 const road::LaneSection &lane_section) const;
106
107 // -- Util --
108
109 /// 生成带有所有模拟所需特性的分块道路
110 std::vector<std::unique_ptr<Mesh>> GenerateAllWithMaxLen(
111 const road::Road &road) const; // 根据给定的道路生成分块网格
112
113
114 /// 生成按顺序排列的道路网格,限制最大长度
116 std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>>& roads) const; // 生成有序的网格列表
117
118 /// 合并并平滑多个车道网格
119 std::unique_ptr<Mesh> MergeAndSmooth(std::vector<std::unique_ptr<Mesh>> &lane_meshes) const; // 合并并平滑车道网格
120
121 // -- LaneMarks --
122
123 /// 为道路生成车道标记
124 void GenerateLaneMarkForRoad(const road::Road& road,
125 std::vector<std::unique_ptr<Mesh>>& inout,
126 std::vector<std::string>& outinfo ) const; // 生成道路的车道标记
127
128 /// 为非中心线(即ID不为0的所有线)生成车道标记
130 const road::LaneSection& lane_section,
131 const road::Lane& lane,
132 std::vector<std::unique_ptr<Mesh>>& inout,
133 std::vector<std::string>& outinfo ) const; // 生成非中心线的车道标记
134
135 /// 仅为中心线(ID为0的线)生成车道标记
137 const road::Road& road,
138 const road::LaneSection& lane_section,
139 const road::Lane& lane,
140 std::vector<std::unique_ptr<Mesh>>& inout,
141 std::vector<std::string>& outinfo ) const; // 生成中心线的车道标记
142
143 // =========================================================================
144 // -- Generation parameters ------------------------------------------------
145 // =========================================================================
146
147 /// 道路生成参数
149 float resolution = 2.0f; // 分辨率
150 float max_road_len = 50.0f; // 最大道路长度
151 float extra_lane_width = 1.0f; // 额外车道宽度
152 float wall_height = 0.6f; // 墙的高度
153 float vertex_width_resolution = 4.0f; // 顶点宽度分辨率
154 // 道路网格平滑度:
155 float max_weight_distance = 5.0f; // 最大权重距离
156 float same_lane_weight_multiplier = 2.0f; // 同一车道的权重乘数
157 float lane_ends_multiplier = 2.0f; // 车道末端的乘数
158 };
159
160 RoadParameters road_param; // 道路参数实例
161
162
163 // =========================================================================
164 // -- Helper functions ------------------------------------------------
165 // =========================================================================
166
167 /// 在给定车道类型下选择的宽度内的顶点数量
168 static uint32_t SelectVerticesInWidth(uint32_t default_num_vertices, road::Lane::LaneType type); // 根据车道类型选择顶点数量
169 private:
170
171 /// 计算车道标记的当前s位置两侧的点
172 std::pair<geom::Vector3D, geom::Vector3D> ComputeEdgesForLanemark(
173 const road::LaneSection& lane_section,
174 const road::Lane& lane,
175 const double s_current,
176 const double lanemark_width) const; // 计算车道标记的边缘点
177
178
179 };
180
181} // namespace geom
182} // namespace carla
Mesh辅助生成器
Definition MeshFactory.h:22
static uint32_t SelectVerticesInWidth(uint32_t default_num_vertices, road::Lane::LaneType type)
在给定车道类型下选择的宽度内的顶点数量
std::unique_ptr< Mesh > GenerateRightWall(const road::Lane &lane, const double s_start, const double s_end) const
在车道的右侧生成一个墙状网格
std::unique_ptr< Mesh > GenerateSidewalk(const road::LaneSection &lane_section) const
生成车道段的人行道网格
std::unique_ptr< Mesh > GenerateLeftWall(const road::Lane &lane, const double s_start, const double s_end) const
在车道的左侧生成一个墙状网格
std::unique_ptr< Mesh > MergeAndSmooth(std::vector< std::unique_ptr< Mesh > > &lane_meshes) const
合并并平滑多个车道网格
std::pair< geom::Vector3D, geom::Vector3D > ComputeEdgesForLanemark(const road::LaneSection &lane_section, const road::Lane &lane, const double s_current, const double lanemark_width) const
计算车道标记的当前s位置两侧的点
void GenerateLaneMarksForCenterLine(const road::Road &road, const road::LaneSection &lane_section, const road::Lane &lane, std::vector< std::unique_ptr< Mesh > > &inout, std::vector< std::string > &outinfo) const
仅为中心线(ID为0的线)生成车道标记
std::vector< std::unique_ptr< Mesh > > GenerateWallsWithMaxLen(const road::Road &road) const
生成一个定义道路安全墙的网格列表,限制最大长度
void GenerateLaneMarkForRoad(const road::Road &road, std::vector< std::unique_ptr< Mesh > > &inout, std::vector< std::string > &outinfo) const
为道路生成车道标记
MeshFactory(rpc::OpendriveGenerationParameters params=rpc::OpendriveGenerationParameters())
RoadParameters road_param
std::unique_ptr< Mesh > Generate(const road::Road &road) const
生成定义一条道路的网格
void GenerateLaneMarksForNotCenterLine(const road::LaneSection &lane_section, const road::Lane &lane, std::vector< std::unique_ptr< Mesh > > &inout, std::vector< std::string > &outinfo) const
为非中心线(即ID不为0的所有线)生成车道标记
void GenerateLaneSectionOrdered(const road::LaneSection &lane_section, std::map< carla::road::Lane::LaneType, std::vector< std::unique_ptr< Mesh > > > &result) const
生成按顺序排列的车道段网格
std::unique_ptr< Mesh > GenerateTesselated(const road::Lane &lane, const double s_start, const double s_end) const
用更高的细分生成从给定的s起始和结束的车道网格
std::vector< std::unique_ptr< Mesh > > GenerateAllWithMaxLen(const road::Road &road) const
生成带有所有模拟所需特性的分块道路
std::vector< std::unique_ptr< Mesh > > GenerateWithMaxLen(const road::Road &road) const
生成一个定义道路的网格列表,限制最大长度
std::map< carla::road::Lane::LaneType, std::vector< std::unique_ptr< Mesh > > > GenerateOrderedWithMaxLen(const road::Road &road) const
生成一个定义道路的按顺序排列的网格列表,限制最大长度
std::unique_ptr< Mesh > GenerateWalls(const road::LaneSection &lane_section) const
生成一个网格,表示道路角落的墙,以避免车辆掉下去
void GenerateAllOrderedWithMaxLen(const road::Road &road, std::map< road::Lane::LaneType, std::vector< std::unique_ptr< Mesh > > > &roads) const
生成按顺序排列的道路网格,限制最大长度
LaneType
可以作为标志使用
Definition Lane.h:29
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
Seting for map generation from opendrive without additional geometry