DART 6.6.2
Loading...
Searching...
No Matches
Joint.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_JOINT_HPP_
34#define DART_DYNAMICS_JOINT_HPP_
35
36#include <string>
37#include <vector>
38#include <memory>
39
47
48namespace dart {
49namespace dynamics {
50
51class BodyNode;
52class Skeleton;
53class DegreeOfFreedom;
54
56class Joint : public virtual common::Subject,
57 public virtual common::VersionCounter,
58 public common::EmbedProperties<Joint, detail::JointProperties>
59{
60public:
61
64
66 static constexpr ActuatorType FORCE = detail::FORCE;
68 static constexpr ActuatorType SERVO = detail::SERVO;
72
74
76 {
79 const Properties& standardProperties = Properties(),
80 const CompositeProperties& aspectProperties = CompositeProperties());
81
84 Properties&& standardProperties,
85 CompositeProperties&& aspectProperties);
86
89 };
90
93
94 Joint(const Joint&) = delete;
95
97 virtual ~Joint();
98
101
104
106 const Properties& getJointProperties() const;
107
109 void copy(const Joint& _otherJoint);
110
112 void copy(const Joint* _otherJoint);
113
115 Joint& operator=(const Joint& _otherJoint);
116
123 const std::string& setName(const std::string& _name,
124 bool _renameDofs = true);
125
127 const std::string& getName() const;
128
130 virtual const std::string& getType() const = 0;
131
133 void setActuatorType(ActuatorType _actuatorType);
134
137
144 bool isKinematic() const;
145
147 bool isDynamic() const;
148
151
153 const BodyNode* getChildBodyNode() const;
154
157
159 const BodyNode* getParentBodyNode() const;
160
163
165 std::shared_ptr<const Skeleton> getSkeleton() const;
166
168 virtual void setTransformFromParentBodyNode(const Eigen::Isometry3d& _T);
169
171 virtual void setTransformFromChildBodyNode(const Eigen::Isometry3d& _T);
172
174 const Eigen::Isometry3d& getTransformFromParentBodyNode() const;
175
177 const Eigen::Isometry3d& getTransformFromChildBodyNode() const;
178
185 void setPositionLimitEnforced(bool _isPositionLimitEnforced);
186
193 bool isPositionLimitEnforced() const;
194
196 virtual std::size_t getIndexInSkeleton(std::size_t _index) const = 0;
197
200 virtual std::size_t getIndexInTree(std::size_t _index) const = 0;
201
203 std::size_t getJointIndexInSkeleton() const;
204
206 std::size_t getJointIndexInTree() const;
207
209 std::size_t getTreeIndex() const;
210
213 virtual DegreeOfFreedom* getDof(std::size_t _index) = 0;
214
217 virtual const DegreeOfFreedom* getDof(std::size_t _index) const = 0;
218
220 virtual const std::string& setDofName(std::size_t _index,
221 const std::string& _name,
222 bool _preserveName=true) = 0;
223
225 virtual void preserveDofName(std::size_t _index, bool _preserve) = 0;
226
228 virtual bool isDofNamePreserved(std::size_t _index) const = 0;
229
231 virtual const std::string& getDofName(std::size_t _index) const = 0;
232
234 virtual std::size_t getNumDofs() const = 0;
235
236 //----------------------------------------------------------------------------
238 //----------------------------------------------------------------------------
239
241 virtual void setCommand(std::size_t _index, double _command) = 0;
242
244 virtual double getCommand(std::size_t _index) const = 0;
245
247 virtual void setCommands(const Eigen::VectorXd& _commands) = 0;
248
250 virtual Eigen::VectorXd getCommands() const = 0;
251
253 virtual void resetCommands() = 0;
254
256
257 //----------------------------------------------------------------------------
259 //----------------------------------------------------------------------------
260
262 virtual void setPosition(std::size_t _index, double _position) = 0;
263
265 virtual double getPosition(std::size_t _index) const = 0;
266
268 virtual void setPositions(const Eigen::VectorXd& _positions) = 0;
269
271 virtual Eigen::VectorXd getPositions() const = 0;
272
274 virtual void setPositionLowerLimit(std::size_t _index, double _position) = 0;
275
277 virtual double getPositionLowerLimit(std::size_t _index) const = 0;
278
280 virtual void setPositionLowerLimits(const Eigen::VectorXd& lowerLimits) = 0;
281
283 virtual Eigen::VectorXd getPositionLowerLimits() const = 0;
284
286 virtual void setPositionUpperLimit(std::size_t _index, double _position) = 0;
287
289 virtual double getPositionUpperLimit(std::size_t _index) const = 0;
290
292 virtual void setPositionUpperLimits(const Eigen::VectorXd& upperLimits) = 0;
293
295 virtual Eigen::VectorXd getPositionUpperLimits() const = 0;
296
302 virtual bool isCyclic(std::size_t _index) const = 0;
303
305 virtual bool hasPositionLimit(std::size_t _index) const = 0;
306
308 virtual void resetPosition(std::size_t _index) = 0;
309
312 virtual void resetPositions() = 0;
313
315 virtual void setInitialPosition(std::size_t _index, double _initial) = 0;
316
318 virtual double getInitialPosition(std::size_t _index) const = 0;
319
322 virtual void setInitialPositions(const Eigen::VectorXd& _initial) = 0;
323
326 virtual Eigen::VectorXd getInitialPositions() const = 0;
327
329
330 //----------------------------------------------------------------------------
332 //----------------------------------------------------------------------------
333
335 virtual void setVelocity(std::size_t _index, double _velocity) = 0;
336
338 virtual double getVelocity(std::size_t _index) const = 0;
339
341 virtual void setVelocities(const Eigen::VectorXd& _velocities) = 0;
342
344 virtual Eigen::VectorXd getVelocities() const = 0;
345
347 virtual void setVelocityLowerLimit(std::size_t _index, double _velocity) = 0;
348
350 virtual double getVelocityLowerLimit(std::size_t _index) const = 0;
351
353 virtual void setVelocityLowerLimits(const Eigen::VectorXd& lowerLimits) = 0;
354
356 virtual Eigen::VectorXd getVelocityLowerLimits() const = 0;
357
359 virtual void setVelocityUpperLimit(std::size_t _index, double _velocity) = 0;
360
362 virtual double getVelocityUpperLimit(std::size_t _index) const = 0;
363
365 virtual void setVelocityUpperLimits(const Eigen::VectorXd& upperLimits) = 0;
366
368 virtual Eigen::VectorXd getVelocityUpperLimits() const = 0;
369
372 virtual void resetVelocity(std::size_t _index) = 0;
373
376 virtual void resetVelocities() = 0;
377
379 virtual void setInitialVelocity(std::size_t _index, double _initial) = 0;
380
382 virtual double getInitialVelocity(std::size_t _index) const = 0;
383
386 virtual void setInitialVelocities(const Eigen::VectorXd& _initial) = 0;
387
390 virtual Eigen::VectorXd getInitialVelocities() const = 0;
391
393
394 //----------------------------------------------------------------------------
396 //----------------------------------------------------------------------------
397
399 virtual void setAcceleration(std::size_t _index, double _acceleration) = 0;
400
402 virtual double getAcceleration(std::size_t _index) const = 0;
403
405 virtual void setAccelerations(const Eigen::VectorXd& _accelerations) = 0;
406
408 virtual Eigen::VectorXd getAccelerations() const = 0;
409
411 virtual void resetAccelerations() = 0;
412
414 virtual void setAccelerationLowerLimit(std::size_t _index, double _acceleration) = 0;
415
417 virtual double getAccelerationLowerLimit(std::size_t _index) const = 0;
418
420 virtual void setAccelerationLowerLimits(const Eigen::VectorXd& lowerLimits) = 0;
421
423 virtual Eigen::VectorXd getAccelerationLowerLimits() const = 0;
424
426 virtual void setAccelerationUpperLimit(std::size_t _index, double _acceleration) = 0;
427
429 virtual double getAccelerationUpperLimit(std::size_t _index) const = 0;
430
432 virtual void setAccelerationUpperLimits(const Eigen::VectorXd& upperLimits) = 0;
433
435 virtual Eigen::VectorXd getAccelerationUpperLimits() const = 0;
436
438
439 //----------------------------------------------------------------------------
441 //----------------------------------------------------------------------------
442
444 virtual void setForce(std::size_t _index, double _force) = 0;
445
447 virtual double getForce(std::size_t _index) const = 0;
448
450 virtual void setForces(const Eigen::VectorXd& _forces) = 0;
451
453 virtual Eigen::VectorXd getForces() const = 0;
454
456 virtual void resetForces() = 0;
457
459 virtual void setForceLowerLimit(std::size_t _index, double _force) = 0;
460
462 virtual double getForceLowerLimit(std::size_t _index) const = 0;
463
465 virtual void setForceLowerLimits(const Eigen::VectorXd& lowerLimits) = 0;
466
468 virtual Eigen::VectorXd getForceLowerLimits() const = 0;
469
471 virtual void setForceUpperLimit(std::size_t _index, double _force) = 0;
472
474 virtual double getForceUpperLimit(std::size_t _index) const = 0;
475
477 virtual void setForceUpperLimits(const Eigen::VectorXd& upperLimits) = 0;
478
480 virtual Eigen::VectorXd getForceUpperLimits() const = 0;
481
483
484 //----------------------------------------------------------------------------
486 //----------------------------------------------------------------------------
487
490 // TODO: Consider extending this to a more comprehensive sanity check
491 bool checkSanity(bool _printWarnings = true) const;
492
493 //----------------------------------------------------------------------------
495 //----------------------------------------------------------------------------
496
498 virtual void setVelocityChange(std::size_t _index, double _velocityChange) = 0;
499
501 virtual double getVelocityChange(std::size_t _index) const = 0;
502
504 virtual void resetVelocityChanges() = 0;
505
507
508 //----------------------------------------------------------------------------
510 //----------------------------------------------------------------------------
511
513 virtual void setConstraintImpulse(std::size_t _index, double _impulse) = 0;
514
516 virtual double getConstraintImpulse(std::size_t _index) const = 0;
517
519 virtual void resetConstraintImpulses() = 0;
520
522
523 //----------------------------------------------------------------------------
525 //----------------------------------------------------------------------------
526
528 virtual void integratePositions(double _dt) = 0;
529
531 virtual void integrateVelocities(double _dt) = 0;
532
535 virtual Eigen::VectorXd getPositionDifferences(
536 const Eigen::VectorXd& _q2, const Eigen::VectorXd& _q1) const = 0;
537
539
540 //----------------------------------------------------------------------------
542 //----------------------------------------------------------------------------
543
547 virtual void setSpringStiffness(std::size_t _index, double _k) = 0;
548
551 virtual double getSpringStiffness(std::size_t _index) const = 0;
552
556 virtual void setRestPosition(std::size_t _index, double _q0) = 0;
557
561 virtual double getRestPosition(std::size_t _index) const = 0;
562
566 virtual void setDampingCoefficient(std::size_t _index, double _coeff) = 0;
567
570 virtual double getDampingCoefficient(std::size_t _index) const = 0;
571
575 virtual void setCoulombFriction(std::size_t _index, double _friction) = 0;
576
579 virtual double getCoulombFriction(std::size_t _index) const = 0;
580
582
583 //----------------------------------------------------------------------------
584
586 DART_DEPRECATED(6.1)
587 double getPotentialEnergy() const;
588
590 virtual double computePotentialEnergy() const = 0;
591
592 //----------------------------------------------------------------------------
593
595 DART_DEPRECATED(6.0)
596 const Eigen::Isometry3d& getLocalTransform() const;
597
599 DART_DEPRECATED(6.0)
600 const Eigen::Vector6d& getLocalSpatialVelocity() const;
601
603 DART_DEPRECATED(6.0)
604 const Eigen::Vector6d& getLocalSpatialAcceleration() const;
605
607 DART_DEPRECATED(6.0)
608 const Eigen::Vector6d& getLocalPrimaryAcceleration() const;
609
611 DART_DEPRECATED(6.0)
612 const math::Jacobian getLocalJacobian() const;
613
615 DART_DEPRECATED(6.0)
616 math::Jacobian getLocalJacobian(const Eigen::VectorXd& positions) const;
617
619 DART_DEPRECATED(6.0)
620 const math::Jacobian getLocalJacobianTimeDeriv() const;
621
624 const Eigen::Isometry3d& getRelativeTransform() const;
625
628 const Eigen::Vector6d& getRelativeSpatialVelocity() const;
629
632 const Eigen::Vector6d& getRelativeSpatialAcceleration() const;
633
635 const Eigen::Vector6d& getRelativePrimaryAcceleration() const;
636
639 virtual const math::Jacobian getRelativeJacobian() const = 0;
640
643 virtual math::Jacobian getRelativeJacobian(
644 const Eigen::VectorXd& positions) const = 0;
645
648 virtual const math::Jacobian getRelativeJacobianTimeDeriv() const = 0;
649
651 virtual Eigen::Vector6d getBodyConstraintWrench() const = 0;
652 // TODO: Need more informative name.
653
667// Eigen::VectorXd getSpringForces(double _timeStep) const;
668
679// Eigen::VectorXd getDampingForces() const;
680
681
682 //----------------------------------------------------------------------------
684 //----------------------------------------------------------------------------
685
687 DART_DEPRECATED(6.2)
689
692
694 DART_DEPRECATED(6.2)
696
699
701 DART_DEPRECATED(6.2)
703
706
708
709 //----------------------------------------------------------------------------
710 // Friendship
711 //----------------------------------------------------------------------------
712
713 friend class BodyNode;
714 friend class SoftBodyNode;
715 friend class Skeleton;
716
717protected:
718
720 Joint();
721
724 virtual Joint* clone() const = 0;
725
727 virtual void registerDofs() = 0;
728
737 DegreeOfFreedom* createDofPointer(std::size_t _indexInJoint);
738
741 virtual void updateDegreeOfFreedomNames() = 0;
742
743 //----------------------------------------------------------------------------
745 //----------------------------------------------------------------------------
746
748 DART_DEPRECATED(6.0)
749 void updateLocalTransform() const;
750
752 DART_DEPRECATED(6.0)
753 void updateLocalSpatialVelocity() const;
754
756 DART_DEPRECATED(6.0)
758
760 DART_DEPRECATED(6.0)
762
764 DART_DEPRECATED(6.0)
765 void updateLocalJacobian(bool mandatory = true) const;
766
768 DART_DEPRECATED(6.0)
769 void updateLocalJacobianTimeDeriv() const;
770
773 virtual void updateRelativeTransform() const = 0;
774
777 virtual void updateRelativeSpatialVelocity() const = 0;
778
781 virtual void updateRelativeSpatialAcceleration() const = 0;
782
784 virtual void updateRelativePrimaryAcceleration() const = 0;
785
793 virtual void updateRelativeJacobian(bool mandatory = true) const = 0;
794
800 virtual void updateRelativeJacobianTimeDeriv() const = 0;
801
803 void updateArticulatedInertia() const;
804
806 virtual void addVelocityTo(Eigen::Vector6d& _vel) = 0;
807
810 Eigen::Vector6d& _partialAcceleration,
811 const Eigen::Vector6d& _childVelocity) = 0;
812 // TODO(JS): Rename with more informative name
813
815 virtual void addAccelerationTo(Eigen::Vector6d& _acc) = 0;
816
818 virtual void addVelocityChangeTo(Eigen::Vector6d& _velocityChange) = 0;
819
822 Eigen::Matrix6d& _parentArtInertia,
823 const Eigen::Matrix6d& _childArtInertia) = 0;
824
827 Eigen::Matrix6d& _parentArtInertiaImplicit,
828 const Eigen::Matrix6d& _childArtInertiaImplicit) = 0;
829 // TODO(JS): rename to updateAInertiaChildAInertia()
830
832 virtual void updateInvProjArtInertia(const Eigen::Matrix6d& _artInertia) = 0;
833
836 const Eigen::Matrix6d& _artInertia,
837 double _timeStep) = 0;
838 // TODO(JS): rename to updateAInertiaPsi()
839
842 Eigen::Vector6d& _parentBiasForce,
843 const Eigen::Matrix6d& _childArtInertia,
844 const Eigen::Vector6d& _childBiasForce,
845 const Eigen::Vector6d& _childPartialAcc) = 0;
846
849 Eigen::Vector6d& _parentBiasImpulse,
850 const Eigen::Matrix6d& _childArtInertia,
851 const Eigen::Vector6d& _childBiasImpulse) = 0;
852
854 virtual void updateTotalForce(const Eigen::Vector6d& _bodyForce,
855 double _timeStep) = 0;
856 // TODO: rename
857
859 virtual void updateTotalImpulse(const Eigen::Vector6d& _bodyImpulse) = 0;
860 // TODO: rename
861
863 virtual void resetTotalImpulses() = 0;
864
866 virtual void updateAcceleration(const Eigen::Matrix6d& _artInertia,
867 const Eigen::Vector6d& _spatialAcc) = 0;
868
873 const Eigen::Matrix6d& _artInertia,
874 const Eigen::Vector6d& _velocityChange) = 0;
875
880 virtual void updateForceID(const Eigen::Vector6d& _bodyForce,
881 double _timeStep,
882 bool _withDampingForces,
883 bool _withSpringForces) = 0;
884
889 virtual void updateForceFD(const Eigen::Vector6d& _bodyForce,
890 double _timeStep,
891 bool _withDampingForcese,
892 bool _withSpringForces) = 0;
893
895 virtual void updateImpulseID(const Eigen::Vector6d& _bodyImpulse) = 0;
896
898 virtual void updateImpulseFD(const Eigen::Vector6d& _bodyImpulse) = 0;
899
901 virtual void updateConstrainedTerms(double _timeStep) = 0;
902
904
905 //----------------------------------------------------------------------------
907 //----------------------------------------------------------------------------
908
911 Eigen::Vector6d& _parentBiasForce,
912 const Eigen::Matrix6d& _childArtInertia,
913 const Eigen::Vector6d& _childBiasForce) = 0;
914
917 Eigen::Vector6d& _parentBiasForce,
918 const Eigen::Matrix6d& _childArtInertia,
919 const Eigen::Vector6d& _childBiasForce) = 0;
920
923 const Eigen::Vector6d& _bodyForce) = 0;
924
926 virtual void getInvMassMatrixSegment(Eigen::MatrixXd& _invMassMat,
927 const std::size_t _col,
928 const Eigen::Matrix6d& _artInertia,
929 const Eigen::Vector6d& _spatialAcc) = 0;
930
932 virtual void getInvAugMassMatrixSegment(Eigen::MatrixXd& _invMassMat,
933 const std::size_t _col,
934 const Eigen::Matrix6d& _artInertia,
935 const Eigen::Vector6d& _spatialAcc) = 0;
936
938 virtual void addInvMassMatrixSegmentTo(Eigen::Vector6d& _acc) = 0;
939
942 const Eigen::Vector6d& _spatial) = 0;
943
945
946protected:
947
950
955 mutable Eigen::Isometry3d mT;
956
961 mutable Eigen::Vector6d mSpatialVelocity;
962
967 mutable Eigen::Vector6d mSpatialAcceleration;
968
972 mutable Eigen::Vector6d mPrimaryAcceleration;
973
977 // TODO(JS): Rename this to mIsTransformDirty in DART 7
978
982 // TODO(JS): Rename this to mIsSpatialVelocityDirty in DART 7
983
987 // TODO(JS): Rename this to mIsSpatialAccelerationDirty in DART 7
988
992 // TODO(JS): Rename this to mIsPrimaryAccelerationDirty in DART 7
993
997
1001
1002public:
1003
1004 // To get byte-aligned Eigen vectors
1005 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
1006};
1007
1008} // namespace dynamics
1009} // namespace dart
1010
1011#endif // DART_DYNAMICS_JOINT_HPP_
#define DART_DEPRECATED(version)
Definition Deprecated.hpp:51
BodyPropPtr properties
Definition SdfParser.cpp:80
detail::CompositeProperties Properties
Definition Composite.hpp:56
Inherit this class to embed Properties into your Composite object.
Definition EmbeddedAspect.hpp:210
typename Aspect::Properties AspectProperties
Definition EmbeddedAspect.hpp:215
This is the implementation of a standard embedded-properties Aspect.
Definition EmbeddedAspect.hpp:169
The Subject class is a base class for any object that wants to report when it gets destroyed.
Definition Subject.hpp:58
VersionCounter is an interface for objects that count their versions.
Definition VersionCounter.hpp:43
Definition CompositeData.hpp:104
BodyNode class represents a single node of the skeleton.
Definition BodyNode.hpp:78
DegreeOfFreedom class is a proxy class for accessing single degrees of freedom (aka generalized coord...
Definition DegreeOfFreedom.hpp:53
class Joint
Definition Joint.hpp:59
virtual void updateInvProjArtInertia(const Eigen::Matrix6d &_artInertia)=0
Update inverse of projected articulated body inertia.
virtual const std::string & getType() const =0
Gets a string representing the joint type.
bool mNeedSpatialAccelerationUpdate
True iff this joint's position, velocity, or acceleration has changed since the last call to getRelat...
Definition Joint.hpp:986
virtual double getVelocityLowerLimit(std::size_t _index) const =0
Get lower limit for velocity.
virtual void updateForceID(const Eigen::Vector6d &_bodyForce, double _timeStep, bool _withDampingForces, bool _withSpringForces)=0
Update joint force for inverse dynamics.
virtual void updateTotalForceForInvMassMatrix(const Eigen::Vector6d &_bodyForce)=0
virtual double getDampingCoefficient(std::size_t _index) const =0
Get coefficient of joint damping (viscous friction) force.
virtual double getInitialPosition(std::size_t _index) const =0
Get the position that resetPosition() will give to this coordinate.
virtual void setTransformFromChildBodyNode(const Eigen::Isometry3d &_T)
Set transformation from child body node to this joint.
Definition Joint.cpp:448
virtual void updateImpulseFD(const Eigen::Vector6d &_bodyImpulse)=0
Update joint impulses for forward dynamics.
virtual Eigen::VectorXd getForces() const =0
Get the forces of all generalized coordinates in this Joint.
virtual Eigen::VectorXd getSpatialToGeneralized(const Eigen::Vector6d &_spatial)=0
virtual void updateTotalImpulse(const Eigen::Vector6d &_bodyImpulse)=0
Update joint total impulse.
virtual double getVelocityUpperLimit(std::size_t _index) const =0
Get upper limit for velocity.
void setActuatorType(ActuatorType _actuatorType)
Set actuator type.
Definition Joint.cpp:186
virtual void updateForceFD(const Eigen::Vector6d &_bodyForce, double _timeStep, bool _withDampingForcese, bool _withSpringForces)=0
Update joint force for forward dynamics.
Eigen::Vector6d mPrimaryAcceleration
J * q_dd.
Definition Joint.hpp:972
virtual double getAccelerationUpperLimit(std::size_t _index) const =0
Get upper limit for acceleration.
virtual void addChildBiasForceForInvMassMatrix(Eigen::Vector6d &_parentBiasForce, const Eigen::Matrix6d &_childArtInertia, const Eigen::Vector6d &_childBiasForce)=0
Add child's bias force to parent's one.
virtual void setPositions(const Eigen::VectorXd &_positions)=0
Set the positions of all generalized coordinates in this Joint.
virtual void resetPosition(std::size_t _index)=0
Set the position of this generalized coordinate to its initial position.
virtual void setForceUpperLimit(std::size_t _index, double _force)=0
Set upper limit for force.
virtual void resetConstraintImpulses()=0
Set zero all the constraint impulses.
virtual std::size_t getNumDofs() const =0
Get number of generalized coordinates.
virtual void setCommand(std::size_t _index, double _command)=0
Set a single command.
const Eigen::Vector6d & getRelativePrimaryAcceleration() const
Get J * \ddot{q} of this joint.
Definition Joint.cpp:342
detail::ActuatorType ActuatorType
Definition Joint.hpp:65
virtual void resetAccelerations()=0
Set the accelerations of all generalized coordinates in this Joint to zero.
virtual double getForceUpperLimit(std::size_t _index) const =0
Get upper limit for force.
virtual void setInitialVelocity(std::size_t _index, double _initial)=0
Change the velocity that resetVelocity() will give to this coordinate.
virtual void updateInvProjArtInertiaImplicit(const Eigen::Matrix6d &_artInertia, double _timeStep)=0
Forward dynamics routine.
virtual void updateRelativeJacobianTimeDeriv() const =0
Update time derivative of spatial Jacobian of the child BodyNode relative to the parent BodyNode expr...
virtual void updateRelativeJacobian(bool mandatory=true) const =0
Update spatial Jacobian of the child BodyNode relative to the parent BodyNode expressed in the child ...
const Eigen::Vector6d & getLocalSpatialVelocity() const
Deprecated. Use getLocalSpatialVelocity() instead.
Definition Joint.cpp:270
bool mNeedPrimaryAccelerationUpdate
True iff this joint's position, velocity, or acceleration has changed since the last call to getRelat...
Definition Joint.hpp:991
virtual Eigen::VectorXd getPositionUpperLimits() const =0
Get the position upper limits of all the generalized coordinates.
virtual double getConstraintImpulse(std::size_t _index) const =0
Get a single constraint impulse.
virtual void updateDegreeOfFreedomNames()=0
Update the names of the joint's degrees of freedom.
static constexpr ActuatorType PASSIVE
Definition Joint.hpp:67
virtual void setVelocity(std::size_t _index, double _velocity)=0
Set the velocity of a single generalized coordinate.
virtual double computePotentialEnergy() const =0
Compute and return the potential energy.
virtual void setForces(const Eigen::VectorXd &_forces)=0
Set the forces of all generalized coordinates in this Joint.
virtual void getInvAugMassMatrixSegment(Eigen::MatrixXd &_invMassMat, const std::size_t _col, const Eigen::Matrix6d &_artInertia, const Eigen::Vector6d &_spatialAcc)=0
std::size_t getJointIndexInSkeleton() const
Get the index of this Joint within its Skeleton.
Definition Joint.cpp:366
virtual double getForceLowerLimit(std::size_t _index) const =0
Get lower limit for force.
virtual void setInitialVelocities(const Eigen::VectorXd &_initial)=0
Change the velocities that resetVelocities() will give to this Joint's coordinates.
virtual void resetVelocityChanges()=0
Set zero all the velocity change.
virtual void setAccelerationLowerLimit(std::size_t _index, double _acceleration)=0
Set lower limit for acceleration.
const std::string & getName() const
Get joint name.
Definition Joint.cpp:180
const Eigen::Vector6d & getLocalSpatialAcceleration() const
Deprecated. Use getLocalSpatialAcceleration() instead.
Definition Joint.cpp:276
bool mNeedSpatialVelocityUpdate
True iff this joint's position or velocity has changed since the last call to getRelativeSpatialVeloc...
Definition Joint.hpp:981
bool checkSanity(bool _printWarnings=true) const
Returns false if the initial position or initial velocity are outside of limits.
Definition Joint.cpp:384
const Eigen::Isometry3d & getLocalTransform() const
Deprecated. Use getRelativeTransform() instead.
Definition Joint.cpp:264
virtual void setVelocityUpperLimits(const Eigen::VectorXd &upperLimits)=0
Set the velocity upper limits of all the generalized coordinates.
static constexpr ActuatorType SERVO
Definition Joint.hpp:68
virtual void integratePositions(double _dt)=0
Integrate positions using Euler method.
virtual void setForceUpperLimits(const Eigen::VectorXd &upperLimits)=0
Set the force upper limits of all the generalized coordinates.
virtual double getVelocityChange(std::size_t _index) const =0
Get a single velocity change.
virtual Eigen::VectorXd getPositionDifferences(const Eigen::VectorXd &_q2, const Eigen::VectorXd &_q1) const =0
Return the difference of two generalized coordinates which are measured in the configuration space of...
BodyNode * getParentBodyNode()
Get the parent BodyNode of this Joint.
Definition Joint.cpp:237
virtual double getSpringStiffness(std::size_t _index) const =0
Get stiffness of joint spring force.
static constexpr ActuatorType ACCELERATION
Definition Joint.hpp:69
Eigen::Vector6d mSpatialAcceleration
Relative spatial acceleration from parent BodyNode to child BodyNode where the acceleration is expres...
Definition Joint.hpp:967
virtual void updateVelocityChange(const Eigen::Matrix6d &_artInertia, const Eigen::Vector6d &_velocityChange)=0
Update joint velocity change.
virtual void addChildBiasImpulseTo(Eigen::Vector6d &_parentBiasImpulse, const Eigen::Matrix6d &_childArtInertia, const Eigen::Vector6d &_childBiasImpulse)=0
Add child's bias impulse to parent's one.
virtual void resetForces()=0
Set the forces of all generalized coordinates in this Joint to zero.
virtual void setTransformFromParentBodyNode(const Eigen::Isometry3d &_T)
Set transformation from parent body node to this joint.
Definition Joint.cpp:440
virtual double getVelocity(std::size_t _index) const =0
Get the velocity of a single generalized coordinate.
virtual double getAcceleration(std::size_t _index) const =0
Get the acceleration of a single generalized coordinate.
virtual void updateRelativeSpatialVelocity() const =0
Update spatial velocity of the child BodyNode relative to the parent BodyNode expressed in the child ...
void updateArticulatedInertia() const
Tells the Skeleton to update the articulated inertia if it needs updating.
Definition Joint.cpp:528
bool mNeedTransformUpdate
True iff this joint's position has changed since the last call to getRelativeTransform()
Definition Joint.hpp:976
detail::JointProperties Properties
Definition Joint.hpp:63
DegreeOfFreedom * createDofPointer(std::size_t _indexInJoint)
Create a DegreeOfFreedom pointer.
Definition Joint.cpp:486
void updateLocalSpatialVelocity() const
Deprecated. Use updateRelativeSpatialVelocity() instead.
Definition Joint.cpp:498
void notifyAccelerationUpdate()
Notify that an acceleration has updated.
Definition Joint.cpp:617
static constexpr ActuatorType LOCKED
Definition Joint.hpp:71
virtual double getCommand(std::size_t _index) const =0
Get a single command.
void notifyVelocityUpdated()
Notify that a velocity has updated.
Definition Joint.cpp:602
void copy(const Joint &_otherJoint)
Copy the properties of another Joint.
Definition Joint.cpp:125
Eigen::Vector6d mSpatialVelocity
Relative spatial velocity from parent BodyNode to child BodyNode where the velocity is expressed in c...
Definition Joint.hpp:961
void notifyPositionUpdate()
Notify that a position has updated.
Definition Joint.cpp:562
virtual void setPositionLowerLimit(std::size_t _index, double _position)=0
Set lower limit for position.
virtual void addAccelerationTo(Eigen::Vector6d &_acc)=0
Add joint acceleration to _acc.
virtual Joint * clone() const =0
Create a clone of this Joint.
virtual void preserveDofName(std::size_t _index, bool _preserve)=0
Alternative to DegreeOfFreedom::preserveName()
virtual Eigen::VectorXd getVelocityUpperLimits() const =0
Get the velocity upper limits of all the generalized coordinates.
virtual void setInitialPosition(std::size_t _index, double _initial)=0
Change the position that resetPositions() will give to this coordinate.
virtual Eigen::VectorXd getInitialVelocities() const =0
Get the velocities that resetVelocities() will give to this Joint's coordinates.
const std::string & setName(const std::string &_name, bool _renameDofs=true)
Set joint name and return the name.
Definition Joint.cpp:150
virtual Eigen::VectorXd getVelocityLowerLimits() const =0
Get the velocity lower limits of all the generalized coordinates.
virtual Eigen::VectorXd getInitialPositions() const =0
Get the positions that resetPositions() will give to this Joint's coordinates.
virtual void resetPositions()=0
Set the positions of all generalized coordinates in this Joint to their initial positions.
BodyNode * mChildBodyNode
Child BodyNode pointer that this Joint belongs to.
Definition Joint.hpp:949
bool isKinematic() const
Return true if this joint is kinematic joint.
Definition Joint.cpp:198
void setAspectProperties(const AspectProperties &properties)
Set the AspectProperties of this Joint.
Definition Joint.cpp:109
const Properties & getJointProperties() const
Get the Properties of this Joint.
Definition Joint.cpp:119
virtual std::size_t getIndexInTree(std::size_t _index) const =0
Get a unique index in the kinematic tree of a generalized coordinate in this Joint.
virtual void setConstraintImpulse(std::size_t _index, double _impulse)=0
Set a single constraint impulse.
virtual Eigen::VectorXd getCommands() const =0
Get all commands for this Joint.
virtual void setForce(std::size_t _index, double _force)=0
Set the force of a single generalized coordinate.
ActuatorType getActuatorType() const
Get actuator type.
Definition Joint.cpp:192
virtual double getRestPosition(std::size_t _index) const =0
Get rest position of spring force.
virtual bool hasPositionLimit(std::size_t _index) const =0
Get whether the position of a generalized coordinate has limits.
const Eigen::Isometry3d & getRelativeTransform() const
Get transform of the child BodyNode relative to the parent BodyNode expressed in the child BodyNode f...
Definition Joint.cpp:306
virtual void setAccelerations(const Eigen::VectorXd &_accelerations)=0
Set the accelerations of all generalized coordinates in this Joint.
virtual void addInvMassMatrixSegmentTo(Eigen::Vector6d &_acc)=0
virtual void setVelocityLowerLimits(const Eigen::VectorXd &lowerLimits)=0
Set the velocity lower limits of all the generalized coordinates.
virtual const std::string & getDofName(std::size_t _index) const =0
Alternative to DegreeOfFreedom::getName()
virtual const DegreeOfFreedom * getDof(std::size_t _index) const =0
Get an object to access the _index-th degree of freedom (generalized coordinate) of this Joint.
const Eigen::Vector6d & getRelativeSpatialAcceleration() const
Get spatial acceleration of the child BodyNode relative to the parent BodyNode expressed in the child...
Definition Joint.cpp:330
void notifyVelocityUpdate()
Notify that a velocity has updated.
Definition Joint.cpp:596
virtual void updateRelativePrimaryAcceleration() const =0
Update J * \ddot{q} of this joint.
virtual void setPositionUpperLimit(std::size_t _index, double _position)=0
Set upper limit for position.
virtual void resetVelocities()=0
Set the velocities of all generalized coordinates in this Joint to their initial velocities.
virtual double getAccelerationLowerLimit(std::size_t _index) const =0
Get lower limit for acceleration.
virtual void setForceLowerLimits(const Eigen::VectorXd &lowerLimits)=0
Set the force upper limits of all the generalized coordinates.
virtual Eigen::VectorXd getAccelerations() const =0
Get the accelerations of all generalized coordinates in this Joint.
virtual void setDampingCoefficient(std::size_t _index, double _coeff)=0
Set coefficient of joint damping (viscous friction) force.
virtual void setVelocityChange(std::size_t _index, double _velocityChange)=0
Set a single velocity change.
virtual void resetVelocity(std::size_t _index)=0
Set the velocity of a generalized coordinate in this Joint to its initial velocity.
virtual void setSpringStiffness(std::size_t _index, double _k)=0
Set stiffness of joint spring force.
SkeletonPtr getSkeleton()
Get the Skeleton that this Joint belongs to.
Definition Joint.cpp:252
static constexpr ActuatorType FORCE
Definition Joint.hpp:66
virtual void setAcceleration(std::size_t _index, double _acceleration)=0
Set the acceleration of a single generalized coordinate.
void updateLocalSpatialAcceleration() const
Deprecated. Use updateRelativeSpatialAcceleration() instead.
Definition Joint.cpp:504
virtual void registerDofs()=0
Called by the Skeleton class.
virtual Eigen::VectorXd getForceLowerLimits() const =0
Get the force upper limits of all the generalized coordinates.
virtual void setRestPosition(std::size_t _index, double _q0)=0
Set rest position of spring force.
virtual void getInvMassMatrixSegment(Eigen::MatrixXd &_invMassMat, const std::size_t _col, const Eigen::Matrix6d &_artInertia, const Eigen::Vector6d &_spatialAcc)=0
Joint(const Joint &)=delete
void notifyAccelerationUpdated()
Notify that an acceleration has updated.
Definition Joint.cpp:623
Joint & operator=(const Joint &_otherJoint)
Same as copy(const Joint&)
Definition Joint.cpp:143
virtual void setPositionUpperLimits(const Eigen::VectorXd &upperLimits)=0
Set the position upper limits of all the generalized coordinates.
virtual void addChildArtInertiaImplicitTo(Eigen::Matrix6d &_parentArtInertiaImplicit, const Eigen::Matrix6d &_childArtInertiaImplicit)=0
Add child's articulated inertia to parent's one. Forward dynamics routine.
virtual void setPositionLowerLimits(const Eigen::VectorXd &lowerLimits)=0
Set the position lower limits of all the generalized coordinates.
virtual void setAccelerationLowerLimits(const Eigen::VectorXd &lowerLimits)=0
Set the acceleration upper limits of all the generalized coordinates.
bool isPositionLimitEnforced() const
Get whether enforcing joint position limit.
Definition Joint.cpp:360
static const ActuatorType DefaultActuatorType
Default actuator type.
Definition Joint.hpp:92
virtual void setForceLowerLimit(std::size_t _index, double _force)=0
Set lower limit for force.
virtual double getForce(std::size_t _index) const =0
Get the force of a single generalized coordinate.
virtual const std::string & setDofName(std::size_t _index, const std::string &_name, bool _preserveName=true)=0
Alternative to DegreeOfFreedom::setName()
virtual void setVelocities(const Eigen::VectorXd &_velocities)=0
Set the velocities of all generalized coordinates in this Joint.
std::size_t getTreeIndex() const
Get the index of the tree that this Joint belongs to.
Definition Joint.cpp:378
void updateLocalPrimaryAcceleration() const
Deprecated. Use updateRelativePrimaryAcceleration() instead.
Definition Joint.cpp:510
virtual Eigen::VectorXd getForceUpperLimits() const =0
Get the force upper limits of all the generalized coordinates.
virtual Eigen::VectorXd getAccelerationLowerLimits() const =0
Get the acceleration upper limits of all the generalized coordinates.
virtual void updateConstrainedTerms(double _timeStep)=0
Update constrained terms for forward dynamics.
void updateLocalTransform() const
Deprecated. Use updateRelativeTransform() instead.
Definition Joint.cpp:492
void notifyPositionUpdated()
Notify that a position has updated.
Definition Joint.cpp:568
virtual double getInitialVelocity(std::size_t _index) const =0
Get the velocity that resetVelocity() will give to this coordinate.
virtual void resetCommands()=0
Set all the commands for this Joint to zero.
virtual void addVelocityChangeTo(Eigen::Vector6d &_velocityChange)=0
Add joint velocity change to _velocityChange.
virtual const math::Jacobian getRelativeJacobianTimeDeriv() const =0
Get time derivative of spatial Jacobian of the child BodyNode relative to the parent BodyNode express...
const Eigen::Isometry3d & getTransformFromParentBodyNode() const
Get transformation from parent body node to this joint.
Definition Joint.cpp:457
virtual void setPartialAccelerationTo(Eigen::Vector6d &_partialAcceleration, const Eigen::Vector6d &_childVelocity)=0
Set joint partial acceleration to _partialAcceleration.
virtual double getPositionLowerLimit(std::size_t _index) const =0
Get lower limit for position.
virtual void updateRelativeTransform() const =0
Update transform of the child BodyNode relative to the parent BodyNode expressed in the child BodyNod...
virtual double getPosition(std::size_t _index) const =0
Get the position of a single generalized coordinate.
virtual Eigen::VectorXd getPositions() const =0
Get the positions of all generalized coordinates in this Joint.
virtual void addChildBiasForceTo(Eigen::Vector6d &_parentBiasForce, const Eigen::Matrix6d &_childArtInertia, const Eigen::Vector6d &_childBiasForce, const Eigen::Vector6d &_childPartialAcc)=0
Add child's bias force to parent's one.
virtual DegreeOfFreedom * getDof(std::size_t _index)=0
Get an object to access the _index-th degree of freedom (generalized coordinate) of this Joint.
void setPositionLimitEnforced(bool _isPositionLimitEnforced)
Set to enforce joint position limit.
Definition Joint.cpp:354
virtual double getCoulombFriction(std::size_t _index) const =0
Get joint Coulomb friction froce.
virtual void addChildArtInertiaTo(Eigen::Matrix6d &_parentArtInertia, const Eigen::Matrix6d &_childArtInertia)=0
Add child's articulated inertia to parent's one.
bool mIsRelativeJacobianTimeDerivDirty
True iff this joint's relative Jacobian time derivative has not been updated since the last position ...
Definition Joint.hpp:1000
virtual void addChildBiasForceForInvAugMassMatrix(Eigen::Vector6d &_parentBiasForce, const Eigen::Matrix6d &_childArtInertia, const Eigen::Vector6d &_childBiasForce)=0
Add child's bias force to parent's one.
Eigen::Isometry3d mT
Relative transformation of the child BodyNode relative to the parent BodyNode expressed in the child ...
Definition Joint.hpp:955
void updateLocalJacobianTimeDeriv() const
Deprecated. Use updateRelativeJacobianTimeDeriv() instead.
Definition Joint.cpp:522
const Eigen::Vector6d & getRelativeSpatialVelocity() const
Get spatial velocity of the child BodyNode relative to the parent BodyNode expressed in the child Bod...
Definition Joint.cpp:318
virtual void setCoulombFriction(std::size_t _index, double _friction)=0
Set joint Coulomb friction froce.
virtual void setCommands(const Eigen::VectorXd &_commands)=0
Set all commands for this Joint.
const math::Jacobian getLocalJacobianTimeDeriv() const
Deprecated. Use getRelativeJacobianTimeDeriv() instead.
Definition Joint.cpp:300
virtual const math::Jacobian getRelativeJacobian() const =0
Get spatial Jacobian of the child BodyNode relative to the parent BodyNode expressed in the child Bod...
virtual void setVelocityUpperLimit(std::size_t _index, double _velocity)=0
Set upper limit for velocity.
double getPotentialEnergy() const
Get potential energy.
Definition Joint.cpp:434
const Eigen::Isometry3d & getTransformFromChildBodyNode() const
Get transformation from child body node to this joint.
Definition Joint.cpp:463
virtual void updateTotalForce(const Eigen::Vector6d &_bodyForce, double _timeStep)=0
Update joint total force.
virtual double getPositionUpperLimit(std::size_t _index) const =0
Get upper limit for position.
BodyNode * getChildBodyNode()
Get the child BodyNode of this Joint.
Definition Joint.cpp:225
virtual void setInitialPositions(const Eigen::VectorXd &_initial)=0
Change the positions that resetPositions() will give to this Joint's coordinates.
bool mIsRelativeJacobianDirty
True iff this joint's relative Jacobian has not been updated since the last position change.
Definition Joint.hpp:996
void updateLocalJacobian(bool mandatory=true) const
Deprecated. Use updateRelativeJacobian() instead.
Definition Joint.cpp:516
virtual Eigen::VectorXd getAccelerationUpperLimits() const =0
Get the acceleration upper limits of all the generalized coordinates.
virtual Eigen::VectorXd getPositionLowerLimits() const =0
Get the position lower limits of all the generalized coordinates.
virtual void updateAcceleration(const Eigen::Matrix6d &_artInertia, const Eigen::Vector6d &_spatialAcc)=0
Update joint acceleration.
virtual void resetTotalImpulses()=0
Set total impulses to zero.
virtual void updateImpulseID(const Eigen::Vector6d &_bodyImpulse)=0
Update joint impulses for inverse dynamics.
virtual void setVelocityLowerLimit(std::size_t _index, double _velocity)=0
Set lower limit for velocity.
virtual void setPosition(std::size_t _index, double _position)=0
Set the position of a single generalized coordinate.
void setProperties(const Properties &properties)
Set the Properties of this Joint.
Definition Joint.cpp:103
bool isDynamic() const
Return true if this joint is dynamic joint.
Definition Joint.cpp:219
virtual bool isDofNamePreserved(std::size_t _index) const =0
Alternative to DegreeOfFreedom::isNamePreserved()
virtual void addVelocityTo(Eigen::Vector6d &_vel)=0
Add joint velocity to _vel.
virtual Eigen::VectorXd getVelocities() const =0
Get the velocities of all generalized coordinates in this Joint.
common::Composite::Properties CompositeProperties
Definition Joint.hpp:62
virtual void integrateVelocities(double _dt)=0
Integrate velocities using Euler method.
static constexpr ActuatorType VELOCITY
Definition Joint.hpp:70
const Eigen::Vector6d & getLocalPrimaryAcceleration() const
Deprecated. Use getLocalPrimaryAcceleration() instead.
Definition Joint.cpp:282
std::size_t getJointIndexInTree() const
Get the index of this Joint within its tree.
Definition Joint.cpp:372
virtual void updateRelativeSpatialAcceleration() const =0
Update spatial acceleration of the child BodyNode relative to the parent BodyNode expressed in the ch...
virtual ~Joint()
Destructor.
Definition Joint.cpp:97
virtual void setAccelerationUpperLimits(const Eigen::VectorXd &upperLimits)=0
Set the acceleration upper limits of all the generalized coordinates.
const math::Jacobian getLocalJacobian() const
Deprecated. Use getRelativeJacobian() instead.
Definition Joint.cpp:288
virtual std::size_t getIndexInSkeleton(std::size_t _index) const =0
Get a unique index in skeleton of a generalized coordinate in this Joint.
virtual bool isCyclic(std::size_t _index) const =0
Get whether a generalized coordinate is cyclic.
virtual Eigen::Vector6d getBodyConstraintWrench() const =0
Get constraint wrench expressed in body node frame.
virtual void setAccelerationUpperLimit(std::size_t _index, double _acceleration)=0
Set upper limit for acceleration.
class Skeleton
Definition Skeleton.hpp:59
SoftBodyNode represent a soft body that has one deformable skin.
Definition SoftBodyNode.hpp:46
#define DART_BAKE_SPECIALIZED_ASPECT_IRREGULAR(TypeName, AspectName)
Definition Composite.hpp:164
Definition MathTypes.hpp:47
ActuatorType
Actuator type.
Definition JointAspect.hpp:59
@ PASSIVE
Passive joint doesn't take any command input, and the output is joint acceleration.
Definition JointAspect.hpp:72
@ FORCE
Command input is joint force, and the output is joint acceleration.
Definition JointAspect.hpp:65
@ VELOCITY
Command input is joint velocity, and the output is joint force.
Definition JointAspect.hpp:91
@ ACCELERATION
Command input is joint acceleration, and the output is joint force.
Definition JointAspect.hpp:84
@ SERVO
Command input is desired velocity, and the output is joint acceleration.
Definition JointAspect.hpp:78
@ LOCKED
Locked joint always set the velocity and acceleration to zero so that the joint dosen't move at all (...
Definition JointAspect.hpp:98
std::shared_ptr< Skeleton > SkeletonPtr
Definition SmartPointer.hpp:60
Definition BulletCollisionDetector.cpp:63
Definition SharedLibraryManager.hpp:43
CompositeProperties mCompositeProperties
Properties of all the Aspects attached to this Joint.
Definition Joint.hpp:88
Definition JointAspect.hpp:104