1 #ifndef IK_TRAJECTORY_HELPER_H
2 #define IK_TRAJECTORY_HELPER_H
3 
4 enum IK2_Method
5 {
6 	IK2_JACOB_TRANS = 0,
7 	IK2_PURE_PSEUDO,
8 	IK2_DLS,
9 	IK2_SDLS,
10 	IK2_DLS_SVD,
11 	IK2_VEL_DLS,
12 	IK2_VEL_DLS_WITH_ORIENTATION,
13 	IK2_VEL_DLS_WITH_NULLSPACE,
14 	IK2_VEL_DLS_WITH_ORIENTATION_NULLSPACE,
15 	IK2_VEL_SDLS,
16 	IK2_VEL_SDLS_WITH_ORIENTATION,
17 };
18 
19 class IKTrajectoryHelper
20 {
21 	struct IKTrajectoryHelperInternalData* m_data;
22 
23 public:
24 	IKTrajectoryHelper();
25 	virtual ~IKTrajectoryHelper();
26 
27 	bool computeIK(const double endEffectorTargetPosition[3],
28 				   const double endEffectorTargetOrientation[4],
29 				   const double endEffectorWorldPosition[3],
30 				   const double endEffectorWorldOrientation[4],
31 				   const double* q_old, int numQ, int endEffectorIndex,
32 				   double* q_new, int ikMethod, const double* linear_jacobian, const double* angular_jacobian, int jacobian_size, const double dampIk[6]);
33 
34 	bool computeIK2(
35 		const double* endEffectorTargetPositions,
36 		const double* endEffectorCurrentPositions,
37 		int numEndEffectors,
38 		const double* q_current, int numQ,
39 		double* q_new, int ikMethod, const double* linear_jacobians, const double dampIk[6]);
40 
41 	bool computeNullspaceVel(int numQ, const double* q_current, const double* lower_limit, const double* upper_limit, const double* joint_range, const double* rest_pose);
42 	bool setDampingCoeff(int numQ, const double* coeff);
43 };
44 #endif  //IK_TRAJECTORY_HELPER_H
45