Jump to content

Connect Leeroopedia MCP: Equip your AI agents to search best practices, build plans, verify code, diagnose failures, and look up hyperparameter defaults.

Implementation:CARLA simulator Carla CollisionStage

From Leeroopedia
Knowledge Sources
Domains Traffic_Management, Autonomous_Driving
Last Updated 2026-02-15 05:00 GMT

Overview

The CollisionStage class detects potential collisions between traffic-managed vehicles and nearby actors (other vehicles and pedestrians) in the CARLA simulation.

Description

CollisionStage is one of the core pipeline stages in the Traffic Manager. It inherits from the Stage base class and implements the Update(const unsigned long index) method, which is called once per vehicle per tick. The stage performs the following operations:

  • Overlapping Actor Filtering: For each ego vehicle, retrieves the set of actors with overlapping tracked paths from TrackTraffic. Filters candidates by a velocity-dependent collision radius and a vertical overlap threshold to discard actors on different elevation levels.
  • Distance-based Sorting: Sorts collision candidates in ascending order of distance to the ego vehicle so the nearest threats are evaluated first.
  • Collision Negotiation: For each candidate, calls NegotiateCollision which uses geodesic boundary projections and bounding box geometry (via Boost.Geometry polygons) to determine if the ego vehicle is on a collision path with the other actor. The negotiation considers boundary extensions based on velocity and existing collision locks.
  • Collision Lock Mechanism: Maintains a CollisionLockMap that tracks lead vehicles. When a collision is detected, a lock is established to maintain consistent following distance and avoid oscillating brake/accelerate behavior.
  • Stochastic Ignore: Applies user-configured percentage probabilities (GetPercentageIgnoreVehicles, GetPercentageIgnoreWalkers) to allow a configurable chance of ignoring detected collisions, enabling more varied traffic behavior.
  • Bounding Box Extension: Computes velocity-dependent forward extensions of bounding boxes via GetBoundingBoxExtention to predict future positions of actors.
  • Geodesic Boundary Construction: Builds boundary polygons along the vehicle's waypoint buffer path via GetGeodesicBoundary, providing more accurate path-following collision detection compared to simple bounding box overlap.

Usage

CollisionStage is used internally by TrafficManagerLocal as part of the per-tick pipeline. Each registered vehicle's collision result is written to a CollisionFrame output array, which is subsequently consumed by the MotionPlanStage to adjust velocity and braking.

Code Reference

Source Location

  • Repository: CARLA
  • File: LibCarla/source/carla/trafficmanager/CollisionStage.cpp
  • Header: LibCarla/source/carla/trafficmanager/CollisionStage.h

Signature

class CollisionStage : Stage {
public:
  CollisionStage(const std::vector<ActorId> &vehicle_id_list,
                 const SimulationState &simulation_state,
                 const BufferMap &buffer_map,
                 const TrackTraffic &track_traffic,
                 const Parameters &parameters,
                 CollisionFrame &output_array,
                 RandomGenerator &random_device);

  void Update(const unsigned long index) override;
  void RemoveActor(const ActorId actor_id);
  void Reset();
};

Import

#include "carla/trafficmanager/CollisionStage.h"

I/O Contract

Inputs

Name Type Required Description
vehicle_id_list const std::vector<ActorId>& Yes List of registered vehicle actor IDs to process
simulation_state const SimulationState& Yes Cached kinematic state (location, velocity, heading, dimensions) for all actors
buffer_map const BufferMap& Yes Waypoint buffers for constructing geodesic boundaries
track_traffic const TrackTraffic& Yes Tracks overlapping vehicle paths for candidate detection
parameters const Parameters& Yes Per-vehicle and global collision detection configuration
random_device RandomGenerator& Yes Random number generator for stochastic ignore behavior

Outputs

Name Type Description
output_array CollisionFrame& Array of CollisionHazardData structs containing hazard flag, obstacle actor ID, and available distance margin for each vehicle

Usage Examples

// CollisionStage is created inside TrafficManagerLocal constructor:
collision_stage(CollisionStage(vehicle_id_list,
                               simulation_state,
                               buffer_map,
                               track_traffic,
                               parameters,
                               collision_frame,
                               random_device));

// Called per vehicle in the parallel update loop:
collision_stage.Update(vehicle_index);

// Result consumed by MotionPlanStage:
const CollisionHazardData &collision_hazard = collision_frame.at(index);
bool has_collision = collision_hazard.hazard;
float margin = collision_hazard.available_distance_margin;

Related Pages

Page Connections

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