RapyutaSimulationPlugins
RRAIRobotROSController.h
Go to the documentation of this file.
1 
15 #pragma once
16 
17 
18 
19 // UE
20 
21 #include "AIController.h"
22 
23 #include "CoreMinimal.h"
24 
26 
27 
28 
29 #include "RRAIRobotROSController.generated.h"
30 
31 
32 
34 
35 
36 
37 DECLARE_DYNAMIC_DELEGATE(FMoveCompleteCallback);
38 
39 DECLARE_DELEGATE(FMoveCompleteCallbackStatic);
40 
41 
42 
56 enum class ERRAIRobotNavStatus : uint8
57 
58 {
59 
60  IDLE ,
61 
62  AI_MOVING ,
63 
64  LINEAR_MOVING ,
65 
66  ROTATING ,
67 
68 };
69 
70 
71 
85 enum class ERRAIRobotMode : uint8
86 
87 {
88 
89  BEGIN = 0 ,
90 
91 
92 
93  MANUAL = 1 ,
94 
95  SEQUENCE = 2 ,
96 
97  RANDOM_SEQUENCE = 3 ,
98 
99  RANDOM_AREA = 4 ,
100 
101 
102 
103  END = 100 ,
104 
105 };
106 
107 
108 
146 class RAPYUTASIMULATIONPLUGINS_API ARRAIRobotROSController : public ARRBaseRobotROSController
147 
148 {
149 
150 
151 
152 public:
153 
155 
156 
161  bool bDebug = false;
162 
163 
164 
166 
167 
172  float OrientationTolerance = 5.f;
173 
174 
175 
176 
181  float LinearMotionTolerance = 10.f;
182 
183 
184 
186 
187 
192  FRotator OrientationTarget = FRotator::ZeroRotator;
193 
194 
195 
197 
198 
203  FVector LinearMotionTarget = FVector::ZeroVector;
204 
205 
206 
208 
209 
214  bool bTeleportOnFail = true;
215 
216 
217 
219 
221 
223 
224 
229  virtual bool SetSpeed(const float InSpeed);
230 
231 
232 
234 
236 
237 
242  virtual bool SetRotationRate(const float InRotationRate);
243 
244 
245 
247 
248 
253  virtual bool SetAcceleration(const float InAcceleration);
254 
255 
256 
257  // ROS
258 
260 
261 
266  TObjectPtr<UROS2Publisher> NavStatusPublisher = nullptr;
267 
268 
269 
270 
275  float NavStatusPublicationFrequencyHz = 1;
276 
277 
278 
279 
284  FString SetSpeedTopicName = TEXT("set_speed");
285 
286 
287 
288 
293  FString SetAngularVelTopicName = TEXT("set_angular_vel");
294 
295 
296 
297 
302  FString SetModeTopicName = TEXT("set_mode");
303 
304 
305 
306 
311  FString NavStatusTopicName = TEXT("nav_status");
312 
313 
314 
315 
320  FString PoseGoalTopicName = TEXT("pose_goal");
321 
322 
323 
324 
329  FString ActorGoalTopicName = TEXT("actor_goal");
330 
331 
332 
333 
339 
340 
341 
343 
344 
349  FVector RandomMoveBoundingBox = FVector::OneVector;
350 
351 
352 
354 
355 
360  TArray<FTransform> GoalSequence;
361 
362 
363 
365 
366 
371  AActor* OriginActor = nullptr;
372 
373 
374 
376 
377 
382  FTransform Origin = FTransform::Identity;
383 
384 
385 
387 
388 
393  virtual FTransform GetOrigin();
394 
395 
396 
398 
399 
404  bool InitPropertiesFromJSON();
405 
406 
407 
408 protected:
409 
422  virtual void OnPossess(APawn* InPawn) override;
423 
424 
425 
436  virtual void OnUnPossess() override;
437 
438 
439 
440  virtual void OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult& Result) override;
441 
442 
443 
458 
459 
460 
461 
466  float RotationRate = 90.f;
467 
468 
469 
470 
475  float LinearSpeed = 100.f;
476 
477 
478 
479 
484  FVector AngularVelocity = FVector::ZeroVector;
485 
486 
487 
488 
494 
495 
496 
515  virtual void SetDelegates(const FMoveCompleteCallback& InOnSuccess,
516 
517  const FMoveCompleteCallback& InOnFail,
518 
519  const float InLinearMotionToleranc = -1.0,
520 
521  const float InOrientationTolerance = -1.0,
522 
523  const float InTimeOut = -1.0f,
524 
525  const bool Verbose = false);
526 
527 
528 
530 
531 
536  FMoveCompleteCallback OnSuccess;
537 
538 
539 
541 
542  FMoveCompleteCallbackStatic OnSuccessInternal;
543 
544 
545 
547 
548 
553  FMoveCompleteCallback OnFail;
554 
555 
556 
569  static ARRAIRobotROSController* CheckController(APawn* TargetPawn);
570 
571 
572 
605  virtual EPathFollowingRequestResult::Type MoveToActorWithDelegates(AActor* Goal,
606 
607  const FMoveCompleteCallback& InOnSuccess,
608 
609  const FMoveCompleteCallback& InOnFail,
610 
611  float AcceptanceRadius = -1,
612 
613  bool bStopOnOverlap = true,
614 
615  bool bUsePathfinding = true,
616 
617  bool bCanStrafe = true,
618 
619  TSubclassOf<UNavigationQueryFilter> FilterClass = NULL,
620 
621  bool bAllowPartialPath = true,
622 
623  const float InOrientationTolerance = -1.0,
624 
625  const float InTimeOut = -1.0);
626 
627 
628 
668  Category = "AI|Navigation",
669 
670  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
671 
672  static EPathFollowingRequestResult::Type MoveToActorWithDelegates(APawn* TargetPawn,
673 
674  AActor* Goal,
675 
676  const FMoveCompleteCallback& InOnSuccess,
677 
678  const FMoveCompleteCallback& InOnFail,
679 
680  float AcceptanceRadius = -1,
681 
682  bool bStopOnOverlap = true,
683 
684  bool bUsePathfinding = true,
685 
686  bool bCanStrafe = true,
687 
688  TSubclassOf<UNavigationQueryFilter> FilterClass = NULL,
689 
690  bool bAllowPartialPath = true,
691 
692  const float InOrientationTolerance = -1.0,
693 
694  const float InTimeOut = -1.0);
695 
696 
697 
738  virtual EPathFollowingRequestResult::Type MoveToLocationWithDelegates(const FVector& Dest,
739 
740  const FRotator& DestRotator,
741 
742  const FMoveCompleteCallback& InOnSuccess,
743 
744  const FMoveCompleteCallback& InOnFail,
745 
746  float AcceptanceRadius = -1,
747 
748  bool bStopOnOverlap = true,
749 
750  bool bUsePathfinding = true,
751 
752  bool bProjectDestinationToNavigation = false,
753 
754  bool bCanStrafe = true,
755 
756  TSubclassOf<UNavigationQueryFilter> FilterClass = NULL,
757 
758  bool bAllowPartialPath = true,
759 
760  const float InOrientationTolerance = -1.0,
761 
762  const float InTimeOut = -1.0,
763 
764  const FVector& InOriginPosition = FVector::ZeroVector,
765 
766  const FRotator& InOriginRotator = FRotator::ZeroRotator);
767 
768 
769 
770 
775  Category = "AI|Navigation",
776 
777  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
778 
821  static EPathFollowingRequestResult::Type MoveToLocationWithDelegates(APawn* TargetPawn,
822 
823  const FVector& Dest,
824 
825  const FRotator& DestRotator,
826 
827  const FMoveCompleteCallback& InOnSuccess,
828 
829  const FMoveCompleteCallback& InOnFail,
830 
831  float AcceptanceRadius = -1,
832 
833  bool bStopOnOverlap = true,
834 
835  bool bUsePathfinding = true,
836 
837  bool bProjectDestinationToNavigation = false,
838 
839  bool bCanStrafe = true,
840 
841  TSubclassOf<UNavigationQueryFilter> FilterClass = NULL,
842 
843  bool bAllowPartialPath = true,
844 
845  const float InOrientationTolerance = -1.0,
846 
847  const float InTimeOut = -1.0,
848 
849  const FVector& InOriginPosition = FVector::ZeroVector,
850 
851  const FRotator& InOriginRotator = FRotator::ZeroRotator);
852 
853 
854 
885  virtual bool LinearMoveToLocationWithDelegates(const FVector& Dest,
886 
887  const FRotator& DestRotator,
888 
889  const FMoveCompleteCallback& InOnSuccess,
890 
891  const FMoveCompleteCallback& InOnFail,
892 
893  float AcceptanceRadius = -1,
894 
895  const float InOrientationTolerance = -1.0,
896 
897  const float InTimeOut = -1.0,
898 
899  const FVector& InOriginPosition = FVector::ZeroVector,
900 
901  const FRotator& InOriginRotator = FRotator::ZeroRotator);
902 
903 
904 
942  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
943 
944  static bool LinearMoveToLocationWithDelegates(APawn* TargetPawn,
945 
946  const FVector& Dest,
947 
948  const FRotator& DestRotator,
949 
950  const FMoveCompleteCallback& InOnSuccess,
951 
952  const FMoveCompleteCallback& InOnFail,
953 
954  float AcceptanceRadius = -1,
955 
956  const float InOrientationTolerance = -1.0,
957 
958  const float InTimeOut = -1.0,
959 
960  const FVector& InOriginPosition = FVector::ZeroVector,
961 
962  const FRotator& InOriginRotator = FRotator::ZeroRotator);
963 
964 
965 
985  virtual bool HasReachedOrientationTarget(const float InOrientationTolerance = -1.0);
986 
987 
988 
1005  virtual bool HasReachedOrientationTarget(const FRotator InOrientationTarget, const float InOrientationTolerance = -1.0);
1006 
1007 
1008 
1027  virtual bool OrientationEquals(const FRotator InOrientationTarget1,
1028 
1029  const FRotator InOrientationTarget2,
1030 
1031  const float InOrientationTolerance = -1.0);
1032 
1033 
1034 
1054  virtual bool HasReachedLinearMotionTarget(const float InLinearMotionTolerance = -1.0);
1055 
1056 
1057 
1074  virtual bool HasReachedLinearMotionTarget(const FVector InLinearMotionTarget, const float InLinearMotionTolerance = -1.0);
1075 
1076 
1077 
1096  virtual bool PositionEquals(const FVector InLinearMotionTarget1,
1097 
1098  const FVector InLinearMotionTarget2,
1099 
1100  const float InLinearMotionTolerance = -1.0);
1101 
1102 
1103 
1122  virtual bool SetOrientationTarget(const FRotator& InOrientation,
1123 
1124  const bool InReset = true,
1125 
1126  const FRotator& InOriginRotator = FRotator::ZeroRotator);
1127 
1128 
1129 
1146  virtual bool AddLocalOrientationOffset(const FRotator& InOrientation, const bool InReset = true);
1147 
1148 
1149 
1175  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1176 
1177  static bool SetOrientationTarget(APawn* TargetPawn,
1178 
1179  const FRotator& InOrientation,
1180 
1181  const bool InReset = true,
1182 
1183  const FRotator& InOriginRotator = FRotator::ZeroRotator);
1184 
1185 
1186 
1210  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1211 
1212  static bool AddLocalOrientationOffset(APawn* TargetPawn, const FRotator& InOrientation, const bool InReset = true);
1213 
1214 
1215 
1240  virtual bool SetOrientationTargetWthDelegates(const FRotator& InOrientation,
1241 
1242  const FMoveCompleteCallback& InOnSuccess,
1243 
1244  const FMoveCompleteCallback& InOnFail,
1245 
1246  const float InOrientationTolerance = -1.0,
1247 
1248  const float InTimeOut = -1.0,
1249 
1250  const FRotator& InOriginRotator = FRotator::ZeroRotator);
1251 
1252 
1253 
1276  virtual bool AddLocalOrientationOffsetWthDelegates(const FRotator& InOrientation,
1277 
1278  const FMoveCompleteCallback& InOnSuccess,
1279 
1280  const FMoveCompleteCallback& InOnFail,
1281 
1282  const float InOrientationTolerance = -1.0,
1283 
1284  const float InTimeOut = -1.0);
1285 
1286 
1287 
1319  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1320 
1321  static bool SetOrientationTargetWthDelegates(APawn* TargetPawn,
1322 
1323  const FRotator& InOrientation,
1324 
1325  const FMoveCompleteCallback& InOnSuccess,
1326 
1327  const FMoveCompleteCallback& InOnFail,
1328 
1329  const float InOrientationTolerance = -1.0,
1330 
1331  const float InTimeOut = -1.0,
1332 
1333  const FRotator& InOriginRotator = FRotator::ZeroRotator);
1334 
1335 
1336 
1366  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1367 
1368  static bool AddLocalOrientationOffsetWthDelegates(APawn* TargetPawn,
1369 
1370  const FRotator& InOrientation,
1371 
1372  const FMoveCompleteCallback& InOnSuccess,
1373 
1374  const FMoveCompleteCallback& InOnFail,
1375 
1376  const float InOrientationTolerance = -1.0,
1377 
1378  const float InTimeOut = -1.0);
1379 
1380 
1381 
1402  virtual bool SetLinearMotionTarget(const FVector& InPosition,
1403 
1404  const bool InReset = true,
1405 
1406  const FVector& InOriginPosition = FVector::ZeroVector,
1407 
1408  const FRotator& InOriginRotator = FRotator::ZeroRotator);
1409 
1410 
1411 
1428  virtual bool AddLocalLinearMotionOffset(const FVector& InPosition, const bool InReset = true);
1429 
1430 
1431 
1459  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1460 
1461  static bool SetLinearMotionTarget(APawn* TargetPawn,
1462 
1463  const FVector& InPosition,
1464 
1465  const bool InReset = true,
1466 
1467  const FVector& InOriginPosition = FVector::ZeroVector,
1468 
1469  const FRotator& InOriginRotator = FRotator::ZeroRotator);
1470 
1471 
1472 
1496  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1497 
1498  static bool AddLocalLinearMotionOffset(APawn* TargetPawn, const FVector& InPosition, const bool InReset = true);
1499 
1500 
1501 
1528  virtual bool SetLinearMotionTargetWthDelegates(const FVector& InPosition,
1529 
1530  const FMoveCompleteCallback& InOnSuccess,
1531 
1532  const FMoveCompleteCallback& InOnFail,
1533 
1534  const float InLinearMotionTolerancee = -1.0,
1535 
1536  const float InTimeOut = -1.0,
1537 
1538  const FVector& InOriginPosition = FVector::ZeroVector,
1539 
1540  const FRotator& InOriginRotator = FRotator::ZeroRotator);
1541 
1542 
1543 
1566  virtual bool AddLocalLinearMotionOffsetWthDelegates(const FVector& InPosition,
1567 
1568  const FMoveCompleteCallback& InOnSuccess,
1569 
1570  const FMoveCompleteCallback& InOnFail,
1571 
1572  const float InLinearMotionTolerancee = -1.0,
1573 
1574  const float InTimeOut = -1.0);
1575 
1576 
1577 
1611  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1612 
1613  static bool SetLinearMotionTargetWthDelegates(APawn* TargetPawn,
1614 
1615  const FVector& InPosition,
1616 
1617  const FMoveCompleteCallback& InOnSuccess,
1618 
1619  const FMoveCompleteCallback& InOnFail,
1620 
1621  const float InLinearMotionTolerancee = -1.0,
1622 
1623  const float InTimeOut = -1.0,
1624 
1625  const FVector& InOriginPosition = FVector::ZeroVector,
1626 
1627  const FRotator& InOriginRotator = FRotator::ZeroRotator);
1628 
1629 
1630 
1660  meta = (DefaultToSelf = "TargetPawn", AdvancedDisplay = "bStopOnOverlap,bCanStrafe,bAllowPartialPath"))
1661 
1662  static bool AddLocalLinearMotionOffsetWthDelegates(APawn* TargetPawn,
1663 
1664  const FVector& InPosition,
1665 
1666  const FMoveCompleteCallback& InOnSuccess,
1667 
1668  const FMoveCompleteCallback& InOnFail,
1669 
1670  const float InLinearMotionTolerancee = -1.0,
1671 
1672  const float InTimeOut = -1.0);
1673 
1674 
1675 
1677 
1678  float MoveStartTime = 0.f;
1679 
1680 
1681 
1683 
1685 
1687 
1688 
1693  float MoveTimeout = -1.0f;
1694 
1695 
1696 
1697  virtual void Tick(float DeltaSeconds) override;
1698 
1699 
1700 
1711  virtual void UpdateControl(float DeltaSeconds);
1712 
1713 
1714 
1725  virtual void UpdateRotation(float DeltaSeconds);
1726 
1727 
1728 
1739  virtual void UpdateLinearMotion(float DeltaSeconds);
1740 
1741 
1742 
1756  virtual void ResetControl();
1757 
1758 
1759 
1775  virtual bool InProgress();
1776 
1777 
1778 
1779  // ROS
1780 
1782 
1783 
1788  FTimerHandle ROS2InitTimer;
1789 
1790 
1791 
1805  void InitROS2Interface();
1806 
1807 
1808 
1822  bool InitROS2InterfaceImpl();
1823 
1824 
1825 
1841  void UpdateNavStatus(UROS2GenericMsg* InMessage);
1842 
1843 
1844 
1860  void PoseGoalCallback(const UROS2GenericMsg* Msg);
1861 
1862 
1863 
1879  void ActorGoalCallback(const UROS2GenericMsg* Msg);
1880 
1881 
1882 
1898  void SetSpeedCallback(const UROS2GenericMsg* Msg);
1899 
1900 
1901 
1917  void SetAngularVelCallback(const UROS2GenericMsg* Msg);
1918 
1919 
1920 
1931  void SetModeCallback(const UROS2GenericMsg* Msg);
1932 
1933 
1934 
1935  // Mode variable
1936 
1938 
1939 
1944  int GoalIndex = 0;
1945 
1946 
1947 
1949 
1950 
1955  bool bModeUpdate = true;
1956 
1957 
1958 
1976  bool UpdateGoalSequenceIndex(FTransform& OutGoal);
1977 
1978 
1979 
1997  bool RandomUpdateGoalSequenceIndex(FTransform& OutGoal);
1998 
1999 
2000 
2014  virtual void ModeUpdate();
2015 
2016 };
2017 
DECLARE_DYNAMIC_DELEGATE
DECLARE_DYNAMIC_DELEGATE(FMoveCompleteCallback)
ERRAIRobotNavStatus
ERRAIRobotNavStatus
Robot navigation status.
Definition: RRAIRobotROSController.h:56
RRBaseRobotROSController.h
ARRBaseRobotROSController::OnUnPossess
virtual void OnUnPossess() override
Deinitialize robot pawn by calling URRBaseROS2Interface::DeInitialize or ARRBaseRobot::DeInitROS2Inte...
ARRAIRobotROSController::OnFail
FMoveCompleteCallback OnFail
Delegate which is called whenjoint failed to reach target vel/pose.
Definition: RRAIRobotROSController.h:553
ERRAIRobotNavStatus::AI_MOVING
@ AI_MOVING
UMETA(DisplayName = "AI moving"),.
ERRAIRobotNavStatus::IDLE
@ IDLE
UMETA(DisplayName = "Idle"),.
ERRRobotStatus::IDLE
@ IDLE
Being built up (loading the meshses, building the structure, etc.)
ERRAIRobotMode
ERRAIRobotMode
AI agent mode status.
Definition: RRAIRobotROSController.h:85
ARRAIRobotROSController::AIMovePositionTarget
FVector AIMovePositionTarget
Target position for AI movement.
Definition: RRAIRobotROSController.h:457
ARRBaseRobotROSController
Base Robot ROS controller class. Other robot controller class should inherit from this class.
Definition: RRBaseRobotROSController.h:56
ERRAIRobotNavStatus::LINEAR_MOVING
@ LINEAR_MOVING
UMETA(DisplayName = "Linear moving"),.
URRRobotROS2Interface
Base Robot ROS 2 interface class.
Definition: RRRobotROS2Interface.h:80
ERRAIRobotMode::END
@ END
UMETA(DisplayName = "End")
ERRAIRobotMode::RANDOM_AREA
@ RANDOM_AREA
UMETA(DisplayName = "Random Area"),.
ARRAIRobotROSController::ROS2InitTimer
FTimerHandle ROS2InitTimer
Timer to call InitROS2Interface.
Definition: RRAIRobotROSController.h:1788
DECLARE_DELEGATE
DECLARE_DELEGATE(FMoveCompleteCallbackStatic)
ERRAIRobotMode::MANUAL
@ MANUAL
UMETA(DisplayName = "Manual"),.
ERRAIRobotMode::SEQUENCE
@ SEQUENCE
UMETA(DisplayName = "Sequence"),.
ARRAIRobotROSController
Base Robot ROS controller class. Other robot controller class should inherit from this class.
Definition: RRAIRobotROSController.h:146
ERRAIRobotNavStatus::ROTATING
@ ROTATING
UMETA(DisplayName = "Rotating")
ERRAIRobotMode::BEGIN
@ BEGIN
UMETA(DisplayName = "Begin"),.
ERRAIRobotMode::RANDOM_SEQUENCE
@ RANDOM_SEQUENCE
UMETA(DisplayName = "Random Sequence"),.
ARRAIRobotROSController::OnSuccessInternal
FMoveCompleteCallbackStatic OnSuccessInternal
Delegate which is called on action completed internally.
Definition: RRAIRobotROSController.h:542
ARRAIRobotROSController::OnSuccess
FMoveCompleteCallback OnSuccess
Delegate which is called when joint reach target vel/pose.
Definition: RRAIRobotROSController.h:536
ARRAIRobotROSController::GoalSequence
TArray< FTransform > GoalSequence
Goal sequence. This is used when Mode is ERRAIRobotMode::SEQUENCE and ERRAIRobotMode::RANDOM_SEQUENCE...
Definition: RRAIRobotROSController.h:360
ARRBaseRobotROSController::OnPossess
virtual void OnPossess(APawn *InPawn) override
Initialize robot pawn by calling URRBaseROS2Interface::Initialize or ARRBaseRobot::InitROS2Interface.