CARLA
 
载入中...
搜索中...
未找到
client/Waypoint.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 * @brief CARLA内存管理相关功能的命名空间。
10 *
11 * 该命名空间包含与内存管理相关的类和函数,例如智能指针等。
12 */
13#include "carla/Memory.h"
14 /**
15 * @brief 定义了不可复制类的基类。
16 *
17 * 该头文件定义了一个基类,用于防止派生类被复制或赋值。
18 */
19#include "carla/NonCopyable.h"
20 /**
21 * @brief 定义了用于几何变换的类。
22 *
23 * 该头文件包含了处理3D几何变换的类,例如平移、旋转和缩放等。
24 */
26 /**
27 * @brief 定义了车道标记的类。
28 *
29 * 该头文件包含了表示车道标记(如虚线、实线等)的类。
30 */
32 /**
33 * @brief 定义了道路信息记录的类。
34 *
35 * 该头文件包含了表示道路信息记录(如交通标志、信号灯等)的类。
36 */
38 /**
39 * @brief 定义了路径点的类。
40 *
41 * 该头文件包含了表示路径点(道路上的特定位置)的类。
42 */
44 /**
45 * @brief 定义了车道的类。
46 *
47 * 该头文件包含了表示车道(道路上的行驶区域)的类。
48 */
49#include "carla/road/Lane.h"
50 /**
51 * @brief 定义了道路类型的枚举和辅助函数。
52 *
53 * 该头文件包含了表示不同道路类型(如高速公路、普通道路等)的枚举以及相关的辅助函数。
54 */
56 /**
57 * @brief Boost库中的可选值类型。
58 *
59 * 该头文件包含了Boost库中的boost::optional模板类,用于表示一个可能不存在的值。
60 */
61#include <boost/optional.hpp>
62 /**
63 * @namespace carla::client
64 * @brief CARLA客户端相关的命名空间。
65 */
66namespace carla {
67namespace client {
68 // 前向声明其他相关类
69 class Map;
70 class Junction;
71 class Landmark;
72 /**
73 * @class Waypoint
74 * @brief 路径点类,表示道路上的特定位置。
75 *
76 * Waypoint类继承自EnableSharedFromThis,使得它可以安全地生成自身的共享指针。
77 * 同时,它继承自NonCopyable,防止被复制。
78 */
80 : public EnableSharedFromThis<Waypoint>,
81 private NonCopyable {
82 public:
83 /**
84 * @brief 析构函数。
85 */
87
88 /**
89 * @brief 获取此路径点的唯一标识符。
90 *
91 * 该标识符结合了OpenDrive的道路ID、车道ID和s距离,精度可达半厘米。
92 *
93 * @return 唯一标识符(uint64_t类型)。
94 */
95 uint64_t GetId() const {
96 return std::hash<road::element::Waypoint>()(_waypoint);
97 }
98 /**
99 * @brief 获取道路ID。
100 *
101 * @return 道路ID。
102 */
103 auto GetRoadId() const {
104 return _waypoint.road_id;
105 }
106 /**
107 * @brief 获取路段ID。
108 *
109 * @return 路段ID。
110 */
111 auto GetSectionId() const {
112 return _waypoint.section_id;
113 }
114 /**
115 * @brief 获取车道ID。
116 *
117 * @return 车道ID。
118 */
119 auto GetLaneId() const {
120 return _waypoint.lane_id;
121 }
122 /**
123 * @brief 获取沿车道的距离(s值)。
124 *
125 * @return 距离(double类型)。
126 */
127 auto GetDistance() const {
128 return _waypoint.s;
129 }
130 /**
131 * @brief 获取路径点的几何变换信息。
132 *
133 * @return 几何变换信息(geom::Transform类型)。
134 */
136 return _transform;
137 }
138 /**
139 * @brief 获取交叉路口ID。
140 *
141 * @return 交叉路口ID(road::JuncId类型)。
142 */
144 /**
145 * @brief 判断当前路径点是否在交叉路口。
146 *
147 * @return 如果是交叉路口,则返回true;否则返回false。
148 */
149 bool IsJunction() const;
150 /**
151 * @brief 获取交叉路口对象。
152 *
153 * @return 交叉路口对象的共享指针(SharedPtr<Junction>类型)。
154 */
156 /**
157 * @brief 获取车道宽度。
158 *
159 * @return 车道宽度(double类型)。
160 */
161 double GetLaneWidth() const;
162 /**
163 * @brief 获取车道类型。
164 *
165 * @return 车道类型(road::Lane::LaneType类型)。
166 */
168 /**
169 * @brief 获取指定距离内的下一个路径点列表。
170 *
171 * @param distance 距离(double类型)。
172 * @return 下一个路径点列表(SharedPtr<Waypoint>类型的vector)。
173 */
174 std::vector<SharedPtr<Waypoint>> GetNext(double distance) const;
175 /**
176 * @brief 获取指定距离内的上一个路径点列表。
177 *
178 * @param distance 距离(double类型)。
179 * @return 上一个路径点列表(SharedPtr<Waypoint>类型的vector)。
180 */
181 std::vector<SharedPtr<Waypoint>> GetPrevious(double distance) const;
182 /**
183 * @brief 获取从当前位置开始,沿车道方向直到道路终点的路径点列表。
184 *
185 * @param distance 每个路径点之间的间隔距离(double类型)。
186 * @return 路径点列表(SharedPtr<Waypoint>类型的vector)。
187 */
188 std::vector<SharedPtr<Waypoint>> GetNextUntilLaneEnd(double distance) const;
189 /**
190 * @brief 获取从当前位置开始,沿车道反方向直到道路起点的路径点列表。
191 *
192 * @param distance 每个路径点之间的间隔距离(double类型)。
193 * @return 路径点列表(SharedPtr<Waypoint>类型的vector)。
194 */
195 std::vector<SharedPtr<Waypoint>> GetPreviousUntilLaneStart(double distance) const;
196 /**
197 * @brief 获取当前路径点右侧的路径点。
198 *
199 * @return 右侧路径点的共享指针(SharedPtr<Waypoint>类型)。
200 */
202 /**
203 * @brief 获取当前路径点左侧的路径点。
204 *
205 * @return 左侧路径点的共享指针(SharedPtr<Waypoint>类型)。
206 */
208 /**
209 * @brief 获取当前路径点右侧的车道标记。
210 *
211 * @return 右侧车道标记(boost::optional<road::element::LaneMarking>类型)。
212 */
213 boost::optional<road::element::LaneMarking> GetRightLaneMarking() const;
214 /**
215 * @brief 获取当前路径点左侧的车道标记。
216 *
217 * @return 左侧车道标记(boost::optional<road::element::LaneMarking>类型)。
218 */
219 boost::optional<road::element::LaneMarking> GetLeftLaneMarking() const;
220 /**
221 * @brief 获取车道变更信息。
222 *
223 * @return 车道变更信息(road::element::LaneMarking::LaneChange类型)。
224 */
226 /**
227 * @brief 获取从当前位置到指定距离内的所有地标列表。
228 *
229 * @param distance 距离(double类型)。
230 * @param stop_at_junction 是否在交叉路口停止搜索(bool类型)。
231 * @return 地标列表(SharedPtr<Landmark>类型的vector)。
232 */
233 std::vector<SharedPtr<Landmark>> GetAllLandmarksInDistance(
234 double distance, bool stop_at_junction = false) const;
235 /**
236 * @brief 获取从当前位置到指定距离内,按指定类型筛选的地标列表。
237 *
238 * @param distance 距离(double类型)。
239 * @param filter_type 地标类型过滤器(std::string类型)。
240 * @param stop_at_junction 是否在交叉路口停止搜索(bool类型)。
241 * @return 地标列表(SharedPtr<Landmark>类型的vector)。
242 */
243 std::vector<SharedPtr<Landmark>> GetLandmarksOfTypeInDistance(
244 double distance, std::string filter_type, bool stop_at_junction = false) const;
245
246 private:
247 /**
248 * @brief Map类的友元类,允许Map类访问私有构造函数。
249 */
250 friend class Map;
251 /**
252 * @brief 私有构造函数,用于内部创建Waypoint对象。
253 *
254 * @param parent Map对象的共享指针(SharedPtr<const Map>类型)。
255 * @param waypoint OpenDrive中的路径点信息(road::element::Waypoint类型)。
256 */
258 /**
259 * @brief 指向父Map对象的共享指针。
260 */
262 /**
263 * @brief 存储OpenDrive中的路径点信息。
264 */
266 /**
267 * @brief 路径点的几何变换信息。
268 */
270 /**
271 * @brief 分别指向右侧和左侧标记记录的指针对。
272 */
273 std::pair<
276 };
277
278} // namespace client
279} // namespace carla
地图类的前向声明,用于在LaneInvasionSensor类中可能的引用。
这个类用于禁止拷贝和移动构造函数及赋值操作
路径点类,表示道路上的特定位置。
SharedPtr< Waypoint > GetLeft() const
获取当前路径点左侧的路径点。
std::vector< SharedPtr< Landmark > > GetLandmarksOfTypeInDistance(double distance, std::string filter_type, bool stop_at_junction=false) const
获取从当前位置到指定距离内,按指定类型筛选的地标列表。
bool IsJunction() const
判断当前路径点是否在交叉路口。
auto GetSectionId() const
获取路段ID。
road::element::Waypoint _waypoint
存储OpenDrive中的路径点信息。
SharedPtr< Waypoint > GetRight() const
获取当前路径点右侧的路径点。
SharedPtr< const Map > _parent
指向父Map对象的共享指针。
boost::optional< road::element::LaneMarking > GetLeftLaneMarking() const
获取当前路径点左侧的车道标记。
auto GetLaneId() const
获取车道ID。
boost::optional< road::element::LaneMarking > GetRightLaneMarking() const
获取当前路径点右侧的车道标记。
road::JuncId GetJunctionId() const
获取交叉路口ID。
geom::Transform _transform
路径点的几何变换信息。
auto GetRoadId() const
获取道路ID。
~Waypoint()
析构函数。
double GetLaneWidth() const
获取车道宽度。
std::vector< SharedPtr< Waypoint > > GetPrevious(double distance) const
获取指定距离内的上一个路径点列表。
auto GetDistance() const
获取沿车道的距离(s值)。
const geom::Transform & GetTransform() const
获取路径点的几何变换信息。
Waypoint(SharedPtr< const Map > parent, road::element::Waypoint waypoint)
私有构造函数,用于内部创建Waypoint对象。
road::element::LaneMarking::LaneChange GetLaneChange() const
获取车道变更信息。
std::vector< SharedPtr< Waypoint > > GetNext(double distance) const
获取指定距离内的下一个路径点列表。
SharedPtr< Junction > GetJunction() const
获取交叉路口对象。
std::vector< SharedPtr< Waypoint > > GetNextUntilLaneEnd(double distance) const
获取从当前位置开始,沿车道方向直到道路终点的路径点列表。
std::vector< SharedPtr< Landmark > > GetAllLandmarksInDistance(double distance, bool stop_at_junction=false) const
获取从当前位置到指定距离内的所有地标列表。
uint64_t GetId() const
获取此路径点的唯一标识符。
std::vector< SharedPtr< Waypoint > > GetPreviousUntilLaneStart(double distance) const
获取从当前位置开始,沿车道反方向直到道路起点的路径点列表。
std::pair< const road::element::RoadInfoMarkRecord *, const road::element::RoadInfoMarkRecord * > _mark_record
分别指向右侧和左侧标记记录的指针对。
road::Lane::LaneType GetType() const
获取车道类型。
LaneType
可以作为标志使用
Definition Lane.h:29
每条车道在道路横截面内可以提供多个道路标记条目。 道路标记信息定义了车道外边界的线条样式。 对于左侧车道,这是左边界;对于右侧车道,这是右边界。 左右车道之间的分隔线样式由零号车道(即中央车道)的道路标...
int32_t JuncId
Definition RoadTypes.h:23
carla::SharedPtr< carla::client::Junction > Junction
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
Definition Memory.h:19
包含CARLA客户端相关类和函数的命名空间。
LaneChange
可以用作标志。
Definition LaneMarking.h:50