33 #ifndef DART_DYNAMICS_HIERARCHICALIK_HPP_ 34 #define DART_DYNAMICS_HIERARCHICALIK_HPP_ 36 #include <unordered_set> 38 #include "dart/dynamics/InverseKinematics.hpp" 48 typedef std::vector<std::vector<std::shared_ptr<InverseKinematics> > >
76 bool solve(
bool applySolution =
true);
84 bool solve(Eigen::VectorXd& positions,
bool applySolution =
true);
122 Eigen::VectorXd& positions,
bool allowIncompleteResult =
true);
125 virtual std::shared_ptr<HierarchicalIK>
clone(
126 const SkeletonPtr& _newSkel)
const = 0;
138 virtual optimization::FunctionPtr
clone(
139 const std::shared_ptr<HierarchicalIK>& _newIK)
const = 0;
146 void setObjective(
const std::shared_ptr<optimization::Function>& _objective);
149 const std::shared_ptr<optimization::Function>&
getObjective();
152 std::shared_ptr<const optimization::Function>
getObjective()
const;
156 const std::shared_ptr<optimization::Function>& _nsObjective);
168 const std::shared_ptr<optimization::Problem>&
getProblem();
171 std::shared_ptr<const optimization::Problem>
getProblem()
const;
183 void setSolver(
const std::shared_ptr<optimization::Solver>& _newSolver);
186 const std::shared_ptr<optimization::Solver>&
getSolver();
189 std::shared_ptr<const optimization::Solver>
getSolver()
const;
236 Objective(
const std::shared_ptr<HierarchicalIK>& _ik);
242 optimization::FunctionPtr
clone(
243 const std::shared_ptr<HierarchicalIK>& _newIK)
const override;
246 double eval(
const Eigen::VectorXd& _x)
override;
250 const Eigen::VectorXd& _x, Eigen::Map<Eigen::VectorXd> _grad)
override;
254 std::weak_ptr<HierarchicalIK>
mIK;
269 Constraint(
const std::shared_ptr<HierarchicalIK>& _ik);
275 optimization::FunctionPtr
clone(
276 const std::shared_ptr<HierarchicalIK>& _newIK)
const override;
279 double eval(
const Eigen::VectorXd& _x)
override;
283 const Eigen::VectorXd& _x, Eigen::Map<Eigen::VectorXd> _grad)
override;
287 std::weak_ptr<HierarchicalIK>
mIK;
300 void initialize(
const std::shared_ptr<HierarchicalIK>& my_ptr);
304 void copyOverSetup(
const std::shared_ptr<HierarchicalIK>& _otherIK)
const;
316 std::shared_ptr<optimization::Solver>
mSolver;
325 std::weak_ptr<HierarchicalIK>
mPtr;
344 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
353 typedef std::unordered_set<std::shared_ptr<InverseKinematics> > ModuleSet;
354 typedef std::unordered_set<std::shared_ptr<const InverseKinematics> >
358 static std::shared_ptr<CompositeIK> create(
const SkeletonPtr& _skel);
361 std::shared_ptr<HierarchicalIK>
clone(
362 const SkeletonPtr& _newSkel)
const override;
365 virtual std::shared_ptr<CompositeIK> cloneCompositeIK(
366 const SkeletonPtr& _newSkel)
const;
371 bool addModule(
const std::shared_ptr<InverseKinematics>& _ik);
374 const ModuleSet& getModuleSet();
377 ConstModuleSet getModuleSet()
const;
387 std::unordered_set<std::shared_ptr<InverseKinematics> >
mModuleSet;
397 static std::shared_ptr<WholeBodyIK> create(
const SkeletonPtr& _skel);
400 std::shared_ptr<HierarchicalIK>
clone(
401 const SkeletonPtr& _newSkel)
const override;
404 virtual std::shared_ptr<WholeBodyIK> cloneWholeBodyIK(
405 const SkeletonPtr& _newSkel)
const;
418 #endif // DART_DYNAMICS_HIERARCHICALIK_HPP_ const std::vector< Eigen::MatrixXd > & computeNullSpaces() const
Compute the null spaces of each level of the hierarchy.
Definition: HierarchicalIK.cpp:252
const std::shared_ptr< optimization::Problem > & getProblem()
Get the Problem that is being maintained by this HierarchicalIK module.
Definition: HierarchicalIK.cpp:196
Eigen::VectorXd mLastPositions
Cache for the last positions.
Definition: HierarchicalIK.hpp:328
The Subject class is a base class for any object that wants to report when it gets destroyed...
Definition: Subject.hpp:57
Eigen::VectorXd mLevelGradCache
Cache for the gradient of a level.
Definition: HierarchicalIK.hpp:290
void copyOverSetup(const std::shared_ptr< HierarchicalIK > &_otherIK) const
Copy the setup of this HierarchicalIK module into another HierarchicalIK module.
Definition: HierarchicalIK.cpp:621
virtual std::shared_ptr< HierarchicalIK > clone(const SkeletonPtr &_newSkel) const =0
Clone this HierarchicalIK module.
math::Jacobian mJacCache
Cache for Jacobians.
Definition: HierarchicalIK.hpp:340
Eigen::VectorXd mTempGradCache
Cache for temporary gradients.
Definition: HierarchicalIK.hpp:293
SkeletonPtr getSkeleton()
Get the Skeleton that this IK module is associated with.
Definition: HierarchicalIK.cpp:366
virtual void refreshIKHierarchy()=0
Refresh the IK hierarchy of this IK module.
void setNullSpaceObjective(const std::shared_ptr< optimization::Function > &_nsObjective)
Set the null space objective for this HierarchicalIK.
Definition: HierarchicalIK.cpp:169
optimization::FunctionPtr mNullSpaceObjective
The null space Objective of this IK module.
Definition: HierarchicalIK.hpp:322
const std::shared_ptr< optimization::Function > & getObjective()
Get the objective function for this HierarchicalIK.
Definition: HierarchicalIK.cpp:156
IKHierarchy mHierarchy
Cache for the IK hierarcy.
Definition: HierarchicalIK.hpp:310
void initialize(const std::shared_ptr< HierarchicalIK > &my_ptr)
Setup the module.
Definition: HierarchicalIK.cpp:590
Definition: Aspect.cpp:40
SkeletonPtr getAffiliation()
This is the same as getSkeleton().
Definition: HierarchicalIK.cpp:378
This class should be inherited by optimization::Function classes that have a dependency on the Hierar...
Definition: HierarchicalIK.hpp:134
void resetProblem(bool _clearSeeds=false)
Reset the Problem that is being maintained by this HierarchicalIK module.
Definition: HierarchicalIK.cpp:208
bool hasNullSpaceObjective() const
Returns true if this HierarchicalIK has a null space objective.
Definition: HierarchicalIK.cpp:190
void clearCaches()
Clear the caches of this IK module.
Definition: HierarchicalIK.cpp:390
std::weak_ptr< HierarchicalIK > mIK
Pointer to this Constraint's HierarchicalIK module.
Definition: HierarchicalIK.hpp:287
void setPositions(const Eigen::VectorXd &_q)
Set the current joint positions of the Skeleton associated with this IK module.
Definition: HierarchicalIK.cpp:358
Eigen::MatrixXd mPartialNullspaceCache
Cache for a partial null space computation.
Definition: HierarchicalIK.hpp:334
std::shared_ptr< optimization::Solver > mSolver
The Solver that this IK module will use.
Definition: HierarchicalIK.hpp:316
Eigen::VectorXd getPositions() const
Get the current joint positions of the Skeleton associated with this IK module.
Definition: HierarchicalIK.cpp:348
The HierarchicalIK::Constraint Function is simply used to merge the constraints of the InverseKinemat...
Definition: HierarchicalIK.hpp:265
virtual optimization::FunctionPtr clone(const std::shared_ptr< HierarchicalIK > &_newIK) const =0
Enable this function to be cloned to a new IK module.
Eigen::JacobiSVD< math::Jacobian > mSVDCache
Cache for the null space SVD.
Definition: HierarchicalIK.hpp:337
The WholeBodyIK class provides an interface for simultaneously solving all the IK constraints of all ...
Definition: HierarchicalIK.hpp:393
Definition: Function.hpp:45
std::shared_ptr< optimization::Problem > mProblem
The Problem that this IK module is maintaining.
Definition: HierarchicalIK.hpp:313
std::unordered_set< std::shared_ptr< InverseKinematics > > mModuleSet
The set of modules being used by this CompositeIK.
Definition: HierarchicalIK.hpp:387
The HierarchicalIK class provides a convenient way of setting up a hierarchical inverse kinematics op...
Definition: HierarchicalIK.hpp:63
bool solveAndApply(bool allowIncompleteResult=true)
Identical to findSolution(), but this function applies the solution when the solver successfully foun...
Definition: HierarchicalIK.cpp:129
bool findSolution(Eigen::VectorXd &positions)
Finds a solution of the IK problem without applying the solution.
Definition: HierarchicalIK.cpp:67
Eigen::VectorXd mGradCache
Cache for the gradient computation.
Definition: HierarchicalIK.hpp:257
const IKHierarchy & getIKHierarchy() const
Get the IK hierarchy of this IK module.
Definition: HierarchicalIK.cpp:246
void setSolver(const std::shared_ptr< optimization::Solver > &_newSolver)
Set the Solver that should be used by this IK module, and set it up with the Problem that is configur...
Definition: HierarchicalIK.cpp:223
virtual ~Function()=default
Virtual destructor.
const std::shared_ptr< optimization::Function > & getNullSpaceObjective()
Get the null space objective for this HierarchicalIK.
Definition: HierarchicalIK.cpp:177
std::vector< Eigen::MatrixXd > mNullSpaceCache
Cache for null space computations.
Definition: HierarchicalIK.hpp:331
WeakSkeletonPtr mSkeleton
Pointer to the Skeleton that this IK is tied to.
Definition: HierarchicalIK.hpp:307
The HierarchicalIK::Objective Function is simply used to merge the objective and null space objective...
Definition: HierarchicalIK.hpp:232
void setObjective(const std::shared_ptr< optimization::Function > &_objective)
Set the objective function for this HierarchicalIK.
Definition: HierarchicalIK.cpp:149
HierarchicalIK(const SkeletonPtr &_skeleton)
Constructor.
Definition: HierarchicalIK.cpp:582
bool solve(bool applySolution=true)
Solve the IK Problem.
Definition: HierarchicalIK.cpp:44
optimization::FunctionPtr mObjective
The Objective of this IK module.
Definition: HierarchicalIK.hpp:319
virtual ~HierarchicalIK()=default
Virtual destructor.
The CompositeIK class allows you to specify an arbitrary hierarchy of InverseKinematics modules for a...
Definition: HierarchicalIK.hpp:350
const std::shared_ptr< optimization::Solver > & getSolver()
Get the Solver that is being used by this IK module.
Definition: HierarchicalIK.cpp:234
std::weak_ptr< HierarchicalIK > mIK
Pointer to this Objective's HierarchicalIK module.
Definition: HierarchicalIK.hpp:254
std::weak_ptr< HierarchicalIK > mPtr
Weak pointer to self.
Definition: HierarchicalIK.hpp:325