17namespace traffic_manager {
21 const std::pair<std::string, uint16_t> &_serverTM,
23 :
client(_serverTM.first, _serverTM.second),
24 episodeProxyTM(episodeProxy) {
41 std::thread _thread = std::thread([
this] () {
44 std::chrono::milliseconds wait_time(TM_TIMEOUT);
49 std::this_thread::sleep_for(wait_time);
52 client.HealthCheckRemoteTM();
60 std::string rhost(
"");
64 client.getServerDetails(rhost, rport);
67 std::string strtmserver(rhost +
":" + std::to_string(rport));
72 "Trying to connect rpc server of traffic manager; "
73 "but the system failed to connect at " + strtmserver);
94 std::unique_lock<std::mutex> lock(
_mutex);
95 std::chrono::milliseconds wait_time(TM_TIMEOUT + 1000);
96 _cv.wait_for(lock, wait_time);
119 std::vector<carla::rpc::Actor> actor_list;
120 for (
auto &&actor : _actor_list) {
121 actor_list.emplace_back(actor->Serialize());
124 client.RegisterVehicle(actor_list);
129 std::vector<carla::rpc::Actor> actor_list;
130 for (
auto &&actor : _actor_list) {
131 actor_list.emplace_back(actor->Serialize());
134 client.UnregisterVehicle(actor_list);
142 client.SetPercentageSpeedDifference(actor, percentage);
150 client.SetDesiredSpeed(actor, value);
155 client.SetGlobalPercentageSpeedDifference(percentage);
163 client.SetLaneOffset(actor, offset);
168 client.SetGlobalLaneOffset(offset);
176 client.SetUpdateVehicleLights(actor, do_update);
185 client.SetCollisionDetection(reference_actor, other_actor, detect_collision);
193 client.SetForceLaneChange(actor, direction);
201 client.SetAutoLaneChange(actor, enable);
209 client.SetDistanceToLeadingVehicle(actor, distance);
214 client.SetGlobalDistanceToLeadingVehicle(distance);
223 client.SetPercentageIgnoreWalkers(actor, percentage);
231 client.SetPercentageIgnoreVehicles(actor, percentage);
239 client.SetPercentageRunningLight(actor, percentage);
247 client.SetPercentageRunningSign(actor, percentage);
255 client.SetKeepRightPercentage(actor, percentage);
263 client.SetRandomLeftLaneChangePercentage(actor, percentage);
271 client.SetRandomRightLaneChangePercentage(actor, percentage);
276 client.SetHybridPhysicsMode(mode_switch);
281 client.SetHybridPhysicsRadius(radius);
286 client.SetOSMMode(mode_switch);
294 client.SetCustomPath(actor, path, empty_buffer);
299 client.RemoveUploadPath(actor_id, remove_path);
304 client.UpdateUploadPath(actor_id, path);
312 client.SetImportedRoute(actor, route, empty_buffer);
317 client.RemoveImportedRoute(actor_id, remove_path);
322 client.UpdateImportedRoute(actor_id, route);
327 client.SetRespawnDormantVehicles(mode_switch);
332 client.SetBoundariesRespawnDormantVehicles(lower_bound, upper_bound);
337 client.SetMaxBoundaries(lower, upper);
347 client.SetSynchronousMode(mode);
352 client.SetSynchronousModeTimeOutInMiliSecond(time);
357 return client.GetNextAction(actor_id);
362 return client.GetActionBuffer(actor_id);
372 client.HealthCheckRemoteTM();
382 client.SetRandomDeviceSeed(seed);
SharedPtrType Lock() const
与 TryLock 相同,但永远不会返回 nullptr。
void SetPercentageIgnoreVehicles(const ActorPtr &actor, const float perc)
设置车辆忽略其他车辆碰撞的百分比概率。
carla::client::detail::EpisodeProxy & GetEpisodeProxy()
获取CARLA回合信息。
void SetUpdateVehicleLights(const ActorPtr &actor, const bool do_update)
设置车辆灯光的自动管理功能。
void SetGlobalPercentageSpeedDifference(float const percentage)
设置全局速度相对于限速的百分比减少量。
void RemoveUploadPath(const ActorId &actor_id, const bool remove_path)
移除路径。
carla::client::detail::EpisodeProxy episodeProxyTM
CARLA客户端连接对象。
void SetCollisionDetection(const ActorPtr &reference_actor, const ActorPtr &other_actor, const bool detect_collision)
设置车辆之间的碰撞检测规则。
void SetKeepRightPercentage(const ActorPtr &actor, const float percentage)
设置车辆保持在右侧车道的百分比概率。
bool SynchronousTick()
提供同步Tick。
void UpdateUploadPath(const ActorId &actor_id, const Path path)
更新已设置的路径。
void SetGlobalLaneOffset(float const offset)
设置全局车道偏移量,相对于车道中心线。
void UnregisterVehicles(const std::vector< ActorPtr > &actor_list)
从交通管理器注销车辆。
std::condition_variable _cv
条件变量,用于线程同步。
void SetHybridPhysicsMode(const bool mode_switch)
设置混合物理模式。
void RemoveImportedRoute(const ActorId &actor_id, const bool remove_path)
移除路线。
void RegisterVehicles(const std::vector< ActorPtr > &actor_list)
注册车辆到交通管理器。
void SetCustomPath(const ActorPtr &actor, const Path path, const bool empty_buffer)
设置自定义路径。
void SetDesiredSpeed(const ActorPtr &actor, const float value)
设置车辆的精确期望速度。
void SetLaneOffset(const ActorPtr &actor, const float offset)
设置车辆相对于车道中心线的偏移量。
void SetOSMMode(const bool mode_switch)
设置Open Street Map(OSM)模式。
void SetRandomDeviceSeed(const uint64_t seed)
设置随机化种子。
void UpdateImportedRoute(const ActorId &actor_id, const Route route)
更新已设置的路线。
void SetGlobalDistanceToLeadingVehicle(const float distance)
设置全局前车距离。
void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage)
设置车辆随机进行右车道变换的百分比概率。
virtual ~TrafficManagerRemote()
析构函数。
std::mutex _mutex
互斥锁,用于保护共享资源。
void SetRespawnDormantVehicles(const bool mode_switch)
设置自动重生休眠车辆的模式。
void SetAutoLaneChange(const ActorPtr &actor, const bool enable)
启用/禁用车辆的自动换道功能。
void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound)
设置休眠车辆重生的边界。
void SetImportedRoute(const ActorPtr &actor, const Route route, const bool empty_buffer)
设置自定义路线。
void SetPercentageIgnoreWalkers(const ActorPtr &actor, const float perc)
设置车辆忽略行人碰撞的百分比概率。
Action GetNextAction(const ActorId &actor_id)
获取车辆的下一个动作。
void SetPercentageRunningLight(const ActorPtr &actor, const float perc)
设置车辆无视交通信号灯的概率百分比。
void SetSynchronousModeTimeOutInMiliSecond(double time)
设置同步执行模式的Tick超时时间(毫秒)。
ActionBuffer GetActionBuffer(const ActorId &actor_id)
获取车辆的动作缓冲区。
bool _keep_alive
保持活动状态标志。
void SetRandomLeftLaneChangePercentage(const ActorPtr &actor, const float percentage)
设置车辆随机进行左车道变换的百分比概率。
void SetPercentageSpeedDifference(const ActorPtr &actor, const float percentage)
设置车辆相对于限速的速度差异百分比。
TrafficManagerRemote(const std::pair< std::string, uint16_t > &_serverTM, carla::client::detail::EpisodeProxy &episodeProxy)
构造函数,存储远程服务器的位置信息。
void SetDistanceToLeadingVehicle(const ActorPtr &actor, const float distance)
设置车辆与前车应保持的距离。
void HealthCheckRemoteTM()
检查服务器是否存活。
void SetPercentageRunningSign(const ActorPtr &actor, const float perc)
设置车辆无视交通标志的概率百分比。
virtual void ShutDown()
关闭交通管理器。
void SetSynchronousMode(bool mode)
切换交通管理器为同步执行模式。
void SetForceLaneChange(const ActorPtr &actor, const bool direction)
强制车辆进行换道。
void SetHybridPhysicsRadius(const float radius)
设置混合物理模式的半径。
void SetMaxBoundaries(const float lower, const float upper)
设置最大的重生边界。
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
参与者的智能指针类型