31 float target_speed_kmh,
36 static_cast<const
Options &>(opts),
std::move(map),
std::move(grp)),
37 _use_basic_behavior(opts.use_basic_behavior),
38 _target_speed_ms(target_speed_kmh / 3.6f),
39 _restart_time(opts.restart_time),
40 _is_constant_velocity_active(true),
41 _constant_velocity_stop_time(0.0),
42 _has_stop_timestamp(false),
43 _collision_sensor(nullptr) {
62 _world->GetSnapshot().GetTimestamp().elapsed_seconds;
77 const double elapsed =
78 _world->GetSnapshot().GetTimestamp().elapsed_seconds;
91 bool hazard_detected =
false;
92 float hazard_speed = 0.0f;
94 auto actor_list =
_world->GetActors();
95 auto vehicle_list = actor_list->Filter(
"*vehicle*");
96 auto lights_list = actor_list->Filter(
"*traffic_light*");
98 const float vehicle_speed =
_vehicle->GetVelocity().Length();
103 if (v_obs.affected && v_obs.actor) {
104 const auto vehicle_velocity =
_vehicle->GetVelocity();
105 const float v_len = vehicle_velocity.Length();
109 const auto adv_velocity = v_obs.actor->GetVelocity();
110 const float dot = vehicle_velocity.x * adv_velocity.x +
111 vehicle_velocity.y * adv_velocity.y +
112 vehicle_velocity.z * adv_velocity.z;
113 hazard_speed = dot / v_len;
115 hazard_detected =
true;
124 hazard_detected =
true;
130 if (hazard_detected) {
139 auto blueprint_lib =
_world->GetBlueprintLibrary();
140 const auto *blueprint = blueprint_lib->Find(
"sensor.other.collision");
C++ port of agents.navigation.basic_agent.BasicAgent.
std::pair< bool, SharedPtr< client::TrafficLight > > AffectedByTrafficLight(SharedPtr< client::ActorList > lights=nullptr, std::optional< float > max_distance=std::nullopt)
Returns (affected, light) similar to Python _affected_by_traffic_light.
VehicleObstacle VehicleObstacleDetected(SharedPtr< client::ActorList > vehicles=nullptr, std::optional< float > max_distance=std::nullopt, float up_angle_th=90.0f, float low_angle_th=0.0f, int lane_offset=0)
Mirrors Python _vehicle_obstacle_detected.
SharedPtr< client::World > _world
float _base_vehicle_threshold
SharedPtr< client::Vehicle > _vehicle
virtual rpc::VehicleControl RunStep()
float _base_tlight_threshold
std::unique_ptr< LocalPlanner > _local_planner
void SetCollisionSensor()
void RestartConstantVelocity()
Re-enable constant velocity at the current _target_speed_ms.
void StopConstantVelocity()
Disables constant velocity mode and stamps the stop time.
void DestroySensor()
Tear down the collision sensor (called from the destructor too).
void SetTargetSpeed(float speed_kmh)
Hides BasicAgent::SetTargetSpeed; converts km/h to m/s for the internal _target_speed_ms and forwards...
bool _is_constant_velocity_active
double _constant_velocity_stop_time
rpc::VehicleControl RunStep() override
SharedPtr< client::Sensor > _collision_sensor
void SetConstantVelocity(float speed_ms)
~ConstantVelocityAgent() override
ConstantVelocityAgent(SharedPtr< client::Vehicle > vehicle, float target_speed_kmh=20.0f, const ConstantOptions &opts=DefaultConstantOptions(), SharedPtr< client::Map > map=nullptr, SharedPtr< GlobalRoutePlanner > grp=nullptr)
This file contains definitions of common data structures used in traffic manager.
std::shared_ptr< T > SharedPtr