59namespace traffic_manager {
69using Path = std::vector<cg::Location>;
74using Route = std::vector<uint8_t>;
76using namespace constants::Networking;
101 uint16_t counter = 0;
106 server = new ::rpc::server(RPCPort);
108 }
catch(std::exception) {
109 using namespace std::chrono_literals;
112 std::this_thread::sleep_for(500ms);
116 if(server !=
nullptr) {
123 if(server ==
nullptr) {
126 "trying to create rpc server for traffic manager; "
127 "but the system failed to create because of bind error."));
130 server->bind(
"register_vehicle", [=](std :: vector <carla::rpc::Actor> _actor_list) {
131 std::vector<ActorPtr> actor_list;
132 for (
auto &&actor : _actor_list) {
141 server->bind(
"unregister_vehicle", [=](std :: vector <carla::rpc::Actor> _actor_list) {
142 std::vector<ActorPtr> actor_list;
143 for (
auto &&actor : _actor_list) {
152 server->bind(
"set_percentage_speed_difference", [=](
carla::rpc::Actor actor,
const float percentage) {
159 server->bind(
"set_lane_offset", [=](
carla::rpc::Actor actor,
const float offset) {
165 server->bind(
"set_desired_speed", [=](
carla::rpc::Actor actor,
const float value) {
171 server->bind(
"update_vehicle_lights", [=](
carla::rpc::Actor actor,
const bool do_update) {
179 server->bind(
"set_global_percentage_speed_difference", [=](
const float percentage) {
187 server->bind(
"set_global_lane_offset", [=](
const float offset) {
208 server->bind(
"set_force_lane_change", [=](
carla::rpc::Actor actor,
const bool direction) {
216 server->bind(
"set_auto_lane_change", [=](
carla::rpc::Actor actor,
const bool enable) {
224 server->bind(
"set_distance_to_leading_vehicle", [=](
carla::rpc::Actor actor,
const float distance) {
231 server->bind(
"set_global_distance_to_leading_vehicle", [=](
const float distance) {
239 server->bind(
"set_percentage_running_light", [=](
carla::rpc::Actor actor,
const float percentage) {
246 server->bind(
"set_percentage_running_sign", [=](
carla::rpc::Actor actor,
const float percentage) {
252 server->bind(
"set_percentage_ignore_walkers", [=](
carla::rpc::Actor actor,
const float percentage) {
259 server->bind(
"set_percentage_ignore_vehicles", [=](
carla::rpc::Actor actor,
const float percentage) {
266 server->bind(
"set_percentage_keep_right_rule", [=](
carla::rpc::Actor actor,
const float percentage) {
273 server->bind(
"set_percentage_random_left_lanechange", [=](
carla::rpc::Actor actor,
const float percentage) {
280 server->bind(
"set_percentage_random_right_lanechange", [=](
carla::rpc::Actor actor,
const float percentage) {
286 server->bind(
"set_hybrid_physics_mode", [=](
const bool mode_switch) {
292 server->bind(
"set_hybrid_physics_radius", [=](
const float radius) {
298 server->bind(
"set_osm_mode", [=](
const bool mode_switch) {
314 server->bind(
"remove_custom_path", [=](
const ActorId actor_id,
const bool remove_path) {
322 server->bind(
"update_custom_path", [=](
const ActorId actor_id,
const Path path) {
331 server->bind(
"set_imported_route", [=](
carla::rpc::Actor actor,
const Route route,
const bool empty_buffer) {
339 server->bind(
"remove_imported_route", [=](
const ActorId actor_id,
const bool remove_path) {
347 server->bind(
"update_imported_route", [=](
const ActorId actor_id,
const Route route) {
354 server->bind(
"set_respawn_dormant_vehicles", [=](
const bool mode_switch) {
362 server->bind(
"set_boundaries_respawn_dormant_vehicles", [=](
const float lower_bound,
const float upper_bound) {
368 server->bind(
"get_next_action", [=](
const ActorId actor_id) {
374 server->bind(
"get_all_actions", [=](
const ActorId actor_id) {
378 server->bind(
"shut_down", [=]() {
384 server->bind(
"set_synchronous_mode", [=](
const bool mode) {
390 server->bind(
"set_synchronous_mode_timeout_in_milisecond", [=](
const double time) {
396 server->bind(
"set_random_device_seed", [=](
const uint64_t seed) {
402 server->bind(
"synchronous_tick", [=]() ->
bool {
407 server->bind(
"health_check_remote_TM", [=](){});
438 ::rpc::server *server =
nullptr;
SharedPtr< client::Actor > Get(EpisodeProxy episode) const
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 carla::client::detail::EpisodeProxy & GetEpisodeProxy()=0
获取CARLA场景信息代理。
virtual void Release()=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 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,则表示百分比增加。
交通管理服务器类,负责处理远程交通管理器的请求并应用更改到本地实例。
uint16_t _RPCPort
交通管理器服务器的RPC端口号
uint16_t port() const
获取交通管理器服务器的RPC端口号
~TrafficManagerServer()
析构函数,释放交通管理器服务器资源
TrafficManagerServer & operator=(TrafficManagerServer &&)=default
默认拷贝赋值运算符
TrafficManagerServer & operator=(const TrafficManagerServer &)=default
默认移动构造函数
::rpc::server * server
服务器实例指针
TrafficManagerServer(uint16_t &RPCPort, carla::traffic_manager::TrafficManagerBase *tm)
默认移动赋值运算符
TrafficManagerServer(const TrafficManagerServer &)=default
TrafficManagerServer(TrafficManagerServer &&)=default
默认拷贝构造函数
static const uint64_t MIN_TRY_COUNT
carla::SharedPtr< cc::Actor > ActorPtr
使用别名简化代码中的命名
std::vector< uint8_t > Route
路线类型,由一系列地理位置组成
std::vector< cg::Location > Path
参与者的唯一标识符类型
carla::ActorId ActorId
参与者的智能指针类型
void throw_exception(const std::exception &e)
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。