CARLA
 
载入中...
搜索中...
未找到
CarlaEngine.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/Recorder/CarlaRecorder.h"// 包含CarlaRecorder类的定义
10#include "Carla/Sensor/WorldObserver.h"// 包含WorldObserver类的定义
11#include "Carla/Server/CarlaServer.h"// 包含CarlaServer类的定义
12#include "Carla/Settings/EpisodeSettings.h"// 包含EpisodeSettings相关定义
13#include "Carla/Util/NonCopyable.h"// 包含NonCopyable类的定义,用于禁止复制
14#include "Carla/Game/FrameData.h"// 包含FrameData结构体的定义
15
16#include "Misc/CoreDelegates.h" // 包含核心委托的定义
17// [禁用/启用UE4宏]
18#include <compiler/disable-ue4-macros.h>// 禁用Unreal Engine 4的宏
19#include <carla/multigpu/router.h>// 包含多GPU和ROS2相关的Carla库头文件
23#include <carla/ros2/ROS2.h>
24#include <compiler/enable-ue4-macros.h>// 重新启用Unreal Engine 4的宏
25
26#include <mutex>// 包含C++标准库的mutex类,用于线程同步
27// [前向声明]
28class UCarlaSettings;// 前向声明UCarlaSettings类
29struct FEpisodeSettings;// 前向声明FEpisodeSettings结构体
30// [FCarlaEngine类定义]
31class FCarlaEngine : private NonCopyable// 继承自NonCopyable,禁止复制
32{
33public:
34 // [静态成员变量]
35 static uint64_t FrameCounter;// 静态成员变量,用于记录帧数
36 // [析构函数]
38 // [通知函数]
39 void NotifyInitGame(const UCarlaSettings &Settings);// 通知初始化游戏
40
41 void NotifyBeginEpisode(UCarlaEpisode &Episode);// 通知开始新的剧情
42
43 void NotifyEndEpisode();// 通知结束当前剧情
44 // [获取服务器]
45 const FCarlaServer &GetServer() const// 获取常量引用形式的服务器
46 {
47 return Server;
48 }
49
50 FCarlaServer &GetServer()// 获取非常量引用形式的服务器
51 {
52 return Server;
53 }
54 // [获取当前剧情]
55 // 获取当前的UCarlaEpisode实例
56UCarlaEpisode *GetCurrentEpisode()
57{
58 return CurrentEpisode; // 返回当前Episode的指针
59}
60
61// 设置录像机实例
62void SetRecorder(ACarlaRecorder *InRecorder)
63{
64 Recorder = InRecorder; // 将传入的录像机实例赋值给成员变量Recorder
65}
66
67// 获取当前帧数的静态函数
68static uint64_t GetFrameCounter() // 获取当前帧数
69{
70 return FCarlaEngine::FrameCounter; // 返回由FCarlaEngine类维护的帧计数器
71}
72
73// 更新帧数,并返回更新后的帧数的静态函数
74static uint64_t UpdateFrameCounter() // 更新帧数,并返回更新后的帧数
75{
76 FCarlaEngine::FrameCounter += 1; // 帧计数器加1
77 #if defined(WITH_ROS2) // 如果定义了WITH_ROS2宏,表示支持ROS2集成
78 auto ROS2 = carla::ros2::ROS2::GetInstance(); // 获取ROS2实例
79 if (ROS2->IsEnabled()) // 如果ROS2实例已启用
80 ROS2->SetFrame(FCarlaEngine::FrameCounter); // 设置ROS2的当前帧数
81 #endif
82 return FCarlaEngine::FrameCounter; // 返回更新后的帧计数器
83}
84
85// 重置帧数的静态函数
86static void ResetFrameCounter(uint64_t Value = 0) // 重置帧数,默认值为0
87{
88 FCarlaEngine::FrameCounter = Value; // 将帧计数器设置为传入的值
89 #if defined(WITH_ROS2) // 如果定义了WITH_ROS2宏,表示支持ROS2集成
90 auto ROS2 = carla::ros2::ROS2::GetInstance(); // 获取ROS2实例
91 if (ROS2->IsEnabled()) // 如果ROS2实例已启用
92 ROS2->SetFrame(FCarlaEngine::FrameCounter); // 设置ROS2的当前帧数
93 #endif
94}
95
96// 获取次级服务器的共享指针
97std::shared_ptr<carla::multigpu::Router> GetSecondaryServer() // 获取次级服务器的共享指针
98{
99 return SecondaryServer; // 返回次级服务器的共享指针
100}
101
102private:
103
104// 在每个Tick之前调用的函数
105void OnPreTick(UWorld *World, ELevelTick TickType, float DeltaSeconds);
106
107// 在每个Tick之后调用的函数
108void OnPostTick(UWorld *World, ELevelTick TickType, float DeltaSeconds);
109
110// 当Episode设置发生变化时调用的函数
111void OnEpisodeSettingsChanged(const FEpisodeSettings &Settings);
112
113// 重置仿真状态的函数
115
116bool bIsRunning = false; // 标识仿真是否正在运行
117
118bool bSynchronousMode = false; // 标识是否处于同步模式
119
120bool bMapChanged = false; // 标识地图是否已更改
121
122FCarlaServer Server; // CARLA服务器实例
123
124FWorldObserver WorldObserver; // 世界观察者实例
125
126UCarlaEpisode *CurrentEpisode = nullptr; // 当前Episode的指针
127
128FEpisodeSettings CurrentSettings; // 当前Episode设置
129
130ACarlaRecorder *Recorder = nullptr; // 录像机实例
131
132FDelegateHandle OnPreTickHandle; // OnPreTick事件的委托句柄
133
134FDelegateHandle OnPostTickHandle; // OnPostTick事件的委托句柄
135
136FDelegateHandle OnEpisodeSettingsChangeHandle; // Episode设置更改事件的委托句柄
137
138bool bIsPrimaryServer = true; // 标识是否为主服务器
139
140bool bNewConnection = false; // 标识是否有新的连接
141
142std::unordered_map<uint32_t, uint32_t> MappedId; // 用于映射ID的哈希表
143
144std::shared_ptr<carla::multigpu::Router> SecondaryServer; // 次级服务器的共享指针
145std::shared_ptr<carla::multigpu::Secondary> Secondary; // 次级实例的共享指针
146
147std::vector<FFrameData> FramesToProcess; // 待处理帧数据的向量
148std::mutex FrameToProcessMutex; // 帧数据处理的互斥锁
149};
150
151// Note: this has a circular dependency with FCarlaEngine; it must be included late.
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld * World
Recorder for the simulation
void OnEpisodeSettingsChanged(const FEpisodeSettings &Settings)
FDelegateHandle OnEpisodeSettingsChangeHandle
std::shared_ptr< carla::multigpu::Router > SecondaryServer
std::mutex FrameToProcessMutex
void OnPreTick(UWorld *World, ELevelTick TickType, float DeltaSeconds)
static uint64_t FrameCounter
Definition CarlaEngine.h:35
static uint64_t GetFrameCounter()
Definition CarlaEngine.h:68
void ResetSimulationState()
const FCarlaServer & GetServer() const
Definition CarlaEngine.h:45
FWorldObserver WorldObserver
FCarlaServer Server
static void ResetFrameCounter(uint64_t Value=0)
Definition CarlaEngine.h:86
void NotifyEndEpisode()
std::unordered_map< uint32_t, uint32_t > MappedId
std::shared_ptr< carla::multigpu::Router > GetSecondaryServer()
Definition CarlaEngine.h:97
FEpisodeSettings CurrentSettings
bool bNewConnection
static uint64_t UpdateFrameCounter()
Definition CarlaEngine.h:74
UCarlaEpisode * CurrentEpisode
std::vector< FFrameData > FramesToProcess
void NotifyBeginEpisode(UCarlaEpisode &Episode)
void NotifyInitGame(const UCarlaSettings &Settings)
ACarlaRecorder * Recorder
void SetRecorder(ACarlaRecorder *InRecorder)
Definition CarlaEngine.h:62
bool bIsPrimaryServer
FCarlaServer & GetServer()
Definition CarlaEngine.h:50
bool bSynchronousMode
FDelegateHandle OnPreTickHandle
FDelegateHandle OnPostTickHandle
std::shared_ptr< carla::multigpu::Secondary > Secondary
UCarlaEpisode * GetCurrentEpisode()
Definition CarlaEngine.h:56
void OnPostTick(UWorld *World, ELevelTick TickType, float DeltaSeconds)
Serializes and sends all the actors in the current UCarlaEpisode.
Carla 的全局设置
static std::shared_ptr< ROS2 > GetInstance()
Definition ROS2.h:51