DART  6.6.2
SoftBodyNode.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2018, 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:
48 
52 
53  friend class Skeleton;
54  friend class PointMass;
55  friend class PointMassNotifier;
56 
58 
59 
60  virtual ~SoftBodyNode();
61 
62  // Documentation inherited
63  SoftBodyNode* asSoftBodyNode() override;
64 
65  // Documentation inherited
66  const SoftBodyNode* asSoftBodyNode() const override;
67 
69  void setProperties(const Properties& _properties);
70 
72  void setProperties(const UniqueProperties& _properties);
73 
75  void setAspectState(const AspectState& state);
76 
79 
81 
84 
86  void copy(const SoftBodyNode& _otherSoftBodyNode);
87 
89  void copy(const SoftBodyNode* _otherSoftBodyNode);
90 
92  SoftBodyNode& operator=(const SoftBodyNode& _otherSoftBodyNode);
93 
96 
98  const PointMassNotifier* getNotifier() const;
99 
101  double getMass() const;
102 
104  void setVertexSpringStiffness(double _kv);
105 
107  double getVertexSpringStiffness() const;
108 
110  void setEdgeSpringStiffness(double _ke);
111 
113  double getEdgeSpringStiffness() const;
114 
116  void setDampingCoefficient(double _damp);
117 
119  double getDampingCoefficient() const;
120 
122  void removeAllPointMasses();
123 
125  PointMass* addPointMass(const PointMass::Properties& _properties);
126 
128  std::size_t getNumPointMasses() const;
129 
131  PointMass* getPointMass(std::size_t _idx);
132 
134  const PointMass* getPointMass(std::size_t _idx) const;
135 
137  const std::vector<PointMass*>& getPointMasses() const;
138 
140  void connectPointMasses(std::size_t _idx1, std::size_t _idx2);
141 
143  void addFace(const Eigen::Vector3i& _face);
144 
146  const Eigen::Vector3i& getFace(std::size_t _idx) const;
147 
149  std::size_t getNumFaces() const;
150 
151  // Documentation inherited.
152  void clearConstraintImpulse() override;
153 
154 protected:
155 
157  SoftBodyNode(BodyNode* _parentBodyNode, Joint* _parentJoint,
158  const Properties& _properties);
159 
162  BodyNode* clone(BodyNode* _parentBodyNode, Joint* _parentJoint,
163  bool cloneNodes) const override;
164 
167  void configurePointMasses(ShapeNode* softNode);
168 
169  //--------------------------------------------------------------------------
170  // Sub-functions for Recursive Kinematics Algorithms
171  //--------------------------------------------------------------------------
172  // Documentation inherited.
173  void init(const SkeletonPtr& _skeleton) override;
174 
175  // Documentation inherited.
176 // virtual void aggregateGenCoords(std::vector<GenCoord*>* _genCoords);
177 
178  // Documentation inherited.
179 // virtual void aggregatePointMassGenCoords(std::vector<GenCoord*>* _genCoords);
180 
181  //----------------------------------------------------------------------------
183  //----------------------------------------------------------------------------
184 
186  void checkArticulatedInertiaUpdate() const;
187 
188  // Documentation inherited.
189  void updateTransform() override;
190 
191  // Documentation inherited.
192  void updateVelocity() override;
193 
194  // Documentation inherited.
195  void updatePartialAcceleration() const override;
196 
197  // Documentation inherited.
198  void updateArtInertia(double _timeStep) const override;
199 
200  // Documentation inherited.
201  void updateBiasForce(const Eigen::Vector3d& _gravity,
202  double _timeStep) override;
203 
204  // Documentation inherited.
205  void updateBiasImpulse() override;
206 
207  // Documentation inherited.
208  void updateAccelerationID() override;
209 
210  // Documentation inherited.
211  void updateAccelerationFD() override;
212 
213  // Documentation inherited.
214  void updateVelocityChangeFD() override;
215 
216  // Documentation inherited.
218  const Eigen::Vector3d& _gravity,
219  bool _withExternalForces = false) override;
220 
221  // Documentation inherited.
222  void updateTransmittedForceFD() override;
223 
224  // Documentation inherited.
225  void updateTransmittedImpulse() override;
226 
227  // Documentation inherited.
228  void updateJointForceID(double _timeStep,
229  bool _withDampingForces,
230  bool _withSpringForces) override;
231 
232  // Documentation inherited.
233  void updateJointForceFD(double _timeStep,
234  bool _withDampingForces,
235  bool _withSpringForces) override;
236 
237  // Documentation inherited.
238  void updateJointImpulseFD() override;
239 
240  // Documentation inherited.
241  void updateConstrainedTerms(double _timeStep) override;
242 
244 
245  //----------------------------------------------------------------------------
247  //----------------------------------------------------------------------------
248 
249  // Documentation inherited.
250  void updateMassMatrix() override;
251 
252  // Documentation inherited.
253  void aggregateMassMatrix(Eigen::MatrixXd& _MCol, std::size_t _col) override;
254 
255  // Documentation inherited.
256  void aggregateAugMassMatrix(Eigen::MatrixXd& _MCol, std::size_t _col,
257  double _timeStep) override;
258 
259  // Documentation inherited.
260  void updateInvMassMatrix() override;
261 
262  // Documentation inherited.
263  void updateInvAugMassMatrix() override;
264 
265  // Documentation inherited.
266  void aggregateInvMassMatrix(Eigen::MatrixXd& _InvMCol, std::size_t _col) override;
267 
268  // Documentation inherited.
269  void aggregateInvAugMassMatrix(Eigen::MatrixXd& _InvMCol, std::size_t _col,
270  double _timeStep) override;
271 
272  // Documentation inherited.
273  // TODO(JS): Not implemented yet.
274  void aggregateCoriolisForceVector(Eigen::VectorXd& _C) override;
275 
276  // Documentation inherited.
277  void aggregateGravityForceVector(Eigen::VectorXd& _g,
278  const Eigen::Vector3d& _gravity) override;
279 
280  // Documentation inherited.
281  void updateCombinedVector() override;
282 
283  // Documentation inherited.
284  void aggregateCombinedVector(Eigen::VectorXd& _Cg,
285  const Eigen::Vector3d& _gravity) override;
286 
287  // Documentation inherited.
288  void aggregateExternalForces(Eigen::VectorXd& _Fext) override;
289 
291 
292  // Documentation inherited.
293  void clearExternalForces() override;
294 
295  void clearInternalForces() override;
296 
297 protected:
298 
300  std::vector<PointMass*> mPointMasses;
301 
304 
307 
310 
313 
316 
317 private:
319  void _addPiToArtInertia(const Eigen::Vector3d& _p, double _Pi) const;
320 
322  void _addPiToArtInertiaImplicit(const Eigen::Vector3d& _p,
323  double _ImplicitPi) const;
324 
327 };
328 
330 {
331 public:
332 
336  const Eigen::Vector3d& _size,
337  const Eigen::Isometry3d& _localTransform,
338  double _totalMass,
339  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
340  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
341  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
342 
345  static void setBox(SoftBodyNode* _softBodyNode,
346  const Eigen::Vector3d& _size,
347  const Eigen::Isometry3d& _localTransform,
348  double _totalMass,
349  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
350  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
351  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
352 
358  const Eigen::Vector3d& _size,
359  const Eigen::Isometry3d& _localTransform,
360  const Eigen::Vector3i& _frags,
361  double _totalMass,
362  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
363  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
364  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
365 
371  // TODO: The component of _frags should allow 2.
372  static void setBox(SoftBodyNode* _softBodyNode,
373  const Eigen::Vector3d& _size,
374  const Eigen::Isometry3d& _localTransform,
375  const Eigen::Vector3i& _frags,
376  double _totalMass,
377  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
378  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
379  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
380 
383  double _totalMass,
384  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
385  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
386  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
387 
390  static void setSinglePointMass(
391  SoftBodyNode* _softBodyNode,
392  double _totalMass,
393  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
394  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
395  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
396 
399  double _radius,
400  std::size_t _nSlices,
401  std::size_t _nStacks,
402  double _totalMass,
403  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
404  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
405  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
406 
409  const Eigen::Vector3d& _size,
410  std::size_t _nSlices,
411  std::size_t _nStacks,
412  double _totalMass,
413  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
414  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
415  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
416 
419  static void setEllipsoid(SoftBodyNode* _softBodyNode,
420  const Eigen::Vector3d& _size,
421  std::size_t _nSlices,
422  std::size_t _nStacks,
423  double _totalMass,
424  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
425  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
426  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
427 
430  double _radius,
431  double _height,
432  std::size_t _nSlices,
433  std::size_t _nStacks,
434  std::size_t _nRings,
435  double _totalMass,
436  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
437  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
438  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
439 
442  static void setCylinder(SoftBodyNode* _softBodyNode,
443  double _radius,
444  double _height,
445  std::size_t _nSlices,
446  std::size_t _nStacks,
447  std::size_t _nRings,
448  double _totalMass,
449  double _vertexStiffness = DART_DEFAULT_VERTEX_STIFFNESS,
450  double _edgeStiffness = DART_DEFAULT_EDGE_STIFNESS,
451  double _dampingCoeff = DART_DEFAULT_DAMPING_COEFF);
452 };
453 
454 } // namespace dynamics
455 } // namespace dart
456 
457 #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:438
typename Impl::AspectState AspectState
Definition: EmbeddedAspect.hpp:444
typename Impl::Aspect Aspect
Definition: EmbeddedAspect.hpp:447
typename Impl::AspectProperties AspectProperties
Definition: EmbeddedAspect.hpp:446
BodyNode class represents a single node of the skeleton.
Definition: BodyNode.hpp:78
class Joint
Definition: Joint.hpp:59
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:149
class Skeleton
Definition: Skeleton.hpp:59
Definition: SoftBodyNode.hpp:330
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:3049
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:2499
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:2534
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:1358
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:1266
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:2465
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:2715
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:2514
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:2695
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:303
void copy(const SoftBodyNode &_otherSoftBodyNode)
Copy the Properties of another SoftBodyNode.
Definition: SoftBodyNode.cpp:190
void _addPiToArtInertia(const Eigen::Vector3d &_p, double _Pi) const
Definition: SoftBodyNode.cpp:1222
void updateTransmittedForceFD() override
Definition: SoftBodyNode.cpp:766
void updateArtInertia(double _timeStep) const override
Definition: SoftBodyNode.cpp:660
Properties getSoftBodyNodeProperties() const
Get the Properties of this SoftBodyNode.
Definition: SoftBodyNode.cpp:184
void updateJointImpulseFD() override
Definition: SoftBodyNode.cpp:654
void aggregateGravityForceVector(Eigen::VectorXd &_g, const Eigen::Vector3d &_gravity) override
Definition: SoftBodyNode.cpp:1078
void updateMassMatrix() override
Definition: SoftBodyNode.cpp:834
void setAspectProperties(const AspectProperties &properties)
Set the AspectProperties of this SoftBodyNode.
Definition: SoftBodyNode.cpp:168
void updatePartialAcceleration() const override
Definition: SoftBodyNode.cpp:556
PointMass * addPointMass(const PointMass::Properties &_properties)
Definition: SoftBodyNode.cpp:475
void updateAccelerationFD() override
Definition: SoftBodyNode.cpp:755
std::vector< PointMass * > mPointMasses
List of point masses composing deformable mesh.
Definition: SoftBodyNode.hpp:300
BodyNode * clone(BodyNode *_parentBodyNode, Joint *_parentJoint, bool cloneNodes) const override
Create a clone of this SoftBodyNode.
Definition: SoftBodyNode.cpp:267
void updateBiasImpulse() override
Definition: SoftBodyNode.cpp:775
void aggregateInvMassMatrix(Eigen::MatrixXd &_InvMCol, std::size_t _col) override
Definition: SoftBodyNode.cpp:1007
void setAspectState(const AspectState &state)
Set the AspectState of this SoftBodyNode.
Definition: SoftBodyNode.cpp:158
WeakShapeNodePtr mSoftShapeNode
Soft mesh shape belonging to this node.
Definition: SoftBodyNode.hpp:306
void updateJointForceID(double _timeStep, bool _withDampingForces, bool _withSpringForces) override
Definition: SoftBodyNode.cpp:629
std::size_t getNumFaces() const
Definition: SoftBodyNode.cpp:511
void clearConstraintImpulse() override
Definition: SoftBodyNode.cpp:517
double getEdgeSpringStiffness() const
Definition: SoftBodyNode.cpp:442
math::Inertia mArtInertia2
Definition: SoftBodyNode.hpp:312
void aggregateAugMassMatrix(Eigen::MatrixXd &_MCol, std::size_t _col, double _timeStep) override
Definition: SoftBodyNode.cpp:887
void setVertexSpringStiffness(double _kv)
Definition: SoftBodyNode.cpp:412
void connectPointMasses(std::size_t _idx1, std::size_t _idx2)
Definition: SoftBodyNode.cpp:486
void updateVelocity() override
Definition: SoftBodyNode.cpp:545
void removeAllPointMasses()
Definition: SoftBodyNode.cpp:466
const std::vector< PointMass * > & getPointMasses() const
Return all the point masses in this SoftBodyNode.
Definition: SoftBodyNode.cpp:237
void aggregateCombinedVector(Eigen::VectorXd &_Cg, const Eigen::Vector3d &_gravity) override
Definition: SoftBodyNode.cpp:1126
void updateConstrainedTerms(double _timeStep) override
Definition: SoftBodyNode.cpp:825
void aggregateCoriolisForceVector(Eigen::VectorXd &_C) override
Definition: SoftBodyNode.cpp:1072
void addFace(const Eigen::Vector3i &_face)
Definition: SoftBodyNode.cpp:497
void updateBiasForce(const Eigen::Vector3d &_gravity, double _timeStep) override
Definition: SoftBodyNode.cpp:705
math::Inertia mI2
Generalized inertia with point masses.
Definition: SoftBodyNode.hpp:309
void setProperties(const Properties &_properties)
Set the Properties of this SoftBodyNode.
Definition: SoftBodyNode.cpp:143
double getMass() const
Get mass.
Definition: SoftBodyNode.cpp:401
void updateInertiaWithPointMass()
Definition: SoftBodyNode.cpp:1251
void updateInvAugMassMatrix() override
Definition: SoftBodyNode.cpp:971
std::size_t getNumPointMasses() const
Definition: SoftBodyNode.cpp:215
void init(const SkeletonPtr &_skeleton) override
Definition: SoftBodyNode.cpp:343
void updateJointForceFD(double _timeStep, bool _withDampingForces, bool _withSpringForces) override
Definition: SoftBodyNode.cpp:644
void aggregateMassMatrix(Eigen::MatrixXd &_MCol, std::size_t _col) override
Definition: SoftBodyNode.cpp:843
void setDampingCoefficient(double _damp)
Definition: SoftBodyNode.cpp:448
void configurePointMasses(ShapeNode *softNode)
Used by SoftBodyAspect to have this SoftBodyNode reconstruct its SoftMeshShape.
Definition: SoftBodyNode.cpp:282
void updateTransform() override
Definition: SoftBodyNode.cpp:534
void updateVelocityChangeFD() override
Definition: SoftBodyNode.cpp:807
PointMass * getPointMass(std::size_t _idx)
Definition: SoftBodyNode.cpp:221
void clearInternalForces() override
Definition: SoftBodyNode.cpp:1213
SoftBodyNode & operator=(const SoftBodyNode &_otherSoftBodyNode)
Copy the Properties of another SoftBodyNode.
Definition: SoftBodyNode.cpp:208
void _addPiToArtInertiaImplicit(const Eigen::Vector3d &_p, double _ImplicitPi) const
Definition: SoftBodyNode.cpp:1236
void clearExternalForces() override
Definition: SoftBodyNode.cpp:1204
virtual ~SoftBodyNode()
Definition: SoftBodyNode.cpp:122
void updateTransmittedForceID(const Eigen::Vector3d &_gravity, bool _withExternalForces=false) override
Definition: SoftBodyNode.cpp:578
SoftBodyNode(BodyNode *_parentBodyNode, Joint *_parentJoint, const Properties &_properties)
Constructor called by Skeleton class.
Definition: SoftBodyNode.cpp:243
void aggregateExternalForces(Eigen::VectorXd &_Fext) override
Definition: SoftBodyNode.cpp:1170
void aggregateInvAugMassMatrix(Eigen::MatrixXd &_InvMCol, std::size_t _col, double _timeStep) override
Definition: SoftBodyNode.cpp:1038
math::Inertia mArtInertiaImplicit2
Definition: SoftBodyNode.hpp:315
void updateInvMassMatrix() override
Definition: SoftBodyNode.cpp:937
void updateCombinedVector() override
Definition: SoftBodyNode.cpp:1117
void checkArticulatedInertiaUpdate() const
Update articulated inertia if necessary.
Definition: SoftBodyNode.cpp:526
PointMassNotifier * getNotifier()
Get the update notifier for the PointMasses of this SoftBodyNode.
Definition: SoftBodyNode.cpp:389
double getVertexSpringStiffness() const
Definition: SoftBodyNode.cpp:424
SoftBodyNode * asSoftBodyNode() override
Definition: SoftBodyNode.cpp:131
double getDampingCoefficient() const
Definition: SoftBodyNode.cpp:460
void updateTransmittedImpulse() override
Definition: SoftBodyNode.cpp:816
void setEdgeSpringStiffness(double _ke)
Definition: SoftBodyNode.cpp:430
const Eigen::Vector3i & getFace(std::size_t _idx) const
Definition: SoftBodyNode.cpp:504
void updateAccelerationID() override
Definition: SoftBodyNode.cpp:567
#define DART_BAKE_SPECIALIZED_ASPECT_IRREGULAR(TypeName, AspectName)
Definition: Composite.hpp:164
common::EmbedStateAndPropertiesOnTopOf< SoftBodyNode, SoftBodyNodeUniqueState, SoftBodyNodeUniqueProperties, BodyNode > SoftBodyNodeBase
Definition: SoftBodyNodeAspect.hpp:123
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:105
Definition: BulletCollisionDetector.cpp:63
Properties for each PointMass.
Definition: PointMass.hpp:83
Definition: SoftBodyNodeAspect.hpp:109
Definition: SoftBodyNodeAspect.hpp:66