CARLA
 
载入中...
搜索中...
未找到
CollisionEvent.h
浏览该文件的文档.
1// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3// 表明该代码遵循MIT许可协议,可通过对应链接查看协议具体内容
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// 引入Carla项目中的Debug头文件,可能用于调试相关功能或输出调试信息等操作,具体取决于该头文件内的实现
10#include "carla/Debug.h"
11// 引入Carla项目中客户端细节相关的ActorVariant头文件,ActorVariant类型应该是用于处理不同种类的Actor(可能是游戏中的角色、物体等实体概念)的一种通用表示形式
13// 引入Carla项目中几何相关的Vector3D头文件,用于表示三维向量,在这里大概率是用于描述碰撞相关的矢量信息,比如碰撞的方向、冲量方向等
14#include "carla/geom/Vector3D.h"
15// 引入Carla项目中传感器数据相关的SensorData头文件,CollisionEvent类继承自SensorData,意味着它会继承SensorData类已有的属性和行为,以构建更具体的碰撞事件相关的数据结构
17// 引入Carla项目中传感器序列化相关的CollisionEventSerializer头文件,用于对碰撞事件进行序列化和反序列化操作,方便数据的存储、传输以及恢复等处理
19
20namespace carla {
21namespace sensor {
22namespace data {
23
24 // 定义CollisionEvent类,表示一个已记录的碰撞事件,继承自SensorData类,从而能复用SensorData中的通用传感器数据相关逻辑,并在此基础上拓展与碰撞事件特定相关的功能
25 /// A registered collision.
26 class CollisionEvent : public SensorData {
27 // 使用类型别名Super来指代SensorData类型,这样在后续代码中可以更简洁清晰地表示父类类型,方便代码书写和阅读
29 protected:
30 // 使用类型别名Serializer来指代s11n::CollisionEventSerializer类型,便于后续调用该序列化器相关的函数,提高代码的可读性和简洁性
32 // 将Serializer声明为友元类,这意味着CollisionEventSerializer类可以访问CollisionEvent类的私有成员,方便在序列化和反序列化操作中直接操作类的内部数据
33 friend Serializer;
34
35 // 显式定义的构造函数,用于根据传入的原始数据(RawData类型)来创建一个CollisionEvent对象,初始化该碰撞事件相关的各项属性
36 explicit CollisionEvent(const RawData &data)
37 // 调用父类(SensorData)的构造函数,传递原始数据data,先完成父类部分的初始化工作,保证继承体系下的初始化顺序和完整性
38 : Super(data),
39 // 通过调用Serializer类的DeserializeRawData方法,从传入的原始数据中解析并获取“自身”演员(Actor)信息,然后用其初始化_self_actor成员变量,该成员变量存储了与此次碰撞事件中检测到碰撞的一方相关的Actor信息
40 _self_actor(Serializer::DeserializeRawData(data).self_actor),
41 // 同样通过Serializer类的DeserializeRawData方法,从原始数据中解析并获取“其他”演员信息,用于初始化_other_actor成员变量,该成员变量存储了与此次碰撞事件中与“自身”演员发生碰撞的另一方相关的Actor信息
42 _other_actor(Serializer::DeserializeRawData(data).other_actor),
43 // 还是借助Serializer类的DeserializeRawData方法,从原始数据中解析并获取碰撞的法向冲量信息,以此初始化_normal_impulse成员变量,该成员变量使用Vector3D类型来表示碰撞产生的法向冲量矢量,包含了冲量的大小和方向信息
44 _normal_impulse(Serializer::DeserializeRawData(data).normal_impulse) {}
45
46 public:
47 // 获取“自身”演员的共享指针,这里的“自身”演员指的是在碰撞事件中负责检测或者说记录此次碰撞的那个Actor,通过调用_self_actor的Get方法,并传入相关的Episode(可能是游戏中的场景、情节等概念,具体取决于项目中的定义)信息来获取对应的Actor指针
48 /// Get "self" actor. Actor that measured the collision.
52
53 // 获取与“自身”演员发生碰撞的“其他”演员的共享指针,通过调用_other_actor的Get方法,并传入相关的Episode信息来获取对应的Actor指针,以此得到碰撞事件中涉及的另一方Actor信息
54 /// Get the actor to which we collided.
58
59 // 获取碰撞产生的法向冲量结果,返回一个常量引用,指向表示法向冲量的geom::Vector3D对象,外部可以通过这个引用获取但不能修改该法向冲量的信息,比如用于后续的物理模拟计算、碰撞效果分析等操作
60 /// Normal impulse result of the collision.
62 return _normal_impulse;
63 }
64
65 private:
66 // 用于存储碰撞事件中“自身”演员的相关信息,使用client::detail::ActorVariant类型可以灵活处理不同类型的Actor,以适应项目中各种可能的Actor表示形式,具体内容由Serializer从原始数据中反序列化得到
68 // 用于存储碰撞事件中与“自身”演员发生碰撞的“其他”演员的相关信息,同样使用ActorVariant类型来灵活表示不同的Actor情况,其值也是通过Serializer从原始数据中反序列化获取
70 // 用于存储碰撞产生的法向冲量信息,是一个geom::Vector3D类型的三维向量,包含了法向冲量的方向和大小,该向量信息从原始数据中反序列化而来,用于描述此次碰撞在物理层面的冲量情况
72 };
73
74} // namespace data
75} // namespace sensor
76} // namespace carla
创建一个执行者, 只在需要的时候实例化.
SharedPtr< client::Actor > Get(EpisodeProxy episode) const
包装一个传感器生成的原始数据以及一些有用的元信息。
Definition RawData.h:20
所有传感器生成数据的对象的基类
Definition SensorData.h:22
const auto & GetEpisode() const
Definition SensorData.h:57
SensorData(size_t frame, double timestamp, const rpc::Transform &sensor_transform)
Definition SensorData.h:26
const geom::Vector3D & GetNormalImpulse() const
Normal impulse result of the collision.
SharedPtr< client::Actor > GetOtherActor() const
Get the actor to which we collided.
SharedPtr< client::Actor > GetActor() const
Get "self" actor. Actor that measured the collision.
client::detail::ActorVariant _self_actor
client::detail::ActorVariant _other_actor
序列化整个事件的当前状态的类
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
Definition Memory.h:19