25 : Super(ObjectInitializer)
27 PrimaryActorTick.bCanEverTick =
true;
28 RandomEngine = CreateDefaultSubobject<URandomEngine>(TEXT(
"RandomEngine"));
36 Super::SetOwner(Owner);
38 if(Owner !=
nullptr) {
41 if (CarlaActor !=
nullptr) {
59 Super::EndPlay(EndPlayReason);
67 if (CarlaActor !=
nullptr) {
81 Super::Set(ActorDescription);
84 auto Channel = ActorDescription.
Variations.Find(
"channel_id");
85 if (Channel !=
nullptr)
92 const float ReceiverSensitivity,
93 const float Frequency,
94 const float combined_antenna_gain,
95 const float path_loss_exponent,
96 const float reference_distance_fspl,
97 const float filter_distance,
98 const bool use_etsi_fading,
99 const float custom_fading_stddev)
102 PathLossModelObj->SetParams(TransmitPower, ReceiverSensitivity, Frequency, combined_antenna_gain, path_loss_exponent, reference_distance_fspl, filter_distance, use_etsi_fading, custom_fading_stddev);
121 Super::PrePhysTick(DeltaSeconds);
131 LastMessagesResult->second.swap(NextMessagesResult->second);
160 std::vector<ActorPowerPair> ActorPowerList;
166 if ((pair.first.Actor !=
this) && (
mChannelId == pair.first.ChannelId))
170 if (pair.second.empty())
175 actor_power_pair.first = pair.first.Actor;
177 actor_power_pair.second = pair.second.front().Power;
178 ActorPowerList.push_back(actor_power_pair);
185 if (!ActorPowerList.empty())
194 for (
const auto &pair : actor_receivepower_map)
203 for (
const auto & send_msg_and_pw: sender_it->second)
207 received_msg_and_pw.
Message = send_msg_and_pw.Message;
209 received_msg_and_pw.
Power = pair.second;
220 DataStream.SerializeAndSend(*
this, v2XData, DataStream.PopBufferFromPool());
std::pair< AActor *, float > ActorPowerPair
std::map< AActor *, float > ActorPowerMap
std::list< carla::sensor::data::CustomV2XData > V2XDataList
void Set(const FActorDescription &ActorDescription) override
void SetOwner(AActor *Owner) override
void SetPathLossModel(const EPathLossModel path_loss_model)
std::map< SenderId, V2XDataList > ActorV2XDataMap
void SetPropagationParams(const float TransmitPower, const float ReceiverSensitivity, const float Frequency, const float combined_antenna_gain, const float path_loss_exponent, const float reference_distance_fspl, const float filter_distance, const bool use_etsi_fading, const float custom_fading_stddev)
static std::mutex v2xDataLock
virtual void PrePhysTick(float DeltaSeconds) override
void SetScenario(EScenario scenario)
static ActorV2XDataMap gActorV2XDataMapNextFrame
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
static FActorDefinition GetSensorDefinition()
void Send(const carla::rpc::CustomV2XBytes &data)
const long mProtocolVersion
virtual void PostPhysTick(UWorld *World, ELevelTick TickType, float DeltaTime) override
std::unique_ptr< PathLossModel > PathLossModelObj
ACustomV2XSensor(const FObjectInitializer &ObjectInitializer)
static ActorV2XDataMap gActorV2XDataMap
FAsyncDataStream GetDataStream(SensorType &&Self)
Return the FDataStream associated with this sensor.
URandomEngine * RandomEngine
Random Engine used to provide noise for sensor output.
A view over an actor and its properties.
IdType GetActorId() const
static FActorDefinition MakeCustomV2XDefinition()
static void SetCustomV2X(const FActorDescription &Description, ACustomV2XSensor *V2X)
FCarlaActor * FindCarlaActor(FCarlaActor::IdType ActorId)
Find a Carla actor by id.
static UCarlaEpisode * GetCurrentEpisode(const UObject *WorldContextObject)
Fixed-size binary payload carried by the custom V2X sensor (sensor.other.v2x_custom).
void WriteMessage(const CustomV2XData &message)
Adds a new message.
size_t GetMessageCount() const
Returns the number of currently received messages.
ITSContainer::ItsPduHeader_t header
carla::rpc::CustomV2XBytes data
A definition of a Carla Actor with all the variation and attributes.
A description of a Carla Actor with all its variation.
TMap< FString, FActorAttribute > Variations
User selected variations of the actor.