18#include "Runtime/Core/Public/Misc/App.h"
19#include "PhysicsEngine/PhysicsSettings.h"
46 return std::max(std::thread::hardware_concurrency(), 4u) - 2u;
53 return FApp::IsBenchmarking() ? FApp::GetFixedDeltaTime() : TOptional<double>{};
60 FApp::SetBenchmarking(FixedDeltaSeconds.IsSet());
61 FApp::SetFixedDeltaTime(FixedDeltaSeconds.Get(0.0));
78 #if defined(WITH_ROS2)
81 if (ROS2->IsEnabled())
84 FWorldDelegates::OnWorldTickStart.Remove(OnPreTickHandle);
85 FWorldDelegates::OnWorldPostActorTick.Remove(OnPostTickHandle);
92 TRACE_CPUPROFILER_EVENT_SCOPE_STR(__FUNCTION__);
97 const auto PrimaryIP = Settings.
PrimaryIP;
118 if (!PrimaryIP.empty())
125 struct CarlaStreamBuffer :
public std::streambuf
127 CarlaStreamBuffer(
char *buf, std::size_t size) { setg(buf, buf, buf + size); }
134 TRACE_CPUPROFILER_EVENT_SCOPE_STR(
"MultiGPUCommand::SEND_FRAME");
136 CarlaStreamBuffer TempStream((
char *) Data.data(), Data.size());
137 std::istream InStream(&TempStream);
140 TRACE_CPUPROFILER_EVENT_SCOPE_STR(
"FramesToProcess.emplace_back");
151 FString FinalPath((
char *) Data.data());
165 carla::Buffer buf(
reinterpret_cast<unsigned char *
>(&token), (
size_t)
sizeof(token));
172 std::string msg(
"Yes, I'm alive");
173 carla::Buffer buf((
unsigned char *) msg.c_str(), (
size_t) msg.size());
186 carla::Buffer buf(
reinterpret_cast<unsigned char *
>(&res), (
size_t)
sizeof(
bool));
199 carla::Buffer buf(
reinterpret_cast<unsigned char *
>(&res), (
size_t)
sizeof(
bool));
210 carla::Buffer buf(
reinterpret_cast<unsigned char *
>(&res), (
size_t)
sizeof(
bool));
218 Secondary = std::make_shared<carla::multigpu::Secondary>(PrimaryIP, PrimaryPort, CommandExecutor);
231 UE_LOG(LogCarla, Log, TEXT(
"New secondary connection detected"));
237 #if defined(WITH_ROS2)
250 TRACE_CPUPROFILER_EVENT_SCOPE_STR(__FUNCTION__);
294 TRACE_CPUPROFILER_EVENT_SCOPE_STR(__FUNCTION__);
295 if (TickType == ELevelTick::LEVELTICK_All)
337 TRACE_CPUPROFILER_EVENT_SCOPE_STR(
"FramesToProcess.PlayFrameData");
350 TRACE_CPUPROFILER_EVENT_SCOPE_STR(__FUNCTION__);
359 std::ostringstream OutStream;
363 std::string Tmp(OutStream.str());
373 EpisodeRecorder->Ticking(DeltaSeconds);
377 if ((TickType == ELevelTick::LEVELTICK_All) && (
CurrentEpisode !=
nullptr))
380 bool LightUpdatePending =
false;
384 if (CarlaLightSubsystem)
406 if (GEngine && GEngine->GameViewport)
414 UPhysicsSettings* PhysSett = UPhysicsSettings::Get();
UE_LOG(LogCarla, Log, TEXT("UActorDispatcher::Destroying actor: '%s' %x"), *Id, Actor)
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld * World
static void FCarlaEngine_SetFixedDeltaSeconds(TOptional< double > FixedDeltaSeconds)
static uint32 FCarlaEngine_GetNumberOfThreadsForRPCServer()
static TOptional< double > FCarlaEngine_GetFixedDeltaSeconds()
CarlaReplayer * GetReplayer(void)
void SetEpisode(UCarlaEpisode *ThisEpisode)
float GetLayerStreamingDistance() const
void SetActorStreamingDistance(float Distance)
void SetLayerStreamingDistance(float Distance)
float GetActorStreamingDistance() const
void CheckPlayAfterMapLoaded(void)
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
void ResetSimulationState()
FWorldObserver WorldObserver
static void ResetFrameCounter(uint64_t Value=0)
std::unordered_map< uint32_t, uint32_t > MappedId
FEpisodeSettings CurrentSettings
static uint64_t UpdateFrameCounter()
UCarlaEpisode * CurrentEpisode
std::vector< FFrameData > FramesToProcess
void NotifyBeginEpisode(UCarlaEpisode &Episode)
void NotifyInitGame(const UCarlaSettings &Settings)
ACarlaRecorder * Recorder
FDelegateHandle OnPreTickHandle
FDelegateHandle OnPostTickHandle
std::shared_ptr< carla::multigpu::Secondary > Secondary
UCarlaEpisode * GetCurrentEpisode()
void OnPostTick(UWorld *World, ELevelTick TickType, float DeltaSeconds)
std::shared_ptr< carla::multigpu::Router > GetSecondaryServer()
void RunSome(uint32 Milliseconds)
carla::streaming::Server & GetStreamingServer()
void NotifyBeginEpisode(UCarlaEpisode &Episode)
FDataMultiStream Start(uint16_t RPCPort, uint16_t StreamingPort, uint16_t SecondaryPort)
void AsyncRun(uint32 NumberOfWorkerThreads)
static FOnEpisodeSettingsChange OnEpisodeSettingsChange
void SetStream(FDataMultiStream InStream)
Replace the Stream associated with this sensor.
void BroadcastTick(const UCarlaEpisode &Episode, float DeltaSeconds, bool MapChange, bool PendingLightUpdate)
Send a message to every connected client with the info about the given Episode.
bool IsUpdatePending() const
uint32 StreamingPort
流媒体端口的设置。
std::string PrimaryIP
设置要连接的主服务器的IP和端口。
uint32 RPCPort
用于监听客户端连接的世界端口。
uint32 SecondaryPort
辅助服务器端口的设置。
static ALargeMapManager * GetLargeMapManager(const UObject *WorldContextObject)
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
static std::shared_ptr< ROS2 > GetInstance()
token_type GetToken(stream_id sensor_id)
bool IsEnabledForROS(stream_id sensor_id)
void EnableForROS(stream_id sensor_id)
void DisableForROS(stream_id sensor_id)
静态断言,用于确保token_data结构体的大小与Token::data的大小相同。
auto get_port() const
获取端口号。
uint32_t stream_id_type
流ID的类型定义。
static void log_info(Args &&... args)
float TileStreamingDistance
float ActorActiveDistance
double MaxSubstepDeltaTime
TOptional< double > FixedDeltaSeconds