pub struct CollisionEvent { /* private fields */ }Expand description
Collision event data from a collision sensor.
Generated when an actor with a collision sensor attached collides with another actor. Contains information about the collision force and the actors involved.
Corresponds to carla.CollisionEvent in the Python API.
§Examples
use carla::{
client::Client,
sensor::{data::CollisionEvent, SensorDataBase},
};
let client = Client::default();
let mut world = client.world();
// Spawn vehicle with collision sensor
let bp_lib = world.blueprint_library();
let vehicle_bp = bp_lib.filter("vehicle.*").get(0).unwrap();
let collision_bp = bp_lib.find("sensor.other.collision").unwrap();
let spawn_points = world.map().recommended_spawn_points();
let vehicle = world
.spawn_actor(&vehicle_bp, &spawn_points.get(0).unwrap())
.unwrap();
let collision_sensor = world
.spawn_actor_opt(
&collision_bp,
&nalgebra::Isometry3::identity(),
Some(&vehicle),
carla::rpc::AttachmentType::Rigid,
)
.unwrap();
let sensor: carla::client::Sensor = collision_sensor.try_into().unwrap();
sensor.listen(move |data| {
if let Ok(collision) = CollisionEvent::try_from(data) {
println!("Collision detected!");
println!(" Impulse: {:?}", collision.normal_impulse());
if let Some(other) = collision.other_actor() {
println!(" Hit actor ID: {}", other.id());
}
}
});Implementations§
Source§impl CollisionEvent
impl CollisionEvent
Sourcepub fn actor(&self) -> Actor
pub fn actor(&self) -> Actor
Returns the actor that owns the collision sensor.
This is the actor that experienced the collision and has the sensor attached. See carla.CollisionEvent.actor in the Python API.
§Examples
let actor = collision.actor();
println!("Collision sensor actor ID: {}", actor.id());Sourcepub fn other_actor(&self) -> Option<Actor>
pub fn other_actor(&self) -> Option<Actor>
Returns the actor that was hit in the collision, if any.
Returns None if the collision was with a static object (like a building or the ground).
See carla.CollisionEvent.other_actor
in the Python API.
§Examples
if let Some(other) = collision.other_actor() {
println!("Collided with actor ID: {}", other.id());
} else {
println!("Collided with static object");
}Sourcepub fn normal_impulse(&self) -> &Vector3D
pub fn normal_impulse(&self) -> &Vector3D
Returns the normal impulse resulting from the collision.
The impulse is a 3D vector representing the force applied during the collision. The magnitude indicates collision severity, and the direction shows the impact vector.
Units: Newton-seconds (N·s) See carla.CollisionEvent.normal_impulse in the Python API.
§Examples
let impulse = collision.normal_impulse();
let magnitude = (impulse.x * impulse.x + impulse.y * impulse.y + impulse.z * impulse.z).sqrt();
println!("Collision force: {} N·s", magnitude);Trait Implementations§
Source§impl Clone for CollisionEvent
impl Clone for CollisionEvent
Source§fn clone(&self) -> CollisionEvent
fn clone(&self) -> CollisionEvent
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CollisionEvent
impl Debug for CollisionEvent
Source§impl TryFrom<SensorData> for CollisionEvent
impl TryFrom<SensorData> for CollisionEvent
Source§type Error = SensorData
type Error = SensorData
Auto Trait Implementations§
impl Freeze for CollisionEvent
impl RefUnwindSafe for CollisionEvent
impl Send for CollisionEvent
impl Sync for CollisionEvent
impl Unpin for CollisionEvent
impl UnwindSafe for CollisionEvent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.