Agrarsense
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
ACollisionSensor Class Reference

#include <CollisionSensor.h>

Inheritance diagram for ACollisionSensor:
Inheritance graph
[legend]
Collaboration diagram for ACollisionSensor:
Collaboration graph
[legend]

Public Member Functions

 ACollisionSensor (const FObjectInitializer &ObjectInitializer)
 
void Init (AActor *NewOwner, bool SimulateSensor=true)
 
virtual ESensorTypes GetSensorType () const override
 
- Public Member Functions inherited from ASensor
 ASensor (const FObjectInitializer &ObjectInitializer)
 
FString ExportToJsonFile (const FString &FileName)
 
virtual ESensorTypes GetSensorType () const
 
FString GetSensorIdentifier () const
 
void SetSensorIdentifier (const FString newIdentifier)
 
FString GetSensorName () const
 
virtual FString GetParametersAsString () const
 
AVehicleIsAttachedToVehicle () const
 
void SetSensorName (const FString newName)
 
virtual FString GetTopicName ()
 
UTopic * GetROSTopic () const
 
void SetSimulateSensor (bool SimulateSensor)
 
bool CanSimulateSensor () const
 
ASensorModelGetSensorModel () const
 
void SetSensorModel (ASensorModel *NewSensorModel)
 
FORCEINLINE bool IsROSConnected () const
 
UROSIntegrationGameInstance * GetROSGameInstance () const
 
virtual FString GetActorID_Implementation () const override
 
virtual FString GetActorName_Implementation () const override
 
virtual FString GetActorInformation_Implementation () const override
 
virtual void SetActorName_Implementation (const FString &NewActorName) override
 
virtual void SetActorIDAndName_Implementation (const FString &NewActorName, const FString &NewID) override
 
void SetParentActorPtr (AActor *ParentActorPtr)
 
- Public Member Functions inherited from IActorInformation
FString GetActorID () const
 
FString GetActorName () const
 
FString GetActorInformation () const
 
void SetActorName (const FString &NewActorName)
 
void SetActorIDAndName (const FString &NewActorName, const FString &NewID)
 

Protected Member Functions

virtual void BeginPlay () override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
void CreateDataSavePath () override
 
void CreateLogFile () override
 
- Protected Member Functions inherited from ASensor
virtual void BeginPlay () override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
FString CreateTimeStampString () const
 
virtual void CreateROSTopic ()
 
virtual void DestroyROSTopic ()
 
virtual void CreateDataSavePath ()
 
bool IsLogFileCreated ()
 
virtual void CreateLogFile ()
 
void WriteToLogFile (const FString &Message)
 

Private Member Functions

void SendCollisionData (const FString &CollisionDataString)
 
void OnCollisionEvent (AActor *Actor, AActor *OtherActor, FVector NormalImpulse, const FHitResult &Hit)
 

Private Attributes

TWeakObjectPtr< AActor > CurrentOwner
 
TSharedPtr< ROSMessages::std_msgs::String > CollisionMessage
 

Additional Inherited Members

- Static Public Member Functions inherited from ASensor
static void HideComponentForAllCameras (UPrimitiveComponent *PrimitiveComponent)
 
static TMap< FString, FColor > GetSemanticColors ()
 
static TArray< TWeakObjectPtr< UPrimitiveComponent > > GetComponentsToHide ()
 
- Static Public Member Functions inherited from IActorInformation
static void SetAndValidateActorIDAndName (FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)
 
static bool DestroyActorByID (const FString &ID)
 
static AActor * GetActorByID (const FString &ID)
 
template<typename T >
static TArray< T * > GetActorsWithInterface ()
 
static void PrintAllIds ()
 
- Public Attributes inherited from ASensor
FSensorDestroy OnSensorDestroy
 
FString AttachedToComponent
 
FName AttachedToBone
 
- Static Protected Member Functions inherited from ASensor
template<typename InStructType >
static FString StructToString (const InStructType &InStruct)
 
- Protected Attributes inherited from ASensor
UTopic * ROSTopic = nullptr
 
bool SendDataToROS = true
 
ULogFileLogFile = nullptr
 
AActor * ParentActor = nullptr
 
FString FileSavePath
 
UROSIntegrationGameInstance * ROSInstance = nullptr
 
- Static Protected Attributes inherited from ASensor
static FPrimitiveAdded OnPrimitiveAdded
 
static const FName NiagaraPointsInt = "User.PointCount"
 
static const FName NiagaraHitPoints = "User.HitPoints"
 
static const FName NiagaraHitColors = "User.HitColors"
 
static const FName NiagaraPointsFloat = "User.Test"
 

Detailed Description

Collision sensor for vehicles.

Definition at line 39 of file CollisionSensor.h.

Constructor & Destructor Documentation

◆ ACollisionSensor()

