21 : Super(ObjectInitializer)
23 PrimaryActorTick.bCanEverTick =
true;
30 return SensorDefinition;
36 Super::Set(Description);
49#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
60 const FVector &Start = GetActorLocation();
61 const FVector &End = Start + (GetActorForwardVector() *
Distance);
62 UWorld* CurrentWorld = GetWorld();
65 FHitResult HitOut = FHitResult();
68 FCollisionQueryParams TraceParams(FName(TEXT(
"ObstacleDetection Trace")),
true,
this);
70#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
74 const FName TraceTag(
"ObstacleDebugTrace");
75 CurrentWorld->DebugDrawTraceTag = TraceTag;
76 TraceParams.TraceTag = TraceTag;
81 TraceParams.bTraceComplex =
true;
84 TraceParams.bIgnoreTouches =
true;
87 TraceParams.bReturnPhysicalMaterial =
false;
90 TraceParams.AddIgnoredActor(
this);
91 if(Super::GetOwner()!=
nullptr)
92 TraceParams.AddIgnoredActor(Super::GetOwner());
100 FCollisionObjectQueryParams TraceChannel = FCollisionObjectQueryParams(
101 FCollisionObjectQueryParams::AllDynamicObjects);
102 isHitReturned = CurrentWorld->SweepSingleByObjectType(
114 ECollisionChannel TraceChannel = ECC_WorldStatic;
115 isHitReturned = CurrentWorld->SweepSingleByChannel(
135 const FHitResult &Hit)
144 #if defined(WITH_ROS2)
146 if (ROS2->IsEnabled())
148 TRACE_CPUPROFILER_EVENT_SCOPE_STR(
"ROS2 Send");
150 AActor* ParentActor = GetAttachParentActor();
153 FTransform LocalTransformRelativeToParent = GetActorTransform().GetRelativeTransform(ParentActor->GetActorTransform());
154 ROS2->ProcessDataFromObstacleDetection(DataStream.GetSensorType(), StreamId, LocalTransformRelativeToParent,
Actor, OtherActor, HitDistance/100.0f,
this);
158 ROS2->ProcessDataFromObstacleDetection(DataStream.GetSensorType(), StreamId, DataStream.GetSensorTransform(),
Actor, OtherActor, HitDistance/100.0f,
this);
163 DataStream.SerializeAndSend(*
this,
165 Episode.SerializeActor(OtherActor),
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld * World
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld Actor
void Set(const FActorDescription &Description) override
void OnObstacleDetectionEvent(AActor *Actor, AActor *OtherActor, float Distance, const FHitResult &Hit)
AObstacleDetectionSensor(const FObjectInitializer &ObjectInitializer)
virtual void PostPhysTick(UWorld *World, ELevelTick TickType, float DeltaSeconds) override
static FActorDefinition GetSensorDefinition()
auto GetToken() const
Return the token that allows subscribing to this sensor's stream.
FAsyncDataStream GetDataStream(const SensorT &Self)
Return the FDataStream associated with this sensor.
const UCarlaEpisode * Episode
const UCarlaEpisode & GetEpisode() const
static bool RetrieveActorAttributeToBool(const FString &Id, const TMap< FString, FActorAttribute > &Attributes, bool Default)
从参与者属性映射中检索布尔值,如果不存在则返回默认值。
static float RetrieveActorAttributeToFloat(const FString &Id, const TMap< FString, FActorAttribute > &Attributes, float Default)
static void MakeObstacleDetectorDefinitions(const FString &Type, const FString &Id, FActorDefinition &Definition)
static std::shared_ptr< ROS2 > GetInstance()
静态断言,用于确保token_data结构体的大小与Token::data的大小相同。
const auto & get_stream_id() const
获取流ID的引用。
TMap< FString, FActorAttribute > Variations
用户选择了参与者的变化版本。请注意,此时是 由不可修改的属性表示