10#include "carla/Version.h"
27#include <rpc/rpc_error.h>
37 return response.
Get();
51 Pimpl(
const std::string &host, uint16_t port,
size_t worker_threads)
52 : endpoint(host +
":" +
std::to_string(port)),
57 worker_threads > 0u ? worker_threads : std::thread::hardware_concurrency());
60 template <
typename ... Args>
61 auto RawCall(
const std::string &function, Args && ... args) {
64 }
catch (const ::rpc::timeout &) {
69 template <
typename T,
typename ... Args>
70 auto CallAndWait(
const std::string &function, Args && ... args) {
71 auto object =
RawCall(function, std::forward<Args>(args) ...);
73 auto response =
object.template as<R>();
74 if (response.HasError()) {
80 template <
typename ... Args>
81 void AsyncCall(
const std::string &function, Args && ... args) {
104 const std::string &host,
106 const size_t worker_threads)
107 : _pimpl(
std::make_unique<
Pimpl>(host, port, worker_threads)) {}
110 return _pimpl->CallAndWait<
bool>(
"is_traffic_manager_running", port);
114 return _pimpl->CallAndWait<std::pair<std::string, uint16_t>>(
"get_traffic_manager_running", port);
118 return _pimpl->CallAndWait<
bool>(
"add_traffic_manager_running", trafficManagerInfo);
122 _pimpl->AsyncCall(
"destroy_traffic_manager", port);
132 return _pimpl->GetTimeout();
140 return ::carla::version();
144 return _pimpl->CallAndWait<std::string>(
"version");
149 _pimpl->CallAndWait<
void>(
"load_new_episode", std::move(map_name), reset_settings, map_layer);
154 _pimpl->CallAndWait<
void>(
"load_map_layer", map_layer);
159 _pimpl->CallAndWait<
void>(
"unload_map_layer", map_layer);
164 _pimpl->CallAndWait<
void>(
"copy_opendrive_to_file", std::move(opendrive), params);
168 const std::vector<std::string> &objects_name,
171 _pimpl->CallAndWait<
void>(
"apply_color_texture_to_objects", objects_name, parameter, Texture);
175 const std::vector<std::string> &objects_name,
178 _pimpl->CallAndWait<
void>(
"apply_float_color_texture_to_objects", objects_name, parameter, Texture);
182 return _pimpl->CallAndWait<std::vector<std::string>>(
"get_names_of_all_objects");
194 return _pimpl->CallAndWait<std::string>(
"get_map_data");
198 return _pimpl->CallAndWait<std::vector<uint8_t>>(
"get_navigation_mesh");
207 auto requiredFiles =
_pimpl->CallAndWait<std::vector<std::string>>(
"get_required_files", folder);
212 for (
auto requiredFile : requiredFiles) {
215 log_info(
"Could not find the required file in cache, downloading... ", requiredFile);
217 log_info(
"Found the required file in cache! ", requiredFile);
221 return requiredFiles;
226 auto content =
_pimpl->CallAndWait<std::vector<uint8_t>>(
"request_file", name);
235 if (file.empty() && request_otherwise) {
243 return _pimpl->CallAndWait<std::vector<std::string>>(
"get_available_maps");
247 return _pimpl->CallAndWait<std::vector<rpc::ActorDefinition>>(
"get_actor_definitions");
259 return _pimpl->CallAndWait<uint64_t>(
"set_episode_settings", settings);
267 _pimpl->AsyncCall(
"set_weather_parameters", weather);
271 return _pimpl->CallAndWait<
float>(
"get_imui_gravity");
275 _pimpl->AsyncCall(
"set_imui_gravity", NewIMUISensorGravity);
279 const std::vector<ActorId> &ids) {
280 using return_t = std::vector<rpc::Actor>;
281 return _pimpl->CallAndWait<return_t>(
"get_actors_by_id", ids);
297 return _pimpl->AsyncCall(
"apply_physics_control", vehicle, physics_control);
303 return _pimpl->AsyncCall(
"set_vehicle_light_state", vehicle, light_state);
309 return _pimpl->AsyncCall(
"open_vehicle_door", vehicle, door_idx);
315 return _pimpl->AsyncCall(
"close_vehicle_door", vehicle, door_idx);
321 float angle_in_deg) {
322 return _pimpl->AsyncCall(
"set_wheel_steer_direction", vehicle, vehicle_wheel, angle_in_deg);
328 return _pimpl->CallAndWait<
float>(
"get_wheel_steer_angle", vehicle, wheel_location);
334 return _pimpl->CallAndWait<
rpc::Actor>(
"spawn_actor", description, transform);
342 const std::string& socket_name) {
349 constexpr float OneEps = 1.0f - std::numeric_limits<float>::epsilon();
351 std::cout <<
"WARNING: Transformations with translation only in the 'z' axis are ill-formed when \
352 using SpringArm or SpringArmGhost attachment. Please, be careful with that." << std::endl;
366 return _pimpl->CallAndWait<
bool>(
"destroy_actor", actor);
367 }
catch (
const std::exception &e) {
368 log_error(
"failed to destroy actor", actor,
':', e.what());
374 _pimpl->AsyncCall(
"set_actor_location", actor, location);
378 _pimpl->AsyncCall(
"set_actor_transform", actor, transform);
382 _pimpl->AsyncCall(
"set_actor_target_velocity", actor, vector);
386 _pimpl->AsyncCall(
"set_actor_target_angular_velocity", actor, vector);
390 _pimpl->AsyncCall(
"enable_actor_constant_velocity", actor, vector);
394 _pimpl->AsyncCall(
"disable_actor_constant_velocity", actor);
398 _pimpl->AsyncCall(
"add_actor_impulse", actor, impulse);
402 _pimpl->AsyncCall(
"add_actor_impulse_at_location", actor, impulse, location);
406 _pimpl->AsyncCall(
"add_actor_force", actor, force);
410 _pimpl->AsyncCall(
"add_actor_force_at_location", actor, force, location);
414 _pimpl->AsyncCall(
"add_actor_angular_impulse", actor, vector);
418 _pimpl->AsyncCall(
"add_actor_torque", actor, vector);
422 return _pimpl->CallAndWait<
geom::Transform>(
"get_actor_component_world_transform", actor, componentName);
426 return _pimpl->CallAndWait<
geom::Transform>(
"get_actor_component_relative_transform", actor, componentName);
430 using return_t = std::vector<geom::Transform>;
431 return _pimpl->CallAndWait<return_t>(
"get_actor_bone_world_transforms", actor);
435 using return_t = std::vector<geom::Transform>;
436 return _pimpl->CallAndWait<return_t>(
"get_actor_bone_relative_transforms", actor);
440 using return_t = std::vector<std::string>;
441 return _pimpl->CallAndWait<return_t>(
"get_actor_component_names", actor);
445 using return_t = std::vector<std::string>;
446 return _pimpl->CallAndWait<return_t>(
"get_actor_bone_names", actor);
450 using return_t = std::vector<geom::Transform>;
451 return _pimpl->CallAndWait<return_t>(
"get_actor_socket_world_transforms", actor);
455 using return_t = std::vector<geom::Transform>;
456 return _pimpl->CallAndWait<return_t>(
"get_actor_socket_relative_transforms", actor);
460 using return_t = std::vector<std::string>;
461 return _pimpl->CallAndWait<return_t>(
"get_actor_socket_names", actor);
465 _pimpl->CallAndWait<
void>(
"set_actor_simulate_physics", actor, enabled);
469 _pimpl->CallAndWait<
void>(
"set_actor_collisions", actor, enabled);
473 _pimpl->AsyncCall(
"set_actor_dead", actor);
477 _pimpl->AsyncCall(
"set_actor_enable_gravity", actor, enabled);
481 _pimpl->AsyncCall(
"set_actor_autopilot", vehicle, enabled);
490 _pimpl->AsyncCall(
"show_vehicle_debug_telemetry", vehicle, enabled);
494 _pimpl->AsyncCall(
"apply_control_to_vehicle", vehicle, control);
498 _pimpl->AsyncCall(
"apply_ackermann_control_to_vehicle", vehicle, control);
507 _pimpl->AsyncCall(
"apply_ackermann_controller_settings", vehicle, settings);
511 _pimpl->AsyncCall(
"enable_carsim", vehicle, simfile_path);
515 _pimpl->AsyncCall(
"use_carsim_road", vehicle, enabled);
520 uint64_t MaxSubsteps,
521 float MaxSubstepDeltaTime,
522 std::string VehicleJSON,
523 std::string PowertrainJSON,
524 std::string TireJSON,
525 std::string BaseJSONPath) {
526 _pimpl->AsyncCall(
"enable_chrono_physics",
537 _pimpl->AsyncCall(
"restore_physx_physics", vehicle);
541 _pimpl->AsyncCall(
"apply_control_to_walker", walker, control);
550 _pimpl->AsyncCall(
"set_bones_transform", walker, bones);
554 _pimpl->AsyncCall(
"blend_pose", walker, blend);
558 _pimpl->AsyncCall(
"get_pose_from_animation", walker);
564 _pimpl->AsyncCall(
"set_traffic_light_state", traffic_light, traffic_light_state);
568 _pimpl->AsyncCall(
"set_traffic_light_green_time", traffic_light, green_time);
572 _pimpl->AsyncCall(
"set_traffic_light_yellow_time", traffic_light, yellow_time);
576 _pimpl->AsyncCall(
"set_traffic_light_red_time", traffic_light, red_time);
580 _pimpl->AsyncCall(
"freeze_traffic_light", traffic_light, freeze);
584 _pimpl->AsyncCall(
"reset_traffic_light_group", traffic_light);
588 _pimpl->CallAndWait<
void>(
"reset_all_traffic_lights");
592 _pimpl->AsyncCall(
"freeze_all_traffic_lights", frozen);
596 using return_t = std::vector<geom::BoundingBox>;
597 return _pimpl->CallAndWait<return_t>(
"get_light_boxes", traffic_light);
601 return _pimpl->CallAndWait<std::vector<std::pair<carla::ActorId, uint32_t>>>(
"get_vehicle_light_states");
605 using return_t = std::vector<ActorId>;
606 return _pimpl->CallAndWait<return_t>(
"get_group_traffic_lights", traffic_light);
610 return _pimpl->CallAndWait<std::string>(
"start_recorder", name, additional_data);
614 return _pimpl->AsyncCall(
"stop_recorder");
618 return _pimpl->CallAndWait<std::string>(
"show_recorder_file_info", name, show_all);
622 return _pimpl->CallAndWait<std::string>(
"show_recorder_collisions", name, type1, type2);
626 return _pimpl->CallAndWait<std::string>(
"show_recorder_actors_blocked", name, min_time, min_distance);
630 uint32_t follow_id,
bool replay_sensors) {
631 return _pimpl->CallAndWait<std::string>(
"replay_file", name, start, duration,
632 follow_id, replay_sensors);
636 _pimpl->AsyncCall(
"stop_replayer", keep_actors);
640 _pimpl->AsyncCall(
"set_replayer_time_factor", time_factor);
644 _pimpl->AsyncCall(
"set_replayer_ignore_hero", ignore_hero);
648 _pimpl->AsyncCall(
"set_replayer_ignore_spectator", ignore_spectator);
653 std::function<
void(
Buffer)> callback) {
656 _pimpl->streaming_client.Subscribe(receivedToken, std::move(callback));
660 _pimpl->streaming_client.UnSubscribe(token);
685 std::function<
void(
Buffer)> callback)
687 std::vector<unsigned char> token_data =
_pimpl->CallAndWait<std::vector<unsigned char>>(
"get_gbuffer_token",
ActorId, GBufferId);
689 std::memcpy(&token.data[0u], token_data.data(), token_data.size());
690 _pimpl->streaming_client.Subscribe(token, std::move(callback));
697 std::vector<unsigned char> token_data =
_pimpl->CallAndWait<std::vector<unsigned char>>(
"get_gbuffer_token",
ActorId, GBufferId);
699 std::memcpy(&token.data[0u], token_data.data(), token_data.size());
700 _pimpl->streaming_client.UnSubscribe(token);
704 _pimpl->AsyncCall(
"draw_debug_shape", shape);
708 _pimpl->AsyncCall(
"apply_batch", std::move(commands), do_tick_cue);
712 std::vector<rpc::Command> commands,
714 auto result =
_pimpl->RawCall(
"apply_batch", std::move(commands), do_tick_cue);
715 return result.as<std::vector<rpc::CommandResponse>>();
719 return _pimpl->CallAndWait<uint64_t>(
"tick_cue");
723 using return_t = std::vector<rpc::LightState>;
724 return _pimpl->CallAndWait<return_t>(
"query_lights_state",
_pimpl->endpoint);
728 _pimpl->AsyncCall(
"update_lights_state",
_pimpl->endpoint, std::move(lights), discard_client);
732 _pimpl->AsyncCall(
"update_day_night_cycle",
_pimpl->endpoint, active);
736 using return_t = std::vector<geom::BoundingBox>;
737 return _pimpl->CallAndWait<return_t>(
"get_all_level_BBs", queried_tag);
741 using return_t = std::vector<rpc::EnvironmentObject>;
742 return _pimpl->CallAndWait<return_t>(
"get_environment_objects", queried_tag);
746 std::vector<uint64_t> env_objects_ids,
748 _pimpl->AsyncCall(
"enable_environment_objects", std::move(env_objects_ids), enable);
753 using return_t = std::pair<bool,rpc::LabelledPoint>;
754 return _pimpl->CallAndWait<return_t>(
"project_point", location, direction, search_distance);
759 using return_t = std::vector<rpc::LabelledPoint>;
760 return _pimpl->CallAndWait<return_t>(
"cast_ray", start_location, end_location);
#define DEBUG_ASSERT(predicate)
static std::vector< uint8_t > ReadFile(std::string path)
static bool FileExists(std::string file)
static bool SetFilesBaseFolder(const std::string &path)
static bool WriteFile(std::string path, std::vector< uint8_t > content)
const std::string endpoint
void AsyncCall(const std::string &function, Args &&... args)
auto RawCall(const std::string &function, Args &&... args)
Pimpl(const std::string &host, uint16_t port, size_t worker_threads)
streaming::Client streaming_client
time_duration GetTimeout() const
auto CallAndWait(const std::string &function, Args &&... args)
void SetReplayerIgnoreHero(bool ignore_hero)
geom::Transform GetActorComponentRelativeTransform(rpc::ActorId actor, const std::string componentName)
void SetTrafficLightRedTime(rpc::ActorId traffic_light, float red_time)
void ApplyControlToWalker(rpc::ActorId walker, const rpc::WalkerControl &control)
std::string GetClientVersion()
void OpenVehicleDoor(rpc::ActorId vehicle, const rpc::VehicleDoor door_idx)
const std::string GetEndpoint() const
rpc::WeatherParameters GetWeatherParameters()
std::vector< std::string > GetActorBoneNames(rpc::ActorId actor)
std::string GetMapData() const
void ApplyPhysicsControlToVehicle(rpc::ActorId vehicle, const rpc::VehiclePhysicsControl &physics_control)
void CloseVehicleDoor(rpc::ActorId vehicle, const rpc::VehicleDoor door_idx)
void LoadLevelLayer(rpc::MapLayer map_layer) const
void SetActorTargetVelocity(rpc::ActorId actor, const geom::Vector3D &vector)
std::vector< std::string > GetAvailableMaps()
bool IsEnabledForROS(const streaming::Token &token)
void DisableForROS(const streaming::Token &token)
bool SetFilesBaseFolder(const std::string &path)
rpc::VehicleLightState GetVehicleLightState(rpc::ActorId vehicle) const
rpc::EpisodeInfo GetEpisodeInfo()
std::vector< rpc::Actor > GetActorsById(const std::vector< ActorId > &ids)
rpc::VehicleTelemetryData GetVehicleTelemetryData(rpc::ActorId vehicle) const
void DisableActorConstantVelocity(rpc::ActorId actor)
void EnableActorConstantVelocity(rpc::ActorId actor, const geom::Vector3D &vector)
void RequestFile(const std::string &name) const
const std::unique_ptr< Pimpl > _pimpl
rpc::AckermannControllerSettings GetAckermannControllerSettings(rpc::ActorId vehicle) const
void EnableChronoPhysics(rpc::ActorId vehicle, uint64_t MaxSubsteps, float MaxSubstepDeltaTime, std::string VehicleJSON, std::string PowertrainJSON, std::string TireJSON, std::string BaseJSONPath)
std::string ShowRecorderActorsBlocked(std::string name, double min_time, double min_distance)
std::vector< rpc::CommandResponse > ApplyBatchSync(std::vector< rpc::Command > commands, bool do_tick_cue)
void Send(rpc::ActorId ActorId, std::string message)
void UnSubscribeFromGBuffer(rpc::ActorId ActorId, uint32_t GBufferId)
std::vector< ActorId > GetGroupTrafficLights(rpc::ActorId traffic_light)
void SetActorCollisions(rpc::ActorId actor, bool enabled)
void ApplyAckermannControllerSettings(rpc::ActorId vehicle, const rpc::AckermannControllerSettings &settings)
void ResetAllTrafficLights()
void SetActorAutopilot(rpc::ActorId vehicle, bool enabled)
void UnSubscribeFromStream(const streaming::Token &token)
rpc::VehicleLightStateList GetVehiclesLightStates()
Returns a list of pairs where the firts element is the vehicle ID and the second one is the light sta...
std::vector< std::string > GetRequiredFiles(const std::string &folder="", const bool download=true) const
void LoadEpisode(std::string map_name, bool reset_settings=true, rpc::MapLayer map_layer=rpc::MapLayer::All)
void ResetTrafficLightGroup(rpc::ActorId traffic_light)
float GetIMUISensorGravity() const
std::vector< std::string > GetActorComponentNames(rpc::ActorId actor)
void SetActorLocation(rpc::ActorId actor, const geom::Location &location)
uint64_t SetEpisodeSettings(const rpc::EpisodeSettings &settings)
rpc::Actor SpawnActorWithParent(const rpc::ActorDescription &description, const geom::Transform &transform, rpc::ActorId parent, rpc::AttachmentType attachment_type, const std::string &socket_name="")
void ShowVehicleDebugTelemetry(rpc::ActorId vehicle, bool enabled)
void SubscribeToStream(const streaming::Token &token, std::function< void(Buffer)> callback)
void SetTrafficLightYellowTime(rpc::ActorId traffic_light, float yellow_time)
void BlendPose(rpc::ActorId walker, float blend)
void StopReplayer(bool keep_actors)
std::vector< std::string > GetNamesOfAllObjects() const
void CopyOpenDriveToServer(std::string opendrive, const rpc::OpendriveGenerationParameters ¶ms)
rpc::VehiclePhysicsControl GetVehiclePhysicsControl(rpc::ActorId vehicle) const
std::pair< std::string, uint16_t > GetTrafficManagerRunning(uint16_t port) const
Gets a pair filled with the <IP, port> of the Trafic Manager running on port.
std::vector< uint8_t > GetNavigationMesh() const
void AddActorImpulse(rpc::ActorId actor, const geom::Vector3D &impulse)
void DrawDebugShape(const rpc::DebugShape &shape)
void SetActorTransform(rpc::ActorId actor, const geom::Transform &transform)
void SetActorDead(rpc::ActorId actor)
void ApplyBatch(std::vector< rpc::Command > commands, bool do_tick_cue)
void SetTrafficLightGreenTime(rpc::ActorId traffic_light, float green_time)
void SetWeatherParameters(const rpc::WeatherParameters &weather)
void FreezeTrafficLight(rpc::ActorId traffic_light, bool freeze)
void AddActorAngularImpulse(rpc::ActorId actor, const geom::Vector3D &vector)
std::string StartRecorder(std::string name, bool additional_data)
void FreezeAllTrafficLights(bool frozen)
std::vector< geom::Transform > GetActorSocketWorldTransforms(rpc::ActorId actor)
bool DestroyActor(rpc::ActorId actor)
bool AddTrafficManagerRunning(std::pair< std::string, uint16_t > trafficManagerInfo) const
Informs the server that a Traffic Manager is running on <IP, port>
std::vector< geom::Transform > GetActorBoneWorldTransforms(rpc::ActorId actor)
bool IsTrafficManagerRunning(uint16_t port) const
Querry to know if a Traffic Manager is running on port
void SetReplayerIgnoreSpectator(bool ignore_spectator)
std::vector< geom::BoundingBox > GetLightBoxes(rpc::ActorId traffic_light) const
float GetWheelSteerAngle(rpc::ActorId vehicle, rpc::VehicleWheelLocation wheel_location)
void AddActorForce(rpc::ActorId actor, const geom::Vector3D &force)
std::string ShowRecorderCollisions(std::string name, char type1, char type2)
void SetLightStateToVehicle(rpc::ActorId vehicle, const rpc::VehicleLightState &light_state)
std::vector< geom::BoundingBox > GetLevelBBs(uint8_t queried_tag) const
Returns all the BBs of all the elements of the level
std::vector< uint8_t > GetCacheFile(const std::string &name, const bool request_otherwise=true) const
std::vector< rpc::LabelledPoint > CastRay(geom::Location start_location, geom::Location end_location) const
void EnableForROS(const streaming::Token &token)
void EnableCarSim(rpc::ActorId vehicle, std::string simfile_path)
rpc::Actor GetSpectator()
void SetTimeout(time_duration timeout)
geom::Transform GetActorComponentWorldTransform(rpc::ActorId actor, const std::string componentName)
std::vector< geom::Transform > GetActorBoneRelativeTransforms(rpc::ActorId actor)
Client(const std::string &host, uint16_t port, size_t worker_threads=0u)
void SetActorEnableGravity(rpc::ActorId actor, bool enabled)
void SetActorSimulatePhysics(rpc::ActorId actor, bool enabled)
void RestorePhysXPhysics(rpc::ActorId vehicle)
void ApplyAckermannControlToVehicle(rpc::ActorId vehicle, const rpc::VehicleAckermannControl &control)
std::string ShowRecorderFileInfo(std::string name, bool show_all)
std::vector< rpc::ActorDefinition > GetActorDefinitions()
void SubscribeToGBuffer(rpc::ActorId ActorId, uint32_t GBufferId, std::function< void(Buffer)> callback)
void SetReplayerTimeFactor(double time_factor)
void SetTrafficLightState(rpc::ActorId traffic_light, const rpc::TrafficLightState trafficLightState)
std::string ReplayFile(std::string name, double start, double duration, uint32_t follow_id, bool replay_sensors)
std::vector< std::string > GetActorSocketNames(rpc::ActorId actor)
rpc::WalkerBoneControlOut GetBonesTransform(rpc::ActorId walker)
std::string GetServerVersion()
void UnloadLevelLayer(rpc::MapLayer map_layer) const
void SetWheelSteerDirection(rpc::ActorId vehicle, rpc::VehicleWheelLocation vehicle_wheel, float angle_in_deg)
void SetBonesTransform(rpc::ActorId walker, const rpc::WalkerBoneControlIn &bones)
void SetActorTargetAngularVelocity(rpc::ActorId actor, const geom::Vector3D &vector)
void UseCarSimRoad(rpc::ActorId vehicle, bool enabled)
std::pair< bool, rpc::LabelledPoint > ProjectPoint(geom::Location location, geom::Vector3D direction, float search_distance) const
std::vector< rpc::EnvironmentObject > GetEnvironmentObjects(uint8_t queried_tag) const
void AddActorTorque(rpc::ActorId actor, const geom::Vector3D &vector)
void UpdateServerLightsState(std::vector< rpc::LightState > &lights, bool discard_client=false) const
std::vector< geom::Transform > GetActorSocketRelativeTransforms(rpc::ActorId actor)
std::vector< rpc::LightState > QueryLightsStateToServer() const
void ApplyColorTextureToObjects(const std::vector< std::string > &objects_name, const rpc::MaterialParameter ¶meter, const rpc::TextureColor &Texture)
void GetPoseFromAnimation(rpc::ActorId walker)
rpc::MapInfo GetMapInfo()
void DestroyTrafficManager(uint16_t port) const
void ApplyControlToVehicle(rpc::ActorId vehicle, const rpc::VehicleControl &control)
void UpdateDayNightCycle(const bool active) const
void EnableEnvironmentObjects(std::vector< uint64_t > env_objects_ids, bool enable) const
rpc::EpisodeSettings GetEpisodeSettings()
time_duration GetTimeout() const
void SetIMUISensorGravity(float NewIMUISensorGravity)
rpc::Actor SpawnActor(const rpc::ActorDescription &description, const geom::Transform &transform)
static auto Dot(const Vector3D &a, const Vector3D &b)
Vector3D MakeSafeUnitVector(const float epsilon) const
void async_call(const std::string &function, Args &&... args)
auto call(const std::string &function, Args &&... args)
void set_timeout(int64_t value)
Defines the physical appearance of a vehicle whitch is obtained by the sensors.
A client able to subscribe to multiple streams.
void AsyncRun(size_t worker_threads)
A token that uniquely identify a stream.
Serializes a stream endpoint.
const auto & get_stream_id() const
Positive time duration up to milliseconds resolution.
constexpr size_t milliseconds() const noexcept
static time_duration milliseconds(size_t timeout)
static T Get(carla::rpc::Response< T > &response)
std::vector< std::pair< ActorId, VehicleLightState::flag_type > > VehicleLightStateList
std::deque< std::shared_ptr< SimpleWaypoint > > Buffer
This file contains definitions of common data structures used in traffic manager.
void throw_exception(const std::exception &e)
static void log_error(Args &&... args)
static void log_info(Args &&... args)
Seting for map generation from opendrive without additional geometry