ACollisionSensor::ACollisionSensor ( const FObjectInitializer &  ObjectInitializer)

Definition at line 12 of file CollisionSensor.cpp.

12 : Super(ObjectInitializer)
13{
14 PrimaryActorTick.bCanEverTick = false;
15}

Member Function Documentation

◆ BeginPlay()

void ACollisionSensor::BeginPlay ( )
overrideprotectedvirtual

Reimplemented from ASensor.

Definition at line 32 of file CollisionSensor.cpp.

33{
34 Super::BeginPlay();
35}

◆ CreateDataSavePath()

void ACollisionSensor::CreateDataSavePath ( )
overrideprotectedvirtual

Creates data save path for this sensor. Can be overriden if needed.

Reimplemented from ASensor.

Definition at line 85 of file CollisionSensor.cpp.

86{
87 if (!FileSavePath.IsEmpty())
88 {
89 return;
90 }
91
92 const FString DataLocation = UAgrarsensePaths::GetDataFolder();
93
94 // Default save path
95 FileSavePath = DataLocation + GetActorID_Implementation() + "/";
96
97 if (AVehicle* AttachedVehicle = IsAttachedToVehicle())
98 {
99 // If sensor is attached to vehicle, save data to vehicle folder
100 FileSavePath = DataLocation + AttachedVehicle->GetActorID_Implementation();
101 }
102}
AVehicle * IsAttachedToVehicle() const
Definition: Sensor.cpp:152
virtual FString GetActorID_Implementation() const override
Definition: Sensor.h:216
FString FileSavePath
Definition: Sensor.h:372
static FString GetDataFolder()

References ASensor::FileSavePath, ASensor::GetActorID_Implementation(), UAgrarsensePaths::GetDataFolder(), and ASensor::IsAttachedToVehicle().

Referenced by CreateLogFile().

◆ CreateLogFile()

void ACollisionSensor::CreateLogFile ( )
overrideprotectedvirtual

Create Text file for this sensor if it has not been created already. Text file will be created to ROOT/Data/Run/Logs directory. Filename will be SensorName_ID_UnixTimestamp.txt Can be overriden by individual sensor if needed.

Reimplemented from ASensor.

Definition at line 104 of file CollisionSensor.cpp.

105{
106 if (IsValid(LogFile))
107 {
108 // File has already been created, return
109 return;
110 }
111
113
114 FLogFileSettings Settings;
117 Settings.QueueLength = MAX_int32;
118 Settings.KeepFileOpen = false;
119 Settings.Timestamp = false;
120 Settings.OverrideFilePath = true;
121 Settings.FilePath = FileSavePath;
122
123 UE_LOG(LogTemp, Warning, TEXT("FileSavePath %s"), *FileSavePath);
124
125 LogFile = NewObject<ULogFile>(ULogFile::StaticClass());
126 if (IsValid(LogFile))
127 {
128 FString Prefix;
129 if (AVehicle* AttachedVehicle = IsAttachedToVehicle())
130 {
131 Prefix = AttachedVehicle->GetActorID_Implementation();
132 }
133 FString FileName = Prefix.IsEmpty() ? TEXT("collision") : Prefix + TEXT("_collision");
134
135 LogFile->Create(FileName, Settings);
136 }
137}
void CreateDataSavePath() override
ULogFile * LogFile
Definition: Sensor.h:367
void Create(const FString &FileNameWithoutExtension, FLogFileSettings Settings)
Definition: LogFile.cpp:40
bool KeepFileOpen
Definition: LogFile.h:42
bool Timestamp
Definition: LogFile.h:39
FString FilePath
Definition: LogFile.h:54
FFileWriteOptions FileWriteOptions
Definition: LogFile.h:45
int32 QueueLength
Definition: LogFile.h:48
bool OverrideFilePath
Definition: LogFile.h:51
FFileCreationOptions FileCreationOptions
Definition: LogFile.h:36

References ULogFile::Create(), CreateDataSavePath(), FLogFileSettings::FileCreationOptions, FLogFileSettings::FilePath, ASensor::FileSavePath, FLogFileSettings::FileWriteOptions, ASensor::IsAttachedToVehicle(), FLogFileSettings::KeepFileOpen, ASensor::LogFile, FLogFileSettings::OverrideFilePath, Overwrite, Queue, FLogFileSettings::QueueLength, and FLogFileSettings::Timestamp.

Referenced by Init().

◆ EndPlay()

void ACollisionSensor::EndPlay ( const EEndPlayReason::Type  EndPlayReason)
overrideprotectedvirtual

Reimplemented from ASensor.

Definition at line 37 of file CollisionSensor.cpp.

