Skip to content
Snippets Groups Projects
Commit bbe884f4 authored by Mirko Wächter's avatar Mirko Wächter
Browse files

made jointlimitavoidance constraint compatible with limitless joints

parent 87fb6043
No related branches found
No related tags found
No related merge requests found
......@@ -38,3 +38,36 @@ JointLimitAvoidanceConstraint::JointLimitAvoidanceConstraint(const RobotPtr &rob
setReferenceConfiguration(reference);
}
double JointLimitAvoidanceConstraint::optimizationFunction(unsigned int /*id*/)
{
double value = 0;
float v;
for(size_t i = 0; i < nodeSet->getSize(); i++)
{
RobotNodePtr node = nodeSet->getNode(i);
if(node->isLimitless())
continue;
v = (node->getJointValue() - reference(i));
value += v * v;
}
return optimizationFunctionFactor * value;
}
Eigen::VectorXf JointLimitAvoidanceConstraint::optimizationGradient(unsigned int /*id*/)
{
Eigen::VectorXf gradient(nodeSet->getSize());
for(size_t i = 0; i < nodeSet->getSize(); i++)
{
RobotNodePtr node = nodeSet->getNode(i);
if(!node->isLimitless())
gradient(i) = 2 * (node->getJointValue() - reference(i));
else
gradient(i) = 0.0f;
}
return optimizationFunctionFactor * gradient;
}
......@@ -32,6 +32,9 @@ namespace VirtualRobot
{
public:
JointLimitAvoidanceConstraint(const RobotPtr& robot, const RobotNodeSetPtr& nodeSet);
protected:
double optimizationFunction(unsigned int) override;
Eigen::VectorXf optimizationGradient(unsigned int) override;
};
typedef boost::shared_ptr<JointLimitAvoidanceConstraint> JointLimitAvoidanceConstraintPtr;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment