CARLA
 
载入中...
搜索中...
未找到
ActorRegistry.h
浏览该文件的文档.
1// Copyright (c) 2017 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 "Carla/Actor/CarlaActor.h" // 包含CARLA中的Actor类定义
10#include "Containers/Map.h" // 包含Unreal Engine的Map容器定义
11#include <compiler/disable-ue4-macros.h> // 禁用UE4宏,防止与carla库的宏冲突
12#include <carla/Iterator.h> // 包含carla库的迭代器定义
13#include <compiler/enable-ue4-macros.h> // 启用UE4宏
14#include <unordered_map> // 包含C++标准库的unordered_map容器定义
15
16/// 所有Carla角色的注册表
18{
19public:
20 using IdType = FCarlaActor::IdType; // 使用FCarlaActor的IdType作为注册表的ID类型
21 using ValueType = TSharedPtr<FCarlaActor>; // 使用TSharedPtr<FCarlaActor>作为注册表的值类型
22
23private:
24 // 使用TMap作为存储Actor的数据库类型,键为ID,值为TSharedPtr<FCarlaActor>
25 using DatabaseType = TMap<IdType, TSharedPtr<FCarlaActor>>;
26
27 // ===========================================================================
28 /// 名称 参与者注册函数
29 // ===========================================================================
30 /// @{
31public:
32 /// 在数据库中注册@a Actor。将为此分配一个新的ID
33 /// 参与者
34 ///
35 /// @warning 如果多次注册同一个actor,行为未定义。
36 FCarlaActor* Register(AActor &Actor, FActorDescription Description, IdType DesiredId = 0); // 注册Actor并分配ID
37 void Deregister(IdType Id); // 通过ID注销Actor
38 void Deregister(AActor *Actor); // 通过Actor指针注销Actor
39 /// @}
40
41 // ===========================================================================
42 /// 名称 查找功能
43 // ===========================================================================
44 /// @{
45 int32 Num() const // 返回当前管理的Actor数量
46 {
47 return Actors.Num(); // 返回Map容器中的元素数量
48 }
49 bool IsEmpty() const // 检查当前是否有任何Actor
50 {
51 return Num() == 0; // 如果Actor数量为0,则返回true
52 }
53 bool Contains(uint32 Id) const // 检查是否包含指定ID的Actor
54 {
55 return ActorDatabase.Find(Id) != nullptr; // 如果找到指定ID的Actor,则返回true
56 }
57
58 // 四个FindCarlaActor函数是类的成员函数,用于在不同的上下文中查找FCarlaActor对象
59 // 这些函数展示了如何在C++中处理const正确性,即如何编写不会修改对象状态的函数,并返回指向const对象的指针以防止调用者修改这些对象
60 FCarlaActor* FindCarlaActor(IdType Id) // 通过ID查找FCarlaActor
61 {
62 ValueType* CarlaActorPtr = ActorDatabase.Find(Id); // 在数据库中查找ID对应的Actor
63 return CarlaActorPtr ? CarlaActorPtr->Get() : nullptr; // 如果找到,则返回Actor指针,否则返回nullptr
64 }
65 const FCarlaActor* FindCarlaActor(IdType Id) const // 通过ID查找FCarlaActor(const版本)
66 {
67 const ValueType* CarlaActorPtr = ActorDatabase.Find(Id); // 在数据库中查找ID对应的Actor
68 return CarlaActorPtr ? CarlaActorPtr->Get() : nullptr; // 如果找到,则返回Actor指针,否则返回nullptr
69 }
70 FCarlaActor* FindCarlaActor(const AActor *Actor) // 通过AActor指针查找FCarlaActor
71 {
72 IdType* PtrToId = Ids.Find(Actor); // 在Ids映射中查找Actor对应的ID
73 return PtrToId ? FindCarlaActor(*PtrToId) : nullptr; // 如果找到ID,则通过ID查找对应的FCarlaActor,否则返回nullptr
74 }
75 // @}
76};
77
79 {
80 const IdType* PtrToId = Ids.Find(Actor);
81 return PtrToId ? FindCarlaActor(*PtrToId) : nullptr;
82 }
84 void PutActorToSleep(IdType Id, UCarlaEpisode* CarlaEpisode);//用于将指定ID的演员设置为“睡眠”状态。UCarlaEpisode参数用于指定这个操作是在哪个特定的情节或场景中进行的
85 void WakeActorUp(IdType Id, UCarlaEpisode* CarlaEpisode);
86 /// @}
87 // ===========================================================================
88 ///名称范围迭代支持
89 // ===========================================================================
90 /// @{
91public:
92 auto begin() const noexcept
93 {
94 return ActorDatabase.begin();
95 }
96 auto end() const noexcept
97 {
98 return ActorDatabase.end();
99 }
100 /// @}
101private://类的私有部分,用于管理CARLA模拟环境中的演员
102//创建一个FCarlaActor对象,并返回一个智能指针指向它。它接受一个演员ID、一个AActor引用、一个描述对象和一个状态对象作为参数。
103 TSharedPtr<FCarlaActor> MakeCarlaActor(
104 IdType Id,
105 AActor &Actor,
106 FActorDescription Description,
109 AActor &Actor) const;
110 TMap<IdType, AActor *> Actors;//一个映射,将演员ID映射到AActor指针。这允许通过ID快速查找演员对象
111 TMap<AActor *, IdType> Ids;//另一个映射,将AActor指针映射到演员ID。这允许通过演员对象快速查找其ID
112 DatabaseType ActorDatabase;//数据库类型的成员变量,用于存储演员信息
113 static IdType ID_COUNTER;//一个静态成员变量,用于生成唯一的演员ID。每次创建新演员时,这个计数器可能会递增,以确保每个演员都有一个唯一的ID。
114};
auto end() const noexcept
TSharedPtr< FCarlaActor > MakeCarlaActor(IdType Id, AActor &Actor, FActorDescription Description, carla::rpc::ActorState InState) const
DatabaseType ActorDatabase
static IdType ID_COUNTER
FCarlaActor MakeFakeActor(AActor &Actor) const
const FCarlaActor * FindCarlaActor(const AActor *Actor) const
void WakeActorUp(IdType Id, UCarlaEpisode *CarlaEpisode)
TMap< IdType, AActor * > Actors
auto begin() const noexcept
名称范围迭代支持
FString GetDescriptionFromStream(carla::streaming::detail::stream_id_type Id)
TMap< AActor *, IdType > Ids
void PutActorToSleep(IdType Id, UCarlaEpisode *CarlaEpisode)
TSharedPtr< const FActorInfo > carla::rpc::ActorState InState
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld Actor
所有Carla角色的注册表
int32 Num() const
名称 查找功能
TMap< IdType, TSharedPtr< FCarlaActor > > DatabaseType
bool Contains(uint32 Id) const
FCarlaActor::IdType IdType
bool IsEmpty() const
FCarlaActor * FindCarlaActor(const AActor *Actor)
FCarlaActor * Register(AActor &Actor, FActorDescription Description, IdType DesiredId=0)
名称 参与者注册函数
TSharedPtr< FCarlaActor > ValueType
void Deregister(IdType Id)
FCarlaActor * FindCarlaActor(IdType Id)
const FCarlaActor * FindCarlaActor(IdType Id) const
查看一个参与者和它的属性
Definition CarlaActor.h:23
uint32 IdType
Definition CarlaActor.h:25
uint32_t stream_id_type
流ID的类型定义。
Definition Types.h:33