38{
39 Super::EndPlay(EndPlayReason);
40
41 if (CurrentOwner.IsValid())
42 {
43 CurrentOwner->OnActorHit.RemoveDynamic(this, &ACollisionSensor::OnCollisionEvent);
44 }
45
46 CurrentOwner.Reset();
47 CollisionMessage.Reset();
48}
TSharedPtr< ROSMessages::std_msgs::String > CollisionMessage
void OnCollisionEvent(AActor *Actor, AActor *OtherActor, FVector NormalImpulse, const FHitResult &Hit)
TWeakObjectPtr< AActor > CurrentOwner

References CollisionMessage, CurrentOwner, and OnCollisionEvent().

◆ GetSensorType()

virtual ESensorTypes ACollisionSensor::GetSensorType ( ) const
inlineoverridevirtual

Get type of the sensor

Returns
Sensor's type

Reimplemented from ASensor.

Definition at line 59 of file CollisionSensor.h.

60 {
62 }

References Collision.

◆ Init()

void ACollisionSensor::Init ( AActor *  NewOwner,
bool  SimulateSensor = true 
)

Initialize collision sensor.

Parameters
NewOwnerThe new owner actor to be set.
SimulateSensorWhether to simulate the sensor (default is true).

Definition at line 17 of file CollisionSensor.cpp.

18{
19 SetSimulateSensor(SimulateSensor);
20
21 if (NewOwner)
22 {
23 NewOwner->OnActorHit.AddDynamic(this, &ACollisionSensor::OnCollisionEvent);
24 CurrentOwner = NewOwner;
25 }
26 CollisionMessage = MakeShared<ROSMessages::std_msgs::String>();
27
30}
void CreateLogFile() override
void SetSimulateSensor(bool SimulateSensor)
Definition: Sensor.h:160
virtual void CreateROSTopic()
Definition: Sensor.cpp:190

References CollisionMessage, CreateLogFile(), ASensor::CreateROSTopic(), CurrentOwner, OnCollisionEvent(), and ASensor::SetSimulateSensor().

Referenced by USensorFactory::SpawnCollisionSensor().

◆ OnCollisionEvent()

void ACollisionSensor::OnCollisionEvent ( AActor *  Actor,
AActor *  OtherActor,
FVector  NormalImpulse,
const FHitResult &  Hit 
)
private

Definition at line 50 of file CollisionSensor.cpp.

51{
52 if (!CanSimulateSensor() || !Actor || !OtherActor)
53 {
54 return;
55 }
56
57 NormalImpulse *= 1e-2;
58 if (NormalImpulse.Size() > 200)
59 {
60 CollisionData Collisiondata =
61 {
62 Actor->GetName(),
63 OtherActor->GetName(),
64 NormalImpulse
65 };
66
67 SendCollisionData(Collisiondata.ToString());
68
69 FString MsgHumanReadable = Collisiondata.ToStringHumanReadable();
70 WriteToLogFile(MsgHumanReadable); // Log to separate file
71 SimulatorLog::Log(MsgHumanReadable); // Log to ROS info topic and Simulator log file
72 }
73}
void SendCollisionData(const FString &CollisionDataString)
bool CanSimulateSensor() const
Definition: Sensor.h:170
void WriteToLogFile(const FString &Message)
Definition: Sensor.cpp:294
static void Log(const FString &Message, bool LogToTextFile=true, bool LogToROS=true)
FString ToStringHumanReadable()
FString ToString()

References ASensor::CanSimulateSensor(), SimulatorLog::Log(), SendCollisionData(), CollisionData::ToString(), CollisionData::ToStringHumanReadable(), and ASensor::WriteToLogFile().

Referenced by EndPlay(), and Init().

◆ SendCollisionData()

void ACollisionSensor::SendCollisionData ( const FString &  CollisionDataString)
private

Definition at line 75 of file CollisionSensor.cpp.

76{
77 UTopic* Topic = GetROSTopic();
78 if (IsROSConnected() && CollisionMessage.IsValid() && Topic)
79 {
80 CollisionMessage->_Data = CollisionDataString;
81 Topic->Publish(CollisionMessage);
82 }
83}
UTopic * GetROSTopic() const
Definition: Sensor.h:150
FORCEINLINE bool IsROSConnected() const
Definition: Sensor.h:201

References CollisionMessage, ASensor::GetROSTopic(), and ASensor::IsROSConnected().

Referenced by OnCollisionEvent().

Member Data Documentation

◆ CollisionMessage

TSharedPtr<ROSMessages::std_msgs::String> ACollisionSensor::CollisionMessage
private

Definition at line 84 of file CollisionSensor.h.

Referenced by EndPlay(), Init(), and SendCollisionData().

◆ CurrentOwner

TWeakObjectPtr<AActor> ACollisionSensor::CurrentOwner
private

Definition at line 82 of file CollisionSensor.h.

Referenced by EndPlay(), and Init().


The documentation for this class was generated from the following files: