CARLA
TrafficManagerBase.h
Go to the documentation of this file.
1 // Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma
2 // de Barcelona (UAB).
3 //
4 // This work is licensed under the terms of the MIT license.
5 // For a copy, see <https://opensource.org/licenses/MIT>.
6 
7 #pragma once
8 
9 #include <memory>
10 #include "carla/client/Actor.h"
12 
13 namespace carla {
14 namespace traffic_manager {
15 
17 using Path = std::vector<cg::Location>;
18 using Route = std::vector<uint8_t>;
20 using Action = std::pair<RoadOption, WaypointPtr>;
21 using ActionBuffer = std::vector<Action>;
22 
23 
24 /// The function of this class is to integrate all the various stages of
25 /// the traffic manager appropriately using messengers.
27 
28 public:
29  /// To start the traffic manager.
30  virtual void Start() = 0;
31 
32  /// To stop the traffic manager.
33  virtual void Stop() = 0;
34 
35  /// To release the traffic manager.
36  virtual void Release() = 0;
37 
38  /// To reset the traffic manager.
39  virtual void Reset() = 0;
40 
41  /// Protected constructor for singleton lifecycle management.
43 
44  /// Destructor.
45  virtual ~TrafficManagerBase() {};
46 
47  /// This method registers a vehicle with the traffic manager.
48  virtual void RegisterVehicles(const std::vector<ActorPtr> &actor_list) = 0;
49 
50  /// This method unregisters a vehicle from traffic manager.
51  virtual void UnregisterVehicles(const std::vector<ActorPtr> &actor_list) = 0;
52 
53  /// Set a vehicle's % decrease in velocity with respect to the speed limit.
54  /// If less than 0, it's a % increase.
55  virtual void SetPercentageSpeedDifference(const ActorPtr &actor, const float percentage) = 0;
56 
57  /// Set a vehicle's exact desired velocity.
58  virtual void SetDesiredSpeed(const ActorPtr &actor, const float value) = 0;
59 
60  /// Set a global % decrease in velocity with respect to the speed limit.
61  /// If less than 0, it's a % increase.
62  virtual void SetGlobalPercentageSpeedDifference(float const percentage) = 0;
63 
64  /// Method to set the automatic management of the vehicle lights
65  virtual void SetUpdateVehicleLights(const ActorPtr &actor, const bool do_update) = 0;
66 
67  /// Method to set collision detection rules between vehicles.
68  virtual void SetCollisionDetection(const ActorPtr &reference_actor, const ActorPtr &other_actor, const bool detect_collision) = 0;
69 
70  /// Method to force lane change on a vehicle.
71  /// Direction flag can be set to true for left and false for right.
72  virtual void SetForceLaneChange(const ActorPtr &actor, const bool direction) = 0;
73 
74  /// Enable/disable automatic lane change on a vehicle.
75  virtual void SetAutoLaneChange(const ActorPtr &actor, const bool enable) = 0;
76 
77  /// Method to specify how much distance a vehicle should maintain to
78  /// the leading vehicle.
79  virtual void SetDistanceToLeadingVehicle(const ActorPtr &actor, const float distance) = 0;
80 
81  /// Method to specify the % chance of ignoring collisions with any walker.
82  virtual void SetPercentageIgnoreWalkers(const ActorPtr &actor, const float perc) = 0;
83 
84  /// Method to specify the % chance of ignoring collisions with any vehicle.
85  virtual void SetPercentageIgnoreVehicles(const ActorPtr &actor, const float perc) = 0;
86 
87  /// Method to specify the % chance of running any traffic light.
88  virtual void SetPercentageRunningLight(const ActorPtr &actor, const float perc) = 0;
89 
90  /// Method to specify the % chance of running any traffic sign.
91  virtual void SetPercentageRunningSign(const ActorPtr &actor, const float perc) = 0;
92 
93  /// Method to switch traffic manager into synchronous execution.
94  virtual void SetSynchronousMode(bool mode) = 0;
95 
96  /// Method to set Tick timeout for synchronous execution.
97  virtual void SetSynchronousModeTimeOutInMiliSecond(double time) = 0;
98 
99  /// Method to provide synchronous tick
100  virtual bool SynchronousTick() = 0;
101 
102  /// Get carla episode information
104 
105  /// Method to set Global Distance to Leading Vehicle.
106  virtual void SetGlobalDistanceToLeadingVehicle(const float dist) = 0;
107 
108  /// Method to set % to keep on the right lane.
109  virtual void SetKeepRightPercentage(const ActorPtr &actor,const float percentage) = 0;
110 
111  /// Method to set % to randomly do a left lane change.
112  virtual void SetRandomLeftLaneChangePercentage(const ActorPtr &actor, const float percentage) = 0;
113 
114  /// Method to set % to randomly do a right lane change.
115  virtual void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage) = 0;
116 
117  /// Method to set hybrid physics mode.
118  virtual void SetHybridPhysicsMode(const bool mode_switch) = 0;
119 
120  /// Method to set hybrid physics radius.
121  virtual void SetHybridPhysicsRadius(const float radius) = 0;
122 
123  /// Method to set randomization seed.
124  virtual void SetRandomDeviceSeed(const uint64_t seed) = 0;
125 
126  /// Method to set Open Street Map mode.
127  virtual void SetOSMMode(const bool mode_switch) = 0;
128 
129  /// Method to set our own imported path.
130  virtual void SetCustomPath(const ActorPtr &actor, const Path path, const bool empty_buffer) = 0;
131 
132  /// Method to remove a path.
133  virtual void RemoveUploadPath(const ActorId &actor_id, const bool remove_path) = 0;
134 
135  /// Method to update an already set path.
136  virtual void UpdateUploadPath(const ActorId &actor_id, const Path path) = 0;
137 
138  /// Method to set our own imported route.
139  virtual void SetImportedRoute(const ActorPtr &actor, const Route route, const bool empty_buffer) = 0;
140 
141  /// Method to remove a route.
142  virtual void RemoveImportedRoute(const ActorId &actor_id, const bool remove_path) = 0;
143 
144  /// Method to update an already set route.
145  virtual void UpdateImportedRoute(const ActorId &actor_id, const Route route) = 0;
146 
147  /// Method to set automatic respawn of dormant vehicles.
148  virtual void SetRespawnDormantVehicles(const bool mode_switch) = 0;
149 
150  /// Method to set boundaries for respawning vehicles.
151  virtual void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound) = 0;
152 
153  /// Method to set limits for boundaries when respawning vehicles.
154  virtual void SetMaxBoundaries(const float lower, const float upper) = 0;
155 
156  /// Method to get the vehicle's next action.
157  virtual Action GetNextAction(const ActorId &actor_id) = 0;
158 
159  /// Method to get the vehicle's action buffer.
160  virtual ActionBuffer GetActionBuffer(const ActorId &actor_id) = 0;
161 
162  virtual void ShutDown() = 0;
163 
164 protected:
165 
166 };
167 
168 } // namespace traffic_manager
169 } // namespace carla
virtual void SetHybridPhysicsMode(const bool mode_switch)=0
Method to set hybrid physics mode.
virtual void SetAutoLaneChange(const ActorPtr &actor, const bool enable)=0
Enable/disable automatic lane change on a vehicle.
virtual void Start()=0
To start the traffic manager.
virtual void SetForceLaneChange(const ActorPtr &actor, const bool direction)=0
Method to force lane change on a vehicle.
virtual bool SynchronousTick()=0
Method to provide synchronous tick.
TrafficManagerBase()
Protected constructor for singleton lifecycle management.
carla::SharedPtr< cc::Actor > ActorPtr
virtual void SetGlobalDistanceToLeadingVehicle(const float dist)=0
Method to set Global Distance to Leading Vehicle.
virtual void SetPercentageIgnoreWalkers(const ActorPtr &actor, const float perc)=0
Method to specify the % chance of ignoring collisions with any walker.
virtual void Release()=0
To release the traffic manager.
std::vector< cg::Location > Path
virtual void SetMaxBoundaries(const float lower, const float upper)=0
Method to set limits for boundaries when respawning vehicles.
boost::shared_ptr< T > SharedPtr
Use this SharedPtr (boost::shared_ptr) to keep compatibility with boost::python, but it would be nice...
Definition: Memory.h:20
This file contains definitions of common data structures used in traffic manager. ...
Definition: Carla.cpp:133
virtual void SetPercentageSpeedDifference(const ActorPtr &actor, const float percentage)=0
Set a vehicle&#39;s % decrease in velocity with respect to the speed limit.
virtual void UnregisterVehicles(const std::vector< ActorPtr > &actor_list)=0
This method unregisters a vehicle from traffic manager.
virtual Action GetNextAction(const ActorId &actor_id)=0
Method to get the vehicle&#39;s next action.
virtual void SetRandomLeftLaneChangePercentage(const ActorPtr &actor, const float percentage)=0
Method to set % to randomly do a left lane change.
virtual void RemoveImportedRoute(const ActorId &actor_id, const bool remove_path)=0
Method to remove a route.
virtual void SetImportedRoute(const ActorPtr &actor, const Route route, const bool empty_buffer)=0
Method to set our own imported route.
std::pair< RoadOption, WaypointPtr > Action
virtual void SetOSMMode(const bool mode_switch)=0
Method to set Open Street Map mode.
virtual void RemoveUploadPath(const ActorId &actor_id, const bool remove_path)=0
Method to remove a path.
virtual void SetGlobalPercentageSpeedDifference(float const percentage)=0
Set a global % decrease in velocity with respect to the speed limit.
virtual void SetKeepRightPercentage(const ActorPtr &actor, const float percentage)=0
Method to set % to keep on the right lane.
carla::ActorId ActorId
carla::SharedPtr< cc::Waypoint > WaypointPtr
Definition: InMemoryMap.h:38
The function of this class is to integrate all the various stages of the traffic manager appropriatel...
virtual void SetDistanceToLeadingVehicle(const ActorPtr &actor, const float distance)=0
Method to specify how much distance a vehicle should maintain to the leading vehicle.
virtual void SetUpdateVehicleLights(const ActorPtr &actor, const bool do_update)=0
Method to set the automatic management of the vehicle lights.
virtual void Stop()=0
To stop the traffic manager.
virtual void SetPercentageIgnoreVehicles(const ActorPtr &actor, const float perc)=0
Method to specify the % chance of ignoring collisions with any vehicle.
virtual void SetCustomPath(const ActorPtr &actor, const Path path, const bool empty_buffer)=0
Method to set our own imported path.
std::vector< uint8_t > Route
virtual void Reset()=0
To reset the traffic manager.
virtual void SetRespawnDormantVehicles(const bool mode_switch)=0
Method to set automatic respawn of dormant vehicles.
virtual void UpdateUploadPath(const ActorId &actor_id, const Path path)=0
Method to update an already set path.
virtual void SetCollisionDetection(const ActorPtr &reference_actor, const ActorPtr &other_actor, const bool detect_collision)=0
Method to set collision detection rules between vehicles.
virtual void SetPercentageRunningLight(const ActorPtr &actor, const float perc)=0
Method to specify the % chance of running any traffic light.
virtual void UpdateImportedRoute(const ActorId &actor_id, const Route route)=0
Method to update an already set route.
virtual void SetHybridPhysicsRadius(const float radius)=0
Method to set hybrid physics radius.
virtual void SetRandomDeviceSeed(const uint64_t seed)=0
Method to set randomization seed.
virtual void SetDesiredSpeed(const ActorPtr &actor, const float value)=0
Set a vehicle&#39;s exact desired velocity.
std::vector< Action > ActionBuffer
virtual void SetSynchronousModeTimeOutInMiliSecond(double time)=0
Method to set Tick timeout for synchronous execution.
virtual void SetBoundariesRespawnDormantVehicles(const float lower_bound, const float upper_bound)=0
Method to set boundaries for respawning vehicles.
virtual void SetPercentageRunningSign(const ActorPtr &actor, const float perc)=0
Method to specify the % chance of running any traffic sign.
virtual ActionBuffer GetActionBuffer(const ActorId &actor_id)=0
Method to get the vehicle&#39;s action buffer.
virtual void SetSynchronousMode(bool mode)=0
Method to switch traffic manager into synchronous execution.
virtual void RegisterVehicles(const std::vector< ActorPtr > &actor_list)=0
This method registers a vehicle with the traffic manager.
virtual void SetRandomRightLaneChangePercentage(const ActorPtr &actor, const float percentage)=0
Method to set % to randomly do a right lane change.
virtual carla::client::detail::EpisodeProxy & GetEpisodeProxy()=0
Get carla episode information.