DART  6.10.1
SoftBodyNode.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_SOFTBODYNODE_HPP_
34 #define DART_DYNAMICS_SOFTBODYNODE_HPP_
35 
37 
38 namespace dart {
39 namespace dynamics {
40 
46 {
47 public:
51 
52  friend class Skeleton;
53  friend class PointMass;
54  friend class PointMassNotifier;
55 
57 
58 
59  virtual ~SoftBodyNode();
60 
61  // Documentation inherited
62  SoftBodyNode* asSoftBodyNode() override;
63 
64  // Documentation inherited
65  const SoftBodyNode* asSoftBodyNode() const override;
66 
68  void setProperties(const Properties& _properties);
69 
71  void setProperties(const UniqueProperties& _properties);
72 
74  void setAspectState(const AspectState& state);
75 
78 
80 
83 
85  void copy(const SoftBodyNode& _otherSoftBodyNode);
86 
88  void copy(const SoftBodyNode* _otherSoftBodyNode);
89 
91  SoftBodyNode& operator=(const SoftBodyNode& _otherSoftBodyNode);
92 
95 
97  const PointMassNotifier* getNotifier() const;
98 
100  double getMass() const;
101 
103  void setVertexSpringStiffness(double _kv);
104 
106  double getVertexSpringStiffness() const;
107 
109  void setEdgeSpringStiffness(double _ke);
110 
112  double getEdgeSpringStiffness() const;
113 
115  void setDampingCoefficient(double _damp);
116 
118  double getDampingCoefficient() const;
119 
121  void removeAllPointMasses();
122 
124  PointMass* addPointMass(const PointMass::Properties& _properties);
125 
127  std::size_t getNumPointMasses() const;
128 
130  PointMass* getPointMass(std::size_t _idx);
131 
133  const PointMass* getPointMass(std::size_t _idx) const;
134 
136  const std::vector<PointMass*>& getPointMasses() const;
137 
139  void connectPointMasses(std::size_t _idx1, std::size_t _idx2);
140 
142  void addFace(const Eigen::Vector3i& _face);
143 
145  const Eigen::Vector3i& getFace(std::size_t _idx) const;
146 
148  std::size_t getNumFaces() const;
149 
150  // Documentation inherited.
151  void clearConstraintImpulse() override;
152 
153 protected:
155  SoftBodyNode(
156  BodyNode* _parentBodyNode,
157  Joint* _parentJoint,
158  const Properties& _properties);
159 
162  BodyNode* clone(
163  BodyNode* _parentBodyNode,
164  Joint* _parentJoint,
165  bool cloneNodes) const override;
166 
169  void configurePointMasses(ShapeNode* softNode);
170 
171  //--------------------------------------------------------------------------
172  // Sub-functions for Recursive Kinematics Algorithms
173  //--------------------------------------------------------------------------
174  // Documentation inherited.
175  void init(const SkeletonPtr& _skeleton) override;
176 
177  // Documentation inherited.
178  // virtual void aggregateGenCoords(std::vector<GenCoord*>* _genCoords);
179 
180  // Documentation inherited.
181  // virtual void aggregatePointMassGenCoords(std::vector<GenCoord*>*
182  // _genCoords);
183 
184  //----------------------------------------------------------------------------
186  //----------------------------------------------------------------------------
187 
189  void checkArticulatedInertiaUpdate() const;
190 
191  // Documentation inherited.
192  void updateTransform() override;
193 
194  // Documentation inherited.
195  void updateVelocity() override;
196 
197  // Documentation inherited.
198  void updatePartialAcceleration() const override;
199 
200  // Documentation inherited.
201  void updateArtInertia(double _timeStep) const override;
202 
203  // Documentation inherited.
204  void updateBiasForce(
205  const Eigen::Vector3d& _gravity, double _timeStep) override;
206 
207  // Documentation inherited.
208  void updateBiasImpulse() override;
209 
210  // Documentation inherited.
211  void updateAccelerationID() override;
212 
213  // Documentation inherited.
214  void updateAccelerationFD() override;
215 
216  // Documentation inherited.
217  void updateVelocityChangeFD() override;
218 
219  // Documentation inherited.
221  const Eigen::Vector3d& _gravity,
222  bool _withExternalForces = false) override;
223 
224  // Documentation inherited.
225  void updateTransmittedForceFD() override;
226 
227  // Documentation inherited.
228  void updateTransmittedImpulse() override;
229 
230  // Documentation inherited.
231  void updateJointForceID(
232  double _timeStep,
233  bool _withDampingForces,
234  bool _withSpringForces) override;
235 
236  // Documentation inherited.
237  void updateJointForceFD(
238  double _timeStep,
239  bool _withDampingForces,
240  bool _withSpringForces) override;
241 
242  // Documentation inherited.
243  void updateJointImpulseFD() override;
244 
245  // Documentation inherited.
246  void updateConstrainedTerms(double _timeStep) override;
247 
249 
250  //----------------------------------------------------------------------------
252  //----------------------------------------------------------------------------
253 
254  // Documentation inherited.
255  void updateMassMatrix() override;
256 
257  // Documentation inherited.
258  void aggregateMassMatrix(Eigen::MatrixXd& _MCol, std::size_t _col) override;
259 
260  // Documentation inherited.
262  Eigen::MatrixXd& _MCol, std::size_t _col, double _timeStep) override;
263 
264  // Documentation inherited.
265  void updateInvMassMatrix() override;
266 
267  // Documentation inherited.
268  void updateInvAugMassMatrix() override;
269 
270  // Documentation inherited.
272  Eigen::MatrixXd& _InvMCol, std::size_t _col) override;
273 
274  // Documentation inherited.
276  Eigen::MatrixXd& _InvMCol, std::size_t _col, double _timeStep) override;
277 
278  // Documentation inherited.
279  // TODO(JS): Not implemented yet.
280  void aggregateCoriolisForceVector(Eigen::VectorXd& _C) override;
281 
282  // Documentation inherited.
284  Eigen::VectorXd& _g, const Eigen::Vector3d& _gravity) override;
285 
286  // Documentation inherited.
287  void updateCombinedVector() override;
288 
289  // Documentation inherited.
291  Eigen::VectorXd& _Cg, const Eigen::Vector3d& _gravity) override;
292 
293  // Documentation inherited.
294  void aggregateExternalForces(Eigen::VectorXd& _Fext) override;
295 
297 
298  // Documentation inherited.
299  void clearExternalForces() override;
300 
301  void clearInternalForces() override;
302 
303 protected:
305  std::vector<PointMass*> mPointMasses;
306 
309 
312 
315 
318 
321 
322 private:
324  void _addPiToArtInertia(const Eigen::Vector3d& _p, double _Pi) const;
325 
328  const Eigen::Vector3d& _p, double _ImplicitPi) const;
329 
332 };
333 
335 {
336 public:
340  const Eigen::Vector3d& _size,
341  const Eigen::Isometry3d& _localTransform,
342  double _totalMass,
343  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
344  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
345  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
346 
349  static void setBox(
350  SoftBodyNode* _softBodyNode,
351  const Eigen::Vector3d& _size,
352  const Eigen::Isometry3d& _localTransform,
353  double _totalMass,
354  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
355  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
356  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
357 
363  const Eigen::Vector3d& _size,
364  const Eigen::Isometry3d& _localTransform,
365  const Eigen::Vector3i& _frags,
366  double _totalMass,
367  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
368  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
369  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
370 
379  // TODO: The component of _frags should allow 2.
384  static void setBox(
385  SoftBodyNode* _softBodyNode,
386  const Eigen::Vector3d& _size,
387  const Eigen::Isometry3d& _localTransform,
388  const Eigen::Vector3i& _frags,
389  double _totalMass,
390  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
391  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
392  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
393 
396  double _totalMass,
397  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
398  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
399  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
400 
403  static void setSinglePointMass(
404  SoftBodyNode* _softBodyNode,
405  double _totalMass,
406  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
407  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
408  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
409 
412  double _radius,
413  std::size_t _nSlices,
414  std::size_t _nStacks,
415  double _totalMass,
416  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
417  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
418  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
419 
422  const Eigen::Vector3d& _size,
423  std::size_t _nSlices,
424  std::size_t _nStacks,
425  double _totalMass,
426  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
427  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
428  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
429 
432  static void setEllipsoid(
433  SoftBodyNode* _softBodyNode,
434  const Eigen::Vector3d& _size,
435  std::size_t _nSlices,
436  std::size_t _nStacks,
437  double _totalMass,
438  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
439  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
440  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
441 
444  double _radius,
445  double _height,
446  std::size_t _nSlices,
447  std::size_t _nStacks,
448  std::size_t _nRings,
449  double _totalMass,
450  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
451  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
452  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
453 
456  static void setCylinder(
457  SoftBodyNode* _softBodyNode,
458  double _radius,
459  double _height,
460  std::size_t _nSlices,
461  std::size_t _nStacks,
462  std::size_t _nRings,
463  double _totalMass,
464  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
465  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
466  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
467 };
468 
469 } // namespace dynamics
470 } // namespace dart
471 
472 #endif // DART_DYNAMICS_SOFTBODYNODE_HPP_
BodyPropPtr properties
Definition: SdfParser.cpp:80
Terminator for the variadic template.
Definition: CompositeJoiner.hpp:45
This is an alternative to EmbedStateAndProperties which allows your class to also inherit other Compo...
Definition: EmbeddedAspect.hpp:435
typename Impl::AspectState AspectState
Definition: EmbeddedAspect.hpp:440
typename Impl::Aspect Aspect
Definition: EmbeddedAspect.hpp:443
typename Impl::AspectProperties AspectProperties
Definition: EmbeddedAspect.hpp:442
BodyNode class represents a single node of the skeleton.
Definition: BodyNode.hpp:79
class Joint
Definition: Joint.hpp:60
Definition: PointMass.hpp:673
Definition: PointMass.hpp:51
Definition: ShapeNode.hpp:49
std::shared_ptr< Skeleton > getSkeleton()
Return the Skeleton this BodyNode belongs to.
Definition: BodyNode.cpp:152
class Skeleton
Definition: Skeleton.hpp:59
Definition: SoftBodyNode.hpp:335
static void setCylinder(SoftBodyNode *_softBodyNode, double _radius, double _height, std::size_t _nSlices, std::size_t _nStacks, std::size_t _nRings, double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
This should be called before SoftBodyNode::init() is called.
Definition: SoftBodyNode.cpp:3098
static void setSinglePointMass(SoftBodyNode *_softBodyNode, double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
This should be called before SoftBodyNode::init() is called.
Definition: SoftBodyNode.cpp:2549
static SoftBodyNode::UniqueProperties makeEllipsoidProperties(const Eigen::Vector3d &_size, std::size_t _nSlices, std::size_t _nStacks, double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
Create a Properties struct for an Ellipsoid-shaped SoftBodyNode.
Definition: SoftBodyNode.cpp:2582
static void setBox(SoftBodyNode *_softBodyNode, const Eigen::Vector3d &_size, const Eigen::Isometry3d &_localTransform, double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
This should be called before SoftBodyNode::init() is called.
Definition: SoftBodyNode.cpp:1396
static SoftBodyNode::UniqueProperties makeBoxProperties(const Eigen::Vector3d &_size, const Eigen::Isometry3d &_localTransform, double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
Create a Properties struct for a box-shaped SoftBodyNode with 8 PointMasses.
Definition: SoftBodyNode.cpp:1304
static SoftBodyNode::UniqueProperties makeSinglePointMassProperties(double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
Create a Properties struct for a SoftBodyNode with a single PointMass.
Definition: SoftBodyNode.cpp:2515
static SoftBodyNode::UniqueProperties makeCylinderProperties(double _radius, double _height, std::size_t _nSlices, std::size_t _nStacks, std::size_t _nRings, double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
Create a Properties struct for a cylinder-shaped SoftBodyNode.
Definition: SoftBodyNode.cpp:2762
static SoftBodyNode::UniqueProperties makeSphereProperties(double _radius, std::size_t _nSlices, std::size_t _nStacks, double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
Create a Properties struct for an Sphere-shaped SoftBodyNode.
Definition: SoftBodyNode.cpp:2562
static void setEllipsoid(SoftBodyNode *_softBodyNode, const Eigen::Vector3d &_size, std::size_t _nSlices, std::size_t _nStacks, double _totalMass, double _vertexStiffness=DART_DEFAULT_VERTEX_STIFFNESS, double _edgeStiffness=DART_DEFAULT_EDGE_STIFNESS, double _dampingCoeff=DART_DEFAULT_DAMPING_COEFF)
This should be called before SoftBodyNode::init() is called.
Definition: SoftBodyNode.cpp:2740
SoftBodyNode represent a soft body that has one deformable skin.
Definition: SoftBodyNode.hpp:46
PointMassNotifier * mNotifier
An Entity which tracks when the point masses need to be updated.
Definition: SoftBodyNode.hpp:308
void copy(const SoftBodyNode &_otherSoftBodyNode)
Copy the Properties of another SoftBodyNode.
Definition: SoftBodyNode.cpp:199
void _addPiToArtInertia(const Eigen::Vector3d &_p, double _Pi) const
Definition: SoftBodyNode.cpp:1260
void updateTransmittedForceFD() override
Definition: SoftBodyNode.cpp:783
void updateArtInertia(double _timeStep) const override
Definition: SoftBodyNode.cpp:666
Properties getSoftBodyNodeProperties() const
Get the Properties of this SoftBodyNode.
Definition: SoftBodyNode.cpp:193
void updateJointImpulseFD() override
Definition: SoftBodyNode.cpp:660
void aggregateGravityForceVector(Eigen::VectorXd &_g, const Eigen::Vector3d &_gravity) override
Definition: SoftBodyNode.cpp:1109
void updateMassMatrix() override
Definition: SoftBodyNode.cpp:853
void setAspectProperties(const AspectProperties &properties)
Set the AspectProperties of this SoftBodyNode.
Definition: SoftBodyNode.cpp:177
void updatePartialAcceleration() const override
Definition: SoftBodyNode.cpp:566
PointMass * addPointMass(const PointMass::Properties &_properties)
Definition: SoftBodyNode.cpp:485
void updateAccelerationFD() override
Definition: SoftBodyNode.cpp:772
std::vector< PointMass * > mPointMasses
List of point masses composing deformable mesh.
Definition: SoftBodyNode.hpp:305
BodyNode * clone(BodyNode *_parentBodyNode, Joint *_parentJoint, bool cloneNodes) const override
Create a clone of this SoftBodyNode.
Definition: SoftBodyNode.cpp:277
void updateBiasImpulse() override
Definition: SoftBodyNode.cpp:792
void aggregateInvMassMatrix(Eigen::MatrixXd &_InvMCol, std::size_t _col) override
Definition: SoftBodyNode.cpp:1035
void setAspectState(const AspectState &state)
Set the AspectState of this SoftBodyNode.
Definition: SoftBodyNode.cpp:167
WeakShapeNodePtr mSoftShapeNode
Soft mesh shape belonging to this node.
Definition: SoftBodyNode.hpp:311
void updateJointForceID(double _timeStep, bool _withDampingForces, bool _withSpringForces) override
Definition: SoftBodyNode.cpp:640
std::size_t getNumFaces() const
Definition: SoftBodyNode.cpp:521
void clearConstraintImpulse() override
Definition: SoftBodyNode.cpp:527
double getEdgeSpringStiffness() const
Definition: SoftBodyNode.cpp:452
math::Inertia mArtInertia2
Definition: SoftBodyNode.hpp:317
void aggregateAugMassMatrix(Eigen::MatrixXd &_MCol, std::size_t _col, double _timeStep) override
Definition: SoftBodyNode.cpp:908
void setVertexSpringStiffness(double _kv)
Definition: SoftBodyNode.cpp:422
void connectPointMasses(std::size_t _idx1, std::size_t _idx2)
Definition: SoftBodyNode.cpp:496
void updateVelocity() override
Definition: SoftBodyNode.cpp:555
void removeAllPointMasses()
Definition: SoftBodyNode.cpp:476
const std::vector< PointMass * > & getPointMasses() const
Return all the point masses in this SoftBodyNode.
Definition: SoftBodyNode.cpp:246
void aggregateCombinedVector(Eigen::VectorXd &_Cg, const Eigen::Vector3d &_gravity) override
Definition: SoftBodyNode.cpp:1160
void updateConstrainedTerms(double _timeStep) override
Definition: SoftBodyNode.cpp:844
void aggregateCoriolisForceVector(Eigen::VectorXd &_C) override
Definition: SoftBodyNode.cpp:1103
void addFace(const Eigen::Vector3i &_face)
Definition: SoftBodyNode.cpp:507
void updateBiasForce(const Eigen::Vector3d &_gravity, double _timeStep) override
Definition: SoftBodyNode.cpp:711
math::Inertia mI2
Generalized inertia with point masses.
Definition: SoftBodyNode.hpp:314
void setProperties(const Properties &_properties)
Set the Properties of this SoftBodyNode.
Definition: SoftBodyNode.cpp:152
double getMass() const
Get mass.
Definition: SoftBodyNode.cpp:411
void updateInertiaWithPointMass()
Definition: SoftBodyNode.cpp:1290
void updateInvAugMassMatrix() override
Definition: SoftBodyNode.cpp:997
std::size_t getNumPointMasses() const
Definition: SoftBodyNode.cpp:224
void init(const SkeletonPtr &_skeleton) override
Definition: SoftBodyNode.cpp:353
void updateJointForceFD(double _timeStep, bool _withDampingForces, bool _withSpringForces) override
Definition: SoftBodyNode.cpp:652
void aggregateMassMatrix(Eigen::MatrixXd &_MCol, std::size_t _col) override
Definition: SoftBodyNode.cpp:862
void setDampingCoefficient(double _damp)
Definition: SoftBodyNode.cpp:458
void configurePointMasses(ShapeNode *softNode)
Used by SoftBodyAspect to have this SoftBodyNode reconstruct its SoftMeshShape.
Definition: SoftBodyNode.cpp:292
void updateTransform() override
Definition: SoftBodyNode.cpp:544
void updateVelocityChangeFD() override
Definition: SoftBodyNode.cpp:826
PointMass * getPointMass(std::size_t _idx)
Definition: SoftBodyNode.cpp:230
void clearInternalForces() override
Definition: SoftBodyNode.cpp:1251
SoftBodyNode & operator=(const SoftBodyNode &_otherSoftBodyNode)
Copy the Properties of another SoftBodyNode.
Definition: SoftBodyNode.cpp:217
void _addPiToArtInertiaImplicit(const Eigen::Vector3d &_p, double _ImplicitPi) const
Definition: SoftBodyNode.cpp:1275
void clearExternalForces() override
Definition: SoftBodyNode.cpp:1242
virtual ~SoftBodyNode()
Definition: SoftBodyNode.cpp:131
void updateTransmittedForceID(const Eigen::Vector3d &_gravity, bool _withExternalForces=false) override
Definition: SoftBodyNode.cpp:588
SoftBodyNode(BodyNode *_parentBodyNode, Joint *_parentJoint, const Properties &_properties)
Constructor called by Skeleton class.
Definition: SoftBodyNode.cpp:252
void aggregateExternalForces(Eigen::VectorXd &_Fext) override
Definition: SoftBodyNode.cpp:1206
void aggregateInvAugMassMatrix(Eigen::MatrixXd &_InvMCol, std::size_t _col, double _timeStep) override
Definition: SoftBodyNode.cpp:1067
math::Inertia mArtInertiaImplicit2
Definition: SoftBodyNode.hpp:320
void updateInvMassMatrix() override
Definition: SoftBodyNode.cpp:960
void updateCombinedVector() override
Definition: SoftBodyNode.cpp:1151
void checkArticulatedInertiaUpdate() const
Update articulated inertia if necessary.
Definition: SoftBodyNode.cpp:536
PointMassNotifier * getNotifier()
Get the update notifier for the PointMasses of this SoftBodyNode.
Definition: SoftBodyNode.cpp:399
double getVertexSpringStiffness() const
Definition: SoftBodyNode.cpp:434
SoftBodyNode * asSoftBodyNode() override
Definition: SoftBodyNode.cpp:140
double getDampingCoefficient() const
Definition: SoftBodyNode.cpp:470
void updateTransmittedImpulse() override
Definition: SoftBodyNode.cpp:835
void setEdgeSpringStiffness(double _ke)
Definition: SoftBodyNode.cpp:440
const Eigen::Vector3i & getFace(std::size_t _idx) const
Definition: SoftBodyNode.cpp:514
void updateAccelerationID() override
Definition: SoftBodyNode.cpp:577
#define DART_BAKE_SPECIALIZED_ASPECT_IRREGULAR(TypeName, AspectName)
Definition: Composite.hpp:164
common::EmbedStateAndPropertiesOnTopOf< SoftBodyNode, SoftBodyNodeUniqueState, SoftBodyNodeUniqueProperties, BodyNode > SoftBodyNodeBase
Definition: SoftBodyNodeAspect.hpp:125
const double DART_DEFAULT_DAMPING_COEFF
Definition: SoftBodyNodeAspect.hpp:45
const double DART_DEFAULT_VERTEX_STIFFNESS
Definition: SoftBodyNodeAspect.hpp:43
std::shared_ptr< Skeleton > SkeletonPtr
Definition: SmartPointer.hpp:60
const double DART_DEFAULT_EDGE_STIFNESS
Definition: SoftBodyNodeAspect.hpp:44
Eigen::Matrix6d Inertia
Definition: MathTypes.hpp:111
Definition: BulletCollisionDetector.cpp:65
Properties for each PointMass.
Definition: PointMass.hpp:84
Definition: SoftBodyNodeAspect.hpp:109
Definition: SoftBodyNodeAspect.hpp:66