CARLA
 
载入中...
搜索中...
未找到
TrafficManagerLocal.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 <atomic>///@brief 包含C++原子操作库,用于线程安全的计数器和标志位
10#include <chrono>///@brief 包含C++时间库,用于时间测量和延迟
11#include <mutex>///@brief 包含C++互斥锁库,用于线程同步
12#include <thread>///@brief 包含C++线程库,用于多线程编程
13#include <vector>///@brief 包含C++动态数组库,用于存储和管理序列化的数据
14
15#include "carla/client/detail/EpisodeProxy.h"///@brief 包含CARLA客户端的Episode代理类,用于管理仿真场景的一个回合
16#include "carla/client/TrafficLight.h"///@brief 包含CARLA客户端的交通灯控制类
17#include "carla/client/World.h"///@brief 包含CARLA客户端的世界管理类,用于访问和修改仿真世界
18#include "carla/Memory.h"///@brief 包含CARLA的内存管理类,用于管理内存分配和释放
19#include "carla/rpc/Command.h"///@brief 包含CARLA的RPC命令处理类,用于远程过程调用
20
21#include "carla/trafficmanager/AtomicActorSet.h"///@brief 包含交通管理器中的原子参与者集合类,用于管理仿真中的参与者(如车辆、行人)
22#include "carla/trafficmanager/InMemoryMap.h"///@brief 包含交通管理器的内存地图类,用于在内存中存储地图数据
23#include "carla/trafficmanager/Parameters.h"///@brief 包含交通管理器的参数配置类,用于配置交通管理器的各种参数
24#include "carla/trafficmanager/RandomGenerator.h"///@brief 包含交通管理器的随机数生成器类,用于生成随机数或随机序列
25#include "carla/trafficmanager/SimulationState.h"///@brief 包含交通管理器的仿真状态类,用于管理仿真的全局状态
26#include "carla/trafficmanager/TrackTraffic.h"///@brief 包含交通管理器的流量跟踪类,用于跟踪和管理仿真中的交通流量
27#include "carla/trafficmanager/TrafficManagerBase.h"///@brief 包含交通管理器的基类,定义了交通管理器的基本接口和功能
28#include "carla/trafficmanager/TrafficManagerServer.h"///@brief 包含交通管理器的服务器类,用于管理交通管理器的网络通信
29
30#include "carla/trafficmanager/ALSM.h"///@brief 包含交通管理器的ALSM(高级状态机)类,用于管理交通参与者的状态转换
31#include "carla/trafficmanager/LocalizationStage.h"///@brief 包含交通管理器的定位阶段类,用于处理交通参与者的定位信息
32#include "carla/trafficmanager/CollisionStage.h"///@brief 包含交通管理器的碰撞检测阶段类,用于检测和处理交通参与者之间的碰撞
33#include "carla/trafficmanager/TrafficLightStage.h"///@brief 包含交通管理器的交通灯阶段类,用于处理交通灯的控制和同步
34#include "carla/trafficmanager/MotionPlanStage.h"///@brief 包含交通管理器的运动规划阶段类,用于规划和执行交通参与者的运动轨迹
35///@brief CARLA 交通管理器命名空间,包含交通管理相关的类和函数
36namespace carla {
37namespace traffic_manager {
38///@brief 命名空间别名,简化std::chrono的使用
39namespace chr = std::chrono;
40///@brief 使用命名空间别名,简化std::chrono_literals的使用,以便于定义时间字面量
41using namespace std::chrono_literals;
42///@brief 时间点类型,使用系统时钟和纳秒精度
43using TimePoint = chr::time_point<chr::system_clock, chr::nanoseconds>;
44///@brief 交通灯组类型,使用CARLA的智能指针管理交通灯对象的集合
45using TLGroup = std::vector<carla::SharedPtr<carla::client::TrafficLight>>;
46///@brief 本地地图指针类型,使用智能指针管理InMemoryMap对象
47using LocalMapPtr = std::shared_ptr<InMemoryMap>;
48///@brief 引入HYBRID_MODE_DT常量,用于定义混合模式下的时间间隔
50
51/**
52 * @class TrafficManagerLocal
53 * @brief 交通管理器本地类,通过消息传递机制整合交通管理器的各个阶段。
54 * @inherits TrafficManagerBase
55 *
56 * 该类继承自TrafficManagerBase,并实现了通过消息传递机制整合交通管理器的各个阶段的功能。
57 */
59
60private:
61 /**
62 * @brief 纵向PID控制器参数集合。
63 *
64 * 包含用于纵向(前进方向)PID(比例-积分-微分)控制器的参数集合。
65 */
66 std::vector<float> longitudinal_PID_parameters;
67 /**
68 * @brief 高速公路纵向PID控制器参数集合。
69 *
70 * 包含用于高速公路场景下纵向PID控制器的参数集合。
71 */
73 /**
74 * @brief 横向PID控制器参数集合。
75 *
76 * 包含用于横向(侧向)PID控制器的参数集合。
77 */
78 std::vector<float> lateral_PID_parameters;
79 /**
80 * @brief 高速公路横向PID控制器参数集合。
81 *
82 * 包含用于高速公路场景下横向PID控制器的参数集合。
83 */
85 /**
86 * @brief CARLA 客户端连接对象。
87 *
88 * 用于与CARLA仿真环境进行通信的客户端连接对象。
89 */
91 /**
92 * @brief CARLA 世界对象。
93 *
94 * 表示CARLA仿真世界的一个对象,用于访问和操作仿真世界中的元素。
95 */
97 /**
98 * @brief 注册到交通管理器的所有参与者集合。
99 *
100 * 使用AtomicActorSet管理所有已注册到交通管理器的参与者(如车辆、行人等)。
101 */
103 /// @brief 用于跟踪注册参与者状态变化的计数器
105 /// @brief 当前更新周期中注册到交通管理器的车辆列表
106 /// 使用ActorId类型存储车辆的唯一标识符
107 std::vector<ActorId> vehicle_id_list;
108 /// @brief 指向本地地图缓存的指针
109 /// 使用智能指针管理InMemoryMap对象,用于存储和访问地图数据
111 /// @brief 存储所有车辆路径点的缓冲区结构映射
112 /// 使用BufferMap类型(可能是自定义的映射类型)来存储每个车辆的路径点缓冲区
114 /// @brief 用于跟踪交通车辆路径的对象
115 /// TrackTraffic对象可能包含有关交通车辆当前位置和预期路径的信息
117 /// @brief 包含模拟中所有参与者当前状态的类型
118 /// 用于表示模拟中所有参与者的状态信息
120 /// @brief 在异步模式下用于计算时间差(dt)的时间实例
121 /// 使用TimePoint类型表示一个具体的时间点,用于与上一个更新时间点进行比较,以计算时间差
123 /// @brief 参数化对象
124 /// 包含交通管理器运行所需的各种配置参数
126 /// @brief 存储定位阶段输出数据的数组
127 /// 用于存储定位阶段产生的数据
129 /// @brief 存储碰撞避免阶段输出数据的数组
130 /// 用于存储碰撞避免阶段产生的数据
132 /// @brief 存储交通灯响应阶段输出数据的数组
133 /// 用于存储交通灯响应阶段产生的数据
135 /// @brief 存储运动规划阶段输出数据的数组
136 /// 用于存储运动规划阶段产生的控制指令
138 /// @brief 用于跟踪当前为帧保留的数组空间的变量
139 /// 这是一个无符号64位整数,用于记录为各个帧数组预留的空间大小
141 /// @brief 表示交通管理器核心操作的各种阶段
142 /// 这些阶段包括定位、碰撞避免、交通灯响应、运动规划和车辆灯光控制等
148 /// @brief 自动驾驶局部路径规划模块(ALSM)
149 /// ALSM可能是一个用于生成局部路径规划算法的模块或对象
150 ALSM alsm;
151 /// @brief 交通管理器服务器实例。
152 /// 负责处理来自客户端的请求,并管理交通管理器的运行
154 /// @brief 用于打开/关闭交通管理器的开关
155 /// 这是一个原子布尔变量,用于线程安全地控制交通管理器的运行状态
156 std::atomic<bool> run_traffic_manger{true};
157 /// @brief 用于标记步骤开始和结束的标志
158 /// 使用std::atomic<bool>确保跨线程的原子操作,避免数据竞争
159 std::atomic<bool> step_begin{false};
160 std::atomic<bool> step_end{false};
161 /// @brief 用于同步执行进度的互斥锁
162 /// std::mutex用于保护共享资源,确保同一时间只有一个线程可以访问
164 /// @brief 用于同步执行进度的条件变量
165 /// std::condition_variable用于线程间的同步,当一个线程需要等待某个条件成立时,可以阻塞在该条件变量上,直到另一个线程通知条件已成立
166 std::condition_variable step_begin_trigger;
167 std::condition_variable step_end_trigger;
168 /// @brief 用于顺序执行子组件的单个工作线程
169 /// 使用std::unique_ptr<std::thread>管理线程的生命周期,确保线程在不再需要时能够被正确销毁
170 std::unique_ptr<std::thread> worker_thread;
171 /// @brief 随机化种子
172 /// 使用当前时间作为随机化种子,确保每次程序运行时都能产生不同的随机序列
173 uint64_t seed {static_cast<uint64_t>(time(NULL))};
174 /// @brief 持有每辆车的随机设备的结构体
175 /// RandomGenerator是一个用于生成随机数的类或结构体,使用seed进行初始化
177 /// @brief 标记为删除的参与者ID列表
178 /// 用于存储需要在某个时间点被移除的参与者ID
179 std::vector<ActorId> marked_for_removal;
180 /// @brief 防止在帧数组重新分配期间注册车辆的互斥锁
181 /// 用于保护车辆注册操作,确保在帧数组重新分配时不会有新的车辆被注册
183 /// @brief 检查一个交通灯组中的所有交通灯是否都被冻结的方法
184 ///
185 /// @param tl_to_freeze 要检查的交通灯组
186 /// @return 如果所有交通灯都被冻结,则返回true;否则返回false
187 bool CheckAllFrozen(TLGroup tl_to_freeze);
188
189public:
190 /// @brief 私有构造函数,用于单例生命周期管理
191 ///
192 /// 通过私有构造函数确保TrafficManagerLocal类只能有一个实例被创建,并通过其他静态方法访问该实例
193 ///
194 /// @param longitudinal_PID_parameters 纵向PID控制参数
195 /// @param longitudinal_highway_PID_parameters 高速公路纵向PID控制参数
196 /// @param lateral_PID_parameters 横向PID控制参数
197 /// @param lateral_highway_PID_parameters 高速公路横向PID控制参数
198 /// @param perc_decrease_from_limit 从限速降低的百分比
199 /// @param episode_proxy 模拟器中的episode代理对象
200 /// @param RPCportTM 交通管理器使用的RPC端口号
202 std::vector<float> longitudinal_highway_PID_parameters,
203 std::vector<float> lateral_PID_parameters,
204 std::vector<float> lateral_highway_PID_parameters,
205 float perc_decrease_from_limit,
206 cc::detail::EpisodeProxy &episode_proxy,
207 uint16_t &RPCportTM);
208
209 /// @brief 析构函数
210 /// 虚拟析构函数,用于确保派生类能够正确地被销毁
211 virtual ~TrafficManagerLocal();
212
213 /// @brief 设置内存中的地图
214 /// 此方法用于初始化或设置TrafficManagerLocal所使用的内存地图
215 void SetupLocalMap();
216
217 /// @brief 启动交通管理器
218 /// 此方法用于启动TrafficManagerLocal,开始其管理交通的功能
219 void Start();
220
221 /// @brief 启动线程以顺序运行交通管理器
222 /// 此方法将创建一个新线程(如果尚未创建),并在该线程中顺序运行交通管理器的逻辑
223 void Run();
224
225 /// @brief 停止交通管理器
226 /// 此方法用于停止TrafficManagerLocal的运行,并可能进行必要的清理工作
227 void Stop();
228
229 /// @brief 释放交通管理器
230 /// 此方法用于释放TrafficManagerLocal所占用的资源,例如线程、内存等
231 void Release();
232
233 /// @brief 重置交通管理器
234 /// 此方法将TrafficManagerLocal重置为其初始状态,清除所有已注册的车辆和设置
235 void Reset();
236
237 /// @brief 向交通管理器注册车辆
238 /// @param actor_list 要注册的车辆列表,每个元素都是一个指向Actor的指针
239 void RegisterVehicles(const std::vector<ActorPtr> &actor_list);
240
241 /// @brief 从交通管理器注销车辆
242 /// @param actor_list 要注销的车辆列表,每个元素都是一个指向Actor的指针
243 void UnregisterVehicles(const std::vector<ActorPtr> &actor_list);
244
245 /// @brief 设置车辆相对于限速的速度百分比差异
246 /// @param actor 要设置速度差异的车辆指针
247 /// @param percentage 速度百分比差异,如果小于0,则表示速度百分比增加
248 void SetPercentageSpeedDifference(const ActorPtr &actor, const float percentage);
249
250 /// @brief 设置车辆的精确期望速度
251 /// @param actor 要设置期望速度的车辆指针
252 /// @param value 车辆的期望速度值
253 void SetDesiredSpeed(const ActorPtr &actor, const float value);
254
255 /// @brief 设置全局相对于限速的速度百分比差异
256 /// @param percentage 全局速度百分比差异,如果小于0,则表示速度百分比增加
257 /// 此设置将影响所有已注册的车辆
258 void SetGlobalPercentageSpeedDifference(float const percentage);
259
260 /// @brief 设置车辆相对于中心线的车道偏移量
261 /// @param actor 要设置车道偏移量的车辆指针
262 /// @param offset 车道偏移量,正值表示向右偏移,负值表示向左偏移
263 void SetLaneOffset(const ActorPtr &actor, const float offset);
264
265 /// @brief 设置全局车道相对于中心线的偏移量。
266 ///
267 /// @param offset 车道偏移量。正值表示向右偏移,负值表示向左偏移。
268 /// 此设置将影响所有由交通管理器管理的车辆
269 void SetGlobalLaneOffset(float const offset);
270
271 /// @brief 设置车辆的灯光是否自动管理。
272 /// @param actor 要设置灯光管理状态的车辆指针。
273 /// @param do_update 是否启用自动灯光管理。如果为true,则启用;如果为false,则禁用
274 void SetUpdateVehicleLights(const ActorPtr &actor, const bool do_update);
275
276 /// @brief 设置两辆车之间的碰撞检测规则。
277 /// @param reference_actor 参考车辆指针,即碰撞检测中的一方。
278 /// @param other_actor 另一车辆指针,即与参考车辆进行碰撞检测的另一方。
279 /// @param detect_collision 是否启用两车之间的碰撞检测。如果为true,则启用;如果为false,则禁用
280 void SetCollisionDetection(const ActorPtr &reference_actor, const ActorPtr &other_actor, const bool detect_collision);
281
282 /// @brief 强制车辆进行换道。
283 /// @param actor 要强制换道的车辆指针。
284 /// @param direction 换道方向。如果为true,则向左换道;如果为false,则向右换道
285 void SetForceLaneChange(const ActorPtr &actor, const bool direction);
286
287 /// @brief 启用或禁用车辆的自动换道功能。
288 /// @param actor 要设置自动换道状态的车辆指针。
289 /// @param enable 是否启用自动换道。如果为true,则启用;如果为false,则禁用
290 void SetAutoLaneChange(const ActorPtr &actor, const bool enable);
291
292 /// @brief 设置车辆与前车应保持的距离。
293 /// @param actor 要设置距离的车辆指针。
294 /// @param distance 车辆与前车应保持的距离值
295 void SetDistanceToLeadingVehicle(const ActorPtr &actor, const float distance);
296
297 /// @brief 设置车辆忽略行人碰撞的百分比概率。
298 /// @param actor 要设置忽略行人碰撞概率的车辆指针。
299 /// @param perc 忽略行人碰撞的百分比概率。值范围应在0到100之间。
300 void SetPercentageIgnoreWalkers(const ActorPtr &actor, const float perc);
301
302 /// @brief 设置车辆忽略其他车辆碰撞的百分比概率。
303 /// @param actor 要设置忽略其他车辆碰撞概率的车辆指针。
304 /// @param perc 忽略其他车辆碰撞的百分比概率。值范围应在0到100之间
305 void SetPercentageIgnoreVehicles(const ActorPtr &actor, const float perc);
306
307 /// @brief 设置车辆闯红灯的百分比概率。
308 /// @param actor 要设置闯红灯概率的车辆指针。
309 /// @param perc 闯红灯的百分比概率。值范围应在0到100之间
310 void SetPercentageRunningLight(const ActorPtr &actor, const float perc);
311
312 /// @brief 设置车辆无视交通标志的百分比概率。
313 /// @param actor 要设置无视交通标志概率的车辆指针。
314 /// @param perc 无视交通标志的百分比概率。值范围应在0到100之间。
315 void SetPercentageRunningSign(const ActorPtr &actor, const float perc);
316
317 /// @brief 将交通管理器切换到同步执行模式。
318 /// @param mode 是否启用同步执行模式。如果为true,则启用;如果为false,则禁用。
319 /// 在同步执行模式下,交通管理器的所有操作将按顺序执行,而不是并行执行
320 void SetSynchronousMode(bool mode);
321
322 /// @brief 设置同步执行时的Tick超时时间(以毫秒为单位)。
323///
324/// @param time Tick超时时间,单位为毫秒
326
327 /// @brief 提供同步Tick。
328///
329/// @return 如果成功提供同步Tick,则返回true;否则返回false
330 bool SynchronousTick();
331
332 /// @brief 获取CARLA仿真场景的信息代理。
333///
334/// @return 返回CARLA仿真场景的EpisodeProxy引用
336
337 /// @brief 获取所有已注册车辆的ID列表。
338///
339/// @return 返回包含所有已注册车辆ID的std::vector
340 std::vector<ActorId> GetRegisteredVehiclesIDs();
341
342 /// @brief 设置车辆与全局前导车辆应保持的距离。
343///
344/// @param distance 车辆与全局前导车辆应保持的距离值。
345 void SetGlobalDistanceToLeadingVehicle(const float distance);
346
347 /// @brief 设置车辆保持在右侧车道的百分比概率。
348///
349/// @param actor 要设置的车辆指针。
350/// @param percentage 车辆保持在右侧车道的百分比概率
351 void SetKeepRightPercentage(const ActorPtr &actor, const float percentage);
352
353 /// @brief 设置车辆随机进行左车道变换的百分比概率。
354///
355/// @param actor 要设置的车辆指针。
356/// @param percentage 车辆随机进行左车道变换的百分比概率
357 void SetRandomLeftLaneChangePercentage(const ActorPtr &actor, const float percentage);
358
359 /// @brief 设置车辆随机进行右车道变换的百分比概率。
360///
361/// @param actor 要设置的车辆指针。
362/// @param percentage 车辆随机进行右车道变换的百分比概率
363 void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage);
364
365 /// @brief 设置混合物理模式。
366///
367/// @param mode_switch 是否启用混合物理模式。如果为true,则启用;如果为false,则禁用
368 void SetHybridPhysicsMode(const bool mode_switch);
369
370 /// @brief 设置混合物理模式的半径。
371///
372/// @param radius 混合物理模式的半径值
373 void SetHybridPhysicsRadius(const float radius);
374
375 /// @brief 设置随机化种子。
376///
377/// @param _seed 随机化种子值
378 void SetRandomDeviceSeed(const uint64_t _seed);
379
380 /// @brief 设置Open Street Map模式。
381///
382/// @param mode_switch 是否启用Open Street Map模式。如果为true,则启用;如果为false,则禁用.
383 void SetOSMMode(const bool mode_switch);
384
385 /// @brief 设置自定义路径。
386///
387/// @param actor 要设置路径的车辆指针。
388/// @param path 自定义路径。
389/// @param empty_buffer 是否清空已有的路径缓冲区。如果为true,则清空;如果为false,则不清空
390 void SetCustomPath(const ActorPtr &actor, const Path path, const bool empty_buffer);
391
392 /// @brief 移除一组点。
393///
394/// @param actor_id 车辆ID。
395/// @param remove_path 是否移除路径。如果为true,则移除;如果为false,则不移除
396 void RemoveUploadPath(const ActorId &actor_id, const bool remove_path);
397
398 /// @brief 更新已设置的点列表。
399///
400/// @param actor_id 车辆ID。
401/// @param path 新的路径
402 void UpdateUploadPath(const ActorId &actor_id, const Path path);
403
404 /// @brief 设置自定义路线。
405///
406/// @param actor 要设置路线的车辆指针。
407/// @param route 自定义路线。
408/// @param empty_buffer 是否清空已有的路线缓冲区。如果为true,则清空;如果为false,则不清空
409 void SetImportedRoute(const ActorPtr &actor, const Route route, const bool empty_buffer);
410
411 /// @brief 移除路线。
412///
413/// @param actor_id 车辆ID。
414/// @param remove_path 是否移除路线。如果为true,则移除;如果为false,则不移除
415 void RemoveImportedRoute(const ActorId &actor_id, const bool remove_path);
416
417 /// @brief 更新已设置的路线。
418///
419/// @param actor_id 车辆ID。
420/// @param route 新的路线
421 void UpdateImportedRoute(const ActorId &actor_id, const Route route);
422
423 /// @brief 设置休眠车辆的自动重生模式。
424///
425/// @param mode_switch 是否启用休眠车辆的自动重生模式。如果为true,则启用;如果为false,则禁用
426 void SetRespawnDormantVehicles(const bool mode_switch);
427
428 /// @brief 设置休眠车辆重生时的边界。
429///
430/// @param lower_bound 重生边界的下限。
431/// @param upper_bound 重生边界的上限
432 void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound);
433
434 /// @brief 设置重生休眠车辆时边界的限制。
435///
436/// @param lower 下限值。
437/// @param upper 上限值
438 void SetMaxBoundaries(const float lower, const float upper);
439
440 /// @brief 获取车辆的下一个动作。
441///
442/// @param actor_id 车辆ID。
443/// @return 返回车辆的下一个动作
444 Action GetNextAction(const ActorId &actor_id);
445
446 /// @brief 获取车辆的动作缓冲区。
447 ///
448 /// @param actor_id 车辆ID。
449 /// @return 返回车辆的动作缓冲区
450 ActionBuffer GetActionBuffer(const ActorId &actor_id);
451 /// @brief 关闭并清理资源
452 void ShutDown() {};
453};
454
455} // namespace traffic_manager
456} // namespace carla
包含CARLA交通管理相关的头文件和定义
该类具有检测与附近演员潜在碰撞的功能。
此类功能是维护车辆前方的路径点以供跟随。 该类还负责管理车道变更决策并适当地修改路径轨迹。
该类保持了仿真中所有车辆的状态。
交通管理器本地类,通过消息传递机制整合交通管理器的各个阶段。 @inherits TrafficManagerBase
int registered_vehicles_state
用于跟踪注册参与者状态变化的计数器
LocalizationStage localization_stage
表示交通管理器核心操作的各种阶段 这些阶段包括定位、碰撞避免、交通灯响应、运动规划和车辆灯光控制等
std::mutex step_execution_mutex
用于同步执行进度的互斥锁 std::mutex用于保护共享资源,确保同一时间只有一个线程可以访问
TimePoint previous_update_instance
在异步模式下用于计算时间差(dt)的时间实例 使用TimePoint类型表示一个具体的时间点,用于与上一个更新时间点进行比较,以计算时间差
AtomicActorSet registered_vehicles
注册到交通管理器的所有参与者集合。
void SetHybridPhysicsRadius(const float radius)
设置混合物理模式的半径。
void SetPercentageRunningLight(const ActorPtr &actor, const float perc)
设置车辆闯红灯的百分比概率。
std::vector< ActorId > marked_for_removal
标记为删除的参与者ID列表 用于存储需要在某个时间点被移除的参与者ID
std::unique_ptr< std::thread > worker_thread
用于顺序执行子组件的单个工作线程 使用std::unique_ptr<std::thread>管理线程的生命周期,确保线程在不再需要时能够被正确销毁
uint64_t seed
随机化种子 使用当前时间作为随机化种子,确保每次程序运行时都能产生不同的随机序列
void SetupLocalMap()
设置内存中的地图 此方法用于初始化或设置TrafficManagerLocal所使用的内存地图
void Start()
启动交通管理器 此方法用于启动TrafficManagerLocal,开始其管理交通的功能
void SetPercentageSpeedDifference(const ActorPtr &actor, const float percentage)
设置车辆相对于限速的速度百分比差异
std::condition_variable step_begin_trigger
用于同步执行进度的条件变量 std::condition_variable用于线程间的同步,当一个线程需要等待某个条件成立时,可以阻塞在该条件变量上,直到另一个线程通知条件已成立
ControlFrame control_frame
存储运动规划阶段输出数据的数组 用于存储运动规划阶段产生的控制指令
void SetMaxBoundaries(const float lower, const float upper)
设置重生休眠车辆时边界的限制。
Parameters parameters
参数化对象 包含交通管理器运行所需的各种配置参数
void SetDistanceToLeadingVehicle(const ActorPtr &actor, const float distance)
设置车辆与前车应保持的距离。
std::vector< ActorId > vehicle_id_list
当前更新周期中注册到交通管理器的车辆列表 使用ActorId类型存储车辆的唯一标识符
void SetGlobalPercentageSpeedDifference(float const percentage)
设置全局相对于限速的速度百分比差异
void SetRandomDeviceSeed(const uint64_t _seed)
设置随机化种子。
BufferMap buffer_map
存储所有车辆路径点的缓冲区结构映射 使用BufferMap类型(可能是自定义的映射类型)来存储每个车辆的路径点缓冲区
void UpdateUploadPath(const ActorId &actor_id, const Path path)
更新已设置的点列表。
void SetLaneOffset(const ActorPtr &actor, const float offset)
设置车辆相对于中心线的车道偏移量
TrackTraffic track_traffic
用于跟踪交通车辆路径的对象 TrackTraffic对象可能包含有关交通车辆当前位置和预期路径的信息
TrafficManagerServer server
交通管理器服务器实例。 负责处理来自客户端的请求,并管理交通管理器的运行
void SetSynchronousModeTimeOutInMiliSecond(double time)
设置同步执行时的Tick超时时间(以毫秒为单位)。
void RegisterVehicles(const std::vector< ActorPtr > &actor_list)
向交通管理器注册车辆
std::vector< float > lateral_highway_PID_parameters
高速公路横向PID控制器参数集合。
void UpdateImportedRoute(const ActorId &actor_id, const Route route)
更新已设置的路线。
void SetSynchronousMode(bool mode)
将交通管理器切换到同步执行模式。
CollisionFrame collision_frame
存储碰撞避免阶段输出数据的数组 用于存储碰撞避免阶段产生的数据
void SetAutoLaneChange(const ActorPtr &actor, const bool enable)
启用或禁用车辆的自动换道功能。
void SetRespawnDormantVehicles(const bool mode_switch)
设置休眠车辆的自动重生模式。
void SetPercentageIgnoreVehicles(const ActorPtr &actor, const float perc)
设置车辆忽略其他车辆碰撞的百分比概率。
void Run()
启动线程以顺序运行交通管理器 此方法将创建一个新线程(如果尚未创建),并在该线程中顺序运行交通管理器的逻辑
std::vector< float > longitudinal_highway_PID_parameters
高速公路纵向PID控制器参数集合。
TLFrame tl_frame
存储交通灯响应阶段输出数据的数组 用于存储交通灯响应阶段产生的数据
TrafficManagerLocal(std::vector< float > longitudinal_PID_parameters, std::vector< float > longitudinal_highway_PID_parameters, std::vector< float > lateral_PID_parameters, std::vector< float > lateral_highway_PID_parameters, float perc_decrease_from_limit, cc::detail::EpisodeProxy &episode_proxy, uint16_t &RPCportTM)
私有构造函数,用于单例生命周期管理
uint64_t current_reserved_capacity
用于跟踪当前为帧保留的数组空间的变量 这是一个无符号64位整数,用于记录为各个帧数组预留的空间大小
void SetHybridPhysicsMode(const bool mode_switch)
设置混合物理模式。
LocalizationFrame localization_frame
存储定位阶段输出数据的数组 用于存储定位阶段产生的数据
ALSM alsm
自动驾驶局部路径规划模块(ALSM) ALSM可能是一个用于生成局部路径规划算法的模块或对象
void Reset()
重置交通管理器 此方法将TrafficManagerLocal重置为其初始状态,清除所有已注册的车辆和设置
void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage)
设置车辆随机进行右车道变换的百分比概率。
carla::client::detail::EpisodeProxy & GetEpisodeProxy()
获取CARLA仿真场景的信息代理。
void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound)
设置休眠车辆重生时的边界。
std::vector< ActorId > GetRegisteredVehiclesIDs()
获取所有已注册车辆的ID列表。
void SetKeepRightPercentage(const ActorPtr &actor, const float percentage)
设置车辆保持在右侧车道的百分比概率。
void SetPercentageRunningSign(const ActorPtr &actor, const float perc)
设置车辆无视交通标志的百分比概率。
ActionBuffer GetActionBuffer(const ActorId &actor_id)
获取车辆的动作缓冲区。
LocalMapPtr local_map
指向本地地图缓存的指针 使用智能指针管理InMemoryMap对象,用于存储和访问地图数据
void SetGlobalDistanceToLeadingVehicle(const float distance)
设置车辆与全局前导车辆应保持的距离。
void SetGlobalLaneOffset(float const offset)
设置全局车道相对于中心线的偏移量。
carla::client::detail::EpisodeProxy episode_proxy
CARLA 客户端连接对象。
void SetUpdateVehicleLights(const ActorPtr &actor, const bool do_update)
设置车辆的灯光是否自动管理。
virtual ~TrafficManagerLocal()
析构函数 虚拟析构函数,用于确保派生类能够正确地被销毁
void SetCollisionDetection(const ActorPtr &reference_actor, const ActorPtr &other_actor, const bool detect_collision)
设置两辆车之间的碰撞检测规则。
std::atomic< bool > run_traffic_manger
用于打开/关闭交通管理器的开关 这是一个原子布尔变量,用于线程安全地控制交通管理器的运行状态
bool CheckAllFrozen(TLGroup tl_to_freeze)
检查一个交通灯组中的所有交通灯是否都被冻结的方法
void SetForceLaneChange(const ActorPtr &actor, const bool direction)
强制车辆进行换道。
RandomGenerator random_device
持有每辆车的随机设备的结构体 RandomGenerator是一个用于生成随机数的类或结构体,使用seed进行初始化
void SetCustomPath(const ActorPtr &actor, const Path path, const bool empty_buffer)
设置自定义路径。
void UnregisterVehicles(const std::vector< ActorPtr > &actor_list)
从交通管理器注销车辆
void SetDesiredSpeed(const ActorPtr &actor, const float value)
设置车辆的精确期望速度
void Release()
释放交通管理器 此方法用于释放TrafficManagerLocal所占用的资源,例如线程、内存等
SimulationState simulation_state
包含模拟中所有参与者当前状态的类型 用于表示模拟中所有参与者的状态信息
std::vector< float > longitudinal_PID_parameters
纵向PID控制器参数集合。
Action GetNextAction(const ActorId &actor_id)
获取车辆的下一个动作。
void Stop()
停止交通管理器 此方法用于停止TrafficManagerLocal的运行,并可能进行必要的清理工作
void SetImportedRoute(const ActorPtr &actor, const Route route, const bool empty_buffer)
设置自定义路线。
void SetRandomLeftLaneChangePercentage(const ActorPtr &actor, const float percentage)
设置车辆随机进行左车道变换的百分比概率。
void RemoveImportedRoute(const ActorId &actor_id, const bool remove_path)
移除路线。
void SetOSMMode(const bool mode_switch)
设置Open Street Map模式。
void RemoveUploadPath(const ActorId &actor_id, const bool remove_path)
移除一组点。
std::atomic< bool > step_begin
用于标记步骤开始和结束的标志 使用std::atomic<bool>确保跨线程的原子操作,避免数据竞争
void SetPercentageIgnoreWalkers(const ActorPtr &actor, const float perc)
设置车辆忽略行人碰撞的百分比概率。
std::vector< float > lateral_PID_parameters
横向PID控制器参数集合。
std::mutex registration_mutex
防止在帧数组重新分配期间注册车辆的互斥锁 用于保护车辆注册操作,确保在帧数组重新分配时不会有新的车辆被注册
交通管理服务器类,负责处理远程交通管理器的请求并应用更改到本地实例。
VehicleLightStage类负责根据车辆当前的状态和周围环境来开启或关闭车辆的灯光
carla::SharedPtr< cc::Actor > ActorPtr
使用别名简化代码中的命名
std::vector< uint8_t > Route
路线类型,由一系列地理位置组成
std::vector< cg::Location > Path
参与者的唯一标识符类型
std::vector< carla::rpc::Command > ControlFrame
std::vector< bool > TLFrame
std::vector< Action > ActionBuffer
动作缓冲区类型别名。
std::vector< CollisionHazardData > CollisionFrame
std::shared_ptr< InMemoryMap > LocalMapPtr
本地地图指针类型,使用智能指针管理InMemoryMap对象
std::pair< RoadOption, WaypointPtr > Action
动作类型别名。
carla::ActorId ActorId
参与者的智能指针类型
chr::time_point< chr::system_clock, chr::nanoseconds > TimePoint
时间点类型,使用系统时钟和纳秒精度
std::vector< LocalizationData > LocalizationFrame
std::unordered_map< carla::ActorId, Buffer > BufferMap
std::vector< carla::SharedPtr< carla::client::TrafficLight > > TLGroup
交通灯组类型,使用CARLA的智能指针管理交通灯对象的集合
CARLA模拟器的主命名空间。
Definition Carla.cpp:139