|
Simox
2.3.74.0
|
Data Structures | |
| struct | extManipData |
Public Member Functions | |
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW | PoseQualityExtendedManipulability (VirtualRobot::RobotNodeSetPtr rns, PoseQualityManipulability::ManipulabilityIndexType i=PoseQualityManipulability::eMinMaxRatio) |
| ~PoseQualityExtendedManipulability () | |
| float | getPoseQuality () override |
| float | getPoseQuality (PoseQualityManipulability::ManipulabilityIndexType i, int considerFirstSV) |
| float | getPoseQuality (const Eigen::VectorXf &direction) override |
| float | getManipulability (const Eigen::VectorXf &direction, int considerFirstSV=-1) override |
| bool | getDetailedAnalysis (extManipData &storeData, int considerFirstSV=0) |
| bool | getDetailedAnalysis (extManipData &storeData, bool(&dims)[6], int considerFirstSV=0) |
| std::vector< std::vector< float > > | getPermutationVector () |
| void | considerObstacles (bool enable, float alpha=40.0f, float beta=1.0f) |
| bool | consideringJointLimits () override |
| Indicates if joint limits are considered. More... | |
| PoseQualityMeasurementPtr | clone (RobotPtr newRobot) override |
| void | getSelfDistParameters (float &storeAlpha, float &storeBeta) |
Public Member Functions inherited from VirtualRobot::PoseQualityManipulability | |
| PoseQualityManipulability (VirtualRobot::RobotNodeSetPtr rns, ManipulabilityIndexType i=eMinMaxRatio) | |
| ~PoseQualityManipulability () | |
| float | getPoseQuality () override |
| virtual float | getManipulability (ManipulabilityIndexType i) |
| float | getPoseQuality (const Eigen::VectorXf &direction) override |
| virtual float | getManipulability (ManipulabilityIndexType i, int considerFirstSV) |
| Eigen::VectorXf | getSingularValues () |
| Eigen::MatrixXf | getSingularVectorCartesian () |
| virtual void | penalizeJointLimits (bool enable, float k=50.0f) |
| bool | consideringJointLimits () override |
| Indicates if joint limits are considered. More... | |
| PoseQualityMeasurementPtr | clone (RobotPtr newRobot) override |
Public Member Functions inherited from VirtualRobot::PoseQualityMeasurement | |
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW | PoseQualityMeasurement (VirtualRobot::RobotNodeSetPtr rns) |
| ~PoseQualityMeasurement () | |
| void | setVerbose (bool v) |
| VirtualRobot::RobotNodeSetPtr | getRNS () |
| std::string | getName () |
| A string that identifies the type of pose quality measure. More... | |
| virtual void | setObstacleDistanceVector (const Eigen::Vector3f &directionSurfaceToObstance) |
| virtual void | disableObstacleDistance () |
Static Public Member Functions | |
| static std::string | getTypeName () |
Static Public Member Functions inherited from VirtualRobot::PoseQualityManipulability | |
| static std::string | getTypeName () |
Protected Member Functions | |
| bool | getDetailedAnalysis (DifferentialIKPtr jacobian, RobotNodeSetPtr rns, extManipData &storeData, int considerFirstSV=0) |
| bool | getDetailedAnalysis (DifferentialIKPtr jacobian, RobotNodeSetPtr rns, extManipData &storeData, bool(&dims)[6], int considerFirstSV=0) |
| bool | getDetailedAnalysis (const Eigen::MatrixXf &jac, const std::vector< RobotNodePtr > &joints, extManipData &storeData, bool(&dims)[6], int considerFirstSV=0) |
| float | getPoseQuality (DifferentialIKPtr jacobian, RobotNodeSetPtr rns, PoseQualityManipulability::ManipulabilityIndexType i, int considerFirstSV) |
| bool | createCartDimPermutations (std::vector< std::vector< float > > &storePerm) |
| void | getQualityWeighting (float jv, float limitMin, float limitMax, float &storeWeightMin, float &storeWeightMax) |
| void | getPenalizations (const std::vector< RobotNodePtr > &joints, Eigen::VectorXf &penLo, Eigen::VectorXf &penHi) |
| Compute weightings w and store 1/sqrt(w) More... | |
| Eigen::MatrixXf | getJacobianWeighted (const Eigen::MatrixXf &jac, const std::vector< float > &directionVect, const Eigen::VectorXf &penLo, const Eigen::VectorXf &penHi) |
| bool | analyzeJacobian (const Eigen::MatrixXf &jac, Eigen::VectorXf &sv, Eigen::MatrixXf &singVectors, Eigen::MatrixXf &U, Eigen::MatrixXf &V, bool printInfo=false) |
| void | getObstaclePenalizations (RobotNodeSetPtr rns, const Eigen::Vector3f &obstVect, const Eigen::MatrixXf &jac, Eigen::MatrixXf &penObstLo, Eigen::MatrixXf &penObstHi) |
| void | getObstaclePenalizations (const std::vector< RobotNodePtr > &joints, const Eigen::Vector3f &obstVect, const Eigen::MatrixXf &jac, Eigen::MatrixXf &penObstLo, Eigen::MatrixXf &penObstHi) |
| Eigen::MatrixXf | getJacobianWeightedObstacles (const Eigen::MatrixXf &jac, const std::vector< float > &directionVect, const Eigen::VectorXf &penLo, const Eigen::VectorXf &penHi, const Eigen::MatrixXf &penObstLo, const Eigen::MatrixXf &penObstHi) |
Protected Member Functions inherited from VirtualRobot::PoseQualityManipulability | |
| float | getJointLimitPenalizationFactor () |
Protected Attributes | |
| std::vector< std::vector< float > > | cartDimPermutations |
| float | obstacle_alpha |
| float | obstacle_beta |
| extManipData | currentManipData |
| Eigen::MatrixXf | tmpJac |
| std::vector< RobotNodePtr > | joints |
Protected Attributes inherited from VirtualRobot::PoseQualityManipulability | |
| VirtualRobot::DifferentialIKPtr | jacobian |
| ManipulabilityIndexType | manipulabilityType |
| bool | penJointLimits |
| float | penJointLimits_k |
| float | penalizeRotationFactor |
| bool | convertMMtoM |
| if set, the Jacobian is computed in [m], while assuming the kinematic definitions to be in [mm] More... | |
Protected Attributes inherited from VirtualRobot::PoseQualityMeasurement | |
| std::string | name |
| VirtualRobot::RobotNodeSetPtr | rns |
| bool | considerObstacle |
| Eigen::Vector3f | obstacleDir |
| bool | verbose |
Additional Inherited Members | |
Public Types inherited from VirtualRobot::PoseQualityManipulability | |
| enum | ManipulabilityIndexType { eMultiplySV, eMinMaxRatio } |
This pose quality measure is an extended approach based on Yoshikawa's manipulability measure. It considers joint limits and hence a detailed analysis of the constrained manipulability of a kinematic chain can be performed. Additionally self-distance and distances to obstacles can be considered. For details see: {Vahrenkamp2012, author = {Nikolaus Vahrenkamp and Tamim Asfour and Giorgio Metta and Giulio Sandini and R"udiger Dillmann}, title = {Manipulability Analysis}, booktitle = {Proceedings of IEEE-RAS International Conference on Humanoid Robots (Humanoids)}, year = {2012} }
For performance reasons this class is not thread safe and cannot be used from different threads in parallel.
| VirtualRobot::PoseQualityExtendedManipulability::PoseQualityExtendedManipulability | ( | VirtualRobot::RobotNodeSetPtr | rns, |
| PoseQualityManipulability::ManipulabilityIndexType | i = PoseQualityManipulability::eMinMaxRatio |
||
| ) |
Constructor
| rns | The kinematic chain for which the quality should be computed. |
| i | The method that should be used to compute the quality. |
|
default |
|
protected |
Perform SVD on jac.
| sv | Singular vectors are stored in sv |
| singVectors | The scaled sing vectors are stored here (first one: length 1, the following are scaled according to their corresponding sv ratio) |
| U | The U matrix is stored here |
| V | The V matrix is stored here |
|
overridevirtual |
Reimplemented from VirtualRobot::PoseQualityMeasurement.
|
overridevirtual |
Indicates if joint limits are considered.
Reimplemented from VirtualRobot::PoseQualityMeasurement.
| void VirtualRobot::PoseQualityExtendedManipulability::considerObstacles | ( | bool | enable, |
| float | alpha = 40.0f, |
||
| float | beta = 1.0f |
||
| ) |
If enabled (standard = disabled), you must take care of setting the obstacle vector before computing the manipulability. (see PoseQualityMeasurement::setObstacleDistanceVector)
|
protected |
| bool VirtualRobot::PoseQualityExtendedManipulability::getDetailedAnalysis | ( | extManipData & | storeData, |
| int | considerFirstSV = 0 |
||
| ) |
| bool VirtualRobot::PoseQualityExtendedManipulability::getDetailedAnalysis | ( | extManipData & | storeData, |
| bool(&) | dims[6], | ||
| int | considerFirstSV = 0 |
||
| ) |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
overridevirtual |
Reimplemented from VirtualRobot::PoseQualityManipulability.
|
protected |
|
protected |
|
protected |
Compute weightings w and store 1/sqrt(w)
| std::vector< std::vector< float > > VirtualRobot::PoseQualityExtendedManipulability::getPermutationVector | ( | ) |
|
overridevirtual |
The main method for determining the pose quality. The current configuration of the corresponding RNS is analyzed and the quality is returned. See derived classes for details.
Reimplemented from VirtualRobot::PoseQualityMeasurement.
| float VirtualRobot::PoseQualityExtendedManipulability::getPoseQuality | ( | PoseQualityManipulability::ManipulabilityIndexType | i, |
| int | considerFirstSV | ||
| ) |
|
overridevirtual |
The quality is determined for a given Cartesian direction. The current configuration of the corresponding RNS is analyzed and the quality is returned.
| direction | A 3d or 6d vector with the Cartesian direction to investigate. |
Reimplemented from VirtualRobot::PoseQualityMeasurement.
|
protected |
|
protected |
Get the weighting for jv with limits. The weighting is computed as follows: w = ( (limitMax - limitMin)^2 (2jv - limitMax - limitMin) ) / ( 4(limitMax - jv)^2 (jv - limitMin)^2 ) In case jv is on the lower half of the joint range -> storeWeightMin = 1+w; storeWeightMax = 1 In case jv is on the upper half of the joint range -> storeWeightMin = 1; storeWeightMax = 1+w
| void VirtualRobot::PoseQualityExtendedManipulability::getSelfDistParameters | ( | float & | storeAlpha, |
| float & | storeBeta | ||
| ) |
|
static |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |