text: #ifndef IK_TRAJECTORY_HELPER_H
  #define IK_TRAJECTORY_HELPER_H
  
  enum IK2_Method
  {
  	IK2_JACOB_TRANS = 0,
  	IK2_PURE_PSEUDO,
  	IK2_DLS,
  	IK2_SDLS,
  	IK2_DLS_SVD,
  	IK2_VEL_DLS,
  	IK2_VEL_DLS_WITH_ORIENTATION,
  	IK2_VEL_DLS_WITH_NULLSPACE,
  	IK2_VEL_DLS_WITH_ORIENTATION_NULLSPACE,
  	IK2_VEL_SDLS,
  	IK2_VEL_SDLS_WITH_ORIENTATION,
  };
  
  class IKTrajectoryHelper
  {
  	struct IKTrajectoryHelperInternalData* m_data;
  
  public:
  	IKTrajectoryHelper();
  	virtual ~IKTrajectoryHelper();
  
  	bool computeIK(const double endEffectorTargetPosition[3],
  				   const double endEffectorTargetOrientation[4],
  				   const double endEffectorWorldPosition[3],
  				   const double endEffectorWorldOrientation[4],
  				   const double* q_old, int numQ, int endEffectorIndex,
  				   double* q_new, int ikMethod, const double* linear_jacobian, const double* angular_jacobian, int jacobian_size, const double dampIk[6]);
  
  	bool computeIK2(
  		const double* endEffectorTargetPositions,
  		const double* endEffectorCurrentPositions,
  		int numEndEffectors,
  		const double* q_current, int numQ,
  		double* q_new, int ikMethod, const double* linear_jacobians, const double dampIk[6]);
  
  	bool computeNullspaceVel(int numQ, const double* q_current, const double* lower_limit, const double* upper_limit, const double* joint_range, const double* rest_pose);
  	bool setDampingCoeff(int numQ, const double* coeff);
  };
  #endif  //IK_TRAJECTORY_HELPER_H
  