RapyutaSimulationPlugins
RRPhysicsJointComponent.h
Go to the documentation of this file.
1 
13 #pragma once
14 
15 
16 
17 //UE
18 
19 #include "Components/ActorComponent.h"
20 
21 #include "CoreMinimal.h"
22 
23 #include "Kismet/KismetMathLibrary.h"
24 
25 // #include "Containers/EnumAsByte.h"
26 
27 #include <Containers/EnumAsByte.h>
28 
29 
30 
31 //RapyutaSimulationPlugins
32 
33 #include "Core/RRGeneralUtils.h"
34 
36 
37 
38 
39 //Thirdparty
40 
41 #include "two_points_interpolation_constant_acc.hpp"
42 
43 
44 
45 #include "RRPhysicsJointComponent.generated.h"
46 
47 
48 
64 class RAPYUTASIMULATIONPLUGINS_API URRPhysicsJointComponent : public URRJointComponent
65 
66 {
67 
68 
69 
70 public:
71 
72  // Sets default values for this component's properties
73 
75 
76 
77 
78 public:
79 
80  virtual bool IsValid() override;
81 
82 
83 
92  virtual void InitializeComponent() override;
93 
94 
95 
106  virtual void SetVelocity(const FVector& InLinearVelocity, const FVector& InAngularVelocity) override;
107 
108 
109 
120  virtual void SetVelocityTarget(const FVector& InLinearVelocity, const FVector& InAngularVelocity) override;
121 
122 
123 
134  virtual void SetPose(const FVector& InPosition, const FRotator& InOrientation) override;
135 
136 
137 
148  virtual void SetPoseTarget(const FVector& InPosition, const FRotator& InOrientation) override;
149 
150 
151 
166  virtual void Teleport(const FVector& InPosition, const FRotator& InOrientation) override;
167 
168 
169 
170  virtual void MoveToInitPose();
171 
172 
173 
185  virtual void SetJoint();
186 
187 
188 
190 
191 
196  UPhysicsConstraintComponent* Constraint = nullptr;
197 
198 
199 
201 
203 
205 
206 
211  bool bSmoothing = false;
212 
213 
214 
216 
217 
222  float Kvp = 10.f;
223 
224 
225 
227 
228 
233  float Kva = 10.f;
234 
235 
236 
238 
239 
244  float Kip = 0.f;
245 
246 
247 
249 
250 
255  float Kia = 0.f;
256 
257 
258 
260 
261 
266  float LinearVelocitySmoothingAcc = 10.f;
267 
268 
269 
271 
272 
277  float AngularVelocitySmoothingAcc = 10.f;
278 
279 
280 
282 
283 
288  float LinearSpring = 1000;
289 
290 
291 
293 
294 
299  float LinearDamper = 10;
300 
301 
302 
304 
305 
310  float LinearForceLimit = UE_BIG_NUMBER;
311 
312 
313 
315 
316 
321  float AngularSpring = 100000;
322 
323 
324 
326 
327 
332  float AngularDamper = 10000;
333 
334 
335 
337 
338 
343  float AngularForceLimit = UE_BIG_NUMBER;
344 
345 
346 
348 
350 
351 
356  bool bManualConstraintSetting = false;
357 
358 
359 
360 protected:
361 
363 
364 
369  FVector MidLinearVelocityTarget = FVector::ZeroVector;
370 
371 
372 
374 
375 
380  FVector MidAngularVelocityTarget = FVector::ZeroVector;
381 
382 
383 
385 
386 
391  FVector MidPositionTarget = FVector::ZeroVector;
392 
393 
394 
396 
397 
402  FRotator MidOrientationTarget = FRotator::ZeroRotator;
403 
404 
405 
406  virtual void UpdateState(const float DeltaTime) override;
407 
408 
409 
410  virtual void UpdateControl(const float DeltaTime) override;
411 
412 
413 
414 
435  virtual void UpdateIntegral(const FVector& InPositionDiff, const FVector& InOrientationDiff, const float DeltaTime);
436 
437 
438 
456  virtual void UpdateVelocityTargetFromPose(const FVector InPositionDiff, const FVector InOrientationDiff);
457 
458 
459 
477  virtual FRotator GetOrientationTargetFromEuler(const FVector& InOrientationTarget);
478 
479 
480 
482 
483  TStaticArray<TwoPointInterpolation, 3> PositionTPI;
484 
485 
486 
488 
489  TStaticArray<TwoAngleInterpolation, 3> OrientationTPI;
490 
491 
492 
494 
495 
500  FVector PErrInt = FVector::ZeroVector;
501 
502 
503 
505 
506 
511  FVector AErrInt = FVector::ZeroVector;
512 
513 };
514 
URRJointComponent::SetVelocityTarget
virtual void SetVelocityTarget(const FVector &InLinearVelocity, const FVector &InAngularVelocity)
Set velocity target.
URRJointComponent::UpdateControl
virtual void UpdateControl(const float DeltaTime)
RRJointComponent.h
URRJointComponent::SetPose
virtual void SetPose(const FVector &InPosition, const FRotator &InOrientation)
Directly set pose.
URRPhysicsJointComponent::OrientationTPI
TStaticArray< TwoAngleInterpolation, 3 > OrientationTPI
Angular Two Point Interpolation used with bSmoothing = true.
Definition: RRPhysicsJointComponent.h:489
URRJointComponent::SetVelocity
virtual void SetVelocity(const FVector &InLinearVelocity, const FVector &InAngularVelocity)
Directly set velocity.
URRJointComponent
Base Joints class. Other joint class should inherit from this class.
Definition: RRJointComponent.h:81
URRJointComponent::MoveToInitPose
virtual void MoveToInitPose()
URRJointComponent::UpdateState
virtual void UpdateState(const float DeltaTime)
URRJointComponent::InitializeComponent
virtual void InitializeComponent() override
Initialize JointToChildLink and ParentLinkToJoint.
URRJointComponent::Teleport
virtual void Teleport(const FVector &InPosition, const FRotator &InOrientation)
Teleport robot to given pose. Implementation is in child class.
URRPhysicsJointComponent
Physics Joint component.
Definition: RRPhysicsJointComponent.h:64
RRGeneralUtils.h
General utils.
URRJointComponent::IsValid
virtual bool IsValid()
URRJointComponent::SetPoseTarget
virtual void SetPoseTarget(const FVector &InPosition, const FRotator &InOrientation)
Set Pose Target.
URRPhysicsJointComponent::PositionTPI
TStaticArray< TwoPointInterpolation, 3 > PositionTPI
Position Two Point Interpolation used with bSmoothing = true.
Definition: RRPhysicsJointComponent.h:483