DART
6.7.3
|
JacobianDLS refers to the Damped Least Squares Jacobian Pseudoinverse (specifically, Moore-Penrose Pseudoinverse). More...
#include <InverseKinematics.hpp>
Classes | |
struct | Properties |
struct | UniqueProperties |
Public Member Functions | |
JacobianDLS (InverseKinematics *_ik, const Properties &properties=Properties()) | |
Constructor. More... | |
virtual | ~JacobianDLS ()=default |
Virtual destructor. More... | |
std::unique_ptr< GradientMethod > | clone (InverseKinematics *_newIK) const override |
Enable this GradientMethod to be cloned to a new IK module. More... | |
void | computeGradient (const Eigen::Vector6d &_error, Eigen::VectorXd &_grad) override |
Override this function with your implementation of the gradient computation. More... | |
void | setDampingCoefficient (double _damping=DefaultIKDLSCoefficient) |
Set the damping coefficient. More... | |
double | getDampingCoefficient () const |
Get the damping coefficient. More... | |
Properties | getJacobianDLSProperties () const |
Get the Properties of this JacobianDLS. More... | |
void | evalGradient (const Eigen::VectorXd &_q, Eigen::Map< Eigen::VectorXd > _grad) |
This function is used to handle caching the gradient vector and interfacing with the solver. More... | |
const std::string & | getMethodName () const |
Get the name of this GradientMethod. More... | |
void | clampGradient (Eigen::VectorXd &_grad) const |
Clamp the gradient based on the clamp settings of this GradientMethod. More... | |
void | setComponentWiseClamp (double _clamp=DefaultIKGradientComponentClamp) |
Set the component-wise clamp for this GradientMethod. More... | |
double | getComponentWiseClamp () const |
Get the component-wise clamp for this GradientMethod. More... | |
void | applyWeights (Eigen::VectorXd &_grad) const |
Apply weights to the gradient based on the weight settings of this GradientMethod. More... | |
void | setComponentWeights (const Eigen::VectorXd &_weights) |
Set the weights that will be applied to each component of the gradient. More... | |
const Eigen::VectorXd & | getComponentWeights () const |
Get the weights of this GradientMethod. More... | |
void | convertJacobianMethodOutputToGradient (Eigen::VectorXd &grad, const std::vector< std::size_t > &dofs) |
Convert the gradient that gets generated by Jacobian methods into a gradient that can be used by a GradientDescentSolver. More... | |
Properties | getGradientMethodProperties () const |
Get the Properties of this GradientMethod. More... | |
void | clearCache () |
Clear the cache to force the gradient to be recomputed. More... | |
InverseKinematics * | getIK () |
Returns the IK module that this GradientMethod belongs to. More... | |
const InverseKinematics * | getIK () const |
Returns the IK module that this GradientMethod belongs to. More... | |
Protected Member Functions | |
void | sendDestructionNotification () const |
Send a destruction notification to all Observers. More... | |
void | addObserver (Observer *_observer) const |
Add an Observer to the list of Observers. More... | |
void | removeObserver (Observer *_observer) const |
Remove an Observer from the list of Observers. More... | |
Protected Attributes | |
UniqueProperties | mDLSProperties |
Properties of this Damped Least Squares method. More... | |
common::sub_ptr< InverseKinematics > | mIK |
The IK module that this GradientMethod belongs to. More... | |
std::string | mMethodName |
The name of this method. More... | |
Eigen::VectorXd | mLastPositions |
The last positions that was passed to this GradientMethod. More... | |
Eigen::VectorXd | mLastGradient |
The last gradient that was computed by this GradientMethod. More... | |
Properties | mGradientP |
Properties for this GradientMethod. More... | |
std::set< Observer * > | mObservers |
List of current Observers. More... | |
Private Attributes | |
Eigen::VectorXd | mInitialPositionsCache |
Cache used by convertJacobianMethodOutputToGradient to avoid reallocating this vector on each iteration. More... | |
JacobianDLS refers to the Damped Least Squares Jacobian Pseudoinverse (specifically, Moore-Penrose Pseudoinverse).
This is a very precise method for computing the gradient and is especially suitable for performing IK on industrial manipulators that need to follow very exact workspace paths. However, it is vulnerable to be jittery around singularities (though the damping helps with this), and each cycle might take more time to compute than the JacobianTranspose method (although the JacobianDLS method will usually converge in fewer cycles than JacobianTranspose).
|
explicit |
Constructor.
|
virtualdefault |
Virtual destructor.
|
protectedinherited |
Add an Observer to the list of Observers.
|
inherited |
Apply weights to the gradient based on the weight settings of this GradientMethod.
|
inherited |
Clamp the gradient based on the clamp settings of this GradientMethod.
|
inherited |
Clear the cache to force the gradient to be recomputed.
It should generally not be necessary to call this function.
|
overridevirtual |
Enable this GradientMethod to be cloned to a new IK module.
Implements dart::dynamics::InverseKinematics::GradientMethod.
|
overridevirtual |
Override this function with your implementation of the gradient computation.
The direction that this gradient points in should make the error worse if applied to the joint positions, because the Problem is configured as a gradient descent error minimization Problem.
The error vector that is passed in will be determined by the IK module's ErrorMethod. The expectation is that the first three components of the vector correspond to orientation error (in an angle-axis format) while the last three components correspond to translational error.
When implementing this function, you should assume that the Skeleton's current joint positions corresponds to the positions that you must use to compute the error. This function will only get called when an update is needed.
Implements dart::dynamics::InverseKinematics::GradientMethod.
|
inherited |
Convert the gradient that gets generated by Jacobian methods into a gradient that can be used by a GradientDescentSolver.
Not all Joint types can be integrated using standard addition (e.g. FreeJoint and BallJoint), therefore Jacobian-based differential methods will tend to generate gradients that cannot be correctly used by a simple addition-based GradientDescentSolver. Running your gradient through this function before returning it will make the gradient suitable for a standard solver.
|
inherited |
This function is used to handle caching the gradient vector and interfacing with the solver.
|
inherited |
Get the weights of this GradientMethod.
|
inherited |
Get the component-wise clamp for this GradientMethod.
double dart::dynamics::InverseKinematics::JacobianDLS::getDampingCoefficient | ( | ) | const |
Get the damping coefficient.
|
inherited |
Get the Properties of this GradientMethod.
|
inherited |
Returns the IK module that this GradientMethod belongs to.
|
inherited |
Returns the IK module that this GradientMethod belongs to.
InverseKinematics::JacobianDLS::Properties dart::dynamics::InverseKinematics::JacobianDLS::getJacobianDLSProperties | ( | ) | const |
Get the Properties of this JacobianDLS.
|
inherited |
Get the name of this GradientMethod.
|
protectedinherited |
Remove an Observer from the list of Observers.
|
protectedinherited |
Send a destruction notification to all Observers.
This will cause all Observers to behave as if this Subject has been permanently deleted, so it should only be called when that behavior is desired.
|
inherited |
Set the weights that will be applied to each component of the gradient.
If the number of components in _weights is smaller than the number of components in the gradient, then a weight of 1.0 will be applied to all components that are out of the range of _weights. Passing in an empty vector for _weights will effectively make all the gradient components unweighted.
|
inherited |
Set the component-wise clamp for this GradientMethod.
Each component of the gradient will be individually clamped to this size.
void dart::dynamics::InverseKinematics::JacobianDLS::setDampingCoefficient | ( | double | _damping = DefaultIKDLSCoefficient | ) |
Set the damping coefficient.
A higher damping coefficient will smooth out behavior around singularities but will also result in less precision in general. The default value is appropriate for most use cases.
|
protected |
Properties of this Damped Least Squares method.
|
protectedinherited |
Properties for this GradientMethod.
|
protectedinherited |
The IK module that this GradientMethod belongs to.
|
privateinherited |
Cache used by convertJacobianMethodOutputToGradient to avoid reallocating this vector on each iteration.
|
protectedinherited |
The last gradient that was computed by this GradientMethod.
|
protectedinherited |
The last positions that was passed to this GradientMethod.
|
protectedinherited |
The name of this method.
|
mutableprotectedinherited |
List of current Observers.