DART 6.12.2
Loading...
Searching...
No Matches
PointMass.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011-2021, The DART development contributors
3 * All rights reserved.
4 *
5 * The list of contributors can be found at:
6 * https://github.com/dartsim/dart/blob/master/LICENSE
7 *
8 * This file is provided under the following "BSD-style" License:
9 * Redistribution and use in source and binary forms, with or
10 * without modification, are permitted provided that the following
11 * conditions are met:
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#ifndef DART_DYNAMICS_POINTMASS_HPP_
34#define DART_DYNAMICS_POINTMASS_HPP_
35
36#include <vector>
37
38#include <Eigen/Dense>
39
41#include "dart/math/Helpers.hpp"
42
43namespace dart {
44namespace dynamics {
45
46class EllipsoidShape;
47class SoftBodyNode;
48
49class PointMassNotifier;
50
53{
54public:
55 friend class SoftBodyNode;
56
58 struct State
59 {
61 Eigen::Vector3d mPositions;
62
64 Eigen::Vector3d mVelocities;
65
67 Eigen::Vector3d mAccelerations;
68
70 Eigen::Vector3d mForces;
71
73 State(
74 const Eigen::Vector3d& positions = Eigen::Vector3d::Zero(),
75 const Eigen::Vector3d& velocities = Eigen::Vector3d::Zero(),
76 const Eigen::Vector3d& accelerations = Eigen::Vector3d::Zero(),
77 const Eigen::Vector3d& forces = Eigen::Vector3d::Zero());
78
79 bool operator==(const State& other) const;
80
81 virtual ~State() = default;
82 };
83
86 {
88 Eigen::Vector3d mX0;
89
91 double mMass;
92
94 std::vector<std::size_t> mConnectedPointMassIndices;
95
97 Eigen::Vector3d mPositionLowerLimits; // Currently unused
98
100 Eigen::Vector3d mPositionUpperLimits; // Currently unused
101
103 Eigen::Vector3d mVelocityLowerLimits; // Currently unused
104
106 Eigen::Vector3d mVelocityUpperLimits; // Currently unused
107
109 Eigen::Vector3d mAccelerationLowerLimits; // Currently unused
110
112 Eigen::Vector3d mAccelerationUpperLimits; // Currently unused
113
115 Eigen::Vector3d mForceLowerLimits; // Currently unused
116
118 Eigen::Vector3d mForceUpperLimits; // Currently unused
119
121 const Eigen::Vector3d& _X0 = Eigen::Vector3d::Zero(),
122 double _mass = 0.0005,
123 const std::vector<std::size_t>& _connections
124 = std::vector<std::size_t>(),
125 const Eigen::Vector3d& _positionLowerLimits
126 = Eigen::Vector3d::Constant(-math::constantsd::inf()),
127 const Eigen::Vector3d& _positionUpperLimits
128 = Eigen::Vector3d::Constant(math::constantsd::inf()),
129 const Eigen::Vector3d& _velocityLowerLimits
130 = Eigen::Vector3d::Constant(-math::constantsd::inf()),
131 const Eigen::Vector3d& _velocityUpperLimits
132 = Eigen::Vector3d::Constant(math::constantsd::inf()),
133 const Eigen::Vector3d& _accelerationLowerLimits
134 = Eigen::Vector3d::Constant(-math::constantsd::inf()),
135 const Eigen::Vector3d& _accelerationUpperLimits
136 = Eigen::Vector3d::Constant(math::constantsd::inf()),
137 const Eigen::Vector3d& _forceLowerLimits
138 = Eigen::Vector3d::Constant(-math::constantsd::inf()),
139 const Eigen::Vector3d& _forceUpperLimits
140 = Eigen::Vector3d::Constant(math::constantsd::inf()));
141
142 void setRestingPosition(const Eigen::Vector3d& _x);
143
144 void setMass(double _mass);
145
146 bool operator==(const Properties& other) const;
147
148 bool operator!=(const Properties& other) const;
149
150 virtual ~Properties() = default;
151 };
152
153 //--------------------------------------------------------------------------
154 // Constructor and Desctructor
155 //--------------------------------------------------------------------------
156
158 virtual ~PointMass();
159
161 State& getState();
162
164 const State& getState() const;
165
167 std::size_t getIndexInSoftBodyNode() const;
168
170 void setMass(double _mass);
171
173 double getMass() const;
174
176 double getPsi() const;
177
179 double getImplicitPsi() const;
180
182 double getPi() const;
183
185 double getImplicitPi() const;
186
188 void addConnectedPointMass(PointMass* _pointMass);
189
191 std::size_t getNumConnectedPointMasses() const;
192
194 PointMass* getConnectedPointMass(std::size_t _idx);
195
197 const PointMass* getConnectedPointMass(std::size_t _idx) const;
198
203 void setColliding(bool _isColliding);
204
207 bool isColliding();
208
209 //----------------------------------------------------------------------------
210
211 // Documentation inherited
212 std::size_t getNumDofs() const;
213
214 // // Documentation inherited
215 // void setIndexInSkeleton(std::size_t _index, std::size_t _indexInSkeleton);
216
217 // // Documentation inherited
218 // std::size_t getIndexInSkeleton(std::size_t _index) const;
219
220 //----------------------------------------------------------------------------
221 // Position
222 //----------------------------------------------------------------------------
223
224 // Documentation inherited
225 void setPosition(std::size_t _index, double _position);
226
227 // Documentation inherited
228 double getPosition(std::size_t _index) const;
229
230 // Documentation inherited
231 void setPositions(const Eigen::Vector3d& _positions);
232
233 // Documentation inherited
234 const Eigen::Vector3d& getPositions() const;
235
236 // Documentation inherited
237 void resetPositions();
238
239 //----------------------------------------------------------------------------
240 // Velocity
241 //----------------------------------------------------------------------------
242
243 // Documentation inherited
244 void setVelocity(std::size_t _index, double _velocity);
245
246 // Documentation inherited
247 double getVelocity(std::size_t _index) const;
248
249 // Documentation inherited
250 void setVelocities(const Eigen::Vector3d& _velocities);
251
252 // Documentation inherited
253 const Eigen::Vector3d& getVelocities() const;
254
255 // Documentation inherited
256 void resetVelocities();
257
258 //----------------------------------------------------------------------------
259 // Acceleration
260 //----------------------------------------------------------------------------
261
262 // Documentation inherited
263 void setAcceleration(std::size_t _index, double _acceleration);
264
265 // Documentation inherited
266 double getAcceleration(std::size_t _index) const;
267
268 // Documentation inherited
269 void setAccelerations(const Eigen::Vector3d& _accelerations);
270
271 // Documentation inherited
272 const Eigen::Vector3d& getAccelerations() const;
273
275 const Eigen::Vector3d& getPartialAccelerations() const;
276
277 // Documentation inherited
278 void resetAccelerations();
279
280 //----------------------------------------------------------------------------
281 // Force
282 //----------------------------------------------------------------------------
283
284 // Documentation inherited
285 void setForce(std::size_t _index, double _force);
286
287 // Documentation inherited
288 double getForce(std::size_t _index);
289
290 // Documentation inherited
291 void setForces(const Eigen::Vector3d& _forces);
292
293 // Documentation inherited
294 const Eigen::Vector3d& getForces() const;
295
296 // Documentation inherited
297 void resetForces();
298
299 //----------------------------------------------------------------------------
300 // Velocity change
301 //----------------------------------------------------------------------------
302
303 // Documentation inherited
304 void setVelocityChange(std::size_t _index, double _velocityChange);
305
306 // Documentation inherited
307 double getVelocityChange(std::size_t _index);
308
309 // Documentation inherited
311
312 //----------------------------------------------------------------------------
313 // Constraint impulse
314 //----------------------------------------------------------------------------
315
316 // Documentation inherited
317 void setConstraintImpulse(std::size_t _index, double _impulse);
318
319 // Documentation inherited
320 double getConstraintImpulse(std::size_t _index);
321
322 // Documentation inherited
324
325 //----------------------------------------------------------------------------
326 // Integration
327 //----------------------------------------------------------------------------
328
329 // Documentation inherited
330 void integratePositions(double _dt);
331
332 // Documentation inherited
333 void integrateVelocities(double _dt);
334
335 //----------------------------------------------------------------------------
336
342 void addExtForce(const Eigen::Vector3d& _force, bool _isForceLocal = false);
343
345 void clearExtForce();
346
347 //----------------------------------------------------------------------------
348 // Constraints
349 // - Following functions are managed by constraint solver.
350 //----------------------------------------------------------------------------
353 const Eigen::Vector3d& _constImp, bool _isLocal = false);
354
357 const Eigen::Vector3d& _constImp, bool _isLocal = false);
358
361
363 Eigen::Vector3d getConstraintImpulses() const;
364
365 //----------------------------------------------------------------------------
367 void setRestingPosition(const Eigen::Vector3d& _p);
368
370 const Eigen::Vector3d& getRestingPosition() const;
371
373 const Eigen::Vector3d& getLocalPosition() const;
374
376 const Eigen::Vector3d& getWorldPosition() const;
377
379 Eigen::Matrix<double, 3, Eigen::Dynamic> getBodyJacobian();
380 Eigen::Matrix<double, 3, Eigen::Dynamic> getWorldJacobian();
381
383 const Eigen::Vector3d& getBodyVelocityChange() const;
384
387
389 const SoftBodyNode* getParentSoftBodyNode() const;
390
393 // int getNumDependentGenCoords() const;
394
397 // int getDependentGenCoord(int _arrayIndex) const;
398
401 const Eigen::Vector3d& getBodyVelocity() const;
402
405 Eigen::Vector3d getWorldVelocity() const;
406
410 const Eigen::Vector3d& getBodyAcceleration() const;
411
414 Eigen::Vector3d getWorldAcceleration() const;
415
416protected:
418 explicit PointMass(SoftBodyNode* _softBodyNode);
419
421 void init();
422
423 //----------------------------------------------------------------------------
425 //----------------------------------------------------------------------------
426
428 void updateTransform() const;
429
431 void updateVelocity() const;
432
434 void updatePartialAcceleration() const;
435
438 void updateArtInertiaFD(double _timeStep) const;
439
444 void updateBiasForceFD(double _dt, const Eigen::Vector3d& _gravity);
445
448 void updateBiasImpulseFD();
449
451 void updateAccelerationID() const;
452
455
459
462 const Eigen::Vector3d& _gravity, bool _withExternalForces = false);
463
466
469
472 double _timeStep, double _withDampingForces, double _withSpringForces);
473
476 void updateConstrainedTermsFD(double _timeStep);
477
479
480 //----------------------------------------------------------------------------
482 //----------------------------------------------------------------------------
483
485 void updateMassMatrix();
486
488 void aggregateMassMatrix(Eigen::MatrixXd& _MCol, int _col);
489
492 Eigen::MatrixXd& _MCol, int _col, double _timeStep);
493
495 void updateInvMassMatrix();
496
499
501 void aggregateInvMassMatrix(Eigen::MatrixXd& _MInvCol, int _col);
502
505 Eigen::MatrixXd& _MInvCol, int _col, double _timeStep);
506
509 Eigen::VectorXd& _g, const Eigen::Vector3d& _gravity);
510
513
516 Eigen::VectorXd& _Cg, const Eigen::Vector3d& _gravity);
517
520 void aggregateExternalForces(Eigen::VectorXd& _Fext);
521
523
524 //-------------------- Cache Data for Mass Matrix ----------------------------
526 Eigen::Vector3d mM_dV;
527
529 Eigen::Vector3d mM_F;
530
531 //----------------- Cache Data for Mass Inverse Matrix -----------------------
533 Eigen::Vector3d mBiasForceForInvMeta;
534
535 //---------------- Cache Data for Gravity Force Vector -----------------------
537 Eigen::Vector3d mG_F;
538
539 //------------------- Cache Data for Combined Vector -------------------------
541 Eigen::Vector3d mCg_dV;
542
544 Eigen::Vector3d mCg_F;
545
546protected:
547 // TODO(JS): Need?
549 // Eigen::Matrix<std::size_t, 3, 1> mIndexInSkeleton;
550
553
555 std::size_t mIndex;
556
557 //----------------------------------------------------------------------------
558 // Configuration
559 //----------------------------------------------------------------------------
560
562 Eigen::Vector3d mPositionDeriv;
563
564 //----------------------------------------------------------------------------
565 // Velocity
566 //----------------------------------------------------------------------------
567
569 Eigen::Vector3d mVelocitiesDeriv;
570
571 //----------------------------------------------------------------------------
572 // Acceleration
573 //----------------------------------------------------------------------------
574
576 Eigen::Vector3d mAccelerationsDeriv;
577
578 //----------------------------------------------------------------------------
579 // Force
580 //----------------------------------------------------------------------------
581
583 Eigen::Vector3d mForcesDeriv;
584
585 //----------------------------------------------------------------------------
586 // Impulse
587 //----------------------------------------------------------------------------
588
590 Eigen::Vector3d mVelocityChanges;
591
592 // /// Generalized impulse
593 // Eigen::Vector3d mImpulse;
594
596 Eigen::Vector3d mConstraintImpulses;
597
598 //----------------------------------------------------------------------------
599
601 mutable Eigen::Vector3d mW;
602
604 mutable Eigen::Vector3d mX;
605
607 mutable Eigen::Vector3d mV;
608
610 mutable Eigen::Vector3d mEta;
611
613 Eigen::Vector3d mAlpha;
614
616 Eigen::Vector3d mBeta;
617
619 mutable Eigen::Vector3d mA;
620
622 Eigen::Vector3d mF;
623
625 mutable double mPsi;
626
628 mutable double mImplicitPsi;
629
631 mutable double mPi;
632
634 mutable double mImplicitPi;
635
637 Eigen::Vector3d mB;
638
640 Eigen::Vector3d mFext;
641
643 std::vector<std::size_t> mDependentGenCoordIndices;
644
647
648 //------------------------- Impulse-based Dyanmics ---------------------------
650 Eigen::Vector3d mDelV;
651
654 Eigen::Vector3d mImpB;
655
657 Eigen::Vector3d mImpAlpha;
658
660 Eigen::Vector3d mImpBeta;
661
663 Eigen::Vector3d mImpF;
664
666};
667
668// struct PointMassPair
669//{
670// PointMass* pm1;
671// PointMass* pm2;
672//};
673
675{
676public:
677 PointMassNotifier(SoftBodyNode* _parentSoftBody, const std::string& _name);
678
680
682 void clearVelocityNotice();
685
686 void dirtyTransform() override;
687 void dirtyVelocity() override;
688 void dirtyAcceleration() override;
689
690 // Documentation inherited
691 const std::string& setName(const std::string& _name) override;
692
693 // Documentation inherited
694 const std::string& getName() const override;
695
696protected:
697 std::string mName;
698
700 // TODO(JS): Rename this to mIsPartialAccelerationDirty in DART 7
701
703};
704
705} // namespace dynamics
706} // namespace dart
707
708#endif // DART_DYNAMICS_POINTMASS_HPP_
The Subject class is a base class for any object that wants to report when it gets destroyed.
Definition Subject.hpp:58
Entity class is a base class for any objects that exist in the kinematic tree structure of DART.
Definition Entity.hpp:62
Definition PointMass.hpp:675
void dirtyAcceleration() override
Notify the acceleration of this Entity that its parent Frame's acceleration is needed.
Definition PointMass.cpp:1151
bool mNeedPartialAccelerationUpdate
Definition PointMass.hpp:699
SoftBodyNode * mParentSoftBodyNode
Definition PointMass.hpp:702
void dirtyTransform() override
Notify the transformation update of this Entity that its parent Frame's pose is needed.
Definition PointMass.cpp:1129
void clearTransformNotice()
Definition PointMass.cpp:1105
const std::string & setName(const std::string &_name) override
Set name.
Definition PointMass.cpp:1157
bool needsPartialAccelerationUpdate() const
Definition PointMass.cpp:1099
const std::string & getName() const override
Return the name of this Entity.
Definition PointMass.cpp:1172
void clearVelocityNotice()
Definition PointMass.cpp:1111
std::string mName
Definition PointMass.hpp:697
void clearPartialAccelerationNotice()
Definition PointMass.cpp:1117
void clearAccelerationNotice()
Definition PointMass.cpp:1123
void dirtyVelocity() override
Notify the velocity update of this Entity that its parent Frame's velocity is needed.
Definition PointMass.cpp:1141
Definition PointMass.hpp:53
Eigen::Vector3d mF
Definition PointMass.hpp:622
Eigen::Vector3d mM_dV
Definition PointMass.hpp:526
void updateJointForceID(double _timeStep, double _withDampingForces, double _withSpringForces)
Update the joint force. Inverse dynamics routine.
Definition PointMass.cpp:811
void setPosition(std::size_t _index, double _position)
Definition PointMass.cpp:317
void aggregateMassMatrix(Eigen::MatrixXd &_MCol, int _col)
Definition PointMass.cpp:971
void updateBiasForceFD(double _dt, const Eigen::Vector3d &_gravity)
Update bias force associated with the articulated body inertia.
Definition PointMass.cpp:822
double getPsi() const
Definition PointMass.cpp:221
double getMass() const
Definition PointMass.cpp:215
Eigen::Vector3d mDelV
Velocity change due to constraint impulse.
Definition PointMass.hpp:650
void integratePositions(double _dt)
Definition PointMass.cpp:514
void updateInvAugMassMatrix()
Definition PointMass.cpp:1005
void integrateVelocities(double _dt)
Definition PointMass.cpp:520
double getVelocityChange(std::size_t _index)
Definition PointMass.cpp:478
Eigen::Vector3d mB
Bias force.
Definition PointMass.hpp:637
void aggregateInvAugMassMatrix(Eigen::MatrixXd &_MInvCol, int _col, double _timeStep)
Definition PointMass.cpp:1025
double getImplicitPsi() const
Definition PointMass.cpp:228
Eigen::Vector3d mImpB
Impulsive bias force due to external impulsive force exerted on bodies of the parent skeleton.
Definition PointMass.hpp:654
Eigen::Vector3d mW
Current position viewed in world frame.
Definition PointMass.hpp:601
void updateInvMassMatrix()
Definition PointMass.cpp:999
void setVelocityChange(std::size_t _index, double _velocityChange)
Definition PointMass.cpp:470
Eigen::Vector3d mImpAlpha
Cache data for mImpB.
Definition PointMass.hpp:657
Eigen::Vector3d getWorldAcceleration() const
Get the generalized acceleration at the position of this point mass where the acceleration is express...
Definition PointMass.cpp:711
Eigen::Matrix< double, 3, Eigen::Dynamic > getWorldJacobian()
Definition PointMass.cpp:652
void setMass(double _mass)
Definition PointMass.cpp:202
void resetConstraintImpulses()
Definition PointMass.cpp:508
SoftBodyNode * getParentSoftBodyNode()
Definition PointMass.cpp:664
void aggregateGravityForceVector(Eigen::VectorXd &_g, const Eigen::Vector3d &_gravity)
Definition PointMass.cpp:1040
std::size_t getNumConnectedPointMasses() const
Definition PointMass.cpp:259
Eigen::Vector3d mBiasForceForInvMeta
Definition PointMass.hpp:533
const Eigen::Vector3d & getForces() const
Definition PointMass.cpp:458
Eigen::Vector3d mBeta
Definition PointMass.hpp:616
void clearConstraintImpulse()
Clear constraint impulse.
Definition PointMass.cpp:584
Eigen::Vector3d mVelocitiesDeriv
Derivatives w.r.t. an arbitrary scalr variable.
Definition PointMass.hpp:569
void updateAccelerationFD()
Update body acceleration. Forward dynamics routine.
Definition PointMass.cpp:863
std::vector< std::size_t > mDependentGenCoordIndices
A increasingly sorted list of dependent dof indices.
Definition PointMass.hpp:643
std::size_t getNumDofs() const
Definition PointMass.cpp:294
const Eigen::Vector3d & getVelocities() const
Definition PointMass.cpp:378
const Eigen::Vector3d & getWorldPosition() const
Definition PointMass.cpp:623
void updateTransform() const
Update transformation.
Definition PointMass.cpp:725
double getForce(std::size_t _index)
Definition PointMass.cpp:444
Eigen::Vector3d mCg_F
Definition PointMass.hpp:544
double mPsi
Definition PointMass.hpp:625
Eigen::Vector3d mEta
Partial Acceleration of this PointMass.
Definition PointMass.hpp:610
double getPosition(std::size_t _index) const
Definition PointMass.cpp:326
void updateVelocityChangeFD()
Update body velocity change.
Definition PointMass.cpp:916
std::size_t getIndexInSoftBodyNode() const
Definition PointMass.cpp:196
Eigen::Vector3d mImpF
Generalized impulsive body force w.r.t. body frame.
Definition PointMass.hpp:663
virtual ~PointMass()
Default destructor.
Definition PointMass.cpp:178
State & getState()
State of this PointMass.
Definition PointMass.cpp:184
void updateAccelerationID() const
Update body acceleration with the partial body acceleration.
Definition PointMass.cpp:757
Eigen::Vector3d getWorldVelocity() const
Get the generalized velocity at the position of this point mass where the velocity is expressed in th...
Definition PointMass.cpp:697
Eigen::Vector3d mCg_dV
Definition PointMass.hpp:541
void updateTransmittedForceID(const Eigen::Vector3d &_gravity, bool _withExternalForces=false)
Update body force. Inverse dynamics routine.
Definition PointMass.cpp:768
void setForce(std::size_t _index, double _force)
Definition PointMass.cpp:436
void setConstraintImpulse(std::size_t _index, double _impulse)
Definition PointMass.cpp:492
Eigen::Vector3d mFext
External force.
Definition PointMass.hpp:640
const Eigen::Vector3d & getPositions() const
Definition PointMass.cpp:341
double mImplicitPi
Definition PointMass.hpp:634
const Eigen::Vector3d & getLocalPosition() const
Definition PointMass.cpp:615
PointMass * getConnectedPointMass(std::size_t _idx)
Definition PointMass.cpp:266
const Eigen::Vector3d & getBodyAcceleration() const
Get the generalized acceleration at the position of this point mass where the acceleration is express...
Definition PointMass.cpp:703
bool isColliding()
Return whether this point mass is set to be colliding with other objects.
Definition PointMass.cpp:288
double getVelocity(std::size_t _index) const
Definition PointMass.cpp:363
const Eigen::Vector3d & getBodyVelocityChange() const
Return velocity change due to impulse.
Definition PointMass.cpp:658
PointMassNotifier * mNotifier
Definition PointMass.hpp:665
void resetVelocities()
Definition PointMass.cpp:384
void updateTransmittedImpulse()
Update body force. Impulse-based forward dynamics routine.
Definition PointMass.cpp:943
void updateVelocity() const
Update body velocity.
Definition PointMass.cpp:738
Eigen::Vector3d getConstraintImpulses() const
Get constraint impulse.
Definition PointMass.cpp:578
const Eigen::Vector3d & getAccelerations() const
Definition PointMass.cpp:415
const Eigen::Vector3d & getRestingPosition() const
Definition PointMass.cpp:609
void updateCombinedVector()
Definition PointMass.cpp:1055
void updateTransmittedForce()
Update body force. Forward dynamics routine.
Definition PointMass.cpp:883
void updateArtInertiaFD(double _timeStep) const
Update articulated body inertia.
Definition PointMass.cpp:786
void resetVelocityChanges()
Definition PointMass.cpp:486
Eigen::Vector3d mAccelerationsDeriv
Derivatives w.r.t. an arbitrary scalr variable.
Definition PointMass.hpp:576
void addConstraintImpulse(const Eigen::Vector3d &_constImp, bool _isLocal=false)
Add constraint impulse.
Definition PointMass.cpp:562
Eigen::Vector3d mForcesDeriv
Derivatives w.r.t. an arbitrary scalr variable.
Definition PointMass.hpp:583
Eigen::Vector3d mVelocityChanges
Change of generalized velocity.
Definition PointMass.hpp:590
void updateBiasImpulseFD()
Update bias impulse associated with the articulated body inertia.
Definition PointMass.cpp:901
Eigen::Vector3d mX
Current position viewed in parent soft body node frame.
Definition PointMass.hpp:604
void resetPositions()
Definition PointMass.cpp:347
double getAcceleration(std::size_t _index) const
Definition PointMass.cpp:400
double getImplicitPi() const
Definition PointMass.cpp:242
void updateMassMatrix()
Definition PointMass.cpp:892
void aggregateExternalForces(Eigen::VectorXd &_Fext)
Aggregate the external forces mFext in the generalized coordinates recursively.
Definition PointMass.cpp:1081
void setVelocities(const Eigen::Vector3d &_velocities)
Definition PointMass.cpp:371
Eigen::Vector3d mPositionDeriv
Derivatives w.r.t. an arbitrary scalr variable.
Definition PointMass.hpp:562
void setForces(const Eigen::Vector3d &_forces)
Definition PointMass.cpp:452
Eigen::Vector3d mImpBeta
Cache data for mImpB.
Definition PointMass.hpp:660
void addExtForce(const Eigen::Vector3d &_force, bool _isForceLocal=false)
Add linear Cartesian force to this node.
Definition PointMass.cpp:526
void setRestingPosition(const Eigen::Vector3d &_p)
Definition PointMass.cpp:596
Eigen::Vector3d mConstraintImpulses
Generalized constraint impulse.
Definition PointMass.hpp:596
void setColliding(bool _isColliding)
Set whether this point mass is colliding with other objects.
Definition PointMass.cpp:282
void updateConstrainedTermsFD(double _timeStep)
Update constrained terms due to the constraint impulses.
Definition PointMass.cpp:951
void clearExtForce()
Definition PointMass.cpp:540
void aggregateCombinedVector(Eigen::VectorXd &_Cg, const Eigen::Vector3d &_gravity)
Definition PointMass.cpp:1063
void addConnectedPointMass(PointMass *_pointMass)
Definition PointMass.cpp:249
void aggregateAugMassMatrix(Eigen::MatrixXd &_MCol, int _col, double _timeStep)
Definition PointMass.cpp:982
Eigen::Vector3d mV
Current velocity viewed in parent soft body node frame.
Definition PointMass.hpp:607
void aggregateInvMassMatrix(Eigen::MatrixXd &_MInvCol, int _col)
Definition PointMass.cpp:1011
double mImplicitPsi
Definition PointMass.hpp:628
void resetForces()
Definition PointMass.cpp:464
double mPi
Definition PointMass.hpp:631
void setAcceleration(std::size_t _index, double _acceleration)
Definition PointMass.cpp:391
Eigen::Vector3d mA
Current acceleration viewed in parent body node frame.
Definition PointMass.hpp:619
void setVelocity(std::size_t _index, double _velocity)
Definition PointMass.cpp:354
Eigen::Vector3d mM_F
Definition PointMass.hpp:529
Eigen::Vector3d mG_F
Definition PointMass.hpp:537
void resetAccelerations()
Definition PointMass.cpp:429
double getConstraintImpulse(std::size_t _index)
Definition PointMass.cpp:500
const Eigen::Vector3d & getBodyVelocity() const
The number of the generalized coordinates by which this node is affected.
Definition PointMass.cpp:689
void init()
Definition PointMass.cpp:718
void updatePartialAcceleration() const
Update partial body acceleration due to parent joint's velocity.
Definition PointMass.cpp:748
const Eigen::Vector3d & getPartialAccelerations() const
Get the Eta term of this PointMass.
Definition PointMass.cpp:421
bool mIsColliding
Whether the node is currently in collision with another node.
Definition PointMass.hpp:646
Eigen::Vector3d mAlpha
Definition PointMass.hpp:613
double getPi() const
Definition PointMass.cpp:235
SoftBodyNode * mParentSoftBodyNode
SoftBodyNode that this PointMass belongs to.
Definition PointMass.hpp:552
std::size_t mIndex
Index of this PointMass within the SoftBodyNode.
Definition PointMass.hpp:555
void setAccelerations(const Eigen::Vector3d &_accelerations)
Definition PointMass.cpp:408
void setPositions(const Eigen::Vector3d &_positions)
Definition PointMass.cpp:334
Eigen::Matrix< double, 3, Eigen::Dynamic > getBodyJacobian()
Definition PointMass.cpp:631
SoftBodyNode represent a soft body that has one deformable skin.
Definition SoftBodyNode.hpp:46
Definition BulletCollisionDetector.cpp:60
Properties for each PointMass.
Definition PointMass.hpp:86
bool operator!=(const Properties &other) const
Definition PointMass.cpp:135
Eigen::Vector3d mVelocityUpperLimits
Max value allowed.
Definition PointMass.hpp:106
Eigen::Vector3d mAccelerationLowerLimits
Min value allowed.
Definition PointMass.hpp:109
Eigen::Vector3d mAccelerationUpperLimits
upper limit of generalized acceleration
Definition PointMass.hpp:112
Eigen::Vector3d mForceLowerLimits
Min value allowed.
Definition PointMass.hpp:115
Eigen::Vector3d mX0
Resting position viewed in the parent SoftBodyNode frame.
Definition PointMass.hpp:88
Eigen::Vector3d mPositionUpperLimits
Upper limit of position.
Definition PointMass.hpp:100
double mMass
Mass.
Definition PointMass.hpp:91
Eigen::Vector3d mForceUpperLimits
Max value allowed.
Definition PointMass.hpp:118
void setRestingPosition(const Eigen::Vector3d &_x)
Definition PointMass.cpp:104
std::vector< std::size_t > mConnectedPointMassIndices
Indices of connected Point Masses.
Definition PointMass.hpp:94
bool operator==(const Properties &other) const
Definition PointMass.cpp:116
void setMass(double _mass)
Definition PointMass.cpp:110
Eigen::Vector3d mVelocityLowerLimits
Min value allowed.
Definition PointMass.hpp:103
Eigen::Vector3d mPositionLowerLimits
Lower limit of position.
Definition PointMass.hpp:97
State for each PointMass.
Definition PointMass.hpp:59
Eigen::Vector3d mPositions
Position.
Definition PointMass.hpp:61
Eigen::Vector3d mForces
Generalized force.
Definition PointMass.hpp:70
Eigen::Vector3d mAccelerations
Generalized acceleration.
Definition PointMass.hpp:67
bool operator==(const State &other) const
Definition PointMass.cpp:65
Eigen::Vector3d mVelocities
Generalized velocity.
Definition PointMass.hpp:64
static constexpr T inf()
Definition Constants.hpp:67