CARLA
 
载入中...
搜索中...
未找到
CollisionStage.h
浏览该文件的文档.
1
2#pragma once // 防止头文件重复包含
3
4#include <memory> // 引入智能指针的支持
5
6#if defined(__clang__) // 如果使用 clang 编译器
7# pragma clang diagnostic push // 保存当前警告状态
8# pragma clang diagnostic ignored "-Wshadow" // 忽略变量遮蔽的警告
9#endif
10#include "boost/geometry.hpp" // 引入 Boost.Geometry 库
11#include "boost/geometry/geometries/geometries.hpp" // 包含几何体的定义
12#include "boost/geometry/geometries/point_xy.hpp" // 包含二维点的定义
13#include "boost/geometry/geometries/polygon.hpp" // 包含多边形的定义
14#if defined(__clang__) // 如果使用 clang 编译器
15# pragma clang diagnostic pop // 恢复之前的警告状态
16#endif
17
18#include "carla/trafficmanager/DataStructures.h" // 引入数据结构的定义
19#include "carla/trafficmanager/Parameters.h" // 引入参数的定义
20#include "carla/trafficmanager/RandomGenerator.h" // 引入随机数生成器的定义
21#include "carla/trafficmanager/SimulationState.h" // 引入仿真状态的定义
22#include "carla/trafficmanager/Stage.h" // 引入阶段的定义
23
24namespace carla { // 定义 carla 命名空间
25namespace traffic_manager { // 定义 traffic_manager 命名空间
26
27struct GeometryComparison { // 定义几何比较结构
28 double reference_vehicle_to_other_geodesic; // 参考车辆到其他车辆的测地线距离
29 double other_vehicle_to_reference_geodesic; // 其他车辆到参考车辆的测地线距离
30 double inter_geodesic_distance; // 车辆间的测地线距离
31 double inter_bbox_distance; // 车辆间的边界框距离
32};
33
34struct CollisionLock { // 定义碰撞锁结构
35 double distance_to_lead_vehicle; // 到前方车辆的距离
36 double initial_lock_distance; // 初始锁定距离
37 ActorId lead_vehicle_id; // 前方车辆的 ID
38};
39using CollisionLockMap = std::unordered_map<ActorId, CollisionLock>; // 定义碰撞锁映射表
40
41namespace cc = carla::client; // 简化 carla::client 的命名空间
42namespace bg = boost::geometry; // 简化 boost::geometry 的命名空间
43
44using Buffer = std::deque<std::shared_ptr<SimpleWaypoint>>; // 定义 waypoint 缓冲区
45using BufferMap = std::unordered_map<carla::ActorId, Buffer>; // 定义缓冲区映射表
46using LocationVector = std::vector<cg::Location>; // 定义位置向量
47using GeodesicBoundaryMap = std::unordered_map<ActorId, LocationVector>; // 定义测地边界映射表
48using GeometryComparisonMap = std::unordered_map<uint64_t, GeometryComparison>; // 定义几何比较映射表
49using Polygon = bg::model::polygon<bg::model::d2::point_xy<double>>; // 定义多边形类型
50
51/// 该类具有检测与附近演员潜在碰撞的功能。
52class CollisionStage : Stage { // 定义 CollisionStage 类,继承自 Stage
53private:
54 const std::vector<ActorId> &vehicle_id_list; // 车辆 ID 列表
55 const SimulationState &simulation_state; // 仿真状态
56 const BufferMap &buffer_map; // 缓冲区映射表
57 const TrackTraffic &track_traffic; // 跟踪交通
58 const Parameters &parameters; // 参数
59 CollisionFrame &output_array; // 输出数组
60 CollisionLockMap collision_locks; // 存储阻塞的前方车辆信息
61 GeometryComparisonMap geometry_cache; // 存储车辆边界的几何比较结果
62 GeodesicBoundaryMap geodesic_boundary_map; // 存储车辆的测地边界
63 RandomGenerator &random_device; // 随机数生成器
64
65 // 方法:确定车辆是否与另一辆车处于碰撞路径
66 std::pair<bool, float> NegotiateCollision(const ActorId reference_vehicle_id,
67 const ActorId other_actor_id,
68 const uint64_t reference_junction_look_ahead_index);
69
70 // 方法:计算车辆前方的边界框扩展长度
71 float GetBoundingBoxExtention(const ActorId actor_id);
72
73 // 方法:计算车辆边界的多边形点
74 LocationVector GetBoundary(const ActorId actor_id);
75
76 // 方法:构造车辆路径边界的多边形点
78
79 Polygon GetPolygon(const LocationVector &boundary); // 获取多边形对象
80
81 // 方法:比较路径边界、车辆的边界框,并缓存当前更新周期的结果
82 GeometryComparison GetGeometryBetweenActors(const ActorId reference_vehicle_id,
83 const ActorId other_actor_id);
84
85 // 方法:绘制路径边界
86 void DrawBoundary(const LocationVector &boundary);
87
88public:
89 // 构造函数:初始化 CollisionStage 对象
90 CollisionStage(const std::vector<ActorId> &vehicle_id_list,
92 const BufferMap &buffer_map,
97
98 void Update (const unsigned long index) override; // 更新方法
99
100 void RemoveActor(const ActorId actor_id) override; // 移除参与者方法
101
102 void Reset() override; // 重置方法
103
104 // 方法:清除当前更新周期的缓存
105 void ClearCycleCache();
106};
107
108} // namespace traffic_manager
109} // namespace carla
该类具有检测与附近演员潜在碰撞的功能。
CollisionStage(const std::vector< ActorId > &vehicle_id_list, const SimulationState &simulation_state, const BufferMap &buffer_map, const TrackTraffic &track_traffic, const Parameters &parameters, CollisionFrame &output_array, RandomGenerator &random_device)
const std::vector< ActorId > & vehicle_id_list
const SimulationState & simulation_state
GeometryComparison GetGeometryBetweenActors(const ActorId reference_vehicle_id, const ActorId other_actor_id)
LocationVector GetGeodesicBoundary(const ActorId actor_id)
Polygon GetPolygon(const LocationVector &boundary)
void RemoveActor(const ActorId actor_id) override
移除参与者方法。
void DrawBoundary(const LocationVector &boundary)
LocationVector GetBoundary(const ActorId actor_id)
float GetBoundingBoxExtention(const ActorId actor_id)
void Update(const unsigned long index) override
更新方法。
void Reset() override
重置方法。
std::pair< bool, float > NegotiateCollision(const ActorId reference_vehicle_id, const ActorId other_actor_id, const uint64_t reference_junction_look_ahead_index)
该类保持了仿真中所有车辆的状态。
阶段类型接口。
Definition Stage.h:23
包含客户端相关类和定义的命名空间。
Definition AtomicList.h:17
std::unordered_map< ActorId, LocationVector > GeodesicBoundaryMap
std::deque< std::shared_ptr< SimpleWaypoint > > Buffer
std::vector< CollisionHazardData > CollisionFrame
carla::ActorId ActorId
参与者的智能指针类型
std::unordered_map< ActorId, CollisionLock > CollisionLockMap
std::vector< cg::Location > LocationVector
std::unordered_map< carla::ActorId, Buffer > BufferMap
bg::model::polygon< bg::model::d2::point_xy< double > > Polygon
std::unordered_map< uint64_t, GeometryComparison > GeometryComparisonMap
CARLA模拟器的主命名空间。
Definition Carla.cpp:139