37namespace traffic_manager {
39namespace chr = std::chrono;
41using namespace std::chrono_literals;
43using TimePoint = chr::time_point<chr::system_clock, chr::nanoseconds>;
45using TLGroup = std::vector<carla::SharedPtr<carla::client::TrafficLight>>;
173 uint64_t
seed {
static_cast<uint64_t
>(time(NULL))};
205 float perc_decrease_from_limit,
207 uint16_t &RPCportTM);
此类功能是维护车辆前方的路径点以供跟随。 该类还负责管理车道变更决策并适当地修改路径轨迹。
交通管理器本地类,通过消息传递机制整合交通管理器的各个阶段。 @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>管理线程的生命周期,确保线程在不再需要时能够被正确销毁
MotionPlanStage motion_plan_stage
uint64_t seed
随机化种子 使用当前时间作为随机化种子,确保每次程序运行时都能产生不同的随机序列
void SetupLocalMap()
设置内存中的地图 此方法用于初始化或设置TrafficManagerLocal所使用的内存地图
void Start()
启动交通管理器 此方法用于启动TrafficManagerLocal,开始其管理交通的功能
TrafficLightStage traffic_light_stage
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类型(可能是自定义的映射类型)来存储每个车辆的路径点缓冲区
std::condition_variable step_end_trigger
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可能是一个用于生成局部路径规划算法的模块或对象
CollisionStage collision_stage
void Reset()
重置交通管理器 此方法将TrafficManagerLocal重置为其初始状态,清除所有已注册的车辆和设置
VehicleLightStage vehicle_light_stage
void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage)
设置车辆随机进行右车道变换的百分比概率。
carla::client::detail::EpisodeProxy & GetEpisodeProxy()
获取CARLA仿真场景的信息代理。
void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound)
设置休眠车辆重生时的边界。
cc::World world
CARLA 世界对象。
std::vector< ActorId > GetRegisteredVehiclesIDs()
获取所有已注册车辆的ID列表。
void SetKeepRightPercentage(const ActorPtr &actor, const float percentage)
设置车辆保持在右侧车道的百分比概率。
bool SynchronousTick()
提供同步Tick。
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)
设置车辆的精确期望速度
std::atomic< bool > step_end
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类负责根据车辆当前的状态和周围环境来开启或关闭车辆的灯光
static const double HYBRID_MODE_DT
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的智能指针管理交通灯对象的集合