13 #include <Eigen/Dense> 14 #include <PtscEigen.hpp> 51 const Eigen::VectorXd &t_desired_value,
52 ApproachAxis t_approach_axis = Z);
58 std::string frame_name;
59 Eigen::VectorXd desired_value;
60 ApproachAxis approach_axis;
66 uint32_t max_iterations = 10000;
67 double err_norm_threshold = 1e-3;
68 double gradient_threshold = 1e-3;
69 double polish_gradient_threshold = 1e-2;
70 double dq_limit = (double)(10.0 * M_PI / 180.0);
71 double polish_dq_limit = (double)(3.0 * M_PI / 180.0);
72 double lin_err_clamp_magnitude = 0.2;
73 double ang_err_clamp_magnitude = 15.0 * M_PI / 180.0;
74 bool use_constrained_opt =
true;
75 bool polish_solution =
false;
76 bool debug_mode =
false;
85 void updateGradient(
double current_value);
86 double getGradient()
const;
88 double current_value_;
108 Pik(ros::NodeHandle &nh_,
const std::string &robot_name,
109 const std::string &joint_model_group_name,
118 Eigen::VectorXd solve(
const std::vector<IkTask> &ik_tasks,
119 const Eigen::VectorXd& q_initial_guess );
125 void goToJointPosition(
const Eigen::VectorXd &q)
const;
132 void printErrors(
const Eigen::VectorXd &q,
const std::vector<IkTask> &ik_tasks)
const;
137 const uint32_t n_dof_;
139 Eigen::Vector3d getOrientationErrorRPY( Eigen::Quaterniond desired_quat,
140 Eigen::Quaterniond current_quat,
141 bool clamp_err =
false )
const;
143 bool reachedErrNormThreshold(
const Eigen::VectorXd &q,
const std::vector<IkTask> &ik_tasks)
const;
144 static double getAbsGradientSum(
const std::vector<Gradient> &gradients);
145 bool reachedGradientThreshold(
const std::vector<Gradient> &gradients)
const;
147 Eigen::MatrixXd getTaskJacobian(
const Eigen::VectorXd &q,
IkTask task )
const;
148 Eigen::VectorXd solvePtscProblem(
const std::vector<PtscEigen::Task> &ptsc_tasks)
const;
150 Eigen::VectorXd getTaskValue(
const Eigen::VectorXd &q,
IkTask task )
const;
151 Eigen::VectorXd getTaskError(
const Eigen::VectorXd &q,
IkTask task,
bool clamp_err =
false )
const;
153 static Eigen::VectorXd clampMagnitude(
const Eigen::VectorXd &input_vec,
double magnitude);
154 static Eigen::VectorXd limitQ(
const Eigen::VectorXd &q);
155 static Eigen::VectorXd limitDq(
const Eigen::VectorXd &dq,
double dq_limit);
156 static Eigen::Quaterniond vec2quat(
const Eigen::VectorXd &q_vec);
158 bool reached_polish_solution_threshold_ =
false;
160 static int sign(
double a);
162 bool reachedStoppingCriteria()
const;
163 void initializeSolver(
const std::vector<IkTask> &ik_tasks,
164 const Eigen::VectorXd& q_initial_guess);
166 Eigen::VectorXd current_q_;
167 std::vector<PikRos::IkTask> ik_tasks_;
168 double solver_elapsed_time_;
169 std::vector<Gradient> current_gradients_;
170 uint32_t current_ik_iteration_;
Definition: PikRos.hpp:24
Gradient class.
Definition: PikRos.hpp:81
IkTask(IkTaskType t_type, const std::string &t_frame_name, const Eigen::VectorXd &t_desired_value, ApproachAxis t_approach_axis=Z)
Construct a new Ik Task object.
Definition: PikRos.cpp:17
Prioritized inverse kinematics solver.
Definition: PikRos.hpp:98
Eigen::Vector3d getAppAxisVector() const
Get the approach axis Vector.
Definition: PikRos.cpp:52
Definition: MoveItWrapper.hpp:20
Definition: PikRos.hpp:25
Ik task structure.
Definition: PikRos.hpp:40
IkTaskType
Definition: PikRos.hpp:20
Definition: PikRos.hpp:16
Definition: PikRos.hpp:23
Solver settings.
Definition: PikRos.hpp:64