iCub-main
|
Abstract class for inverting chain's kinematics. More...
#include <iKinInv.h>
Public Member Functions | |
iKinCtrl (iKinChain &c, unsigned int _ctrlPose) | |
Constructor. | |
virtual void | setChainConstraints (bool _constrained) |
Enables/Disables joint angles constraints. | |
virtual yarp::sig::Vector | iterate (yarp::sig::Vector &xd, const unsigned int verbose=0)=0 |
Executes one iteration of the control algorithm. | |
virtual yarp::sig::Vector | solve (yarp::sig::Vector &xd, const double tol_size=IKINCTRL_DISABLED, const int max_iter=IKINCTRL_DISABLED, const unsigned int verbose=0, int *exit_code=NULL, bool *exhalt=NULL) |
Iterates the control algorithm trying to converge on the target. | |
virtual bool | test_convergence (const double tol_size)=0 |
Tests convergence by comparing the size of the algorithm internal structure (may be the gradient norm or the simplex size or whatever) to a certain tolerance. | |
virtual void | restart (const yarp::sig::Vector &q0) |
Reinitializes the algorithm's internal state and resets the starting point. | |
virtual std::string | getAlgoName ()=0 |
Returns the algorithm's name. | |
void | switchWatchDog (bool sw) |
Switch on/off the watchDog mechanism to trigger deadLocks. | |
virtual void | setInTargetTol (double tol_x) |
Sets tolerance for in-target check (5e-3 by default). | |
virtual double | getInTargetTol () const |
Returns tolerance for in-target check. | |
virtual void | setWatchDogTol (double tol_q) |
Sets tolerance for watchDog check (1e-4 by default). | |
virtual double | getWatchDogTol () const |
Returns tolerance for watchDog check. | |
virtual void | setWatchDogMaxIter (int maxIter) |
Sets maximum number of iterations to trigger the watchDog (200 by default). | |
virtual int | getWatchDogMaxIter () const |
Returns maximum number of iterations to trigger the watchDog. | |
virtual bool | isInTarget () |
Checks if the End-Effector is in target. | |
int | get_state () const |
Returns the algorithm's state. | |
void | set_ctrlPose (unsigned int _ctrlPose) |
Sets the state of Pose control settings. | |
unsigned int | get_ctrlPose () const |
Returns the state of Pose control settings. | |
unsigned int | get_dim () const |
Returns the number of Chain DOF. | |
unsigned int | get_iter () const |
Returns the number of performed iterations. | |
virtual yarp::sig::Vector | get_x () const |
Returns the actual cartesian position of the End-Effector. | |
virtual yarp::sig::Vector | get_e () const |
Returns the actual cartesian position error. | |
virtual void | set_q (const yarp::sig::Vector &q0) |
Sets the joint angles values. | |
virtual yarp::sig::Vector | get_q () const |
Returns the actual joint angles values. | |
virtual yarp::sig::Vector | get_grad () const |
Returns the actual gradient. | |
virtual yarp::sig::Matrix | get_J () const |
Returns the actual Jacobian used in computation. | |
virtual double | dist () const |
Returns the actual distance from the target in cartesian space (euclidean norm is used). | |
virtual | ~iKinCtrl () |
Default destructor. | |
Protected Member Functions | |
virtual yarp::sig::Vector | calc_e () |
Computes the error according to the current controller settings (complete pose/translational/rotational part). | |
virtual void | update_state () |
Updates the control state. | |
virtual void | watchDog () |
Handles the watchDog. | |
virtual yarp::sig::Vector | checkVelocity (const yarp::sig::Vector &_qdot, double _Ts) |
Checks each joint velocity and sets it to zero if it steers the joint out of range. | |
virtual void | inTargetFcn ()=0 |
Method called whenever in target. | |
virtual void | deadLockRecoveryFcn ()=0 |
Method called whenever the watchDog is triggered. | |
virtual void | printIter (const unsigned int verbose=0)=0 |
Dumps warning or status messages. | |
unsigned int | printHandling (const unsigned int verbose=0) |
Method to be called within the printIter routine inherited by children in order to handle the highest word of verbose integer. | |
Protected Attributes | |
iKinChain & | chain |
unsigned int | ctrlPose |
yarp::sig::Vector | x_set |
yarp::sig::Vector | x |
yarp::sig::Vector | e |
yarp::sig::Vector | q |
yarp::sig::Matrix | J |
yarp::sig::Matrix | Jt |
yarp::sig::Matrix | pinvJ |
yarp::sig::Vector | grad |
yarp::sig::Vector | q_old |
double | inTargetTol |
double | watchDogTol |
unsigned int | dim |
unsigned int | iter |
int | state |
bool | watchDogOn |
int | watchDogCnt |
int | watchDogMaxIter |
iKinCtrl::iKinCtrl | ( | iKinChain & | c, |
unsigned int | _ctrlPose | ||
) |
Constructor.
c | is the Chain object on which the control operates. Do not change Chain DOF from this point onwards!! |
_ctrlPose | one of the following: IKINCTRL_POSE_FULL => complete pose control. IKINCTRL_POSE_XYZ => translational part of pose controlled. IKINCTRL_POSE_ANG => rotational part of pose controlled. |
Definition at line 34 of file iKinInv.cpp.
|
inlinevirtual |
|
protectedvirtual |
Computes the error according to the current controller settings (complete pose/translational/rotational part).
Note that x must be previously set.
Definition at line 88 of file iKinInv.cpp.
|
protectedvirtual |
Checks each joint velocity and sets it to zero if it steers the joint out of range.
_qdot | is the joint velocities vector to be checked. |
_Ts | is the joint velocities sample time. |
Definition at line 200 of file iKinInv.cpp.
|
protectedpure virtual |
Method called whenever the watchDog is triggered.
Put here the code to recover from deadLock. Shall be implemented.
Implemented in iCub::iKin::SteepCtrl, iCub::iKin::LMCtrl, and iCub::iKin::MultiRefMinJerkCtrl.
|
inlinevirtual |
|
inline |
|
inline |
|
inlinevirtual |
|
inlinevirtual |
|
inline |
|
inlinevirtual |
|
inlinevirtual |
|
inline |
|
inlinevirtual |
|
pure virtual |
Returns the algorithm's name.
Implemented in iCub::iKin::SteepCtrl, iCub::iKin::VarKpSteepCtrl, iCub::iKin::LMCtrl, and iCub::iKin::MultiRefMinJerkCtrl.
|
inlinevirtual |
|
inlinevirtual |
|
inlinevirtual |
|
protectedpure virtual |
Method called whenever in target.
Shall be implemented.
Implemented in iCub::iKin::SteepCtrl, iCub::iKin::VarKpSteepCtrl, iCub::iKin::LMCtrl, and iCub::iKin::MultiRefMinJerkCtrl.
|
inlinevirtual |
|
pure virtual |
Executes one iteration of the control algorithm.
xd | is the End-Effector target Pose to be tracked. |
verbose | is a integer whose 32 bits are intended as follows. The lowest word (16 bits) progressively enables different levels of warning messages or status dump: the larger this value the more detailed is the output (0x####0000=>off by default). The highest word indicates how many successive calls to the dump shall be skipped in order to reduce the amount of information on the screen (ex: 0x0000####=>print all iterations, 0x0001####=>print one iteration and skip the next one, 0x0002####=> print one iteration and skip the next two). |
Implemented in iCub::iKin::MultiRefMinJerkCtrl, iCub::iKin::SteepCtrl, and iCub::iKin::LMCtrl.
|
protected |
Method to be called within the printIter routine inherited by children in order to handle the highest word of verbose integer.
Definition at line 159 of file iKinInv.cpp.
|
protectedpure virtual |
Dumps warning or status messages.
verbose | is a integer whose 32 bits are intended as follows. The lowest word (16 bits) progressively enables different levels of warning messages or status dump: the larger this value the more detailed is the output (0x####0000=>off by default). The highest word indicates how many successive calls to the dump shall be skipped in order to reduce the amount of information on the screen (ex: 0x0000####=>print all iterations, 0x0001####=>print one iteration and skip the next one, 0x0002####=> print one iteration and skip the next two). |
Implemented in iCub::iKin::SteepCtrl, iCub::iKin::LMCtrl, and iCub::iKin::MultiRefMinJerkCtrl.
|
virtual |
Reinitializes the algorithm's internal state and resets the starting point.
q0 | is the new starting point. |
Reimplemented in iCub::iKin::SteepCtrl, iCub::iKin::VarKpSteepCtrl, iCub::iKin::LMCtrl, and iCub::iKin::MultiRefMinJerkCtrl.
Definition at line 191 of file iKinInv.cpp.
void iKinCtrl::set_ctrlPose | ( | unsigned int | _ctrlPose | ) |
Sets the state of Pose control settings.
_ctrlPose | one of the following: IKINCTRL_POSE_FULL => complete pose control. IKINCTRL_POSE_XYZ => translational part of pose controlled. IKINCTRL_POSE_ANG => rotational part of pose controlled. |
Definition at line 64 of file iKinInv.cpp.
|
virtual |
Sets the joint angles values.
q0 | is the joint angles vector. |
Reimplemented in iCub::iKin::MultiRefMinJerkCtrl.
Definition at line 74 of file iKinInv.cpp.
|
inlinevirtual |
Enables/Disables joint angles constraints.
_constrained | if true then constraints are applied. |
Reimplemented in iCub::iKin::SteepCtrl, and iCub::iKin::LMCtrl.
|
inlinevirtual |
|
inlinevirtual |
|
inlinevirtual |
|
virtual |
Iterates the control algorithm trying to converge on the target.
xd | is the End-Effector target Pose to be tracked. |
tol_size | exits if test_convergence(tol_size) is true (tol_size<0 disables this check, default). |
max_iter | exits if iter>=max_iter (max_iter<0 disables this check, default). |
verbose | is a integer whose 32 bits are intended as follows. The lowest word (16 bits) progressively enables different levels of warning messages or status dump: the larger this value the more detailed is the output (0x####0000=>off by default). The highest word indicates how many successive calls to the dump shall be skipped in order to reduce the amount of information on the screen (ex: 0x0000####=>print all iterations, 0x0001####=>print one iteration and skip the next one, 0x0002####=> print one iteration and skip the next two). |
exit_code | stores the exit code (NULL by default). Test for one of this: IKINCTRL_RET_TOLX IKINCTRL_RET_TOLSIZE IKINCTRL_RET_TOLQ IKINCTRL_RET_MAXITER IKINCTRL_RET_EXHALT |
exhalt | checks for an external request to exit (NULL by default). |
Reimplemented in iCub::iKin::MultiRefMinJerkCtrl.
Definition at line 214 of file iKinInv.cpp.
|
inline |
|
pure virtual |
Tests convergence by comparing the size of the algorithm internal structure (may be the gradient norm or the simplex size or whatever) to a certain tolerance.
tol_size | is tolerance to compare to. Shall be implemented. |
Implemented in iCub::iKin::SteepCtrl, iCub::iKin::LMCtrl, and iCub::iKin::MultiRefMinJerkCtrl.
|
protectedvirtual |
Updates the control state.
Definition at line 126 of file iKinInv.cpp.
|
protectedvirtual |
Handles the watchDog.
Definition at line 172 of file iKinInv.cpp.