Implementation:CARLA simulator Carla TrafficManagerClient
| 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();