00001 00026 #ifndef GOAL_MID_JOINT_H 00027 #define GOAL_MID_JOINT_H 00028 00029 #include "constrained_ik/constraint.h" 00030 00031 namespace constrained_ik 00032 { 00033 namespace constraints 00034 { 00042 class GoalMidJoint : public Constraint 00043 { 00044 public: 00045 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 00046 GoalMidJoint(); 00047 00054 void init(const Constrained_IK *ik) override; 00055 00057 constrained_ik::ConstraintResults evalConstraint(const SolverState &state) const override; 00058 00060 void loadParameters(const XmlRpc::XmlRpcValue &constraint_xml) override; 00061 00067 virtual Eigen::MatrixXd calcJacobian(const ConstraintData &cdata) const; 00068 00074 virtual Eigen::VectorXd calcError(const ConstraintData &cdata) const; 00075 00081 virtual bool checkStatus(const ConstraintData &cdata) const { return true;} //always return true 00082 00087 virtual double getWeight() const {return weight_;} 00088 00092 virtual void setWeight(double weight) {weight_ = weight;} 00093 00094 protected: 00095 double weight_; 00096 Eigen::VectorXd mid_range_; 00098 }; // class GoalMidJoint 00099 00100 } // namespace constraints 00101 } // namespace constrained_ik 00102 00103 00104 #endif // GOAL_MID_JOINT_H 00105