Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:CARLA simulator Carla TrafficManagerClient

From Leeroopedia
Revision as of 12:15, 16 February 2026 by Admin (talk | contribs) (Auto-imported from implementations/CARLA_simulator_Carla_TrafficManagerClient.md)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Knowledge Sources
Domains Traffic_Management, Autonomous_Driving
Last Updated 2026-02-15 05:00 GMT

Overview

The TrafficManagerClient class provides an RPC client interface for communicating with a remote TrafficManagerServer, enabling distributed traffic management across separate processes or machines.

Description

TrafficManagerClient wraps a ::rpc::client instance (from the rpclib library) and exposes methods that mirror the full TrafficManagerBase API. Each method serializes its arguments and issues a remote procedure call to the corresponding server-side handler. Key characteristics include:

  • Connection Management: The constructor takes a host string and port number, creates an ::rpc::client instance, and configures a timeout of TM_TIMEOUT (defined in constants::Networking). The destructor properly cleans up the client pointer.
  • Server Details: Provides setServerDetails and getServerDetails methods for updating or querying the remote server host and port.
  • Vehicle Registration: RegisterVehicle and UnregisterVehicle serialize carla::rpc::Actor vectors and forward them to the remote server.
  • Parameter Delegation: All parameter-setting methods (SetPercentageSpeedDifference, SetLaneOffset, SetDesiredSpeed, SetCollisionDetection, SetForceLaneChange, SetAutoLaneChange, SetDistanceToLeadingVehicle, etc.) serialize the actor and parameter values, then call the corresponding named RPC endpoint.
  • Traffic Rule Configuration: Methods for SetPercentageIgnoreWalkers, SetPercentageIgnoreVehicles, SetPercentageRunningLight, and SetPercentageRunningSign configure stochastic traffic rule compliance.
  • Synchronous Mode: SetSynchronousMode, SetSynchronousModeTimeOutInMiliSecond, and SynchronousTick methods enable synchronous execution control.
  • Health Checking: HealthCheckRemoteTM calls a no-op server endpoint to verify the remote TM is still alive.
  • Custom Paths/Routes: SetCustomPath, RemoveUploadPath, UpdateUploadPath, SetImportedRoute, RemoveImportedRoute, and UpdateImportedRoute manage custom vehicle trajectories.
  • Action Queries: GetNextAction and GetActionBuffer query the remote TM for planned vehicle actions.
  • Shutdown: ShutDown triggers a graceful release of the remote traffic manager.

All methods use DEBUG_ASSERT(_client != nullptr) to guard against null pointer access.

Usage

TrafficManagerClient is instantiated by TrafficManagerRemote which delegates all API calls through this client to a remote TrafficManagerServer. It is not intended for direct use by end users.

Code Reference

Source Location

  • Repository: CARLA
  • File: LibCarla/source/carla/trafficmanager/TrafficManagerClient.h

Signature

class TrafficManagerClient {
public:
  TrafficManagerClient(const TrafficManagerClient &) = default;
  TrafficManagerClient(TrafficManagerClient &&) = default;
  TrafficManagerClient &operator=(const TrafficManagerClient &) = default;
  TrafficManagerClient &operator=(TrafficManagerClient &&) = default;

  TrafficManagerClient(const std::string &_host, const uint16_t &_port);
  ~TrafficManagerClient();

  void setServerDetails(const std::string &_host, const uint16_t &_port);
  void getServerDetails(std::string &_host, uint16_t &_port);

  void RegisterVehicle(const std::vector<carla::rpc::Actor> &actor_list);
  void UnregisterVehicle(const std::vector<carla::rpc::Actor> &actor_list);

  void SetPercentageSpeedDifference(const carla::rpc::Actor &_actor, const float percentage);
  void SetLaneOffset(const carla::rpc::Actor &_actor, const float offset);
  void SetDesiredSpeed(const carla::rpc::Actor &_actor, const float value);
  void SetGlobalPercentageSpeedDifference(const float percentage);
  void SetGlobalLaneOffset(const float offset);
  void SetUpdateVehicleLights(const carla::rpc::Actor &_actor, const bool do_update);
  void SetCollisionDetection(const carla::rpc::Actor &reference_actor, const carla::rpc::Actor &other_actor, const bool detect_collision);
  void SetForceLaneChange(const carla::rpc::Actor &actor, const bool direction);
  void SetAutoLaneChange(const carla::rpc::Actor &actor, const bool enable);
  void SetDistanceToLeadingVehicle(const carla::rpc::Actor &actor, const float distance);
  void SetPercentageIgnoreWalkers(const carla::rpc::Actor &actor, const float percentage);
  void SetPercentageIgnoreVehicles(const carla::rpc::Actor &actor, const float percentage);
  void SetPercentageRunningLight(const carla::rpc::Actor &actor, const float percentage);
  void SetPercentageRunningSign(const carla::rpc::Actor &actor, const float percentage);
  void SetSynchronousMode(const bool mode);
  void SetSynchronousModeTimeOutInMiliSecond(const double time);
  bool SynchronousTick();
  void HealthCheckRemoteTM();
  void SetGlobalDistanceToLeadingVehicle(const float distance);
  void SetHybridPhysicsMode(const bool mode_switch);
  void SetHybridPhysicsRadius(const float radius);
  void SetRandomDeviceSeed(const uint64_t seed);
  void SetOSMMode(const bool mode_switch);
  void SetCustomPath(const carla::rpc::Actor &actor, const Path path, const bool empty_buffer);
  void SetImportedRoute(const carla::rpc::Actor &actor, const Route route, const bool empty_buffer);
  void SetRespawnDormantVehicles(const bool mode_switch);
  void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound);
  void ShutDown();
  Action GetNextAction(const ActorId &actor_id);
  ActionBuffer GetActionBuffer(const ActorId &actor_id);
  // ... additional methods

private:
  ::rpc::client *_client = nullptr;
  std::string tmhost;
  uint16_t tmport;
};

Import

#include "carla/trafficmanager/TrafficManagerClient.h"

I/O Contract

Inputs

Name Type Required Description
_host const std::string& Yes Hostname or IP address of the remote TrafficManagerServer
_port const uint16_t& Yes RPC port of the remote TrafficManagerServer
actor_list std::vector<carla::rpc::Actor> Varies Serialized actor data for vehicle registration/unregistration
_actor carla::rpc::Actor Varies Serialized actor for per-vehicle parameter configuration
percentage / value / distance float Varies Numeric parameter values
mode / enable bool Varies Boolean mode toggles

Outputs

Name Type Description
SynchronousTick() bool Return value from the remote synchronous tick call
GetNextAction() Action Planned next action from remote TM (currently returns default)
GetActionBuffer() ActionBuffer Planned action buffer from remote TM (currently returns default)

Usage Examples

// TrafficManagerClient is used internally by TrafficManagerRemote:
TrafficManagerClient client("localhost", 8000);

// Register vehicles with remote TM:
std::vector<carla::rpc::Actor> actor_list;
for (auto &&actor : vehicles) {
  actor_list.emplace_back(actor->Serialize());
}
client.RegisterVehicle(actor_list);

// Set speed on remote TM:
carla::rpc::Actor serialized_actor(vehicle->Serialize());
client.SetPercentageSpeedDifference(serialized_actor, -10.0f);

// Health check:
client.HealthCheckRemoteTM();

// Synchronous tick:
bool result = client.SynchronousTick();

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment