21 #include "AIController.h"
23 #include "CoreMinimal.h"
29 #include "RRAIRobotROSController.generated.h"
172 float OrientationTolerance = 5.f;
181 float LinearMotionTolerance = 10.f;
192 FRotator OrientationTarget = FRotator::ZeroRotator;
203 FVector LinearMotionTarget = FVector::ZeroVector;
214 bool bTeleportOnFail =
true;
229 virtual bool SetSpeed(
const float InSpeed);
242 virtual bool SetRotationRate(
const float InRotationRate);
253 virtual bool SetAcceleration(
const float InAcceleration);
266 TObjectPtr<UROS2Publisher> NavStatusPublisher =
nullptr;
275 float NavStatusPublicationFrequencyHz = 1;
284 FString SetSpeedTopicName = TEXT(
"set_speed");
293 FString SetAngularVelTopicName = TEXT(
"set_angular_vel");
302 FString SetModeTopicName = TEXT(
"set_mode");
311 FString NavStatusTopicName = TEXT(
"nav_status");
320 FString PoseGoalTopicName = TEXT(
"pose_goal");
329 FString ActorGoalTopicName = TEXT(
"actor_goal");
349 FVector RandomMoveBoundingBox = FVector::OneVector;
371 AActor* OriginActor =
nullptr;
382 FTransform Origin = FTransform::Identity;
393 virtual FTransform GetOrigin();
404 bool InitPropertiesFromJSON();
422 virtual void OnPossess(APawn* InPawn)
override;
440 virtual void OnMoveCompleted(FAIRequestID RequestID,
const FPathFollowingResult& Result)
override;
466 float RotationRate = 90.f;
475 float LinearSpeed = 100.f;
484 FVector AngularVelocity = FVector::ZeroVector;
515 virtual void SetDelegates(
const FMoveCompleteCallback& InOnSuccess,
517 const FMoveCompleteCallback& InOnFail,
519 const float InLinearMotionToleranc = -1.0,
521 const float InOrientationTolerance = -1.0,
523 const float InTimeOut = -1.0f,
525 const bool Verbose =
false);
605 virtual EPathFollowingRequestResult::Type MoveToActorWithDelegates(AActor* Goal,
607 const FMoveCompleteCallback& InOnSuccess,
609 const FMoveCompleteCallback& InOnFail,
611 float AcceptanceRadius = -1,
613 bool bStopOnOverlap =
true,
615 bool bUsePathfinding =
true,
617 bool bCanStrafe =
true,
619 TSubclassOf<UNavigationQueryFilter> FilterClass = NULL,
621 bool bAllowPartialPath =
true,
623 const float InOrientationTolerance = -1.0,
625 const float InTimeOut = -1.0);
668 Category =
"AI|Navigation",
670 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
672 static EPathFollowingRequestResult::Type MoveToActorWithDelegates(APawn* TargetPawn,
676 const FMoveCompleteCallback& InOnSuccess,
678 const FMoveCompleteCallback& InOnFail,
680 float AcceptanceRadius = -1,
682 bool bStopOnOverlap =
true,
684 bool bUsePathfinding =
true,
686 bool bCanStrafe =
true,
688 TSubclassOf<UNavigationQueryFilter> FilterClass = NULL,
690 bool bAllowPartialPath =
true,
692 const float InOrientationTolerance = -1.0,
694 const float InTimeOut = -1.0);
738 virtual EPathFollowingRequestResult::Type MoveToLocationWithDelegates(
const FVector& Dest,
740 const FRotator& DestRotator,
742 const FMoveCompleteCallback& InOnSuccess,
744 const FMoveCompleteCallback& InOnFail,
746 float AcceptanceRadius = -1,
748 bool bStopOnOverlap =
true,
750 bool bUsePathfinding =
true,
752 bool bProjectDestinationToNavigation =
false,
754 bool bCanStrafe =
true,
756 TSubclassOf<UNavigationQueryFilter> FilterClass = NULL,
758 bool bAllowPartialPath =
true,
760 const float InOrientationTolerance = -1.0,
762 const float InTimeOut = -1.0,
764 const FVector& InOriginPosition = FVector::ZeroVector,
766 const FRotator& InOriginRotator = FRotator::ZeroRotator);
775 Category =
"AI|Navigation",
777 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
821 static EPathFollowingRequestResult::Type MoveToLocationWithDelegates(APawn* TargetPawn,
825 const FRotator& DestRotator,
827 const FMoveCompleteCallback& InOnSuccess,
829 const FMoveCompleteCallback& InOnFail,
831 float AcceptanceRadius = -1,
833 bool bStopOnOverlap =
true,
835 bool bUsePathfinding =
true,
837 bool bProjectDestinationToNavigation =
false,
839 bool bCanStrafe =
true,
841 TSubclassOf<UNavigationQueryFilter> FilterClass = NULL,
843 bool bAllowPartialPath =
true,
845 const float InOrientationTolerance = -1.0,
847 const float InTimeOut = -1.0,
849 const FVector& InOriginPosition = FVector::ZeroVector,
851 const FRotator& InOriginRotator = FRotator::ZeroRotator);
885 virtual bool LinearMoveToLocationWithDelegates(
const FVector& Dest,
887 const FRotator& DestRotator,
889 const FMoveCompleteCallback& InOnSuccess,
891 const FMoveCompleteCallback& InOnFail,
893 float AcceptanceRadius = -1,
895 const float InOrientationTolerance = -1.0,
897 const float InTimeOut = -1.0,
899 const FVector& InOriginPosition = FVector::ZeroVector,
901 const FRotator& InOriginRotator = FRotator::ZeroRotator);
942 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
944 static bool LinearMoveToLocationWithDelegates(APawn* TargetPawn,
948 const FRotator& DestRotator,
950 const FMoveCompleteCallback& InOnSuccess,
952 const FMoveCompleteCallback& InOnFail,
954 float AcceptanceRadius = -1,
956 const float InOrientationTolerance = -1.0,
958 const float InTimeOut = -1.0,
960 const FVector& InOriginPosition = FVector::ZeroVector,
962 const FRotator& InOriginRotator = FRotator::ZeroRotator);
985 virtual bool HasReachedOrientationTarget(
const float InOrientationTolerance = -1.0);
1005 virtual bool HasReachedOrientationTarget(
const FRotator InOrientationTarget,
const float InOrientationTolerance = -1.0);
1027 virtual bool OrientationEquals(
const FRotator InOrientationTarget1,
1029 const FRotator InOrientationTarget2,
1031 const float InOrientationTolerance = -1.0);
1054 virtual bool HasReachedLinearMotionTarget(
const float InLinearMotionTolerance = -1.0);
1074 virtual bool HasReachedLinearMotionTarget(
const FVector InLinearMotionTarget,
const float InLinearMotionTolerance = -1.0);
1096 virtual bool PositionEquals(
const FVector InLinearMotionTarget1,
1098 const FVector InLinearMotionTarget2,
1100 const float InLinearMotionTolerance = -1.0);
1122 virtual bool SetOrientationTarget(
const FRotator& InOrientation,
1124 const bool InReset =
true,
1126 const FRotator& InOriginRotator = FRotator::ZeroRotator);
1146 virtual bool AddLocalOrientationOffset(
const FRotator& InOrientation,
const bool InReset =
true);
1175 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1177 static bool SetOrientationTarget(APawn* TargetPawn,
1179 const FRotator& InOrientation,
1181 const bool InReset =
true,
1183 const FRotator& InOriginRotator = FRotator::ZeroRotator);
1210 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1212 static bool AddLocalOrientationOffset(APawn* TargetPawn,
const FRotator& InOrientation,
const bool InReset =
true);
1240 virtual bool SetOrientationTargetWthDelegates(
const FRotator& InOrientation,
1242 const FMoveCompleteCallback& InOnSuccess,
1244 const FMoveCompleteCallback& InOnFail,
1246 const float InOrientationTolerance = -1.0,
1248 const float InTimeOut = -1.0,
1250 const FRotator& InOriginRotator = FRotator::ZeroRotator);
1276 virtual bool AddLocalOrientationOffsetWthDelegates(
const FRotator& InOrientation,
1278 const FMoveCompleteCallback& InOnSuccess,
1280 const FMoveCompleteCallback& InOnFail,
1282 const float InOrientationTolerance = -1.0,
1284 const float InTimeOut = -1.0);
1319 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1321 static bool SetOrientationTargetWthDelegates(APawn* TargetPawn,
1323 const FRotator& InOrientation,
1325 const FMoveCompleteCallback& InOnSuccess,
1327 const FMoveCompleteCallback& InOnFail,
1329 const float InOrientationTolerance = -1.0,
1331 const float InTimeOut = -1.0,
1333 const FRotator& InOriginRotator = FRotator::ZeroRotator);
1366 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1368 static bool AddLocalOrientationOffsetWthDelegates(APawn* TargetPawn,
1370 const FRotator& InOrientation,
1372 const FMoveCompleteCallback& InOnSuccess,
1374 const FMoveCompleteCallback& InOnFail,
1376 const float InOrientationTolerance = -1.0,
1378 const float InTimeOut = -1.0);
1402 virtual bool SetLinearMotionTarget(
const FVector& InPosition,
1404 const bool InReset =
true,
1406 const FVector& InOriginPosition = FVector::ZeroVector,
1408 const FRotator& InOriginRotator = FRotator::ZeroRotator);
1428 virtual bool AddLocalLinearMotionOffset(
const FVector& InPosition,
const bool InReset =
true);
1459 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1461 static bool SetLinearMotionTarget(APawn* TargetPawn,
1463 const FVector& InPosition,
1465 const bool InReset =
true,
1467 const FVector& InOriginPosition = FVector::ZeroVector,
1469 const FRotator& InOriginRotator = FRotator::ZeroRotator);
1496 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1498 static bool AddLocalLinearMotionOffset(APawn* TargetPawn,
const FVector& InPosition,
const bool InReset =
true);
1528 virtual bool SetLinearMotionTargetWthDelegates(
const FVector& InPosition,
1530 const FMoveCompleteCallback& InOnSuccess,
1532 const FMoveCompleteCallback& InOnFail,
1534 const float InLinearMotionTolerancee = -1.0,
1536 const float InTimeOut = -1.0,
1538 const FVector& InOriginPosition = FVector::ZeroVector,
1540 const FRotator& InOriginRotator = FRotator::ZeroRotator);
1566 virtual bool AddLocalLinearMotionOffsetWthDelegates(
const FVector& InPosition,
1568 const FMoveCompleteCallback& InOnSuccess,
1570 const FMoveCompleteCallback& InOnFail,
1572 const float InLinearMotionTolerancee = -1.0,
1574 const float InTimeOut = -1.0);
1611 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1613 static bool SetLinearMotionTargetWthDelegates(APawn* TargetPawn,
1615 const FVector& InPosition,
1617 const FMoveCompleteCallback& InOnSuccess,
1619 const FMoveCompleteCallback& InOnFail,
1621 const float InLinearMotionTolerancee = -1.0,
1623 const float InTimeOut = -1.0,
1625 const FVector& InOriginPosition = FVector::ZeroVector,
1627 const FRotator& InOriginRotator = FRotator::ZeroRotator);
1660 meta = (DefaultToSelf =
"TargetPawn", AdvancedDisplay =
"bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1662 static bool AddLocalLinearMotionOffsetWthDelegates(APawn* TargetPawn,
1664 const FVector& InPosition,
1666 const FMoveCompleteCallback& InOnSuccess,
1668 const FMoveCompleteCallback& InOnFail,
1670 const float InLinearMotionTolerancee = -1.0,
1672 const float InTimeOut = -1.0);
1678 float MoveStartTime = 0.f;
1693 float MoveTimeout = -1.0f;
1697 virtual void Tick(
float DeltaSeconds)
override;
1711 virtual void UpdateControl(
float DeltaSeconds);
1725 virtual void UpdateRotation(
float DeltaSeconds);
1739 virtual void UpdateLinearMotion(
float DeltaSeconds);
1756 virtual void ResetControl();
1775 virtual bool InProgress();
1805 void InitROS2Interface();
1822 bool InitROS2InterfaceImpl();
1841 void UpdateNavStatus(UROS2GenericMsg* InMessage);
1860 void PoseGoalCallback(
const UROS2GenericMsg* Msg);
1879 void ActorGoalCallback(
const UROS2GenericMsg* Msg);
1898 void SetSpeedCallback(
const UROS2GenericMsg* Msg);
1917 void SetAngularVelCallback(
const UROS2GenericMsg* Msg);
1931 void SetModeCallback(
const UROS2GenericMsg* Msg);
1955 bool bModeUpdate =
true;
1976 bool UpdateGoalSequenceIndex(FTransform& OutGoal);
1997 bool RandomUpdateGoalSequenceIndex(FTransform& OutGoal);
2014 virtual void ModeUpdate();