CARLA
 
载入中...
搜索中...
未找到
SimpleWaypoint.cpp
浏览该文件的文档.
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#include "carla/geom/Math.h"
8
10
11namespace carla {
12namespace traffic_manager {
13
14 using SimpleWaypointPtr = std::shared_ptr<SimpleWaypoint>; // 定义一个智能指针类型,指向SimpleWaypoint类的实例
15
16 SimpleWaypoint::SimpleWaypoint(WaypointPtr _waypoint) { // 构造函数,接受一个WaypointPtr类型的参数
17 waypoint = _waypoint; // 初始化成员waypoint
18 next_left_waypoint = nullptr; // 初始化左侧下一个路点为空
19 next_right_waypoint = nullptr; // 初始化右侧下一个路点为空
20 }
22
23 std::vector<SimpleWaypointPtr> SimpleWaypoint::GetNextWaypoint() const { // 获取下一个路点
24 return next_waypoints; // 返回下一个路点的向量
25 }
26
27 std::vector<SimpleWaypointPtr> SimpleWaypoint::GetPreviousWaypoint() const { // 获取上一个路点
28 return previous_waypoints; // 返回上一个路点的向量
29 }
30
31 WaypointPtr SimpleWaypoint::GetWaypoint() const { // 获取当前的Waypoint
32 return waypoint; // 返回waypoint
33 }
34
35 uint64_t SimpleWaypoint::GetId() const { // 获取当前路点的ID
36 return waypoint->GetId(); // 返回waypoint的ID
37 }
38
39 SimpleWaypointPtr SimpleWaypoint::GetLeftWaypoint() { // 获取左侧下一个路点
40 return next_left_waypoint; // 返回左侧下一个路点
41 }
42
43 SimpleWaypointPtr SimpleWaypoint::GetRightWaypoint() { // 获取右侧下一个路点
44 return next_right_waypoint; // 返回右侧下一个路点
45 }
46
47 cg::Location SimpleWaypoint::GetLocation() const { // 获取当前路点的位置
48 return waypoint->GetTransform().location; // 返回位置
49 }
50
51 cg::Vector3D SimpleWaypoint::GetForwardVector() const { // 获取当前路点的前进方向向量
52 return waypoint->GetTransform().rotation.GetForwardVector(); // 返回前进方向向量
53 }
54
55 uint64_t SimpleWaypoint::SetNextWaypoint(const std::vector<SimpleWaypointPtr> &waypoints) { // 设置下一个路点
56 for (auto &simple_waypoint: waypoints) { // 遍历给定的路点向量
57 next_waypoints.push_back(simple_waypoint); // 将每个路点添加到next_waypoints中
58 }
59 return static_cast<uint64_t>(waypoints.size()); // 返回设置的路点数量
60 }
61
62 uint64_t SimpleWaypoint::SetPreviousWaypoint(const std::vector<SimpleWaypointPtr> &waypoints) { // 设置上一个路点
63 for (auto &simple_waypoint: waypoints) { // 遍历给定的路点向量
64 previous_waypoints.push_back(simple_waypoint); // 将每个路点添加到previous_waypoints中
65 }
66 return static_cast<uint64_t>(waypoints.size()); // 返回设置的路点数量
67 }
68
69 void SimpleWaypoint::SetLeftWaypoint(SimpleWaypointPtr &_waypoint) { // 设置左侧下一个路点
70 const cg::Vector3D heading_vector = waypoint->GetTransform().GetForwardVector(); // 获取前进方向向量
71 const cg::Vector3D relative_vector = GetLocation() - _waypoint->GetLocation(); // 计算相对位置向量
72 if ((heading_vector.x * relative_vector.y - heading_vector.y * relative_vector.x) > 0.0f) { // 判断是否为左侧
73 next_left_waypoint = _waypoint; // 设置左侧下一个路点
74 }
75 }
76
77 void SimpleWaypoint::SetRightWaypoint(SimpleWaypointPtr &_waypoint) { // 设置右侧下一个路点
78 const cg::Vector3D heading_vector = waypoint->GetTransform().GetForwardVector(); // 获取前进方向向量
79 const cg::Vector3D relative_vector = GetLocation() - _waypoint->GetLocation(); // 计算相对位置向量
80 if ((heading_vector.x * relative_vector.y - heading_vector.y * relative_vector.x) < 0.0f) { // 判断是否为右侧
81 next_right_waypoint = _waypoint; // 设置右侧下一个路点
82 }
83 }
84
85 float SimpleWaypoint::Distance(const cg::Location &location) const { // 计算与给定位置的距离
86 return GetLocation().Distance(location); // 返回距离
87 }
88
89 float SimpleWaypoint::Distance(const SimpleWaypointPtr &other) const { // 计算与另一个路点的距离
90 return GetLocation().Distance(other->GetLocation()); // 返回距离
91 }
92
93 float SimpleWaypoint::DistanceSquared(const cg::Location &location) const { // 计算与给定位置的平方距离
94 return cg::Math::DistanceSquared(GetLocation(), location); // 返回平方距离
95 }
96
97 float SimpleWaypoint::DistanceSquared(const SimpleWaypointPtr &other) const { // 计算与另一个路点的平方距离
98 return cg::Math::DistanceSquared(GetLocation(), other->GetLocation()); // 返回平方距离
99 }
100
101 bool SimpleWaypoint::CheckJunction() const { // 检查当前路点是否为交叉口
102 return _is_junction; // 返回交叉口状态
103 }
104
105 void SimpleWaypoint::SetIsJunction(bool value) { // 设置当前路点为交叉口
106 _is_junction = value; // 更新交叉口状态
107 }
108
109 bool SimpleWaypoint::CheckIntersection() const { // 检查当前路点是否有多个下一个路点
110 return (next_waypoints.size() > 1); // 如果下一个路点数量大于1,则返回true
111 }
112
113 void SimpleWaypoint::SetGeodesicGridId(GeoGridId _geodesic_grid_id) { // 设置地理网格ID
114 geodesic_grid_id = _geodesic_grid_id; // 更新地理网格ID
115 }
116
118 GeoGridId grid_id; // 声明变量存储网格ID
119 if (waypoint->IsJunction()) { // 如果当前路点是交叉口
120 grid_id = waypoint->GetJunctionId(); // 获取交叉口ID
121 } else {
122 grid_id = geodesic_grid_id; // 否则获取地理网格ID
123 }
124 return grid_id; // 返回网格ID
125 }
126
127 GeoGridId SimpleWaypoint::GetJunctionId() const { // 获取交叉口ID
128 return waypoint->GetJunctionId(); // 返回交叉口ID
129 }
130
131 cg::Transform SimpleWaypoint::GetTransform() const { // 获取当前路点的变换信息
132 return waypoint->GetTransform(); // 返回变换信息
133 }
134
135 void SimpleWaypoint::SetRoadOption(RoadOption _road_option) { // 设置道路选项
136 road_option = _road_option; // 更新道路选项
137 }
138
140 return road_option; // 返回道路选项
141 }
142
143} // namespace traffic_manager
144} // namespace carla
auto Distance(const Location &loc) const
std::vector< SimpleWaypointPtr > previous_waypoints
指向前一个连接waypoint的指针列表。
bool CheckIntersection() const
如果对象的waypoint属于交叉口(不使用OpenDrive),则返回true。
uint64_t SetNextWaypoint(const std::vector< SimpleWaypointPtr > &next_waypoints)
此方法用于设置下一个waypoint。
GeoGridId GetJunctionId() const
方法用于获取waypoint的交叉口ID。
void SetLeftWaypoint(SimpleWaypointPtr &waypoint)
此方法用于设置最近的左侧waypoint,以便进行变道。
std::vector< SimpleWaypointPtr > GetNextWaypoint() const
返回下一个waypoint的列表。
void SetRightWaypoint(SimpleWaypointPtr &waypoint)
此方法用于设置最近的右侧waypoint,以便进行变道。
SimpleWaypointPtr next_left_waypoint
指向左侧变道waypoint的指针。
WaypointPtr waypoint
指向Carla的Waypoint对象的指针,作为此类的封装对象。
bool CheckJunction() const
如果对象的waypoint属于交叉口,则返回true。
float DistanceSquared(const cg::Location &location) const
计算到给定位置的距离的平方。
GeoGridId geodesic_grid_id
整数,用于将waypoint放置到地理网格中。
cg::Vector3D GetForwardVector() const
返回沿waypoint方向的向量。
void SetRoadOption(RoadOption _road_option)
std::vector< SimpleWaypointPtr > next_waypoints
指向下一个连接waypoint的指针列表。
std::vector< SimpleWaypointPtr > GetPreviousWaypoint() const
返回前一个waypoint的列表。
uint64_t GetId() const
返回waypoint的唯一ID。
WaypointPtr GetWaypoint() const
返回指向carla::waypoint的共享指针。
SimpleWaypointPtr next_right_waypoint
指向右侧变道waypoint的指针。
void SetIsJunction(bool value)
此方法用于设置waypoint是否属于交叉口。
uint64_t SetPreviousWaypoint(const std::vector< SimpleWaypointPtr > &next_waypoints)
此方法用于设置前一个waypoint。
cg::Transform GetTransform() const
返回当前waypoint的变换对象。
SimpleWaypointPtr GetLeftWaypoint()
此方法用于获取最近的左侧waypoint。
std::shared_ptr< SimpleWaypoint > SimpleWaypointPtr
float Distance(const cg::Location &location) const
计算对象的waypoint到给定位置的距离。
GeoGridId GetGeodesicGridId()
访问器方法,用于获取地理网格ID。
void SetGeodesicGridId(GeoGridId _geodesic_grid_id)
访问器方法,用于设置地理网格ID。
cg::Location GetLocation() const
返回此waypoint的位置信息。
SimpleWaypointPtr GetRightWaypoint()
此方法用于获取最近的右侧waypoint。
RoadOption road_option
当前waypoint的RoadOption。
carla::SharedPtr< cc::Waypoint > WaypointPtr
Waypoint的智能指针类型别名。
Definition InMemoryMap.h:45
std::shared_ptr< SimpleWaypoint > SimpleWaypointPtr
CARLA模拟器的主命名空间。
Definition Carla.cpp:139