DART 6.10.1
Loading...
Searching...
No Matches
JacobianNode.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_JACOBIANNODE_HPP_
34#define DART_DYNAMICS_JACOBIANNODE_HPP_
35
36#include <memory>
37#include <unordered_set>
38
42
43namespace dart {
44namespace dynamics {
45
46class Skeleton;
47class DegreeOfFreedom;
48class InverseKinematics;
49
54class JacobianNode : public virtual Frame, public Node
55{
56public:
58 virtual ~JacobianNode();
59
60 using Node::getName;
61 using Node::setName;
62
65 const std::shared_ptr<InverseKinematics>& getIK(bool _createIfNull = false);
66
70 const std::shared_ptr<InverseKinematics>& getOrCreateIK();
71
75 std::shared_ptr<const InverseKinematics> getIK() const;
76
80 const std::shared_ptr<InverseKinematics>& createIK();
81
83 void clearIK();
84
85 //----------------------------------------------------------------------------
87 //----------------------------------------------------------------------------
88
90 virtual bool dependsOn(std::size_t _genCoordIndex) const = 0;
91
93 virtual std::size_t getNumDependentGenCoords() const = 0;
94
97 virtual std::size_t getDependentGenCoordIndex(
98 std::size_t _arrayIndex) const = 0;
99
101 virtual const std::vector<std::size_t>& getDependentGenCoordIndices()
102 const = 0;
103
105 virtual std::size_t getNumDependentDofs() const = 0;
106
108 virtual DegreeOfFreedom* getDependentDof(std::size_t _index) = 0;
109
111 virtual const DegreeOfFreedom* getDependentDof(std::size_t _index) const = 0;
112
114 virtual const std::vector<DegreeOfFreedom*>& getDependentDofs() = 0;
115
117 virtual const std::vector<const DegreeOfFreedom*>& getDependentDofs()
118 const = 0;
119
122 virtual const std::vector<const DegreeOfFreedom*> getChainDofs() const = 0;
123
125
126 //----------------------------------------------------------------------------
128 //----------------------------------------------------------------------------
129
132 virtual const math::Jacobian& getJacobian() const = 0;
133
136 virtual math::Jacobian getJacobian(const Frame* _inCoordinatesOf) const = 0;
137
140 virtual math::Jacobian getJacobian(const Eigen::Vector3d& _offset) const = 0;
141
145 const Eigen::Vector3d& _offset, const Frame* _inCoordinatesOf) const = 0;
146
149 virtual const math::Jacobian& getWorldJacobian() const = 0;
150
155 const Eigen::Vector3d& _offset) const = 0;
156
160 const Frame* _inCoordinatesOf = Frame::World()) const = 0;
161
165 const Eigen::Vector3d& _offset,
166 const Frame* _inCoordinatesOf = Frame::World()) const = 0;
167
171 const Frame* _inCoordinatesOf = Frame::World()) const = 0;
172
181 virtual const math::Jacobian& getJacobianSpatialDeriv() const = 0;
182
191 const Frame* _inCoordinatesOf) const = 0;
192
204 const Eigen::Vector3d& _offset) const = 0;
205
209 const Eigen::Vector3d& _offset, const Frame* _inCoordinatesOf) const = 0;
210
218 virtual const math::Jacobian& getJacobianClassicDeriv() const = 0;
219
227 const Frame* _inCoordinatesOf) const = 0;
228
237 const Eigen::Vector3d& _offset,
238 const Frame* _inCoordinatesOf = Frame::World()) const = 0;
239
247 const Frame* _inCoordinatesOf = Frame::World()) const = 0;
248
257 const Eigen::Vector3d& _offset,
258 const Frame* _inCoordinatesOf = Frame::World()) const = 0;
259
263 const Frame* _inCoordinatesOf = Frame::World()) const = 0;
264
266
269 DART_DEPRECATED(6.2)
271
274 void dirtyJacobian();
275
278 DART_DEPRECATED(6.2)
280
283 void dirtyJacobianDeriv();
284
285protected:
288
291
294
297
300
303
306};
308
309} // namespace dynamics
310} // namespace dart
311
312#endif // DART_DYNAMICS_JACOBIANNODE_HPP_
#define DART_DECLARE_CLASS_WITH_VIRTUAL_BASE_END
Definition ClassWithVirtualBase.hpp:44
#define DART_DECLARE_CLASS_WITH_VIRTUAL_BASE_BEGIN
Definition ClassWithVirtualBase.hpp:43
#define DART_DEPRECATED(version)
Definition Deprecated.hpp:51
BodyNode class represents a single node of the skeleton.
Definition BodyNode.hpp:79
DegreeOfFreedom class is a proxy class for accessing single degrees of freedom (aka generalized coord...
Definition DegreeOfFreedom.hpp:55
The Frame class serves as the backbone of DART's kinematic tree structure.
Definition Frame.hpp:58
static Frame * World()
Definition Frame.cpp:73
The InverseKinematics class provides a convenient way of setting up an IK optimization problem.
Definition InverseKinematics.hpp:76
The JacobianNode class serves as a common interface for BodyNodes and EndEffectors to both be used as...
Definition JacobianNode.hpp:55
virtual math::Jacobian getJacobian(const Eigen::Vector3d &_offset) const =0
Return the generalized Jacobian targeting an offset within the Frame of this JacobianNode.
virtual math::Jacobian getJacobian(const Frame *_inCoordinatesOf) const =0
A version of getJacobian() that lets you specify a coordinate Frame to express the Jacobian in.
virtual math::AngularJacobian getAngularJacobian(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the angular Jacobian targeting the origin of this BodyNode.
virtual std::size_t getNumDependentGenCoords() const =0
The number of the generalized coordinates which affect this JacobianNode.
virtual math::Jacobian getJacobianSpatialDeriv(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf) const =0
A version of getJacobianSpatialDeriv(const Eigen::Vector3d&) that allows an arbitrary coordinate Fram...
std::unordered_set< JacobianNode * > mChildJacobianNodes
JacobianNode children that descend from this JacobianNode.
Definition JacobianNode.hpp:305
virtual math::LinearJacobian getLinearJacobian(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the generalized Jacobian targeting an offset within the Frame of this BodyNode.
std::shared_ptr< const InverseKinematics > getIK() const
Get a pointer to an IK module for this JacobianNode.
Definition JacobianNode.cpp:66
virtual math::Jacobian getJacobianSpatialDeriv(const Eigen::Vector3d &_offset) const =0
Return the spatial time derivative of the generalized Jacobian targeting an offset in the Frame of th...
virtual math::Jacobian getJacobianClassicDeriv(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf=Frame::World()) const =0
A version of getJacobianClassicDeriv() that can compute the Jacobian for an offset within the Frame o...
virtual const math::Jacobian & getWorldJacobian() const =0
Return the generalized Jacobian targeting the origin of this JacobianNode.
virtual bool dependsOn(std::size_t _genCoordIndex) const =0
Return true if _genCoordIndex-th generalized coordinate.
std::shared_ptr< InverseKinematics > mIK
Inverse kinematics module which gets lazily created upon request.
Definition JacobianNode.hpp:302
bool mIsBodyJacobianSpatialDerivDirty
Dirty flag for spatial time derivative of body Jacobian.
Definition JacobianNode.hpp:296
virtual math::Jacobian getJacobianClassicDeriv(const Frame *_inCoordinatesOf) const =0
A version of getJacobianClassicDeriv() that can return the Jacobian in coordinates of any Frame.
virtual const math::Jacobian & getJacobianSpatialDeriv() const =0
Return the spatial time derivative of the generalized Jacobian targeting the origin of this BodyNode.
virtual math::LinearJacobian getLinearJacobianDeriv(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf=Frame::World()) const =0
A version of getLinearJacobianDeriv() that can compute the Jacobian for an offset within the Frame of...
virtual const math::Jacobian & getJacobianClassicDeriv() const =0
Return the classical time derivative of the generalized Jacobian targeting the origin of this BodyNod...
virtual DegreeOfFreedom * getDependentDof(std::size_t _index)=0
Get a pointer to the _indexth dependent DegreeOfFreedom for this BodyNode.
const std::shared_ptr< InverseKinematics > & createIK()
Create a new IK module for this JacobianNode.
Definition JacobianNode.cpp:72
virtual math::Jacobian getJacobian(const Eigen::Vector3d &_offset, const Frame *_inCoordinatesOf) const =0
A version of getJacobian(const Eigen::Vector3d&) that lets you specify a coordinate Frame to express ...
virtual math::Jacobian getJacobianSpatialDeriv(const Frame *_inCoordinatesOf) const =0
A version of getJacobianSpatialDeriv() that can return the Jacobian in coordinates of any Frame.
const std::shared_ptr< InverseKinematics > & getOrCreateIK()
Get a pointer to an IK module for this JacobianNode.
Definition JacobianNode.cpp:60
void dirtyJacobian()
Notify this BodyNode and all its descendents that their Jacobians need to be updated.
Definition JacobianNode.cpp:105
virtual math::LinearJacobian getLinearJacobian(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the linear Jacobian targeting the origin of this BodyNode.
virtual math::AngularJacobian getAngularJacobianDeriv(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the angular Jacobian time derivative, in terms of any coordinate Frame.
virtual const math::Jacobian & getJacobian() const =0
Return the generalized Jacobian targeting the origin of this JacobianNode.
virtual math::LinearJacobian getLinearJacobianDeriv(const Frame *_inCoordinatesOf=Frame::World()) const =0
Return the linear Jacobian (classical) time derivative, in terms of any coordinate Frame.
void notifyJacobianUpdate()
Notify this BodyNode and all its descendents that their Jacobians need to be updated.
Definition JacobianNode.cpp:99
virtual ~JacobianNode()
Virtual destructor.
Definition JacobianNode.cpp:44
void dirtyJacobianDeriv()
Notify this BodyNode and all its descendents that their Jacobian derivatives need to be updated.
Definition JacobianNode.cpp:126
virtual std::size_t getDependentGenCoordIndex(std::size_t _arrayIndex) const =0
Return a generalized coordinate index from the array index (< getNumDependentDofs)
bool mIsBodyJacobianDirty
Dirty flag for body Jacobian.
Definition JacobianNode.hpp:290
virtual std::size_t getNumDependentDofs() const =0
Same as getNumDependentGenCoords()
virtual const std::vector< std::size_t > & getDependentGenCoordIndices() const =0
Indices of the generalized coordinates which affect this JacobianNode.
void notifyJacobianDerivUpdate()
Notify this BodyNode and all its descendents that their Jacobian derivatives need to be updated.
Definition JacobianNode.cpp:120
bool mIsWorldJacobianDirty
Dirty flag for world Jacobian.
Definition JacobianNode.hpp:293
virtual const DegreeOfFreedom * getDependentDof(std::size_t _index) const =0
Get a pointer to the _indexth dependent DegreeOfFreedom for this BodyNode.
virtual const std::vector< const DegreeOfFreedom * > getChainDofs() const =0
Returns a DegreeOfFreedom vector containing the dofs that form a Chain leading up to this JacobianNod...
virtual const std::vector< DegreeOfFreedom * > & getDependentDofs()=0
Return a std::vector of DegreeOfFreedom pointers that this Node depends on.
virtual math::Jacobian getWorldJacobian(const Eigen::Vector3d &_offset) const =0
Return the generalized Jacobian targeting an offset in this JacobianNode.
bool mIsWorldJacobianClassicDerivDirty
Dirty flag for the classic time derivative of the Jacobian.
Definition JacobianNode.hpp:299
void clearIK()
Wipe away the IK module for this JacobianNode, leaving it as a nullptr.
Definition JacobianNode.cpp:79
virtual const std::vector< const DegreeOfFreedom * > & getDependentDofs() const =0
Return a std::vector of DegreeOfFreedom pointers that this Node depends on.
The Node class is a base class for BodyNode and any object that attaches to a BodyNode.
Definition Node.hpp:81
virtual const std::string & getName() const =0
Get the name of this Node.
virtual const std::string & setName(const std::string &newName)=0
Set the name of this Node.
Eigen::Matrix< double, 6, Eigen::Dynamic > Jacobian
Definition MathTypes.hpp:114
Eigen::Matrix< double, 3, Eigen::Dynamic > AngularJacobian
Definition MathTypes.hpp:113
Eigen::Matrix< double, 3, Eigen::Dynamic > LinearJacobian
Definition MathTypes.hpp:112
Definition BulletCollisionDetector.cpp:65
Definition SharedLibraryManager.hpp:46