CARLA
 
载入中...
搜索中...
未找到
TrafficManager.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 <map>///< 引入map容器,用于存储键值对
10#include <mutex>///< 引入互斥锁,用于线程间的同步
11#include <vector>///< 引入动态数组容器,用于存储可变大小的数组
12
13#include "carla/client/Actor.h"///< 引入CARLA客户端的Actor类,代表场景中的一个实体
14#include "carla/trafficmanager/Constants.h"///< 引入交通管理器常量定义
15#include "carla/trafficmanager/TrafficManagerBase.h"///< 引入交通管理器基类
16
17namespace carla {
18namespace traffic_manager {
19
20using constants::Networking::TM_DEFAULT_PORT;///< 使用常量TM_DEFAULT_PORT,表示交通管理器的默认端口号
21
22using ActorPtr = carla::SharedPtr<carla::client::Actor>;///< 定义Actor的智能指针类型,用于管理Actor对象的生命周期
23
24/// \class TrafficManager
25/// \brief 该类通过使用消息传递机制,将交通管理器的各个阶段恰当地整合在一起
27
28public:
29 /// \brief 公有构造函数,用于单例生命周期管理。
30 /// \param episode_proxy CARLA客户端的EpisodeProxy对象,代表一个场景会话。
31 /// \param port 交通管理器的端口号,默认为TM_DEFAULT_PORT
32 explicit TrafficManager(
34 uint16_t port = TM_DEFAULT_PORT);
35 /// \brief 拷贝构造函数,用于复制另一个TrafficManager对象。
36 /// \param other 要复制的TrafficManager对象。
38 _port = other._port;
39 }
40 /// \brief 默认构造函数,不执行任何操作。
42 /// \brief 移动构造函数,用于移动另一个TrafficManager对象
44 /// \brief 拷贝赋值运算符,用于将另一个TrafficManager对象赋值给当前对象
46 /// \brief 移动赋值运算符,用于将另一个TrafficManager对象移动赋值给当前对象
48 /// \brief 释放TrafficManager对象,用于单例模式的清理工作
49 static void Release();
50 /// \brief 重置TrafficManager对象,用于单例模式的重置操作
51 static void Reset();
52 /// \brief 执行TrafficManager的Tick操作,通常用于周期性地更新状态
53 static void Tick();
54 /// \brief 获取当前端口号。
55/// \return 返回当前设置的端口号
56 uint16_t Port() const {
57 return _port;
58 }
59 /// \brief 检查端口号是否有效。
60/// \details 通常,操作系统会保留前1024个端口,因此有效端口号应大于1023。
61/// \return 如果端口号有效,则返回true;否则返回false。
62 bool IsValidPort() const {
63 return (_port > 1023);
64 }
65
66 /// \brief 设置Open Street Map模式。
67 /// \param mode_switch 如果为true,则启用OSM模式;如果为false,则禁用
68 void SetOSMMode(const bool mode_switch) {
70 if (tm_ptr != nullptr) {
71 tm_ptr->SetOSMMode(mode_switch);
72 }
73 }
74
75 /// \brief 设置自定义路径。
76/// \param actor 对应的Actor指针。
77/// \param path 要设置的路径。
78/// \param empty_buffer 如果为true,则在设置新路径前清空缓冲区
79 void SetCustomPath(const ActorPtr &actor, const Path path, const bool empty_buffer) {
81 if (tm_ptr != nullptr) {
82 tm_ptr->SetCustomPath(actor, path, empty_buffer);
83 }
84 }
85
86 /// \brief 移除路径。
87 /// \param actor_id 要移除路径的Actor的ID。
88 /// \param remove_path 如果为true,则移除路径;如果为false,则不执行操作(具体行为可能依赖于实现)
89 void RemoveUploadPath(const ActorId &actor_id, const bool remove_path) {
91 if (tm_ptr != nullptr) {
92 tm_ptr->RemoveUploadPath(actor_id, remove_path);
93 }
94 }
95
96 /// \brief 更新已设置的路径。
97/// \param actor_id 要更新路径的Actor的ID。
98/// \param path 新的路径。
99 void UpdateUploadPath(const ActorId &actor_id, const Path path) {
100 TrafficManagerBase* tm_ptr = GetTM(_port);
101 if (tm_ptr != nullptr) {
102 tm_ptr->UpdateUploadPath(actor_id, path);
103 }
104 }
105
106 /// \brief 设置导入的路线。
107 /// \param actor 对应的Actor指针。
108 /// \param route 要设置的路线。
109 /// \param empty_buffer 如果为true,则在设置新路线前清空缓冲区。
110 void SetImportedRoute(const ActorPtr &actor, const Route route, const bool empty_buffer) {
111 TrafficManagerBase* tm_ptr = GetTM(_port);
112 if (tm_ptr != nullptr) {
113 tm_ptr->SetImportedRoute(actor, route, empty_buffer);
114 }
115 }
116
117 /// \brief 移除路线。
118/// \param actor_id 要移除路线的Actor的ID。
119/// \param remove_path 如果为true,则移除路线;如果为false,则不执行操作(具体行为可能依赖于实现)
120 void RemoveImportedRoute(const ActorId &actor_id, const bool remove_path) {
121 TrafficManagerBase* tm_ptr = GetTM(_port);
122 if (tm_ptr != nullptr) {
123 tm_ptr->RemoveImportedRoute(actor_id, remove_path);
124 }
125 }
126
127 /// \brief 更新已设置的路线。
128/// \param actor_id 要更新路线的Actor的ID。
129/// \param route 新的路线。
130 void UpdateImportedRoute(const ActorId &actor_id, const Route route) {
131 TrafficManagerBase* tm_ptr = GetTM(_port);
132 if (tm_ptr != nullptr) {
133 tm_ptr->UpdateImportedRoute(actor_id, route);
134 }
135 }
136
137 /// \brief 设置是否自动重生车辆。
138/// \param mode_switch 如果为true,则启用自动重生;如果为false,则禁用。
139 void SetRespawnDormantVehicles(const bool mode_switch) {
140 TrafficManagerBase* tm_ptr = GetTM(_port);
141 if (tm_ptr != nullptr) {
142 tm_ptr->SetRespawnDormantVehicles(mode_switch);
143 }
144 }
145 /// \brief 设置重生车辆的范围边界。
146 /// \param lower_bound 范围的下界。
147 /// \param upper_bound 范围的上界。
148 void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound) {
149 TrafficManagerBase* tm_ptr = GetTM(_port);
150 if (tm_ptr != nullptr) {
151 tm_ptr->SetBoundariesRespawnDormantVehicles(lower_bound, upper_bound);
152 }
153 }
154
155 /// @brief 设置重生车辆的边界。
156/// 此方法用于为TrafficManager设置车辆重生时的上下边界。
157/// @param lower 下边界值。
158/// @param upper 上边界值。
159 void SetMaxBoundaries(const float lower, const float upper) {
160 TrafficManagerBase* tm_ptr = GetTM(_port);
161 if (tm_ptr != nullptr) {
162 tm_ptr->SetMaxBoundaries(lower, upper);
163 }
164 }
165
166 /// @brief 设置混合物理模式。
167 /// 此方法用于启用或禁用TrafficManager的混合物理模式。
168 /// @param mode_switch 启用(true)或禁用(false)混合物理模式。
169 void SetHybridPhysicsMode(const bool mode_switch) {
170 TrafficManagerBase* tm_ptr = GetTM(_port);
171 if(tm_ptr != nullptr){
172 tm_ptr->SetHybridPhysicsMode(mode_switch);
173 }
174 }
175
176 /// @brief 设置混合物理半径。
177/// 此方法用于设置TrafficManager的混合物理模式的触发半径。
178/// @param radius 混合物理模式的触发半径。
179 void SetHybridPhysicsRadius(const float radius) {
180 TrafficManagerBase* tm_ptr = GetTM(_port);
181 if(tm_ptr != nullptr){
182 tm_ptr->SetHybridPhysicsRadius(radius);
183 }
184 }
185
186 /// @brief 向交通管理器注册车辆。
187/// 此方法用于将一组车辆注册到TrafficManager中。
188/// @param actor_list 要注册的车辆列表。
189 void RegisterVehicles(const std::vector<ActorPtr> &actor_list) {
190 TrafficManagerBase* tm_ptr = GetTM(_port);
191 if(tm_ptr != nullptr){
192 tm_ptr->RegisterVehicles(actor_list);
193 }
194 }
195
196 /// @brief 从交通管理器注销车辆。
197 /// 此方法用于从TrafficManager中注销一组车辆。
198 /// @param actor_list 要注销的车辆列表。
199 void UnregisterVehicles(const std::vector<ActorPtr> &actor_list) {
200 TrafficManagerBase* tm_ptr = GetTM(_port);
201 if(tm_ptr != nullptr){
202 tm_ptr->UnregisterVehicles(actor_list);
203 }
204 }
205
206 /// @brief 设置车辆相对于限速的速度百分比差异。
207/// 此方法用于设置车辆相对于道路限速的速度百分比差异。如果百分比小于0,则表示速度增加。
208/// @param actor 要设置速度差异的车辆。
209/// @param percentage 速度百分比差异。
210 void SetPercentageSpeedDifference(const ActorPtr &actor, const float percentage) {
211 TrafficManagerBase* tm_ptr = GetTM(_port);
212 if(tm_ptr != nullptr){
213 tm_ptr->SetPercentageSpeedDifference(actor, percentage);
214 }
215 }
216
217 /// @brief 设置车辆相对于车道中心线的偏移量。
218/// 此方法用于设置车辆相对于车道中心线的偏移量。正值表示向右偏移,负值表示向左偏移。
219/// @param actor 要设置车道偏移的车辆。
220/// @param offset 车道偏移量。
221 void SetLaneOffset(const ActorPtr &actor, const float offset) {
222 TrafficManagerBase* tm_ptr = GetTM(_port);
223 if(tm_ptr != nullptr){
224 tm_ptr->SetLaneOffset(actor, offset);
225 }
226 }
227
228 /// @brief 设置车辆的期望速度。
229 /// 此方法用于设置车辆的精确期望速度。
230 /// @param actor 要设置期望速度的车辆。
231 /// @param value 车辆的期望速度。
232 void SetDesiredSpeed(const ActorPtr &actor, const float value) {
233 TrafficManagerBase* tm_ptr = GetTM(_port);
234 if(tm_ptr != nullptr){
235 tm_ptr->SetDesiredSpeed(actor, value);
236 }
237 }
238
239 /// @brief 设置全局速度百分比差异。
240/// 此方法用于设置所有车辆相对于道路限速的全局速度百分比差异。如果百分比小于0,则表示速度增加。
241/// @param percentage 全局速度百分比差异。
242 void SetGlobalPercentageSpeedDifference(float const percentage){
243 TrafficManagerBase* tm_ptr = GetTM(_port);
244 if(tm_ptr != nullptr){
245 tm_ptr->SetGlobalPercentageSpeedDifference(percentage);
246 }
247 }
248
249 /// 设置全局车道偏移量,相对于中心线的位移。
250/// 正值表示向右偏移,负值表示向左偏移。
251 void SetGlobalLaneOffset(float const offset){
252 TrafficManagerBase* tm_ptr = GetTM(_port); // 获取交通管理器实例
253 if(tm_ptr != nullptr){// 检查实例是否有效
254 tm_ptr->SetGlobalLaneOffset(offset);// 调用设置全局车道偏移量的方法
255 }
256 }
257
258 /// 设置车辆灯光的自动管理
259 void SetUpdateVehicleLights(const ActorPtr &actor, const bool do_update){
260 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
261 if(tm_ptr != nullptr){// 检查实例是否有效
262 tm_ptr->SetUpdateVehicleLights(actor, do_update);// 调用设置车辆灯光自动管理的方法
263 }
264 }
265
266 /// 设置车辆之间的碰撞检测规则
267 void SetCollisionDetection(const ActorPtr &reference_actor, const ActorPtr &other_actor, const bool detect_collision) {
268 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
269 if(tm_ptr != nullptr){// 检查实例是否有效
270 tm_ptr->SetCollisionDetection(reference_actor, other_actor, detect_collision);// 调用设置碰撞检测规则的方法
271 }
272 }
273
274 /// 强制车辆换道。
275/// 方向标志设置为true表示向左换道,false表示向右换道。
276 void SetForceLaneChange(const ActorPtr &actor, const bool direction) {
277 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
278 if(tm_ptr != nullptr){// 检查实例是否有效
279 tm_ptr->SetForceLaneChange(actor, direction);// 调用强制换道的方法
280 }
281 }
282
283 /// 启用/禁用车辆的自动换道功能。
284 void SetAutoLaneChange(const ActorPtr &actor, const bool enable) {
285 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
286 if(tm_ptr != nullptr){// 检查实例是否有效
287 tm_ptr->SetAutoLaneChange(actor, enable);// 调用设置自动换道功能的方法
288 }
289 }
290
291 /// 设置车辆与前车应保持的距离。
292 void SetDistanceToLeadingVehicle(const ActorPtr &actor, const float distance) {
293 TrafficManagerBase* tm_ptr = GetTM(_port); // 获取交通管理器实例
294 if(tm_ptr != nullptr){// 检查实例是否有效
295 tm_ptr->SetDistanceToLeadingVehicle(actor, distance); // 调用设置与前车距离的方法
296 }
297 }
298
299 /// 设置忽略行人的碰撞概率。
300/// @param actor 车辆指针。
301/// @param perc 忽略碰撞的概率(百分比)。
302 void SetPercentageIgnoreWalkers(const ActorPtr &actor, const float perc) {
303 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
304 if(tm_ptr != nullptr){// 检查实例是否有效
305 tm_ptr->SetPercentageIgnoreWalkers(actor, perc); // 调用设置忽略行人碰撞概率的方法
306 }
307 }
308
309 /// 设置忽略车辆的碰撞概率。
310/// @param actor 车辆指针。
311/// @param perc 忽略碰撞的概率(百分比)。
312 void SetPercentageIgnoreVehicles(const ActorPtr &actor, const float perc) {
313 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
314 if(tm_ptr != nullptr){// 检查实例是否有效
315 tm_ptr->SetPercentageIgnoreVehicles(actor, perc);// 调用设置忽略车辆碰撞概率的方法
316 }
317 }
318
319 /// 设置无视交通标志的概率。
320/// @param actor 车辆指针。
321/// @param perc 无视交通标志的概率(百分比)。
322 void SetPercentageRunningSign(const ActorPtr &actor, const float perc) {
323 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
324 if(tm_ptr != nullptr){// 检查实例是否有效
325 tm_ptr->SetPercentageRunningSign(actor, perc);// 调用设置无视交通标志概率的方法
326 }
327 }
328
329 /// 设置无视交通信号灯的概率。
330/// @param actor 车辆指针。
331/// @param perc 无视交通信号灯的概率(百分比)。
332 void SetPercentageRunningLight(const ActorPtr &actor, const float perc){
333 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
334 if(tm_ptr != nullptr){// 检查实例是否有效
335 tm_ptr->SetPercentageRunningLight(actor, perc); // 调用设置无视交通信号灯概率的方法
336 }
337 }
338
339 /// 将交通管理器切换为同步执行模式。
340 /// @param mode 是否启用同步模式(true为启用,false为禁用)。
341 void SetSynchronousMode(bool mode) {// 获取交通管理器实例
342 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
343 if(tm_ptr != nullptr){// 检查实例是否有效
344 tm_ptr->SetSynchronousMode(mode);// 调用设置同步执行模式的方法
345 }
346 }
347
348 /// 设置同步执行模式的滴答超时时间(以毫秒为单位)。
349/// @param time 超时时间,单位为毫秒。
351 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
352 if(tm_ptr != nullptr){// 检查实例是否有效
353 tm_ptr->SetSynchronousModeTimeOutInMiliSecond(time);// 调用设置超时时间的方法
354 }
355 }
356
357 /// 执行同步滴答。
358/// @return 如果成功执行同步滴答,则返回true;否则返回false。
360 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
361 if(tm_ptr != nullptr){// 检查实例是否有效
362 return tm_ptr->SynchronousTick();// 调用执行同步滴答的方法,并返回结果
363 }
364 return false;// 如果实例无效,则返回false
365 }
366
367 /// 设置全局的前车距离。
368/// @param distance 前车距离。
369 void SetGlobalDistanceToLeadingVehicle(const float distance) {
370 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
371 if(tm_ptr != nullptr){// 检查实例是否有效
372 tm_ptr->SetGlobalDistanceToLeadingVehicle(distance);// 调用设置前车距离的方法
373 }
374 }
375
376 /// 设置车辆保持在右侧车道的百分比。
377 /// @param actor 车辆指针。
378 /// @param percentage 保持在右侧车道的百分比。
379 void SetKeepRightPercentage(const ActorPtr &actor, const float percentage) {
380 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
381 if(tm_ptr != nullptr){// 检查实例是否有效
382 tm_ptr->SetKeepRightPercentage(actor, percentage);// 调用设置保持在右侧车道百分比的方法
383 }
384 }
385
386 /// 设置车辆随机进行左侧车道变换的百分比。
387/// @param actor 车辆指针。
388/// @param percentage 随机进行左侧车道变换的百分比。
389 void SetRandomLeftLaneChangePercentage(const ActorPtr &actor, const float percentage) {
390 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
391 if(tm_ptr != nullptr){// 检查实例是否有效
392 tm_ptr->SetRandomLeftLaneChangePercentage(actor, percentage);// 调用设置随机左侧车道变换百分比的方法
393 }
394 }
395
396 /// 设置车辆随机进行右侧车道变换的百分比。
397 /// @param actor 车辆指针。
398 /// @param percentage 随机进行右侧车道变换的百分比。
399 void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage) {
400 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
401 if(tm_ptr != nullptr){// 检查实例是否有效
402 tm_ptr->SetRandomRightLaneChangePercentage(actor, percentage);// 调用设置随机右侧车道变换百分比的方法
403 }
404 }
405
406 /// 设置随机数生成器的种子。
407 /// @param seed 随机数生成器的种子。
408 void SetRandomDeviceSeed(const uint64_t seed) {
409 TrafficManagerBase* tm_ptr = GetTM(_port);// 获取交通管理器实例
410 if(tm_ptr != nullptr){// 检查实例是否有效
411 tm_ptr->SetRandomDeviceSeed(seed);// 调用设置随机数生成器种子的方法
412 }
413 }
414 /// 关闭交通管理器服务或客户端。
415 void ShutDown();
416
417 /// 获取指定参与者的下一个动作。
418 /// @param actor_id 参与者的唯一标识符。
419 /// @return 指定参与者的下一个动作。
420 Action GetNextAction(const ActorId &actor_id) {
421 Action next_action;
422 TrafficManagerBase* tm_ptr = GetTM(_port);
423 if (tm_ptr != nullptr) {
424 next_action = tm_ptr->GetNextAction(actor_id);
425 return next_action;
426 }
427 return next_action;
428 }
429
430 /// 获取指定参与者的动作缓冲区。
431 /// @param actor_id 参与者的唯一标识符。
432 /// @return 指定参与者的动作缓冲区。
434 ActionBuffer action_buffer;
435 TrafficManagerBase* tm_ptr = GetTM(_port);
436 if (tm_ptr != nullptr) {
437 action_buffer = tm_ptr->GetActionBuffer(actor_id);
438 return action_buffer;
439 }
440 return action_buffer;
441 }
442
443private:
444 /// 创建交通管理器服务器。
445 /// @param episode_proxy 与当前场景相关联的代理对象。
446 /// @param port 服务器监听的端口号。
449 uint16_t port);
450
451 /// 创建交通管理器客户端。
452 /// @param episode_proxy 与当前场景相关联的代理对象。
453 /// @param port 客户端连接的端口号。
454 /// @return 如果创建成功,则返回true;否则返回false。
457 uint16_t port);
458 /// 根据端口号获取交通管理器实例。
459 /// @param port 端口号。
460 /// @return 对应的交通管理器实例指针;如果未找到,则返回nullptr。
461 TrafficManagerBase* GetTM(uint16_t port) const {
462 std::lock_guard<std::mutex> lock(_mutex);
463 auto it = _tm_map.find(port);
464 if (it != _tm_map.end()) {
465 return it->second;
466 }
467 return nullptr;
468 }
469 /// 存储交通管理器实例的静态映射表。
470 /// @details 键为端口号,值为对应的交通管理器实例指针
471 static std::map<uint16_t, TrafficManagerBase*> _tm_map;
472 /// 用于保护_tm_map的静态互斥锁。
473 static std::mutex _mutex;
474 /// 当前交通管理器实例使用的端口号。
475 uint16_t _port = 0;
476
477};
478
479} // namespace traffic_manager
480} // namespace carla
virtual void SetRandomDeviceSeed(const uint64_t seed)=0
设置随机化种子。
virtual void SetRandomLeftLaneChangePercentage(const ActorPtr &actor, const float percentage)=0
设置随机左变道的百分比。
virtual void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound)=0
设置重生车辆的范围。
virtual void SetPercentageIgnoreWalkers(const ActorPtr &actor, const float perc)=0
设置车辆忽略行人的碰撞概率。
virtual void SetPercentageRunningSign(const ActorPtr &actor, const float perc)=0
设置车辆无视交通标志的概率。
virtual void SetPercentageSpeedDifference(const ActorPtr &actor, const float percentage)=0
设置车辆相对于限速的速度百分比降低。 如果小于0,则表示百分比增加。
virtual void UpdateImportedRoute(const ActorId &actor_id, const Route route)=0
更新已设置的路线。
virtual bool SynchronousTick()=0
提供同步Tick。
virtual void SetGlobalLaneOffset(float const offset)=0
设置全局相对于中心线的车道偏移量。 正值表示向右偏移,负值表示向左偏移。
virtual void SetAutoLaneChange(const ActorPtr &actor, const bool enable)=0
启用/禁用车辆的自动换道。
virtual void SetCollisionDetection(const ActorPtr &reference_actor, const ActorPtr &other_actor, const bool detect_collision)=0
设置车辆之间的碰撞检测规则。
virtual void RegisterVehicles(const std::vector< ActorPtr > &actor_list)=0
此方法向交通管理器注册车辆。
virtual void SetOSMMode(const bool mode_switch)=0
设置Open Street Map模式。
virtual void SetMaxBoundaries(const float lower, const float upper)=0
设置范围限制。
virtual void SetPercentageIgnoreVehicles(const ActorPtr &actor, const float perc)=0
设置车辆忽略其他车辆的碰撞概率。
virtual Action GetNextAction(const ActorId &actor_id)=0
获取车辆的下一个动作。
virtual void SetHybridPhysicsRadius(const float radius)=0
设置混合物理半径。
virtual void SetForceLaneChange(const ActorPtr &actor, const bool direction)=0
强制车辆换道。
virtual void SetKeepRightPercentage(const ActorPtr &actor, const float percentage)=0
设置保持在右车道的百分比。
virtual void SetSynchronousMode(bool mode)=0
将交通管理器切换到同步执行模式。
virtual ActionBuffer GetActionBuffer(const ActorId &actor_id)=0
获取车辆的动作缓冲区。
virtual void SetLaneOffset(const ActorPtr &actor, const float offset)=0
设置车辆相对于中心线的车道偏移量。 正值表示向右偏移,负值表示向左偏移。
virtual void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage)=0
设置随机右变道的百分比。
virtual void SetSynchronousModeTimeOutInMiliSecond(double time)=0
设置同步执行模式的Tick超时时间。
virtual void SetRespawnDormantVehicles(const bool mode_switch)=0
设置休眠车辆的自动重生。
virtual void RemoveImportedRoute(const ActorId &actor_id, const bool remove_path)=0
移除路线。
virtual void SetHybridPhysicsMode(const bool mode_switch)=0
设置混合物理模式。
virtual void SetCustomPath(const ActorPtr &actor, const Path path, const bool empty_buffer)=0
设置自定义导入路径。
virtual void RemoveUploadPath(const ActorId &actor_id, const bool remove_path)=0
移除路径。
virtual void SetDesiredSpeed(const ActorPtr &actor, const float value)=0
设置车辆的精确期望速度。
virtual void SetUpdateVehicleLights(const ActorPtr &actor, const bool do_update)=0
设置车辆灯光的自动管理。
virtual void SetPercentageRunningLight(const ActorPtr &actor, const float perc)=0
设置车辆闯红灯的概率。
virtual void UnregisterVehicles(const std::vector< ActorPtr > &actor_list)=0
此方法从交通管理器注销车辆。
virtual void SetDistanceToLeadingVehicle(const ActorPtr &actor, const float distance)=0
设置车辆与前车应保持的距离。
virtual void SetGlobalDistanceToLeadingVehicle(const float dist)=0
设置全局前车距离。
virtual void UpdateUploadPath(const ActorId &actor_id, const Path path)=0
更新已设置的路径。
virtual void SetImportedRoute(const ActorPtr &actor, const Route route, const bool empty_buffer)=0
设置自定义导入路线。
virtual void SetGlobalPercentageSpeedDifference(float const percentage)=0
设置全局相对于限速的速度百分比降低。 如果小于0,则表示百分比增加。
该类通过使用消息传递机制,将交通管理器的各个阶段恰当地整合在一起
static std::map< uint16_t, TrafficManagerBase * > _tm_map
存储交通管理器实例的静态映射表。
void SetRandomLeftLaneChangePercentage(const ActorPtr &actor, const float percentage)
设置车辆随机进行左侧车道变换的百分比。
Action GetNextAction(const ActorId &actor_id)
获取指定参与者的下一个动作。
void SetCollisionDetection(const ActorPtr &reference_actor, const ActorPtr &other_actor, const bool detect_collision)
设置车辆之间的碰撞检测规则
void SetImportedRoute(const ActorPtr &actor, const Route route, const bool empty_buffer)
设置导入的路线。
void SetPercentageRunningSign(const ActorPtr &actor, const float perc)
设置无视交通标志的概率。
bool SynchronousTick()
执行同步滴答。
uint16_t Port() const
获取当前端口号。
void ShutDown()
关闭交通管理器服务或客户端。
void SetLaneOffset(const ActorPtr &actor, const float offset)
设置车辆相对于车道中心线的偏移量。
void RemoveImportedRoute(const ActorId &actor_id, const bool remove_path)
移除路线。
void SetKeepRightPercentage(const ActorPtr &actor, const float percentage)
设置车辆保持在右侧车道的百分比。
void UnregisterVehicles(const std::vector< ActorPtr > &actor_list)
从交通管理器注销车辆。
void SetGlobalLaneOffset(float const offset)
设置全局车道偏移量,相对于中心线的位移。
void SetGlobalPercentageSpeedDifference(float const percentage)
设置全局速度百分比差异。
void SetHybridPhysicsMode(const bool mode_switch)
设置混合物理模式。
void UpdateImportedRoute(const ActorId &actor_id, const Route route)
更新已设置的路线。
TrafficManager(TrafficManager &&)=default
移动构造函数,用于移动另一个TrafficManager对象
static std::mutex _mutex
用于保护_tm_map的静态互斥锁。
void SetMaxBoundaries(const float lower, const float upper)
设置重生车辆的边界。
void SetSynchronousMode(bool mode)
将交通管理器切换为同步执行模式。
void SetPercentageIgnoreWalkers(const ActorPtr &actor, const float perc)
设置忽略行人的碰撞概率。
void RemoveUploadPath(const ActorId &actor_id, const bool remove_path)
移除路径。
TrafficManager & operator=(TrafficManager &&)=default
移动赋值运算符,用于将另一个TrafficManager对象移动赋值给当前对象
void SetPercentageRunningLight(const ActorPtr &actor, const float perc)
设置无视交通信号灯的概率。
void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound)
设置重生车辆的范围边界。
TrafficManagerBase * GetTM(uint16_t port) const
根据端口号获取交通管理器实例。
bool IsValidPort() const
检查端口号是否有效。
void SetCustomPath(const ActorPtr &actor, const Path path, const bool empty_buffer)
设置自定义路径。
void SetUpdateVehicleLights(const ActorPtr &actor, const bool do_update)
设置车辆灯光的自动管理
void SetRandomDeviceSeed(const uint64_t seed)
设置随机数生成器的种子。
void SetGlobalDistanceToLeadingVehicle(const float distance)
设置全局的前车距离。
void SetPercentageIgnoreVehicles(const ActorPtr &actor, const float perc)
设置忽略车辆的碰撞概率。
void SetDistanceToLeadingVehicle(const ActorPtr &actor, const float distance)
设置车辆与前车应保持的距离。
void SetAutoLaneChange(const ActorPtr &actor, const bool enable)
启用/禁用车辆的自动换道功能。
ActionBuffer GetActionBuffer(const ActorId &actor_id)
获取指定参与者的动作缓冲区。
TrafficManager(const TrafficManager &other)
拷贝构造函数,用于复制另一个TrafficManager对象。
TrafficManager()
默认构造函数,不执行任何操作。
void SetHybridPhysicsRadius(const float radius)
设置混合物理半径。
static void Tick()
执行TrafficManager的Tick操作,通常用于周期性地更新状态
void UpdateUploadPath(const ActorId &actor_id, const Path path)
更新已设置的路径。
static void Release()
释放TrafficManager对象,用于单例模式的清理工作
void SetRespawnDormantVehicles(const bool mode_switch)
设置是否自动重生车辆。
void SetForceLaneChange(const ActorPtr &actor, const bool direction)
强制车辆换道。
void SetPercentageSpeedDifference(const ActorPtr &actor, const float percentage)
设置车辆相对于限速的速度百分比差异。
void CreateTrafficManagerServer(carla::client::detail::EpisodeProxy episode_proxy, uint16_t port)
创建交通管理器服务器。
void RegisterVehicles(const std::vector< ActorPtr > &actor_list)
向交通管理器注册车辆。
bool CreateTrafficManagerClient(carla::client::detail::EpisodeProxy episode_proxy, uint16_t port)
创建交通管理器客户端。
TrafficManager & operator=(const TrafficManager &)=default
拷贝赋值运算符,用于将另一个TrafficManager对象赋值给当前对象
static void Reset()
重置TrafficManager对象,用于单例模式的重置操作
uint16_t _port
当前交通管理器实例使用的端口号。
void SetDesiredSpeed(const ActorPtr &actor, const float value)
设置车辆的期望速度。
void SetOSMMode(const bool mode_switch)
设置Open Street Map模式。
void SetSynchronousModeTimeOutInMiliSecond(double time)
设置同步执行模式的滴答超时时间(以毫秒为单位)。
void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage)
设置车辆随机进行右侧车道变换的百分比。
static const unsigned short TM_DEFAULT_PORT
Definition Constants.h:22
carla::SharedPtr< cc::Actor > ActorPtr
使用别名简化代码中的命名
std::vector< uint8_t > Route
路线类型,由一系列地理位置组成
std::vector< cg::Location > Path
参与者的唯一标识符类型
std::vector< Action > ActionBuffer
动作缓冲区类型别名。
std::pair< RoadOption, WaypointPtr > Action
动作类型别名。
carla::ActorId ActorId
参与者的智能指针类型
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
Definition Memory.h:19